summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/krb5/krb/ChangeLog13
-rw-r--r--src/lib/krb5/krb/Makefile.in28
-rw-r--r--src/lib/krb5/krb/conv_princ.c49
-rw-r--r--src/lib/krb5/krb/t_kerb.c85
-rw-r--r--src/lib/krb5/krb/t_krb5.conf29
-rw-r--r--src/lib/krb5/krb/t_ref_kerb.out7
6 files changed, 193 insertions, 18 deletions
diff --git a/src/lib/krb5/krb/ChangeLog b/src/lib/krb5/krb/ChangeLog
index 7157e3042..42e0cea2a 100644
--- a/src/lib/krb5/krb/ChangeLog
+++ b/src/lib/krb5/krb/ChangeLog
@@ -1,3 +1,16 @@
+Fri May 5 00:06:24 1995 Theodore Y. Ts'o (tytso@dcl)
+
+ * conv_princ.c (krb5_425_conv_principal): Use new calling
+ convention of krb5_get_realm_domain, which is that it
+ returns the realm *without* the leading dot.
+
+ Also use the profile code to look up individual instance
+ conversions using [realms]/<realm>/v4_instance_covert/<inst>
+ This allows special case handling of mit.edu and
+ lithium.lcs.mit.edu.
+
+ * t_kerb.c: New file for testing krb library functions. Currently
+ only tests krb5_425_conv_principal.
Wed May 03 03:30:51 1995 Chris Provenzano (proven@mit.edu)
diff --git a/src/lib/krb5/krb/Makefile.in b/src/lib/krb5/krb/Makefile.in
index 066b8e7bc..ef3cb9687 100644
--- a/src/lib/krb5/krb/Makefile.in
+++ b/src/lib/krb5/krb/Makefile.in
@@ -135,17 +135,37 @@ all:: $(OBJS)
COMERRLIB=$(BUILDTOP)/util/et/libcom_err.a
T_WALK_RTREE_OBJS= t_walk_rtree.o walk_rtree.o tgtname.o unparse.o \
- free_rtree.o bld_pr_ext.o $(COMERRLIB) $(TOPLIBD)/libkrb5.a \
- $(TOPLIBD)/libcrypto.a
+ free_rtree.o bld_pr_ext.o \
+ $(TOPLIBD)/libkrb5.a $(TOPLIBD)/libcrypto.a $(COMERRLIB)
+
+T_KERB_OBJS= t_kerb.o conv_princ.o unparse.o \
+ $(TOPLIBD)/libkrb5.a $(TOPLIBD)/libcrypto.a $(COMERRLIB)
t_walk_rtree: $(T_WALK_RTREE_OBJS)
- $(CC) -o t_walk_rtree $(T_WALK_RTREE_OBJS) $(LIBS)
+ $(LD) -o t_walk_rtree $(T_WALK_RTREE_OBJS) $(LIBS)
+
+t_kerb: $(T_KERB_OBJS)
+ $(LD) -o t_kerb $(T_KERB_OBJS) $(LIBS)
-TEST_PROGS= t_walk_rtree
+TEST_PROGS= t_walk_rtree t_kerb
check:: check-$(WHAT)
check-unix:: $(TEST_PROGS)
+ KRB5_CONFIG=$(srcdir)/t_krb5.conf ; export KRB5_CONFIG ;\
+ ./t_kerb 425_conv_principal rcmd e40-po ATHENA.MIT.EDU \
+ 425_conv_principal rcmd mit ATHENA.MIT.EDU \
+ 425_conv_principal rcmd lithium ATHENA.MIT.EDU \
+ 425_conv_principal rcmd tweedledumb CYGNUS.COM \
+ 425_conv_principal rcmd uunet UU.NET \
+ 425_conv_principal zephyr zephyr ATHENA.MIT.EDU \
+ 425_conv_principal kadmin ATHENA.MIT.EDU ATHENA.MIT.EDU \
+ > test.out
+ cmp test.out $(srcdir)/t_ref_kerb.out
+ $(RM) test.out
+
+
+
check-mac:: $(TEST_PROGS)
check-windows::
diff --git a/src/lib/krb5/krb/conv_princ.c b/src/lib/krb5/krb/conv_princ.c
index e76bf9b88..b74d2d79e 100644
--- a/src/lib/krb5/krb/conv_princ.c
+++ b/src/lib/krb5/krb/conv_princ.c
@@ -179,6 +179,8 @@ krb5_425_conv_principal(context, name, instance, realm, princ)
char buf[256]; /* V4 instances are limited to 40 characters */
krb5_error_code retval;
char *domain, *cp;
+ char **full_name = 0, **cpp;
+ const char *names[5];
if (instance) {
if (instance[0] == '\0') {
@@ -195,22 +197,41 @@ krb5_425_conv_principal(context, name, instance, realm, princ)
}
name = p->v5_str;
if (p->flags & DO_REALM_CONVERSION) {
- strcpy(buf, instance);
- retval = krb5_get_realm_domain(context, realm, &domain);
- if (retval)
- return retval;
- if (domain) {
- for (cp = domain; *cp; cp++)
- if (isupper(*cp))
- *cp = tolower(*cp);
- strcat(buf, domain);
- krb5_xfree(domain);
- }
- instance = buf;
+ names[0] = "realms";
+ names[1] = realm;
+ names[2] = "v4_instance_convert";
+ names[3] = instance;
+ names[4] = 0;
+ retval = profile_get_values(context->profile, names, &full_name);
+ if (retval == 0 && full_name && full_name[0]) {
+ instance = full_name[0];
+ } else {
+ strcpy(buf, instance);
+ retval = krb5_get_realm_domain(context, realm, &domain);
+ if (retval)
+ return retval;
+ if (domain) {
+ for (cp = domain; *cp; cp++)
+ if (isupper(*cp))
+ *cp = tolower(*cp);
+#ifndef OLD_CONFIG_FILES
+ strcat(buf, ".");
+#endif
+ strcat(buf, domain);
+ krb5_xfree(domain);
+ }
+ instance = buf;
+ }
}
}
not_service:
- return(krb5_build_principal(context, princ, strlen(realm), realm, name,
- instance, 0));
+ retval = krb5_build_principal(context, princ, strlen(realm), realm, name,
+ instance, 0);
+ if (full_name) {
+ for (cpp = full_name; *cpp; cpp++)
+ krb5_xfree(*cpp);
+ krb5_xfree(full_name);
+ }
+ return retval;
}
diff --git a/src/lib/krb5/krb/t_kerb.c b/src/lib/krb5/krb/t_kerb.c
new file mode 100644
index 000000000..f2dcf8a9a
--- /dev/null
+++ b/src/lib/krb5/krb/t_kerb.c
@@ -0,0 +1,85 @@
+/*
+ * This driver routine is used to test many of the standard Kerberos library
+ * routines.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include "com_err.h"
+#include "krb5.h"
+
+
+void test_425_conv_principal(ctx, name, inst, realm)
+ krb5_context ctx;
+ char *name, *inst, *realm;
+{
+ krb5_error_code retval;
+ krb5_principal princ;
+
+ retval = krb5_425_conv_principal(ctx, name, inst, realm, &princ);
+ if (retval) {
+ com_err("krb5_425_conv_principal", retval, 0);
+ return;
+ }
+ retval = krb5_unparse_name(ctx, princ, &name);
+ printf("425_converted principal: '%s'\n", name);
+ free(name);
+ krb5_free_principal(ctx, princ);
+}
+
+void usage(progname)
+ char *progname;
+{
+ fprintf(stderr, "%s: Usage: %s [425_conv_principal <name> <inst> <realm]\n",
+ progname, progname);
+ exit(1);
+}
+
+int
+main(argc, argv)
+ int argc;
+ char **argv;
+{
+ krb5_context ctx;
+ krb5_error_code retval;
+ char *progname;
+ char *name, *inst, *realm;
+
+ retval = krb5_init_context(&ctx);
+ if (retval) {
+ fprintf(stderr, "krb5_init_context returned error %ld\n",
+ retval);
+ exit(1);
+ }
+ krb5_init_ets(ctx);
+ progname = argv[0];
+
+ /* Parse arguments. */
+ argc--; argv++;
+ while (argc) {
+ if (strcmp(*argv, "425_conv_principal") == 0) {
+ argc--; argv++;
+ if (!argc) usage(progname);
+ name = *argv;
+ argc--; argv++;
+ if (!argc) usage(progname);
+ inst = *argv;
+ argc--; argv++;
+ if (!argc) usage(progname);
+ realm = *argv;
+ test_425_conv_principal(ctx, name, inst, realm);
+ } else
+ usage(progname);
+ argc--; argv++;
+ }
+
+ krb5_free_context(ctx);
+
+ return 0;
+}
diff --git a/src/lib/krb5/krb/t_krb5.conf b/src/lib/krb5/krb/t_krb5.conf
new file mode 100644
index 000000000..5882d9770
--- /dev/null
+++ b/src/lib/krb5/krb/t_krb5.conf
@@ -0,0 +1,29 @@
+[libdefaults]
+ ticket_lifetime = 600
+ default_realm = ATHENA.MIT.EDU
+
+[realms]
+ ATHENA.MIT.EDU = {
+ kdc = KERBEROS-2.MIT.EDU:88
+ kdc = KERBEROS.MIT.EDU
+ kdc = KERBEROS-1.MIT.EDU
+ admin_server = KERBEROS.MIT.EDU
+ default_domain = MIT.EDU
+ v4_instance_convert = {
+ mit = mit.edu
+ lithium = lithium.lcs.mit.edu
+ }
+ }
+ CYGNUS.COM = {
+ kdc = KERBEROS-1.CYGNUS.COM
+ kdc = KERBEROS.CYGNUS.COM
+ admin_server = KERBEROS.MIT.EDU
+ }
+
+[domain_realm]
+ .mit.edu = ATHENA.MIT.EDU
+ mit.edu = ATHENA.MIT.EDU
+ .media.mit.edu = MEDIA-LAB.MIT.EDU
+ media.mit.edu = MEDIA-LAB.MIT.EDU
+ .ucsc.edu = CATS.UCSC.EDU
+
diff --git a/src/lib/krb5/krb/t_ref_kerb.out b/src/lib/krb5/krb/t_ref_kerb.out
new file mode 100644
index 000000000..b363c026c
--- /dev/null
+++ b/src/lib/krb5/krb/t_ref_kerb.out
@@ -0,0 +1,7 @@
+425_converted principal: 'host/e40-po.mit.edu@ATHENA.MIT.EDU'
+425_converted principal: 'host/mit.edu@ATHENA.MIT.EDU'
+425_converted principal: 'host/lithium.lcs.mit.edu@ATHENA.MIT.EDU'
+425_converted principal: 'host/tweedledumb.cygnus.com@CYGNUS.COM'
+425_converted principal: 'host/uunet.uu.net@UU.NET'
+425_converted principal: 'zephyr/zephyr@ATHENA.MIT.EDU'
+425_converted principal: 'kadmin/ATHENA.MIT.EDU@ATHENA.MIT.EDU'