]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:kdc: split out samba_kdc_fill_trust_keys() helper
authorStefan Metzmacher <metze@samba.org>
Fri, 15 Mar 2024 18:19:20 +0000 (19:19 +0100)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 22 May 2024 03:04:34 +0000 (03:04 +0000)
Let samba_kdc_trust_message2entry() also fill in the salt used
by the key. This is not strictly needed, but it's better to
be consistent.

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

index 1c00527d4818bed41d73720b147bd49cfef8223f..2ab3155dffbba35c32676b0cbd72c00937e11312 100644 (file)
@@ -2179,6 +2179,25 @@ static krb5_error_code samba_kdc_trust_message2entry(krb5_context context,
                }
 
                if (supported_enctypes & ENC_HMAC_SHA1_96_AES256) {
+                       key.salt = calloc(1, sizeof(*key.salt));
+                       if (key.salt == NULL) {
+                               smb_krb5_free_data_contents(context, &salt);
+                               ret = ENOMEM;
+                               goto out;
+                       }
+
+                       key.salt->type = KRB5_PW_SALT;
+
+                       ret = smb_krb5_copy_data_contents(&key.salt->salt,
+                                                         salt.data,
+                                                         salt.length);
+                       if (ret) {
+                               *key.salt = (struct sdb_salt) {};
+                               sdb_key_free(&key);
+                               smb_krb5_free_data_contents(context, &salt);
+                               goto out;
+                       }
+
                        ret = smb_krb5_create_key_from_string(context,
                                                              salt_principal,
                                                              &salt,
@@ -2186,6 +2205,8 @@ static krb5_error_code samba_kdc_trust_message2entry(krb5_context context,
                                                              ENCTYPE_AES256_CTS_HMAC_SHA1_96,
                                                              &key.key);
                        if (ret != 0) {
+                               ZERO_STRUCT(key.key);
+                               sdb_key_free(&key);
                                smb_krb5_free_data_contents(context, &salt);
                                goto out;
                        }
@@ -2195,6 +2216,25 @@ static krb5_error_code samba_kdc_trust_message2entry(krb5_context context,
                }
 
                if (supported_enctypes & ENC_HMAC_SHA1_96_AES128) {
+                       key.salt = calloc(1, sizeof(*key.salt));
+                       if (key.salt == NULL) {
+                               smb_krb5_free_data_contents(context, &salt);
+                               ret = ENOMEM;
+                               goto out;
+                       }
+
+                       key.salt->type = KRB5_PW_SALT;
+
+                       ret = smb_krb5_copy_data_contents(&key.salt->salt,
+                                                         salt.data,
+                                                         salt.length);
+                       if (ret) {
+                               *key.salt = (struct sdb_salt) {};
+                               sdb_key_free(&key);
+                               smb_krb5_free_data_contents(context, &salt);
+                               goto out;
+                       }
+
                        ret = smb_krb5_create_key_from_string(context,
                                                              salt_principal,
                                                              &salt,
@@ -2202,6 +2242,8 @@ static krb5_error_code samba_kdc_trust_message2entry(krb5_context context,
                                                              ENCTYPE_AES128_CTS_HMAC_SHA1_96,
                                                              &key.key);
                        if (ret != 0) {
+                               ZERO_STRUCT(key.key);
+                               sdb_key_free(&key);
                                smb_krb5_free_data_contents(context, &salt);
                                goto out;
                        }