diff options
author | N Balachandran <nbalacha@redhat.com> | 2018-02-06 15:20:16 +0530 |
---|---|---|
committer | jiffin tony Thottan <jthottan@redhat.com> | 2018-02-08 04:30:08 +0000 |
commit | b0544a8f7257660e9c9a24284f262a5a384ee6cd (patch) | |
tree | 55c412318b8619496876b68e7d459c9a4b576e3e /xlators/cluster/dht/src | |
parent | 187e8e8d879675048b1b133e5eb8a06ad3cc6f2a (diff) |
cluster/dht: Unlink linkto files as root
Non-privileged users cannot delete linkto
files. However the failure to unlink a stale linkto
causes DHT to fail the lookup with EIO and hence
prevent access to the file.
> Change-Id: Id295362d41e52263790694602f36f1219f0646a2
> BUG: 1542318
> Signed-off-by: N Balachandran <nbalacha@redhat.com>
Change-Id: Id295362d41e52263790694602f36f1219f0646a2
BUG: 1543016
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src')
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index d977c1f87a1..f7bc4675630 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -1402,6 +1402,8 @@ dht_lookup_unlink_of_false_linkto_cbk (call_frame_t *frame, void *cookie, local = (dht_local_t*)frame->local; path = local->loc.path; + FRAME_SU_UNDO (frame, dht_local_t); + gf_msg (this->name, GF_LOG_INFO, 0, DHT_MSG_UNLINK_LOOKUP_INFO, "lookup_unlink returned with " "op_ret -> %d and op-errno -> %d for %s", op_ret, op_errno, @@ -1471,6 +1473,7 @@ dht_lookup_unlink_stale_linkto_cbk (call_frame_t *frame, void *cookie, "op_errno %d for %s", op_ret, op_errno, ((path==NULL)?"null":path)); + FRAME_SU_UNDO (frame, dht_local_t); DHT_STACK_UNWIND (lookup, frame, -1, ENOENT, NULL, NULL, NULL, NULL); @@ -1627,15 +1630,15 @@ dht_lookup_everywhere_done (call_frame_t *frame, xlator_t *this) DHT_STACK_UNWIND (lookup, frame, -1, ENOENT, NULL, NULL, NULL, NULL); } else { - local->skip_unlink.handle_valid_link = _gf_false; + local->skip_unlink.handle_valid_link = _gf_false; gf_msg_debug (this->name, 0, "No Cached was found and " "unlink on hashed was skipped" " so performing now: %s", local->loc.path); - - STACK_WIND (frame, + FRAME_SU_DO (frame, dht_local_t); + STACK_WIND (frame, dht_lookup_unlink_stale_linkto_cbk, hashed_subvol, hashed_subvol->fops->unlink, @@ -1760,6 +1763,7 @@ dht_lookup_everywhere_done (call_frame_t *frame, xlator_t *this) NULL, NULL); } else { local->call_cnt = 1; + FRAME_SU_DO (frame, dht_local_t); STACK_WIND (frame, dht_lookup_unlink_of_false_linkto_cbk, hashed_subvol, |