From: Kohei YOSHIDA Date: Thu, 22 Jan 2015 06:16:39 +0000 (+0900) Subject: fix failed to fallback at lxclock_name X-Git-Tag: lxc-1.1.0.rc2~3^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F408%2Fhead;p=thirdparty%2Flxc.git fix failed to fallback at lxclock_name lxclock_name will fallback to /tmp/$(id -u)/lxc$lxcpath/.$lxcname when failed to create directories into rundir. But, in currently, lxclock_name returns untill preparing directories under the /tmp, so invoker will fail to get the container lock. This patch fixes fixes this. Signed-off-by: Kohei YOSHIDA --- diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c index ea9be3c54..922822c75 100644 --- a/src/lxc/lxclock.c +++ b/src/lxc/lxclock.c @@ -128,8 +128,11 @@ static char *lxclock_name(const char *p, const char *n) } ret = mkdir_p(dest, 0755); if (ret < 0) { - /* fall back to "/tmp/" $(id -u) "/lxc/" $lxcpath / $lxcname + '\0' */ - int l2 = 34 + strlen(n) + strlen(p); + /* fall back to "/tmp/" + $(id -u) + "/lxc" + $lxcpath + "/" + "." + $lxcname + '\0' + * * maximum length of $(id -u) is 10 calculated by (log (2 ** (sizeof(uid_t) * 8) - 1) / log 10 + 1) + * * lxcpath always starts with '/' + */ + int l2 = 22 + strlen(n) + strlen(p); if (l2 > len) { char *d; d = realloc(dest, l2); @@ -141,13 +144,19 @@ static char *lxclock_name(const char *p, const char *n) len = l2; dest = d; } - ret = snprintf(dest, len, "/tmp/%d/lxc/%s", geteuid(), p); + ret = snprintf(dest, len, "/tmp/%d/lxc%s", geteuid(), p); if (ret < 0 || ret >= len) { free(dest); free(rundir); return NULL; } - ret = snprintf(dest, len, "/tmp/%d/lxc/%s/.%s", geteuid(), p, n); + ret = mkdir_p(dest, 0755); + if (ret < 0) { + free(dest); + free(rundir); + return NULL; + } + ret = snprintf(dest, len, "/tmp/%d/lxc%s/.%s", geteuid(), p, n); } else ret = snprintf(dest, len, "%s/lock/lxc/%s/.%s", rundir, p, n);