diff options
| author | Emmanuel Dreyfus <manu@netbsd.org> | 2020-07-20 07:54:39 +0200 | 
|---|---|---|
| committer | Amar Tumballi <amar@kadalu.io> | 2020-07-23 06:19:29 +0000 | 
| commit | b78f17659ec15a797a20b03b2f2493b5368ad1cc (patch) | |
| tree | 4e782afbd86022409452a2d7d187bf1069dd9e4d | |
| parent | 79869f4aa718459412962ac233b55cd06527442c (diff) | |
Screen the .attribute directory on NetBSD
This directory holds the extended attribute backing store on FFSv1
filesystems. It should be ignored by glusterfs just like the .glusterfs
directory.
Fixes: #1361
Change-Id: Ia259be2af722a651473a312b5044b431c2b01b10
Type: Bug
Signed-off-by: Emmanuel Dreyfus <manu@netbsd.org>
| -rw-r--r-- | xlators/storage/posix/src/posix-entry-ops.c | 39 | 
1 files changed, 39 insertions, 0 deletions
diff --git a/xlators/storage/posix/src/posix-entry-ops.c b/xlators/storage/posix/src/posix-entry-ops.c index c3a20f4c85c..8cc3ccf8c00 100644 --- a/xlators/storage/posix/src/posix-entry-ops.c +++ b/xlators/storage/posix/src/posix-entry-ops.c @@ -198,6 +198,19 @@ posix_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)          goto out;      } +#ifdef __NetBSD__ +    /* Same for NetBSD's .attribute directory */ +    if (__is_root_gfid(loc->pargfid) && loc->name && +        (strcmp(loc->name, ".attribute") == 0)) { +        gf_msg(this->name, GF_LOG_WARNING, EPERM, P_MSG_LOOKUP_NOT_PERMITTED, +               "Lookup issued on .attribute," +               " which is not permitted"); +        op_errno = EPERM; +        op_ret = -1; +        goto out; +    } +#endif /* __NetBSD__ */ +      op_ret = dict_get_int32_sizen(xdata, GF_GFIDLESS_LOOKUP, &gfidless);      op_ret = -1;      if (gf_uuid_is_null(loc->pargfid) || (loc->name == NULL)) { @@ -650,6 +663,19 @@ posix_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,          goto out;      } +#ifdef __NetBSD__ +    /* Same for NetBSD's .attribute directory */ +    if (__is_root_gfid(loc->pargfid) && +        (strcmp(loc->name, ".attribute") == 0)) { +        gf_msg(this->name, GF_LOG_WARNING, EPERM, P_MSG_MKDIR_NOT_PERMITTED, +               "mkdir issued on .attribute, which" +               "is not permitted"); +        op_errno = EPERM; +        op_ret = -1; +        goto out; +    } +#endif +      priv = this->private;      VALIDATE_OR_GOTO(priv, out);      GFID_NULL_CHECK_AND_GOTO(frame, this, loc, xdata, op_ret, op_errno, @@ -1416,6 +1442,19 @@ posix_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,          goto out;      } +#ifdef __NetBSD__ +    /* Same for NetBSD's .attribute directory */ +    if (__is_root_gfid(loc->pargfid) && +        (strcmp(loc->name, ".attribute") == 0)) { +        gf_msg(this->name, GF_LOG_WARNING, EPERM, P_MSG_RMDIR_NOT_PERMITTED, +               "rmdir issued on .attribute, which" +               "is not permitted"); +        op_errno = EPERM; +        op_ret = -1; +        goto out; +    } +#endif +      priv = this->private;      MAKE_ENTRY_HANDLE(real_path, par_path, this, loc, &stbuf);  | 
