]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
usermod, newusers, prefix: enforce absolute paths for homedir 352/head
authorSerge Hallyn <serge@hallyn.com>
Wed, 2 Jun 2021 03:11:37 +0000 (22:11 -0500)
committerSerge Hallyn <serge@hallyn.com>
Wed, 2 Jun 2021 03:12:24 +0000 (22:12 -0500)
useradd already was enforcing this, but these were not.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
libmisc/prefix_flag.c
src/newusers.c
src/usermod.c

index 6eb71a727bf30940e8d1c516cf3ffb2d2ed84fa5..2e455c406462fac9d7b87107da549011a87f3376 100644 (file)
@@ -109,6 +109,12 @@ extern const char* process_prefix_flag (const char* short_opt, int argc, char **
                        return ""; /* if prefix is "/" then we ignore the flag option */
                /* should we prevent symbolic link from being used as a prefix? */
 
+               if ( prefix[0] != '/') {
+                       fprintf (shadow_logfd,
+                                _("%s: prefix must be an absolute path\n"),
+                                Prog);
+                       exit (E_BAD_ARG);
+               }
                size_t len;
                len = strlen(prefix) + strlen(PASSWD_FILE) + 2;
                passwd_db_file = xmalloc(len);
index 90d0a015f69c3eb2e8b17588f260887ec2129f28..16bf7229cf7c59ce899e1753eada3f4a8f981b16 100644 (file)
@@ -1250,6 +1250,13 @@ int main (int argc, char **argv)
 /* FIXME: should check for directory */
                        mode_t mode = getdef_num ("HOME_MODE",
                                                  0777 & ~getdef_num ("UMASK", GETDEF_DEFAULT_UMASK));
+                       if (newpw.pw_dir[0] != '/') {
+                               fprintf(stderr,
+                                       _("%s: line %d: homedir must be an absolute path\n"),
+                                       Prog, line);
+                               errors++;
+                               continue;
+                       };
                        if (mkdir (newpw.pw_dir, mode) != 0) {
                                fprintf (stderr,
                                         _("%s: line %d: mkdir %s failed: %s\n"),
index 69afeda04e3d9abf5eb79c0b186faf3c97575c3d..7870ba57593f9ccc9eb9c46b542e299ccde1333b 100644 (file)
@@ -1110,6 +1110,12 @@ static void process_flags (int argc, char **argv)
                                }
                                dflg = true;
                                user_newhome = optarg;
+                               if (user_newhome[0] != '/') {
+                                       fprintf (stderr,
+                                                _("%s: homedir must be an absolute path\n"),
+                                                Prog);
+                                       exit (E_BAD_ARG);
+                               }
                                break;
                        case 'e':
                                if ('\0' != *optarg) {