]> granicus.if.org Git - shadow/commitdiff
Fix usermod crash
authorfariouche <fariouche@yahoo.fr>
Wed, 9 May 2018 02:17:46 +0000 (21:17 -0500)
committerSerge Hallyn <shallyn@cisco.com>
Wed, 9 May 2018 02:17:46 +0000 (21:17 -0500)
Return newly allocated pointers when the caller will free them.

Closes #110

libmisc/prefix_flag.c
src/usermod.c

index 6581235e897876e9a5e51eef4e87eac1d2f815f9..8ceffd2665b4ae10a0b7b41aa6b1dc296a4981a8 100644 (file)
@@ -333,7 +333,7 @@ extern struct group *prefix_getgr_nam_gid(const char *grname)
                && (gid == (gid_t)gid)) {
                        return prefix_getgrgid ((gid_t) gid);
                }
-               return prefix_getgrnam (grname);
+               return __gr_dup(prefix_getgrnam (grname));
        }
        else
                return getgr_nam_gid(grname);
index e571426f8382c4fb33cd906ae9b1822907978617..7355ad31103dd0f38101e0adecad866cbe81e69f 100644 (file)
@@ -1251,11 +1251,13 @@ static void process_flags (int argc, char **argv)
                prefix_user_home = xmalloc(len);
                wlen = snprintf(prefix_user_home, len, "%s/%s", prefix, user_home);
                assert (wlen == (int) len -1);
+               if (user_newhome) {
+                       len = strlen(prefix) + strlen(user_newhome) + 2;
+                       prefix_user_newhome = xmalloc(len);
+                       wlen = snprintf(prefix_user_newhome, len, "%s/%s", prefix, user_newhome);
+                       assert (wlen == (int) len -1);
+               }
 
-               len = strlen(prefix) + strlen(user_newhome) + 2;
-               prefix_user_newhome = xmalloc(len);
-               wlen = snprintf(prefix_user_newhome, len, "%s/%s", prefix, user_newhome);
-               assert (wlen == (int) len -1);
        }
        else {
                prefix_user_home = user_home;