From: Stefan Metzmacher Date: Tue, 22 Mar 2022 15:35:58 +0000 (+0100) Subject: s4:kdc: let sdb_entry have a typed samba_kdc_entry pointer X-Git-Tag: tevent-0.12.0~326 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2323f9d2e23fd017884c68002fa376d27ac9074e;p=thirdparty%2Fsamba.git s4:kdc: let sdb_entry have a typed samba_kdc_entry pointer 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 Reviewed-by: Andrew Bartlett --- diff --git a/source4/kdc/db-glue.c b/source4/kdc/db-glue.c index b109c61e2d2..616c39c9c30 100644 --- a/source4/kdc/db-glue.c +++ b/source4/kdc/db-glue.c @@ -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; diff --git a/source4/kdc/sdb.h b/source4/kdc/sdb.h index 5d49769a95b..87459b23041 100644 --- a/source4/kdc/sdb.h +++ b/source4/kdc/sdb.h @@ -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; }; diff --git a/source4/kdc/sdb_to_hdb.c b/source4/kdc/sdb_to_hdb.c index 8eb4d3afc82..800dace005e 100644 --- a/source4/kdc/sdb_to_hdb.c +++ b/source4/kdc/sdb_to_hdb.c @@ -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); } diff --git a/source4/kdc/sdb_to_kdb.c b/source4/kdc/sdb_to_kdb.c index 6631721b43b..a4a85537ac0 100644 --- a/source4/kdc/sdb_to_kdb.c +++ b/source4/kdc/sdb_to_kdb.c @@ -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); }