Skip to contentSkip to conversation

getpw.3: Function could return -1 and set errno to zero.

PATCH In review Carlos O'Donell 2 participants 4 messages Jan 16, 2015 – Jan 17, 2015 3 messages not in the archive Man-pages: manual pages for Linux -- Sections 2, 3, 4, 5, and 7

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 getpw.3: Function could return -1 and set errno to zero.

All of the BSD interfaces, including glibc's own implementation of getpw return -1 and set errno to 0 to indicate that there was no user corresponding to that uid.

I have never under any condition seen an NSS backend return ENOENT via the set of APIs that getpw uses internally in glibc.

Therefore I would suggest the manual page be expanded to include 0 in the list of valid errno values that indicate no corresponding user. I reorganize the list of errors to have the non-error at the top, as is done with getgrnam.3 and getpwnam.3 which have similar behaviour in the non-error case.

Patch against master.

man3/getpw.3 +4 -4
index 4054823..3eed9a7 100644
@@ -77,14 +77,14 @@ function returns 0 on success; on error, it returns \-1, and
 is set to indicate the error.
 .SH ERRORS
 .TP
+.BR 0 " or " ENOENT
+No user corresponding to
+.IR uid .
+.TP
 .B EINVAL
 .I buf
 is NULL.
 .TP
-.B 0 or ENOENT
-No user corresponding to
-.IR uid .
-.TP
 .B ENOMEM
 Insufficient memory to allocate
 .I passwd

---

Cheers,
Carlos.
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw
Quoted 29 lines · Carlos O'Donell

All of the BSD interfaces, including glibc's own implementation of getpw return -1 and set errno to 0 to indicate that there was no user corresponding to that uid.

I have never under any condition seen an NSS backend return ENOENT via the set of APIs that getpw uses internally in glibc.

Therefore I would suggest the manual page be expanded to include 0 in the list of valid errno values that indicate no corresponding user. I reorganize the list of errors to have the non-error at the top, as is done with getgrnam.3 and getpwnam.3 which have similar behaviour in the non-error case.

Patch against master.

man3/getpw.3 +4 -0
index 4054823..3eed9a7 100644
@@ -77,14 +77,14 @@ function returns 0 on success; on error, it returns \-1, and
 is set to indicate the error.
 .SH ERRORS
 .TP
+.BR 0 " or " ENOENT
+No user corresponding to
+.IR uid .
+.TP
 .B EINVAL

man3/getpw.3 function returns 0 on success; on error, it returns \-1, and · line 90

Quoted 10 lines
man3/getpw.3 +0 -4
 .I buf
 is NULL.
 .TP
-.B 0 or ENOENT
-No user corresponding to
-.IR uid .
-.TP
 .B ENOMEM
 Insufficient memory to allocate
 .I passwd

Hi Carlos,

This patch was broken. (I think you must have prepared a preceding patch that you did not send.

I take your point, but I think a little more could be said. I instead applied the patch below. Okay?

Thanks,

Michael

man3/getpw.3 +14 -4
index cf7eb69..9f2732f 100644
@@ -75,16 +75,26 @@ The
 function returns 0 on success; on error, it returns \-1, and
 .I errno
 is set to indicate the error.
+
+If
+.I uid
+is not found in the password database,
+.BR getpw ()
+returns 0, sets
+.I errno
+to 0, and leaves
+.I buf
+unchanged.
 .SH ERRORS
 .TP
+.BR 0 " or " ENOENT
+No user corresponding to
+.IR uid .
+.TP
 .B EINVAL
 .I buf
 is NULL.
 .TP
-.B ENOENT
-No user corresponding to
-.IR uid .
-.TP
 .B ENOMEM
 Insufficient memory to allocate
 .I passwd
Signature · 7 lines
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

A message that is not in the archive (sent off-list or not yet received): [email protected]

#4 lore raw
Quoted 2 lines · Michael Kerrisk (man-pages)

This patch was broken. (I think you must have prepared a preceding patch that you did not send.

Sorry for that, I had a busy tree and was trying to push out all the temporary patches I had pending.

Quoted 2 lines

I take your point, but I think a little more could be said. I instead applied the patch below. Okay?

Yes, modulo what I expect is a typo. Comments inline.

Quoted 9 lines

Thanks,

Michael

man3/getpw.3 +0 -0
index cf7eb69..9f2732f 100644

man3/getpw.3 The · line 83

Quoted 9 lines
man3/getpw.3 +6 -0
@@ -75,16 +75,26 @@ The
 function returns 0 on success; on error, it returns \-1, and
 .I errno
 is set to indicate the error.
+
+If
+.I uid
+is not found in the password database,
+.BR getpw ()
+returns 0, sets

Should be "returns -1" not "returns 0".

Quoted 12 lines
man3/getpw.3 +8 -0
+.I errno
+to 0, and leaves
+.I buf
+unchanged.
 .SH ERRORS
 .TP
+.BR 0 " or " ENOENT
+No user corresponding to
+.IR uid .
+.TP
 .B EINVAL

man3/getpw.3 The · line 100

Quoted 10 lines
man3/getpw.3 +0 -4
 .I buf
 is NULL.
 .TP
-.B ENOENT
-No user corresponding to
-.IR uid .
-.TP
 .B ENOMEM
 Insufficient memory to allocate
 .I passwd

OK with that change.

Cheers,
Carlos.
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

A message that is not in the archive (sent off-list or not yet received): [email protected]

#6 lore raw
Quoted 1 line · Carlos O'Donell

On 01/16/2015 01:38 AM, Michael Kerrisk (man-pages) wrote:

[...]

Quoted 7 lines

man3/getpw.3 The · line 83

Quoted 5 lines
man3/getpw.3 +5 -0
+If
+.I uid
+is not found in the password database,
+.BR getpw ()
+returns 0, sets

Should be "returns -1" not "returns 0".

D'oh! Thanks for catching that typo, Carlos. Fixed now.

Cheers,

Michael

Signature · 7 lines
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html