glusterfs/0239-geo-rep-Fix-syncing-of-symlink.patch
Milind Changire 312c9bafe1 autobuild v3.12.2-9
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>
2018-05-09 08:42:05 -04:00

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