[arch-commits] Commit in libarchive/trunk (PKGBUILD libarchive-3.1.2-acl.patch)

Dave Reisner dreisner at nymeria.archlinux.org
Tue Aug 20 03:28:21 UTC 2013


    Date: Tuesday, August 20, 2013 @ 05:28:21
  Author: dreisner
Revision: 193412

upgpkg: libarchive 3.1.2-2

- fix ACL preservation (FS#36603)

Added:
  libarchive/trunk/libarchive-3.1.2-acl.patch
Modified:
  libarchive/trunk/PKGBUILD

----------------------------+
 PKGBUILD                   |   12 +-
 libarchive-3.1.2-acl.patch |  219 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 228 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2013-08-19 17:39:36 UTC (rev 193411)
+++ PKGBUILD	2013-08-20 03:28:21 UTC (rev 193412)
@@ -3,16 +3,19 @@
 
 pkgname=libarchive
 pkgver=3.1.2
-pkgrel=1
+pkgrel=2
 pkgdesc="library that can create and read several streaming archive formats"
 arch=('i686' 'x86_64')
 url="http://libarchive.org/"
 license=('BSD')
 depends=('acl' 'attr' 'bzip2' 'expat' 'lzo2' 'openssl' 'xz' 'zlib')
+provides=('libarchive.so')
 source=("http://libarchive.org/downloads/$pkgname-$pkgver.tar.gz"
-        '0001-mtree-fix-line-filename-length-calculation.patch')
+        '0001-mtree-fix-line-filename-length-calculation.patch'
+        'libarchive-3.1.2-acl.patch')
 md5sums=('efad5a503f66329bb9d2f4308b5de98a'
-         'fda89c145bbcd793a96b06b463ef6a72')
+         'fda89c145bbcd793a96b06b463ef6a72'
+         'a5c995661c62429ceff2c23ea322393b')
 
 build() {
   cd "$pkgname-$pkgver"
@@ -21,6 +24,9 @@
   # upstream commit e65bf287f0133426b26611fe3e80b51267987106
   patch -Np1 -i "$srcdir/0001-mtree-fix-line-filename-length-calculation.patch"
 
+  # https://code.google.com/p/libarchive/issues/detail?id=329
+  patch -Np1 -i "$srcdir/libarchive-3.1.2-acl.patch"
+
   ./configure --prefix=/usr --without-xml2
   make
 }

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




More information about the arch-commits mailing list