console: add lxc_pty_map_ids()

parent fd543fe0
...@@ -2864,24 +2864,6 @@ int chown_mapped_root(char *path, struct lxc_conf *conf) ...@@ -2864,24 +2864,6 @@ int chown_mapped_root(char *path, struct lxc_conf *conf)
return ret; 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! */ /* NOTE: Must not be called from inside the container namespace! */
int lxc_create_tmp_proc_mount(struct lxc_conf *conf) int lxc_create_tmp_proc_mount(struct lxc_conf *conf)
{ {
......
...@@ -348,7 +348,6 @@ extern int lxc_setup(struct lxc_handler *handler); ...@@ -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 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 mapped_hostid(unsigned id, struct lxc_conf *conf, enum idtype idtype);
extern int chown_mapped_root(char *path, struct lxc_conf *conf); 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, extern int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data,
const char *fn_name); const char *fn_name);
extern int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), 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) ...@@ -910,3 +910,25 @@ void lxc_pty_conf_free(struct lxc_console *console)
free(console->log_path); free(console->log_path);
free(console->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); ...@@ -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_conf_free(struct lxc_console *console);
extern void lxc_pty_info_init(struct lxc_pty_info *pty); extern void lxc_pty_info_init(struct lxc_pty_info *pty);
extern void lxc_pty_init(struct lxc_console *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 #endif
...@@ -749,7 +749,8 @@ int lxc_init(const char *name, struct lxc_handler *handler) ...@@ -749,7 +749,8 @@ int lxc_init(const char *name, struct lxc_handler *handler)
} }
TRACE("Created console"); 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."); ERROR("Failed to shift tty into container.");
goto out_restore_sigmask; goto out_restore_sigmask;
} }
......
...@@ -338,7 +338,8 @@ static int get_pty_on_host(struct lxc_container *c, struct wrapargs *wrap, int * ...@@ -338,7 +338,8 @@ static int get_pty_on_host(struct lxc_container *c, struct wrapargs *wrap, int *
conf->console.descr = &descr; conf->console.descr = &descr;
/* Shift ttys to container. */ /* 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"); fprintf(stderr, "Failed to shift tty into container\n");
goto err1; 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