console: add some pty helpers

- int lxc_make_controlling_pty()
- int lxc_login_pty()
- void lxc_pty_conf_free()
- void lxc_pty_info_init()
- void lxc_pty_init()

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
Christian Brauner 2017-12-23 12:19:51 +01:00
parent 4d1ffb0abb
commit e98affdaa8
No known key found for this signature in database
GPG Key ID: 8EB056D53EECB12D
3 changed files with 67 additions and 5 deletions

View File

@ -73,6 +73,7 @@
#include "cgroup.h"
#include "conf.h"
#include "confile_utils.h"
#include "console.h"
#include "error.h"
#include "log.h"
#include "lxclock.h"
@ -3720,11 +3721,7 @@ void lxc_conf_free(struct lxc_conf *conf)
return;
if (current_config == conf)
current_config = NULL;
free(conf->console.buffer_log_file);
free(conf->console.log_path);
free(conf->console.path);
if (conf->console.buffer_size > 0 && conf->console.ringbuf.addr)
lxc_ringbuf_release(&conf->console.ringbuf);
lxc_pty_conf_free(&conf->console);
free(conf->rootfs.mount);
free(conf->rootfs.bdev_type);
free(conf->rootfs.options);

View File

@ -985,3 +985,62 @@ close_fds:
return ret;
}
int lxc_make_controlling_pty(int fd)
{
int ret;
setsid();
ret = ioctl(fd, TIOCSCTTY, (char *)NULL);
if (ret < 0)
return -1;
return 0;
}
int lxc_login_pty(int fd)
{
int ret;
ret = lxc_make_controlling_pty(fd);
if (ret < 0)
return -1;
ret = lxc_console_set_stdfds(fd);
if (ret < 0)
return -1;
if (fd > STDERR_FILENO)
close(fd);
return 0;
}
void lxc_pty_info_init(struct lxc_pty_info *pty)
{
pty->name[0] = '\0';
pty->master = -EBADF;
pty->slave = -EBADF;
pty->busy = -1;
}
void lxc_pty_init(struct lxc_console *pty)
{
memset(pty, 0, sizeof(*pty));
pty->slave = -EBADF;
pty->master = -EBADF;
pty->peer = -EBADF;
pty->log_fd = -EBADF;
pty->buffer_log_file_fd = -EBADF;
lxc_pty_info_init(&pty->peerpty);
}
void lxc_pty_conf_free(struct lxc_console *console)
{
free(console->buffer_log_file);
free(console->log_path);
free(console->path);
if (console->buffer_size > 0 && console->ringbuf.addr)
lxc_ringbuf_release(&console->ringbuf);
}

View File

@ -232,4 +232,10 @@ extern int lxc_console_create_log_file(struct lxc_console *console);
extern int lxc_console_cb_con(int fd, uint32_t events, void *data,
struct lxc_epoll_descr *descr);
extern int lxc_make_controlling_pty(int fd);
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);
#endif