Right now if we use lxc-execute without log level set, we get error: lxc: invalid log priority NOTSET. Because we set log level manually in execute_start(), but didn't check if we have a valid log level or not, so fix it.
Signed-off-by: Qiang Huang <h.huangqi...@huawei.com> --- src/lxc/execute.c | 15 +++++++++++---- src/lxc/log.c | 8 ++++++++ src/lxc/log.h | 2 ++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/lxc/execute.c b/src/lxc/execute.c index 9bf33ca..ec5cd29 100644 --- a/src/lxc/execute.c +++ b/src/lxc/execute.c @@ -96,8 +96,11 @@ static int execute_start(struct lxc_handler *handler, void* data) argc_add = 4; if (my_args->quiet) argc_add++; - if (!handler->conf->rootfs.path) - argc_add+=6; + if (!handler->conf->rootfs.path) { + argc_add += 4; + if (lxc_log_has_valid_level()) + argc_add += 2; + } argv = malloc((argc + argc_add) * sizeof(*argv)); if (!argv) @@ -116,8 +119,12 @@ static int execute_start(struct lxc_handler *handler, void* data) argv[i++] = (char *)handler->name; argv[i++] = "--lxcpath"; argv[i++] = (char *)handler->lxcpath; - argv[i++] = "--logpriority"; - argv[i++] = (char *)lxc_log_priority_to_string(lxc_log_get_level()); + + if (lxc_log_has_valid_level()) { + argv[i++] = "--logpriority"; + argv[i++] = (char *) + lxc_log_priority_to_string(lxc_log_get_level()); + } } argv[i++] = "--"; for (j = 0; j < argc; j++) diff --git a/src/lxc/log.c b/src/lxc/log.c index d49a544..6c275ac 100644 --- a/src/lxc/log.c +++ b/src/lxc/log.c @@ -370,6 +370,14 @@ extern int lxc_log_get_level(void) return lxc_log_category_lxc.priority; } +extern bool lxc_log_has_valid_level(void) +{ + int log_level = lxc_log_get_level(); + if (log_level < 0 || log_level >= LXC_LOG_PRIORITY_NOTSET) + return false; + return true; +} + /* * This is called when we read a lxc.logfile entry in a lxc.conf file. This * happens after processing command line arguments, which override the .conf diff --git a/src/lxc/log.h b/src/lxc/log.h index 2fd4050..03dd569 100644 --- a/src/lxc/log.h +++ b/src/lxc/log.h @@ -28,6 +28,7 @@ #include <stdio.h> #include <sys/time.h> #include <string.h> +#include <stdbool.h> #ifndef O_CLOEXEC #define O_CLOEXEC 02000000 @@ -296,5 +297,6 @@ extern int lxc_log_set_level(int level); extern void lxc_log_set_prefix(const char *prefix); extern const char *lxc_log_get_file(void); extern int lxc_log_get_level(void); +extern bool lxc_log_has_valid_level(void); extern const char *lxc_log_get_prefix(void); #endif -- 1.8.3 ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. A cloud service to automate IT design, transition and operations 2. Dashboards that offer high-level views of enterprise services 3. A single system of record for all IT processes http://p.sf.net/sfu/servicenow-d2d-j _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel