Hello Bastien, On 1/27/21 4:48 PM, roucaries.bast...@gmail.com wrote: > From: Bastien Roucariès <ro...@debian.org> > > Document PATH resolution, particularly null sequence and empty PATH > > Signed-off-by: Bastien Roucariès <ro...@debian.org> > --- > man7/environ.7 | 42 ++++++++++++++++++++++++++++++++++-------- > 1 file changed, 34 insertions(+), 8 deletions(-) > > diff --git a/man7/environ.7 b/man7/environ.7 > index 8fc26bb92..11f30c332 100644 > --- a/man7/environ.7 > +++ b/man7/environ.7 > @@ -68,7 +68,8 @@ The name of the logged-in user (used by some BSD-derived > programs). > Set at login time, see section NOTES below. > .TP > .B LOGNAME > -The name of the logged-in user (used by some System-V derived programs). > +The name of the logged-in user (used by some System-V derived programs > +and POSIX.1-2017).
Please don't include unrelated changes in the same patch. > Set at login time, see section NOTES below. > .TP > .B HOME > @@ -94,19 +95,27 @@ for further details of the > environment variables). > .TP > .B PATH > -The sequence of directory prefixes that > -.BR sh (1) > -and many other > -programs apply in searching for a file known by an incomplete pathname. > -The prefixes are separated by \(aq\fB:\fP\(aq. > -(Similarly one has > +The list of places that shells and other programs look in to find > +a command when given an incomplete pathname. Elements on this > +colon-separated (\(aq\fB:\fP\(aq) list may be absolute or relative directory > +names or the zero-length string (interpreted as meaning the > +current directory, see section BUGS below). > +.B PATH > +is checked element by element (left to right), applying that directory > +name as a prefix to the pathname (if it does not already > +end in a slash, the expansion will insert one between > +the prefix and the filename), > +until a file is found with the appropriate name and execution > +permissions. > +.IP > +Similarly one has > .B CDPATH > used by some shells to find the target > of a change directory command, > .B MANPATH > used by > .BR man (1) > -to find manual pages, and so on) > +to find manual pages, and so on. > .TP > .B PWD > The current working directory. > @@ -254,6 +263,9 @@ and > are specified by > POSIX.1-1996 > and should be reasonably portable. > +.PP > +.B PATH > +behavior is specified by POSIX.1-2017. When you write this, it implies that the behavior was not specified in earlier in earlier versions of POSIX. Is that true? > .SH NOTES > The > .BR prctl (2) > @@ -292,6 +304,12 @@ preserves all the variables from the existing shell, and > or > .I su -l > is the recommended way of getting a full root environment. > +.PP > +The default search path (used when the environment > +does not contain the variable \fBPATH\fR) > +shows some variation across systems. See > +.B execlp (3) > +for documentation of the exact behavior. > .SH BUGS > Clearly there is a security risk here. > Many a system command has been > @@ -330,6 +348,13 @@ The authors of > .I gzip > should consider renaming their option to > .BR GZIP_OPT . > +.PP > +A zero-length element in > +.B PATH, > +which appears as two adjacent colons \(aq\fB::\fP\(aq or as a leading > +or trailing colon on the list, is replaced by implicit \(aq\fB.\fP\(aq. > +In order to be portable and strictly conformant to POSIX.1-2017, a user > +should use instead an explicit \(aq\fB.\fP\(aq. > .SH SEE ALSO > .BR bash (1), > .BR csh (1), > @@ -343,6 +368,7 @@ should consider renaming their option to > .BR execve (2), > .BR clearenv (3), > .BR exec (3), > +.BR execlp (3), I think this line isn't needed. You mention execlp(3) already above. > .BR getenv (3), > .BR putenv (3), > .BR setenv (3), I generally like the idea of this patch, but I can't apply it because of (a) My first comment above (b) It depends on earlier patches that I havne't applied. Thanks, Michael -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/