From: Christian Brauner Date: Sun, 24 Dec 2017 18:13:54 +0000 (+0100) Subject: console: add lxc_pty_map_ids() X-Git-Tag: lxc-3.0.0.beta1~76^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7cfeddd71543c36bbe8742123406e306dc4f6583;p=thirdparty%2Flxc.git console: add lxc_pty_map_ids() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 4cab6e74c..f5bcb9d24 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -3092,24 +3092,6 @@ int chown_mapped_root(const char *path, struct lxc_conf *conf) return ret; } -int lxc_ttys_shift_ids(struct lxc_conf *c) -{ - if (lxc_list_empty(&c->id_map)) - return 0; - - if (!strcmp(c->console.name, "")) - return 0; - - if (chown_mapped_root(c->console.name, c) < 0) { - ERROR("failed to chown console \"%s\"", c->console.name); - return -1; - } - - TRACE("chowned console \"%s\"", c->console.name); - - return 0; -} - /* NOTE: Must not be called from inside the container namespace! */ int lxc_create_tmp_proc_mount(struct lxc_conf *conf) { diff --git a/src/lxc/conf.h b/src/lxc/conf.h index f75ede86c..1146a1d4f 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -452,7 +452,6 @@ extern int find_unmapped_nsid(struct lxc_conf *conf, enum idtype idtype); extern int mapped_hostid(unsigned id, struct lxc_conf *conf, enum idtype idtype); extern int chown_mapped_root(const char *path, struct lxc_conf *conf); -extern int lxc_ttys_shift_ids(struct lxc_conf *c); extern int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, const char *fn_name); extern int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), diff --git a/src/lxc/console.c b/src/lxc/console.c index 2f107b5e6..3feca832e 100644 --- a/src/lxc/console.c +++ b/src/lxc/console.c @@ -1038,3 +1038,25 @@ void lxc_pty_conf_free(struct lxc_console *console) if (console->buffer_size > 0 && console->ringbuf.addr) lxc_ringbuf_release(&console->ringbuf); } + +int lxc_pty_map_ids(struct lxc_conf *c, struct lxc_console *pty) +{ + int ret; + + if (lxc_list_empty(&c->id_map)) + return 0; + + ret = strcmp(pty->name, ""); + if (ret == 0) + return 0; + + ret = chown_mapped_root(pty->name, c); + if (ret < 0) { + ERROR("Failed to chown \"%s\"", pty->name); + return -1; + } + + TRACE("Chowned \"%s\"", pty->name); + + return 0; +} diff --git a/src/lxc/console.h b/src/lxc/console.h index b456746e4..a385ed1f7 100644 --- a/src/lxc/console.h +++ b/src/lxc/console.h @@ -237,5 +237,6 @@ extern int lxc_login_pty(int fd); extern void lxc_pty_conf_free(struct lxc_console *console); extern void lxc_pty_info_init(struct lxc_pty_info *pty); extern void lxc_pty_init(struct lxc_console *pty); +extern int lxc_pty_map_ids(struct lxc_conf *c, struct lxc_console *pty); #endif diff --git a/src/lxc/start.c b/src/lxc/start.c index c12728d61..5a5556d86 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -757,7 +757,8 @@ int lxc_init(const char *name, struct lxc_handler *handler) } TRACE("Created console"); - if (lxc_ttys_shift_ids(conf) < 0) { + ret = lxc_pty_map_ids(conf, &conf->console); + if (ret < 0) { ERROR("Failed to shift tty into container."); goto out_restore_sigmask; } diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c index b5c89270c..0615cc719 100644 --- a/src/lxc/tools/lxc_attach.c +++ b/src/lxc/tools/lxc_attach.c @@ -338,7 +338,8 @@ static int get_pty_on_host(struct lxc_container *c, struct wrapargs *wrap, int * conf->console.descr = &descr; /* Shift ttys to container. */ - if (lxc_ttys_shift_ids(conf) < 0) { + ret = lxc_pty_map_ids(conf, &conf->console); + if (ret < 0) { fprintf(stderr, "Failed to shift tty into container\n"); goto err1; }