From: Karel Zak Date: Fri, 9 Mar 2007 13:56:18 +0000 (+0100) Subject: login: add regression test for IP address checking code X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71562c1fddf8d025b5de94d1df3b89278fc679b2;p=util-linux login: add regression test for IP address checking code The hnmatch() in checktty.c is checking IP addresses if the login util is compiled without PAM support. Signed-off-by: Karel Zak --- diff --git a/login-utils/Makefile.am b/login-utils/Makefile.am index cc894e19..0a36e158 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 9c3ce46d..f47b7ad4 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 02f47e8b..7347c228 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 de329032..7e2aadbe 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 00000000..7bb60293 --- /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 00000000..f51ab0fa --- /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 +