From: Serge Hallyn Date: Tue, 7 Jan 2014 05:39:02 +0000 (-0600) Subject: lxclock: fall back to /tmp if xdg_rundir is not writeable X-Git-Tag: lxc-1.0.0.beta2~77 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c9c2c6d74febddc8c36bca3b1c57235bb26d228;p=thirdparty%2Flxc.git lxclock: fall back to /tmp if xdg_rundir is not writeable This happens for instance if you run a test under sudo which then runs lxc commands under 'su - ' Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c index 3e1b054e5..0ff71edda 100644 --- a/src/lxc/lxclock.c +++ b/src/lxc/lxclock.c @@ -121,11 +121,27 @@ static char *lxclock_name(const char *p, const char *n) } ret = mkdir_p(dest, 0755); if (ret < 0) { - free(dest); - return NULL; - } + /* fall back to "/tmp/" $(id -u) "/lxc/" $lxcpath / $lxcname + '\0' */ + int l2 = 33 + strlen(n) + strlen(p); + char *d; + if (l2 > len) { + d = realloc(dest, l2); + if (!d) { + free(dest); + return NULL; + } + len = l2; + } + dest = d; + ret = snprintf(dest, len, "/tmp/%d/lxc/%s", geteuid(), p); + if (ret < 0 || ret >= len) { + free(dest); + 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); - ret = snprintf(dest, len, "%s/lock/lxc/%s/%s", rundir, p, n); if (ret < 0 || ret >= len) { free(dest); return NULL;