diff options
Diffstat (limited to 'crypto/heimdal/lib/krb5/mk_req.c')
-rw-r--r-- | crypto/heimdal/lib/krb5/mk_req.c | 78 |
1 files changed, 47 insertions, 31 deletions
diff --git a/crypto/heimdal/lib/krb5/mk_req.c b/crypto/heimdal/lib/krb5/mk_req.c index 55ecd46..a30c19e 100644 --- a/crypto/heimdal/lib/krb5/mk_req.c +++ b/crypto/heimdal/lib/krb5/mk_req.c @@ -33,23 +33,19 @@ #include <krb5_locl.h> -RCSID("$Id: mk_req.c,v 1.20 2000/01/16 10:22:42 assar Exp $"); +RCSID("$Id: mk_req.c,v 1.22 2000/11/15 06:50:53 assar Exp $"); krb5_error_code -krb5_mk_req(krb5_context context, - krb5_auth_context *auth_context, - const krb5_flags ap_req_options, - const char *service, - const char *hostname, - krb5_data *in_data, - krb5_ccache ccache, - krb5_data *outbuf) +krb5_mk_req_exact(krb5_context context, + krb5_auth_context *auth_context, + const krb5_flags ap_req_options, + const krb5_principal server, + krb5_data *in_data, + krb5_ccache ccache, + krb5_data *outbuf) { krb5_error_code ret; krb5_creds this_cred, *cred; - char **realms; - krb5_data realm_data; - char *real_hostname; memset(&this_cred, 0, sizeof(this_cred)); @@ -58,34 +54,18 @@ krb5_mk_req(krb5_context context, if(ret) return ret; - ret = krb5_expand_hostname_realms (context, hostname, - &real_hostname, &realms); + ret = krb5_copy_principal (context, server, &this_cred.server); if (ret) { - krb5_free_principal (context, this_cred.client); + krb5_free_creds_contents (context, &this_cred); return ret; } - realm_data.length = strlen(*realms); - realm_data.data = *realms; - - ret = krb5_build_principal (context, &this_cred.server, - strlen(*realms), - *realms, - service, - real_hostname, - NULL); - free (real_hostname); - krb5_free_host_realm (context, realms); - - if (ret) { - krb5_free_principal (context, this_cred.client); - return ret; - } this_cred.times.endtime = 0; if (auth_context && *auth_context && (*auth_context)->keytype) this_cred.session.keytype = (*auth_context)->keytype; ret = krb5_get_credentials (context, 0, ccache, &this_cred, &cred); + krb5_free_creds_contents(context, &this_cred); if (ret) return ret; @@ -96,3 +76,39 @@ krb5_mk_req(krb5_context context, cred, outbuf); } + +krb5_error_code +krb5_mk_req(krb5_context context, + krb5_auth_context *auth_context, + const krb5_flags ap_req_options, + const char *service, + const char *hostname, + krb5_data *in_data, + krb5_ccache ccache, + krb5_data *outbuf) +{ + krb5_error_code ret; + char **realms; + char *real_hostname; + krb5_principal server; + + ret = krb5_expand_hostname_realms (context, hostname, + &real_hostname, &realms); + if (ret) + return ret; + + ret = krb5_build_principal (context, &server, + strlen(*realms), + *realms, + service, + real_hostname, + NULL); + free (real_hostname); + krb5_free_host_realm (context, realms); + if (ret) + return ret; + ret = krb5_mk_req_exact (context, auth_context, ap_req_options, + server, in_data, ccache, outbuf); + krb5_free_principal (context, server); + return ret; +} |