Pavel Cahyna <[email protected]> writes:

> Hello Paul, Sergey,
>
> Here is a patch to fix the function name conflict of tar internal
> functions acl_get_file_at(), acl_set_file_at(), and
> acl_delete_def_file_at() with the ones in updated libacl 2.4.0 (released
> today).
>
> Please add it (or an equivalent) to the tar repository ASAP, because
> otherwise tar build with the updated libacl will fail.

Paul/Sergey, if possible, a new release would be much appreciated as
well (not just for this). Is there anything I can do to help with that?

cheers,
sam

>
> Regards, Pavel
>
>
> From f1ecf60ea59c1503e63e887e455756b68db04806 Mon Sep 17 00:00:00 2001
> From: Pavel Cahyna <[email protected]>
> Date: Wed, 24 Jun 2026 18:45:30 +0200
> Subject: [PATCH] Avoid acl_ prefix for functions
>
> The acl.h header from libacl uses acl_ prefix for its functions. Avoid
> defining functions with the same name in order to protect its namespace.
> ---
>  src/xattrs.c | 30 +++++++++++++++---------------
>  1 file changed, 15 insertions(+), 15 deletions(-)
>
> diff --git a/src/xattrs.c b/src/xattrs.c
> index 4f5872c1..f98e8e0f 100644
> --- a/src/xattrs.c
> +++ b/src/xattrs.c
> @@ -133,13 +133,13 @@ static struct
>  #ifdef HAVE_POSIX_ACLS
>  
>  /* acl-at wrappers, TODO: move to gnulib in future? */
> -static acl_t acl_get_file_at (int, const char *, acl_type_t);
> -static int acl_set_file_at (int, const char *, acl_type_t, acl_t);
> +static acl_t tar_acl_get_file_at (int, const char *, acl_type_t);
> +static int tar_acl_set_file_at (int, const char *, acl_type_t, acl_t);
>  static int file_has_acl_at (int, char const *, struct stat const *);
> -static int acl_delete_def_file_at (int, char const *);
> +static int tar_acl_delete_def_file_at (int, char const *);
>  
> -/* acl_get_file_at */
> -#define AT_FUNC_NAME acl_get_file_at
> +/* tar_acl_get_file_at */
> +#define AT_FUNC_NAME tar_acl_get_file_at
>  #define AT_FUNC_RESULT acl_t
>  #define AT_FUNC_FAIL (acl_t)NULL
>  #define AT_FUNC_F1 acl_get_file
> @@ -153,8 +153,8 @@ static int acl_delete_def_file_at (int, char const *);
>  #undef AT_FUNC_POST_FILE_PARAM_DECLS
>  #undef AT_FUNC_POST_FILE_ARGS
>  
> -/* acl_set_file_at */
> -#define AT_FUNC_NAME acl_set_file_at
> +/* tar_acl_set_file_at */
> +#define AT_FUNC_NAME tar_acl_set_file_at
>  #define AT_FUNC_F1 acl_set_file
>  #define AT_FUNC_POST_FILE_PARAM_DECLS   , acl_type_t type, acl_t acl
>  #define AT_FUNC_POST_FILE_ARGS          , type, acl
> @@ -164,8 +164,8 @@ static int acl_delete_def_file_at (int, char const *);
>  #undef AT_FUNC_POST_FILE_PARAM_DECLS
>  #undef AT_FUNC_POST_FILE_ARGS
>  
> -/* acl_delete_def_file_at */
> -#define AT_FUNC_NAME acl_delete_def_file_at
> +/* tar_acl_delete_def_file_at */
> +#define AT_FUNC_NAME tar_acl_delete_def_file_at
>  #define AT_FUNC_F1 acl_delete_def_file
>  #define AT_FUNC_POST_FILE_PARAM_DECLS
>  #define AT_FUNC_POST_FILE_ARGS
> @@ -294,9 +294,9 @@ xattrs__acls_set (struct tar_stat_info const *st,
>           FILE_NAME may already have inherited default acls from parent
>           directory;  clean them up. */
>        struct fdbase f1 = fdbase (file_name);
> -      if (f1.fd == BADFD || acl_delete_def_file_at (f1.fd, f1.base) < 0)
> +      if (f1.fd == BADFD || tar_acl_delete_def_file_at (f1.fd, f1.base) < 0)
>       warnopt (WARN_XATTR_WRITE, errno,
> -                 _("acl_delete_def_file_at: Cannot drop default POSIX ACLs "
> +                 _("tar_acl_delete_def_file_at: Cannot drop default POSIX 
> ACLs "
>                     "for file '%s'"),
>                quote (file_name));
>        return;
> @@ -311,10 +311,10 @@ xattrs__acls_set (struct tar_stat_info const *st,
>      }
>  
>    struct fdbase f = fdbase (file_name);
> -  if (f.fd == BADFD || acl_set_file_at (f.fd, f.base, type, acl) < 0)
> +  if (f.fd == BADFD || tar_acl_set_file_at (f.fd, f.base, type, acl) < 0)
>      /* warn even if filesystem does not support acls */
>      warnopt (WARN_XATTR_WRITE, errno,
> -          _ ("acl_set_file_at: Cannot set POSIX ACLs for file '%s'"),
> +          _ ("tar_acl_set_file_at: Cannot set POSIX ACLs for file '%s'"),
>            quote (file_name));
>  
>    acl_free (acl);
> @@ -351,10 +351,10 @@ acls_get_text (int parentfd, const char *file_name, 
> acl_type_t type,
>    char *val = NULL;
>    acl_t acl;
>  
> -  if (!(acl = acl_get_file_at (parentfd, file_name, type)))
> +  if (!(acl = tar_acl_get_file_at (parentfd, file_name, type)))
>      {
>        if (errno != ENOTSUP)
> -        call_arg_warn ("acl_get_file_at", file_name);
> +        call_arg_warn ("tar_acl_get_file_at", file_name);
>        return;
>      }

Attachment: signature.asc
Description: PGP signature

Reply via email to