cvs commit: src/lib/libc/sys mkfifo.2

Bruce Evans bde at zeta.org.au
Wed Dec 13 03:04:50 PST 2006


On Wed, 13 Dec 2006, Pawel Jakub Dawidek wrote:

> pjd         2006-12-13 09:58:49 UTC
>
>  FreeBSD src repository
>
>  Modified files:
>    lib/libc/sys         mkfifo.2
>  Log:
>  mkfifo(2) returns EACCES when write permission is denied for a component of
>  the path prefix.

It isn't that broken.  Write permission is only required for the _final_
component of the path prefix (after pathname resolution).  open.2
expresses this as follows:

%%%
.It Bq Er EACCES
.Dv O_CREAT
is specified,
the file does not exist,
and the directory in which it is to be created
does not permit writing.
%%%

For mkfifo, O_CREAT is implicit, and if the file already exists then
mkfifo() cannot create it, unlike for open(), but as for open() the
writability of the parent directory is irrelevant -- mkfio() returns
EEXISTS in this case.

Old draft POSIX says for mkfifo():

%%%
24874            [EACCES]            A component of the path prefix denies search permission, or write permission
24875                                is denied on the parent directory of the FIFO to be created.
%%%

This is better wording than all the above.  It seems to allow either EEXIST
or EACCES when the the file already exists and the parent directory is not
writable, but I think EACCES for this case doesn't happen in FreeBSD and
would be a bug if it did.

Old draft POSIX says for open():

%%%
27394            [EACCES]            Search permission is denied on a component of the path prefix, or the file
27395                                exists and the permissions specified by oflag are denied, or the file does not
27396                                exist and write permission is denied for the parent directory of the file to be
27397                                created, or O_TRUNC is specified and write permission is denied.
%%%

This is essentially the same as open.2 except it isn't missing documentation
of errors for O_TRUNC.  Here it is clear that writability of the parent
directory is irrelevant if the file already exists.  This is a very
important point for open with (O_CREAT | O_TRUNC).

Here


More information about the cvs-all mailing list