summaryrefslogtreecommitdiffstats
path: root/source3/rpc_client
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2014-01-17 14:07:37 +0100
committerStefan Metzmacher <metze@samba.org>2014-01-22 17:11:54 +0100
commit8cf4eff201aa9e1ba8127311bcfc2a357fb4ef03 (patch)
tree7f220882b9d05a5a9861ef6b959261b503b304fb /source3/rpc_client
parentece3ba10a16138a75b207a0cf9fe299759253d99 (diff)
downloadsamba-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.c38
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);