Subject: Re: lib/25077: getcwd() doesn't work if a parent directory isn't readable
To: None <bigmac@vim.hu>
From: Simon Burge <simonb@wasabisystems.com>
List: netbsd-bugs
Date: 04/07/2004 16:30:22
bigmac@vim.hu wrote:
> >Number: 25077
> >Category: lib
> >Synopsis: getcwd() doesn't work if a parent directory isn't readable
> >Description:
> Getcwd() returns ``Permission denied'' if a parent directory isn't
> readable (it's not +r, only +x), even if the current directory is.
> It may break several userland applications.
SUSv3 (and thus probably POSIX) says:
The getcwd() function shall fail if:
...
[EACCES]
Read or search permission was denied for a component of the
pathname.
...
RATIONALE
If a program is operating in a directory where some
(grand)parent directory does not permit reading, getcwd() may
fail, as in most implementations it must read the directory to
determine the name of the file. This can occur if search, but
not read, permission is granted in an intermediate directory,
or if the program is placed in that directory by some more
privileged process (for example, login). Including the [EACCES]
error condition makes the reporting of the error consistent and
warns the application writer that getcwd() can fail for reasons
beyond the control of the application writer or user. Some
implementations can avoid this occurrence (for example, by
implementing getcwd() using pwd, where pwd is a set-user-root
process), thus the error was made optional. Since this volume of
IEEE Std 1003.1-2001 permits the addition of other errors, this
would be a common addition and yet one that applications could
not be expected to deal with without this addition.
> >Fix:
> Has it got to be fixed, anyway?
I would say "no" personally.
Simon.
--
Simon Burge <simonb@wasabisystems.com>
NetBSD Support and Service: http://www.wasabisystems.com/