[PATCH 5/9] libcli/auth: convert to dbwrap.

Rusty Russell rusty at rustcorp.com.au
Thu Apr 11 01:42:12 MDT 2013


Signed-off-by: Rusty Russell <rusty at rustcorp.com.au>
---
 libcli/auth/schannel_proto.h     |    4 +--
 libcli/auth/schannel_state_tdb.c |   70 ++++++++++++++++++--------------------
 libcli/auth/wscript_build        |    2 +-
 3 files changed, 37 insertions(+), 39 deletions(-)

diff --git a/libcli/auth/schannel_proto.h b/libcli/auth/schannel_proto.h
index 7ee4c1c..0414218 100644
--- a/libcli/auth/schannel_proto.h
+++ b/libcli/auth/schannel_proto.h
@@ -25,8 +25,8 @@
 
 struct schannel_state;
 
-struct tdb_wrap *open_schannel_session_store(TALLOC_CTX *mem_ctx,
-					     struct loadparm_context *lp_ctx);
+struct db_context *open_schannel_session_store(TALLOC_CTX *mem_ctx,
+					       struct loadparm_context *lp_ctx);
 
 NTSTATUS netsec_incoming_packet(struct schannel_state *state,
 				bool do_unseal,
diff --git a/libcli/auth/schannel_state_tdb.c b/libcli/auth/schannel_state_tdb.c
index eecd00e..e9435c0 100644
--- a/libcli/auth/schannel_state_tdb.c
+++ b/libcli/auth/schannel_state_tdb.c
@@ -28,7 +28,7 @@
 #include "../lib/param/param.h"
 #include "../libcli/auth/schannel.h"
 #include "../librpc/gen_ndr/ndr_schannel.h"
-#include "lib/tdb_wrap/tdb_wrap.h"
+#include "lib/dbwrap/dbwrap.h"
 
 #define SECRETS_SCHANNEL_STATE "SECRETS/SCHANNEL"
 
@@ -37,19 +37,21 @@
  be called from parent processes to corectly handle TDB_CLEAR_IF_FIRST
 *******************************************************************************/
 
-struct tdb_wrap *open_schannel_session_store(TALLOC_CTX *mem_ctx,
-					     struct loadparm_context *lp_ctx)
+struct db_context *open_schannel_session_store(TALLOC_CTX *mem_ctx,
+					       struct loadparm_context *lp_ctx)
 {
-	struct tdb_wrap *tdb_sc = NULL;
+	struct db_context *db_sc = NULL;
 	char *fname = lpcfg_private_path(mem_ctx, lp_ctx, "schannel_store.tdb");
 
 	if (!fname) {
 		return NULL;
 	}
 
-	tdb_sc = tdb_wrap_open(mem_ctx, fname, 0, TDB_CLEAR_IF_FIRST|TDB_NOSYNC, O_RDWR|O_CREAT, 0600, lp_ctx);
+	db_sc = dbwrap_local_open(mem_ctx, lp_ctx, fname, 0,
+				  TDB_CLEAR_IF_FIRST|TDB_NOSYNC, O_RDWR|O_CREAT,
+				  0600, 0);
 
-	if (!tdb_sc) {
+	if (!db_sc) {
 		DEBUG(0,("open_schannel_session_store: Failed to open %s - %s\n",
 			 fname, strerror(errno)));
 		TALLOC_FREE(fname);
@@ -58,23 +60,23 @@ struct tdb_wrap *open_schannel_session_store(TALLOC_CTX *mem_ctx,
 
 	TALLOC_FREE(fname);
 
-	return tdb_sc;
+	return db_sc;
 }
 
 /********************************************************************
  ********************************************************************/
 
 static
-NTSTATUS schannel_store_session_key_tdb(struct tdb_wrap *tdb_sc,
+NTSTATUS schannel_store_session_key_tdb(struct db_context *db_sc,
 					TALLOC_CTX *mem_ctx,
 					struct netlogon_creds_CredentialState *creds)
 {
 	enum ndr_err_code ndr_err;
 	DATA_BLOB blob;
 	TDB_DATA value;
-	int ret;
 	char *keystr;
 	char *name_upper;
+	NTSTATUS status;
 
 	name_upper = strupper_talloc(mem_ctx, creds->computer_name);
 	if (!name_upper) {
@@ -98,12 +100,12 @@ NTSTATUS schannel_store_session_key_tdb(struct tdb_wrap *tdb_sc,
 	value.dptr = blob.data;
 	value.dsize = blob.length;
 
-	ret = tdb_store_bystring(tdb_sc->tdb, keystr, value, TDB_REPLACE);
-	if (ret != TDB_SUCCESS) {
+	status = dbwrap_store_bystring(db_sc, keystr, value, TDB_REPLACE);
+	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(0,("Unable to add %s to session key db - %s\n",
-			 keystr, tdb_errorstr(tdb_sc->tdb)));
+			 keystr, nt_errstr(status)));
 		talloc_free(keystr);
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+		return status;
 	}
 
 	DEBUG(3,("schannel_store_session_key_tdb: stored schannel info with key %s\n",
@@ -122,7 +124,7 @@ NTSTATUS schannel_store_session_key_tdb(struct tdb_wrap *tdb_sc,
  ********************************************************************/
 
 static
-NTSTATUS schannel_fetch_session_key_tdb(struct tdb_wrap *tdb_sc,
+NTSTATUS schannel_fetch_session_key_tdb(struct db_context *db_sc,
 					TALLOC_CTX *mem_ctx,
 					const char *computer_name,
 					struct netlogon_creds_CredentialState **pcreds)
@@ -149,11 +151,10 @@ NTSTATUS schannel_fetch_session_key_tdb(struct tdb_wrap *tdb_sc,
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	value = tdb_fetch_bystring(tdb_sc->tdb, keystr);
-	if (!value.dptr) {
+	status = dbwrap_fetch_bystring(db_sc, keystr, keystr, &value);
+	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(10,("schannel_fetch_session_key_tdb: Failed to find entry with key %s\n",
 			keystr ));
-		status = NT_STATUS_OBJECT_NAME_NOT_FOUND;
 		goto done;
 	}
 
@@ -184,7 +185,6 @@ NTSTATUS schannel_fetch_session_key_tdb(struct tdb_wrap *tdb_sc,
  done:
 
 	talloc_free(keystr);
-	SAFE_FREE(value.dptr);
 
 	if (!NT_STATUS_IS_OK(status)) {
 		talloc_free(creds);
@@ -207,7 +207,7 @@ NTSTATUS schannel_get_creds_state(TALLOC_CTX *mem_ctx,
 				  struct netlogon_creds_CredentialState **_creds)
 {
 	TALLOC_CTX *tmpctx;
-	struct tdb_wrap *tdb_sc;
+	struct db_context *db_sc;
 	struct netlogon_creds_CredentialState *creds;
 	NTSTATUS status;
 
@@ -216,12 +216,12 @@ NTSTATUS schannel_get_creds_state(TALLOC_CTX *mem_ctx,
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	tdb_sc = open_schannel_session_store(tmpctx, lp_ctx);
-	if (!tdb_sc) {
+	db_sc = open_schannel_session_store(tmpctx, lp_ctx);
+	if (!db_sc) {
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	status = schannel_fetch_session_key_tdb(tdb_sc, tmpctx, 
+	status = schannel_fetch_session_key_tdb(db_sc, tmpctx,
 						computer_name, &creds);
 	if (NT_STATUS_IS_OK(status)) {
 		*_creds = talloc_steal(mem_ctx, creds);
@@ -244,7 +244,7 @@ NTSTATUS schannel_save_creds_state(TALLOC_CTX *mem_ctx,
 				   struct netlogon_creds_CredentialState *creds)
 {
 	TALLOC_CTX *tmpctx;
-	struct tdb_wrap *tdb_sc;
+	struct db_context *db_sc;
 	NTSTATUS status;
 
 	tmpctx = talloc_named(mem_ctx, 0, "schannel_save_creds_state");
@@ -252,12 +252,12 @@ NTSTATUS schannel_save_creds_state(TALLOC_CTX *mem_ctx,
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	tdb_sc = open_schannel_session_store(tmpctx, lp_ctx);
-	if (!tdb_sc) {
+	db_sc = open_schannel_session_store(tmpctx, lp_ctx);
+	if (!db_sc) {
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	status = schannel_store_session_key_tdb(tdb_sc, tmpctx, creds);
+	status = schannel_store_session_key_tdb(db_sc, tmpctx, creds);
 
 	talloc_free(tmpctx);
 	return status;
@@ -281,12 +281,13 @@ NTSTATUS schannel_check_creds_state(TALLOC_CTX *mem_ctx,
 				    struct netlogon_creds_CredentialState **creds_out)
 {
 	TALLOC_CTX *tmpctx;
-	struct tdb_wrap *tdb_sc;
+	struct db_context *db_sc;
 	struct netlogon_creds_CredentialState *creds;
 	NTSTATUS status;
 	int ret;
 	char *name_upper = NULL;
 	char *keystr = NULL;
+	struct db_record *record;
 	TDB_DATA key;
 
 	if (creds_out != NULL) {
@@ -313,14 +314,14 @@ NTSTATUS schannel_check_creds_state(TALLOC_CTX *mem_ctx,
 
 	key = string_term_tdb_data(keystr);
 
-	tdb_sc = open_schannel_session_store(tmpctx, lp_ctx);
-	if (!tdb_sc) {
+	db_sc = open_schannel_session_store(tmpctx, lp_ctx);
+	if (!db_sc) {
 		status = NT_STATUS_ACCESS_DENIED;
 		goto done;
 	}
 
-	ret = tdb_chainlock(tdb_sc->tdb, key);
-	if (ret != 0) {
+	record = dbwrap_fetch_locked(db_sc, tmpctx, key);
+	if (!record) {
 		status = NT_STATUS_INTERNAL_DB_CORRUPTION;
 		goto done;
 	}
@@ -329,10 +330,9 @@ NTSTATUS schannel_check_creds_state(TALLOC_CTX *mem_ctx,
 	 * disconnects) we must update the database every time we
 	 * update the structure */
 
-	status = schannel_fetch_session_key_tdb(tdb_sc, tmpctx, 
+	status = schannel_fetch_session_key_tdb(db_sc, tmpctx,
 						computer_name, &creds);
 	if (!NT_STATUS_IS_OK(status)) {
-		tdb_chainunlock(tdb_sc->tdb, key);
 		goto done;
 	}
 
@@ -340,12 +340,10 @@ NTSTATUS schannel_check_creds_state(TALLOC_CTX *mem_ctx,
 						  received_authenticator,
 						  return_authenticator);
 	if (!NT_STATUS_IS_OK(status)) {
-		tdb_chainunlock(tdb_sc->tdb, key);
 		goto done;
 	}
 
-	status = schannel_store_session_key_tdb(tdb_sc, tmpctx, creds);
-	tdb_chainunlock(tdb_sc->tdb, key);
+	status = schannel_store_session_key_tdb(db_sc, tmpctx, creds);
 	if (!NT_STATUS_IS_OK(status)) {
 		goto done;
 	}
diff --git a/libcli/auth/wscript_build b/libcli/auth/wscript_build
index 092d5e4..df23058 100755
--- a/libcli/auth/wscript_build
+++ b/libcli/auth/wscript_build
@@ -25,7 +25,7 @@ bld.SAMBA_SUBSYSTEM('LIBCLI_AUTH',
 
 bld.SAMBA_SUBSYSTEM('COMMON_SCHANNEL',
 	source='schannel_state_tdb.c schannel_sign.c',
-	deps='tdb-wrap util_tdb samba-hostconfig NDR_NETLOGON'
+	deps='dbwrap util_tdb samba-hostconfig NDR_NETLOGON'
 	)
 
 
-- 
1.7.10.4



More information about the samba-technical mailing list