aboutsummaryrefslogtreecommitdiff
path: root/src/lib/krb5/os/t_locate_kdc.c
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2001-07-19 11:44:26 +0000
committerKen Raeburn <raeburn@mit.edu>2001-07-19 11:44:26 +0000
commit3d547e9077e46b40dfdf3ddef53dabaa6823c31a (patch)
tree08856e4988278989e156341271f203cde7329dcc /src/lib/krb5/os/t_locate_kdc.c
parent95e62dbf342043188c73e7850e5db23576a0b0bc (diff)
downloadkrb5-3d547e9077e46b40dfdf3ddef53dabaa6823c31a.zip
krb5-3d547e9077e46b40dfdf3ddef53dabaa6823c31a.tar.gz
krb5-3d547e9077e46b40dfdf3ddef53dabaa6823c31a.tar.bz2
New utility program.
* t_locate_kdc.c: New file. * Makefile.in (t_locate_kdc.o, t_locate_kdc): New targets. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@13614 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5/os/t_locate_kdc.c')
-rw-r--r--src/lib/krb5/os/t_locate_kdc.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/lib/krb5/os/t_locate_kdc.c b/src/lib/krb5/os/t_locate_kdc.c
new file mode 100644
index 0000000..e93b6d8
--- /dev/null
+++ b/src/lib/krb5/os/t_locate_kdc.c
@@ -0,0 +1,110 @@
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <com_err.h>
+
+#define TEST
+#include "locate_kdc.c"
+
+enum {
+ LOOKUP_CONF = 3,
+ LOOKUP_DNS,
+ LOOKUP_WHATEVER
+} how = LOOKUP_WHATEVER;
+
+const char *prog;
+
+struct addrlist al;
+
+void kfatal (krb5_error_code err)
+{
+ com_err (prog, err, "- exiting");
+ exit (1);
+}
+
+void print_addrs ()
+{
+ int i;
+
+ struct sockaddr **addrs = al.addrs;
+ int naddrs = al.naddrs;
+
+ printf ("%d addresses:\n", naddrs);
+ for (i = 0; i < naddrs; i++) {
+ int err;
+ char hostbuf[NI_MAXHOST], srvbuf[NI_MAXSERV];
+ err = getnameinfo (addrs[i], socklen(addrs[i]),
+ hostbuf, sizeof (hostbuf),
+ srvbuf, sizeof (srvbuf),
+ NI_NUMERICHOST | NI_NUMERICSERV);
+ if (err)
+ printf ("%2d: getnameinfo returns error %d=%s\n",
+ i, err, gai_strerror (err));
+ else
+ printf ("%2d: address %s\tport %s\n", i, hostbuf, srvbuf);
+ }
+}
+
+int main (int argc, char *argv[])
+{
+ char *p, *realmname;
+ krb5_data realm;
+ krb5_context ctx;
+ krb5_error_code err;
+
+ p = strrchr (argv[0], '/');
+ if (p)
+ prog = p+1;
+ else
+ prog = argv[0];
+
+ switch (argc) {
+ case 2:
+ /* foo $realm */
+ realmname = argv[1];
+ break;
+ case 3:
+ if (!strcmp (argv[1], "-c"))
+ how = LOOKUP_CONF;
+ else if (!strcmp (argv[1], "-d"))
+ how = LOOKUP_DNS;
+ else
+ goto usage;
+ realmname = argv[2];
+ break;
+ default:
+ usage:
+ fprintf (stderr, "%s: usage: %s [-c | -d] realm\n", prog, prog);
+ return 1;
+ }
+
+ err = krb5_init_context (&ctx);
+ if (err)
+ kfatal (err);
+
+ realm.data = realmname;
+ realm.length = strlen (realmname);
+
+ switch (how) {
+ case LOOKUP_CONF:
+ err = krb5_locate_srv_conf (ctx, &realm, "kdc", &al, 0,
+ htons (88), htons (750));
+ break;
+
+ case LOOKUP_DNS:
+ err = krb5_locate_srv_dns (&realm, "_kerberos", "_udp", &al);
+ break;
+
+ case LOOKUP_WHATEVER:
+ err = krb5_locate_kdc (ctx, &realm, &al, 0);
+ break;
+ }
+ if (err) kfatal (err);
+ print_addrs ();
+ return 0;
+}