summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKotresh HR <khiremat@redhat.com>2018-04-13 10:52:14 -0400
committerjiffin tony Thottan <jthottan@redhat.com>2018-06-11 10:17:36 +0000
commit978e85fcd53895cc4902ea0ab3cfcfacc1077315 (patch)
treedf7cd482790eed752d390315499271580d952015
parent68e3af4cc043a460e814215be2a7953d52b048ba (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>
-rw-r--r--geo-replication/syncdaemon/resource.py2
1 files changed, 1 insertions, 1 deletions
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py
index 7af3bda..6c2e176 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)