]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:kdc: let sdb_entry have a typed samba_kdc_entry pointer
authorStefan Metzmacher <metze@samba.org>
Tue, 22 Mar 2022 15:35:58 +0000 (16:35 +0100)
committerStefan Metzmacher <metze@samba.org>
Thu, 24 Mar 2022 09:19:33 +0000 (09:19 +0000)
Both layers are owned by us so there's no need for an void
pointer.

This simplifies the code a lot and allows further cleanups.
Eventually we can remove sdb_entry_ex and only use sdb_entry,
as Heimdal also removed hdb_entry_ex.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/kdc/db-glue.c
source4/kdc/sdb.h
source4/kdc/sdb_to_hdb.c
source4/kdc/sdb_to_kdb.c

index b109c61e2d2e6bc59e58273fbc72bed0a07f5717..616c39c9c308ccce8931968a62ccfc36118eba6e 100644 (file)
@@ -953,7 +953,7 @@ static krb5_error_code samba_kdc_message2entry(krb5_context context,
 
        talloc_set_destructor(p, samba_kdc_entry_destructor);
 
-       entry_ex->ctx = p;
+       entry_ex->entry.skdc_entry = p;
 
        userAccountControl = ldb_msg_find_attr_as_uint(msg, "userAccountControl", 0);
 
@@ -1341,7 +1341,7 @@ out:
                sdb_free_entry(entry_ex);
                ZERO_STRUCTP(entry_ex);
        } else {
-               talloc_steal(kdc_db_ctx, entry_ex->ctx);
+               talloc_steal(kdc_db_ctx, p);
        }
 
        return ret;
@@ -1481,7 +1481,7 @@ static krb5_error_code samba_kdc_trust_message2entry(krb5_context context,
        /* make sure we do not have bogus data in there */
        memset(&entry_ex->entry, 0, sizeof(struct sdb_entry));
 
-       entry_ex->ctx = p;
+       entry_ex->entry.skdc_entry = p;
 
        /* use 'whenCreated' */
        entry_ex->entry.created_by.time = ldb_msg_find_krb5time_ldap_time(msg, "whenCreated", 0);
@@ -1765,7 +1765,7 @@ out:
                /* This doesn't free ent itself, that is for the eventual caller to do */
                sdb_free_entry(entry_ex);
        } else {
-               talloc_steal(kdc_db_ctx, entry_ex->ctx);
+               talloc_steal(kdc_db_ctx, p);
        }
 
        return ret;
index 5d49769a95bf740be7a21133a639726fa2220e73..87459b23041b3c42a712f37ced94d8ec6b26856d 100644 (file)
@@ -80,6 +80,7 @@ struct SDBFlags {
 };
 
 struct sdb_entry {
+       struct samba_kdc_entry *skdc_entry;
        krb5_principal principal;
        unsigned int kvno;
        struct sdb_keys keys;
@@ -94,7 +95,6 @@ struct sdb_entry {
 };
 
 struct sdb_entry_ex {
-       void *ctx;
        struct sdb_entry entry;
 };
 
index 8eb4d3afc826fed8da119aaed71f225d2afd0914..800dace005e8d94224e8bbced928a1bfd42886d1 100644 (file)
@@ -169,6 +169,7 @@ static int sdb_entry_to_hdb_entry(krb5_context context,
                                  const struct sdb_entry *s,
                                  hdb_entry *h)
 {
+       struct samba_kdc_entry *ske = s->skdc_entry;
        unsigned int i;
        int rc;
 
@@ -292,6 +293,7 @@ static int sdb_entry_to_hdb_entry(krb5_context context,
                }
        }
 
+       h->context = ske;
        return 0;
 error:
        free_hdb_entry(h);
@@ -302,20 +304,5 @@ int sdb_entry_ex_to_hdb_entry_ex(krb5_context context,
                                 const struct sdb_entry_ex *s,
                                 hdb_entry *h)
 {
-       int ret;
-
-       ret = sdb_entry_to_hdb_entry(context, &s->entry, h);
-       if (ret != 0) {
-               return ret;
-       }
-
-       if (s->ctx != NULL) {
-               struct samba_kdc_entry *skdc_entry;
-
-               skdc_entry = talloc_get_type(s->ctx, struct samba_kdc_entry);
-
-               h->context = skdc_entry;
-       }
-
-       return 0;
+       return sdb_entry_to_hdb_entry(context, &s->entry, h);
 }
index 6631721b43badc06a6a3ce6609705447a1c6b6d6..a4a85537ac02640481f6dd9c29c641d6ea1169fe 100644 (file)
@@ -231,6 +231,7 @@ static int sdb_entry_ex_to_krb5_db_entry(krb5_context context,
                                         const struct sdb_entry *s,
                                         krb5_db_entry *k)
 {
+       struct samba_kdc_entry *ske = s->skdc_entry;
        krb5_error_code ret;
        int i;
 
@@ -309,6 +310,7 @@ static int sdb_entry_ex_to_krb5_db_entry(krb5_context context,
                }
        }
 
+       k->e_data = (void *)ske;
        return 0;
 }
 
@@ -316,20 +318,5 @@ int sdb_entry_ex_to_kdb_entry_ex(krb5_context context,
                                 const struct sdb_entry_ex *s,
                                 krb5_db_entry *k)
 {
-       int ret;
-
-       ret = sdb_entry_ex_to_krb5_db_entry(context, &s->entry, k);
-       if (ret != 0) {
-               return ret;
-       }
-
-       if (s->ctx != NULL) {
-               struct samba_kdc_entry *skdc_entry;
-
-               skdc_entry = talloc_get_type(s->ctx, struct samba_kdc_entry);
-
-               k->e_data       = (void *)skdc_entry;
-       }
-
-       return 0;
+       return sdb_entry_ex_to_krb5_db_entry(context, &s->entry, k);
 }