1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
--- xen-4.3.1.orig/m4/ptyfuncs.m4
+++ xen-4.3.1/m4/ptyfuncs.m4
@@ -10,7 +10,7 @@
])
AX_SAVEVAR_RESTORE(CPPFLAGS)
AC_CACHE_CHECK([for openpty et al], [ax_cv_ptyfuncs_libs], [
- for ax_cv_ptyfuncs_libs in -lutil "" NOT_FOUND; do
+ for ax_cv_ptyfuncs_libs in -lc -lutil "" NOT_FOUND; do
if test "x$ax_cv_ptyfuncs_libs" = "xNOT_FOUND"; then
AC_MSG_FAILURE([Unable to find library for openpty and login_tty])
fi
--- xen-4.3.1.orig/m4/ptyfuncs.m4
+++ xen-4.3.1/m4/ptyfuncs.m4
@@ -22,7 +22,6 @@
#endif
int main(void) {
openpty(0,0,0,0,0);
- login_tty(0);
}
])],[
break
--- xen-4.3.1.orig/tools/libxl/libxl_bootloader.c
+++ xen-4.3.1/tools/libxl/libxl_bootloader.c
@@ -85,6 +85,21 @@
/*----- synchronous subroutines -----*/
+static int setup_console_tty(int fd)
+{
+ (void) setsid();
+#ifdef TIOCSCTTY
+ if (ioctl(fd, TIOCSCTTY, (char *)NULL) == -1)
+ return (-1);
+#endif
+ (void) dup2(fd, 0);
+ (void) dup2(fd, 1);
+ (void) dup2(fd, 2);
+ if (fd > 2)
+ (void) close(fd);
+ return (0);
+}
+
static int setup_xenconsoled_pty(libxl__egc *egc, libxl__bootloader_state *bl,
char *slave_path, size_t slave_path_len)
{
@@ -548,7 +563,7 @@
if (!pid) {
/* child */
- r = login_tty(libxl__carefd_fd(bl->ptys[0].slave));
+ r = setup_console_tty(libxl__carefd_fd(bl->ptys[0].slave));
if (r) { LOGE(ERROR, "login_tty failed"); exit(-1); }
libxl__exec(gc, -1, -1, -1, bl->args[0], (char **) bl->args, env);
exit(-1);
|