svn rev #25817: trunk/src/lib/krb5/krb/

ghudson@MIT.EDU ghudson at MIT.EDU
Thu Apr 19 13:55:11 EDT 2012


http://src.mit.edu/fisheye/changelog/krb5/?cs=25817
Commit By: ghudson
Log Message:
Unify krb5_get_init_creds_keytab code paths

Use krb5_init_creds_set_keytab in krb5_get_init_creds_keytab, so that
processing added to the former will be used by the latter.  This is
slightly awkward because of the way we do the use_master fallback, in
that we have to duplicate some of krb5int_get_init_creds.

Based on a patch from Stef Walter.


Changed Files:
U   trunk/src/lib/krb5/krb/deps
U   trunk/src/lib/krb5/krb/get_in_tkt.c
U   trunk/src/lib/krb5/krb/gic_keytab.c
U   trunk/src/lib/krb5/krb/int-proto.h
Modified: trunk/src/lib/krb5/krb/deps
===================================================================
--- trunk/src/lib/krb5/krb/deps	2012-04-19 17:55:07 UTC (rev 25816)
+++ trunk/src/lib/krb5/krb/deps	2012-04-19 17:55:10 UTC (rev 25817)
@@ -473,7 +473,8 @@
   $(top_srcdir)/include/k5-trace.h $(top_srcdir)/include/krb5.h \
   $(top_srcdir)/include/krb5/authdata_plugin.h $(top_srcdir)/include/krb5/plugin.h \
   $(top_srcdir)/include/krb5/preauth_plugin.h $(top_srcdir)/include/port-sockets.h \
-  $(top_srcdir)/include/socket-utils.h gic_keytab.c init_creds_ctx.h
+  $(top_srcdir)/include/socket-utils.h gic_keytab.c init_creds_ctx.h \
+  int-proto.h
 gic_opt.so gic_opt.po $(OUTPRE)gic_opt.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
   $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
   $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(top_srcdir)/include/k5-buf.h \

Modified: trunk/src/lib/krb5/krb/get_in_tkt.c
===================================================================
--- trunk/src/lib/krb5/krb/get_in_tkt.c	2012-04-19 17:55:07 UTC (rev 25816)
+++ trunk/src/lib/krb5/krb/get_in_tkt.c	2012-04-19 17:55:10 UTC (rev 25817)
@@ -542,10 +542,9 @@
     free(ctx);
 }
 
-static krb5_error_code
-init_creds_get(krb5_context context,
-               krb5_init_creds_context ctx,
-               int *use_master)
+krb5_error_code
+k5_init_creds_get(krb5_context context, krb5_init_creds_context ctx,
+                  int *use_master)
 {
     krb5_error_code code;
     krb5_data request;
@@ -599,7 +598,7 @@
 {
     int use_master = 0;
 
-    return init_creds_get(context, ctx, &use_master);
+    return k5_init_creds_get(context, ctx, &use_master);
 }
 
 krb5_error_code KRB5_CALLCONV
@@ -1664,7 +1663,7 @@
             goto cleanup;
     }
 
-    code = init_creds_get(context, ctx, use_master);
+    code = k5_init_creds_get(context, ctx, use_master);
     if (code != 0)
         goto cleanup;
 

Modified: trunk/src/lib/krb5/krb/gic_keytab.c
===================================================================
--- trunk/src/lib/krb5/krb/gic_keytab.c	2012-04-19 17:55:07 UTC (rev 25816)
+++ trunk/src/lib/krb5/krb/gic_keytab.c	2012-04-19 17:55:10 UTC (rev 25817)
@@ -26,6 +26,7 @@
 #ifndef LEAN_CLIENT
 
 #include "k5-int.h"
+#include "int-proto.h"
 #include "init_creds_ctx.h"
 
 static krb5_error_code
@@ -87,6 +88,44 @@
     return 0;
 }
 
+static krb5_error_code
+get_init_creds_keytab(krb5_context context, krb5_creds *creds,
+                      krb5_principal client, krb5_keytab keytab,
+                      krb5_deltat start_time, char *in_tkt_service,
+                      krb5_get_init_creds_opt *options, int *use_master)
+{
+    krb5_error_code ret;
+    krb5_init_creds_context ctx = NULL;
+
+    ret = krb5_init_creds_init(context, client, NULL, NULL, start_time,
+                               options, &ctx);
+    if (ret != 0)
+        goto cleanup;
+
+    if (in_tkt_service) {
+        ret = krb5_init_creds_set_service(context, ctx, in_tkt_service);
+        if (ret != 0)
+            goto cleanup;
+    }
+
+    ret = krb5_init_creds_set_keytab(context, ctx, keytab);
+    if (ret != 0)
+        goto cleanup;
+
+    ret = k5_init_creds_get(context, ctx, use_master);
+    if (ret != 0)
+        goto cleanup;
+
+    ret = krb5_init_creds_get_creds(context, ctx, creds);
+    if (ret != 0)
+        goto cleanup;
+
+cleanup:
+    krb5_init_creds_free(context, ctx);
+
+    return ret;
+}
+
 krb5_error_code KRB5_CALLCONV
 krb5_get_init_creds_keytab(krb5_context context,
                            krb5_creds *creds,
@@ -111,10 +150,8 @@
 
     /* first try: get the requested tkt from any kdc */
 
-    ret = krb5int_get_init_creds(context, creds, client, NULL, NULL,
-                                 start_time, in_tkt_service, options,
-                                 get_as_key_keytab, (void *) keytab,
-                                 &use_master,NULL);
+    ret = get_init_creds_keytab(context, creds, client, keytab, start_time,
+                                in_tkt_service, options, &use_master);
 
     /* check for success */
 
@@ -132,10 +169,9 @@
     if (!use_master) {
         use_master = 1;
 
-        ret2 = krb5int_get_init_creds(context, creds, client, NULL, NULL,
-                                      start_time, in_tkt_service, options,
-                                      get_as_key_keytab, (void *) keytab,
-                                      &use_master, NULL);
+        ret2 = get_init_creds_keytab(context, creds, client, keytab,
+                                     start_time, in_tkt_service, options,
+                                     &use_master);
 
         if (ret2 == 0) {
             ret = 0;

Modified: trunk/src/lib/krb5/krb/int-proto.h
===================================================================
--- trunk/src/lib/krb5/krb/int-proto.h	2012-04-19 17:55:07 UTC (rev 25816)
+++ trunk/src/lib/krb5/krb/int-proto.h	2012-04-19 17:55:10 UTC (rev 25817)
@@ -196,4 +196,8 @@
 void
 k5_ccselect_free_context(krb5_context context);
 
+krb5_error_code
+k5_init_creds_get(krb5_context context, krb5_init_creds_context ctx,
+                  int *use_master);
+
 #endif /* KRB5_INT_FUNC_PROTO__ */



More information about the cvs-krb5 mailing list