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... -- 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