[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Sat Oct 24 05:51:46 MDT 2009
The branch, master has been updated
via a07eb08... s4:dcesrv_samr: always use mem_ctx as initial parent for samr_*_state
via 4ab83fb... s4:loadparm: don't leak the names of all shares in each lp_service() call
via 69e96f0... s4:dsdb/partition_init: don't leak a talloc_new() in case we have no data yet
via dc8e681... libcli/auth: initialize creds in netlogon_creds_client_init_session_key()
via fab9aff... s4:gensec/schannel: remove unused talloc_reference() in schannel_update()
via f2da9c8... libcli/auth: fix memory leak in schannel_creds_server_step_check_ldb()
via 5ae1d70... libcli/auth: don't leak the ldb_msg in schannel_store_session_key_ldb()
from 3054fe4... Fix bug 6802 - A created folder does not properly inherit permissions from parent.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit a07eb08870823fa443911d3b857724bde1e3021b
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Oct 23 17:30:47 2009 +0200
s4:dcesrv_samr: always use mem_ctx as initial parent for samr_*_state
We always steal the state to the policy handle on success,
but untill then keep it on the short term context.
metze
commit 4ab83fb1b7d2929c6ae454f3f073d4baf3510ca3
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Oct 23 15:12:01 2009 +0200
s4:loadparm: don't leak the names of all shares in each lp_service() call
metze
commit 69e96f08f1def1c28abe928ccbb0717566e49c8c
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Oct 23 15:11:08 2009 +0200
s4:dsdb/partition_init: don't leak a talloc_new() in case we have no data yet
metze
commit dc8e681755242b21bfb0e2d0cade633542ba7c81
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Oct 23 17:26:58 2009 +0200
libcli/auth: initialize creds in netlogon_creds_client_init_session_key()
metze
commit fab9aff6a20b7dcb5a570fd2a103b5e5da6fea93
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Oct 23 17:25:19 2009 +0200
s4:gensec/schannel: remove unused talloc_reference() in schannel_update()
We never expose creds to the caller in schannel_update().
metze
commit f2da9c8c1a2f7a4b805f43fd643f877c9274799a
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Oct 23 17:23:56 2009 +0200
libcli/auth: fix memory leak in schannel_creds_server_step_check_ldb()
metze
commit 5ae1d700ebf4b6bb63128f50c01ce4365b4e8d94
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Oct 23 15:10:20 2009 +0200
libcli/auth: don't leak the ldb_msg in schannel_store_session_key_ldb()
metze
-----------------------------------------------------------------------
Summary of changes:
libcli/auth/credentials.c | 5 +-
libcli/auth/schannel_state_ldb.c | 63 ++++++++++++++---------
source4/auth/gensec/schannel.c | 2 +-
source4/dsdb/samdb/ldb_modules/partition_init.c | 7 ++-
source4/param/loadparm.c | 5 ++-
source4/rpc_server/samr/dcesrv_samr.c | 14 +++---
6 files changed, 58 insertions(+), 38 deletions(-)
Changeset truncated at 500 lines:
diff --git a/libcli/auth/credentials.c b/libcli/auth/credentials.c
index 87d1866..667a2fa 100644
--- a/libcli/auth/credentials.c
+++ b/libcli/auth/credentials.c
@@ -248,8 +248,9 @@ struct netlogon_creds_CredentialState *netlogon_creds_client_init(TALLOC_CTX *me
struct netlogon_creds_CredentialState *netlogon_creds_client_init_session_key(TALLOC_CTX *mem_ctx,
const uint8_t session_key[16])
{
- struct netlogon_creds_CredentialState *creds = talloc(mem_ctx, struct netlogon_creds_CredentialState);
-
+ struct netlogon_creds_CredentialState *creds;
+
+ creds = talloc_zero(mem_ctx, struct netlogon_creds_CredentialState);
if (!creds) {
return NULL;
}
diff --git a/libcli/auth/schannel_state_ldb.c b/libcli/auth/schannel_state_ldb.c
index 62873a4..ba3d96f 100644
--- a/libcli/auth/schannel_state_ldb.c
+++ b/libcli/auth/schannel_state_ldb.c
@@ -95,7 +95,7 @@ NTSTATUS schannel_store_session_key_ldb(struct ldb_context *ldb,
return NT_STATUS_NO_MEMORY;
}
- msg = ldb_msg_new(ldb);
+ msg = ldb_msg_new(mem_ctx);
if (msg == NULL) {
return NT_STATUS_NO_MEMORY;
}
@@ -270,10 +270,21 @@ NTSTATUS schannel_creds_server_step_check_ldb(struct ldb_context *ldb,
struct netr_Authenticator *return_authenticator,
struct netlogon_creds_CredentialState **creds_out)
{
- struct netlogon_creds_CredentialState *creds;
+ struct netlogon_creds_CredentialState *creds = NULL;
NTSTATUS nt_status;
int ret;
+ /* If we are flaged that schannel is required for a call, and
+ * it is not in use, then make this an error */
+
+ /* It would be good to make this mandetory once schannel is
+ * negoiated, but this is not what windows does */
+ if (schannel_required_for_call && !schannel_in_use) {
+ DEBUG(0,("schannel_creds_server_step_check: client %s not using schannel for netlogon, despite negotiating it\n",
+ creds->computer_name ));
+ return NT_STATUS_ACCESS_DENIED;
+ }
+
ret = ldb_transaction_start(ldb);
if (ret != 0) {
return NT_STATUS_INTERNAL_DB_CORRUPTION;
@@ -285,37 +296,39 @@ NTSTATUS schannel_creds_server_step_check_ldb(struct ldb_context *ldb,
nt_status = schannel_fetch_session_key_ldb(ldb, ldb, computer_name,
&creds);
+ if (!NT_STATUS_IS_OK(nt_status)) {
+ ldb_transaction_cancel(ldb);
+ return nt_status;
+ }
- /* If we are flaged that schannel is required for a call, and
- * it is not in use, then make this an error */
-
- /* It would be good to make this mandetory once schannel is
- * negoiated, bu this is not what windows does */
- if (schannel_required_for_call && !schannel_in_use) {
- DEBUG(0,("schannel_creds_server_step_check: client %s not using schannel for netlogon, despite negotiating it\n",
- creds->computer_name ));
+ nt_status = netlogon_creds_server_step_check(creds,
+ received_authenticator,
+ return_authenticator);
+ if (!NT_STATUS_IS_OK(nt_status)) {
ldb_transaction_cancel(ldb);
- return NT_STATUS_ACCESS_DENIED;
+ talloc_free(creds);
+ return nt_status;
}
- if (NT_STATUS_IS_OK(nt_status)) {
- nt_status = netlogon_creds_server_step_check(creds,
- received_authenticator,
- return_authenticator);
+ nt_status = schannel_store_session_key_ldb(ldb, mem_ctx, creds);
+ if (!NT_STATUS_IS_OK(nt_status)) {
+ ldb_transaction_cancel(ldb);
+ talloc_free(creds);
+ return nt_status;
}
- if (NT_STATUS_IS_OK(nt_status)) {
- nt_status = schannel_store_session_key_ldb(ldb, mem_ctx, creds);
+ ldb_transaction_commit(ldb);
+ if (ret != 0) {
+ talloc_free(creds);
+ return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- if (NT_STATUS_IS_OK(nt_status)) {
- ldb_transaction_commit(ldb);
- if (creds_out) {
- *creds_out = creds;
- talloc_steal(mem_ctx, creds);
- }
+ if (creds_out) {
+ *creds_out = creds;
+ talloc_steal(mem_ctx, creds);
} else {
- ldb_transaction_cancel(ldb);
+ talloc_free(creds);
}
- return nt_status;
+
+ return NT_STATUS_OK;
}
diff --git a/source4/auth/gensec/schannel.c b/source4/auth/gensec/schannel.c
index 58cbb6a..7b8bdec 100644
--- a/source4/auth/gensec/schannel.c
+++ b/source4/auth/gensec/schannel.c
@@ -156,7 +156,7 @@ static NTSTATUS schannel_update(struct gensec_security *gensec_security, TALLOC_
return status;
}
- state->creds = talloc_reference(state, creds);
+ state->creds = talloc_steal(state, creds);
bind_schannel_ack.MessageType = NL_NEGOTIATE_RESPONSE;
bind_schannel_ack.Flags = 0;
diff --git a/source4/dsdb/samdb/ldb_modules/partition_init.c b/source4/dsdb/samdb/ldb_modules/partition_init.c
index cc778d6..28eab9b 100644
--- a/source4/dsdb/samdb/ldb_modules/partition_init.c
+++ b/source4/dsdb/samdb/ldb_modules/partition_init.c
@@ -353,22 +353,25 @@ static int add_partition_to_data(struct ldb_context *ldb, struct partition_priva
int partition_reload_if_required(struct ldb_module *module,
struct partition_private_data *data)
-
{
uint64_t seq;
int ret, i;
struct ldb_context *ldb = ldb_module_get_ctx(module);
struct ldb_message *msg;
struct ldb_message_element *partition_attributes;
- TALLOC_CTX *mem_ctx = talloc_new(data);
+ TALLOC_CTX *mem_ctx;
+
if (!data) {
/* Not initilised yet */
return LDB_SUCCESS;
}
+
+ mem_ctx = talloc_new(data);
if (!mem_ctx) {
ldb_oom(ldb);
return LDB_ERR_OPERATIONS_ERROR;
}
+
ret = partition_primary_sequence_number(module, mem_ctx, LDB_SEQ_HIGHEST_SEQ, &seq);
if (ret != LDB_SUCCESS) {
talloc_free(mem_ctx);
diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c
index 882de13..669e0d7 100644
--- a/source4/param/loadparm.c
+++ b/source4/param/loadparm.c
@@ -2609,8 +2609,11 @@ struct loadparm_service *lp_service(struct loadparm_context *lp_ctx,
serviceName = standard_sub_basic(
lp_ctx->services[iService],
lp_ctx->services[iService]->szService);
- if (strequal(serviceName, service_name))
+ if (strequal(serviceName, service_name)) {
+ talloc_free(serviceName);
return lp_ctx->services[iService];
+ }
+ talloc_free(serviceName);
}
}
diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c
index 08f1471..7be1cf9 100644
--- a/source4/rpc_server/samr/dcesrv_samr.c
+++ b/source4/rpc_server/samr/dcesrv_samr.c
@@ -165,7 +165,7 @@ static NTSTATUS dcesrv_samr_Connect(struct dcesrv_call_state *dce_call, TALLOC_C
ZERO_STRUCTP(r->out.connect_handle);
- c_state = talloc(dce_call->conn, struct samr_connect_state);
+ c_state = talloc(mem_ctx, struct samr_connect_state);
if (!c_state) {
return NT_STATUS_NO_MEMORY;
}
@@ -398,7 +398,7 @@ static NTSTATUS dcesrv_samr_OpenDomain(struct dcesrv_call_state *dce_call, TALLO
return NT_STATUS_INVALID_PARAMETER;
}
- d_state = talloc(c_state, struct samr_domain_state);
+ d_state = talloc(mem_ctx, struct samr_domain_state);
if (!d_state) {
return NT_STATUS_NO_MEMORY;
}
@@ -1040,7 +1040,7 @@ static NTSTATUS dcesrv_samr_CreateDomainGroup(struct dcesrv_call_state *dce_call
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- a_state = talloc(d_state, struct samr_account_state);
+ a_state = talloc(mem_ctx, struct samr_account_state);
if (!a_state) {
return NT_STATUS_NO_MEMORY;
}
@@ -1333,7 +1333,7 @@ static NTSTATUS dcesrv_samr_CreateUser2(struct dcesrv_call_state *dce_call, TALL
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- a_state = talloc(d_state, struct samr_account_state);
+ a_state = talloc(mem_ctx, struct samr_account_state);
if (!a_state) {
ldb_transaction_cancel(d_state->sam_ctx);
return NT_STATUS_NO_MEMORY;
@@ -1614,7 +1614,7 @@ static NTSTATUS dcesrv_samr_CreateDomAlias(struct dcesrv_call_state *dce_call, T
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- a_state = talloc(d_state, struct samr_account_state);
+ a_state = talloc(mem_ctx, struct samr_account_state);
if (!a_state) {
return NT_STATUS_NO_MEMORY;
}
@@ -2043,7 +2043,7 @@ static NTSTATUS dcesrv_samr_OpenGroup(struct dcesrv_call_state *dce_call, TALLOC
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- a_state = talloc(d_state, struct samr_account_state);
+ a_state = talloc(mem_ctx, struct samr_account_state);
if (!a_state) {
return NT_STATUS_NO_MEMORY;
}
@@ -2520,7 +2520,7 @@ static NTSTATUS dcesrv_samr_OpenAlias(struct dcesrv_call_state *dce_call, TALLOC
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- a_state = talloc(d_state, struct samr_account_state);
+ a_state = talloc(mem_ctx, struct samr_account_state);
if (!a_state) {
return NT_STATUS_NO_MEMORY;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list