summaryrefslogtreecommitdiff
path: root/src/ext4_xattr.c
diff options
context:
space:
mode:
authorngkaho1234 <ngkaho1234@gmail.com>2016-03-17 04:27:53 +0000
committerngkaho1234 <ngkaho1234@gmail.com>2016-03-17 04:27:53 +0000
commitb088876e58e9d57b0066f10d96ba02985457fda7 (patch)
tree18074786ecc6fd8d1bb1c81f94ad582aa4cbdb05 /src/ext4_xattr.c
parent0df604ce1c4268176aa9925b3deb6e05294ec145 (diff)
ext4_xattr: fix xattr functions not recognizing acl attribute name.
Diffstat (limited to 'src/ext4_xattr.c')
-rw-r--r--src/ext4_xattr.c18
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)