}
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);
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);