From f34251628802f783ce6e9722b9ebf211cc4f0b00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Mon, 5 Jan 2004 14:44:34 +0000 Subject: [PATCH] (krb5_get_forwarded_creds): If tickets are address-less, forward address-less tickets. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13255 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/get_for_creds.c | 46 +++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/lib/krb5/get_for_creds.c b/lib/krb5/get_for_creds.c index d9170eb95..36d2abc40 100644 --- a/lib/krb5/get_for_creds.c +++ b/lib/krb5/get_for_creds.c @@ -168,29 +168,45 @@ krb5_get_forwarded_creds (krb5_context context, struct addrinfo *ai; int save_errno; krb5_keyblock *key; + krb5_creds *krbtgt; addrs.len = 0; addrs.val = NULL; - ret = getaddrinfo (hostname, NULL, NULL, &ai); - if (ret) { - save_errno = errno; - krb5_set_error_string(context, "resolving %s: %s", - hostname, gai_strerror(ret)); - return krb5_eai_to_heim_errno(ret, save_errno); - } - - ret = add_addrs (context, &addrs, ai); - freeaddrinfo (ai); - if (ret) + ret = _krb5_get_krbtgt (context, + ccache, + in_creds->server->realm, + &krbtgt); + if(ret) return ret; + + /* + * If tickets are address-less, forward address-less tickets. + */ + + if (krbtgt->addresses.len != 0) { + + ret = getaddrinfo (hostname, NULL, NULL, &ai); + if (ret) { + save_errno = errno; + krb5_set_error_string(context, "resolving %s: %s", + hostname, gai_strerror(ret)); + return krb5_eai_to_heim_errno(ret, save_errno); + } + + ret = add_addrs (context, &addrs, ai); + freeaddrinfo (ai); + if (ret) + return ret; + } + krb5_free_creds (context, krbtgt); kdc_flags.i = flags; ret = krb5_get_kdc_cred (context, ccache, kdc_flags, - &addrs, + addrs.len != 0 ? &addrs : NULL, NULL, in_creds, &out_creds); @@ -373,11 +389,11 @@ krb5_get_forwarded_creds (krb5_context context, out_data->length = len; out_data->data = buf; return 0; -out4: + out4: free_EncKrbCredPart(&enc_krb_cred_part); -out3: + out3: free_KRB_CRED(&cred); -out2: + out2: krb5_free_creds (context, out_creds); return ret; }