s4:kdc: Avoid copying data if not needed
authorJoseph Sutton <josephsutton@catalyst.net.nz>
Thu, 16 Mar 2023 20:16:17 +0000 (09:16 +1300)
committerStefan Metzmacher <metze@samba.org>
Fri, 9 Feb 2024 17:31:21 +0000 (18:31 +0100)
krb5_pac_add_buffer() makes its own copy of the data we pass in. We
don't need to make yet another copy.

Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
(cherry picked from commit fa901e7346d36ae64a7ceab5dcf76bc210a67c93)

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15476

source4/kdc/pac-glue.c

index 2b9553588b3e0881f0986510fe7383092a590846..00c803fbe2717b8f19433cbc316ef059a784a760 100644 (file)
@@ -1973,12 +1973,9 @@ krb5_error_code samba_kdc_update_pac(TALLOC_CTX *mem_ctx,
                }
 
                if (type_blob.length != 0) {
-                       code = smb_krb5_copy_data_contents(&type_data,
-                                                          type_blob.data,
-                                                          type_blob.length);
-                       if (code != 0) {
-                               goto done;
-                       }
+                       type_data = smb_krb5_data_from_blob(type_blob);
+                       code = krb5_pac_add_buffer(context, new_pac,
+                                                  type, &type_data);
                } else {
                        code = krb5_pac_get_buffer(context,
                                                   old_pac,
@@ -1987,17 +1984,17 @@ krb5_error_code samba_kdc_update_pac(TALLOC_CTX *mem_ctx,
                        if (code != 0) {
                                goto done;
                        }
+                       /*
+                        * Passing a NULL pointer into krb5_pac_add_buffer() is
+                        * not allowed, so pass null_data instead if needed.
+                        */
+                       code = krb5_pac_add_buffer(context,
+                                                  new_pac,
+                                                  type,
+                                                  (type_data.data != NULL) ? &type_data : &null_data);
+                       smb_krb5_free_data_contents(context, &type_data);
                }
 
-               /*
-                * Passing a NULL pointer into krb5_pac_add_buffer() is
-                * not allowed, so pass null_data instead if needed.
-                */
-               code = krb5_pac_add_buffer(context,
-                                          new_pac,
-                                          type,
-                                          (type_data.data != NULL) ? &type_data : &null_data);
-               smb_krb5_free_data_contents(context, &type_data);
                if (code != 0) {
                        goto done;
                }