Implement krb5_auth_con_set_checksum_func, an API for setting a
authorSam Hartman <hartmans@mit.edu>
Mon, 6 Jan 2003 22:51:16 +0000 (22:51 +0000)
committerSam Hartman <hartmans@mit.edu>
Mon, 6 Jan 2003 22:51:16 +0000 (22:51 +0000)
callback to specify the data to be checksummed by krb5_mk_req after
the auth_context has been set up.  Mainly useful for GSSAPI.

Ticket: 1054
Status: open

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

src/include/ChangeLog
src/include/krb5.hin
src/lib/ChangeLog
src/lib/krb5/krb/ChangeLog
src/lib/krb5/krb/auth_con.c
src/lib/krb5/krb/auth_con.h
src/lib/krb5/krb/mk_req_ext.c
src/lib/krb5_32.def

index 2b6e7d46e74ef3779978599170309fa2f6137864..76a2a95ec0845250db2e9796b0c818db78cca4d1 100644 (file)
@@ -1,3 +1,8 @@
+2003-01-06  Sam Hartman  <hartmans@mit.edu>
+
+       * krb5.hin: Add support for setting a callback to generate the
+       data  checksummed by mk_req
+
 2003-01-03  Ezra Peisach  <epeisach@bu.edu>
 
        * fake-addrinfo.h (freeaddrinfo): Do not free a NULL pointer.
index 9d2d1ef8e05c4df7dfc2fc61b80b23e27a6a595a..e238f7a60037042adc9effa193cb59d2897148af 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * include/krb5.h
  *
- * Copyright 1989,1990,1995,2001 by the Massachusetts Institute of Technology.
+ * Copyright 1989,1990,1995,2001, 2003  by the Massachusetts Institute of Technology.
  * All Rights Reserved.
  *
  * Export of this software from the United States of America may
@@ -1159,6 +1159,13 @@ typedef struct krb5_replay_data {
 #define KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR     0x00000004
 #define KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR    0x00000008
 
+/* type of function used as a callback to generate checksum data for
+       * mk_req*/
+
+typedef krb5_error_code KRB5_CALLCONV
+(* krb5_mk_req_checksum_func) (krb5_context, krb5_auth_context , void *,
+                              krb5_data **);
+
 /*
  * end "safepriv.h"
  */
@@ -2103,6 +2110,14 @@ krb5_error_code KRB5_CALLCONV krb5_auth_con_getflags
                krb5_auth_context,
                krb5_int32 *);
 
+krb5_error_code KRB5_CALLCONV
+krb5_auth_con_set_checksum_func (krb5_context, krb5_auth_context,
+                                krb5_mk_req_checksum_func, void *);
+
+krb5_error_code KRB5_CALLCONV
+krb5_auth_con_get_checksum_func( krb5_context, krb5_auth_context,
+                                krb5_mk_req_checksum_func *, void **);
+
 krb5_error_code KRB5_CALLCONV_WRONG krb5_auth_con_setaddrs
        (krb5_context,
                krb5_auth_context,
index 96bc29cb180dfc5eab96a02db75a6303041e3611..ebebb7334476798704ac6fb04db3ba55c9c0a2fa 100644 (file)
@@ -1,3 +1,7 @@
+2003-01-06  Sam Hartman  <hartmans@mit.edu>
+
+       * krb5_32.def: Export krb5_auth_con_*_checksum_func
+
 2002-12-02  Tom Yu  <tlyu@mit.edu>
 
        * win_glue.c: Put kadm_err.et references back in.
index b0a1ec724c26011e982811926b49e9f459e0b893..e12afdce68550a9e7f8a448fd872461527100839 100644 (file)
@@ -1,3 +1,16 @@
+2003-01-06  Sam Hartman  <hartmans@mit.edu>
+
+       * mk_req_ext.c (krb5_mk_req_extended): Inf no in_data is provided
+       but krb5_auth_con_set_checksum_func has been called, then use that
+       callback to generate the in_data.
+
+       * auth_con.c (krb5_auth_con_init): Initialize checksum_func fields
+       (krb5_auth_con_set_checksum_func):  new function-- set the mk_req
+       checksum function 
+       (krb5_auth_con_get_checksum_func): return the same
+
+       * auth_con.h: Add checksum_func and checksum_func_data
+
 2002-12-23  Ezra Peisach  <epeisach@bu.edu>
 
        * t_kerb.c: Include string.h for strcmp prototype.
index 7c60785ad13719eb58ac438a4303db78b8c7b0cb..09ccf9808efc524bcc50a78db26f89083002d8eb 100644 (file)
@@ -38,6 +38,8 @@ krb5_auth_con_init(krb5_context context, krb5_auth_context *auth_context)
 
     (*auth_context)->req_cksumtype = context->default_ap_req_sumtype;
     (*auth_context)->safe_cksumtype = context->default_safe_sumtype;
+    (*auth_context) -> checksum_func = NULL;
+    (*auth_context)->checksum_func_data = NULL;
     (*auth_context)->magic = KV5M_AUTH_CONTEXT;
     return 0;
 }
@@ -335,3 +337,25 @@ krb5_auth_con_getpermetypes(krb5_context context, krb5_auth_context auth_context
 
     return(0);
 }
+
+krb5_error_code KRB5_CALLCONV
+krb5_auth_con_set_checksum_func( krb5_context context,
+                                krb5_auth_context  auth_context,
+                                krb5_mk_req_checksum_func func,
+                                void *data)
+{
+  auth_context->checksum_func = func;
+  auth_context->checksum_func_data = data;
+  return 0;
+}
+
+krb5_error_code KRB5_CALLCONV
+krb5_auth_con_get_checksum_func( krb5_context context,
+                                krb5_auth_context auth_context,
+                                krb5_mk_req_checksum_func *func,
+                                void **data)
+{
+  *func = auth_context->checksum_func;
+  *data = auth_context->checksum_func_data;
+  return 0;
+}
index e6704169ed2529af42cd610a7d6b0a1f0ecb4292..d83d6b86e87912b6cc4ff08c10232b6bf258704e 100644 (file)
@@ -21,6 +21,8 @@ struct _krb5_auth_context {
     krb5_pointer       i_vector;               /* mk_priv, rd_priv only */
     krb5_rcache                rcache;
     krb5_enctype      * permitted_etypes;      /* rd_req */
+  krb5_mk_req_checksum_func checksum_func;
+  void *checksum_func_data;
 };
 
 
index 5e07f7b667fb428c350f034c8183e827e2be5777..c2cd63b914d953dbcc6c4591160ca0a2a7af2e5f 100644 (file)
@@ -140,7 +140,17 @@ krb5_mk_req_extended(krb5_context context, krb5_auth_context *auth_context,
            goto cleanup;
     }
 
+    if (!in_data &&(*auth_context)->checksum_func) {
+      
     if (in_data) {
+      retval = (*auth_context)->checksum_func( context,
+                                           *auth_context,
+                                           (*auth_context)->checksum_func_data,
+                                           &in_data);
+      if (retval)
+       goto cleanup_cksum;
+    }
+
        if ((*auth_context)->req_cksumtype == 0x8003) {
            /* XXX Special hack for GSSAPI */
            checksum.checksum_type = 0x8003;
index 2e9d5fc3fc7b9989e4c5d48674a68cda75889fe5..79f4cc74ae25ab67cc03ad099dfacbadaebdf0a3 100644 (file)
@@ -181,6 +181,8 @@ EXPORTS
        krb5_auth_con_getauthenticator
        krb5_auth_con_set_req_cksumtype
        krb5_auth_con_setrcache
+krb5_auth_con_set_checksum_func
+krb5_auth_con_get_checksum_func
 ;
        krb5_cc_default
        krb5_cc_default_name