From: Simon Schubert Date: Thu, 9 Jul 2009 20:30:40 +0000 (+0200) Subject: dma: restructure set_username X-Git-Url: https://gitweb.dragonflybsd.org/~corecode/dragonfly.git/commitdiff_plain/431e1ddf2ebaba59acf98e2d50a5b8f595b22819 dma: restructure set_username Restructure to perform early exit and check for strdup() error. --- diff --git a/libexec/dma/dma.c b/libexec/dma/dma.c index 9ca7f990e3..4633b0c6d3 100644 --- a/libexec/dma/dma.c +++ b/libexec/dma/dma.c @@ -134,26 +134,31 @@ static void set_username(void) { struct passwd *pwd; - char *u; + char *u = NULL; uid = getuid(); username = check_username(getlogin(), uid); - if (username == NULL) - username = check_username(getenv("LOGNAME"), uid); - if (username == NULL) - username = check_username(getenv("USER"), uid); - if (username == NULL) { - pwd = getpwuid(uid); - if (pwd != NULL && pwd->pw_name != NULL && - pwd->pw_name[0] != '\0') - username = check_username(strdup(pwd->pw_name), uid); - } - if (username == NULL) { - asprintf(&u, "%ld", (long)uid); - username = u; + if (username != NULL) + return; + username = check_username(getenv("LOGNAME"), uid); + if (username != NULL) + return; + username = check_username(getenv("USER"), uid); + if (username != NULL) + return; + pwd = getpwuid(uid); + if (pwd != NULL && pwd->pw_name != NULL && pwd->pw_name[0] != '\0' && + (u = strdup(pwd->pw_name)) != NULL) { + username = check_username(u, uid); + if (username != NULL) + return; + else + free(u); } - if (username == NULL) - username = "unknown-or-invalid-username"; + asprintf(__DECONST(void *, &username), "%ld", (long)uid); + if (username != NULL) + return; + username = "unknown-or-invalid-username"; } static char *