Jaromir Koncicky da58d4e
diff -ruN libarchive-3.1.2/libarchive/archive_read_disk_entry_from_file.c libarchive-3.1.2.fixed/libarchive/archive_read_disk_entry_from_file.c
Jaromir Koncicky da58d4e
--- libarchive-3.1.2/libarchive/archive_read_disk_entry_from_file.c	2013-02-08 01:52:07.000000000 +0100
Jaromir Koncicky da58d4e
+++ libarchive-3.1.2.fixed/libarchive/archive_read_disk_entry_from_file.c	2013-08-08 10:47:41.000000000 +0200
Jaromir Koncicky da58d4e
@@ -399,7 +399,7 @@
Jaromir Koncicky da58d4e
 #endif
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
-#if defined(HAVE_POSIX_ACL) && defined(ACL_TYPE_NFS4)
Jaromir Koncicky da58d4e
+#ifdef HAVE_POSIX_ACL
Jaromir Koncicky da58d4e
 static int translate_acl(struct archive_read_disk *a,
Jaromir Koncicky da58d4e
     struct archive_entry *entry, acl_t acl, int archive_entry_acl_type);
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
@@ -419,6 +419,7 @@
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 	archive_entry_acl_clear(entry);
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 	/* Try NFS4 ACL first. */
Jaromir Koncicky da58d4e
 	if (*fd >= 0)
Jaromir Koncicky da58d4e
 		acl = acl_get_fd(*fd);
Jaromir Koncicky da58d4e
@@ -447,6 +448,7 @@
Jaromir Koncicky da58d4e
 		acl_free(acl);
Jaromir Koncicky da58d4e
 		return (ARCHIVE_OK);
Jaromir Koncicky da58d4e
 	}
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 	/* Retrieve access ACL from file. */
Jaromir Koncicky da58d4e
 	if (*fd >= 0)
Jaromir Koncicky da58d4e
@@ -492,6 +494,7 @@
Jaromir Koncicky da58d4e
         {ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
Jaromir Koncicky da58d4e
         {ARCHIVE_ENTRY_ACL_WRITE, ACL_WRITE},
Jaromir Koncicky da58d4e
         {ARCHIVE_ENTRY_ACL_READ, ACL_READ},
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
         {ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
Jaromir Koncicky da58d4e
         {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
Jaromir Koncicky da58d4e
         {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
Jaromir Koncicky da58d4e
@@ -508,8 +511,10 @@
Jaromir Koncicky da58d4e
         {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_ACL},
Jaromir Koncicky da58d4e
         {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_WRITE_OWNER},
Jaromir Koncicky da58d4e
         {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 };
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 static struct {
Jaromir Koncicky da58d4e
         int archive_inherit;
Jaromir Koncicky da58d4e
         int platform_inherit;
Jaromir Koncicky da58d4e
@@ -519,21 +524,25 @@
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_NO_PROPAGATE_INHERIT},
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY}
Jaromir Koncicky da58d4e
 };
Jaromir Koncicky da58d4e
-
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 static int
Jaromir Koncicky da58d4e
 translate_acl(struct archive_read_disk *a,
Jaromir Koncicky da58d4e
     struct archive_entry *entry, acl_t acl, int default_entry_acl_type)
Jaromir Koncicky da58d4e
 {
Jaromir Koncicky da58d4e
 	acl_tag_t	 acl_tag;
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 	acl_entry_type_t acl_type;
Jaromir Koncicky da58d4e
 	acl_flagset_t	 acl_flagset;
Jaromir Koncicky da58d4e
+	int brand, r;
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 	acl_entry_t	 acl_entry;
Jaromir Koncicky da58d4e
 	acl_permset_t	 acl_permset;
Jaromir Koncicky da58d4e
-	int		 brand, i, r, entry_acl_type;
Jaromir Koncicky da58d4e
+	int		 i, entry_acl_type;
Jaromir Koncicky da58d4e
 	int		 s, ae_id, ae_tag, ae_perm;
Jaromir Koncicky da58d4e
 	const char	*ae_name;
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 	// FreeBSD "brands" ACLs as POSIX.1e or NFSv4
Jaromir Koncicky da58d4e
 	// Make sure the "brand" on this ACL is consistent
Jaromir Koncicky da58d4e
 	// with the default_entry_acl_type bits provided.
Jaromir Koncicky da58d4e
@@ -560,6 +569,7 @@
Jaromir Koncicky da58d4e
 		return ARCHIVE_FAILED;
Jaromir Koncicky da58d4e
 		break;
Jaromir Koncicky da58d4e
 	}
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 	s = acl_get_entry(acl, ACL_FIRST_ENTRY, &acl_entry);
Jaromir Koncicky da58d4e
@@ -592,9 +602,11 @@
Jaromir Koncicky da58d4e
 		case ACL_OTHER:
Jaromir Koncicky da58d4e
 			ae_tag = ARCHIVE_ENTRY_ACL_OTHER;
Jaromir Koncicky da58d4e
 			break;
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 		case ACL_EVERYONE:
Jaromir Koncicky da58d4e
 			ae_tag = ARCHIVE_ENTRY_ACL_EVERYONE;
Jaromir Koncicky da58d4e
 			break;
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 		default:
Jaromir Koncicky da58d4e
 			/* Skip types that libarchive can't support. */
Jaromir Koncicky da58d4e
 			s = acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry);
Jaromir Koncicky da58d4e
@@ -605,6 +617,7 @@
Jaromir Koncicky da58d4e
 		// XXX acl_get_entry_type_np on FreeBSD returns EINVAL for
Jaromir Koncicky da58d4e
 		// non-NFSv4 ACLs
Jaromir Koncicky da58d4e
 		entry_acl_type = default_entry_acl_type;
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 		r = acl_get_entry_type_np(acl_entry, &acl_type);
Jaromir Koncicky da58d4e
 		if (r == 0) {
Jaromir Koncicky da58d4e
 			switch (acl_type) {
Jaromir Koncicky da58d4e
@@ -634,9 +647,10 @@
Jaromir Koncicky da58d4e
 				ae_perm |= acl_inherit_map[i].archive_inherit;
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
                 }
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 		acl_get_permset(acl_entry, &acl_permset);
Jaromir Koncicky da58d4e
-                for (i = 0; i < (int)(sizeof(acl_perm_map) / sizeof(acl_perm_map[0])); ++i) {
Jaromir Koncicky da58d4e
+		for (i = 0; i < (int)(sizeof(acl_perm_map) / sizeof(acl_perm_map[0])); ++i) {
Jaromir Koncicky da58d4e
 			/*
Jaromir Koncicky da58d4e
 			 * acl_get_perm() is spelled differently on different
Jaromir Koncicky da58d4e
 			 * platforms; see above.
Jaromir Koncicky da58d4e
diff -ruN libarchive-3.1.2/libarchive/archive_write_disk_acl.c libarchive-3.1.2.fixed/libarchive/archive_write_disk_acl.c
Jaromir Koncicky da58d4e
--- libarchive-3.1.2/libarchive/archive_write_disk_acl.c	2013-01-14 02:43:45.000000000 +0100
Jaromir Koncicky da58d4e
+++ libarchive-3.1.2.fixed/libarchive/archive_write_disk_acl.c	2013-08-08 10:31:35.000000000 +0200
Jaromir Koncicky da58d4e
@@ -43,7 +43,7 @@
Jaromir Koncicky da58d4e
 #include "archive_acl_private.h"
Jaromir Koncicky da58d4e
 #include "archive_write_disk_private.h"
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
-#if !defined(HAVE_POSIX_ACL) || !defined(ACL_TYPE_NFS4)
Jaromir Koncicky da58d4e
+#ifndef HAVE_POSIX_ACL
Jaromir Koncicky da58d4e
 /* Default empty function body to satisfy mainline code. */
Jaromir Koncicky da58d4e
 int
Jaromir Koncicky da58d4e
 archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
Jaromir Koncicky da58d4e
@@ -79,10 +79,12 @@
Jaromir Koncicky da58d4e
 		ret = set_acl(a, fd, name, abstract_acl, ACL_TYPE_DEFAULT,
Jaromir Koncicky da58d4e
 		    ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, "default");
Jaromir Koncicky da58d4e
 		return (ret);
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 	} else if (archive_acl_count(abstract_acl, ARCHIVE_ENTRY_ACL_TYPE_NFS4) > 0) {
Jaromir Koncicky da58d4e
 		ret = set_acl(a, fd, name, abstract_acl, ACL_TYPE_NFS4,
Jaromir Koncicky da58d4e
 		    ARCHIVE_ENTRY_ACL_TYPE_NFS4, "nfs4");
Jaromir Koncicky da58d4e
 		return (ret);
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 	} else
Jaromir Koncicky da58d4e
 		return ARCHIVE_OK;
Jaromir Koncicky da58d4e
 }
Jaromir Koncicky da58d4e
@@ -94,6 +96,7 @@
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_WRITE, ACL_WRITE},
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_READ, ACL_READ},
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
Jaromir Koncicky da58d4e
@@ -110,8 +113,10 @@
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_ACL},
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_WRITE_OWNER},
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 };
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 static struct {
Jaromir Koncicky da58d4e
 	int archive_inherit;
Jaromir Koncicky da58d4e
 	int platform_inherit;
Jaromir Koncicky da58d4e
@@ -121,6 +126,7 @@
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_NO_PROPAGATE_INHERIT},
Jaromir Koncicky da58d4e
 	{ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY}
Jaromir Koncicky da58d4e
 };
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 static int
Jaromir Koncicky da58d4e
 set_acl(struct archive *a, int fd, const char *name,
Jaromir Koncicky da58d4e
@@ -130,7 +136,9 @@
Jaromir Koncicky da58d4e
 	acl_t		 acl;
Jaromir Koncicky da58d4e
 	acl_entry_t	 acl_entry;
Jaromir Koncicky da58d4e
 	acl_permset_t	 acl_permset;
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 	acl_flagset_t	 acl_flagset;
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 	int		 ret;
Jaromir Koncicky da58d4e
 	int		 ae_type, ae_permset, ae_tag, ae_id;
Jaromir Koncicky da58d4e
 	uid_t		 ae_uid;
Jaromir Koncicky da58d4e
@@ -171,14 +179,17 @@
Jaromir Koncicky da58d4e
 		case ARCHIVE_ENTRY_ACL_OTHER:
Jaromir Koncicky da58d4e
 			acl_set_tag_type(acl_entry, ACL_OTHER);
Jaromir Koncicky da58d4e
 			break;
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 		case ARCHIVE_ENTRY_ACL_EVERYONE:
Jaromir Koncicky da58d4e
 			acl_set_tag_type(acl_entry, ACL_EVERYONE);
Jaromir Koncicky da58d4e
 			break;
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 		default:
Jaromir Koncicky da58d4e
 			/* XXX */
Jaromir Koncicky da58d4e
 			break;
Jaromir Koncicky da58d4e
 		}
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 		switch (ae_type) {
Jaromir Koncicky da58d4e
 		case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
Jaromir Koncicky da58d4e
 			acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_ALLOW);
Jaromir Koncicky da58d4e
@@ -200,6 +211,7 @@
Jaromir Koncicky da58d4e
 			// XXX error handling here.
Jaromir Koncicky da58d4e
 			break;
Jaromir Koncicky da58d4e
 		}
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 		acl_get_permset(acl_entry, &acl_permset);
Jaromir Koncicky da58d4e
 		acl_clear_perms(acl_permset);
Jaromir Koncicky da58d4e
@@ -210,6 +222,7 @@
Jaromir Koncicky da58d4e
 					     acl_perm_map[i].platform_perm);
Jaromir Koncicky da58d4e
 		}
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
+#ifdef ACL_TYPE_NFS4
Jaromir Koncicky da58d4e
 		acl_get_flagset_np(acl_entry, &acl_flagset);
Jaromir Koncicky da58d4e
 		acl_clear_flags_np(acl_flagset);
Jaromir Koncicky da58d4e
 		for (i = 0; i < (int)(sizeof(acl_inherit_map) / sizeof(acl_inherit_map[0])); ++i) {
Jaromir Koncicky da58d4e
@@ -217,6 +230,7 @@
Jaromir Koncicky da58d4e
 				acl_add_flag_np(acl_flagset,
Jaromir Koncicky da58d4e
 						acl_inherit_map[i].platform_inherit);
Jaromir Koncicky da58d4e
 		}
Jaromir Koncicky da58d4e
+#endif
Jaromir Koncicky da58d4e
 	}
Jaromir Koncicky da58d4e
 
Jaromir Koncicky da58d4e
 	/* Try restoring the ACL through 'fd' if we can. */