From e83cbd7b9f0214753785072f6e32d0ff24d26155 Mon Sep 17 00:00:00 2001 From: Martin Matuska Date: Wed, 28 Sep 2016 22:36:21 +0000 Subject: [PATCH] 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 --- archivers/star/Makefile | 5 +- archivers/star/distinfo | 5 +- .../star/files/patch-autoconf_xconfig.h.in | 25 +++ archivers/star/files/patch-star_Makefile | 4 +- archivers/star/files/patch-star_acl__unix.c | 179 ++++++++++++++++++ archivers/star/pkg-descr | 2 +- 6 files changed, 212 insertions(+), 8 deletions(-) create mode 100644 archivers/star/files/patch-autoconf_xconfig.h.in create mode 100644 archivers/star/files/patch-star_acl__unix.c diff --git a/archivers/star/Makefile b/archivers/star/Makefile index 2a1909ec654a..f739990125c4 100644 --- a/archivers/star/Makefile +++ b/archivers/star/Makefile @@ -2,9 +2,9 @@ # $FreeBSD$ PORTNAME= star -DISTVERSION= 1.5.2 +DISTVERSION= 1.5.3 CATEGORIES= archivers -MASTER_SITES= http://BSDforge.com/projects/source/srchivers/star/ +MASTER_SITES= SF/s-tar MAINTAINER= portmaster@BSDforge.com COMMENT= Unique standard tape archiver with many enhancements @@ -16,7 +16,6 @@ LICENSE_FILES= ${WRKSRC}/CDDL.Schily.txt BUILD_DEPENDS= smake:devel/smake USES= gettext iconv tar:bzip2 -USE_GCC= any .if defined(NO_INSTALL_MANPAGES) XMKFLAGS= XMK_FILE="" diff --git a/archivers/star/distinfo b/archivers/star/distinfo index 2eac926dcbb5..ad4ed1c7639e 100644 --- a/archivers/star/distinfo +++ b/archivers/star/distinfo @@ -1,2 +1,3 @@ -SHA256 (star-1.5.2.tar.bz2) = 762645b98af13bb9b0512812814ec8e90635d1400c94eb5911e9774daed2addf -SIZE (star-1.5.2.tar.bz2) = 874558 +TIMESTAMP = 1472598366 +SHA256 (star-1.5.3.tar.bz2) = 070342833ea83104169bf956aa880bcd088e7af7f5b1f8e3d29853b49b1a4f5b +SIZE (star-1.5.3.tar.bz2) = 889881 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 + #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; + diff --git a/archivers/star/pkg-descr b/archivers/star/pkg-descr index c8dfaa1ab994..98c752194122 100644 --- a/archivers/star/pkg-descr +++ b/archivers/star/pkg-descr @@ -16,4 +16,4 @@ Main advantages over other tar implementations: Please mail bugs and suggestions to: Author: Joerg Schilling -WWW: http://cdrecord.berlios.de/old/private/star.html +WWW: https://sourceforge.net/projects/s-tar/