libarchive: refined #ifdefs for ACL_TYPE_NFS4
Version: 3.1.2-7 Resolves: #993048
This commit is contained in:
parent
bf786a6ffe
commit
da58d4e8af
219
libarchive-3.1.2-acl.patch
Normal file
219
libarchive-3.1.2-acl.patch
Normal file
@ -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. */
|
@ -1,6 +1,6 @@
|
|||||||
Name: libarchive
|
Name: libarchive
|
||||||
Version: 3.1.2
|
Version: 3.1.2
|
||||||
Release: 6%{?dist}
|
Release: 7%{?dist}
|
||||||
Summary: A library for handling streaming archive formats
|
Summary: A library for handling streaming archive formats
|
||||||
|
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
@ -30,6 +30,8 @@ Patch0: libarchive-3.1.3-CVE-2013-0211_read_buffer_overflow.patch
|
|||||||
|
|
||||||
Patch1: libarchive-3.1.2-testsuite.patch
|
Patch1: libarchive-3.1.2-testsuite.patch
|
||||||
|
|
||||||
|
Patch2: libarchive-3.1.2-acl.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Libarchive is a programming library that can create and read several different
|
Libarchive is a programming library that can create and read several different
|
||||||
streaming archive formats, including most popular tar variants, several cpio
|
streaming archive formats, including most popular tar variants, several cpio
|
||||||
@ -72,6 +74,9 @@ libarchive packages.
|
|||||||
# fix bugs in testsuite
|
# fix bugs in testsuite
|
||||||
# ~> upstream ~> 26629c191a & b539b2e597 & 9caa49246
|
# ~> upstream ~> 26629c191a & b539b2e597 & 9caa49246
|
||||||
%patch1 -p1 -b .fix-testsuite
|
%patch1 -p1 -b .fix-testsuite
|
||||||
|
# fix not working saving/restoring acl
|
||||||
|
# ~> downstream
|
||||||
|
%patch2 -p1 -b .fix-acl
|
||||||
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -164,6 +169,10 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Aug 08 2013 Jaromir Koncicky <jkoncick@redhat.com> - 3.1.2-7
|
||||||
|
- Fixed Bug 993048 - added #ifdef ACL_TYPE_NFS4 to code which requires
|
||||||
|
NFS4 ACL support
|
||||||
|
|
||||||
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.1.2-6
|
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.1.2-6
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user