From a21f8a049ab2c5a379834522aeb2683621f0bca4 Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Fri, 8 Aug 2014 18:34:38 +0000 Subject: [PATCH] add lxc.console.logpath MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit logpath has been supported through lxc-start command line, but not through the API. Since the lxc.console is now required to be a device, support lxc.console.logfile to be a simple file to which console output will be logged. clear_config_item is not supported, as it isn't for lxc.console, bc you can do 'lxc.console.logfile =' to clear it. (This patch is for stable-1.0) Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- doc/lxc.container.conf.sgml.in | 17 ++++++++++++++--- src/lxc/conf.c | 2 ++ src/lxc/confile.c | 12 ++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/doc/lxc.container.conf.sgml.in b/doc/lxc.container.conf.sgml.in index 0cf16391a..88a5f0555 100644 --- a/doc/lxc.container.conf.sgml.in +++ b/doc/lxc.container.conf.sgml.in @@ -536,13 +536,24 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - + Specify a path to a file where the console output will - be written. The keyword 'none' will simply disable the - console. This is dangerous once if have a rootfs with a + be written. + + + + + + + + + + Specify a path to a device to which the console will be + attached. The keyword 'none' will simply disable the + console. This is dangerous once if have a rootfs with a console device file where the application can write, the messages will fall in the host. diff --git a/src/lxc/conf.c b/src/lxc/conf.c index a90c57ccd..7fb6e6f5d 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -4390,6 +4390,8 @@ void lxc_conf_free(struct lxc_conf *conf) { if (!conf) return; + if (conf->console.log_path) + free(conf->console.log_path); if (conf->console.path) free(conf->console.path); if (conf->rootfs.mount) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 4c3338d09..dcd95189a 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -88,6 +88,7 @@ static int config_network_ipv6_gateway(const char *, const char *, struct lxc_co static int config_cap_drop(const char *, const char *, struct lxc_conf *); static int config_cap_keep(const char *, const char *, struct lxc_conf *); static int config_console(const char *, const char *, struct lxc_conf *); +static int config_console_logfile(const char *, const char *, struct lxc_conf *); static int config_seccomp(const char *, const char *, struct lxc_conf *); static int config_includefile(const char *, const char *, struct lxc_conf *); static int config_network_nic(const char *, const char *, struct lxc_conf *); @@ -142,6 +143,7 @@ static struct lxc_config_t config[] = { { "lxc.network.", config_network_nic }, { "lxc.cap.drop", config_cap_drop }, { "lxc.cap.keep", config_cap_keep }, + { "lxc.console.logfile", config_console_logfile }, { "lxc.console", config_console }, { "lxc.seccomp", config_seccomp }, { "lxc.include", config_includefile }, @@ -1564,6 +1566,12 @@ static int config_console(const char *key, const char *value, return config_path_item(&lxc_conf->console.path, value); } +static int config_console_logfile(const char *key, const char *value, + struct lxc_conf *lxc_conf) +{ + return config_path_item(&lxc_conf->console.log_path, value); +} + static int config_includefile(const char *key, const char *value, struct lxc_conf *lxc_conf) { @@ -2160,6 +2168,8 @@ int lxc_get_config_item(struct lxc_conf *c, const char *key, char *retv, return lxc_get_cgroup_entry(c, retv, inlen, key + 11); else if (strcmp(key, "lxc.utsname") == 0) v = c->utsname ? c->utsname->nodename : NULL; + else if (strcmp(key, "lxc.console.logfile") == 0) + v = c->console.log_path; else if (strcmp(key, "lxc.console") == 0) v = c->console.path; else if (strcmp(key, "lxc.rootfs.mount") == 0) @@ -2410,6 +2420,8 @@ void write_config(FILE *fout, struct lxc_conf *c) } if (c->console.path) fprintf(fout, "lxc.console = %s\n", c->console.path); + if (c->console.log_path) + fprintf(fout, "lxc.console.logfile = %s\n", c->console.log_path); if (c->rootfs.path) fprintf(fout, "lxc.rootfs = %s\n", c->rootfs.path); if (c->rootfs.mount && strcmp(c->rootfs.mount, LXCROOTFSMOUNT) != 0) -- 2.47.2