125 lines
3.8 KiB
Diff
125 lines
3.8 KiB
Diff
From 81e74c8676479811601b5894d72bb3d7e05f68dd Mon Sep 17 00:00:00 2001
|
|
From: DJ Delorie <dj@redhat.com>
|
|
Date: Fri, 14 Mar 2025 16:08:12 -0400
|
|
Subject: add ptmx support to test-container
|
|
|
|
Conflicts:
|
|
support/Makefile (context, line numbers)
|
|
support/test-container.c (line numbers)
|
|
|
|
diff --git a/support/Makefile b/support/Makefile
|
|
index dfe8e547f6..d41278eeab 100644
|
|
--- a/support/Makefile
|
|
+++ b/support/Makefile
|
|
@@ -324,6 +324,7 @@ tests = \
|
|
tst-support_format_dns_packet \
|
|
tst-support_fuse \
|
|
tst-support-open-dev-null-range \
|
|
+ tst-support-openpty \
|
|
tst-support-process_state \
|
|
tst-support_quote_blob \
|
|
tst-support_quote_blob_wide \
|
|
@@ -340,6 +341,10 @@ tests = \
|
|
tst-xsigstack \
|
|
# tests
|
|
|
|
+tests-container = \
|
|
+ tst-support-openpty-c \
|
|
+ # tests-container
|
|
+
|
|
ifeq ($(run-built-tests),yes)
|
|
tests-special = \
|
|
$(objpfx)tst-support_record_failure-2.out
|
|
diff --git a/support/test-container.c b/support/test-container.c
|
|
index 79d3189e2f..a641250079 100644
|
|
--- a/support/test-container.c
|
|
+++ b/support/test-container.c
|
|
@@ -1149,6 +1149,9 @@ main (int argc, char **argv)
|
|
devmount (new_root_path, "null");
|
|
devmount (new_root_path, "zero");
|
|
devmount (new_root_path, "urandom");
|
|
+#ifdef __linux__
|
|
+ devmount (new_root_path, "ptmx");
|
|
+#endif
|
|
|
|
/* We're done with the "old" root, switch to the new one. */
|
|
if (chroot (new_root_path) < 0)
|
|
@@ -1214,6 +1217,14 @@ main (int argc, char **argv)
|
|
|
|
maybe_xmkdir ("/tmp", 0755);
|
|
|
|
+#ifdef __linux__
|
|
+ maybe_xmkdir ("/dev/pts", 0777);
|
|
+ if (mount ("/dev/pts", "/dev/pts", "devpts", 0, "newinstance,ptmxmode=0666,mode=0666") < 0)
|
|
+ FAIL_EXIT1 ("can't mount /dev/pts: %m\n");
|
|
+ if (mount ("/dev/pts/ptmx", "/dev/ptmx", "", MS_BIND | MS_REC, NULL) < 0)
|
|
+ FAIL_EXIT1 ("can't mount /dev/ptmx\n");
|
|
+#endif
|
|
+
|
|
if (require_pidns)
|
|
{
|
|
/* Now that we're pid 1 (effectively "root") we can mount /proc */
|
|
diff --git a/support/tst-support-openpty-c.c b/support/tst-support-openpty-c.c
|
|
new file mode 100644
|
|
index 0000000000..0a6a428fc3
|
|
--- /dev/null
|
|
+++ b/support/tst-support-openpty-c.c
|
|
@@ -0,0 +1,2 @@
|
|
+/* Same test, but in a test-container. */
|
|
+#include "tst-support-openpty.c"
|
|
diff --git a/support/tst-support-openpty.c b/support/tst-support-openpty.c
|
|
new file mode 100644
|
|
index 0000000000..1222d7018f
|
|
--- /dev/null
|
|
+++ b/support/tst-support-openpty.c
|
|
@@ -0,0 +1,49 @@
|
|
+/* Basic test for support_openpty support in test-container.
|
|
+ Copyright (C) 2025 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+
|
|
+ The GNU C Library is free software; you can redistribute it and/or
|
|
+ modify it under the terms of the GNU Lesser General Public
|
|
+ License as published by the Free Software Foundation; either
|
|
+ version 2.1 of the License, or (at your option) any later version.
|
|
+
|
|
+ The GNU C Library is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ Lesser General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Lesser General Public
|
|
+ License along with the GNU C Library; if not, see
|
|
+ <https://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <termios.h>
|
|
+#include <unistd.h>
|
|
+#include <sys/ioctl.h>
|
|
+
|
|
+#include <support/tty.h>
|
|
+#include <support/check.h>
|
|
+#include <support/support.h>
|
|
+
|
|
+/* Note: the purpose of this test isn't to test if ptys function
|
|
+ correctly, but only to verify that test-container's support for
|
|
+ them is correct. The many checks in support_openpty.c are
|
|
+ sufficient for this. */
|
|
+
|
|
+int
|
|
+do_test (void)
|
|
+{
|
|
+ int outer, inner;
|
|
+ char *name;
|
|
+ struct termios term;
|
|
+ struct winsize win;
|
|
+
|
|
+ cfmakeraw (&term);
|
|
+ win.ws_row = 24;
|
|
+ win.ws_col = 80;
|
|
+
|
|
+ support_openpty (&outer, &inner, &name, &term, &win);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+#include <support/test-driver.c>
|