delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2022/02/03/06:05:43

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

- Raw text -


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