[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Thu Mar 28 07:53:01 MDT 2013
The branch, master has been updated
via adbe6cb libcli/auth: avoid using transactions a chainlock is enough
from 40d783c Call smb_panic when we try to exit the server uncleanly. This gives us the normal traceback and memory dump, but also runs the normal panic action.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit adbe6cba005a2060b0f641e91b500574f4637a36
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Mar 27 08:43:18 2013 +0100
libcli/auth: avoid using transactions a chainlock is enough
We're just writting a single record into a CLEAR_IF_FIRST|TDB_NOSYNC
tdb.
We just need to make sure we lock the record between reading and writting.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
Autobuild-User(master): Volker Lendecke <vl at samba.org>
Autobuild-Date(master): Thu Mar 28 14:52:14 CET 2013 on sn-devel-104
-----------------------------------------------------------------------
Summary of changes:
libcli/auth/schannel_state_tdb.c | 36 ++++++++++++++++++++++++++----------
1 files changed, 26 insertions(+), 10 deletions(-)
Changeset truncated at 500 lines:
diff --git a/libcli/auth/schannel_state_tdb.c b/libcli/auth/schannel_state_tdb.c
index bc91104..eecd00e 100644
--- a/libcli/auth/schannel_state_tdb.c
+++ b/libcli/auth/schannel_state_tdb.c
@@ -285,19 +285,41 @@ NTSTATUS schannel_check_creds_state(TALLOC_CTX *mem_ctx,
struct netlogon_creds_CredentialState *creds;
NTSTATUS status;
int ret;
+ char *name_upper = NULL;
+ char *keystr = NULL;
+ TDB_DATA key;
+
+ if (creds_out != NULL) {
+ *creds_out = NULL;
+ }
tmpctx = talloc_named(mem_ctx, 0, "schannel_check_creds_state");
if (!tmpctx) {
return NT_STATUS_NO_MEMORY;
}
+ name_upper = strupper_talloc(tmpctx, computer_name);
+ if (!name_upper) {
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
+ }
+
+ keystr = talloc_asprintf(tmpctx, "%s/%s",
+ SECRETS_SCHANNEL_STATE, name_upper);
+ if (!keystr) {
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
+ }
+
+ key = string_term_tdb_data(keystr);
+
tdb_sc = open_schannel_session_store(tmpctx, lp_ctx);
if (!tdb_sc) {
status = NT_STATUS_ACCESS_DENIED;
goto done;
}
- ret = tdb_transaction_start(tdb_sc->tdb);
+ ret = tdb_chainlock(tdb_sc->tdb, key);
if (ret != 0) {
status = NT_STATUS_INTERNAL_DB_CORRUPTION;
goto done;
@@ -310,7 +332,7 @@ NTSTATUS schannel_check_creds_state(TALLOC_CTX *mem_ctx,
status = schannel_fetch_session_key_tdb(tdb_sc, tmpctx,
computer_name, &creds);
if (!NT_STATUS_IS_OK(status)) {
- tdb_transaction_cancel(tdb_sc->tdb);
+ tdb_chainunlock(tdb_sc->tdb, key);
goto done;
}
@@ -318,19 +340,13 @@ NTSTATUS schannel_check_creds_state(TALLOC_CTX *mem_ctx,
received_authenticator,
return_authenticator);
if (!NT_STATUS_IS_OK(status)) {
- tdb_transaction_cancel(tdb_sc->tdb);
+ tdb_chainunlock(tdb_sc->tdb, key);
goto done;
}
status = schannel_store_session_key_tdb(tdb_sc, tmpctx, creds);
+ tdb_chainunlock(tdb_sc->tdb, key);
if (!NT_STATUS_IS_OK(status)) {
- tdb_transaction_cancel(tdb_sc->tdb);
- goto done;
- }
-
- ret = tdb_transaction_commit(tdb_sc->tdb);
- if (ret != 0) {
- status = NT_STATUS_INTERNAL_DB_CORRUPTION;
goto done;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list