diff options
author | Stefan Metzmacher <metze@samba.org> | 2014-01-17 14:07:37 +0100 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2014-01-22 17:11:54 +0100 |
commit | 8cf4eff201aa9e1ba8127311bcfc2a357fb4ef03 (patch) | |
tree | 7f220882b9d05a5a9861ef6b959261b503b304fb /source3/rpc_client | |
parent | ece3ba10a16138a75b207a0cf9fe299759253d99 (diff) | |
download | samba-8cf4eff201aa9e1ba8127311bcfc2a357fb4ef03.tar.gz samba-8cf4eff201aa9e1ba8127311bcfc2a357fb4ef03.tar.xz samba-8cf4eff201aa9e1ba8127311bcfc2a357fb4ef03.zip |
s3:rpc_client: use db_open() to open "netlogon_creds_cli.tdb"
This uses dbwrap_ctdb if running in a cluster.
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'source3/rpc_client')
-rw-r--r-- | source3/rpc_client/cli_netlogon.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/source3/rpc_client/cli_netlogon.c b/source3/rpc_client/cli_netlogon.c index ca2d9bf95c..b7b490f818 100644 --- a/source3/rpc_client/cli_netlogon.c +++ b/source3/rpc_client/cli_netlogon.c @@ -21,6 +21,7 @@ */ #include "includes.h" +#include "system/filesys.h" #include "libsmb/libsmb.h" #include "rpc_client/rpc_client.h" #include "rpc_client/cli_pipe.h" @@ -34,26 +35,53 @@ #include "../libcli/security/security.h" #include "lib/param/param.h" #include "libcli/smb/smbXcli_base.h" +#include "dbwrap/dbwrap.h" +#include "dbwrap/dbwrap_open.h" +#include "util_tdb.h" NTSTATUS rpccli_pre_open_netlogon_creds(void) { - TALLOC_CTX *frame = talloc_stackframe(); + static bool already_open = false; + TALLOC_CTX *frame; struct loadparm_context *lp_ctx; + char *fname; + struct db_context *global_db; NTSTATUS status; + if (already_open) { + return NT_STATUS_OK; + } + + frame = talloc_stackframe(); + lp_ctx = loadparm_init_s3(frame, loadparm_s3_helpers()); if (lp_ctx == NULL) { TALLOC_FREE(frame); return NT_STATUS_NO_MEMORY; } - status = netlogon_creds_cli_open_global_db(lp_ctx); + fname = lpcfg_private_db_path(frame, lp_ctx, "netlogon_creds_cli"); + if (fname == NULL) { + TALLOC_FREE(frame); + return NT_STATUS_NO_MEMORY; + } + + global_db = db_open(talloc_autofree_context(), fname, + 0, TDB_CLEAR_IF_FIRST|TDB_INCOMPATIBLE_HASH, + O_RDWR|O_CREAT, 0600, DBWRAP_LOCK_ORDER_2); + if (global_db == NULL) { + TALLOC_FREE(frame); + return NT_STATUS_NO_MEMORY; + } + + status = netlogon_creds_cli_set_global_db(&global_db); TALLOC_FREE(frame); if (!NT_STATUS_IS_OK(status)) { return status; } + already_open = true; return NT_STATUS_OK; } @@ -69,6 +97,12 @@ NTSTATUS rpccli_create_netlogon_creds(const char *server_computer, struct loadparm_context *lp_ctx; NTSTATUS status; + status = rpccli_pre_open_netlogon_creds(); + if (!NT_STATUS_IS_OK(status)) { + TALLOC_FREE(frame); + return status; + } + lp_ctx = loadparm_init_s3(frame, loadparm_s3_helpers()); if (lp_ctx == NULL) { TALLOC_FREE(frame); |