From 85575388c3df9b6d7b1acd4add535fa56423e54e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Mon, 5 Jan 2004 15:00:50 +0000 Subject: [PATCH] (krb5_get_forwarded_creds): try to handle errors better for previous commit git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13256 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/get_for_creds.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/lib/krb5/get_for_creds.c b/lib/krb5/get_for_creds.c index 36d2abc40..63c420835 100644 --- a/lib/krb5/get_for_creds.c +++ b/lib/krb5/get_for_creds.c @@ -156,7 +156,7 @@ krb5_get_forwarded_creds (krb5_context context, { krb5_error_code ret; krb5_creds *out_creds; - krb5_addresses addrs; + krb5_addresses addrs, *paddrs; KRB_CRED cred; KrbCredInfo *krb_cred_info; EncKrbCredPart enc_krb_cred_part; @@ -168,23 +168,33 @@ krb5_get_forwarded_creds (krb5_context context, struct addrinfo *ai; int save_errno; krb5_keyblock *key; - krb5_creds *krbtgt; + krb5_creds *ticket; + char *realm; + + if (in_creds->client && in_creds->client->realm) + realm = in_creds->client->realm; + else + realm = in_creds->server->realm; addrs.len = 0; addrs.val = NULL; - - ret = _krb5_get_krbtgt (context, - ccache, - in_creds->server->realm, - &krbtgt); - if(ret) - return ret; + paddrs = &addrs; /* * If tickets are address-less, forward address-less tickets. */ - if (krbtgt->addresses.len != 0) { + ret = _krb5_get_krbtgt (context, + ccache, + realm, + &ticket); + if(ret == 0) { + if (ticket->addresses.len == 0) + paddrs = NULL; + krb5_free_creds (context, ticket); + } + + if (paddrs != NULL) { ret = getaddrinfo (hostname, NULL, NULL, &ai); if (ret) { @@ -199,14 +209,13 @@ krb5_get_forwarded_creds (krb5_context context, if (ret) return ret; } - krb5_free_creds (context, krbtgt); kdc_flags.i = flags; ret = krb5_get_kdc_cred (context, ccache, kdc_flags, - addrs.len != 0 ? &addrs : NULL, + paddrs, NULL, in_creds, &out_creds);