From 8c9c2c6d74febddc8c36bca3b1c57235bb26d228 Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Mon, 6 Jan 2014 23:39:02 -0600 Subject: [PATCH] lxclock: fall back to /tmp if xdg_rundir is not writeable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/lxc/lxclock.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) 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;