312c9bafe1
Resolves: bz#1546717 bz#1557551 bz#1558948 bz#1561999 bz#1563804 Resolves: bz#1565015 bz#1565119 bz#1565399 bz#1565577 bz#1567100 Resolves: bz#1567899 bz#1568374 bz#1568969 bz#1569490 bz#1570514 Resolves: bz#1570541 bz#1570582 bz#1571645 bz#1572087 bz#1572585 Resolves: bz#1575895 Signed-off-by: Milind Changire <mchangir@redhat.com>
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
|
|
|