]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Add kdc_state field to krb5_kdc_req
authorSam Hartman <hartmans@mit.edu>
Thu, 26 Mar 2009 05:36:31 +0000 (05:36 +0000)
committerSam Hartman <hartmans@mit.edu>
Thu, 26 Mar 2009 05:36:31 +0000 (05:36 +0000)
Add a kdc_state field to track internal state in handling a request.
The current usage is to pass FAST information to pre-authentication
plugins.

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/fast@22122 dc483132-0cff-0310-8789-dd5450dbe970

src/include/krb5/krb5.hin
src/lib/krb5/asn.1/krb5_decode.c
src/lib/krb5/krb/kfree.c

index 69fb038ce15f2d632fc1c26449a98a245c287b07..05eb82a788c76e539c185580f350949ada22717b 100644 (file)
@@ -1142,6 +1142,13 @@ typedef struct _krb5_kdc_req {
     krb5_authdata **unenc_authdata; /* unencrypted auth data,
                                           if available */
     krb5_ticket **second_ticket;/* second ticket array; OPTIONAL */
+    /* the following field is added in March 2009; it is a hack so
+     * that FAST state can be carried to pre-authentication plugins.
+     * A new plugin interface may be a better long-term approach.  It
+     * is believed to be safe to extend this structure because it is
+     * not found in any public APIs.
+     */
+    void * kdc_state;
 } krb5_kdc_req;
 
 typedef struct _krb5_enc_kdc_rep_part {
index 4a6977c002476afdd50a532408adf36192b2fec0..b69e40a9ead8fbe67ac0a44be53095058cba6a74 100644 (file)
@@ -520,6 +520,7 @@ decode_krb5_as_req(const krb5_data *code, krb5_kdc_req **repptr)
     clear_field(rep,authorization_data.ciphertext.data);
     clear_field(rep,unenc_authdata);
     clear_field(rep,second_ticket);
+    clear_field(rep, kdc_state);
 
     check_apptag(10);
     retval = asn1_decode_kdc_req(&buf,rep);
@@ -547,6 +548,7 @@ decode_krb5_tgs_req(const krb5_data *code, krb5_kdc_req **repptr)
     clear_field(rep,authorization_data.ciphertext.data);
     clear_field(rep,unenc_authdata);
     clear_field(rep,second_ticket);
+    clear_field(rep, kdc_state);
 
     check_apptag(12);
     retval = asn1_decode_kdc_req(&buf,rep);
index e0e71746d6de94ff352bbb231ec7fb14a1baba01..c15e8bdab8b7773eb1e3610152bfb334bb2612b2 100644 (file)
@@ -54,6 +54,7 @@
  */
 
 #include "k5-int.h"
+#include <assert.h>
 
 void KRB5_CALLCONV
 krb5_free_address(krb5_context context, krb5_address *val)
@@ -344,6 +345,7 @@ krb5_free_kdc_req(krb5_context context, krb5_kdc_req *val)
 {
     if (val == NULL)
        return;
+    assert( val->kdc_state == NULL);
     krb5_free_pa_data(context, val->padata);
     krb5_free_principal(context, val->client);
     krb5_free_principal(context, val->server);