#endif
};
-struct syslog_facility {
- const char *name;
- int facility;
-};
-
-static const struct syslog_facility syslog_facilities[] = {
- { "daemon", LOG_DAEMON },
- { "local0", LOG_LOCAL0 },
- { "local1", LOG_LOCAL1 },
- { "local2", LOG_LOCAL2 },
- { "local3", LOG_LOCAL3 },
- { "local4", LOG_LOCAL4 },
- { "local5", LOG_LOCAL5 },
- { "local6", LOG_LOCAL6 },
- { "local7", LOG_LOCAL7 },
-};
-
static const size_t config_size = sizeof(config)/sizeof(struct lxc_config_t);
extern struct lxc_config_t *lxc_getconfig(const char *key)
}
/* Catch only the top level config file name in the structure */
- if( ! conf->rcfile )
- conf->rcfile = strdup( file );
+ if(!conf->rcfile)
+ conf->rcfile = strdup(file);
return lxc_file_for_each_line(file, parse_line, &c);
}
return lxc_get_conf_int(c, retv, inlen, c->init_gid);
else if (strcmp(key, "lxc.ephemeral") == 0)
return lxc_get_conf_int(c, retv, inlen, c->ephemeral);
+ else if (strcmp(key, "lxc.syslog") == 0)
+ v = c->syslog;
else return -1;
if (!v)
}
static int config_syslog(const char *key, const char *value,
- struct lxc_conf *lxc_conf)
+ struct lxc_conf *lxc_conf)
{
- int n;
- int facility = -1;
-
- for (n = 0; n < sizeof(syslog_facilities) / sizeof((syslog_facilities)[0]); n++) {
- if (strcasecmp(syslog_facilities[n].name, value) == 0) {
- facility = syslog_facilities[n].facility;
- lxc_log_syslog(facility);
- return 0;
- }
+ int facility;
+ facility = lxc_syslog_priority_to_int(value);
+ if (facility == -EINVAL) {
+ ERROR("Wrong value for lxc.syslog");
+ return -1;
}
- ERROR("Wrong value for lxc.syslog");
- return -1;
+ lxc_log_syslog(facility);
+ return config_string_item(&lxc_conf->syslog, value);
}
#include "config.h"
+#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <sys/time.h>
#include <string.h>
#include <strings.h>
#include <stdbool.h>
+#include <syslog.h>
#include "conf.h"
#define ATTR_UNUSED
#endif
-/* predefined priorities. */
+/* predefined lxc log priorities. */
enum lxc_loglevel {
LXC_LOG_PRIORITY_TRACE,
LXC_LOG_PRIORITY_DEBUG,
return "NOTSET";
}
}
+
+static inline const char* lxc_syslog_priority_to_string(int priority)
+{
+ switch (priority) {
+ case LOG_DAEMON: return "daemon";
+ case LOG_LOCAL0: return "local0";
+ case LOG_LOCAL1: return "local1";
+ case LOG_LOCAL2: return "local2";
+ case LOG_LOCAL3: return "local3";
+ case LOG_LOCAL4: return "local4";
+ case LOG_LOCAL5: return "local5";
+ case LOG_LOCAL6: return "local6";
+ case LOG_LOCAL7: return "local7";
+ default:
+ return "NOTSET";
+ }
+}
+
/*
* converts a literal priority to an int
*/
return LXC_LOG_PRIORITY_NOTSET;
}
+static inline int lxc_syslog_priority_to_int(const char* name)
+{
+ if (!strcasecmp("daemon", name)) return LOG_DAEMON;
+ if (!strcasecmp("local0", name)) return LOG_LOCAL0;
+ if (!strcasecmp("local1", name)) return LOG_LOCAL1;
+ if (!strcasecmp("local2", name)) return LOG_LOCAL2;
+ if (!strcasecmp("local3", name)) return LOG_LOCAL3;
+ if (!strcasecmp("local4", name)) return LOG_LOCAL4;
+ if (!strcasecmp("local5", name)) return LOG_LOCAL5;
+ if (!strcasecmp("local6", name)) return LOG_LOCAL6;
+ if (!strcasecmp("local7", name)) return LOG_LOCAL7;
+
+ return -EINVAL;
+}
+
static inline void
__lxc_log_append(const struct lxc_log_appender *appender,
struct lxc_log_event* event)