summaryrefslogtreecommitdiff
path: root/archivers/star/files
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2016-09-28 22:36:21 +0000
committerMartin Matuska <mm@FreeBSD.org>2016-09-28 22:36:21 +0000
commite83cbd7b9f0214753785072f6e32d0ff24d26155 (patch)
tree1f5403819eff96b8c861f2a1ed729fdaf703a215 /archivers/star/files
parentUpdate to 4.12.28 (diff)
Update star to 1.5.3
Allow build with clang Add patch for FreeBSD NFSv4 ACL support PR: 212274 Submitted by: mm@FreeBSD.org Approved by: maintainer timeout
Notes
Notes: svn path=/head/; revision=422894
Diffstat (limited to 'archivers/star/files')
-rw-r--r--archivers/star/files/patch-autoconf_xconfig.h.in25
-rw-r--r--archivers/star/files/patch-star_Makefile4
-rw-r--r--archivers/star/files/patch-star_acl__unix.c179
3 files changed, 206 insertions, 2 deletions
diff --git a/archivers/star/files/patch-autoconf_xconfig.h.in b/archivers/star/files/patch-autoconf_xconfig.h.in
new file mode 100644
index 000000000000..37f3d48e8aba
--- /dev/null
+++ b/archivers/star/files/patch-autoconf_xconfig.h.in
@@ -0,0 +1,25 @@
+--- autoconf/xconfig.h.in.orig 2014-05-15 19:04:57 UTC
++++ autoconf/xconfig.h.in
+@@ -3,7 +3,7 @@
+ * Dynamic autoconf C-include code.
+ * Do not edit, this file has been created automatically.
+ *
+- * Copyright (c) 1998-2014 J. Schilling
++ * Copyright (c) 1998-2016 J. Schilling
+ *
+ * The layout for this file is controlled by "configure".
+ * Switch off cstyle(1) checks for now.
+@@ -1051,6 +1051,13 @@
+ # define HAVE_NFSV4_ACL 1 /* NFSv4 ACL's present */
+ #endif
+
++#if defined(HAVE_ACL_GET_BRAND_NP)
++#ifndef HAVE_NFSV4_ACL
++# define HAVE_NFSV4_ACL 1 /* NFSv4 ACL's present */
++#endif
++# define HAVE_FREEBSD_NFSV4_ACL 1 /* FreeBSD NFSv4 ACL implementation */
++#endif
++
+ /*
+ * HP-UX ACL support.
+ * Note: unfortunately, HP-UX has an (undocumented) acl() function in libc.
diff --git a/archivers/star/files/patch-star_Makefile b/archivers/star/files/patch-star_Makefile
index 84179542d96c..4a7fa9d69d3d 100644
--- a/archivers/star/files/patch-star_Makefile
+++ b/archivers/star/files/patch-star_Makefile
@@ -1,4 +1,4 @@
---- star/Makefile.orig 2010-05-13 19:47:27 UTC
+--- star/Makefile.orig 2013-11-05 22:36:07 UTC
+++ star/Makefile
@@ -15,7 +15,7 @@ include $(SRCROOT)/$(RULESDIR)/rules.to
INSDIR= bin
@@ -9,7 +9,7 @@
CPPOPTS += -D__STAR__
CPPOPTS += -DSET_CTIME -DFIFO -DUSE_MMAP -DUSE_REMOTE -DUSE_RCMD_RSH
#CPPOPTS += -DSET_CTIME -DFIFO -DUSE_MMAP
-@@ -52,8 +52,8 @@ LIBS= -ldeflt -lrmt -lfind -lschily $(L
+@@ -55,8 +55,8 @@ LIBS= -ldeflt -lrmt -lfind -lschily $(L
#
# Wenn -lfind, dann auch $(LIB_INTL)
#
diff --git a/archivers/star/files/patch-star_acl__unix.c b/archivers/star/files/patch-star_acl__unix.c
new file mode 100644
index 000000000000..1cf57f3eaa2c
--- /dev/null
+++ b/archivers/star/files/patch-star_acl__unix.c
@@ -0,0 +1,179 @@
+--- star/acl_unix.c.orig 2014-03-31 17:44:46 UTC
++++ star/acl_unix.c
+@@ -1,8 +1,8 @@
+-/* @(#)acl_unix.c 1.49 14/03/31 Copyright 2001-2014 J. Schilling */
++/* @(#)acl_unix.c 1.51 16/09/03 Copyright 2001-2014 J. Schilling */
+ #include <schily/mconfig.h>
+ #ifndef lint
+ static UConst char sccsid[] =
+- "@(#)acl_unix.c 1.49 14/03/31 Copyright 2001-2014 J. Schilling";
++ "@(#)acl_unix.c 1.51 16/09/03 Copyright 2001-2014 J. Schilling";
+ #endif
+ /*
+ * ACL get and set routines for unix like operating systems.
+@@ -11,7 +11,7 @@ static UConst char sccsid[] =
+ *
+ * There are currently two basic flavors of ACLs:
+ *
+- * Flavor 1: UFS/POSIX draft
++ * Flavor 1: UFS/POSIX.1e draft (withrawn in 1997)
+ *
+ * The Solaric UFS ACLs that have been developed between 1990 and 1994.
+ * These ACLs have been made available as extensions to NFSv2 and NFSv3.
+@@ -27,7 +27,7 @@ static UConst char sccsid[] =
+ * As True64 does not like ACL "mask" entries and this version of the
+ * ACL code does not generate "mask" entries on True64, ACL support for
+ * True64 is currently broken. You cannot read back archives created
+- * on true64.
++ * on True64.
+ *
+ * Flavor 2: NFSv4
+ *
+@@ -196,6 +196,9 @@ EXPORT void
+ opt_acl()
+ {
+ printf(" acl-POSIX.1e-draft");
++#ifdef HAVE_NFSV4_ACL
++ printf(" acl-NFSv4");
++#endif
+ }
+
+ /*
+@@ -217,6 +220,15 @@ get_acls(info)
+ if (is_symlink(info))
+ return (TRUE);
+
++#ifdef HAVE_FREEBSD_NFSV4_ACL
++ if (acl_to_info(info->f_sname, ACL_TYPE_NFS4, &acl_ace_text)) {
++ if (*acl_ace_text.ps_path != '\0') {
++ info->f_xflags |= XF_ACL_ACE;
++ info->f_acl_ace = acl_ace_text.ps_path;
++ }
++ return (TRUE);
++ }
++#endif
+ if (!acl_to_info(info->f_sname, ACL_TYPE_ACCESS, &acl_access_text))
+ return (FALSE);
+ if (*acl_access_text.ps_path != '\0') {
+@@ -263,6 +275,13 @@ acl_to_info(name, type, acltext)
+ if (err == ENOSYS)
+ return (TRUE);
+ #endif
++#ifdef HAVE_FREEBSD_NFSV4_ACL
++ /*
++ * If ACL type is not NFS4 we continue with POSIX.1e ACLs
++ */
++ if (type == ACL_TYPE_NFS4 && err == EINVAL)
++ return (FALSE);
++#endif
+ if (!errhidden(E_GETACL, name)) {
+ if (!errwarnonly(E_GETACL, name))
+ xstats.s_getaclerrs++;
+@@ -273,7 +292,12 @@ acl_to_info(name, type, acltext)
+ return (FALSE);
+ }
+ seterrno(0);
+- text = acl_to_text(acl, NULL);
++#ifdef HAVE_FREEBSD_NFSV4_ACL
++ if (type == ACL_TYPE_NFS4)
++ text = acl_to_text_np(acl, NULL, ACL_TEXT_APPEND_ID);
++ else
++#endif
++ text = acl_to_text(acl, NULL);
+ acl_free(acl);
+ if (text == NULL) {
+ if (geterrno() == 0)
+@@ -313,6 +337,22 @@ acl_to_info(name, type, acltext)
+ ;
+ }
+
++#ifdef HAVE_FREEBSD_NFSV4_ACL
++ /* remove space fields */
++ if (type == ACL_TYPE_NFS4) {
++ c = text;
++ while ((c = strchr(c, ' ')) != NULL) {
++ char *d = c, *e;
++
++ while (*d && *d == ' ')
++ d++;
++ e = c;
++ while ((*e++ = *d++) != '\0')
++ ;
++ }
++ }
++#endif
++
+ /* count fields */
+ for (c = text; *c != '\0'; c++) {
+ if (*c == '\n') {
+@@ -320,6 +360,14 @@ acl_to_info(name, type, acltext)
+ entries++;
+ }
+ }
++#ifdef HAVE_FREEBSD_NFSV4_ACL
++ if (type == ACL_TYPE_NFS4) {
++ if (strcpy_pspace(PS_EXIT, acltext, text) < 0) {
++ acl_free((acl_t)text);
++ return (FALSE);
++ }
++ } else
++#endif
+ if ((entries > 3) || /* > 4 on Solaris? */
+ (type == ACL_TYPE_DEFAULT && entries >= 3)) {
+ if ((entries * 56) > acltext->ps_size)
+@@ -446,6 +494,55 @@ set_acls(info)
+
+ aclps.ps_path = acltext;
+ aclps.ps_size = PATH_MAX;
++
++#ifdef HAVE_FREEBSD_NFSV4_ACL
++ if (info->f_xflags & XF_ACL_ACE) {
++ ssize_t len = strlen(info->f_acl_ace) + 2;
++
++ if (len > aclps.ps_size) {
++ aclps.ps_path = NULL;
++ aclps.ps_size = 0;
++ grow_pspace(PS_EXIT, &aclps, len);
++ if (aclps.ps_size <= len) {
++ free_pspace(&aclps);
++ return;
++ }
++ }
++ acl_check_ids(aclps.ps_path, info->f_acl_ace, TRUE);
++
++ if ((acl = acl_from_text(aclps.ps_path)) == NULL) {
++ if (!errhidden(E_BADACL, info->f_name)) {
++ if (!errwarnonly(E_BADACL, info->f_name))
++ xstats.s_badacl++;
++ errmsg("Cannot convert NFSv4 ACL '%s' to internal format for ' %s'.\n",
++ aclps.ps_path, info->f_name);
++ (void) errabort(E_BADACL, info->f_name, TRUE);
++ }
++ } else {
++ if (acl_set_file(info->f_name, ACL_TYPE_NFS4,
++ acl) < 0) {
++ /*
++ * XXX What should we do if errno is
++ * ENOTSUP/ENOSYS?
++ */
++ if (!errhidden(E_SETACL, info->f_name)) {
++ if (!errwarnonly(E_SETACL,
++ info->f_name))
++ xstats.s_setacl++;
++ errmsg("Cannot set NFSv4 ACL '%s' for '%s'.\n",
++ aclps.ps_path, info->f_name);
++ (void) errabort(E_SETACL, info->f_name,
++ TRUE);
++ }
++ }
++ acl_free(acl);
++ }
++ if (aclps.ps_path != acltext)
++ free_pspace(&aclps);
++ return;
++ }
++#endif /* HAVE_FREEBSD_NFSV4_ACL */
++
+ if (info->f_xflags & XF_ACL_ACCESS) {
+ ssize_t len = strlen(info->f_acl_access) + 2;
+