From: Christian Brauner Date: Sun, 24 Dec 2017 18:13:54 +0000 (+0100) Subject: console: add lxc_pty_map_ids() X-Git-Tag: lxc-2.0.10~416 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dcb579a2cb3bffed463fd43e315aa2794e4aed78;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 b90a18f9d..1c2faef28 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -2864,24 +2864,6 @@ int chown_mapped_root(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 0286be028..71df182d6 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -348,7 +348,6 @@ extern int lxc_setup(struct lxc_handler *handler); 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(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 a98762893..9f9a82ad2 100644 --- a/src/lxc/console.c +++ b/src/lxc/console.c @@ -910,3 +910,25 @@ void lxc_pty_conf_free(struct lxc_console *console) free(console->log_path); free(console->path); } + +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 5b79b2c9f..99e1d3fe6 100644 --- a/src/lxc/console.h +++ b/src/lxc/console.h @@ -235,5 +235,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 7d6929d17..ea272106b 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -749,7 +749,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 82d67fa92..d88f7da56 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; }