]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
need to store in_cred->authdata so we can match on it
authorLuke Howard <lukeh@padl.com>
Mon, 31 Aug 2009 23:40:24 +0000 (23:40 +0000)
committerLuke Howard <lukeh@padl.com>
Mon, 31 Aug 2009 23:40:24 +0000 (23:40 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/users/lhoward/authdata@22694 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/krb/gc_frm_kdc.c

index 3098e8e13cd6551753231b1cb675fbcc38fdf7f9..ab4d4be29d12123a61a626c9d19495cd66d6b362 100644 (file)
@@ -934,6 +934,7 @@ krb5_get_cred_from_kdc_opt(krb5_context context, krb5_ccache ccache,
     krb5_boolean old_use_conf_ktypes;
     char **hrealms;
     unsigned int referral_count, i;
+    krb5_authdata **out_supplied_authdata = NULL;
 
     /* 
      * Set up client and server pointers.  Make a fresh and modifyable
@@ -948,6 +949,15 @@ krb5_get_cred_from_kdc_opt(krb5_context context, krb5_ccache ccache,
        krb5_free_principal(context, server);
        return retval;
     }
+    if (in_cred->authdata != NULL) {
+       if ((retval = krb5_copy_authdata(context, in_cred->authdata,
+                                        &out_supplied_authdata)) != 0) {
+           krb5_free_principal(context, out_supplied_server);
+           krb5_free_principal(context, server);
+           return retval;
+       }
+    }
+
     supplied_server = in_cred->server;
     in_cred->server=server;
 
@@ -1278,7 +1288,9 @@ cleanup:
     if (*out_cred && !retval) {
         /* Success: free server, swap supplied server back in. */
         krb5_free_principal (context, (*out_cred)->server);
-       (*out_cred)->server= out_supplied_server;
+       (*out_cred)->server = out_supplied_server;
+       assert((*out_cred)->authdata == NULL);
+       (*out_cred)->authdata = out_supplied_authdata;
     }
     else {
         /* 
@@ -1286,7 +1298,8 @@ cleanup:
         * since it's either null or a referral TGT that we free below,
         * and we may need it to return.
         */
-        krb5_free_principal (context, out_supplied_server);
+        krb5_free_principal(context, out_supplied_server);
+       krb5_free_authdata(context, out_supplied_authdata);
     }
     DUMP_PRINC("gc_from_kdc: final server after reversion", in_cred->server);
     /*