From c94996162fd53f817fee09e424150a88bdf8677a Mon Sep 17 00:00:00 2001 From: ryanwoodsmall Date: Tue, 14 Apr 2020 00:10:06 +0000 Subject: [PATCH] libopenbsd/pwd.c, ls/ls.c: fix segfault on name lookup when uid/gid not present in /etc/passwd or /etc/group --- libopenbsd/pwd.c | 10 ++++++---- ls/ls.c | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/libopenbsd/pwd.c b/libopenbsd/pwd.c index d087150..8cf54f9 100644 --- a/libopenbsd/pwd.c +++ b/libopenbsd/pwd.c @@ -23,8 +23,9 @@ gid_from_group(const char *name, gid_t *gid) const char * group_from_gid(gid_t gid, int nogroup) { - - return (getgrgid(gid)->gr_name); + if (getgrgid(gid) != NULL) + return (getgrgid(gid)->gr_name); + return (getgrgid(nogroup)->gr_name); } int @@ -43,6 +44,7 @@ uid_from_user(const char *name, uid_t *uid) const char * user_from_uid(uid_t uid, int nouser) { - - return (getpwuid(uid)->pw_name); + if (getpwuid(uid) != NULL) + return (getpwuid(uid)->pw_name); + return (getpwuid(nouser)->pw_name); } diff --git a/ls/ls.c b/ls/ls.c index e8282b2..1b3464a 100644 --- a/ls/ls.c +++ b/ls/ls.c @@ -498,8 +498,8 @@ display(FTSENT *p, FTSENT *list) user = nuser; group = ngroup; } else { - user = getpwuid(sp->st_uid)->pw_name; - group = getgrgid(sp->st_gid)->gr_name; + user = user_from_uid(sp->st_uid, 0); + group = group_from_gid(sp->st_gid, 0); } if ((ulen = strlen(user)) > maxuser) maxuser = ulen;