summaryrefslogtreecommitdiffstats
path: root/xlators/features
diff options
context:
space:
mode:
authorAnoop C S <anoopcs@redhat.com>2016-02-17 15:50:05 +0530
committerJeff Darcy <jdarcy@redhat.com>2016-02-29 23:55:47 -0800
commitb1cb581424305592fac5394a578b307117b22fe7 (patch)
tree3a6ffff5854dcc418b1e0a6fbd631428ac06fd93 /xlators/features
parent2102010edab355ac9882eea41a46edaca8b9d02c (diff)
features/trash: Retain file permissions during truncate
Consider the situation where directory path for a truncated file does not exists under trash directory. In this scenario after creating the required path we failed to create the orginal file with proper permissions. Eventhough we try to fetch permissions from local->origpath, it was never filled with required value in truncate and ftruncate call paths. This change will copy original location to local->origpath inside both fop handling functions. Change-Id: If5930b6d368d08e58f04db999f3f9edb9250bcb9 BUG: 1309342 Signed-off-by: Anoop C S <anoopcs@redhat.com> Reviewed-on: http://review.gluster.org/13461 Smoke: Gluster Build System <jenkins@build.gluster.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com> Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Diffstat (limited to 'xlators/features')
-rw-r--r--xlators/features/trash/src/trash.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/xlators/features/trash/src/trash.c b/xlators/features/trash/src/trash.c
index 964817ef9f1..1381e8b049d 100644
--- a/xlators/features/trash/src/trash.c
+++ b/xlators/features/trash/src/trash.c
@@ -1070,7 +1070,6 @@ trash_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,
loc_copy (&local->loc, loc);
/* rename new location of file as starting from trash directory */
- strcpy (local->origpath, pathbuf);
copy_trash_path (priv->newtrash_dir, (frame->root->pid < 0),
local->newpath);
strcat (local->newpath, pathbuf);
@@ -1722,6 +1721,8 @@ trash_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc,
goto out;
}
+ strcpy (local->origpath, pathbuf);
+
loc_copy (&local->loc, loc);
local->loc.path = pathbuf;
local->fop_offset = offset;
@@ -1816,6 +1817,8 @@ trash_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,
goto out;
}
+ strcpy (local->origpath, pathbuf);
+
/* To convert fd to location */
frame->local=local;