Re: Checking pgwin32_is_junction() errors - Mailing list pgsql-hackers

From Thomas Munro
Subject Re: Checking pgwin32_is_junction() errors
Date
Msg-id CA+hUKGK0tEcvdh3zR22LqwqAxPvfv3geL+ewaZsHqzvunn+gHw@mail.gmail.com
Whole thread Raw
In response to Re: Checking pgwin32_is_junction() errors  (r.zharkov@postgrespro.ru)
List pgsql-hackers
On Thu, Aug 11, 2022 at 10:40 PM <r.zharkov@postgrespro.ru> wrote:
> On 2022-08-11 07:55, Thomas Munro wrote:
> >> I checked a few variants:
> >>
> >> 21.07.2022  15:11    <JUNCTION>     HOME [\??\Volume{GUID}\]
> >> 09.08.2022  15:06    <JUNCTION>     Test1 [\\?\Volume{GUID}\]
> >> 09.08.2022  15:06    <JUNCTION>     Test2 [\\.\Volume{GUID}\]
> >> 09.08.2022  15:17    <JUNCTION>     Test3 [\??\Volume{GUID}\]
> >> 09.08.2022  15:27    <JUNCTION>     Test4 [C:\temp\1]
> >> 09.08.2022  15:28    <JUNCTION>     Test5 [C:\HOME\Temp\1]
> >
> > One more thing I wondered about, now that we're following junctions
> > outside PGDATA: can a junction point to another junction?  If so, I
> > didn't allow for that: stat() gives up after one hop, because I
> > figured that was enough for the stuff we expect inside PGDATA and I
> > couldn't find any evidence in the man pages that referred to chains.
> > But if you *are* allowed to create a junction "c:\huey" that points to
> > junction "c:\dewey" that points to "c:\louie", and then you do initdb
> > -D c:\huey\pgdata, then I guess it would fail.  Would you mind
> > checking if that is a real possibility, and if so, testing this
> > chain-following patch to see if it fixes it?
>
> I made some junctions and rechecked both patches.
>
> 11.08.2022  16:11    <JUNCTION>     donald [C:\huey]
> 11.08.2022  13:23    <JUNCTION>     huey [C:\dewey]
> 11.08.2022  13:23    <JUNCTION>     dewey [C:\louie]
> 11.08.2022  16:57    <DIR>          louie
>
> With the small attached patch initdb succeeded in any of these
> "directories". If the junction chain is too long, initdb fails with
> "could not create directory" as expected.

Thanks for testing and for that fix!  I do intend to push this, and a
nearby fix for unlink(), but first I want to have test coverage for
all this stuff so we can demonstrate comprehensively that it works via
automated testing, otherwise it's just impossible to maintain (at
least for me, Unix guy).  I have a prototype test suite based on
writing TAP tests in C and I've already found more subtle ancient bugs
around the Windows porting layer... more soon.



pgsql-hackers by date:

Previous
From: Erwin Brandstetter
Date:
Subject: Re: Allow WindowFuncs prosupport function to use more optimal WindowClause options
Next
From: Ankit Oza
Date:
Subject: Re: PostgreSQL Logical decoding