librpc: Simplify struct dcesrv_handle
authorVolker Lendecke <vl@samba.org>
Wed, 27 Jan 2021 13:59:16 +0000 (14:59 +0100)
committerJeremy Allison <jra@samba.org>
Tue, 9 Mar 2021 22:36:28 +0000 (22:36 +0000)
This saves a tiny bit of memory: dom_sid_dup() allocates a full struct
dom_sid, although it might not have to. Save the additional talloc
object and the pointer, be more cache-friendly

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
librpc/rpc/dcesrv_core.h
librpc/rpc/dcesrv_handles.c

index 9f0e1b3a7a5203fbf4b710b8bef16ae8ddb31e53..6371552a56dd3d350e5ec7411a1de640227492ff 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "librpc/rpc/rpc_common.h"
 #include "librpc/ndr/libndr.h"
+#include "librpc/gen_ndr/security.h"
 
 /* modules can use the following to determine if the interface has changed
  * please increment the version number after each interface change
@@ -191,7 +192,7 @@ struct dcesrv_handle {
        struct dcesrv_handle *next, *prev;
        struct dcesrv_assoc_group *assoc_group;
        struct policy_handle wire_handle;
-       struct dom_sid *sid;
+       struct dom_sid sid;
        enum dcerpc_AuthLevel min_auth_level;
        const struct dcesrv_interface *iface;
        void *data;
index a87921ce740abbe16bd2d592c63b8442f3efd761..d50831bcf0af9bd6bed65178029b1bec8a5ef001 100644 (file)
@@ -61,11 +61,7 @@ struct dcesrv_handle *dcesrv_handle_create(struct dcesrv_call_state *call,
                return NULL;
        }
        h->data = NULL;
-       h->sid = dom_sid_dup(h, sid);
-       if (h->sid == NULL) {
-               talloc_free(h);
-               return NULL;
-       }
+       sid_copy(&h->sid, sid);
        h->min_auth_level = call->auth_state->auth_level;
        h->assoc_group = context->conn->assoc_group;
        h->iface = context->iface;
@@ -117,10 +113,10 @@ struct dcesrv_handle *dcesrv_handle_lookup(struct dcesrv_call_state *call,
                                         p->handle_type, handle_type));
                                return NULL;
                        }
-                       if (!dom_sid_equal(h->sid, sid)) {
+                       if (!dom_sid_equal(&h->sid, sid)) {
                                struct dom_sid_buf buf1, buf2;
                                DBG_ERR("Attempt to use invalid sid %s - %s\n",
-                                       dom_sid_str_buf(h->sid, &buf1),
+                                       dom_sid_str_buf(&h->sid, &buf1),
                                        dom_sid_str_buf(sid, &buf2));
                                return NULL;
                        }