summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--login-utils/Makefile.am5
-rw-r--r--login-utils/checktty.c59
-rw-r--r--tests/Makefile.am3
-rw-r--r--tests/commands.sh.in2
-rw-r--r--tests/expected/ts-login-checktty5
-rwxr-xr-xtests/ts-login-checktty16
6 files changed, 89 insertions, 1 deletions
diff --git a/login-utils/Makefile.am b/login-utils/Makefile.am
index cc894e196..0a36e158f 100644
--- a/login-utils/Makefile.am
+++ b/login-utils/Makefile.am
@@ -116,3 +116,8 @@ install-exec-hook::
cd $(DESTDIR)$(mandir)/man8 && ln -sf initctl.8 provide.8
endif
+
+noinst_PROGRAMS = checktty_test
+checktty_test_SOURCES = checktty.c login.h
+checktty_test_CFLAGS = -DMAIN_TEST_CHECKTTY
+
diff --git a/login-utils/checktty.c b/login-utils/checktty.c
index 9c3ce46d0..f47b7ad4d 100644
--- a/login-utils/checktty.c
+++ b/login-utils/checktty.c
@@ -186,6 +186,65 @@ hnmatch(const char *hn, const char *pat)
}
}
+#ifdef MAIN_TEST_CHECKTTY
+
+char hostaddress[4];
+char *hostname;
+void sleepexit(int eval) {} /* dummy for this test */
+void badlogin(const char *s) {} /* dummy for this test */
+
+int
+main(int argc, char **argv)
+{
+ struct addrinfo hints, *info = NULL;
+ struct addrexp {
+ const char *range;
+ const char *ip;
+ } alist[] = {
+ { "130.225.16.0/255.255.254.0", "130.225.16.1" },
+ { "130.225.16.0/255.255.254.0", "10.20.30.1" },
+ { "130.225.0.0/255.254.0.0", "130.225.16.1" },
+ { "130.225.0.0/255.254.0.0", "130.225.17.1" },
+ { "130.225.0.0/255.254.0.0", "150.160.170.180" },
+ { NULL, NULL }
+ }, *item;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_INET;
+ hints.ai_flags = AI_NUMERICHOST | AI_PASSIVE | AI_ADDRCONFIG;
+ hints.ai_socktype = SOCK_STREAM;
+
+ for (item = alist; item->range; item++) {
+
+ printf("hnmatch() on %-30s <-- %-15s: ", item->range, item->ip);
+
+ if (getaddrinfo(item->ip, NULL, &hints, &info)==0 && info) {
+ if (info->ai_family == AF_INET) {
+ struct sockaddr_in *sa =
+ (struct sockaddr_in *) info->ai_addr;
+ memcpy(hostaddress, &(sa->sin_addr),
+ sizeof(sa->sin_addr));
+ }
+/***
+ if (info->ai_family == AF_INET6) {
+ struct sockaddr_in6 *sa =
+ (struct sockaddr_in6 *) info->ai_addr;
+ memcpy(hostaddress, &(sa->sin6_addr),
+ sizeof(sa->sin6_addr));
+ }
+***/
+ freeaddrinfo(info);
+ printf("%s\n", hnmatch("dummy", item->range) ?
+ "match" : "mismatch");
+ }
+ else
+ printf("getaddrinfo() failed\n");
+
+ }
+ return 0;
+}
+#endif /* MAIN_TEST_CHECKTTY */
+
static char *wdays[] = { "sun", "mon", "tue", "wed", "thu", "fri", "sat" };
/* example timespecs:
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 02f47e8b6..7347c2289 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -16,7 +16,8 @@ EXTRA_DIST = expected/* \
ts-mount-paths \
ts-namei-logic \
ts-cramfs-mkfs \
- ts-look-separator
+ ts-look-separator \
+ ts-login-checktty
distclean-local:
rm -rf output diff
diff --git a/tests/commands.sh.in b/tests/commands.sh.in
index de329032c..7e2aadbe5 100644
--- a/tests/commands.sh.in
+++ b/tests/commands.sh.in
@@ -21,3 +21,5 @@ TS_CMD_COL=${TS_CMD_COL:-"$TOPDIR/text-utils/col"}
TS_CMD_NAMEI=${TS_CMD_NAMEI-"$TOPDIR/misc-utils/namei"}
TS_CMD_LOOK=${TS_CMD_LOOK-"$TOPDIR/misc-utils/look"}
+TS_CMD_CHECKTTY=${TS_CMD_CHECKTTY-"$TOPDIR/login-utils/checktty_test"}
+
diff --git a/tests/expected/ts-login-checktty b/tests/expected/ts-login-checktty
new file mode 100644
index 000000000..7bb60293b
--- /dev/null
+++ b/tests/expected/ts-login-checktty
@@ -0,0 +1,5 @@
+hnmatch() on 130.225.16.0/255.255.254.0 <-- 130.225.16.1 : match
+hnmatch() on 130.225.16.0/255.255.254.0 <-- 10.20.30.1 : mismatch
+hnmatch() on 130.225.0.0/255.254.0.0 <-- 130.225.16.1 : match
+hnmatch() on 130.225.0.0/255.254.0.0 <-- 130.225.17.1 : match
+hnmatch() on 130.225.0.0/255.254.0.0 <-- 150.160.170.180: mismatch
diff --git a/tests/ts-login-checktty b/tests/ts-login-checktty
new file mode 100755
index 000000000..f51ab0fa3
--- /dev/null
+++ b/tests/ts-login-checktty
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+. commands.sh
+. functions.sh
+
+TS_COMPONENT="login"
+TS_DESC="checktty"
+
+ts_init
+
+touch $TS_OUTPUT
+
+$TS_CMD_CHECKTTY >> $TS_OUTPUT
+
+ts_finalize
+