delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
X-Original-To: | cygwin AT cygwin DOT com |
Delivered-To: | cygwin AT cygwin DOT com |
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 |
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 | |
X-Yandex-Fwd: | 2 |
Date: | Thu, 3 Feb 2022 13:56:31 +0300 |
From: | Andrey Repin <anrdaemon AT yandex DOT ru> |
X-Mailer: | The Bat! (v6.8.8) Home |
X-Priority: | 3 (Normal) |
Message-ID: | <456680172.20220203135631@yandex.ru> |
To: | Corinna Vinschen <cygwin AT cygwin DOT com>, cygwin AT cygwin DOT com |
Subject: | Re: Cygwin 3.3.4 - cmd to symlinked path doesn't work |
In-Reply-To: | <YflE5ljqQxvwdNZA@calimero.vinschen.de> |
References: | <VI1PR04MB41575EBC7E202ACC1249553186269 AT VI1PR04MB4157 DOT eurprd04 DOT prod DOT outlook DOT com> |
<1157721958 DOT 20220201154725 AT yandex DOT ru> <YflE5ljqQxvwdNZA AT calimero DOT vinschen DOT de> | |
MIME-Version: | 1.0 |
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 AT cygwin DOT com |
X-Mailman-Version: | 2.1.29 |
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> | |
Reply-To: | 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> |
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 AT 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 AT SERVER1 /cygdrive/d >> > $ cd folder1 >> >> > DOMAIN+Administrator AT 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 AT Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ pwd /mnt/d/Reserv/test/cygwin anrdaemon AT 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 AT Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ cd $( pwd ) anrdaemon AT Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ pwd /mnt/d/Reserv/test/cygwin anrdaemon AT 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 AT 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 AT 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 AT Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ pwd.exe /mnt/d/Reserv/test/cygwin anrdaemon AT Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ cd $(pwd) anrdaemon AT Daemon-EC:xterm:/mnt/d/Reserv/test/cygwin $ pwd.exe //DAEMON1.DARKDRAGON.LAN/arc/cygwin anrdaemon AT 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... -- 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
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |