delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2025/03/30/08:50:40

DMARC-Filter: OpenDMARC Filter v1.4.2 delorie.com 52UCodga1264069
Authentication-Results: delorie.com; dmarc=pass (p=none dis=none) header.from=cygwin.com
Authentication-Results: delorie.com; spf=pass smtp.mailfrom=cygwin.com
DKIM-Filter: OpenDKIM Filter v2.11.0 delorie.com 52UCodga1264069
Authentication-Results: delorie.com;
dkim=pass (1024-bit key, unprotected) header.d=cygwin.com header.i=@cygwin.com header.a=rsa-sha256 header.s=default header.b=a3lpnKlu
X-Recipient: archive-cygwin AT delorie DOT com
DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3FBE73857BA2
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com;
s=default; t=1743339038;
bh=KCulIpnQb+hqa617VK2rUM95jmeS58NV15pRAz18Q1M=;
h=Date:To:Cc:Subject:References:In-Reply-To:List-Id:
List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:
From:Reply-To:From;
b=a3lpnKluJXJjAshF9o5h8/HmjmG6NS3hV47rRWNM4o1nv7m3+0hsyQ4xX6I36pE/D
mnAjkidKly9dJQ/DvZ8d2ss25b1e4QikzFSu5YUKyyx+iImBf3usMPO+dGcsJ5sQnW
du2cHEQEsDfomuQ5WoV19/+wKUOTIqLBL7JDoEiY=
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 24F523857350
Date: Sun, 30 Mar 2025 14:50:08 +0200
To: Paul Eggert <eggert AT cs DOT ucla DOT edu>
Cc: =?utf-8?Q?P=C3=A1draig?= Brady <P AT draigbrady DOT com>,
Bruno Haible <bruno AT clisp DOT org>, bug-gnulib AT gnu DOT org, cygwin AT cygwin DOT com,
Coreutils <coreutils AT gnu DOT org>
Subject: Re: symbolic link curiousity in 3.6.0
Message-ID: <Z-k-ALeeYtJx7SqL@calimero.vinschen.de>
Mail-Followup-To: Paul Eggert <eggert AT cs DOT ucla DOT edu>,
=?utf-8?Q?P=C3=A1draig?= Brady <P AT draigbrady DOT com>,
Bruno Haible <bruno AT clisp DOT org>, bug-gnulib AT gnu DOT org,
cygwin AT cygwin DOT com, Coreutils <coreutils AT gnu DOT org>
References: <Pine DOT BSF DOT 4 DOT 63 DOT 2503250218240 DOT 74063 AT m0 DOT truegem DOT net>
<Z-aGVCUo0N1VSl5s AT calimero DOT vinschen DOT de>
<Z-aP1jhjXTUVvP-E AT calimero DOT vinschen DOT de> <11037686 DOT 3WhfQktd6Z AT nimes>
<91c9d441-36e3-4dd5-b2ca-3cfd498d2260 AT draigBrady DOT com>
<Z-fLulclFs13NfAm AT calimero DOT vinschen DOT de>
<a78f800c-0463-4efb-b431-c2c244bd13c7 AT cs DOT ucla DOT edu>
MIME-Version: 1.0
In-Reply-To: <a78f800c-0463-4efb-b431-c2c244bd13c7@cs.ucla.edu>
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.30
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Unsubscribe: <https://cygwin.com/mailman/options/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
From: Corinna Vinschen via Cygwin <cygwin AT cygwin DOT com>
Reply-To: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
Errors-To: cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com
Sender: "Cygwin" <cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com>

Hi Paul,

thanks for the patch.

On Mar 29 10:31, Paul Eggert via Cygwin wrote:
> On 3/29/25 04:30, Corinna Vinschen wrote:
> > What it should do if only the POSIX.1e draft 17 functions are available
> > is something along these lines:
> 
> Yes, that sounds like a better approach. However, shouldn't it use O_PATH
> not O_RDONLY? We might lack read access.
> 
> Does the attached Gnulib patch work for you? I haven't tested or installed
> it (I don't use Cygwin).

> From e245ab6ac865c7ff723837645886eb717c53a754 Mon Sep 17 00:00:00 2001
> From: Paul Eggert <eggert AT cs DOT ucla DOT edu>
> Date: Sat, 29 Mar 2025 10:27:01 -0600
> Subject: [PATCH] file-has-acl: port symlink code to Cygwin
> 
> Problem reported by Corinna Vinschen in:
> https://lists.gnu.org/r/bug-gnulib/2025-03/msg00112.html
> * lib/file-has-acl.c (acl_get_link_np): New static function,
> defined only if needed.
> (HAVE_ACL_GET_LINK_NP): Define this if defining acl_get_link_np.
> ---
>  ChangeLog          |  9 +++++++++
>  lib/file-has-acl.c | 21 ++++++++++++++++++++-
>  2 files changed, 29 insertions(+), 1 deletion(-)
> 
> diff --git a/ChangeLog b/ChangeLog
> index 58195260cf..a7fa40dc33 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,12 @@
> +2025-03-29  Paul Eggert  <eggert AT cs DOT ucla DOT edu>
> +
> +	file-has-acl: port symlink code to Cygwin
> +	Problem reported by Corinna Vinschen in:
> +	https://lists.gnu.org/r/bug-gnulib/2025-03/msg00112.html
> +	* lib/file-has-acl.c (acl_get_link_np): New static function,
> +	defined only if needed.
> +	(HAVE_ACL_GET_LINK_NP): Define this if defining acl_get_link_np.
> +
>  2025-03-29  Bruno Haible  <bruno AT clisp DOT org>
>  
>  	acl-permissions: Update comments regarding NetBSD.
> diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c
> index 179e805bd4..2538b61944 100644
> --- a/lib/file-has-acl.c
> +++ b/lib/file-has-acl.c
> @@ -362,6 +362,25 @@ acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes)
>  }
>  #endif
>  
> +#if (!USE_LINUX_XATTR && USE_ACL && HAVE_ACL_GET_FD \
> +     && !HAVE_ACL_EXTENDED_FILE && !HAVE_ACL_TYPE_EXTENDED \
> +     && !HAVE_ACL_GET_LINK_NP && defined O_PATH)

The definition of O_PATH requires an additional

  #include <fcntl.h>

Adding that to gllib/file-has-acl.c, the patch works as desired on
Cygwin.

However, assuming not only Cygwin is affected, shouldn't the patch
rather use O_PATH if it's available, O_RDONLY if not?

> -#    if HAVE_ACL_GET_LINK_NP /* FreeBSD, NetBSD >= 10 */
> +#    if HAVE_ACL_GET_LINK_NP /* FreeBSD, NetBSD >= 10, Cygwin >= 2.5 */

Changing the comment is wrong, IMHO.  We're adding a local version of
HAVE_ACL_GET_LINK_NP specificially because Cygwin (or, FWIW, any system
only providing the POSIX.1e draft 17 function) does not provide
acl_get_link_np, isn't it?

For Cygwin, I will add this function nevertheless, but it will only be
available in some upcoming version, either 3.6.1 or 3.7.0.

In terms of coreutils, I think either ls(1) gobble_file() or
file_has_aclinfo_cache() should still handle ENOENT from
file_has_aclinfo() and not print any error message.  After all, due to
the preconditions for building acl_get_link_np, we can't be sure
acl_get_link_np has really been built into file-has-acl.c, and the
problem persists.

>      if (! (flags & ACL_SYMLINK_FOLLOW))
>        acl_get_file_or_link = acl_get_link_np;
>  #    endif


Thanks,
Corinna

-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019