start: dup std{in,out,err} to pty slave

In the case the container has a console with a valid slave pty file descriptor
we duplicate std{in,out,err} to the slave file descriptor so console logging
works correctly. When the container does not have a valid slave pty file
descriptor for its console and is started daemonized we should dup to
/dev/null.

Closes #1646.

Signed-off-by: Li Feng <lifeng68@huawei.com>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
Li Feng 2017-07-10 17:19:52 +08:00 committed by Christian Brauner
parent 1a6cb1cea4
commit c5b93afba1
No known key found for this signature in database
GPG Key ID: 7B3C391EFEA93624

View File

@ -1063,8 +1063,13 @@ static int do_start(void *data)
* setup on its console ie. the pty allocated in lxc_console_create() so
* make sure that that pty is stdin,stdout,stderr.
*/
if (lxc_console_set_stdfds(handler->conf->console.slave) < 0)
goto out_warn_father;
if (handler->conf->console.slave >= 0)
if (set_stdfds(handler->conf->console.slave) < 0) {
ERROR("Failed to redirect std{in,out,err} to pty file "
"descriptor %d",
handler->conf->console.slave);
goto out_warn_father;
}
/* If we mounted a temporary proc, then unmount it now. */
tmp_proc_unmount(handler->conf);
@ -1142,8 +1147,12 @@ static int do_start(void *data)
goto out_warn_father;
}
if (handler->backgrounded && set_stdfds(devnull_fd))
goto out_warn_father;
if (handler->conf->console.slave < 0 && handler->backgrounded)
if (set_stdfds(devnull_fd) < 0) {
ERROR("Failed to redirect std{in,out,err} to "
"\"/dev/null\"");
goto out_warn_father;
}
if (devnull_fd >= 0) {
close(devnull_fd);