From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from forward500o.mail.yandex.net (forward500o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::610]) by sourceware.org (Postfix) with ESMTPS id 6C25F3858D37 for ; Thu, 3 Feb 2022 11:05:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6C25F3858D37 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=yandex.ru Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yandex.ru Received: from vla1-692e383ae130.qloud-c.yandex.net (vla1-692e383ae130.qloud-c.yandex.net [IPv6:2a02:6b8:c0d:4e82:0:640:692e:383a]) by forward500o.mail.yandex.net (Yandex) with ESMTP id 9429D942AB9 for ; Thu, 3 Feb 2022 14:05:02 +0300 (MSK) Received: from vla5-3832771863b8.qloud-c.yandex.net (vla5-3832771863b8.qloud-c.yandex.net [2a02:6b8:c18:3417:0:640:3832:7718]) by vla1-692e383ae130.qloud-c.yandex.net (mxback/Yandex) with ESMTP id aITCcEnwUC-52d8j1RU; Thu, 03 Feb 2022 14:05:02 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1643886302; bh=l/izCLAl7fiRBBY54yiy8qSXPlpUFuO130fmk98ei7Y=; h=In-Reply-To:Subject:From:Message-ID:References:Date:Reply-To:To; b=iMd+aHHUlUo1Y8SryVic/XMHbxPJ+TUVPzZDvQq4auYVG7kJHl8hN1/PnSzqxVYg/ x+kTfaUEGv99ql/8k5Vpwq7RruFFKRg88ADCNyxR0OkUDhHMSR+iONnt+qdGyk7pGg BNGgLZi4kc6x3ZR4pXhU4RpbFX61KTXZz8txQaN4= Authentication-Results: vla1-692e383ae130.qloud-c.yandex.net; dkim=pass header.i=@yandex.ru Received: by vla5-3832771863b8.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id 4NkhwBCudk-52HC4obv; Thu, 03 Feb 2022 14:05:02 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client certificate not present) X-Yandex-Fwd: 2 Received: from [192.168.1.10] (HELO daemon2.darkdragon.lan) by daemon2 (Office Mail Server 0.8.12 build 08053101) with SMTP; Thu, 03 Feb 2022 10:56:31 -0000 Date: Thu, 3 Feb 2022 13:56:31 +0300 From: Andrey Repin X-Mailer: The Bat! (v6.8.8) Home Reply-To: cygwin@cygwin.com X-Priority: 3 (Normal) Message-ID: <456680172.20220203135631@yandex.ru> To: Corinna Vinschen , cygwin@cygwin.com Subject: Re: Cygwin 3.3.4 - cmd to symlinked path doesn't work In-Reply-To: References: <1157721958.20220201154725@yandex.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, KAM_THEBAT, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: cygwin@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Feb 2022 11:05:07 -0000 Greetings, Corinna Vinschen! > On Feb 1 15:47, Andrey Repin wrote: >> Greetings, BRISLANE Mark! >> >> > We had this issue in 3.3.3 and is down as being fixed in 3.3.4-2 but >> > perhaps our scenario is slightly different because it's still happening. >> > SERVER1 has a folder on D: called folder 1, which is a symlink to >> > "\\server2\share\folder1" - created with mklink /D folder1 \\server2\share\folder1 >> >> > DOMAIN+Administrator@SERVER1 /cygdrive/d >> > $ ls -l >> > total 3 >> > drwxr-x---+ 1 Administrators SERVER1+None 0 Jan 28 11:03 '$RECYCLE.BIN' >> > d---rwx---+ 1 Administrators SYSTEM 0 Jan 25 23:07 'System Volume Information' >> > lrwxrwxrwx 1 Administrators DOMAIN+Domain Users 32 Nov 9 10:52 folder1 -> //server2/share/folder1 >> >> > DOMAIN+Administrator@SERVER1 /cygdrive/d >> > $ cd folder1 >> >> > DOMAIN+Administrator@SERVER1 /cygdrive/d/folder1 >> > $ cmd >> > '\\server2\share\folder1' >> > CMD.EXE was started with the above path as the current directory. >> > UNC paths are not supported. Defaulting to Windows directory. >> > Microsoft Windows [Version 10.0.14393] >> > (c) 2016 Microsoft Corporation. All rights reserved. >> >> > C:\Windows> >> >> > This used to work in older versions of Cygwin. >> >> The interesting part is that the behavior is dependent on sequence of events. >> >> `mintty bash -i` in a directory: >> >> > $ pwd >> > /cygdrive/d/cygwin >> > $ cmd >> > Microsoft Windows [Version 6.1.7601] >> > Copyright (c) 2009 Microsoft Corporation. All rights reserved. >> > >> > D:\cygwin> exit > Not sure how you did that, Did what? Opened an interactive shell in a directory? Navigated into it in a different file manager and just used a command. Opened CMD in an UNC path? reg ADD "HKCU\\Software\\Microsoft\\Command Processor" /f /v "DisableUNCCheck" /t REG_DWORD /d 1 Not even required to re-login. Or globally for entire system in HKLM\SOFTWARE\Microsoft\Command Processor (keep in mind there's 32- and 64-bit variants of the key, you'd have to modify both to get consistent behavior). > but I can't reproduce this, and I'm pretty certain the CMD failure is how > Cygwin works for a long time. I get this same behaviour back to Cygwin > 3.1.7, which is where I stopped testing. Win10 this time: anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ pwd /mnt/d/Reserv/test/cygwin anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ cmd Microsoft Windows [Version 10.0.19044.1466] (c) Microsoft Corporation. All rights reserved. D:\Reserv\test\cygwin>exit anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ cd $( pwd ) anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ pwd /mnt/d/Reserv/test/cygwin anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ cmd '\\DAEMON1.DARKDRAGON.LAN\arc\cygwin' CMD.EXE was started with the above path as the current directory. UNC paths are not supported. Defaulting to Windows directory. Microsoft Windows [Version 10.0.19044.1466] (c) Microsoft Corporation. All rights reserved. C:\Windows>exit ## Here I fixed the CMD settings in a different elevated window anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ cmd Microsoft Windows [Version 10.0.19044.1466] (c) Microsoft Corporation. All rights reserved. \\DAEMON1.DARKDRAGON.LAN\arc\cygwin>exit anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ > The reason is this: > Reparse points created with mklink /d are evaluated as symlinks. This > reparse point contains an absolute UNC path. If you cd to this dir in > Cygwin, Cygwin evaluates the path and reads the symlink content. Given > the content is an absolute path, the symlink content replaces the > entire path. Internally the CWD is stored twice, once in POSIX, once > in Windows syntax. In short, what happens is this: > pwd -> POSIX(/cygdrive/d), WIN(D:) > cd cygwin -> > open reparse point "cygwin" > read content == "\\server2\share\folder1" > convert to POSIX == "//server2/share/folder1" > restart path evaluation and check for further symlinks > -> no further symlinks > convert path to Windows == "\\server2\share\folder1" > store both paths as new CWD > pwd -> POSIX(//server2/share/folder1), > WIN(\\server2\share\folder1) > So what happens in bash? > $ pwd > /cygdrive/d > $ cd cygwin > $ pwd > /cygdrive/d/cygwin > $ /bin/pwd > //server2/share/folder1 Except if you don't "cd", it uses whatever is given by the operating system. anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ pwd.exe /mnt/d/Reserv/test/cygwin anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ cd $(pwd) anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ pwd.exe //DAEMON1.DARKDRAGON.LAN/arc/cygwin anrdaemon@Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ > pwd is a builtin command. It works differently from /bin/pwd in that > bash pwd does not cd to a dir and then reads the dir stored in the OS > again. Rather it just appends the new dir as has been given on the CLI. > There's a setting somewhere to make bash reevaluate the CWD all the time > but I don't know it off the top of my head. > Bottom line is, that *in fact* the CWD in the underlying Cygwin layer is > the share, not the drive letter path. And that's what any subsequently > started process gets as CWD, CMD just as well as any Cygwin process. > If you want CMD to succeed in this scenario all the time, you have to > start CMD in /cygdrive/d and then pushd or cd to the cygwin dir. CMD > will not evaluate the reparse point as symlink and just go ahead. > Alternatively, just use powershell if you need a native shell. Powershell > has no problem with UNC paths as CWD. > I hope that explains it sufficiently. I though, by the time everybody had learned to suppress that stupid CMD behavior, but here it is once again. -- With best regards, Andrey Repin Thursday, February 3, 2022 11:40:48 Sorry for my terrible english...