summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2006-12-19 01:31:11 +0000
committerKen Raeburn <raeburn@mit.edu>2006-12-19 01:31:11 +0000
commitd167f064b4455dc66ca8dfbea4053525dc325502 (patch)
treed50868e27c07aa0d1f9dc3847890f178bafa71ab /src/lib
parent6adc5cf4c7ed54dfd675b9bfb005ff27e0147891 (diff)
downloadkrb5-d167f064b4455dc66ca8dfbea4053525dc325502.tar.gz
krb5-d167f064b4455dc66ca8dfbea4053525dc325502.tar.xz
krb5-d167f064b4455dc66ca8dfbea4053525dc325502.zip
ktfns.c (krb5_kt_get_entry): If the supplied server principal has an empty
realm name, replace it with the default realm, in a private copy. ticket: 5121 tags: pullup git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@18975 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/krb5/keytab/ktfns.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/lib/krb5/keytab/ktfns.c b/src/lib/krb5/keytab/ktfns.c
index 70da406954..63fa6399b6 100644
--- a/src/lib/krb5/keytab/ktfns.c
+++ b/src/lib/krb5/keytab/ktfns.c
@@ -54,7 +54,24 @@ krb5_kt_get_entry(krb5_context context, krb5_keytab keytab,
krb5_const_principal principal, krb5_kvno vno,
krb5_enctype enctype, krb5_keytab_entry *entry)
{
- return krb5_x((keytab)->ops->get,(context, keytab, principal, vno, enctype, entry));
+ krb5_error_code err;
+ krb5_principal_data princ_data;
+
+ if (krb5_is_referral_realm(&principal->realm)) {
+ char *realm;
+ princ_data = *principal;
+ principal = &princ_data;
+ err = krb5_get_default_realm(context, &realm);
+ if (err)
+ return err;
+ princ_data.realm.data = realm;
+ princ_data.realm.length = strlen(realm);
+ }
+ err = krb5_x((keytab)->ops->get,(context, keytab, principal, vno, enctype,
+ entry));
+ if (principal == &princ_data)
+ krb5_free_default_realm(context, princ_data.realm.data);
+ return err;
}
krb5_error_code KRB5_CALLCONV