if (q == NULL)
return (1);
r = mbr_uuid_to_id((const unsigned char *)q, &ugid, &idtype);
- if (r != 0)
+ if (r != 0) {
+ acl_free(q);
return (1);
+ }
if (idtype == ID_TYPE_UID) {
*ae_tag = ARCHIVE_ENTRY_ACL_USER;
pwd = getpwuuid(q);
*ae_name = archive_read_disk_gname(a, *ae_id);
}
} else
- return (1);
- return (0);
+ r = 1;
+
+ acl_free(q);
+ return (r);
}
/*
acl_permset_t acl_permset;
int i, entry_acl_type;
int r, s, ae_id, ae_tag, ae_perm;
+#if !HAVE_DARWIN_ACL
+ void *q;
+#endif
const char *ae_name;
#if HAVE_ACL_TYPE_NFS4
switch (acl_tag) {
#if !HAVE_DARWIN_ACL /* FreeBSD, Linux */
case ACL_USER:
- ae_id = (int)*(uid_t *)acl_get_qualifier(acl_entry);
- ae_name = archive_read_disk_uname(&a->archive, ae_id);
+ q = acl_get_qualifier(acl_entry);
+ if (q != NULL) {
+ ae_id = (int)*(uid_t *)q;
+ acl_free(q);
+ ae_name = archive_read_disk_uname(&a->archive,
+ ae_id);
+ }
ae_tag = ARCHIVE_ENTRY_ACL_USER;
break;
case ACL_GROUP:
- ae_id = (int)*(gid_t *)acl_get_qualifier(acl_entry);
- ae_name = archive_read_disk_gname(&a->archive, ae_id);
+ q = acl_get_qualifier(acl_entry);
+ if (q != NULL) {
+ ae_id = (int)*(gid_t *)q;
+ acl_free(q);
+ ae_name = archive_read_disk_gname(&a->archive,
+ ae_id);
+ }
ae_tag = ARCHIVE_ENTRY_ACL_GROUP;
break;
case ACL_MASK:
struct archive *a;
struct archive_entry *ae;
int n, fd, flags, dflags;
- char *func;
+ char *func, *acl_text;
const char *acl1_text, *acl2_text, *acl3_text;
#if HAVE_SUN_ACL
acl_t *acl, *acl1, *acl2, *acl3;
func = "acl_set_fd()";
n = acl_set_fd(fd, acl1);
#endif
+ acl_free(acl1);
+
if (n != 0) {
#if HAVE_SUN_ACL
if (errno == ENOSYS)
func = "acl_set_fd()";
n = acl_set_fd(fd, acl2);
#endif
- if (n != 0) {
- acl_free(acl2);
+ acl_free(acl2);
+ if (n != 0)
close(fd);
- }
failure("%s: errno = %d (%s)", func, errno, strerror(errno));
assertEqualInt(0, n);
close(fd);
func = "acl_set_file()";
n = acl_set_file("d2", ACL_TYPE_DEFAULT, acl3);
#endif
- if (n != 0)
- acl_free(acl3);
+ acl_free(acl3);
+
failure("%s: errno = %d (%s)", func, errno, strerror(errno));
assertEqualInt(0, n);
while (ARCHIVE_OK == archive_read_next_header2(a, ae)) {
archive_read_disk_descend(a);
if (strcmp(archive_entry_pathname(ae), "./f1") == 0) {
- assertEqualString(archive_entry_acl_to_text(ae, NULL, flags), acl1_text);
-
+ acl_text = archive_entry_acl_to_text(ae, NULL, flags);
+ assertEqualString(acl_text, acl1_text);
+ free(acl_text);
} else if (strcmp(archive_entry_pathname(ae), "./d/f1") == 0) {
- assertEqualString(archive_entry_acl_to_text(ae, NULL, flags), acl2_text);
+ acl_text = archive_entry_acl_to_text(ae, NULL, flags);
+ assertEqualString(acl_text, acl2_text);
+ free(acl_text);
} else if (strcmp(archive_entry_pathname(ae), "./d2") == 0) {
- assertEqualString(archive_entry_acl_to_text(ae, NULL, dflags), acl3_text);
+ acl_text = archive_entry_acl_to_text(ae, NULL, dflags);
+ assertEqualString(acl_text, acl3_text);
+ free(acl_text);
}
}
- archive_free(a);
+ archive_entry_free(ae);
+ assertEqualInt(ARCHIVE_OK, archive_free(a));
#endif
}
static void
compare_acl_text(struct archive_entry *ae, int flags, const char *s)
{
- const char *text;
- const wchar_t *wtext;
+ char *text;
+ wchar_t *wtext;
wchar_t *ws;
ssize_t slen;
assertEqualWString(wtext, ws);
if (wtext != NULL) {
assertEqualInt(wcslen(wtext), slen);
- free(ws);
- ws = NULL;
}
+ free(text);
+ free(wtext);
+ free(ws);
}
DEFINE_TEST(test_acl_from_text)
assertEqualInt(6, archive_entry_acl_reset(ae,
ARCHIVE_ENTRY_ACL_TYPE_NFS4));
archive_entry_acl_clear(ae);
+
+ free(ws);
+ archive_entry_free(ae);
}
DEFINE_TEST(test_acl_to_text)
/* NFSv4 ACLs like "getfacl -i" on FreeBSD */
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[10]);
+
+ archive_entry_free(ae);
}