]> git.proxmox.com Git - mirror_lxc.git/commitdiff
mkdir_p: account for '//foo/bar'
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Tue, 16 Apr 2013 12:35:05 +0000 (07:35 -0500)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Tue, 16 Apr 2013 12:40:57 +0000 (07:40 -0500)
As Richard reported, dirname('//') returns //.  But mkdir_p only stops
when called with '/', resulting in infinite recursion when given a
pathname '//foo/bar'.

Reported-by: richard -rw- weinberger <richard.weinberger@gmail.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/utils.c

index ecf9d2c77c9a22b67233d186ad8543896f01bcd5..b17f51de9563ae3d082e5cbd4439436339910e05 100644 (file)
@@ -95,12 +95,21 @@ extern int get_u16(unsigned short *val, const char *arg, int base)
        return 0;
 }
 
+static int is_all_slashes(char *path)
+{
+       while (*path && *path == '/')
+               path++;
+       if (*path)
+               return 0;
+       return 1;
+}
+
 extern int mkdir_p(char *dir, mode_t mode)
 {
         int ret;
         char *d;
 
-        if (!strcmp(dir, "/"))
+       if (is_all_slashes(dir))
                 return 0;
 
         d = strdup(dir);