From: Serge Hallyn Date: Tue, 16 Apr 2013 12:35:05 +0000 (-0500) Subject: mkdir_p: account for '//foo/bar' X-Git-Tag: lxc-1.0.0.alpha1~1^2~292 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=883f4a1eae77f332059dc0be6f965485a0361ec0;p=thirdparty%2Flxc.git mkdir_p: account for '//foo/bar' 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 Signed-off-by: Serge Hallyn --- diff --git a/src/lxc/utils.c b/src/lxc/utils.c index ecf9d2c77..b17f51de9 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -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);