summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2017-07-17 17:24:07 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2017-07-17 17:24:07 +0200
commit6f60008bc4ea3aa93c969b0e0d48d5535ea11d9f (patch)
treed2ab535b2858fbde2cac620e431e1aff54471cfc
parentf92283f5b96e55f727a05cd0f1c61dc156dc7e6a (diff)
downloadabuild-6f60008bc4ea3aa93c969b0e0d48d5535ea11d9f.tar.gz
abuild-6f60008bc4ea3aa93c969b0e0d48d5535ea11d9f.tar.bz2
abuild-6f60008bc4ea3aa93c969b0e0d48d5535ea11d9f.tar.xz
abuild-6f60008bc4ea3aa93c969b0e0d48d5535ea11d9f.zip
abuild-sudo: fix segfault when there are no controlling termv3.0.0_rc4
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.
-rw-r--r--abuild-sudo.c14
1 files changed, 13 insertions, 1 deletions
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 <err.h>
#include <grp.h>
+#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -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)