diff options
-rw-r--r-- | xlators/storage/posix/src/posix-inode-fd-ops.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/xlators/storage/posix/src/posix-inode-fd-ops.c b/xlators/storage/posix/src/posix-inode-fd-ops.c index fc7375e43ff..496f6a7905b 100644 --- a/xlators/storage/posix/src/posix-inode-fd-ops.c +++ b/xlators/storage/posix/src/posix-inode-fd-ops.c @@ -27,6 +27,7 @@ #include <sys/uio.h> #include <unistd.h> #include <ftw.h> +#include <regex.h> #ifndef GF_BSD_HOST_OS #include <alloca.h> @@ -2802,6 +2803,27 @@ out: return ret; } +gf_boolean_t +posix_is_mds_xattr (const char *name) +{ + regex_t regcmpl; + char *key = {"trusted.glusterfs.*.mds$"}; + regmatch_t result[1] = {{0} }; + gf_boolean_t status = _gf_false; + + if (regcomp (®cmpl, key, REG_EXTENDED)) { + goto out; + } + if (!regexec (®cmpl, name, 1, result, 0)) { + status = _gf_true; + goto out; + } +out: + regfree(®cmpl); + return status; +} + + /** * posix_getxattr - this function returns a dictionary with all the * key:value pair present as xattr. used for @@ -2856,6 +2878,13 @@ posix_getxattr (call_frame_t *frame, xlator_t *this, goto out; } + if (name && posix_is_mds_xattr (name)) { + op_ret = -1; + op_errno = ENOATTR; + goto out; + } + + if (loc->inode && IA_ISDIR(loc->inode->ia_type) && name && ZR_FILE_CONTENT_REQUEST(name)) { ret = posix_get_file_contents (this, loc->gfid, &name[15], @@ -3234,6 +3263,10 @@ posix_getxattr (call_frame_t *frame, xlator_t *this, goto ignore; } + if (posix_is_mds_xattr (keybuffer)) { + goto ignore; + } + memset (value_buf, '\0', XATTR_VAL_BUF_SIZE); have_val = _gf_false; size = sys_lgetxattr (real_path, keybuffer, value_buf, |