console: add lxc_pty_map_ids()

parent fd543fe0
......@@ -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)
{
......
......@@ -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 *),
......
......@@ -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;
}
......@@ -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
......@@ -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;
}
......
......@@ -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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment