diff options
author | Volker Lendecke <vl@samba.org> | 2008-06-20 16:22:49 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2008-06-21 10:34:34 +0200 |
commit | 829b1ad4697f2f1ea008377d591456722dccd025 (patch) | |
tree | 414a137c55120b9d46e7ccaf2e6b12ab2c52eef1 | |
parent | b39852f51313059899630ba63509fee904ba3613 (diff) | |
download | samba-829b1ad4697f2f1ea008377d591456722dccd025.tar.gz |
Make pipes_struct its own talloc ctx
-rw-r--r-- | source/include/ntdomain.h | 3 | ||||
-rw-r--r-- | source/rpc_server/srv_netlog_nt.c | 29 | ||||
-rw-r--r-- | source/rpc_server/srv_pipe.c | 2 | ||||
-rw-r--r-- | source/rpc_server/srv_pipe_hnd.c | 25 |
4 files changed, 16 insertions, 43 deletions
diff --git a/source/include/ntdomain.h b/source/include/ntdomain.h index dc637068b6e..46842c8b97d 100644 --- a/source/include/ntdomain.h +++ b/source/include/ntdomain.h @@ -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. */ diff --git a/source/rpc_server/srv_netlog_nt.c b/source/rpc_server/srv_netlog_nt.c index 863c62acc45..a0812283d65 100644 --- a/source/rpc_server/srv_netlog_nt.c +++ b/source/rpc_server/srv_netlog_nt.c @@ -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(); } diff --git a/source/rpc_server/srv_pipe.c b/source/rpc_server/srv_pipe.c index dcc4cd448f6..0987a420d59 100644 --- a/source/rpc_server/srv_pipe.c +++ b/source/rpc_server/srv_pipe.c @@ -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; diff --git a/source/rpc_server/srv_pipe_hnd.c b/source/rpc_server/srv_pipe_hnd.c index 2e03d01c930..22903aacba3 100644 --- a/source/rpc_server/srv_pipe_hnd.c +++ b/source/rpc_server/srv_pipe_hnd.c @@ -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; } |