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)
committerJule Anger <janger@samba.org>
Fri, 22 Sep 2023 20:11:08 +0000 (20:11 +0000)
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 621999faa2935589bc8a541c33605a1ae0c10c8b..b792fbbf5aa2d54cad43b4a3fd96add6b4fcc636 100644 (file)
@@ -1939,12 +1939,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,
@@ -1953,17 +1950,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;
                }