bug#41001: mkdir: cannot create directory ‘test’: File exists

2020-05-02 Thread Paul Eggert
On 5/2/20 3:41 PM, Jonny Grant wrote:
> Is a more accurate strerror considered unreliable?
> 
> Current:
> mkdir: cannot create directory ‘test’: File exists
> 
> Proposed:
> mkdir: cannot create directory ‘test’: Is a directory

I don't understand this comment. As I understand it you're proposing a change to
the mkdir command not a change to the strerror library function, and the change
you're proposing would introduce a race condition to the mkdir command.

A better fix would be to change the mkdir system call so that it sets errno to
EISDIR in this situation. This would fix not only the mkdir utility, but also
lots of other programs; and it wouldn't introduce a race condition. So if you're
interested in getting the problem fixed, I suggest that you propose such a
change to the Linux kernel developers.





bug#41001: mkdir: cannot create directory ‘test’: File exists

2020-05-02 Thread Jonny Grant




On 02/05/2020 20:47, Paul Eggert wrote:

On 5/2/20 6:26 AM, Jonny Grant wrote:

If developers have race conditions in their shell scripts


I've personally fixed a bug in the GNU mkdir command that was triggered by such
races. Core utilities should be reliable even when these races are happening.


Is a more accurate strerror considered unreliable?

Current:
mkdir: cannot create directory ‘test’: File exists

Proposed:
mkdir: cannot create directory ‘test’: Is a directory

Cheers, Jonny





bug#41001: mkdir: cannot create directory ‘test’: File exists

2020-05-02 Thread Paul Eggert
On 5/2/20 6:26 AM, Jonny Grant wrote:
> If developers have race conditions in their shell scripts

I've personally fixed a bug in the GNU mkdir command that was triggered by such
races. Core utilities should be reliable even when these races are happening.





bug#41001: mkdir: cannot create directory ‘test’: File exists

2020-05-02 Thread Jonny Grant




On 01/05/2020 21:32, Paul Eggert wrote:

On 5/1/20 1:21 PM, Jonny Grant wrote:

yes, the fix pretty trivial for mkdir as you highlight EISDIR:
stat(), S_ISDIR(sb.st_mode), and set errno to EISDIR or output strerror(EISDIR)


That would introduce a race condition, and wouldn't behave correctly if some
other process changes the destination from a regular file to a directory between
the time we call mkdir and the time that we call stat.


Paul,

If developers have race conditions in their shell scripts - mkdir error 
string in the message after the colon in the output saying 
file/directory is the least of the developers' problems.


mkdir() returning EEXIST only indicates the pathname exists.

Maybe call stat() before calling mkdir() to check nothing there. It's 
more a question of doing something appropriate.


Personally I doubt POSIX will ever be updated to have more errno errors 
that distinguish between files and directories for ENOENT and EEXIST due 
to people's fears about compatibility when APIs are updated.


Cheers, Jonny