From 6f60008bc4ea3aa93c969b0e0d48d5535ea11d9f Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Mon, 17 Jul 2017 17:24:07 +0200 Subject: abuild-sudo: fix segfault when there are no controlling term if there are no controlling reminal getlogin() may return NULL. We use getpwuid() to try figure out the username and verify that we actually have a username before we set environment USER. --- abuild-sudo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/abuild-sudo.c b/abuild-sudo.c index 2d691e8..de8eb94 100644 --- a/abuild-sudo.c +++ b/abuild-sudo.c @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -70,17 +71,28 @@ int main(int argc, const char *argv[]) const char *cmd; const char *path; int i; + struct passwd *pw; grent = getgrnam(ABUILD_GROUP); if (grent == NULL) errx(1, "%s: Group not found", ABUILD_GROUP); char *name = getlogin(); + if (name == NULL) { + pw = getpwuid(getuid()); + if (pw) + name = pw->pw_name; + } + if (!is_in_group(grent->gr_gid)) { errx(1, "User %s is not a member of group %s\n", name ? name : "(unknown)", ABUILD_GROUP); } - setenv("USER", name, 1); + if (name) { + setenv("USER", name, 1); + } else { + warnx("Could not find username for uid %d\n", getuid()); + } cmd = strrchr(argv[0], '/'); if (cmd) -- cgit v1.2.3-70-g09d2