diff options
| author | ngkaho1234 <ngkaho1234@gmail.com> | 2016-03-17 04:27:53 +0000 |
|---|---|---|
| committer | ngkaho1234 <ngkaho1234@gmail.com> | 2016-03-17 04:27:53 +0000 |
| commit | b088876e58e9d57b0066f10d96ba02985457fda7 (patch) | |
| tree | 18074786ecc6fd8d1bb1c81f94ad582aa4cbdb05 /src/ext4_xattr.c | |
| parent | 0df604ce1c4268176aa9925b3deb6e05294ec145 (diff) | |
ext4_xattr: fix xattr functions not recognizing acl attribute name.
Diffstat (limited to 'src/ext4_xattr.c')
| -rw-r--r-- | src/ext4_xattr.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/ext4_xattr.c b/src/ext4_xattr.c index f5b0571..086245e 100644 --- a/src/ext4_xattr.c +++ b/src/ext4_xattr.c @@ -893,10 +893,15 @@ static const struct xattr_prefix prefix_tbl[] = { }; const char *ext4_extract_xattr_name(const char *full_name, size_t full_name_len, - uint8_t *name_index, size_t *name_len) + uint8_t *name_index, size_t *name_len, + bool *found) { int i; ext4_assert(name_index); + ext4_assert(found); + + *found = false; + if (!full_name_len) { if (name_len) *name_len = 0; @@ -908,11 +913,20 @@ const char *ext4_extract_xattr_name(const char *full_name, size_t full_name_len, size_t prefix_len = strlen(prefix_tbl[i].prefix); if (full_name_len >= prefix_len && !memcmp(full_name, prefix_tbl[i].prefix, prefix_len)) { + bool require_name = + prefix_tbl[i].prefix[prefix_len - 1] == '.'; *name_index = prefix_tbl[i].name_index; if (name_len) *name_len = full_name_len - prefix_len; - return full_name + prefix_len; + if (!(full_name_len - prefix_len) && require_name) + return NULL; + + *found = true; + if (require_name) + return full_name + prefix_len; + + return NULL; } } if (name_len) |
