Make pipes_struct its own talloc ctx
authorVolker Lendecke <vl@samba.org>
Fri, 20 Jun 2008 14:22:49 +0000 (16:22 +0200)
committerVolker Lendecke <vl@samba.org>
Sat, 21 Jun 2008 08:34:34 +0000 (10:34 +0200)
source/include/ntdomain.h
source/rpc_server/srv_netlog_nt.c
source/rpc_server/srv_pipe.c
source/rpc_server/srv_pipe_hnd.c

index dc637068b6e7e2517fd6c2925f0b345aa0cf44d5..46842c8b97df41a4f78b18622f89f61c069e7f96 100644 (file)
@@ -225,9 +225,6 @@ typedef struct pipes_struct {
        RPC_HDR hdr; /* Incoming RPC header. */
        RPC_HDR_REQ hdr_req; /* Incoming request header. */
 
-       /* This context is used for pipe state storage and is freed when the pipe is closed. */
-       TALLOC_CTX *pipe_state_mem_ctx;
-
        struct pipe_auth_data auth;
 
        struct dcinfo *dc; /* Keeps the creds data from netlogon. */
index 863c62acc45b3f61962160ca0f5fbc903f1c7dc3..a0812283d65f7923b0f21d3bf65cce4b619da068 100644 (file)
@@ -377,7 +377,7 @@ NTSTATUS _netr_ServerReqChallenge(pipes_struct *p,
                                  struct netr_ServerReqChallenge *r)
 {
        if (!p->dc) {
-               p->dc = TALLOC_ZERO_P(p->pipe_state_mem_ctx, struct dcinfo);
+               p->dc = TALLOC_ZERO_P(p, struct dcinfo);
                if (!p->dc) {
                        return NT_STATUS_NO_MEMORY;
                }
@@ -582,9 +582,8 @@ NTSTATUS _netr_ServerPasswordSet(pipes_struct *p,
        if (!p->dc) {
                /* Restore the saved state of the netlogon creds. */
                become_root();
-               ret = secrets_restore_schannel_session_info(p->pipe_state_mem_ctx,
-                                                       remote_machine,
-                                                       &p->dc);
+               ret = secrets_restore_schannel_session_info(p, remote_machine,
+                                                           &p->dc);
                unbecome_root();
                if (!ret) {
                        return NT_STATUS_INVALID_HANDLE;
@@ -613,9 +612,7 @@ NTSTATUS _netr_ServerPasswordSet(pipes_struct *p,
        }
 
        become_root();
-       secrets_store_schannel_session_info(p->pipe_state_mem_ctx,
-                                               remote_machine,
-                                               p->dc);
+       secrets_store_schannel_session_info(p, remote_machine, p->dc);
        ret = pdb_getsampwnam(sampass, p->dc->mach_acct);
        unbecome_root();
 
@@ -716,9 +713,8 @@ NTSTATUS _netr_LogonSamLogoff(pipes_struct *p,
                bool ret;
 
                become_root();
-               ret = secrets_restore_schannel_session_info(p->pipe_state_mem_ctx,
-                                                           r->in.computer_name,
-                                                           &p->dc);
+               ret = secrets_restore_schannel_session_info(
+                       p, r->in.computer_name, &p->dc);
                unbecome_root();
                if (!ret) {
                        return NT_STATUS_INVALID_HANDLE;
@@ -739,9 +735,7 @@ NTSTATUS _netr_LogonSamLogoff(pipes_struct *p,
 
        /* We must store the creds state after an update. */
        become_root();
-       secrets_store_schannel_session_info(p->pipe_state_mem_ctx,
-                                           r->in.computer_name,
-                                           p->dc);
+       secrets_store_schannel_session_info(p, r->in.computer_name, p->dc);
        unbecome_root();
 
        return NT_STATUS_OK;
@@ -814,9 +808,8 @@ NTSTATUS _netr_LogonSamLogon(pipes_struct *p,
                        bool ret;
 
                        become_root();
-                       ret = secrets_restore_schannel_session_info(p->pipe_state_mem_ctx,
-                                       remote_machine,
-                                       &p->dc);
+                       ret = secrets_restore_schannel_session_info(
+                               p, remote_machine, &p->dc);
                        unbecome_root();
                        if (!ret) {
                                return NT_STATUS_INVALID_HANDLE;
@@ -837,9 +830,7 @@ NTSTATUS _netr_LogonSamLogon(pipes_struct *p,
 
                /* We must store the creds state after an update. */
                become_root();
-               secrets_store_schannel_session_info(p->pipe_state_mem_ctx,
-                                       remote_machine,
-                                       p->dc);
+               secrets_store_schannel_session_info(p, remote_machine, p->dc);
                unbecome_root();
        }
 
index dcc4cd448f6518e50e2dd5ae605f6a9609f8d8f5..0987a420d593639d9bfe40e0940dfc652d7d56f5 100644 (file)
@@ -1343,7 +1343,7 @@ static bool pipe_schannel_auth_bind(pipes_struct *p, prs_struct *rpc_in_p,
                return False;
        }
 
-       p->auth.a_u.schannel_auth = TALLOC_P(p->pipe_state_mem_ctx, struct schannel_auth_struct);
+       p->auth.a_u.schannel_auth = talloc(p, struct schannel_auth_struct);
        if (!p->auth.a_u.schannel_auth) {
                TALLOC_FREE(pdcinfo);
                return False;
index 2e03d01c93076610c854e9cd842e2e44c810e24f..22903aacba3526e441827545a7bddb0c7b281fb0 100644 (file)
@@ -279,33 +279,23 @@ static void *make_internal_rpc_pipe_p(const char *pipe_name,
                return NULL;
        }
 
-       p = SMB_MALLOC_P(pipes_struct);
+       p = TALLOC_ZERO_P(NULL, pipes_struct);
 
        if (!p) {
                DEBUG(0,("ERROR! no memory for pipes_struct!\n"));
                return NULL;
        }
 
-       ZERO_STRUCTP(p);
-
        if ((p->mem_ctx = talloc_init("pipe %s %p", pipe_name, p)) == NULL) {
                DEBUG(0,("open_rpc_pipe_p: talloc_init failed.\n"));
-               SAFE_FREE(p);
-               return NULL;
-       }
-
-       if ((p->pipe_state_mem_ctx = talloc_init("pipe_state %s %p", pipe_name, p)) == NULL) {
-               DEBUG(0,("open_rpc_pipe_p: talloc_init failed.\n"));
-               talloc_destroy(p->mem_ctx);
-               SAFE_FREE(p);
+               TALLOC_FREE(p);
                return NULL;
        }
 
        if (!init_pipe_handle_list(p, pipe_name)) {
                DEBUG(0,("open_rpc_pipe_p: init_pipe_handles failed.\n"));
                talloc_destroy(p->mem_ctx);
-               talloc_destroy(p->pipe_state_mem_ctx);
-               SAFE_FREE(p);
+               TALLOC_FREE(p);
                return NULL;
        }
 
@@ -319,9 +309,8 @@ static void *make_internal_rpc_pipe_p(const char *pipe_name,
        if(!prs_init(&p->in_data.data, RPC_MAX_PDU_FRAG_LEN, p->mem_ctx, MARSHALL)) {
                DEBUG(0,("open_rpc_pipe_p: malloc fail for in_data struct.\n"));
                talloc_destroy(p->mem_ctx);
-               talloc_destroy(p->pipe_state_mem_ctx);
                close_policy_by_pipe(p);
-               SAFE_FREE(p);
+               TALLOC_FREE(p);
                return NULL;
        }
 
@@ -1214,10 +1203,6 @@ static bool close_internal_rpc_pipe_hnd(void *np_conn)
                talloc_destroy(p->mem_ctx);
        }
 
-       if (p->pipe_state_mem_ctx) {
-               talloc_destroy(p->pipe_state_mem_ctx);
-       }
-
        free_pipe_rpc_context( p->contexts );
 
        /* Free the handles database. */
@@ -1231,7 +1216,7 @@ static bool close_internal_rpc_pipe_hnd(void *np_conn)
 
        ZERO_STRUCTP(p);
 
-       SAFE_FREE(p);
+       TALLOC_FREE(p);
        
        return True;
 }