From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 116750 invoked by alias); 20 Jan 2020 14:48:53 -0000 Mailing-List: contact cygwin-cvs-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cygwin-cvs-owner@cygwin.com Received: (qmail 116667 invoked by uid 9996); 20 Jan 2020 14:48:52 -0000 Date: Mon, 20 Jan 2020 14:48:00 -0000 Message-ID: <20200120144852.116666.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Ken Brown To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: allow opening a symlink with O_PATH | O_NOFOLLOW X-Act-Checkin: newlib-cygwin X-Git-Author: Ken Brown X-Git-Refname: refs/heads/master X-Git-Oldrev: 85aff2830a68ce79a280e5ea31fcf01342d61986 X-Git-Newrev: 35a1a6dbdf03df1e33bae51f679820a3a868d0c0 X-SW-Source: 2020-q1/txt/msg00017.txt https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=35a1a6dbdf03df1e33bae51f679820a3a868d0c0 commit 35a1a6dbdf03df1e33bae51f679820a3a868d0c0 Author: Ken Brown Date: Fri Dec 27 11:43:58 2019 -0500 Cygwin: allow opening a symlink with O_PATH | O_NOFOLLOW Up to now, opening a symlink with O_NOFOLLOW fails with ELOOP. Following Linux, allow this to succeed if O_PATH is also specified. Diff: --- winsup/cygwin/syscalls.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 20126ce..038a316 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1470,7 +1470,7 @@ open (const char *unix_path, int flags, ...) if (!(fh = build_fh_name (unix_path, opt, stat_suffixes))) __leave; /* errno already set */ - if ((flags & O_NOFOLLOW) && fh->issymlink ()) + if ((flags & O_NOFOLLOW) && fh->issymlink () && !(flags & O_PATH)) { set_errno (ELOOP); __leave;