Imported Upstream version 1.15.1
[platform/upstream/krb5.git] / src / lib / krb5 / krb / in_tkt_sky.c
index bd8b771..7a89226 100644 (file)
  */
 
 #include "k5-int.h"
+#include "int-proto.h"
 
-/* A krb5_gic_get_as_key_fct shim for copying a caller-provided keyblock into
- * the AS keyblock. */
+/* Copy the caller-provided keyblock into the AS keyblock. */
 static krb5_error_code
 get_as_key_skey(krb5_context context, krb5_principal client,
                 krb5_enctype etype, krb5_prompter_fct prompter,
                 void *prompter_data, krb5_data *salt, krb5_data *params,
-                krb5_keyblock *as_key, void *gak_data)
+                krb5_keyblock *as_key, void *gak_data,
+                k5_response_items *ritems)
 {
     const krb5_keyblock *key = gak_data;
 
@@ -77,39 +78,43 @@ krb5_get_in_tkt_with_skey(krb5_context context, krb5_flags options,
     int use_master = 0;
     krb5_get_init_creds_opt *opts = NULL;
 
+    retval = k5_populate_gic_opt(context, &opts, options, addrs, ktypes,
+                                 pre_auth_types, creds);
+    if (retval)
+        return retval;
+
+    retval = krb5_get_init_creds_opt_set_out_ccache(context, opts, ccache);
+    if (retval)
+        goto cleanup;
+
 #ifndef LEAN_CLIENT
     if (key == NULL) {
-        return krb5_get_in_tkt_with_keytab(context, options, addrs, ktypes,
-                                           pre_auth_types, NULL, ccache,
-                                           creds, ret_as_reply);
+        retval = krb5_get_init_creds_keytab(context, creds, creds->client,
+                                            NULL /* keytab */,
+                                            creds->times.starttime,
+                                            NULL /* in_tkt_service */,
+                                            opts);
+        goto cleanup;
     }
 #endif /* LEAN_CLIENT */
 
-    retval = krb5int_populate_gic_opt(context, &opts, options, addrs, ktypes,
-                                      pre_auth_types, creds);
-    if (retval)
-        return retval;
     retval = krb5_unparse_name(context, creds->server, &server);
-    if (retval) {
-        krb5_get_init_creds_opt_free(context, opts);
-        return retval;
-    }
+    if (retval)
+        goto cleanup;
     server_princ = creds->server;
     client_princ = creds->client;
-    retval = krb5int_get_init_creds(context, creds, creds->client,
-                                    krb5_prompter_posix, NULL, 0, server, opts,
-                                    get_as_key_skey, (void *) key, &use_master,
-                                    ret_as_reply);
+    retval = k5_get_init_creds(context, creds, creds->client,
+                               krb5_prompter_posix, NULL, 0, server, opts,
+                               get_as_key_skey, (void *)key, &use_master,
+                               ret_as_reply);
     krb5_free_unparsed_name(context, server);
-    krb5_get_init_creds_opt_free(context, opts);
     if (retval)
-        return retval;
+        goto cleanup;
     krb5_free_principal( context, creds->server);
     krb5_free_principal( context, creds->client);
     creds->client = client_princ;
     creds->server = server_princ;
-    /* store it in the ccache! */
-    if (ccache)
-        retval = krb5_cc_store_cred(context, ccache, creds);
+cleanup:
+    krb5_get_init_creds_opt_free(context, opts);
     return retval;
 }