From c8bb9b555b490e594a458b3d71fb6dbb783b34db Mon Sep 17 00:00:00 2001 From: Theodore Tso Date: Wed, 1 Sep 1993 19:03:28 +0000 Subject: Modifications supplied by Ari Medvinsky to include the authorization data field in the authenticator. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2639 dc483132-0cff-0310-8789-dd5450dbe970 --- src/lib/krb5/asn.1/auth2kauth.c | 9 +++++++++ src/lib/krb5/asn.1/kauth2auth.c | 7 +++++++ src/lib/krb5/free/f_authent.c | 2 ++ src/lib/krb5/krb/copy_athctr.c | 13 +++++++++++++ src/lib/krb5/krb/mk_req_ext.c | 15 ++++++--------- 5 files changed, 37 insertions(+), 9 deletions(-) (limited to 'src/lib') diff --git a/src/lib/krb5/asn.1/auth2kauth.c b/src/lib/krb5/asn.1/auth2kauth.c index 50cf1662a..5b44441a6 100644 --- a/src/lib/krb5/asn.1/auth2kauth.c +++ b/src/lib/krb5/asn.1/auth2kauth.c @@ -86,5 +86,14 @@ register int *error; if (val->optionals & opt_KRB5_Authenticator_seq__number) { retval->seq_number = val->seq__number; } + if (val->authorization__data) { + retval->authorization_data = + KRB5_AuthorizationData2krb5_authdata(val->authorization__data, + error); + if (!retval->authorization_data) { + krb5_free_authenticator(retval); + return(0); + } + } return(retval); } diff --git a/src/lib/krb5/asn.1/kauth2auth.c b/src/lib/krb5/asn.1/kauth2auth.c index a6f0d0da7..c3e94dc2f 100644 --- a/src/lib/krb5/asn.1/kauth2auth.c +++ b/src/lib/krb5/asn.1/kauth2auth.c @@ -87,5 +87,12 @@ register int *error; retval->seq__number = val->seq_number; retval->optionals |= opt_KRB5_Authenticator_seq__number; } + if (val->authorization_data && *val->authorization_data) { + retval->authorization__data = + krb5_authdata2KRB5_AuthorizationData(val->authorization_data, error); + if (!retval->authorization__data) { + goto errout; + } + } return(retval); } diff --git a/src/lib/krb5/free/f_authent.c b/src/lib/krb5/free/f_authent.c index 90f3dad58..4e399b567 100644 --- a/src/lib/krb5/free/f_authent.c +++ b/src/lib/krb5/free/f_authent.c @@ -44,6 +44,8 @@ krb5_authenticator *val; krb5_free_principal(val->client); if (val->subkey) krb5_free_keyblock(val->subkey); + if (val->authorization_data) + krb5_free_authdata(val->authorization_data); xfree(val); return; } diff --git a/src/lib/krb5/krb/copy_athctr.c b/src/lib/krb5/krb/copy_athctr.c index f2fa627d0..28a513873 100644 --- a/src/lib/krb5/krb/copy_athctr.c +++ b/src/lib/krb5/krb/copy_athctr.c @@ -70,6 +70,19 @@ krb5_authenticator **authto; } } + if (authfrom->authorization_data) { + retval = krb5_copy_authdata(authfrom->authorization_data, + &tempto->authorization_data); + if (retval) { + xfree(tempto->subkey); + krb5_free_checksum(tempto->checksum); + krb5_free_principal(tempto->client); + krb5_free_authdata(tempto->authorization_data); + xfree(tempto); + return retval; + } + } + *authto = tempto; return 0; } diff --git a/src/lib/krb5/krb/mk_req_ext.c b/src/lib/krb5/krb/mk_req_ext.c index a9fe8a2d4..eed4df7d7 100644 --- a/src/lib/krb5/krb/mk_req_ext.c +++ b/src/lib/krb5/krb/mk_req_ext.c @@ -70,11 +70,6 @@ static char rcsid_mk_req_ext_c[] = returns system errors */ -static krb5_error_code generate_authenticator PROTOTYPE((krb5_authenticator *, - const krb5_creds *, - const krb5_checksum *, - krb5_keyblock *, - krb5_int32 )); krb5_error_code krb5_mk_req_extended(ap_req_options, checksum, kdc_options, @@ -130,9 +125,9 @@ krb5_data *outbuf; } } #define cleanup_key() {if (newkey) krb5_free_keyblock(*newkey);} - if (retval = generate_authenticator(&authent, creds, checksum, - newkey ? *newkey : 0, - sequence)) { + if (retval = krb5_generate_authenticator(&authent, creds, checksum, + newkey ? *newkey : 0, + sequence, creds->authdata)) { cleanup_key(); cleanup_ticket(); return retval; @@ -231,17 +226,19 @@ request.authenticator.ciphertext.data = 0;} } static krb5_error_code -generate_authenticator(authent, creds, cksum, key, seq_number) +krb5_generate_authenticator(authent, creds, cksum, key, seq_number, authorization) krb5_authenticator *authent; const krb5_creds *creds; const krb5_checksum *cksum; krb5_keyblock *key; krb5_int32 seq_number; +krb5_authdata **authorization; { authent->client = creds->client; authent->checksum = (krb5_checksum *)cksum; authent->subkey = key; authent->seq_number = seq_number; + authent->authorization_data = authorization; return(krb5_us_timeofday(&authent->ctime, &authent->cusec)); } -- cgit