conv_princ.c (krb5_425_conv_principal): Use new calling
authorTheodore Tso <tytso@mit.edu>
Fri, 5 May 1995 04:56:00 +0000 (04:56 +0000)
committerTheodore Tso <tytso@mit.edu>
Fri, 5 May 1995 04:56:00 +0000 (04:56 +0000)
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_convert/<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.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@5726 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/krb/ChangeLog
src/lib/krb5/krb/Makefile.in
src/lib/krb5/krb/conv_princ.c
src/lib/krb5/krb/t_kerb.c [new file with mode: 0644]
src/lib/krb5/krb/t_krb5.conf [new file with mode: 0644]
src/lib/krb5/krb/t_ref_kerb.out [new file with mode: 0644]

index 7157e3042f326234e0413f7f9466cc01a55bb76b..42e0cea2a2ca5b94f249d0e883419f90e2b80957 100644 (file)
@@ -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)
 
index 066b8e7bcb2c0fcca43e815b74603474b573334c..ef3cb9687506e51e183cfccaafb716f34d33420c 100644 (file)
@@ -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::
index e76bf9b88d750e625349f1ace6fef604b858fe75..b74d2d79e572879a125955dcca9af5dbd589996c 100644 (file)
@@ -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 (file)
index 0000000..f2dcf8a
--- /dev/null
@@ -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 (file)
index 0000000..5882d97
--- /dev/null
@@ -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 (file)
index 0000000..b363c02
--- /dev/null
@@ -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'