Author: mm
Date: Mon Aug 29 06:50:45 2016
New Revision: 304988
URL: https://svnweb.freebsd.org/changeset/base/304988

Log:
  Revert r304869
  
  This commit was incorrect and will be re-committed asap.

Modified:
  head/contrib/libarchive/libarchive/archive_acl.c
  head/contrib/libarchive/libarchive/archive_entry.h
  head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
  head/contrib/libarchive/libarchive/archive_read_support_format_tar.c
  head/contrib/libarchive/libarchive/archive_read_support_format_zip.c
  head/contrib/libarchive/libarchive/archive_write_disk_acl.c
  head/contrib/libarchive/libarchive/archive_write_disk_posix.c
  head/contrib/libarchive/libarchive/archive_write_set_format_pax.c
  head/contrib/libarchive/tar/util.c
Directory Properties:
  head/contrib/libarchive/   (props changed)
  head/contrib/libarchive/libarchive/   (props changed)
  head/contrib/libarchive/tar/   (props changed)

Modified: head/contrib/libarchive/libarchive/archive_acl.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_acl.c    Mon Aug 29 06:32:30 
2016        (r304987)
+++ head/contrib/libarchive/libarchive/archive_acl.c    Mon Aug 29 06:50:45 
2016        (r304988)
@@ -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++;
-       }
-       return (0);
-}
-
-
 /*
  * Match "[:whitespace:]*(.*)[:whitespace:]*[:,\n]".  *wp is updated
  * to point to just after the separator.  *start points to the first
@@ -1424,18 +1057,12 @@ archive_acl_parse_l(struct archive_acl *
        struct {
                const char *start;
                const char *end;
-       } field[6], name;
+       } field[4], name;
 
-       int numfields, fields, n, r, ret = ARCHIVE_OK;
+       int fields, n, r, ret = ARCHIVE_OK;
        int type, tag, permset, id;
-       int offset;
        char sep;
 
-       if (default_type == ARCHIVE_ENTRY_ACL_TYPE_NFS4)
-               numfields = 6;
-       else
-               numfields = 4;  
-
        while (text != NULL  &&  *text != '\0') {
                /*
                 * Parse the fields out of the next entry,
@@ -1445,7 +1072,7 @@ archive_acl_parse_l(struct archive_acl *
                do {
                        const char *start, *end;
                        next_field(&text, &start, &end, &sep);
-                       if (fields < numfields) {
+                       if (fields < 4) {
                                field[fields].start = start;
                                field[fields].end = end;
                        }
@@ -1453,148 +1080,72 @@ archive_acl_parse_l(struct archive_acl *
                } while (sep == ':');
 
                /* 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(field[1].start, field[1].end, &id);
-                       /* Field 3 is optional. */
-                       if (id == -1 && fields > 3)
-                               isint(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
-                           && memcmp(field[0].start, "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(field[1].start, field[1].end, &id);
+               /* Field 3 is optional. */
+               if (id == -1 && fields > 3)
+                       isint(field[3].start, field[3].end, &id);
 
-                       name.start = name.end = NULL;
-                       if (prefix_c(field[0].start, field[0].end, "user")) {
-                               if (!ismode(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_c(field[0].start, field[0].end,
-                           "group")) {
-                               if (!ismode(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_c(field[0].start, field[0].end,
-                           "other")) {
-                               if (fields == 2
-                                   && field[1].start < field[1].end
-                                   && ismode(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(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_c(field[0].start, field[0].end,
-                           "mask")) {
-                               if (fields == 2
-                                   && field[1].start < field[1].end
-                                   && ismode(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(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
+                   && memcmp(field[0].start, "default", 7) == 0) {
+                       type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
+                       field[0].start += 7;
+               } else
+                       type = default_type;
+

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to