|
@@ -246,13 +246,36 @@ xattrs__acls_set (struct tar_stat_info const *st,
|
|
|
acl_free (acl);
|
|
|
}
|
|
|
|
|
|
+/* Cleanup textual representation of the ACL in VAL by eliminating tab
|
|
|
+ characters and comments */
|
|
|
+static void
|
|
|
+xattrs_acls_cleanup (char *val, size_t *plen)
|
|
|
+{
|
|
|
+ char *p, *q;
|
|
|
+
|
|
|
+ p = q = val + strcspn (val, "#\t");
|
|
|
+ while (*q)
|
|
|
+ {
|
|
|
+ if (*q == '\t')
|
|
|
+ q++;
|
|
|
+ else if (*q == '#')
|
|
|
+ {
|
|
|
+ while (*q != '\n')
|
|
|
+ q++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ *p++ = *q++;
|
|
|
+ }
|
|
|
+ *plen = p - val;
|
|
|
+ *p++ = 0;
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
xattrs__acls_get_a (int parentfd, const char *file_name,
|
|
|
struct tar_stat_info *st,
|
|
|
char **ret_ptr, size_t * ret_len)
|
|
|
{
|
|
|
char *val = NULL;
|
|
|
- ssize_t len;
|
|
|
acl_t acl;
|
|
|
|
|
|
if (!(acl = acl_get_file_at (parentfd, file_name, ACL_TYPE_ACCESS)))
|
|
@@ -262,7 +285,7 @@ xattrs__acls_get_a (int parentfd, const char *file_name,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- val = acl_to_text (acl, &len);
|
|
|
+ val = acl_to_text (acl, NULL);
|
|
|
acl_free (acl);
|
|
|
|
|
|
if (!val)
|
|
@@ -272,8 +295,7 @@ xattrs__acls_get_a (int parentfd, const char *file_name,
|
|
|
}
|
|
|
|
|
|
*ret_ptr = xstrdup (val);
|
|
|
- *ret_len = len;
|
|
|
-
|
|
|
+ xattrs_acls_cleanup (*ret_ptr, ret_len);
|
|
|
acl_free (val);
|
|
|
}
|
|
|
|
|
@@ -284,7 +306,6 @@ xattrs__acls_get_d (int parentfd, char const *file_name,
|
|
|
char **ret_ptr, size_t * ret_len)
|
|
|
{
|
|
|
char *val = NULL;
|
|
|
- ssize_t len;
|
|
|
acl_t acl;
|
|
|
|
|
|
if (!(acl = acl_get_file_at (parentfd, file_name, ACL_TYPE_DEFAULT)))
|
|
@@ -294,7 +315,7 @@ xattrs__acls_get_d (int parentfd, char const *file_name,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- val = acl_to_text (acl, &len);
|
|
|
+ val = acl_to_text (acl, NULL);
|
|
|
acl_free (acl);
|
|
|
|
|
|
if (!val)
|
|
@@ -304,8 +325,7 @@ xattrs__acls_get_d (int parentfd, char const *file_name,
|
|
|
}
|
|
|
|
|
|
*ret_ptr = xstrdup (val);
|
|
|
- *ret_len = len;
|
|
|
-
|
|
|
+ xattrs_acls_cleanup (*ret_ptr, ret_len);
|
|
|
acl_free (val);
|
|
|
}
|
|
|
#endif /* HAVE_POSIX_ACLS */
|