summaryrefslogtreecommitdiff
path: root/source4/heimdal/lib/hdb/hdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/heimdal/lib/hdb/hdb.c')
-rw-r--r--source4/heimdal/lib/hdb/hdb.c30
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)
{