From 26ae4495eededc9854f533b1cb2c0f23160290d8 Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Mon, 22 Aug 2016 15:34:52 -0400 Subject: [PATCH] Add URI lookup testing with resolv_wrapper Run t_discover_uri.py during make check when resolv_wrapper is available. Remove tabs from the t_locate_kdc output for simpler line matching. ticket: 8496 --- src/config/pre.in | 3 ++ src/configure.in | 8 ++++++ src/lib/krb5/os/Makefile.in | 10 ++++++- src/lib/krb5/os/t_discover_uri.py | 47 +++++++++++++++++++++++++++++++ src/lib/krb5/os/t_locate_kdc.c | 2 +- 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/lib/krb5/os/t_discover_uri.py diff --git a/src/config/pre.in b/src/config/pre.in index b3678b8eca..e0626320c6 100644 --- a/src/config/pre.in +++ b/src/config/pre.in @@ -448,6 +448,9 @@ TLS_IMPL_LIBS = @TLS_IMPL_LIBS@ # Whether we have the SASL header file for the LDAP KDB module HAVE_SASL = @HAVE_SASL@ +# Whether we have libresolv 1.1.5 for URI discovery tests +HAVE_RESOLV_WRAPPER = @HAVE_RESOLV_WRAPPER@ + # error table rules # ### /* these are invoked as $(...) foo.et, which works, but could be better */ diff --git a/src/configure.in b/src/configure.in index 433e9d1f26..6cca1c385e 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1135,6 +1135,14 @@ fi AC_SUBST(HAVE_CMOCKA) AC_SUBST(CMOCKA_LIBS) +# For URI lookup tests. Requires resolv_wrapper >= 1.1.5 for URI +# support. +HAVE_RESOLV_WRAPPER=0 +if pkg-config --atleast-version=1.1.5 resolv_wrapper; then + HAVE_RESOLV_WRAPPER=1 +fi +AC_SUBST(HAVE_RESOLV_WRAPPER) + # for plugins/kdb/db2 # AIX is unusual in that it wants all symbols resolved at link time diff --git a/src/lib/krb5/os/Makefile.in b/src/lib/krb5/os/Makefile.in index 195123587e..efa82e22f3 100644 --- a/src/lib/krb5/os/Makefile.in +++ b/src/lib/krb5/os/Makefile.in @@ -200,7 +200,7 @@ lclint-localaddr: localaddr.c -DTEST $(srcdir)/localaddr.c check-unix: check-unix-stdconf check-unix-locate check-unix-trace \ - check-unix-expand + check-unix-expand check-unix-uri check-unix-stdconf: t_std_conf $(RUN_TEST_LOCAL_CONF) ./t_std_conf -d -s NEW.DEFAULT.REALM -d \ @@ -232,6 +232,14 @@ check-unix-locate: t_locate_kdc echo 'Skipped t_locate_kdc test: OFFLINE' >> $(SKIPTESTS); \ fi +check-unix-uri: t_locate_kdc + if [ $(HAVE_RESOLV_WRAPPER) = 1 ]; then \ + $(RUNPYTEST) $(srcdir)/t_discover_uri.py $(PYTESTFLAGS); \ + else \ + echo '*** WARNING: skipped t_discover_uri.py due to not using resolv_wrapper'; \ + echo 'Skipped URI discovery tests: resolv_wrapper 1.1.5 not found' >> $(SKIPTESTS); \ + fi + check-unix-trace: t_trace rm -f t_trace.out KRB5_TRACE=t_trace.out ; export KRB5_TRACE ; \ diff --git a/src/lib/krb5/os/t_discover_uri.py b/src/lib/krb5/os/t_discover_uri.py new file mode 100644 index 0000000000..278f983715 --- /dev/null +++ b/src/lib/krb5/os/t_discover_uri.py @@ -0,0 +1,47 @@ +#!/usr/bin/python +from k5test import * + +entries = ('URI _kerberos.TEST krb5srv::kkdcp:https://kdc1 1 1\n', + 'URI _kerberos.TEST krb5srv::kkdcp:https://kdc3:300/path 3 1\n', + 'URI _kerberos.TEST krb5srv:m:kkdcp:https://kdc2/path 2 1\n', + 'URI _kerberos.TEST KRB5SRV:xMz:UDP:KDC4 4 1\n', + 'URI _kerberos.TEST krb5srv:xyz:tcp:192.168.1.6 6 1\n', + 'URI _kerberos.TEST krb5srv::tcp:kdc5:500 5 1\n', + 'URI _kerberos.TEST krb5srv::tcp:[dead:beef:cafe:7]:700 7 1\n', + 'URI _kerberos.TEST bogustag:m:kkdcp:https://bogus 8 1\n', + 'URI _kerberos.TEST krb5srv:m:bogustrans:https://bogus 10 1\n', + 'URI _kerberos.TEST krb5srv:m:kkdcp:bogus 11 1\n', + 'URI _kerberos.TEST krb5srv:m:bogusnotrans 12 1\n') + +expected = ('7 servers:', + '0: h:kdc1 t:https p:443 m:0 P:', + '1: h:kdc2 t:https p:443 m:1 P:path', + '2: h:kdc3 t:https p:300 m:0 P:path', + '3: h:KDC4 t:udp p:88 m:1 P:', + '4: h:kdc5 t:tcp p:500 m:0 P:', + '5: h:192.168.1.6 t:tcp p:88 m:0 P:', + '6: h:dead:beef:cafe:7 t:tcp p:700 m:0 P:') + +conf = {'libdefaults': {'dns_lookup_kdc' : 'true'}} + +realm = K5Realm(create_kdb=False, krb5_conf=conf) + +hosts_filename = os.path.join(realm.testdir, 'resolv_hosts') +f = open(hosts_filename, 'w') +for line in entries: + f.write(line) +f.close() + +realm.env['LD_PRELOAD'] = 'libresolv_wrapper.so' +realm.env['RESOLV_WRAPPER_HOSTS'] = hosts_filename + +out = realm.run(['./t_locate_kdc', 'TEST'], env=realm.env) +l = out.splitlines() + +j = 0 +for i in range(4, 12): + if l[i].strip() != expected[j]: + fail('URI answers do not match') + j += 1 + +success('uri discovery tests') diff --git a/src/lib/krb5/os/t_locate_kdc.c b/src/lib/krb5/os/t_locate_kdc.c index 344bb324ec..6414b8e92d 100644 --- a/src/lib/krb5/os/t_locate_kdc.c +++ b/src/lib/krb5/os/t_locate_kdc.c @@ -58,7 +58,7 @@ print_addrs (void) char hostbuf[NI_MAXHOST], srvbuf[NI_MAXSERV]; if (entry->hostname != NULL) { - printf("%2d: host %s\t%s\tport %d\tm:%d\tp:%s\n", (int)i, + printf("%d: h:%s t:%s p:%d m:%d P:%s\n", (int)i, entry->hostname, ttypename(entry->transport), entry->port, entry->master, entry->uri_path ? entry->uri_path : ""); -- 2.47.2