diff options
| -rw-r--r-- | src/lib/krb5/krb/ChangeLog | 13 | ||||
| -rw-r--r-- | src/lib/krb5/krb/Makefile.in | 28 | ||||
| -rw-r--r-- | src/lib/krb5/krb/conv_princ.c | 49 | ||||
| -rw-r--r-- | src/lib/krb5/krb/t_kerb.c | 85 | ||||
| -rw-r--r-- | src/lib/krb5/krb/t_krb5.conf | 29 | ||||
| -rw-r--r-- | src/lib/krb5/krb/t_ref_kerb.out | 7 |
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' |
