diff options
Diffstat (limited to 'daemons/ipa-kdb/ipa_kdb_principals.c')
-rw-r--r-- | daemons/ipa-kdb/ipa_kdb_principals.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/daemons/ipa-kdb/ipa_kdb_principals.c b/daemons/ipa-kdb/ipa_kdb_principals.c index 3566e1ece..66d434a53 100644 --- a/daemons/ipa-kdb/ipa_kdb_principals.c +++ b/daemons/ipa-kdb/ipa_kdb_principals.c @@ -21,6 +21,7 @@ */ #include "ipa_kdb.h" +#include <unicase.h> /* * During TGS request search by ipaKrbPrincipalName (case-insensitive) @@ -614,7 +615,7 @@ static krb5_error_code ipadb_find_principal(krb5_context kcontext, bool found = false; LDAPMessage *le = NULL; struct berval **vals; - int i; + int i, result; ipactx = ipadb_get_context(kcontext); if (!ipactx) { @@ -643,7 +644,11 @@ static krb5_error_code ipadb_find_principal(krb5_context kcontext, /* KDC will accept aliases when doing TGT lookup (ref_tgt_again in do_tgs_req.c */ /* Use case-insensitive comparison in such cases */ if ((flags & KRB5_KDB_FLAG_ALIAS_OK) != 0) { - found = (strcasecmp(vals[i]->bv_val, (*principal)) == 0); + if (ulc_casecmp(vals[i]->bv_val, vals[i]->bv_len, + (*principal), strlen(*principal), + NULL, NULL, &result) != 0) + return KRB5_KDB_INTERNAL_ERROR; + found = (result == 0); } else { found = (strcmp(vals[i]->bv_val, (*principal)) == 0); } @@ -663,7 +668,11 @@ static krb5_error_code ipadb_find_principal(krb5_context kcontext, /* Again, if aliases are accepted by KDC, use case-insensitive comparison */ if ((flags & KRB5_KDB_FLAG_ALIAS_OK) != 0) { - found = (strcasecmp(vals[0]->bv_val, (*principal)) == 0); + if (ulc_casecmp(vals[0]->bv_val, vals[0]->bv_len, + (*principal), strlen(*principal), + NULL, NULL, &result) != 0) + return KRB5_KDB_INTERNAL_ERROR; + found = (result == 0); } else { found = (strcmp(vals[0]->bv_val, (*principal)) == 0); } |