]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
remove logfile and loglevel from struct lxc_conf
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Fri, 11 Jan 2013 18:39:31 +0000 (12:39 -0600)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Mon, 14 Jan 2013 20:03:57 +0000 (14:03 -0600)
The options are still supported in the lxc configuration file.
However they are stored only in local variables in src/lxc/log.c,
which can be read using two new functions:
int lxc_log_get_level(void);
const char *lxc_log_get_file(void);

Changelog: jan 14:
 have lxc_log_init use lxc_log_set_file(), have lxc_log_set_file() take
 a const char *, and have it keep its own strdup'd copy of the filename.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/conf.c
src/lxc/conf.h
src/lxc/confile.c
src/lxc/log.c
src/lxc/log.h

index e5e522c67d127126f73d8c982f00f70a475cf090..ea0fcf6fc6c78c42db212f6d2d9f4ad3703dca90 100644 (file)
@@ -2077,7 +2077,6 @@ struct lxc_conf *lxc_conf_init(void)
        new->console.name[0] = '\0';
        new->maincmd_fd = -1;
        new->rootfs.mount = default_rootfs_mount;
-       new->loglevel = LXC_LOG_PRIORITY_NOTSET;
        lxc_list_init(&new->cgroup);
        lxc_list_init(&new->network);
        lxc_list_init(&new->mount_list);
@@ -2938,8 +2937,6 @@ void lxc_conf_free(struct lxc_conf *conf)
                free(conf->ttydir);
        if (conf->fstab)
                free(conf->fstab);
-       if (conf->logfile)
-               free(conf->logfile);
        lxc_clear_config_network(conf);
 #if HAVE_APPARMOR
        if (conf->aa_profile)
index 1f9b8617340b91890ecc6a18ddfafa661c5974ef..83de84aabeacfc05e53472d979b6ce4da07e5631 100644 (file)
@@ -246,8 +246,6 @@ struct lxc_conf {
 #if HAVE_APPARMOR
        char *aa_profile;
 #endif
-       char *logfile;
-       int loglevel;
 
 #if HAVE_APPARMOR /* || HAVE_SELINUX || HAVE_SMACK */
        int lsm_umount_proc;
index 6b75b6a77dad2220709d6d5b5b4deec960295bb3..7372a347b5787c6f3d26a94aa1a04acfd8afe045 100644 (file)
@@ -922,46 +922,31 @@ static int config_aa_profile(const char *key, const char *value,
 static int config_logfile(const char *key, const char *value,
                             struct lxc_conf *lxc_conf)
 {
-       char *path;
-
-       // if given a blank entry, null out any previous entries.
-       if (!value || strlen(value) == 0) {
-               if (lxc_conf->logfile) {
-                       free(lxc_conf->logfile);
-                       lxc_conf->logfile = NULL;
-               }
+       if (lxc_log_get_file()) {
+               DEBUG("Log file already specified - ignoring new value");
                return 0;
        }
 
-       path = strdup(value);
-       if (!path) {
-               SYSERROR("failed to strdup '%s': %m", value);
-               return -1;
-       }
-
-       if (lxc_log_set_file(path)) {
-               free(path);
-               return -1;
-       }
-
-       if (lxc_conf->logfile)
-               free(lxc_conf->logfile);
-       lxc_conf->logfile = path;
-
-       return 0;
+       return lxc_log_set_file(value);
 }
 
 static int config_loglevel(const char *key, const char *value,
                             struct lxc_conf *lxc_conf)
 {
+       int newlevel;
+
        if (!value || strlen(value) == 0)
                return 0;
 
+       if (lxc_log_get_level() != LXC_LOG_PRIORITY_NOTSET) {
+               DEBUG("Log level already set - ignoring new value");
+               return 0;
+       }
        if (value[0] >= '0' && value[0] <= '9')
-               lxc_conf->loglevel = atoi(value);
+               newlevel = atoi(value);
        else
-               lxc_conf->loglevel = lxc_log_priority_to_int(value);
-       return lxc_log_set_level(lxc_conf->loglevel);
+               newlevel = lxc_log_priority_to_int(value);
+       return lxc_log_set_level(newlevel);
 }
 
 static int config_autodev(const char *key, const char *value,
@@ -1612,9 +1597,9 @@ int lxc_get_config_item(struct lxc_conf *c, const char *key, char *retv,
                v = c->aa_profile;
 #endif
        else if (strcmp(key, "lxc.logfile") == 0)
-               v = c->logfile;
+               v = lxc_log_get_file();
        else if (strcmp(key, "lxc.loglevel") == 0)
-               v = lxc_log_priority_to_string(c->loglevel);
+               v = lxc_log_priority_to_string(lxc_log_get_level());
        else if (strcmp(key, "lxc.cgroup") == 0) // all cgroup info
                return lxc_get_cgroup_entry(c, retv, inlen, "all");
        else if (strncmp(key, "lxc.cgroup.", 11) == 0) // specific cgroup info
@@ -1694,10 +1679,10 @@ void write_config(FILE *fout, struct lxc_conf *c)
        if (c->aa_profile)
                fprintf(fout, "lxc.aa_profile = %s\n", c->aa_profile);
 #endif
-       if (c->loglevel != LXC_LOG_PRIORITY_NOTSET)
-               fprintf(fout, "lxc.loglevel = %s\n", lxc_log_priority_to_string(c->loglevel));
-       if (c->logfile)
-               fprintf(fout, "lxc.logfile = %s\n", c->logfile);
+       if (lxc_log_get_level() != LXC_LOG_PRIORITY_NOTSET)
+               fprintf(fout, "lxc.loglevel = %s\n", lxc_log_priority_to_string(lxc_log_get_level()));
+       if (lxc_log_get_file())
+               fprintf(fout, "lxc.logfile = %s\n", lxc_log_get_file());
        lxc_list_for_each(it, &c->cgroup) {
                struct lxc_cgroup *cg = it->elem;
                fprintf(fout, "lxc.cgroup.%s = %s\n", cg->subsystem, cg->value);
index 0354d8dfcc8622a80a9958f94c99a46f7c044b59..d2a90de7a6846045cd0564d7a24935031aa94107 100644 (file)
@@ -41,7 +41,7 @@
 
 int lxc_log_fd = -1;
 static char log_prefix[LXC_LOG_PREFIX_SIZE] = "lxc";
-int lxc_loglevel_specified = 0;
+static int lxc_loglevel_specified = 0;
 
 lxc_log_define(lxc_log, lxc);
 
@@ -176,17 +176,8 @@ extern int lxc_log_init(const char *file, const char *priority,
        if (prefix)
                lxc_log_setprefix(prefix);
 
-       if (file) {
-               int fd;
-
-               fd = log_open(file);
-               if (fd == -1) {
-                       ERROR("failed to initialize log service");
-                       return -1;
-               }
-
-               lxc_log_fd = fd;
-       }
+       if (file)
+               return lxc_log_set_file(file);
 
        return 0;
 }
@@ -208,21 +199,39 @@ extern int lxc_log_set_level(int level)
        return 0;
 }
 
+char *log_fname;  // default to NULL, set in lxc_log_set_file.
+
 /*
  * 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
  * settings.  So only set the logfile if previously unset.
  */
-extern int lxc_log_set_file(char *fname)
+extern int lxc_log_set_file(const char *fname)
 {
        if (lxc_log_fd != -1) {
-               INFO("Configuration file was specified on command line, configuration file entry being ignored");
-               return 0;
+               // this should've been caught at config_logfile.
+               ERROR("Race in setting logfile?");
+               return -1;
        }
+
        lxc_log_fd = log_open(fname);
        if (lxc_log_fd == -1) {
                ERROR("failed to open log file %s\n", fname);
                return -1;
        }
+
+       log_fname = strdup(fname);
        return 0;
 }
+
+extern int lxc_log_get_level(void)
+{
+       if (!lxc_loglevel_specified)
+               return LXC_LOG_PRIORITY_NOTSET;
+       return lxc_log_category_lxc.priority;
+}
+
+extern const char *lxc_log_get_file(void)
+{
+       return log_fname;
+}
index 340a3abd5ddc2f0f711e6dea991277343b3b2655..a9260f22a48cf84ac989ca1a93bd5e4e6dfca2c1 100644 (file)
@@ -292,5 +292,7 @@ extern int lxc_log_init(const char *file, const char *priority,
 
 extern void lxc_log_setprefix(const char *a_prefix);
 extern int lxc_log_set_level(int level);
-extern int lxc_log_set_file(char *fname);
+extern int lxc_log_set_file(const char *fname);
+extern int lxc_log_get_level(void);
+extern const char *lxc_log_get_file(void);
 #endif