mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-13 22:12:15 +00:00
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:
parent
4d1ffb0abb
commit
e98affdaa8
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user