Problem with pg_upgrade's directory write check on Windows - Mailing list pgsql-hackers

From Bruce Momjian
Subject Problem with pg_upgrade's directory write check on Windows
Date
Msg-id 201107231245.p6NCjXV25229@momjian.us
Whole thread Raw
Responses Re: Problem with pg_upgrade's directory write check on Windows
List pgsql-hackers
Pg_upgrade writes temporary files (e.g. _dumpall output) into the
current directory, rather than a temporary directory or the user's home
directory.  (This was decided by community discussion.)

I have a check in pg_upgrade 9.1 to make sure pg_upgrade has write
permission in the current directory:
    if (access(".", R_OK | W_OK#ifndef WIN32    /*     * Do a directory execute check only on Unix because execute
permissionon     * NTFS means "can execute scripts", which we don't care about. Also, X_OK     * is not defined in the
WindowsAPI.     */               | X_OK#endif               ) != 0)        pg_log(PG_FATAL,          "You must have
readand write access in the current directory.\n");
 

Unfortunately, I have received a bug report from EnterpriseDB testing
that this does not trigger the FATAL exit on Windows even if the user
does not have write permission in the current directory, e.g. C:\.

I think I see the cause of the problem.  access() on Windows is
described here:
http://msdn.microsoft.com/en-us/library/1w06ktdy%28v=vs.80%29.aspx

It specifically says:
When used with directories, _access determines only whether thespecified directory exists; in Windows NT 4.0 and
Windows2000, alldirectories have read and write access....This function only checks whether the file and directory are
read-onlyornot, it does not check the filesystem security settings.  Forthat you need an access token.
 

We do use access() in a few other places in our code, but not for
directory permission checks.

Any ideas on a solution?  Will checking stat() work?  Do I have to try
creating a dummy file and delete it?

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + It's impossible for everything to be true. +


--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + It's impossible for everything to be true. +


pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: cataloguing NOT NULL constraints
Next
From: Andrew Dunstan
Date:
Subject: Re: Problem with pg_upgrade's directory write check on Windows