diff options
author | Kotresh HR <khiremat@redhat.com> | 2018-04-13 10:52:14 -0400 |
---|---|---|
committer | jiffin tony Thottan <jthottan@redhat.com> | 2018-06-11 10:17:36 +0000 |
commit | 978e85fcd53895cc4902ea0ab3cfcfacc1077315 (patch) | |
tree | df7cd482790eed752d390315499271580d952015 /geo-replication | |
parent | 68e3af4cc043a460e814215be2a7953d52b048ba (diff) |
geo-rep: Fix syncing of symlink
Problem:
If symlink is created on master pointing
to current directory (e.g symlink -> ".") with
non root uid or gid, geo-rep worker crashes
with ENOTSUP.
Cause:
Geo-rep creates the symlink on slave and
fixes the uid and gid using chown cmd.
os.chown dereferences the symlink which is
pointing to ".gfid" which is not supported.
Note that geo-rep operates on aux-gfid-mount
(e.g. "/mnt/.gfid/<gfid-of-symlink-file>").
Solution:
The uid or gid change is acutally on symlink
file. So use os.lchown, i.e, don't deference.
Backport of
> BUG: 1567209
> Patch: https://review.gluster.org/20017
BUG: 1577845
fixes: bz#1577845
Change-Id: I63575fc589d71f987bef1d350c030987738c78ad
Signed-off-by: Kotresh HR <khiremat@redhat.com>
Diffstat (limited to 'geo-replication')
-rw-r--r-- | geo-replication/syncdaemon/resource.py | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index 7af3bda4bef..6c2e1768cb1 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -868,7 +868,7 @@ class Server(object): # UID:0 and GID:0, and then call chown to set UID/GID if uid != 0 or gid != 0: path = os.path.join(pfx, gfid) - cmd_ret = errno_wrap(os.chown, [path, uid, gid], [ENOENT], + cmd_ret = errno_wrap(os.lchown, [path, uid, gid], [ENOENT], [ESTALE, EINVAL]) collect_failure(e, cmd_ret) |