svn commit: r305025 - in user/alc/PQ_LAUNDRY: cddl/usr.sbin/zfsd cddl/usr.sbin/zfsd/tests contrib/ipfilter contrib/libarchive/libarchive contrib/netbsd-tests/usr.bin/dirname lib/libc/aarch64/sys li...

Mark Johnston markj at FreeBSD.org
Mon Aug 29 20:01:51 UTC 2016


Author: markj
Date: Mon Aug 29 20:01:49 2016
New Revision: 305025
URL: https://svnweb.freebsd.org/changeset/base/305025

Log:
  MFH r305024

Added:
  user/alc/PQ_LAUNDRY/lib/libc/sys/ptrace.c
     - copied unchanged from r305024, head/lib/libc/sys/ptrace.c
  user/alc/PQ_LAUNDRY/sys/mips/conf/std.AR91XX
     - copied unchanged from r305024, head/sys/mips/conf/std.AR91XX
  user/alc/PQ_LAUNDRY/sys/mips/conf/std.QCA955X
     - copied unchanged from r305024, head/sys/mips/conf/std.QCA955X
Deleted:
  user/alc/PQ_LAUNDRY/lib/libc/amd64/sys/ptrace.S
  user/alc/PQ_LAUNDRY/lib/libc/arm/sys/ptrace.S
  user/alc/PQ_LAUNDRY/lib/libc/i386/sys/ptrace.S
  user/alc/PQ_LAUNDRY/lib/libc/mips/sys/ptrace.S
  user/alc/PQ_LAUNDRY/lib/libc/powerpc/sys/ptrace.S
  user/alc/PQ_LAUNDRY/lib/libc/powerpc64/sys/ptrace.S
  user/alc/PQ_LAUNDRY/lib/libc/sparc64/sys/ptrace.S
  user/alc/PQ_LAUNDRY/sys/mips/conf/AR91XX_BASE
  user/alc/PQ_LAUNDRY/sys/mips/conf/QCA955X_BASE
Modified:
  user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/Makefile
  user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/Makefile.common
  user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/tests/Makefile
  user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/tests/zfsd_unittest.cc
  user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/vdev.h
  user/alc/PQ_LAUNDRY/contrib/ipfilter/opts.h
  user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/archive_acl.c
  user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/archive_entry.h
  user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
  user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/archive_read_support_format_tar.c
  user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/archive_write_disk_acl.c
  user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/archive_write_set_format_pax.c
  user/alc/PQ_LAUNDRY/contrib/netbsd-tests/usr.bin/dirname/t_dirname.sh
  user/alc/PQ_LAUNDRY/lib/libc/aarch64/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/amd64/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/arm/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/i386/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/include/libc_private.h
  user/alc/PQ_LAUNDRY/lib/libc/mips/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/powerpc/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/powerpc64/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/sparc64/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/sys/ptrace.2
  user/alc/PQ_LAUNDRY/release/doc/en_US.ISO8859-1/relnotes/article.xml
  user/alc/PQ_LAUNDRY/sbin/hastd/lzf.h
  user/alc/PQ_LAUNDRY/share/mk/bsd.dep.mk
  user/alc/PQ_LAUNDRY/share/mk/bsd.obj.mk
  user/alc/PQ_LAUNDRY/sys/amd64/amd64/pmap.c
  user/alc/PQ_LAUNDRY/sys/amd64/amd64/support.S
  user/alc/PQ_LAUNDRY/sys/amd64/include/md_var.h
  user/alc/PQ_LAUNDRY/sys/boot/i386/libi386/biosdisk.c
  user/alc/PQ_LAUNDRY/sys/contrib/dev/ath/ath_hal/ar9300/ar9300phy.h
  user/alc/PQ_LAUNDRY/sys/contrib/ipfilter/netinet/ip_compat.h
  user/alc/PQ_LAUNDRY/sys/contrib/ipfilter/netinet/ip_fil.h
  user/alc/PQ_LAUNDRY/sys/contrib/ipfilter/netinet/ip_log.c
  user/alc/PQ_LAUNDRY/sys/contrib/ipfilter/netinet/ip_nat.h
  user/alc/PQ_LAUNDRY/sys/contrib/ipfilter/netinet/ip_proxy.h
  user/alc/PQ_LAUNDRY/sys/ddb/db_expr.c
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bcma/bcma.c
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bhnd.h
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bhnd_bus_if.m
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bhnd_subr.c
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/siba/siba.c
  user/alc/PQ_LAUNDRY/sys/dev/hyperv/netvsc/hv_net_vsc.h
  user/alc/PQ_LAUNDRY/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  user/alc/PQ_LAUNDRY/sys/dev/hyperv/netvsc/hv_rndis.h
  user/alc/PQ_LAUNDRY/sys/dev/hyperv/netvsc/hv_rndis_filter.c
  user/alc/PQ_LAUNDRY/sys/dev/hyperv/netvsc/ndis.h
  user/alc/PQ_LAUNDRY/sys/dev/mfi/mfi.c
  user/alc/PQ_LAUNDRY/sys/dev/ofw/ofw_bus_subr.c
  user/alc/PQ_LAUNDRY/sys/dev/ofw/ofw_bus_subr.h
  user/alc/PQ_LAUNDRY/sys/dev/syscons/syscons.c
  user/alc/PQ_LAUNDRY/sys/dev/uart/uart_core.c
  user/alc/PQ_LAUNDRY/sys/dev/uart/uart_cpu_powerpc.c
  user/alc/PQ_LAUNDRY/sys/i386/i386/machdep.c
  user/alc/PQ_LAUNDRY/sys/i386/i386/pmap.c
  user/alc/PQ_LAUNDRY/sys/i386/i386/support.s
  user/alc/PQ_LAUNDRY/sys/kern/vfs_lookup.c
  user/alc/PQ_LAUNDRY/sys/mips/conf/AP135
  user/alc/PQ_LAUNDRY/sys/mips/conf/CARAMBOLA2
  user/alc/PQ_LAUNDRY/sys/mips/conf/DIR-655A1
  user/alc/PQ_LAUNDRY/sys/mips/conf/TL-ARCHERC7V2
  user/alc/PQ_LAUNDRY/sys/mips/conf/TL-WDR4300
  user/alc/PQ_LAUNDRY/sys/mips/conf/TL-WR1043NDv2
  user/alc/PQ_LAUNDRY/sys/mips/conf/TP-WN1043ND
  user/alc/PQ_LAUNDRY/sys/mips/conf/std.AR933X
  user/alc/PQ_LAUNDRY/sys/mips/conf/std.AR934X
  user/alc/PQ_LAUNDRY/sys/modules/Makefile
  user/alc/PQ_LAUNDRY/sys/modules/cloudabi32/Makefile
  user/alc/PQ_LAUNDRY/sys/modules/cloudabi64/Makefile
  user/alc/PQ_LAUNDRY/sys/sys/cnv.h
  user/alc/PQ_LAUNDRY/tools/tools/net80211/wlanwds/wlanwds.c
  user/alc/PQ_LAUNDRY/usr.sbin/bluetooth/btpand/bnep.c
  user/alc/PQ_LAUNDRY/usr.sbin/bluetooth/btpand/btpand.h
  user/alc/PQ_LAUNDRY/usr.sbin/newsyslog/tests/legacy_test.sh
Directory Properties:
  user/alc/PQ_LAUNDRY/   (props changed)
  user/alc/PQ_LAUNDRY/cddl/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/ipfilter/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/libarchive/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/   (props changed)
  user/alc/PQ_LAUNDRY/sys/contrib/ipfilter/   (props changed)

Modified: user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/Makefile
==============================================================================
--- user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/Makefile	Mon Aug 29 19:53:13 2016	(r305024)
+++ user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/Makefile	Mon Aug 29 20:01:49 2016	(r305025)
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
-SRCDIR=${.CURDIR}/../../..
 .include "Makefile.common"
 
 PROG_CXX=	zfsd

Modified: user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/Makefile.common
==============================================================================
--- user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/Makefile.common	Mon Aug 29 19:53:13 2016	(r305024)
+++ user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/Makefile.common	Mon Aug 29 20:01:49 2016	(r305025)
@@ -15,20 +15,20 @@ WARNS?=		3
 # Ignore warnings about Solaris specific pragmas.
 IGNORE_PRAGMA=  YES
 
-INCFLAGS+= -I${SRCDIR}/cddl/contrib/opensolaris/lib/libzpool/common
-INCFLAGS+= -I${SRCDIR}/cddl/compat/opensolaris/include
-INCFLAGS+= -I${SRCDIR}/cddl/compat/opensolaris/lib/libumem
-INCFLAGS+= -I${SRCDIR}/sys/cddl/compat/opensolaris
-INCFLAGS+= -I${SRCDIR}/cddl/contrib/opensolaris/head
-INCFLAGS+= -I${SRCDIR}/cddl/contrib/opensolaris/lib/libuutil/common
-INCFLAGS+= -I${SRCDIR}/cddl/contrib/opensolaris/lib/libumem/common
-INCFLAGS+= -I${SRCDIR}/cddl/contrib/opensolaris/lib/libzfs_core/common
-INCFLAGS+= -I${SRCDIR}/cddl/contrib/opensolaris/lib/libzfs/common
-INCFLAGS+= -I${SRCDIR}/cddl/contrib/opensolaris/lib/libnvpair
-INCFLAGS+= -I${SRCDIR}/sys/cddl/contrib/opensolaris/common/zfs
-INCFLAGS+= -I${SRCDIR}/sys/cddl/contrib/opensolaris/uts/common
-INCFLAGS+= -I${SRCDIR}/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
-INCFLAGS+= -I${SRCDIR}/sys/cddl/contrib/opensolaris/uts/common/sys
+INCFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/lib/libzpool/common
+INCFLAGS+= -I${SRCTOP}/cddl/compat/opensolaris/include
+INCFLAGS+= -I${SRCTOP}/cddl/compat/opensolaris/lib/libumem
+INCFLAGS+= -I${SRCTOP}/sys/cddl/compat/opensolaris
+INCFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/head
+INCFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/lib/libuutil/common
+INCFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/lib/libumem/common
+INCFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/lib/libzfs_core/common
+INCFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/lib/libzfs/common
+INCFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/lib/libnvpair
+INCFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/common/zfs
+INCFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/uts/common
+INCFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
+INCFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/uts/common/sys
 
 CFLAGS= -g -DNEED_SOLARIS_BOOLEAN ${INCFLAGS}
 

Modified: user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/tests/Makefile
==============================================================================
--- user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/tests/Makefile	Mon Aug 29 19:53:13 2016	(r305024)
+++ user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/tests/Makefile	Mon Aug 29 20:01:49 2016	(r305025)
@@ -1,10 +1,7 @@
 # $FreeBSD$
 
-SRCDIR=${.CURDIR}/../../../..
 .include "${.CURDIR}/../Makefile.common"
-.PATH:	${.CURDIR}/..
-
-TESTSDIR?=	${TESTSBASE}/cddl/sbin/zfsd
+.PATH:	${.CURDIR:H}
 
 PLAIN_TESTS_CXX=	zfsd_unittest
 SRCS.zfsd_unittest:=		${SRCS:Nzfsd_main.cc}
@@ -12,7 +9,7 @@ SRCS.zfsd_unittest+=		libmocks.c zfsd_un
 SRCS=
 
 # Use #include <zfsd/xxx.h> in test programs.
-INCFLAGS+=	-I${.CURDIR}/../..
+INCFLAGS+=	-I${.CURDIR:H:H}
 
 .if defined(DESTDIR)
 INCFLAGS+=	-I${DESTDIR}/usr/include
@@ -27,7 +24,6 @@ LIBRARY_PATH=
 .endif
 
 # Googletest options
-LOCALBASE?=	/usr/local
 INCFLAGS+=	-I${LOCALBASE}/include -D_THREAD_SAFE -pthread
 LDFLAGS.zfsd_unittest+=	-L${LOCALBASE}/lib -D_THREAD_SAFE -pthread
 LDADD.zfsd_unittest+=		${LOCALBASE}/lib/libgtest.a
@@ -39,7 +35,4 @@ LDADD.zfsd_unittest+= ${LOCALBASE}/lib/l
 # https://groups.google.com/forum/#!msg/googletestframework/h8ixEPCFm0o/amwfu4xGJb0J
 CFLAGS.zfsd_unittest+= -DGTEST_HAS_PTHREAD
 
-# Install the tests
-TESTSBASE?=	/usr/tests
-
 .include <bsd.test.mk>

Modified: user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/tests/zfsd_unittest.cc
==============================================================================
--- user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/tests/zfsd_unittest.cc	Mon Aug 29 19:53:13 2016	(r305024)
+++ user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/tests/zfsd_unittest.cc	Mon Aug 29 20:01:49 2016	(r305025)
@@ -72,7 +72,6 @@ using std::string;
 using std::stringstream;
 
 using DevdCtl::Event;
-using DevdCtl::EventBuffer;
 using DevdCtl::EventFactory;
 using DevdCtl::EventList;
 using DevdCtl::Guid;

Modified: user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/vdev.h
==============================================================================
--- user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/vdev.h	Mon Aug 29 19:53:13 2016	(r305024)
+++ user/alc/PQ_LAUNDRY/cddl/usr.sbin/zfsd/vdev.h	Mon Aug 29 20:01:49 2016	(r305025)
@@ -108,6 +108,12 @@ public:
 	 * \brief No-op copy constructor for nonexistent vdevs.
 	 */
 	Vdev();
+
+	/**
+	 * \brief No-op virtual destructor, since this class has virtual
+	 *        functions.
+	 */
+	virtual ~Vdev();
 	bool			DoesNotExist()	const;
 
 	/**
@@ -145,6 +151,10 @@ private:
 extern Vdev NonexistentVdev;
 
 //- Vdev Inline Public Methods ------------------------------------------------
+inline Vdev::~Vdev()
+{
+}
+
 inline DevdCtl::Guid
 Vdev::PoolGUID() const
 {

Modified: user/alc/PQ_LAUNDRY/contrib/ipfilter/opts.h
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/ipfilter/opts.h	Mon Aug 29 19:53:13 2016	(r305024)
+++ user/alc/PQ_LAUNDRY/contrib/ipfilter/opts.h	Mon Aug 29 20:01:49 2016	(r305025)
@@ -12,7 +12,11 @@
 #define	__OPTS_H__
 
 #ifndef	SOLARIS
-#define	SOLARIS	(defined(sun) && (defined(__svr4__) || defined(__SVR4)))
+# if defined(sun) && (defined(__svr4__) || defined(__SVR4))
+#  define	SOLARIS		1
+# else
+#  define	SOLARIS		0
+# endif
 #endif
 #define	OPT_REMOVE	0x000001
 #define	OPT_DEBUG	0x000002

Modified: user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/archive_acl.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/archive_acl.c	Mon Aug 29 19:53:13 2016	(r305024)
+++ user/alc/PQ_LAUNDRY/contrib/libarchive/libarchive/archive_acl.c	Mon Aug 29 20:01:49 2016	(r305025)
@@ -57,27 +57,21 @@ static int	archive_acl_add_entry_len_l(s
 		    size_t len, struct archive_string_conv *sc);
 static int	isint_w(const wchar_t *start, const wchar_t *end, int *result);
 static int	ismode_w(const wchar_t *start, const wchar_t *end, int *result);
-static int	parse_nfs4_flags_w(const wchar_t *start, const wchar_t *end,
-		    int *result);
-static int	parse_nfs4_perms_w(const wchar_t *start, const wchar_t *end,
-		    int *result);
 static void	next_field_w(const wchar_t **wp, const wchar_t **start,
 		    const wchar_t **end, wchar_t *sep);
 static int	prefix_w(const wchar_t *start, const wchar_t *end,
 		    const wchar_t *test);
-static void	append_entry_w(wchar_t **wp, const wchar_t *prefix, int type,
-		    int tag, const wchar_t *wname, int perm, int id);
+static void	append_entry_w(wchar_t **wp, const wchar_t *prefix, int tag,
+		    const wchar_t *wname, int perm, int id);
 static void	append_id_w(wchar_t **wp, int id);
 static int	isint(const char *start, const char *end, int *result);
 static int	ismode(const char *start, const char *end, int *result);
-static int	parse_nfs4_flags(const char *start, const char *end, int *result);
-static int	parse_nfs4_perms(const char *start, const char *end, int *result);
 static void	next_field(const char **p, const char **start,
 		    const char **end, char *sep);
 static int	prefix_c(const char *start, const char *end,
 		    const char *test);
-static void	append_entry(char **p, const char *prefix, int type,
-		    int tag, const char *name, int perm, int id);
+static void	append_entry(char **p, const char *prefix, int tag,
+		    const char *name, int perm, int id);
 static void	append_id(char **p, int id);
 
 void
@@ -453,16 +447,6 @@ archive_acl_text_w(struct archive *a, st
 	int id, r;
 	wchar_t *wp;
 
-	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) &&
-	    (flags & (ARCHIVE_ENTRY_ACL_TYPE_ACCESS | ARCHIVE_ENTRY_ACL_TYPE_DEFAULT))) {
-		/* cannot convert NFSv4 ACLs and POSIX1e ACLs at the same time */	
-		return (NULL);
-	}
-	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) && (flags & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)) {
-		/* cannot have access and default at the same time */
-		return (NULL);
-	}
-
 	if (acl->acl_text_w != NULL) {
 		free (acl->acl_text_w);
 		acl->acl_text_w = NULL;
@@ -478,57 +462,17 @@ archive_acl_text_w(struct archive *a, st
 			if ((flags & ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT) &&
 			    (ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT))
 				length += 8; /* "default:" */
-			switch (ap->tag) {
-			case ARCHIVE_ENTRY_ACL_USER_OBJ:
-				if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
-					length += 6; /* "owner@" */
-					break;
-				}
-				/* FALLTHROUGH */
-			case ARCHIVE_ENTRY_ACL_USER:
-				length += 4; /* "user" */
-				break;
-			case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
-				if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
-					length += 6; /* "group@" */
-					break;
-				}
-				/* FALLTHROUGH */
-			case ARCHIVE_ENTRY_ACL_GROUP:
-			case ARCHIVE_ENTRY_ACL_OTHER:
-				length += 5; /* "group", "other" */
-				break;
-			case ARCHIVE_ENTRY_ACL_EVERYONE:
-				length += 9; /* "everyone@" */ 
-				break;
-			}
+			length += 5; /* tag name */
 			length += 1; /* colon */
-			if (((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) == 0) ||
-			    ap->tag == ARCHIVE_ENTRY_ACL_USER ||
-			    ap->tag == ARCHIVE_ENTRY_ACL_GROUP) {
-				r = archive_mstring_get_wcs(a, &ap->name, &wname);
-				if (r == 0 && wname != NULL)
-					length += wcslen(wname);
-				else if (r < 0 && errno == ENOMEM)
-					return (NULL);
-				else
-					length += sizeof(uid_t) * 3 + 1;
-				length += 1; /* colon */
-			}
-			if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0)
-				length += 14; /* rwxpdDaARWcCos */
+			r = archive_mstring_get_wcs(a, &ap->name, &wname);
+			if (r == 0 && wname != NULL)
+				length += wcslen(wname);
+			else if (r < 0 && errno == ENOMEM)
+				return (NULL);
 			else
-				length += 3; /* rwx */
-			length += 1; /* colon */
-			if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
-				length += 7; /* fdinSFI */
-				length += 1; /* colon */
-				if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_DENY) != 0)
-					length += 4; /* deny */
-				else
-					length += 5; /* allow, alarm, audit */
-				length += 1; /* colon */
-			}
+				length += sizeof(uid_t) * 3 + 1;
+			length ++; /* colon */
+			length += 3; /* rwx */
 			length += 1; /* colon */
 			length += max(sizeof(uid_t), sizeof(gid_t)) * 3 + 1;
 			length ++; /* newline */
@@ -536,39 +480,34 @@ archive_acl_text_w(struct archive *a, st
 		ap = ap->next;
 	}
 
-	if (count == 0)
-		return (NULL);
-
-	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
+	if (count > 0 && ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0)) {
 		length += 10; /* "user::rwx\n" */
 		length += 11; /* "group::rwx\n" */
 		length += 11; /* "other::rwx\n" */
 	}
 
+	if (count == 0)
+		return (NULL);
+
 	/* Now, allocate the string and actually populate it. */
 	wp = acl->acl_text_w = (wchar_t *)malloc(length * sizeof(wchar_t));
 	if (wp == NULL)
 		return (NULL);
 	count = 0;
-
 	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
-		append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
-		    ARCHIVE_ENTRY_ACL_USER_OBJ, NULL, acl->mode & 0700, -1);
+		append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_USER_OBJ, NULL,
+		    acl->mode & 0700, -1);
 		*wp++ = ',';
-		append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
-		    ARCHIVE_ENTRY_ACL_GROUP_OBJ, NULL, acl->mode & 0070, -1);
+		append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_GROUP_OBJ, NULL,
+		    acl->mode & 0070, -1);
 		*wp++ = ',';
-		append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
-		    ARCHIVE_ENTRY_ACL_OTHER, NULL, acl->mode & 0007, -1);
+		append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_OTHER, NULL,
+		    acl->mode & 0007, -1);
 		count += 3;
-	}
 
-	if ((flags & (ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
-	    ARCHIVE_ENTRY_ACL_TYPE_NFS4)) != 0) {
 		ap = acl->acl_head;
 		while (ap != NULL) {
-			if ((ap->type & (ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
-			    ARCHIVE_ENTRY_ACL_TYPE_NFS4)) != 0) {
+			if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
 				r = archive_mstring_get_wcs(a, &ap->name, &wname);
 				if (r == 0) {
 					*wp++ = separator;
@@ -576,8 +515,8 @@ archive_acl_text_w(struct archive *a, st
 						id = ap->id;
 					else
 						id = -1;
-					append_entry_w(&wp, NULL, ap->type, ap->tag,
-					    wname, ap->permset, id);
+					append_entry_w(&wp, NULL, ap->tag, wname,
+					    ap->permset, id);
 					count++;
 				} else if (r < 0 && errno == ENOMEM)
 					return (NULL);
@@ -586,6 +525,7 @@ archive_acl_text_w(struct archive *a, st
 		}
 	}
 
+
 	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) != 0) {
 		if (flags & ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT)
 			prefix = L"default:";
@@ -603,8 +543,8 @@ archive_acl_text_w(struct archive *a, st
 						id = ap->id;
 					else
 						id = -1;
-					append_entry_w(&wp, prefix, ap->type,
-					    ap->tag, wname, ap->permset, id);
+					append_entry_w(&wp, prefix, ap->tag,
+					    wname, ap->permset, id);
 					count ++;
 				} else if (r < 0 && errno == ENOMEM)
 					return (NULL);
@@ -628,8 +568,8 @@ append_id_w(wchar_t **wp, int id)
 }
 
 static void
-append_entry_w(wchar_t **wp, const wchar_t *prefix, int type,
-    int tag, const wchar_t *wname, int perm, int id)
+append_entry_w(wchar_t **wp, const wchar_t *prefix, int tag,
+    const wchar_t *wname, int perm, int id)
 {
 	if (prefix != NULL) {
 		wcscpy(*wp, prefix);
@@ -639,11 +579,6 @@ append_entry_w(wchar_t **wp, const wchar
 	case ARCHIVE_ENTRY_ACL_USER_OBJ:
 		wname = NULL;
 		id = -1;
-		if (type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
-			wcscpy(*wp, L"owner@");
-			break;
-		}
-		/* FALLTHROUGH */
 		/* FALLTHROUGH */
 	case ARCHIVE_ENTRY_ACL_USER:
 		wcscpy(*wp, L"user");
@@ -668,57 +603,18 @@ append_entry_w(wchar_t **wp, const wchar
 	}
 	*wp += wcslen(*wp);
 	*(*wp)++ = L':';
-	if ((type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) == 0 ||
-	    tag == ARCHIVE_ENTRY_ACL_USER ||
-	    tag == ARCHIVE_ENTRY_ACL_GROUP) {
-		if (wname != NULL) {
-			wcscpy(*wp, wname);
-			*wp += wcslen(*wp);
-		} else if (tag == ARCHIVE_ENTRY_ACL_USER
-		    || tag == ARCHIVE_ENTRY_ACL_GROUP) {
-			append_id_w(wp, id);
-			id = -1;
-		}
-		*(*wp)++ = L':';
-	}
-	*(*wp)++ = (perm & (ARCHIVE_ENTRY_ACL_READ |
-	    ARCHIVE_ENTRY_ACL_READ_DATA |
-	    ARCHIVE_ENTRY_ACL_LIST_DIRECTORY)) ? L'r' : L'-';
-	*(*wp)++ = (perm & (ARCHIVE_ENTRY_ACL_WRITE |
-	    ARCHIVE_ENTRY_ACL_WRITE_DATA |
-	    ARCHIVE_ENTRY_ACL_ADD_FILE)) ? L'w' : L'-';
-	*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_EXECUTE) ? L'x' : L'-';
-	if (type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
-		*(*wp)++ = (perm & (ARCHIVE_ENTRY_ACL_APPEND_DATA | ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY)) ? L'p' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_DELETE) ? L'd' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_DELETE_CHILD) ? L'D' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES) ? L'a' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES) ? L'A' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS) ? L'R' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS) ? L'W' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_READ_ACL) ? L'c' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_WRITE_ACL) ? L'C' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_WRITE_OWNER) ? L'o' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_SYNCHRONIZE) ? L's' : L'-';
-		*(*wp)++ = L':';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT) ? L'f' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT) ? L'd' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY) ? L'i' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT) ? L'n' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS) ? L'S' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS) ? L'F' : L'-';
-		*(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_INHERITED) ? L'I' : L'-';
-		*(*wp)++ = L':';
-		if (type & ARCHIVE_ENTRY_ACL_TYPE_ALLOW)
-			wcscpy(*wp, L"allow");
-		else if (type & ARCHIVE_ENTRY_ACL_TYPE_DENY)
-			wcscpy(*wp, L"deny");
-		else if (type & ARCHIVE_ENTRY_ACL_TYPE_AUDIT)
-			wcscpy(*wp, L"audit");
-		else if (type & ARCHIVE_ENTRY_ACL_TYPE_ALARM)
-			wcscpy(*wp, L"alarm");
+	if (wname != NULL) {
+		wcscpy(*wp, wname);
 		*wp += wcslen(*wp);
+	} else if (tag == ARCHIVE_ENTRY_ACL_USER
+	    || tag == ARCHIVE_ENTRY_ACL_GROUP) {
+		append_id_w(wp, id);
+		id = -1;
 	}
+	*(*wp)++ = L':';
+	*(*wp)++ = (perm & 0444) ? L'r' : L'-';
+	*(*wp)++ = (perm & 0222) ? L'w' : L'-';
+	*(*wp)++ = (perm & 0111) ? L'x' : L'-';
 	if (id != -1) {
 		*(*wp)++ = L':';
 		append_id_w(wp, id);
@@ -741,16 +637,6 @@ archive_acl_text_l(struct archive_acl *a
 	int id, r;
 	char *p;
 
-	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) &&
-	    (flags & (ARCHIVE_ENTRY_ACL_TYPE_ACCESS | ARCHIVE_ENTRY_ACL_TYPE_DEFAULT))) {
-		/* cannot convert NFSv4 ACLs and POSIX1e ACLs at the same time */	
-		return (-1);
-	}
-	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) && (flags & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)) {
-		/* cannot have access and default at the same time */
-		return (-1);
-	}
-
 	if (acl->acl_text != NULL) {
 		free (acl->acl_text);
 		acl->acl_text = NULL;
@@ -769,109 +655,63 @@ archive_acl_text_l(struct archive_acl *a
 			if ((flags & ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT) &&
 			    (ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT))
 				length += 8; /* "default:" */
-			switch (ap->tag) {
-			case ARCHIVE_ENTRY_ACL_USER_OBJ:
-				if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
-					length += 6; /* "owner@" */
-					break;
-				}
-				/* FALLTHROUGH */
-			case ARCHIVE_ENTRY_ACL_USER:
-				length += 4; /* "user" */
-				break;
-			case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
-				if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
-					length += 6; /* "group@" */
-					break;
-				}
-				/* FALLTHROUGH */
-			case ARCHIVE_ENTRY_ACL_GROUP:
-			case ARCHIVE_ENTRY_ACL_OTHER:
-				length += 5; /* "group", "other" */
-				break;
-			case ARCHIVE_ENTRY_ACL_EVERYONE:
-				length += 9; /* "everyone@" */ 
-				break;
-			}
-
+			length += 5; /* tag name */
 			length += 1; /* colon */
-			if (((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) == 0) ||
-			    ap->tag == ARCHIVE_ENTRY_ACL_USER ||
-			    ap->tag == ARCHIVE_ENTRY_ACL_GROUP) {
-				r = archive_mstring_get_mbs_l(
-				    &ap->name, &name, &len, sc);
-				if (r != 0)
-					return (-1);
-				if (len > 0 && name != NULL)
-					length += len;
-				else
-					length += sizeof(uid_t) * 3 + 1;
-				length += 1; /* colon */
-			}
-			if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0)
-				length += 14; /* rwxpdDaARWcCos */
+			r = archive_mstring_get_mbs_l(
+			    &ap->name, &name, &len, sc);
+			if (r != 0)
+				return (-1);
+			if (len > 0 && name != NULL)
+				length += len;
 			else
-				length += 3; /* rwx */
+				length += sizeof(uid_t) * 3 + 1;
+			length ++; /* colon */
+			length += 3; /* rwx */
 			length += 1; /* colon */
-			if ((flags & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
-				length += 7; /* fdinSFI */
-				length += 1; /* colon */
-				if ((flags & ARCHIVE_ENTRY_ACL_TYPE_DENY) != 0)
-					length += 4; /* deny */
-				else
-					length += 5; /* allow, alarm, audit */
-				length += 1; /* colon */
-			}
-	
 			length += max(sizeof(uid_t), sizeof(gid_t)) * 3 + 1;
 			length ++; /* newline */
 		}
 		ap = ap->next;
 	}
 
-	if (count == 0)
-		return (0);
-
-	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
+	if (count > 0 && ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0)) {
 		length += 10; /* "user::rwx\n" */
 		length += 11; /* "group::rwx\n" */
 		length += 11; /* "other::rwx\n" */
 	}
 
+	if (count == 0)
+		return (0);
+
 	/* Now, allocate the string and actually populate it. */
 	p = acl->acl_text = (char *)malloc(length);
 	if (p == NULL)
 		return (-1);
 	count = 0;
 	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
-		append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
-		    ARCHIVE_ENTRY_ACL_USER_OBJ, NULL, acl->mode & 0700, -1);
+		append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_USER_OBJ, NULL,
+		    acl->mode & 0700, -1);
 		*p++ = ',';
-		append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
-		    ARCHIVE_ENTRY_ACL_GROUP_OBJ, NULL, acl->mode & 0070, -1);
+		append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_GROUP_OBJ, NULL,
+		    acl->mode & 0070, -1);
 		*p++ = ',';
-		append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
-		    ARCHIVE_ENTRY_ACL_OTHER, NULL, acl->mode & 0007, -1);
+		append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_OTHER, NULL,
+		    acl->mode & 0007, -1);
 		count += 3;
-	}
 
-	if ((flags & (ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
-	    ARCHIVE_ENTRY_ACL_TYPE_NFS4)) != 0) {
 		for (ap = acl->acl_head; ap != NULL; ap = ap->next) {
-			if ((ap->type & (ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
-			    ARCHIVE_ENTRY_ACL_TYPE_NFS4)) == 0)
+			if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) == 0)
 				continue;
 			r = archive_mstring_get_mbs_l(
 			    &ap->name, &name, &len, sc);
 			if (r != 0)
 				return (-1);
-			if (count > 0)
-				*p++ = separator;
+			*p++ = separator;
 			if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
 				id = ap->id;
 			else
 				id = -1;
-			append_entry(&p, NULL, ap->type, ap->tag, name,
+			append_entry(&p, NULL, ap->tag, name,
 			    ap->permset, id);
 			count++;
 		}
@@ -897,7 +737,7 @@ archive_acl_text_l(struct archive_acl *a
 				id = ap->id;
 			else
 				id = -1;
-			append_entry(&p, prefix, ap->type, ap->tag,
+			append_entry(&p, prefix, ap->tag,
 			    name, ap->permset, id);
 			count ++;
 		}
@@ -920,8 +760,8 @@ append_id(char **p, int id)
 }
 
 static void
-append_entry(char **p, const char *prefix, int type,
-    int tag, const char *name, int perm, int id)
+append_entry(char **p, const char *prefix, int tag,
+    const char *name, int perm, int id)
 {
 	if (prefix != NULL) {
 		strcpy(*p, prefix);
@@ -931,10 +771,6 @@ append_entry(char **p, const char *prefi
 	case ARCHIVE_ENTRY_ACL_USER_OBJ:
 		name = NULL;
 		id = -1;
-		if (type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
-			strcpy(*p, "owner@");
-			break;
-		}
 		/* FALLTHROUGH */
 	case ARCHIVE_ENTRY_ACL_USER:
 		strcpy(*p, "user");
@@ -942,10 +778,6 @@ append_entry(char **p, const char *prefi
 	case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
 		name = NULL;
 		id = -1;
-		if (type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
-			strcpy(*p, "group@");
-			break;
-		}
 		/* FALLTHROUGH */
 	case ARCHIVE_ENTRY_ACL_GROUP:
 		strcpy(*p, "group");
@@ -960,65 +792,21 @@ append_entry(char **p, const char *prefi
 		name = NULL;
 		id = -1;
 		break;
-	case ARCHIVE_ENTRY_ACL_EVERYONE:
-		strcpy(*p, "everyone@");
-		name = NULL;
-		id = -1;
-		break;
 	}
 	*p += strlen(*p);
 	*(*p)++ = ':';
-	if ((type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) == 0 ||
-	    tag == ARCHIVE_ENTRY_ACL_USER ||
-	    tag == ARCHIVE_ENTRY_ACL_GROUP) {
-		if (name != NULL) {
-			strcpy(*p, name);
-			*p += strlen(*p);
-		} else if (tag == ARCHIVE_ENTRY_ACL_USER
-		    || tag == ARCHIVE_ENTRY_ACL_GROUP) {
-			append_id(p, id);
-			id = -1;
-		}
-		*(*p)++ = ':';
-	}
-	*(*p)++ = (perm & (ARCHIVE_ENTRY_ACL_READ |
-	    ARCHIVE_ENTRY_ACL_READ_DATA |
-	    ARCHIVE_ENTRY_ACL_LIST_DIRECTORY)) ? 'r' : '-';
-	*(*p)++ = (perm & (ARCHIVE_ENTRY_ACL_WRITE |
-	    ARCHIVE_ENTRY_ACL_WRITE_DATA |
-	    ARCHIVE_ENTRY_ACL_ADD_FILE)) ? 'w' : '-';
-	*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_EXECUTE) ? 'x' : '-';
-	if (type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
-		*(*p)++ = (perm & (ARCHIVE_ENTRY_ACL_APPEND_DATA | ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY)) ? 'p' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_DELETE) ? 'd' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_DELETE_CHILD) ? 'D' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES) ? 'a' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES) ? 'A' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS) ? 'R' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS) ? 'W' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_READ_ACL) ? 'c' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_WRITE_ACL) ? 'C' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_WRITE_OWNER) ? 'o' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_SYNCHRONIZE) ? 's' : '-';
-		*(*p)++ = ':';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT) ? 'f' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT) ? 'd' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY) ? 'i' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT) ? 'n' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS) ? 'S' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS) ? 'F' : '-';
-		*(*p)++ = (perm & ARCHIVE_ENTRY_ACL_ENTRY_INHERITED) ? 'I' : '-'; 
-		*(*p)++ = ':';
-		if (type & ARCHIVE_ENTRY_ACL_TYPE_ALLOW)
-			strcpy(*p, "allow");
-		else if (type & ARCHIVE_ENTRY_ACL_TYPE_DENY)
-			strcpy(*p, "deny");
-		else if (type & ARCHIVE_ENTRY_ACL_TYPE_AUDIT)
-			strcpy(*p, "audit");
-		else if (type & ARCHIVE_ENTRY_ACL_TYPE_ALARM)
-			strcpy(*p, "alarm");
+	if (name != NULL) {
+		strcpy(*p, name);
 		*p += strlen(*p);
+	} else if (tag == ARCHIVE_ENTRY_ACL_USER
+	    || tag == ARCHIVE_ENTRY_ACL_GROUP) {
+		append_id(p, id);
+		id = -1;
 	}
+	*(*p)++ = ':';
+	*(*p)++ = (perm & 0444) ? 'r' : '-';
+	*(*p)++ = (perm & 0222) ? 'w' : '-';
+	*(*p)++ = (perm & 0111) ? 'x' : '-';
 	if (id != -1) {
 		*(*p)++ = ':';
 		append_id(p, id);
@@ -1039,19 +827,12 @@ archive_acl_parse_w(struct archive_acl *
 	struct {
 		const wchar_t *start;
 		const wchar_t *end;
-	} field[6], name;
+	} field[4], name;
 
-	int numfields, fields, n;
+	int fields, n;
 	int type, tag, permset, id;
-	int offset;
 	wchar_t sep;
 
-	if (default_type == ARCHIVE_ENTRY_ACL_TYPE_NFS4)
-		numfields = 6;
-	else
-		numfields = 4;	
-
-
 	while (text != NULL  &&  *text != L'\0') {
 		/*
 		 * Parse the fields out of the next entry,
@@ -1061,7 +842,7 @@ archive_acl_parse_w(struct archive_acl *
 		do {
 			const wchar_t *start, *end;
 			next_field_w(&text, &start, &end, &sep);
-			if (fields < numfields) {
+			if (fields < 4) {
 				field[fields].start = start;
 				field[fields].end = end;
 			}
@@ -1069,148 +850,72 @@ archive_acl_parse_w(struct archive_acl *
 		} while (sep == L':');
 
 		/* Set remaining fields to blank. */
-		for (n = fields; n < numfields; ++n)
+		for (n = fields; n < 4; ++n)
 			field[n].start = field[n].end = NULL;
 
-		if (default_type != ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
-			/* POSIX.1e ACLs */
-			/* Check for a numeric ID in field 1 or 3. */
-			id = -1;
-			isint_w(field[1].start, field[1].end, &id);
-			/* Field 3 is optional. */
-			if (id == -1 && fields > 3)
-				isint_w(field[3].start, field[3].end, &id);
-
-			/*
-			 * Solaris extension:  "defaultuser::rwx" is the
-			 * default ACL corresponding to "user::rwx", etc.
-			 */
-			if (field[0].end - field[0].start > 7
-			    && wmemcmp(field[0].start, L"default", 7) == 0) {
-				type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
-				field[0].start += 7;
-			} else
-				type = default_type;
+		/* Check for a numeric ID in field 1 or 3. */
+		id = -1;
+		isint_w(field[1].start, field[1].end, &id);
+		/* Field 3 is optional. */
+		if (id == -1 && fields > 3)
+			isint_w(field[3].start, field[3].end, &id);
 
-			name.start = name.end = NULL;
-			if (prefix_w(field[0].start, field[0].end, L"user")) {
-				if (!ismode_w(field[2].start, field[2].end,
-				    &permset))
-				return (ARCHIVE_WARN);
-				if (id != -1 || field[1].start < field[1].end) {
-					tag = ARCHIVE_ENTRY_ACL_USER;
-					name = field[1];
-				} else
-					tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
-			} else if (prefix_w(field[0].start, field[0].end,
-			    L"group")) {
-				if (!ismode_w(field[2].start, field[2].end,
-				    &permset))
-					return (ARCHIVE_WARN);
-				if (id != -1 || field[1].start < field[1].end) {
-					tag = ARCHIVE_ENTRY_ACL_GROUP;
-					name = field[1];
-				} else
-					tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
-			} else if (prefix_w(field[0].start, field[0].end,
-			    L"other")) {
-				if (fields == 2
-				    && field[1].start < field[1].end
-				    && ismode_w(field[1].start, field[1].end,
-				    &permset)) {
-					/* This is Solaris-style "other:rwx" */
-				} else if (fields == 3
-				    && field[1].start == field[1].end
-				    && field[2].start < field[2].end
-				    && ismode_w(field[2].start, field[2].end,
-				    &permset)) {
-					/* This is FreeBSD-style "other::rwx" */
-				} else
-					return (ARCHIVE_WARN);
-				tag = ARCHIVE_ENTRY_ACL_OTHER;
-			} else if (prefix_w(field[0].start, field[0].end,
-			    L"mask")) {
-				if (fields == 2
-				    && field[1].start < field[1].end
-				    && ismode_w(field[1].start, field[1].end,
-				    &permset)) {
-					/* This is Solaris-style "mask:rwx" */
-				} else if (fields == 3
-				    && field[1].start == field[1].end
-				    && field[2].start < field[2].end
-				    && ismode_w(field[2].start, field[2].end,
-				    &permset)) {
-					/* This is FreeBSD-style "mask::rwx" */
-				} else
-					return (ARCHIVE_WARN);
-				tag = ARCHIVE_ENTRY_ACL_MASK;
-			} else
+		/*
+		 * Solaris extension:  "defaultuser::rwx" is the
+		 * default ACL corresponding to "user::rwx", etc.
+		 */
+		if (field[0].end - field[0].start > 7
+		    && wmemcmp(field[0].start, L"default", 7) == 0) {
+			type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
+			field[0].start += 7;
+		} else
+			type = default_type;
+
+		name.start = name.end = NULL;
+		if (prefix_w(field[0].start, field[0].end, L"user")) {
+			if (!ismode_w(field[2].start, field[2].end, &permset))
 				return (ARCHIVE_WARN);
-		} else {
-			/* NFSv4 ACLs */
-			if (wcsncmp(field[0].start, L"user",
-			    field[0].end - field[0].start) == 0)
+			if (id != -1 || field[1].start < field[1].end) {
 				tag = ARCHIVE_ENTRY_ACL_USER;
-			else if (wcsncmp(field[0].start, L"group",
-			    field[0].end - field[0].start) == 0)
-				tag = ARCHIVE_ENTRY_ACL_GROUP;
-			else if (wcsncmp(field[0].start, L"owner@",
-			    field[0].end - field[0].start) == 0)
+				name = field[1];
+			} else
 				tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
-			else if (wcsncmp(field[0].start, L"group@",
-			    field[0].end - field[0].start) == 0)
-				tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
-			else if (wcsncmp(field[0].start, L"everyone@",
-			    field[0].end - field[0].start) == 0)
-				tag = ARCHIVE_ENTRY_ACL_EVERYONE;
-			else {
-				/* Unknown entry */
+		} else if (prefix_w(field[0].start, field[0].end, L"group")) {
+			if (!ismode_w(field[2].start, field[2].end, &permset))
 				return (ARCHIVE_WARN);
-			}
-
-			permset = 0;
-			name.start = name.end = NULL;
-
-			if (tag == ARCHIVE_ENTRY_ACL_USER ||
-			    tag == ARCHIVE_ENTRY_ACL_GROUP) {
-				offset = 1;	
+			if (id != -1 || field[1].start < field[1].end) {
+				tag = ARCHIVE_ENTRY_ACL_GROUP;
 				name = field[1];
 			} else
-				offset = 0;
-			
-			if (parse_nfs4_perms_w(field[1 + offset].start, 
-			    field[1 + offset].end, &permset) != 0) {
-				/* NFS4 perms are invalid */
-				return (ARCHIVE_WARN);
-			}
-			if (parse_nfs4_flags_w(field[2 + offset].start,
-			    field[2 + offset].end, &permset) != 0) {
-				/* NFS4 flags are invalid */
+				tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
+		} else if (prefix_w(field[0].start, field[0].end, L"other")) {
+			if (fields == 2
+			    && field[1].start < field[1].end
+			    && ismode_w(field[1].start, field[1].end, &permset)) {
+				/* This is Solaris-style "other:rwx" */
+			} else if (fields == 3
+			    && field[1].start == field[1].end
+			    && field[2].start < field[2].end
+			    && ismode_w(field[2].start, field[2].end, &permset)) {
+				/* This is FreeBSD-style "other::rwx" */
+			} else
 				return (ARCHIVE_WARN);
-			}
-			if (wcsncmp(field[3 + offset].start, L"allow",
-			    field[3 + offset].end - field[3 + offset].start)
-			    == 0)
-				type = ARCHIVE_ENTRY_ACL_TYPE_ALLOW; 
-			else if (wcsncmp(field[3 + offset].start, L"deny",
-			    field[3 + offset].end - field[3 + offset].start)
-			    == 0)
-				type = ARCHIVE_ENTRY_ACL_TYPE_DENY;
-			else if (wcsncmp(field[3 + offset].start, L"audit",
-			    field[3 + offset].end - field[3 + offset].start)
-			    == 0)
-				type = ARCHIVE_ENTRY_ACL_TYPE_AUDIT;
-			else if (wcsncmp(field[3 + offset].start, L"alarm",
-			    field[3 + offset].end - field[3 + offset].start)
-			    == 0)
-				type = ARCHIVE_ENTRY_ACL_TYPE_ALARM;
-			else {
-				/* Unknown type */
+			tag = ARCHIVE_ENTRY_ACL_OTHER;
+		} else if (prefix_w(field[0].start, field[0].end, L"mask")) {
+			if (fields == 2
+			    && field[1].start < field[1].end
+			    && ismode_w(field[1].start, field[1].end, &permset)) {
+				/* This is Solaris-style "mask:rwx" */
+			} else if (fields == 3
+			    && field[1].start == field[1].end
+			    && field[2].start < field[2].end
+			    && ismode_w(field[2].start, field[2].end, &permset)) {
+				/* This is FreeBSD-style "mask::rwx" */
+			} else
 				return (ARCHIVE_WARN);
-			}
-			isint_w(field[4 + offset].start, field[4 + offset].end,
-			    &id);
-		}
+			tag = ARCHIVE_ENTRY_ACL_MASK;
+		} else
+			return (ARCHIVE_WARN);
 
 		/* Add entry to the internal list. */
 		archive_acl_add_entry_w_len(acl, type, permset,
@@ -1280,78 +985,6 @@ ismode_w(const wchar_t *start, const wch
 	return (1);
 }
 
-/* Parse a wstring as a strict NFSv4 ACL permission field. */
-static int
-parse_nfs4_perms_w(const wchar_t *start, const wchar_t *end, int *permset)
-{
-	const wchar_t *p;
-	int pos;
-	const wchar_t *letter = L"rwxpdDaARWcCos";
-	const int perms[14] = {
-	    ARCHIVE_ENTRY_ACL_READ_DATA,
-	    ARCHIVE_ENTRY_ACL_WRITE_DATA,
-	    ARCHIVE_ENTRY_ACL_EXECUTE,
-	    ARCHIVE_ENTRY_ACL_APPEND_DATA,
-	    ARCHIVE_ENTRY_ACL_DELETE,
-	    ARCHIVE_ENTRY_ACL_DELETE_CHILD,
-	    ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
-	    ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES,
-	    ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS,
-	    ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS,
-	    ARCHIVE_ENTRY_ACL_READ_ACL,
-	    ARCHIVE_ENTRY_ACL_WRITE_ACL,
-	    ARCHIVE_ENTRY_ACL_WRITE_OWNER,
-	    ARCHIVE_ENTRY_ACL_SYNCHRONIZE
-	};
-
-	if (start >= end)
-		return (0);
-	p = start;
-	pos = 0;
-	while (p < end && pos < 14) {
-		if (*p == letter[pos])
-			*permset |= perms[pos];
-		else if (*p != '-')
-			return (-1);
-		p = p + sizeof(wchar_t);
-		pos++;
-	}
-	return (0);
-}
-
-/* Parse a string as a strict NFSv4 ACL flags field. */
-static int
-parse_nfs4_flags_w(const wchar_t *start, const wchar_t *end, int *permset)
-{
-	const wchar_t *p;
-	int pos;
-	const wchar_t *letter = L"fdinSFI";
-	const int perms[7] = {
-	    ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT,
-	    ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT,
-	    ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY,
-	    ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT,
-	    ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS,
-	    ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS,
-	    ARCHIVE_ENTRY_ACL_ENTRY_INHERITED
-	};
-
-	if (start >= end)
-		return (0);
-	p = start;
-	pos = 0;
-	while (p < end && pos < 7) {
-		if (*p == letter[pos])
-			*permset |= perms[pos];
-		else if (*p != '-')
-			return (-1);
-		p = p + sizeof(wchar_t);
-		pos++;

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-user mailing list