The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/2196

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Signed-off-by: Christian Brauner <[email protected]>
From 49379222b503ade3a22fe65add7dee3fef4f8129 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 11:50:12 +0100
Subject: [PATCH 01/25] mainloop: add LXC_MAINLOOP_ERROR

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/mainloop.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/lxc/mainloop.h b/src/lxc/mainloop.h
index ea53a012c..44f76a443 100644
--- a/src/lxc/mainloop.h
+++ b/src/lxc/mainloop.h
@@ -27,6 +27,7 @@
 #include <stdint.h>
 #include "list.h"
 
+#define LXC_MAINLOOP_ERROR -1
 #define LXC_MAINLOOP_CONTINUE 0
 #define LXC_MAINLOOP_CLOSE 1
 

From 2e943b7b469770be541ecabcdc0df922c20e6f3b Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 11:50:38 +0100
Subject: [PATCH 02/25] terminal: lxc_terminal_signalfd_cb()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 4bc7d8575..be46f0b73 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -117,7 +117,7 @@ int lxc_terminal_signalfd_cb(int fd, uint32_t events, void 
*cbdata,
        ret = read(fd, &siginfo, sizeof(siginfo));
        if (ret < 0 || (size_t)ret < sizeof(siginfo)) {
                ERROR("Failed to read signal info");
-               return -1;
+               return LXC_MAINLOOP_ERROR;
        }
 
        if (siginfo.ssi_signo == SIGTERM) {
@@ -128,7 +128,7 @@ int lxc_terminal_signalfd_cb(int fd, uint32_t events, void 
*cbdata,
        if (siginfo.ssi_signo == SIGWINCH)
                lxc_terminal_winch(ts);
 
-       return 0;
+       return LXC_MAINLOOP_CONTINUE;
 }
 
 struct lxc_terminal_state *lxc_terminal_signal_init(int srcfd, int dstfd)

From e62912bdbc8b4bc8cd3bc5719c627480ff3a84a8 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 11:51:04 +0100
Subject: [PATCH 03/25] terminal: non-functional changes

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index be46f0b73..0d782d804 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -23,15 +23,14 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#include <lxc/lxccontainer.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <termios.h>
-#include <unistd.h>
 #include <sys/epoll.h>
 #include <sys/types.h>
-
-#include <lxc/lxccontainer.h>
+#include <termios.h>
+#include <unistd.h>
 
 #include "af_unix.h"
 #include "caps.h"
@@ -41,7 +40,7 @@
 #include "log.h"
 #include "lxclock.h"
 #include "mainloop.h"
-#include "start.h"     /* for struct lxc_handler */
+#include "start.h"
 #include "terminal.h"
 #include "utils.h"
 

From b6d5de95f966064c0e9e29e4ff1470833abc76ae Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 11:51:21 +0100
Subject: [PATCH 04/25] terminal: error out when SIGTERM cannot be added

This should be an error condition.

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 0d782d804..2100ce29c 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -133,7 +133,7 @@ int lxc_terminal_signalfd_cb(int fd, uint32_t events, void 
*cbdata,
 struct lxc_terminal_state *lxc_terminal_signal_init(int srcfd, int dstfd)
 {
        int ret;
-       bool istty;
+       bool istty = false;
        sigset_t mask;
        struct lxc_terminal_state *ts;
 
@@ -146,20 +146,31 @@ struct lxc_terminal_state *lxc_terminal_signal_init(int 
srcfd, int dstfd)
        ts->masterfd = dstfd;
        ts->sigfd = -1;
 
-       sigemptyset(&mask);
+       ret = sigemptyset(&mask);
+       if (ret < 0) {
+               SYSERROR("Failed to initialize an empty signal set");
+               goto on_error;
+       }
 
-       istty = isatty(srcfd) == 1;
+       istty = (isatty(srcfd) == 1);
        if (!istty) {
                INFO("fd %d does not refer to a tty device", srcfd);
        } else {
                /* Add tty to list to be scanned at SIGWINCH time. */
                lxc_list_add_elem(&ts->node, ts);
                lxc_list_add_tail(&lxc_ttys, &ts->node);
-               sigaddset(&mask, SIGWINCH);
+               ret = sigaddset(&mask, SIGWINCH);
+               if (ret < 0)
+                       NOTICE("%s - Failed to add SIGWINCH to signal set",
+                              strerror(errno));
        }
 
        /* Exit the mainloop cleanly on SIGTERM. */
-       sigaddset(&mask, SIGTERM);
+       ret = sigaddset(&mask, SIGTERM);
+       if (ret < 0) {
+               SYSERROR("Failed to add SIGWINCH to signal set");
+               goto on_error;
+       }
 
        ret = sigprocmask(SIG_BLOCK, &mask, &ts->oldmask);
        if (ret < 0) {
@@ -183,8 +194,10 @@ struct lxc_terminal_state *lxc_terminal_signal_init(int 
srcfd, int dstfd)
                close(ts->sigfd);
                ts->sigfd = -1;
        }
+
        if (istty)
                lxc_list_del(&ts->node);
+
        return ts;
 }
 

From ec98fb30ae6eb7ff24c385e59cb2b2573017e910 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 11:55:36 +0100
Subject: [PATCH 05/25] terminal: lxc_terminal_signal_fini()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 2100ce29c..8f3290fd7 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -206,7 +206,10 @@ void lxc_terminal_signal_fini(struct lxc_terminal_state 
*ts)
        if (ts->sigfd >= 0) {
                close(ts->sigfd);
 
-               if (sigprocmask(SIG_SETMASK, &ts->oldmask, NULL) < 0)
+               int ret;
+
+               ret = sigprocmask(SIG_SETMASK, &ts->oldmask, NULL);
+               if (ret < 0)
                        WARN("%s - Failed to restore signal mask", 
strerror(errno));
        }
 

From cb48c2fc8e01283a84d456afae0bbffecc74dc7e Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 11:56:55 +0100
Subject: [PATCH 06/25] terminal: lxc_terminal_write_log_file()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 8f3290fd7..cc95857c6 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -258,11 +258,11 @@ static int lxc_terminal_rotate_log_file(struct 
lxc_terminal *terminal)
 }
 
 static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char 
*buf,
-                                     int bytes_read)
+                                      int bytes_read)
 {
        int ret;
-       int64_t space_left = -1;
        struct stat st;
+       int64_t space_left = -1;
 
        if (terminal->log_fd < 0)
                return 0;

From c2c3b30dd75f37db1ea22bf6972fb65ea71c37d6 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 11:58:50 +0100
Subject: [PATCH 07/25] terminal: lxc_terminal_io_cb()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index cc95857c6..492ce2c07 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -419,7 +419,7 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data,
        if (w_log < 0)
                TRACE("Failed to write %d bytes to terminal log", r);
 
-       return 0;
+       return LXC_MAINLOOP_CONTINUE;
 }
 
 static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal)

From 3eb6b30c81ee149e5c8cd6050bf3e33d4e2315d3 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:00:14 +0100
Subject: [PATCH 08/25] terminal: lxc_terminal_mainloop_add()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 492ce2c07..cfb8d43bf 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -449,7 +449,7 @@ static int lxc_terminal_mainloop_add_peer(struct 
lxc_terminal *terminal)
 }
 
 int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr,
-                            struct lxc_terminal *terminal)
+                             struct lxc_terminal *terminal)
 {
        int ret;
 
@@ -461,7 +461,8 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr,
        ret = lxc_mainloop_add_handler(descr, terminal->master,
                                       lxc_terminal_io_cb, terminal);
        if (ret < 0) {
-               ERROR("Failed to add handler for %d to mainloop", 
terminal->master);
+               ERROR("Failed to add handler for terminal master fd %d to "
+                     "mainloop", terminal->master);
                return -1;
        }
 
@@ -469,11 +470,8 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr 
*descr,
         * does attach to it in lxc_terminal_allocate().
         */
        terminal->descr = descr;
-       ret = lxc_terminal_mainloop_add_peer(terminal);
-       if (ret < 0)
-               return -1;
 
-       return 0;
+       return lxc_terminal_mainloop_add_peer(terminal);
 }
 
 int lxc_setup_tios(int fd, struct termios *oldtios)

From 6579c882f79dbed4a68871dd1cf3ae93d28bcaf0 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:02:51 +0100
Subject: [PATCH 09/25] terminal: lxc_setup_tios()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index cfb8d43bf..334ee53af 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -476,16 +476,18 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr 
*descr,
 
 int lxc_setup_tios(int fd, struct termios *oldtios)
 {
+       int ret;
        struct termios newtios;
 
        if (!isatty(fd)) {
-               ERROR("'%d' is not a tty", fd);
+               ERROR("File descriptor %d does not refert to a terminal", fd);
                return -1;
        }
 
-       /* Get current termios */
-       if (tcgetattr(fd, oldtios)) {
-               SYSERROR("failed to get current terminal settings");
+       /* Get current termios. */
+       ret = tcgetattr(fd, oldtios);
+       if (ret < 0) {
+               SYSERROR("Failed to get current terminal settings");
                return -1;
        }
 
@@ -514,8 +516,9 @@ int lxc_setup_tios(int fd, struct termios *oldtios)
        newtios.c_cc[VTIME] = 0;
 
        /* Set new attributes. */
-       if (tcsetattr(fd, TCSAFLUSH, &newtios)) {
-               ERROR("failed to set new terminal settings");
+       ret = tcsetattr(fd, TCSAFLUSH, &newtios);
+       if (ret < 0) {
+               ERROR("Failed to set new terminal settings");
                return -1;
        }
 

From ea84dc59067f1813b260ed8edb8935926df6c6e3 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:04:58 +0100
Subject: [PATCH 10/25] terminal: lxc_terminal_peer_proxy_free()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 334ee53af..7cdfd93c5 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -531,12 +531,17 @@ static void lxc_terminal_peer_proxy_free(struct 
lxc_terminal *terminal)
                lxc_terminal_signal_fini(terminal->tty_state);
                terminal->tty_state = NULL;
        }
+
        close(terminal->proxy.master);
-       close(terminal->proxy.slave);
        terminal->proxy.master = -1;
+
+       close(terminal->proxy.slave);
        terminal->proxy.slave = -1;
+
        terminal->proxy.busy = -1;
+
        terminal->proxy.name[0] = '\0';
+
        terminal->peer = -1;
 }
 

From 89947f357217e1c03d47ef9a0e5d3f41468d6ba8 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:11:16 +0100
Subject: [PATCH 11/25] terminal: lxc_terminal_peer_proxy_alloc()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 33 +++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 7cdfd93c5..95f95f571 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -545,53 +545,58 @@ static void lxc_terminal_peer_proxy_free(struct 
lxc_terminal *terminal)
        terminal->peer = -1;
 }
 
-static int lxc_terminal_peer_proxy_alloc(struct lxc_terminal *terminal, int 
sockfd)
+static int lxc_terminal_peer_proxy_alloc(struct lxc_terminal *terminal,
+                                        int sockfd)
 {
+       int ret;
        struct termios oldtermio;
        struct lxc_terminal_state *ts;
-       int ret;
 
        if (terminal->master < 0) {
                ERROR("Terminal not set up");
                return -1;
        }
+
        if (terminal->proxy.busy != -1 || terminal->peer != -1) {
                NOTICE("Terminal already in use");
                return -1;
        }
+
        if (terminal->tty_state) {
-               ERROR("Terminal already has tty_state");
+               ERROR("Terminal has already been initialized");
                return -1;
        }
 
-       /* this is the proxy pty that will be given to the client, and that
-        * the real pty master will send to / recv from
+       /* This is the proxy pty that will be given to the client, and that
+        * the real pty master will send to / recv from.
         */
        ret = openpty(&terminal->proxy.master, &terminal->proxy.slave,
-                   terminal->proxy.name, NULL, NULL);
-       if (ret) {
-               SYSERROR("failed to create proxy pty");
+                     terminal->proxy.name, NULL, NULL);
+       if (ret < 0) {
+               SYSERROR("Failed to open proxy terminal");
                return -1;
        }
 
-       if (lxc_setup_tios(terminal->proxy.slave, &oldtermio) < 0)
-               goto err1;
+       ret = lxc_setup_tios(terminal->proxy.slave, &oldtermio);
+       if (ret < 0)
+               goto on_error;
 
        ts = lxc_terminal_signal_init(terminal->proxy.master, terminal->master);
        if (!ts)
-               goto err1;
+               goto on_error;
 
        terminal->tty_state = ts;
        terminal->peer = terminal->proxy.slave;
        terminal->proxy.busy = sockfd;
        ret = lxc_terminal_mainloop_add_peer(terminal);
        if (ret < 0)
-               goto err1;
+               goto on_error;
 
-       DEBUG("%d peermaster:%d sockfd:%d", lxc_raw_getpid(), 
terminal->proxy.master, sockfd);
+       NOTICE("Opened proxy terminal with master fd %d and slave fd %d",
+              terminal->proxy.master, terminal->proxy.slave);
        return 0;
 
-err1:
+on_error:
        lxc_terminal_peer_proxy_free(terminal);
        return -1;
 }

From 645250d18e4562a8fec449301c09c29ee4d060eb Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:12:59 +0100
Subject: [PATCH 12/25] terminal: lxc_terminal_allocate()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 95f95f571..d5df31bc3 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -603,13 +603,18 @@ static int lxc_terminal_peer_proxy_alloc(struct 
lxc_terminal *terminal,
 
 int lxc_terminal_allocate(struct lxc_conf *conf, int sockfd, int *ttyreq)
 {
-       int masterfd = -1, ttynum;
+       int ttynum;
+       int masterfd = -1;
        struct lxc_tty_info *ttys = &conf->ttys;
        struct lxc_terminal *terminal = &conf->console;
 
        if (*ttyreq == 0) {
-               if (lxc_terminal_peer_proxy_alloc(terminal, sockfd) < 0)
+               int ret;
+
+               ret = lxc_terminal_peer_proxy_alloc(terminal, sockfd);
+               if (ret < 0)
                        goto out;
+
                masterfd = terminal->proxy.master;
                goto out;
        }
@@ -621,16 +626,17 @@ int lxc_terminal_allocate(struct lxc_conf *conf, int 
sockfd, int *ttyreq)
                if (ttys->tty[*ttyreq - 1].busy)
                        goto out;
 
-               /* the requested tty is available */
+               /* The requested tty is available. */
                ttynum = *ttyreq;
                goto out_tty;
        }
 
-       /* search for next available tty, fixup index tty1 => [0] */
-       for (ttynum = 1; ttynum <= ttys->nbtty && ttys->tty[ttynum - 1].busy; 
ttynum++)
+       /* Search for next available tty, fixup index tty1 => [0]. */
+       for (ttynum = 1; ttynum <= ttys->nbtty && ttys->tty[ttynum - 1].busy; 
ttynum++) {
                ;
+       }
 
-       /* we didn't find any available slot for tty */
+       /* We didn't find any available slot for tty. */
        if (ttynum > ttys->nbtty)
                goto out;
 
@@ -639,6 +645,7 @@ int lxc_terminal_allocate(struct lxc_conf *conf, int 
sockfd, int *ttyreq)
 out_tty:
        ttys->tty[ttynum - 1].busy = sockfd;
        masterfd = ttys->tty[ttynum - 1].master;
+
 out:
        return masterfd;
 }

From 34aa0bd5615decbf83c12d4c4cc7cd3c27d1c80a Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:14:04 +0100
Subject: [PATCH 13/25] terminal: lxc_terminal_free()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index d5df31bc3..bfdeefa7c 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -656,15 +656,15 @@ void lxc_terminal_free(struct lxc_conf *conf, int fd)
        struct lxc_tty_info *ttys = &conf->ttys;
        struct lxc_terminal *terminal = &conf->console;
 
-       for (i = 0; i < ttys->nbtty; i++) {
+       for (i = 0; i < ttys->nbtty; i++)
                if (ttys->tty[i].busy == fd)
                        ttys->tty[i].busy = 0;
-       }
 
-       if (terminal->proxy.busy == fd) {
-               lxc_mainloop_del_handler(terminal->descr, 
terminal->proxy.slave);
-               lxc_terminal_peer_proxy_free(terminal);
-       }
+       if (terminal->proxy.busy != fd)
+               return;
+
+       lxc_mainloop_del_handler(terminal->descr, terminal->proxy.slave);
+       lxc_terminal_peer_proxy_free(terminal);
 }
 
 static int lxc_terminal_peer_default(struct lxc_terminal *terminal)

From 8e8ee84610dc5cf475a88c436c2b5410acc92219 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:20:02 +0100
Subject: [PATCH 14/25] terminal: lxc_terminal_peer_default()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 54 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 29 insertions(+), 25 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index bfdeefa7c..447700077 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -674,65 +674,69 @@ static int lxc_terminal_peer_default(struct lxc_terminal 
*terminal)
        int fd;
        int ret = 0;
 
-       /* If no terminal was given, try current controlling terminal, there
-        * won't be one if we were started as a daemon (-d).
-        */
-       if (!path && !access("/dev/tty", F_OK)) {
-               fd = open("/dev/tty", O_RDWR);
-               if (fd >= 0) {
-                       close(fd);
-                       path = "/dev/tty";
+       if (!path) {
+               ret = access("/dev/tty", F_OK);
+               if (ret == 0) {
+                       /* If no terminal was given, try current controlling
+                        * terminal, there won't be one if we were started as a
+                        * daemon (-d).
+                        */
+                       fd = open("/dev/tty", O_RDWR);
+                       if (fd >= 0) {
+                               close(fd);
+                               path = "/dev/tty";
+                       }
                }
        }
 
        if (!path) {
                errno = ENOTTY;
-               DEBUG("process does not have a controlling terminal");
-               goto out;
+               DEBUG("Theh process does not have a controlling terminal");
+               goto on_succes;
        }
 
        terminal->peer = lxc_unpriv(open(path, O_RDWR | O_CLOEXEC));
        if (terminal->peer < 0) {
-               ERROR("Failed to open \"%s\": %s", path, strerror(errno));
+               ERROR("%s - Failed to open proxy terminal \"%s\"",
+                     strerror(errno), path);
                return -ENOTTY;
        }
-       DEBUG("using \"%s\" as peer tty device", path);
+       DEBUG("Using terminal \"%s\" as proxy", path);
 
        if (!isatty(terminal->peer)) {
-               ERROR("file descriptor for file \"%s\" does not refer to a tty 
device", path);
-               goto on_error1;
+               ERROR("File descriptor for \"%s\" does not refer to a 
terminal", path);
+               goto on_error_free_tios;
        }
 
        ts = lxc_terminal_signal_init(terminal->peer, terminal->master);
        terminal->tty_state = ts;
        if (!ts) {
                WARN("Failed to install signal handler");
-               goto on_error1;
+               goto on_error_free_tios;
        }
 
        lxc_terminal_winsz(terminal->peer, terminal->master);
 
        terminal->tios = malloc(sizeof(*terminal->tios));
-       if (!terminal->tios) {
-               SYSERROR("failed to allocate memory");
-               goto on_error1;
-       }
+       if (!terminal->tios)
+               goto on_error_free_tios;
 
-       if (lxc_setup_tios(terminal->peer, terminal->tios) < 0)
-               goto on_error2;
+       ret = lxc_setup_tios(terminal->peer, terminal->tios);
+       if (ret < 0)
+               goto on_error_close_peer;
        else
-               goto out;
+               goto on_succes;
 
-on_error2:
+on_error_free_tios:
        free(terminal->tios);
        terminal->tios = NULL;
 
-on_error1:
+on_error_close_peer:
        close(terminal->peer);
        terminal->peer = -1;
        ret = -ENOTTY;
 
-out:
+on_succes:
        return ret;
 }
 

From 68eb9e7b913f2e0fc8c37ebf2e77d5433ebd7e18 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:22:23 +0100
Subject: [PATCH 15/25] terminal: lxc_terminal_create()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 447700077..c03508cdb 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -872,13 +872,11 @@ int lxc_terminal_create_log_file(struct lxc_terminal 
*terminal)
 
 int lxc_terminal_create(struct lxc_terminal *terminal)
 {
-       int ret, saved_errno;
+       int ret;
 
-       ret = openpty(&terminal->master, &terminal->slave, terminal->name, NULL,
-                     NULL);
-       saved_errno = errno;
+       ret = openpty(&terminal->master, &terminal->slave, terminal->name, 
NULL, NULL);
        if (ret < 0) {
-               ERROR("%s - Failed to allocate a pty", strerror(saved_errno));
+               SYSERROR("Failed to open terminal");
                return -1;
        }
 
@@ -896,7 +894,7 @@ int lxc_terminal_create(struct lxc_terminal *terminal)
 
        ret = lxc_terminal_peer_default(terminal);
        if (ret < 0) {
-               ERROR("Failed to allocate a peer pty device");
+               ERROR("Failed to allocate proxy terminal");
                goto err;
        }
 

From e78cf05b234a5bfe5dfa0884fd8d710a4e2c2987 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:23:06 +0100
Subject: [PATCH 16/25] terminal: lxc_terminal_setup()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index c03508cdb..08db3e3ff 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -910,8 +910,8 @@ int lxc_terminal_setup(struct lxc_conf *conf)
        int ret;
        struct lxc_terminal *terminal = &conf->console;
 
-       if (terminal->path && !strcmp(terminal->path, "none")) {
-               INFO("No terminal was requested");
+       if (terminal->path && strcmp(terminal->path, "none") == 0) {
+               INFO("No terminal requested");
                return 0;
        }
 
@@ -919,12 +919,10 @@ int lxc_terminal_setup(struct lxc_conf *conf)
        if (ret < 0)
                return -1;
 
-       /* create terminal log file */
        ret = lxc_terminal_create_log_file(terminal);
        if (ret < 0)
                goto err;
 
-       /* create terminal ringbuffer */
        ret = lxc_terminal_create_ringbuf(terminal);
        if (ret < 0)
                goto err;

From 012df71931bf924f6324e924df9bc16bfc9fbfba Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:40:43 +0100
Subject: [PATCH 17/25] terminal: lxc_terminal_set_stdfds()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 37 +++++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 08db3e3ff..535573329 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -934,28 +934,33 @@ int lxc_terminal_setup(struct lxc_conf *conf)
        return -ENODEV;
 }
 
+static bool __terminal_dup2(int duplicate, int original)
+{
+       int ret;
+
+       if (!isatty(original))
+               return true;
+
+       ret = dup2(duplicate, original);
+       if (ret < 0) {
+               SYSERROR("Failed to dup2(%d, %d)", duplicate, original);
+               return false;
+       }
+
+       return true;
+}
+
 int lxc_terminal_set_stdfds(int fd)
 {
+       int i;
+
        if (fd < 0)
                return 0;
 
-       if (isatty(STDIN_FILENO))
-               if (dup2(fd, STDIN_FILENO) < 0) {
-                       SYSERROR("failed to duplicate stdin.");
-                       return -1;
-               }
-
-       if (isatty(STDOUT_FILENO))
-               if (dup2(fd, STDOUT_FILENO) < 0) {
-                       SYSERROR("failed to duplicate stdout.");
+       for (i = 0; i < 3; i++)
+               if (!__terminal_dup2(fd, (int[]){STDIN_FILENO, STDOUT_FILENO,
+                                                STDERR_FILENO}[i]))
                        return -1;
-               }
-
-       if (isatty(STDERR_FILENO))
-               if (dup2(fd, STDERR_FILENO) < 0) {
-                       SYSERROR("failed to duplicate stderr.");
-                       return -1;
-               }
 
        return 0;
 }

From f9e4d4639c44ce0710b66576c1e0419a04c1854b Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:42:31 +0100
Subject: [PATCH 18/25] terminal: lxc_terminal_stdin_cb()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 535573329..724e78e2c 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -966,22 +966,24 @@ int lxc_terminal_set_stdfds(int fd)
 }
 
 int lxc_terminal_stdin_cb(int fd, uint32_t events, void *cbdata,
-                            struct lxc_epoll_descr *descr)
+                         struct lxc_epoll_descr *descr)
 {
-       struct lxc_terminal_state *ts = cbdata;
+       int ret;
        char c;
+       struct lxc_terminal_state *ts = cbdata;
 
        if (fd != ts->stdinfd)
                return LXC_MAINLOOP_CLOSE;
 
-       if (lxc_read_nointr(ts->stdinfd, &c, 1) <= 0)
+       ret = lxc_read_nointr(ts->stdinfd, &c, 1);
+       if (ret <= 0)
                return LXC_MAINLOOP_CLOSE;
 
        if (ts->escape >= 1) {
                /* we want to exit the terminal with Ctrl+a q */
                if (c == ts->escape && !ts->saw_escape) {
                        ts->saw_escape = 1;
-                       return 0;
+                       return LXC_MAINLOOP_CONTINUE;
                }
 
                if (c == 'q' && ts->saw_escape)
@@ -990,10 +992,11 @@ int lxc_terminal_stdin_cb(int fd, uint32_t events, void 
*cbdata,
                ts->saw_escape = 0;
        }
 
-       if (lxc_write_nointr(ts->masterfd, &c, 1) <= 0)
+       ret = lxc_write_nointr(ts->masterfd, &c, 1);
+       if (ret <= 0)
                return LXC_MAINLOOP_CLOSE;
 
-       return 0;
+       return LXC_MAINLOOP_CONTINUE;
 }
 
 int lxc_terminal_master_cb(int fd, uint32_t events, void *cbdata,

From 818d454a24c9fd9b0f5ea42b0981d509321bfd71 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:43:47 +0100
Subject: [PATCH 19/25] terminal: lxc_terminal_master_cb()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 724e78e2c..568b47054 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -1002,9 +1002,9 @@ int lxc_terminal_stdin_cb(int fd, uint32_t events, void 
*cbdata,
 int lxc_terminal_master_cb(int fd, uint32_t events, void *cbdata,
                           struct lxc_epoll_descr *descr)
 {
-       struct lxc_terminal_state *ts = cbdata;
-       char buf[LXC_TERMINAL_BUFFER_SIZE];
        int r, w;
+       char buf[LXC_TERMINAL_BUFFER_SIZE];
+       struct lxc_terminal_state *ts = cbdata;
 
        if (fd != ts->masterfd)
                return LXC_MAINLOOP_CLOSE;
@@ -1014,14 +1014,10 @@ int lxc_terminal_master_cb(int fd, uint32_t events, 
void *cbdata,
                return LXC_MAINLOOP_CLOSE;
 
        w = lxc_write_nointr(ts->stdoutfd, buf, r);
-       if (w <= 0) {
+       if (w <= 0 || w != r)
                return LXC_MAINLOOP_CLOSE;
-       } else if (w != r) {
-               SYSERROR("Failed to write");
-               return 1;
-       }
 
-       return 0;
+       return LXC_MAINLOOP_CONTINUE;
 }
 
 int lxc_terminal_getfd(struct lxc_container *c, int *ttynum, int *masterfd)

From 01b5b89ef6ec8caa2a58d826aeade7fffe7967be Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:45:07 +0100
Subject: [PATCH 20/25] terminal: lxc_console()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 568b47054..d0aeb1fed 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -1029,7 +1029,7 @@ int lxc_console(struct lxc_container *c, int ttynum,
                int stdinfd, int stdoutfd, int stderrfd,
                int escape)
 {
-       int ret, ttyfd, masterfd;
+       int masterfd, ret, ttyfd;
        struct lxc_epoll_descr descr;
        struct termios oldtios;
        struct lxc_terminal_state *ts;
@@ -1058,7 +1058,7 @@ int lxc_console(struct lxc_container *c, int ttynum,
                lxc_terminal_winsz(stdinfd, masterfd);
                lxc_cmd_terminal_winch(ts->winch_proxy, 
ts->winch_proxy_lxcpath);
        } else {
-               INFO("File descriptor %d does not refer to a tty device", 
stdinfd);
+               INFO("File descriptor %d does not refer to a terminal", 
stdinfd);
        }
 
        ret = lxc_mainloop_open(&descr);

From 073e148b3f43a58a072de5750f476b0d9b2b73c3 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:46:36 +0100
Subject: [PATCH 21/25] terminal: lxc_make_controlling_terminal()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/attach.c   | 2 +-
 src/lxc/terminal.c | 4 ++--
 src/lxc/terminal.h | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/lxc/attach.c b/src/lxc/attach.c
index 243c91c65..04ff172cd 100644
--- a/src/lxc/attach.c
+++ b/src/lxc/attach.c
@@ -846,7 +846,7 @@ static int attach_child_main(struct attach_clone_payload 
*payload)
        }
 
        if (options->stdin_fd > 0 && isatty(options->stdin_fd)) {
-               ret = lxc_make_controlling_pty(options->stdin_fd);
+               ret = lxc_make_controlling_terminal(options->stdin_fd);
                if (ret < 0)
                        goto on_error;
        }
diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index d0aeb1fed..8862a27fd 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -1134,7 +1134,7 @@ int lxc_console(struct lxc_container *c, int ttynum,
        return ret;
 }
 
-int lxc_make_controlling_pty(int fd)
+int lxc_make_controlling_terminal(int fd)
 {
        int ret;
 
@@ -1151,7 +1151,7 @@ int lxc_login_pty(int fd)
 {
        int ret;
 
-       ret = lxc_make_controlling_pty(fd);
+       ret = lxc_make_controlling_terminal(fd);
        if (ret < 0)
                return -1;
 
diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h
index e9b95c434..79ee4a1d1 100644
--- a/src/lxc/terminal.h
+++ b/src/lxc/terminal.h
@@ -281,7 +281,7 @@ extern int lxc_terminal_create_log_file(struct lxc_terminal 
*console);
 extern int lxc_terminal_io_cb(int fd, uint32_t events, void *data,
                              struct lxc_epoll_descr *descr);
 
-extern int lxc_make_controlling_pty(int fd);
+extern int lxc_make_controlling_terminal(int fd);
 extern int lxc_login_pty(int fd);
 extern void lxc_terminal_conf_free(struct lxc_terminal *console);
 extern void lxc_terminal_info_init(struct lxc_terminal_info *pty);

From 80b1a5de15e1e5a5129c9d8338b2227fa8df6d13 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:48:28 +0100
Subject: [PATCH 22/25] terminal: lxc_terminal_prepare_login()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/attach.c   | 2 +-
 src/lxc/terminal.c | 2 +-
 src/lxc/terminal.h | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/lxc/attach.c b/src/lxc/attach.c
index 04ff172cd..d3b7d342b 100644
--- a/src/lxc/attach.c
+++ b/src/lxc/attach.c
@@ -958,7 +958,7 @@ static int attach_child_main(struct attach_clone_payload 
*payload)
        }
 
        if (options->attach_flags & LXC_ATTACH_ALLOCATE_PTY) {
-               ret = lxc_login_pty(payload->pty_fd);
+               ret = lxc_terminal_prepare_login(payload->pty_fd);
                if (ret < 0) {
                        SYSERROR("Failed to prepare pty file descriptor %d", 
payload->pty_fd);
                        goto on_error;
diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 8862a27fd..1047448ff 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -1147,7 +1147,7 @@ int lxc_make_controlling_terminal(int fd)
        return 0;
 }
 
-int lxc_login_pty(int fd)
+int lxc_terminal_prepare_login(int fd)
 {
        int ret;
 
diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h
index 79ee4a1d1..90703988f 100644
--- a/src/lxc/terminal.h
+++ b/src/lxc/terminal.h
@@ -282,7 +282,7 @@ extern int lxc_terminal_io_cb(int fd, uint32_t events, void 
*data,
                              struct lxc_epoll_descr *descr);
 
 extern int lxc_make_controlling_terminal(int fd);
-extern int lxc_login_pty(int fd);
+extern int lxc_terminal_prepare_login(int fd);
 extern void lxc_terminal_conf_free(struct lxc_terminal *console);
 extern void lxc_terminal_info_init(struct lxc_terminal_info *pty);
 extern void lxc_terminal_init(struct lxc_terminal *pty);

From ea6d511f60712e77c310bf9a63595831505079c6 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:49:45 +0100
Subject: [PATCH 23/25] terminal: lxc_terminal_map_ids()

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 1047448ff..150d55bc9 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -1191,24 +1191,23 @@ void lxc_terminal_conf_free(struct lxc_terminal 
*terminal)
                lxc_ringbuf_release(&terminal->ringbuf);
 }
 
-int lxc_terminal_map_ids(struct lxc_conf *c, struct lxc_terminal *pty)
+int lxc_terminal_map_ids(struct lxc_conf *c, struct lxc_terminal *terminal)
 {
        int ret;
 
        if (lxc_list_empty(&c->id_map))
                return 0;
 
-       ret = strcmp(pty->name, "");
-       if (ret == 0)
+       if (strcmp(terminal->name, "") == 0)
                return 0;
 
-       ret = chown_mapped_root(pty->name, c);
+       ret = chown_mapped_root(terminal->name, c);
        if (ret < 0) {
-               ERROR("Failed to chown \"%s\"", pty->name);
+               ERROR("Failed to chown terminal \"%s\"", terminal->name);
                return -1;
        }
 
-       TRACE("Chowned \"%s\"", pty->name);
+       TRACE("Chowned terminal \"%s\"", terminal->name);
 
        return 0;
 }

From f027a12a611252c53bcbc8120d73fe027eb3f678 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 12:51:05 +0100
Subject: [PATCH 24/25] terminal: non-functional changes

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 150d55bc9..7d6bc9217 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -567,8 +567,8 @@ static int lxc_terminal_peer_proxy_alloc(struct 
lxc_terminal *terminal,
                return -1;
        }
 
-       /* This is the proxy pty that will be given to the client, and that
-        * the real pty master will send to / recv from.
+       /* This is the proxy terminal that will be given to the client, and
+        * that the real terminal master will send to / recv from.
         */
        ret = openpty(&terminal->proxy.master, &terminal->proxy.slave,
                      terminal->proxy.name, NULL, NULL);

From dd1562ad34b7d2d3cb0e41fb7b59ddb216118db7 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Wed, 28 Feb 2018 13:02:05 +0100
Subject: [PATCH 25/25] terminal: non-functional changes

Signed-off-by: Christian Brauner <[email protected]>
---
 src/lxc/terminal.c |  24 ++++----
 src/lxc/terminal.h | 166 ++++++++++++++++++++++++++++-------------------------
 2 files changed, 99 insertions(+), 91 deletions(-)

diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 7d6bc9217..10c553a2b 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -1165,22 +1165,22 @@ int lxc_terminal_prepare_login(int fd)
        return 0;
 }
 
-void lxc_terminal_info_init(struct lxc_terminal_info *pty)
+void lxc_terminal_info_init(struct lxc_terminal_info *terminal)
 {
-       pty->name[0] = '\0';
-       pty->master = -EBADF;
-       pty->slave = -EBADF;
-       pty->busy = -1;
+       terminal->name[0] = '\0';
+       terminal->master = -EBADF;
+       terminal->slave = -EBADF;
+       terminal->busy = -1;
 }
 
-void lxc_terminal_init(struct lxc_terminal *pty)
+void lxc_terminal_init(struct lxc_terminal *terminal)
 {
-       memset(pty, 0, sizeof(*pty));
-       pty->slave = -EBADF;
-       pty->master = -EBADF;
-       pty->peer = -EBADF;
-       pty->log_fd = -EBADF;
-       lxc_terminal_info_init(&pty->proxy);
+       memset(terminal, 0, sizeof(*terminal));
+       terminal->slave = -EBADF;
+       terminal->master = -EBADF;
+       terminal->peer = -EBADF;
+       terminal->log_fd = -EBADF;
+       lxc_terminal_info_init(&terminal->proxy);
 }
 
 void lxc_terminal_conf_free(struct lxc_terminal *terminal)
diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h
index 90703988f..7077b02dd 100644
--- a/src/lxc/terminal.h
+++ b/src/lxc/terminal.h
@@ -21,8 +21,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#ifndef __LXC_CONSOLE_H
-#define __LXC_CONSOLE_H
+#ifndef __LXC_TERMINAL_H
+#define __LXC_TERMINAL_H
 
 #include "config.h"
 
@@ -36,15 +36,17 @@ struct lxc_container;
 struct lxc_conf;
 struct lxc_epoll_descr;
 
-/* Defines a structure containing a pty information for virtualizing a tty
- * @name   : the path name of the slave pty side
- * @master : the file descriptor of the master
- * @slave  : the file descriptor of the slave
- */
 struct lxc_terminal_info {
+       /* the path name of the slave side */
        char name[MAXPATHLEN];
+
+       /* the file descriptor of the master */
        int master;
+
+       /* the file descriptor of the slave */
        int slave;
+
+       /* whether the terminal is currently used */
        int busy;
 };
 
@@ -53,25 +55,32 @@ struct lxc_terminal_state {
        int stdinfd;
        int stdoutfd;
        int masterfd;
-       /* Escape sequence to use for exiting the pty. A single char can be
-        * specified. The pty can then exited by doing: Ctrl + specified_char +
-        * q. This field is checked by lxc_terminal_stdin_cb(). Set to -1 to
-        * disable exiting the pty via a escape sequence.
+
+       /* Escape sequence to use for exiting the terminal. A single char can
+        * be specified. The terminal can then exited by doing: Ctrl +
+        * specified_char + q. This field is checked by
+        * lxc_terminal_stdin_cb(). Set to -1 to disable exiting the terminal
+        * via a escape sequence.
         */
        int escape;
+
        /* Used internally by lxc_terminal_stdin_cb() to check whether an
         * escape sequence has been received.
         */
        int saw_escape;
+
        /* Name of the container to forward the SIGWINCH event to. */
        const char *winch_proxy;
+
        /* Path of the container to forward the SIGWINCH event to. */
        const char *winch_proxy_lxcpath;
+
        /* File descriptor that accepts signals. If set to -1 no signal handler
         * could be installed. This also means that the sigset_t oldmask member
         * is meaningless.
         */
        int sigfd;
+
        sigset_t oldmask;
 };
 
@@ -86,7 +95,7 @@ struct lxc_terminal {
        struct termios *tios;
        struct lxc_terminal_state *tty_state;
 
-       struct /* lxc_console_log */ {
+       struct /* lxc_terminal_log */ {
                /* size of the log file */
                uint64_t log_size;
 
@@ -109,7 +118,7 @@ struct lxc_terminal {
        };
 };
 
-/*
+/**
  * lxc_terminal_allocate: allocate the console or a tty
  *
  * @conf    : the configuration of the container to allocate from
@@ -119,61 +128,54 @@ struct lxc_terminal {
  */
 extern int  lxc_terminal_allocate(struct lxc_conf *conf, int sockfd, int 
*ttynum);
 
-/*
- * Create a new pty:
- * - calls openpty() to allocate a master/slave pty pair
+/**
+ * Create a new terminal:
+ * - calls openpty() to allocate a master/slave pair
  * - sets the FD_CLOEXEC flag on the master/slave fds
- * - allocates either the current controlling pty (default) or a user specified
- *   pty as peer pty for the newly created master/slave pair
+ * - allocates either the current controlling terminal (default) or a user
+ *   specified terminal as proxy for the newly created master/slave pair
  * - sets up SIGWINCH handler, winsz, and new terminal settings
  *   (Handlers for SIGWINCH and I/O are not registered in a mainloop.)
- * (For an unprivileged container the created pty on the host is not
- * automatically chowned to the uid/gid of the unprivileged user. For this
- * ttys_shift_ids() can be called.)
  */
 extern int lxc_terminal_create(struct lxc_terminal *console);
 
 /**
- * lxc_terminal_setup: Create a new pty.
- * - In addition to lxc_terminal_create() also sets up all pty logs.
+ * lxc_terminal_setup: Create a new terminal.
+ * - In addition to lxc_terminal_create() also sets up logging.
  */
 extern int lxc_terminal_setup(struct lxc_conf *);
 
-/*
- * Delete a pty created via lxc_terminal_setup():
- * - set old terminal settings
- * - memory allocated via lxc_terminal_setup() is free()ed.
- * - close master/slave pty pair and allocated fd for the peer (usually
- *   /dev/tty)
- * Registered handlers in a mainloop are not automatically deleted.
+/**
+ * Delete a terminal created via lxc_terminal_create() or lxc_terminal_setup():
+ * Note, registered handlers are not automatically deleted.
  */
 extern void lxc_terminal_delete(struct lxc_terminal *);
 
-/*
- * lxc_terminal_free: mark the console or a tty as unallocated, free any
- * resources allocated by lxc_terminal_allocate().
+/**
+ * lxc_terminal_free: mark the terminal as unallocated and free any resources
+ * allocated by lxc_terminal_allocate().
  *
  * @conf : the configuration of the container whose tty was closed
  * @fd   : the socket fd whose remote side was closed, which indicated
- *         the console or tty is no longer in use. this is used to match
- *         which console/tty is being freed.
+ *         the terminal is no longer in use. this is used to match
+ *         which terminal is being freed.
  */
 extern void lxc_terminal_free(struct lxc_conf *conf, int fd);
 
-/*
- * Register pty event handlers in an open mainloop
+/**
+ * Register terminal event handlers in an open mainloop.
  */
 extern int  lxc_terminal_mainloop_add(struct lxc_epoll_descr *, struct 
lxc_terminal *);
 
-/*
- * Handle SIGWINCH events on the allocated ptys.
+/**
+ * Handle SIGWINCH events on the allocated terminals.
  */
 extern void lxc_terminal_sigwinch(int sig);
 
-/*
- * Connect to one of the ptys given to the container via lxc.tty.max.
- * - allocates either the current controlling pty (default) or a user specified
- *   pty as peer pty for the containers tty
+/**
+ * Connect to one of the ttys given to the container via lxc.tty.max.
+ * - allocates either the current controlling terminal (default) or a user 
specified
+ *   terminal as proxy terminal for the containers tty
  * - sets up SIGWINCH handler, winsz, and new terminal settings
  * - opens mainloop
  * - registers SIGWINCH, I/O handlers in the mainloop
@@ -183,24 +185,24 @@ extern int  lxc_console(struct lxc_container *c, int 
ttynum,
                        int stdinfd, int stdoutfd, int stderrfd,
                        int escape);
 
-/*
- * Allocate one of the ptys given to the container via lxc.tty.max. Returns an
- * open fd to the allocated pty.
- * Set ttynum to -1 to allocate the first available pty, or to a value within
- * the range specified by lxc.tty.max to allocate a specific pty.
+/**
+ * Allocate one of the tty given to the container via lxc.tty.max. Returns an
+ * open fd to the allocated tty.
+ * Set ttynum to -1 to allocate the first available tty, or to a value within
+ * the range specified by lxc.tty.max to allocate a specific tty.
  */
-extern int  lxc_terminal_getfd(struct lxc_container *c, int *ttynum,
+extern int lxc_terminal_getfd(struct lxc_container *c, int *ttynum,
                              int *masterfd);
 
-/*
- * Make fd a duplicate of the standard file descriptors:
- * fd is made a duplicate of a specific standard file descriptor iff the
- * standard file descriptor refers to a pty.
+/**
+ * Make fd a duplicate of the standard file descriptors. The fd is made a
+ * duplicate of a specific standard file descriptor iff the standard file
+ * descriptor refers to a terminal.
  */
 extern int lxc_terminal_set_stdfds(int fd);
 
-/*
- * Handler for events on the stdin fd of the pty. To be registered via the
+/**
+ * Handler for events on the stdin fd of the terminal. To be registered via the
  * corresponding functions declared and defined in mainloop.{c,h} or
  * lxc_terminal_mainloop_add().
  * This function exits the loop cleanly when an EPOLLHUP event is received.
@@ -208,42 +210,46 @@ extern int lxc_terminal_set_stdfds(int fd);
 extern int lxc_terminal_stdin_cb(int fd, uint32_t events, void *cbdata,
                                 struct lxc_epoll_descr *descr);
 
-/*
- * Handler for events on the master fd of the pty. To be registered via the
- * corresponding functions declared and defined in mainloop.{c,h} or
+/**
+ * Handler for events on the master fd of the terminal. To be registered via
+ * the corresponding functions declared and defined in mainloop.{c,h} or
  * lxc_terminal_mainloop_add().
  * This function exits the loop cleanly when an EPOLLHUP event is received.
  */
 extern int lxc_terminal_master_cb(int fd, uint32_t events, void *cbdata,
                                  struct lxc_epoll_descr *descr);
 
-/*
+/**
  * Setup new terminal properties. The old terminal settings are stored in
  * oldtios.
  */
 extern int lxc_setup_tios(int fd, struct termios *oldtios);
 
 
-/*
+/**
  * lxc_terminal_winsz: propagate winsz from one terminal to another
  *
- * @srcfd : terminal to get size from (typically a slave pty)
- * @dstfd : terminal to set size on (typically a master pty)
+ * @srcfd
+ * - terminal to get size from (typically a slave pty)
+ * @dstfd
+ * - terminal to set size on (typically a master pty)
  */
 extern void lxc_terminal_winsz(int srcfd, int dstfd);
 
 /*
  * lxc_terminal_signal_init: install signal handler
  *
- * @srcfd  : src for winsz in SIGWINCH handler
- * @dstfd  : dst for winsz in SIGWINCH handler
+ * @srcfd
+ * - src for winsz in SIGWINCH handler
+ * @dstfd
+ * - dst for winsz in SIGWINCH handler
  *
- * Returns lxc_terminal_state structure on success or NULL on failure. The 
sigfd
- * member of the returned lxc_terminal_state can be select()/poll()ed/epoll()ed
- * on (ie added to a mainloop) for signals.
+ * Returns lxc_terminal_state structure on success or NULL on failure. The
+ * sigfd member of the returned lxc_terminal_state can be
+ * select()/poll()ed/epoll()ed on (i.e. added to a mainloop) for signals.
  *
- * Must be called with process_lock held to protect the lxc_ttys list, or
- * from a non-threaded context.
+ * Must be called with process_lock held to protect the lxc_ttys list, or from
+ * a non-threaded context.
  *
  * Note that the signal handler isn't installed as a classic asychronous
  * handler, rather signalfd(2) is used so that we can handle the signal when
@@ -256,17 +262,18 @@ extern void lxc_terminal_winsz(int srcfd, int dstfd);
  */
 extern struct lxc_terminal_state *lxc_terminal_signal_init(int srcfd, int 
dstfd);
 
-/*
+/**
  * Handler for signal events. To be registered via the corresponding functions
  * declared and defined in mainloop.{c,h} or lxc_terminal_mainloop_add().
  */
 extern int lxc_terminal_signalfd_cb(int fd, uint32_t events, void *cbdata,
                                    struct lxc_epoll_descr *descr);
 
-/*
+/**
  * lxc_terminal_signal_fini: uninstall signal handler
  *
- * @ts  : the lxc_terminal_state returned by lxc_terminal_signal_init
+ * @ts
+ * - the lxc_terminal_state returned by lxc_terminal_signal_init
  *
  * Restore the saved signal handler that was in effect at the time
  * lxc_terminal_signal_init() was called.
@@ -276,16 +283,17 @@ extern int lxc_terminal_signalfd_cb(int fd, uint32_t 
events, void *cbdata,
  */
 extern void lxc_terminal_signal_fini(struct lxc_terminal_state *ts);
 
-extern int lxc_terminal_write_ringbuffer(struct lxc_terminal *console);
-extern int lxc_terminal_create_log_file(struct lxc_terminal *console);
+extern int lxc_terminal_write_ringbuffer(struct lxc_terminal *terminal);
+extern int lxc_terminal_create_log_file(struct lxc_terminal *terminal);
 extern int lxc_terminal_io_cb(int fd, uint32_t events, void *data,
                              struct lxc_epoll_descr *descr);
 
 extern int lxc_make_controlling_terminal(int fd);
 extern int lxc_terminal_prepare_login(int fd);
-extern void lxc_terminal_conf_free(struct lxc_terminal *console);
-extern void lxc_terminal_info_init(struct lxc_terminal_info *pty);
-extern void lxc_terminal_init(struct lxc_terminal *pty);
-extern int lxc_terminal_map_ids(struct lxc_conf *c, struct lxc_terminal *pty);
+extern void lxc_terminal_conf_free(struct lxc_terminal *terminal);
+extern void lxc_terminal_info_init(struct lxc_terminal_info *terminal);
+extern void lxc_terminal_init(struct lxc_terminal *terminal);
+extern int lxc_terminal_map_ids(struct lxc_conf *c,
+                               struct lxc_terminal *terminal);
 
-#endif
+#endif /* __LXC_TERMINAL_H */
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to