55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
|
From 80087936cf49a08848ee054179e4044ef42cd29e Mon Sep 17 00:00:00 2001
|
||
|
From: Kotresh HR <khiremat@redhat.com>
|
||
|
Date: Fri, 13 Apr 2018 10:52:14 -0400
|
||
|
Subject: [PATCH 239/260] 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.
|
||
|
|
||
|
Upstream Reference
|
||
|
> BUG: 1567209
|
||
|
> Change-Id: I63575fc589d71f987bef1d350c030987738c78ad
|
||
|
> Patch: https://review.gluster.org/19872
|
||
|
|
||
|
BUG: 1565399
|
||
|
Change-Id: Ib4613719ac735a4e2856bc0655351f69f2467dac
|
||
|
Signed-off-by: Kotresh HR <khiremat@redhat.com>
|
||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/136820
|
||
|
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||
|
---
|
||
|
geo-replication/syncdaemon/resource.py | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py
|
||
|
index 4b2a266..d6618c1 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)
|
||
|
|
||
|
--
|
||
|
1.8.3.1
|
||
|
|