diff options
Diffstat (limited to 'source4/heimdal/lib/hdb/hdb.c')
-rw-r--r-- | source4/heimdal/lib/hdb/hdb.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/source4/heimdal/lib/hdb/hdb.c b/source4/heimdal/lib/hdb/hdb.c index 5dc5a0957e0..4c8df930b0c 100644 --- a/source4/heimdal/lib/hdb/hdb.c +++ b/source4/heimdal/lib/hdb/hdb.c @@ -93,11 +93,12 @@ static struct hdb_method dbmetod = #endif -krb5_error_code -hdb_next_enctype2key(krb5_context context, +static krb5_error_code +_hdb_next_enctype2key(krb5_context context, const hdb_entry *e, krb5_enctype enctype, - Key **key) + Key **key, + bool require_key) { Key *k; @@ -105,6 +106,10 @@ hdb_next_enctype2key(krb5_context context, k < e->keys.val + e->keys.len; k++) { + if (require_key && k->key.keyvalue.length == 0) { + continue; + } + if(k->key.keytype == enctype){ *key = k; return 0; @@ -116,6 +121,16 @@ hdb_next_enctype2key(krb5_context context, return KRB5_PROG_ETYPE_NOSUPP; /* XXX */ } + +krb5_error_code +hdb_next_enctype2key(krb5_context context, + const hdb_entry *e, + krb5_enctype enctype, + Key **key) +{ + return _hdb_next_enctype2key(context, e, enctype, key, true); +} + krb5_error_code hdb_enctype2key(krb5_context context, hdb_entry *e, @@ -126,6 +141,15 @@ hdb_enctype2key(krb5_context context, return hdb_next_enctype2key(context, e, enctype, key); } +krb5_error_code +hdb_enctype_supported(krb5_context context, + hdb_entry *e, + krb5_enctype enctype) +{ + Key *key = NULL; + return _hdb_next_enctype2key(context, e, enctype, &key, false); +} + void hdb_free_key(Key *key) { |