Quoting Stéphane Graber (stgra...@ubuntu.com): ... > We probably should have code to actually create the path if it's > missing, similar to what's done for /var/lib/lxc and /var/cache/lxc.
How about the following patch on top of the original? log_open: make sure the parent directory for logfiles Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com> --- src/lxc/log.c | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/src/lxc/log.c b/src/lxc/log.c index db5c52f..dc0aa31 100644 --- a/src/lxc/log.c +++ b/src/lxc/log.c @@ -125,12 +125,47 @@ extern void lxc_log_setprefix(const char *prefix) log_prefix[sizeof(log_prefix) - 1] = 0; } +static int build_dir(const char *name) +{ + char *n = strdup(name); // because we'll be modifying it + char *p, *e; + int ret; + + if (!n) { + ERROR("Out of memory while creating directory '%s'.", name); + return -1; + } + + e = &n[strlen(n)]; + for (p = n+1; p < e; p++) { + if (*p != '/') + continue; + *p = '\0'; + if (access(n, F_OK)) { + ret = lxc_unpriv(mkdir(n, 0755)); + if (ret && errno != -EEXIST) { + SYSERROR("failed to create directory '%s'.", n); + free(n); + return -1; + } + } + *p = '/'; + } + free(n); + return 0; +} + /*---------------------------------------------------------------------------*/ static int log_open(const char *name) { int fd; int newfd; + if (build_dir(name)) { + ERROR("failed to create dir for log file \"%s\" : %s", name, + strerror(errno)); + return -1; + } fd = lxc_unpriv(open(name, O_CREAT | O_WRONLY | O_APPEND | O_CLOEXEC, 0666)); if (fd == -1) { @@ -160,16 +195,6 @@ static char *build_log_path(const char *name) p = malloc(len); if (!p) return p; - ret = snprintf(p, len, "%s/%s", LOGPATH, name); - if (ret < 0 || ret >= len) { - free(p); - return NULL; - } - ret = mkdir(p, 0755); - if (ret == -1 && errno != EEXIST) { - free(p); - return NULL; - } ret = snprintf(p, len, "%s/%s/%s.log", LOGPATH, name, name); if (ret < 0 || ret >= len) { free(p); -- 1.8.0 ------------------------------------------------------------------------------ Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery and much more. Keep your Java skills current with LearnJavaNow - 200+ hours of step-by-step video tutorials by Java experts. SALE $49.99 this month only -- learn more at: http://p.sf.net/sfu/learnmore_122612 _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel