From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.kundenserver.de (mout.kundenserver.de [212.227.126.134]) by sourceware.org (Postfix) with ESMTPS id 431A13861034 for ; Mon, 15 Feb 2021 12:25:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 431A13861034 Received: from calimero.vinschen.de ([24.134.7.25]) by mrelayeu.kundenserver.de (mreue012 [212.227.15.167]) with ESMTPSA (Nemesis) id 1Ma0HM-1lPqQI2fBs-00Vvwm for ; Mon, 15 Feb 2021 13:25:38 +0100 Received: by calimero.vinschen.de (Postfix, from userid 500) id 1418FA80D37; Mon, 15 Feb 2021 13:25:38 +0100 (CET) Date: Mon, 15 Feb 2021 13:25:38 +0100 From: Corinna Vinschen To: cygwin-developers@cygwin.com Subject: Re: Root directory being a junction fools realpath() Message-ID: <20210215122538.GN4251@calimero.vinschen.de> Reply-To: cygwin-developers@cygwin.com Mail-Followup-To: cygwin-developers@cygwin.com References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: X-Provags-ID: V03:K1:PqKe7hLMFaVhzkZU30QaEP2MLdGRfKdc45E/EOryYW6nU77y2Dh TzJab1+Q0RM6AlyudOd5Fqgew/37hmqo0V/h4e4BBQog73BktxkistugEPXJCOt653+hDlf KxyKBO1kxY2EKAxZqX5wItEX4FTRhePbFg6jImrpt/WLWeMqCieq8EQxVx3N0BgG1b5oJUV XgC/Pq+7p/ESwdZxJHH2w== X-UI-Out-Filterresults: notjunk:1;V03:K0:rtwt5Vz5T1M=:7Hwf6MhW0kv7yCLXyMprTO TrZIKCPYA+7Fes8uAzlvQQZSV/jhl7uOSZAJf/sR34dHeF9eq08RDfKrcKkd+UqpK7CCyHlza bm7bMkZbBCF1s1GPpRf2VwpoRoAaRCpzr4ZTpaN+L8McsAY+280n7AfrY/+BuPrwAcGf5zpg2 e1GSDx/v+6yTbp4FtXvL/zd4lkLoJhmMbYynK52hWoCSsuCQm/dLhtYlNGs9009Bm/95JwI6U yfYKAvtQy6Mdq967Q1Tdj4IW/LO/s2F+B30RENB52J3i52+svCGl6x3vhOV2KGa5SY5ij1wNJ SB0z9wZk8z+7iTgZqLztp+TyJuvtf4XN7kiKMTIuQNJ7mn6CKgDY09STzGljvmfDcymytVGG5 Ozr8Zjzz/AA+Fw4TgXFuBAW9rgs6S0lVneHN0/+z+S9X7bZvHeR6XRHbCDeDa6JpcbAPxdC46 /tT9oBWtxw== X-Spam-Status: No, score=-101.3 required=5.0 tests=BAYES_00, GOOD_FROM_CORINNA_CYGWIN, KAM_DMARC_NONE, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NEUTRAL, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Feb 2021 12:25:41 -0000 On Feb 14 12:56, David Macek via Cygwin-developers wrote: > Greetings. > > I think I found a way to fool Cygwin into misplacing its root > directory. Given recent Cygwin with GCC and a simple test program: > > ``` > #include > #include > #include > int main() { > char real[PATH_MAX]; > realpath("/", real); > printf("/ -> %s\n", real); > return 0; > } > ``` > > ... compiled with: > > $ gcc -D_DEFAULT_SOURCE -o new.exe -Wall -Wextra -std=c11 new.c > > ... and my set-up with a junction (`mklink /j link target`) realpath() > result is dependent on which path I use to invoke the Cygwin root > process: > > > dir C:\ | findstr cygwin64 > 10. 02. 2021 12:13 cygwin64 > > > dir D:\ | findstr cygwin64 > 14. 02. 2021 12:19 cygwin64 [C:\cygwin64] > > > C:\cygwin64\bin\bash -lc /cygdrive/w/new > / -> / > > > D:\cygwin64\bin\bash -lc /cygdrive/w/new > / -> /cygdrive/c/cygwin64 This isn't realpath's fault. You're circumventing the mount point handling which is automated in terms of /, depending on the path returned from GetModuleFileNameW for the Cygwin DLL. Since you're calling D:\cygwin64\bin\bash the dir returned from GetModuleFileNameW is D:\cygwin64\bin, thus root is D:\cygwin64. However, junctions are treated as symlinks in Cygwin. Thus the result you see above. Corinna