getlogin_r: return early when linux sentinel value is set
Commit Message
On Thu, Mar 22, 2018 at 1:14 AM, Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
> LGTM with CL bit fixed below. Do you need someone to push it for you?
Thanks for the review, if you could push it that would be great, updated
patch attached which fixes the changelog entry
commit 2fe96a5e58bb1b4ab379d1e7a85925bd83755cf7
Author: Jesse Hathaway <jesse@mbuki-mvuki.org>
Date: Fri Mar 16 10:46:50 2018 -0500
getlogin_r: return early when linux sentinel value is set
When there is no login uid Linux sets /proc/self/loginid to the sentinel
value of, (uid_t) - 1. If this is set we can return early and avoid
needlessly looking up the sentinel value in any configured nss
databases.
@@ -1,3 +1,8 @@
+2018-03-20 Jesse Hathaway <jesse@mbuki-mvuki.org> (tiny change)
+
+ * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Return
+ early when linux sentinel value is set.
+
2018-03-20 Samuel Thibault <samuel.thibault@ens-lyon.org>
* manual/errno.texi (EOWNERDEAD, ENOTRECOVERABLE): Remove errno
@@ -55,6 +55,15 @@ __getlogin_r_loginuid (char *name, size_t namesize)
endp == uidbuf || *endp != '\0'))
return -1;
+ /* If there is no login uid, linux sets /proc/self/loginid to the sentinel
+ value of, (uid_t) - 1, so check if that value is set and return early to
+ avoid making unneeded nss lookups. */
+ if (uid == (uid_t) - 1)
+ {
+ __set_errno (ENXIO);
+ return ENXIO;
+ }
+
struct passwd pwd;
struct passwd *tpwd;
int result = 0;