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 <kzak@redhat.com>
This commit is contained in:
parent
75d4dbb0d7
commit
71562c1fdd
|
@ -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
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"}
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
Loading…
Reference in New Issue