[lxc-devel] [PATCH] lxclock: use XDG_RUNTIME_DIR for lock if appropriate (v2)
Serge Hallyn
serge.hallyn at ubuntu.com
Mon Jul 22 19:09:19 UTC 2013
If we are euid==0 or XDG_RUNTIME_DIR is not set, then use
/run/lock/lxc/$lxcpath/$lxcname as before. Otherwise,
use $XDG_RUNTIME_DIR/lock/lxc/$lxcpath/$lxcname.
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
Cc: Stéphane Graber <stephane.graber at canonical.com>
---
src/lxc/lxclock.c | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c
index 31bedd8..43e76fa 100644
--- a/src/lxc/lxclock.c
+++ b/src/lxc/lxclock.c
@@ -24,6 +24,8 @@
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
+#define _GNU_SOURCE
+#include <stdlib.h>
#include <lxc/utils.h>
#include <lxc/log.h>
#include <lxc/lxccontainer.h>
@@ -40,14 +42,29 @@ pthread_mutex_t thread_mutex = PTHREAD_MUTEX_INITIALIZER;
static char *lxclock_name(const char *p, const char *n)
{
int ret;
- // /run/lock/lxc/$lxcpath/$lxcname + '\0'
- int len = strlen(p) + strlen(n) + strlen("/run/lock/lxc/") + 2;
- char *dest = malloc(len);
+ int len;
+ char *dest;
+ const char *rundir;
struct stat sb;
- if (!dest)
+ /* lockfile will be:
+ * "/run" + "/lock/lxc/$lxcpath/$lxcname + '\0' if root
+ * or
+ * $XDG_RUNTIME_DIR + "/lock/lxc/$lxcpath/$lxcname + '\0' if non-root
+ */
+
+ /* length of "/lock/lxc/" + $lxcpath + "/" + $lxcname + '\0' */
+ len = strlen("/lock/lxc/") + strlen(n) + strlen(p) + 2;
+ rundir = getenv("XDG_RUNTIME_DIR");
+ if (geteuid() == 0 || rundir == NULL)
+ rundir = "/run";
+
+ len += strlen(rundir);
+
+ if ((dest = malloc(len)) == NULL)
return NULL;
- ret = snprintf(dest, len, "/run/lock/lxc/%s", p);
+
+ ret = snprintf(dest, len, "%s/lock/lxc/%s", rundir, p);
if (ret < 0 || ret >= len) {
free(dest);
return NULL;
@@ -69,7 +86,7 @@ static char *lxclock_name(const char *p, const char *n)
ERROR("Failed to set mode for lockdir %s\n", dest);
}
- ret = snprintf(dest, len, "/run/lock/lxc/%s/%s", p, n);
+ ret = snprintf(dest, len, "%s/lock/lxc/%s/%s", rundir, p, n);
if (ret < 0 || ret >= len) {
free(dest);
return NULL;
--
1.8.3.2
More information about the lxc-devel
mailing list