From: Xi Ruoyao Date: Wed, 29 Dec 2021 09:06:39 +0000 (+0800) Subject: fix segfault running useradd -D X-Git-Tag: v4.11~4^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f266a30ffbcff7a14b4b7df91966550fd43c0b5;p=thirdparty%2Fshadow.git fix segfault running useradd -D --- diff --git a/src/useradd.c b/src/useradd.c index 179e08984..a7558b5aa 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #ifdef ACCT_TOOLS_SETUID #ifdef USE_PAM @@ -538,6 +539,7 @@ static int set_defaults (void) FILE *ofp; char buf[1024]; char *new_file = NULL; + char *new_file_dup = NULL; char *default_file = USER_DEFAULTS_FILE; char *cp; int ofd; @@ -578,13 +580,23 @@ static int set_defaults (void) assert (wlen == (int) len -1); } - ret = mkdir(dirname(NEW_USER_FILE), 0755); + new_file_dup = strdup(new_file); + if (new_file_dup == NULL) { + fprintf (stderr, + _("%s: cannot create directory for defaults file\n"), + Prog); + goto setdef_err; + } + + ret = mkdir(dirname(new_file_dup), 0755); if (-1 == ret && EEXIST != errno) { fprintf (stderr, _("%s: cannot create directory for defaults file\n"), Prog); + free(new_file_dup); goto setdef_err; } + free(new_file_dup); /* * Create a temporary file to copy the new output to.