From 3525f77e56966d688a11e3f4520e9cd799fd4f23 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 9 Feb 2008 14:24:24 +0100 Subject: Move nt_time_equal() to libutil. (This used to be commit 9705263a6c58d4ade556d17db2009dbb85291b22) --- source4/torture/util.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/util.c b/source4/torture/util.c index 0e9dda42fa..96fdf4d5d9 100644 --- a/source4/torture/util.c +++ b/source4/torture/util.c @@ -24,13 +24,6 @@ #include "libcli/raw/interfaces.h" #include "libcli/raw/libcliraw.h" -/** - check if 2 NTTIMEs are equal. -*/ -bool nt_time_equal(NTTIME *t1, NTTIME *t2) -{ - return *t1 == *t2; -} NTSTATUS torture_second_tcon(TALLOC_CTX *mem_ctx, struct smbcli_session *session, -- cgit From 0938fad4f19622aa99513c01fecf1ef1a4a65b91 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 9 Feb 2008 14:26:46 +0100 Subject: torture: Merge util.c into util_smb.c (This used to be commit d19d27f406c0377d98c9fe9da9284dcebd373bb7) --- source4/torture/util.c | 66 ---------------------------------------------- source4/torture/util_smb.c | 39 +++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 66 deletions(-) delete mode 100644 source4/torture/util.c (limited to 'source4/torture') diff --git a/source4/torture/util.c b/source4/torture/util.c deleted file mode 100644 index 96fdf4d5d9..0000000000 --- a/source4/torture/util.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SMB torture tester utility functions - Copyright (C) Jelmer Vernooij 2006 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "includes.h" -#include "system/filesys.h" -#include "system/wait.h" -#include "torture/torture.h" -#include "libcli/raw/interfaces.h" -#include "libcli/raw/libcliraw.h" - - -NTSTATUS torture_second_tcon(TALLOC_CTX *mem_ctx, - struct smbcli_session *session, - const char *sharename, - struct smbcli_tree **res) -{ - union smb_tcon tcon; - struct smbcli_tree *result; - TALLOC_CTX *tmp_ctx; - NTSTATUS status; - - if ((tmp_ctx = talloc_new(mem_ctx)) == NULL) { - return NT_STATUS_NO_MEMORY; - } - - result = smbcli_tree_init(session, tmp_ctx, false); - if (result == NULL) { - talloc_free(tmp_ctx); - return NT_STATUS_NO_MEMORY; - } - - tcon.generic.level = RAW_TCON_TCONX; - tcon.tconx.in.flags = 0; - - /* Ignore share mode security here */ - tcon.tconx.in.password = data_blob(NULL, 0); - tcon.tconx.in.path = sharename; - tcon.tconx.in.device = "?????"; - - status = smb_raw_tcon(result, tmp_ctx, &tcon); - if (!NT_STATUS_IS_OK(status)) { - talloc_free(tmp_ctx); - return status; - } - - result->tid = tcon.tconx.out.tid; - *res = talloc_steal(mem_ctx, result); - talloc_free(tmp_ctx); - return NT_STATUS_OK; -} diff --git a/source4/torture/util_smb.c b/source4/torture/util_smb.c index de7303bac8..ddf7b85c63 100644 --- a/source4/torture/util_smb.c +++ b/source4/torture/util_smb.c @@ -863,3 +863,42 @@ _PUBLIC_ struct torture_test *torture_suite_add_1smb_test( } +NTSTATUS torture_second_tcon(TALLOC_CTX *mem_ctx, + struct smbcli_session *session, + const char *sharename, + struct smbcli_tree **res) +{ + union smb_tcon tcon; + struct smbcli_tree *result; + TALLOC_CTX *tmp_ctx; + NTSTATUS status; + + if ((tmp_ctx = talloc_new(mem_ctx)) == NULL) { + return NT_STATUS_NO_MEMORY; + } + + result = smbcli_tree_init(session, tmp_ctx, false); + if (result == NULL) { + talloc_free(tmp_ctx); + return NT_STATUS_NO_MEMORY; + } + + tcon.generic.level = RAW_TCON_TCONX; + tcon.tconx.in.flags = 0; + + /* Ignore share mode security here */ + tcon.tconx.in.password = data_blob(NULL, 0); + tcon.tconx.in.path = sharename; + tcon.tconx.in.device = "?????"; + + status = smb_raw_tcon(result, tmp_ctx, &tcon); + if (!NT_STATUS_IS_OK(status)) { + talloc_free(tmp_ctx); + return status; + } + + result->tid = tcon.tconx.out.tid; + *res = talloc_steal(mem_ctx, result); + talloc_free(tmp_ctx); + return NT_STATUS_OK; +} -- cgit From be2be0779e118534b234971f668bc05f833ba8a7 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 9 Feb 2008 14:42:55 +0100 Subject: Ignore kinit with pkinit test failures for now. (This used to be commit 94dedaf6ed55b146a0123407137f7ee4cfd41283) --- source4/torture/config.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 0ee7873628..2666a1d0be 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -14,7 +14,7 @@ PUBLIC_DEPENDENCIES = \ LIBTALLOC [SUBSYSTEM::TORTURE_UTIL] -OBJ_FILES = util.o util_smb.o +OBJ_FILES = util_smb.o PRIVATE_DEPENDENCIES = LIBCLI_RAW PUBLIC_PROTO_HEADER = util.h PUBLIC_DEPENDENCIES = POPT_CREDENTIALS -- cgit From c61dc3849434347ca8a77f917ca6241bf4ee3174 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 9 Feb 2008 15:42:19 +0100 Subject: Re-enable python support in BECOME-DC test. (This used to be commit ed44fd59bfa289bcef82e0650ccda381efb52268) --- source4/torture/config.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 2666a1d0be..e9ef18ac07 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -297,7 +297,8 @@ PRIVATE_DEPENDENCIES = \ LIBSAMBA-NET \ smbcalls \ POPT_CREDENTIALS \ - torture_rpc + torture_rpc \ + LIBPYTHON # End SUBSYSTEM TORTURE_NET ################################# -- cgit From 63aa4b902144873243e37eb7d7ce91d30b886abc Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 9 Feb 2008 20:47:12 +0100 Subject: Remove unused define. (This used to be commit 64d6d729135e1b3b19c9bdbbe973fcdaca15e8b3) --- source4/torture/libnet/libnet_BecomeDC.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/libnet/libnet_BecomeDC.c b/source4/torture/libnet/libnet_BecomeDC.c index 0ef6a03a6a..0dd06bda4c 100644 --- a/source4/torture/libnet/libnet_BecomeDC.c +++ b/source4/torture/libnet/libnet_BecomeDC.c @@ -275,7 +275,6 @@ static NTSTATUS test_become_dc_prepare_db_ejs(void *private_data, return NT_STATUS_OK; } -#ifdef HAVE_WORKING_PYTHON #include "param/param.h" #include #include "scripting/python/modules.h" @@ -381,7 +380,6 @@ static NTSTATUS test_become_dc_prepare_db_py(void *private_data, return NT_STATUS_OK; } -#endif /* HAVE_WORKING_PYTHON */ static NTSTATUS test_apply_schema(struct test_become_dc_state *s, const struct libnet_BecomeDC_StoreChunk *c) @@ -878,12 +876,10 @@ bool torture_net_become_dc(struct torture_context *torture) b.in.callbacks.private_data = s; b.in.callbacks.check_options = test_become_dc_check_options; - b.in.callbacks.prepare_db = test_become_dc_prepare_db_ejs; -#ifdef HAVE_WORKING_PYTHON - if (getenv("PROVISION_PYTHON")) { - b.in.callbacks.prepare_db = test_become_dc_prepare_db_py; + b.in.callbacks.prepare_db = test_become_dc_prepare_db_py; + if (getenv("PROVISION_EJS")) { + b.in.callbacks.prepare_db = test_become_dc_prepare_db_ejs; } -#endif b.in.callbacks.schema_chunk = test_become_dc_schema_chunk; b.in.callbacks.config_chunk = test_become_dc_store_chunk; b.in.callbacks.domain_chunk = test_become_dc_store_chunk; -- cgit From 08c8d3b992d419db7b39a91fb42208beb5d273ba Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 11 Feb 2008 13:51:09 +0100 Subject: Remove Samba 3 backwards compatibility code in C. This code is no longer used, and equivalent code already exists in Python (scripting/python/samba/samba3.py) (This used to be commit c16212e8bf5343496ea4b3afc30a8b4d3a0afe2d) --- source4/torture/config.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index e9ef18ac07..0c5e641b4b 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -196,8 +196,8 @@ OBJ_FILES = \ auth/ntlmssp.o \ auth/pac.o PRIVATE_DEPENDENCIES = \ - LIBCLI_SMB gensec auth LIBSAMBA3 KERBEROS \ - POPT_CREDENTIALS + LIBCLI_SMB gensec auth KERBEROS \ + POPT_CREDENTIALS SMBPASSWD # End SUBSYSTEM TORTURE_AUTH ################################# -- cgit From 88d2e0522737fb8856fb0f52c2af8a2f56130f19 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 13 Feb 2008 15:05:44 +1100 Subject: updated SMB2 create operation to match WSPP. Adding some defined for various new create options (This used to be commit d037dc23ced3df6bce98cbf4810fb5f1247336bd) --- source4/torture/smb2/connect.c | 10 +++++----- source4/torture/smb2/lock.c | 8 ++++---- source4/torture/smb2/util.c | 40 ++++++++++++++++++++-------------------- 3 files changed, 29 insertions(+), 29 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/smb2/connect.c b/source4/torture/smb2/connect.c index f1bc63dbbb..0004ea958e 100644 --- a/source4/torture/smb2/connect.c +++ b/source4/torture/smb2/connect.c @@ -147,10 +147,10 @@ static struct smb2_handle torture_smb2_create(struct smb2_tree *tree, TALLOC_CTX *tmp_ctx = talloc_new(tree); ZERO_STRUCT(io); - io.in.oplock_flags = 0; - io.in.access_mask = SEC_RIGHTS_FILE_ALL; - io.in.file_attr = FILE_ATTRIBUTE_NORMAL; - io.in.open_disposition = NTCREATEX_DISP_OPEN_IF; + io.in.oplock_level = 0; + io.in.desired_access = SEC_RIGHTS_FILE_ALL; + io.in.file_attributes = FILE_ATTRIBUTE_NORMAL; + io.in.create_disposition = NTCREATEX_DISP_OPEN_IF; io.in.share_access = NTCREATEX_SHARE_ACCESS_DELETE| NTCREATEX_SHARE_ACCESS_READ| @@ -166,7 +166,7 @@ static struct smb2_handle torture_smb2_create(struct smb2_tree *tree, if (DEBUGLVL(1)) { printf("Open gave:\n"); - printf("oplock_flags = 0x%x\n", io.out.oplock_flags); + printf("oplock_flags = 0x%x\n", io.out.oplock_level); printf("create_action = 0x%x\n", io.out.create_action); printf("create_time = %s\n", nt_time_string(tmp_ctx, io.out.create_time)); printf("access_time = %s\n", nt_time_string(tmp_ctx, io.out.access_time)); diff --git a/source4/torture/smb2/lock.c b/source4/torture/smb2/lock.c index 98e412817b..3cf2e93ee0 100644 --- a/source4/torture/smb2/lock.c +++ b/source4/torture/smb2/lock.c @@ -238,10 +238,10 @@ static bool test_lock_read_write(struct torture_context *torture, CHECK_VALUE(lck.out.unknown1, 0); ZERO_STRUCT(cr); - cr.in.oplock_flags = 0; - cr.in.access_mask = SEC_RIGHTS_FILE_ALL; - cr.in.file_attr = FILE_ATTRIBUTE_NORMAL; - cr.in.open_disposition = NTCREATEX_DISP_OPEN_IF; + cr.in.oplock_level = 0; + cr.in.desired_access = SEC_RIGHTS_FILE_ALL; + cr.in.file_attributes = FILE_ATTRIBUTE_NORMAL; + cr.in.create_disposition = NTCREATEX_DISP_OPEN_IF; cr.in.share_access = NTCREATEX_SHARE_ACCESS_DELETE| NTCREATEX_SHARE_ACCESS_READ| diff --git a/source4/torture/smb2/util.c b/source4/torture/smb2/util.c index fe88296a32..219c2140d3 100644 --- a/source4/torture/smb2/util.c +++ b/source4/torture/smb2/util.c @@ -55,9 +55,9 @@ NTSTATUS smb2_util_unlink(struct smb2_tree *tree, const char *fname) NTSTATUS status; ZERO_STRUCT(io); - io.in.access_mask = SEC_RIGHTS_FILE_ALL; - io.in.file_attr = FILE_ATTRIBUTE_NORMAL; - io.in.open_disposition = NTCREATEX_DISP_OPEN; + io.in.desired_access = SEC_RIGHTS_FILE_ALL; + io.in.file_attributes = FILE_ATTRIBUTE_NORMAL; + io.in.create_disposition = NTCREATEX_DISP_OPEN; io.in.share_access = NTCREATEX_SHARE_ACCESS_DELETE| NTCREATEX_SHARE_ACCESS_READ| @@ -107,9 +107,9 @@ static NTSTATUS smb2_create_complex(struct smb2_tree *tree, const char *fname, smb2_util_unlink(tree, fname); ZERO_STRUCT(io); - io.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; - io.in.file_attr = FILE_ATTRIBUTE_NORMAL; - io.in.open_disposition = NTCREATEX_DISP_OVERWRITE_IF; + io.in.desired_access = SEC_FLAG_MAXIMUM_ALLOWED; + io.in.file_attributes = FILE_ATTRIBUTE_NORMAL; + io.in.create_disposition = NTCREATEX_DISP_OVERWRITE_IF; io.in.share_access = NTCREATEX_SHARE_ACCESS_DELETE| NTCREATEX_SHARE_ACCESS_READ| @@ -119,8 +119,8 @@ static NTSTATUS smb2_create_complex(struct smb2_tree *tree, const char *fname, if (dir) { io.in.create_options = NTCREATEX_OPTIONS_DIRECTORY; io.in.share_access &= ~NTCREATEX_SHARE_ACCESS_DELETE; - io.in.file_attr = FILE_ATTRIBUTE_DIRECTORY; - io.in.open_disposition = NTCREATEX_DISP_CREATE; + io.in.file_attributes = FILE_ATTRIBUTE_DIRECTORY; + io.in.create_disposition = NTCREATEX_DISP_CREATE; } if (strchr(fname, ':') == NULL) { @@ -334,10 +334,10 @@ NTSTATUS torture_smb2_testfile(struct smb2_tree *tree, const char *fname, NTSTATUS status; ZERO_STRUCT(io); - io.in.oplock_flags = 0; - io.in.access_mask = SEC_RIGHTS_FILE_ALL; - io.in.file_attr = FILE_ATTRIBUTE_NORMAL; - io.in.open_disposition = NTCREATEX_DISP_OPEN_IF; + io.in.oplock_level = 0; + io.in.desired_access = SEC_RIGHTS_FILE_ALL; + io.in.file_attributes = FILE_ATTRIBUTE_NORMAL; + io.in.create_disposition = NTCREATEX_DISP_OPEN_IF; io.in.share_access = NTCREATEX_SHARE_ACCESS_DELETE| NTCREATEX_SHARE_ACCESS_READ| @@ -370,10 +370,10 @@ NTSTATUS torture_smb2_testdir(struct smb2_tree *tree, const char *fname, NTSTATUS status; ZERO_STRUCT(io); - io.in.oplock_flags = 0; - io.in.access_mask = SEC_RIGHTS_DIR_ALL; - io.in.file_attr = FILE_ATTRIBUTE_DIRECTORY; - io.in.open_disposition = NTCREATEX_DISP_OPEN_IF; + io.in.oplock_level = 0; + io.in.desired_access = SEC_RIGHTS_DIR_ALL; + io.in.file_attributes = FILE_ATTRIBUTE_DIRECTORY; + io.in.create_disposition = NTCREATEX_DISP_OPEN_IF; io.in.share_access = NTCREATEX_SHARE_ACCESS_READ|NTCREATEX_SHARE_ACCESS_WRITE|NTCREATEX_SHARE_ACCESS_DELETE; io.in.create_options = NTCREATEX_OPTIONS_DIRECTORY; io.in.fname = fname; @@ -422,10 +422,10 @@ NTSTATUS smb2_util_roothandle(struct smb2_tree *tree, struct smb2_handle *handle NTSTATUS status; ZERO_STRUCT(io); - io.in.oplock_flags = 0; - io.in.access_mask = SEC_STD_SYNCHRONIZE | SEC_DIR_READ_ATTRIBUTE | SEC_DIR_LIST; - io.in.file_attr = 0; - io.in.open_disposition = NTCREATEX_DISP_OPEN; + io.in.oplock_level = 0; + io.in.desired_access = SEC_STD_SYNCHRONIZE | SEC_DIR_READ_ATTRIBUTE | SEC_DIR_LIST; + io.in.file_attributes = 0; + io.in.create_disposition = NTCREATEX_DISP_OPEN; io.in.share_access = NTCREATEX_SHARE_ACCESS_READ|NTCREATEX_SHARE_ACCESS_DELETE; io.in.create_options = NTCREATEX_OPTIONS_ASYNC_ALERT; io.in.fname = ""; -- cgit From c41944b9f9e6dc5287065b24ab1c1fc20ec36cb4 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 13 Feb 2008 10:36:49 +0100 Subject: spoolss.idl: improve idl for EnumPrinterData and not use 'lstring' any more metze (This used to be commit d6cdddbcf37d120cb365bc7f8188858c8776e2e0) --- source4/torture/rpc/spoolss.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c index 23b4aad30b..4a6ff480c4 100644 --- a/source4/torture/rpc/spoolss.c +++ b/source4/torture/rpc/spoolss.c @@ -1178,16 +1178,23 @@ static bool test_EnumPrinterData(struct torture_context *tctx, struct dcerpc_pip NTSTATUS status; struct spoolss_EnumPrinterData r; + ZERO_STRUCT(r); r.in.handle = handle; r.in.enum_index = 0; do { - uint32_t data_size; - - r.in.value_offered = 0; - data_size = 0; - r.in.data_size = &data_size; - r.out.data_size = &data_size; + uint32_t value_size = 0; + uint32_t data_size = 0; + uint32_t printerdata_type = 0; + DATA_BLOB data = data_blob(NULL,0); + + r.in.value_offered = value_size; + r.out.value_needed = &value_size; + r.in.data_offered = data_size; + r.out.data_needed = &data_size; + + r.out.printerdata_type = &printerdata_type; + r.out.buffer = &data; torture_comment(tctx, "Testing EnumPrinterData\n"); @@ -1195,7 +1202,8 @@ static bool test_EnumPrinterData(struct torture_context *tctx, struct dcerpc_pip torture_assert_ntstatus_ok(tctx, status, "EnumPrinterData failed"); - r.in.value_offered = r.out.value_needed; + r.in.value_offered = value_size; + r.in.data_offered = data_size; status = dcerpc_spoolss_EnumPrinterData(p, tctx, &r); -- cgit From a9d30b0d61a6a3363dc659c3e07ce1615c5e85df Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 13 Feb 2008 14:52:53 +0100 Subject: torture/eventlog: fix crash bugs! This bug was introduced in 92b8bde561277a6b83048ce003cc29ff1b380255 and this shows that we need to be very, very careful in changing idl elements from scalars to [ref] pointers! metze (This used to be commit 3ec4bce0b64764e364aedea2800eed296805c51e) --- source4/torture/rpc/eventlog.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'source4/torture') diff --git a/source4/torture/rpc/eventlog.c b/source4/torture/rpc/eventlog.c index 047146edaf..4701fdfe4d 100644 --- a/source4/torture/rpc/eventlog.c +++ b/source4/torture/rpc/eventlog.c @@ -67,11 +67,14 @@ static bool test_GetNumRecords(struct torture_context *tctx, struct dcerpc_pipe struct eventlog_GetNumRecords r; struct eventlog_CloseEventLog cr; struct policy_handle handle; + uint32_t number = 0; if (!get_policy_handle(tctx, p, &handle)) return false; + ZERO_STRUCT(r); r.in.handle = &handle; + r.out.number = &number; torture_assert_ntstatus_ok(tctx, dcerpc_eventlog_GetNumRecords(p, tctx, &r), @@ -98,6 +101,7 @@ static bool test_ReadEventLog(struct torture_context *tctx, if (!get_policy_handle(tctx, p, &handle)) return false; + ZERO_STRUCT(r); r.in.offset = 0; r.in.handle = &handle; r.in.flags = EVENTLOG_BACKWARDS_READ|EVENTLOG_SEQUENTIAL_READ; @@ -107,11 +111,15 @@ static bool test_ReadEventLog(struct torture_context *tctx, struct eventlog_Record rec; struct ndr_pull *ndr; enum ndr_err_code ndr_err; + uint32_t sent_size = 0; + uint32_t real_size = 0; /* Read first for number of bytes in record */ r.in.number_of_bytes = 0; r.out.data = NULL; + r.out.sent_size = &sent_size; + r.out.real_size = &real_size; status = dcerpc_eventlog_ReadEventLogW(p, tctx, &r); -- cgit From 60e205c34c4a28060f47ba1aa7c7592d33d302bc Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 13 Feb 2008 16:20:23 +0100 Subject: torture/eventlog: the NTSTATUS of dcerpc_ functions is the same as r.out.result metze (This used to be commit 0c5539e5fedd4123f61d50ee29acdc5a5f0faf76) --- source4/torture/rpc/eventlog.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/rpc/eventlog.c b/source4/torture/rpc/eventlog.c index 4701fdfe4d..feeeb9330b 100644 --- a/source4/torture/rpc/eventlog.c +++ b/source4/torture/rpc/eventlog.c @@ -127,8 +127,6 @@ static bool test_ReadEventLog(struct torture_context *tctx, break; } - torture_assert_ntstatus_ok(tctx, status, "ReadEventLog failed"); - torture_assert_ntstatus_equal(tctx, r.out.result, NT_STATUS_BUFFER_TOO_SMALL, "ReadEventLog failed"); -- cgit From b640f475be9b0f83e7812a5c7756344c5891cba3 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 14 Feb 2008 17:11:36 +1100 Subject: updated SMB2 code for getinfo according to WSPP docs - Updated getinfo structures and field names - also updated the protocol revision number handling to reflect new docs (This used to be commit 3aaa2e86d94675c6c68d66d75292c3e34bfbc81b) --- source4/torture/smb2/scan.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/smb2/scan.c b/source4/torture/smb2/scan.c index 84be11c047..0f4c9fefdf 100644 --- a/source4/torture/smb2/scan.c +++ b/source4/torture/smb2/scan.c @@ -68,19 +68,21 @@ bool torture_smb2_getinfo_scan(struct torture_context *torture) ZERO_STRUCT(io); - io.in.max_response_size = 0xFFFF; + io.in.output_buffer_length = 0xFFFF; for (c=1;c<5;c++) { for (i=0;i<0x100;i++) { - io.in.level = (i<<8) | c; + io.in.info_type = c; + io.in.info_class = i; io.in.file.handle = fhandle; status = smb2_getinfo(tree, torture, &io); if (!NT_STATUS_EQUAL(status, NT_STATUS_INVALID_INFO_CLASS) && !NT_STATUS_EQUAL(status, NT_STATUS_INVALID_PARAMETER) && !NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED)) { - printf("file level 0x%04x is %ld bytes - %s\n", - io.in.level, (long)io.out.blob.length, nt_errstr(status)); + printf("file level 0x%02x:%02x is %ld bytes - %s\n", + io.in.info_type, io.in.info_class, + (long)io.out.blob.length, nt_errstr(status)); dump_data(1, io.out.blob.data, io.out.blob.length); } @@ -89,8 +91,9 @@ bool torture_smb2_getinfo_scan(struct torture_context *torture) if (!NT_STATUS_EQUAL(status, NT_STATUS_INVALID_INFO_CLASS) && !NT_STATUS_EQUAL(status, NT_STATUS_INVALID_PARAMETER) && !NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED)) { - printf("dir level 0x%04x is %ld bytes - %s\n", - io.in.level, (long)io.out.blob.length, nt_errstr(status)); + printf("dir level 0x%02x:%02x is %ld bytes - %s\n", + io.in.info_type, io.in.info_class, + (long)io.out.blob.length, nt_errstr(status)); dump_data(1, io.out.blob.data, io.out.blob.length); } } -- cgit From ff64a6716092db5d0ac13658bb7e400da90e0dd9 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 14 Feb 2008 23:28:31 +0100 Subject: Split provision from C code out of becomedc. (This used to be commit ed2b72ac76ec069fec799b3fd805cca59fc28de4) --- source4/torture/config.mk | 2 +- source4/torture/libnet/libnet_BecomeDC.c | 298 +--------------------------- source4/torture/util_provision.c | 322 +++++++++++++++++++++++++++++++ 3 files changed, 326 insertions(+), 296 deletions(-) create mode 100644 source4/torture/util_provision.c (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 0c5e641b4b..648c62f98e 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -14,7 +14,7 @@ PUBLIC_DEPENDENCIES = \ LIBTALLOC [SUBSYSTEM::TORTURE_UTIL] -OBJ_FILES = util_smb.o +OBJ_FILES = util_smb.o util_provision.o PRIVATE_DEPENDENCIES = LIBCLI_RAW PUBLIC_PROTO_HEADER = util.h PUBLIC_DEPENDENCIES = POPT_CREDENTIALS diff --git a/source4/torture/libnet/libnet_BecomeDC.c b/source4/torture/libnet/libnet_BecomeDC.c index 0dd06bda4c..46d9ba769e 100644 --- a/source4/torture/libnet/libnet_BecomeDC.c +++ b/source4/torture/libnet/libnet_BecomeDC.c @@ -36,6 +36,8 @@ #include "system/time.h" #include "auth/auth.h" #include "lib/ldb_wrap.h" +#include "param/param.h" +#include "torture/util.h" struct test_become_dc_state { struct libnet_context *ctx; @@ -90,297 +92,6 @@ static NTSTATUS test_become_dc_check_options(void *private_data, return NT_STATUS_OK; } -#include "lib/appweb/ejs/ejs.h" -#include "lib/appweb/ejs/ejsInternal.h" -#include "scripting/ejs/smbcalls.h" - -static EjsId eid; -static int ejs_error; - -static void test_ejs_exception(const char *reason) -{ - Ejs *ep = ejsPtr(eid); - ejsSetErrorMsg(eid, "%s", reason); - fprintf(stderr, "%s", ep->error); - ejs_error = 127; -} - -static int test_run_ejs(char *script) -{ - EjsHandle handle = 0; - MprVar result; - char *emsg; - TALLOC_CTX *mem_ctx = talloc_new(NULL); - struct MprVar *return_var; - - mprSetCtx(mem_ctx); - - if (ejsOpen(NULL, NULL, NULL) != 0) { - d_printf("ejsOpen(): unable to initialise EJS subsystem\n"); - ejs_error = 127; - goto failed; - } - - smb_setup_ejs_functions(test_ejs_exception); - - if ((eid = ejsOpenEngine(handle, 0)) == (EjsId)-1) { - d_printf("smbscript: ejsOpenEngine(): unable to initialise an EJS engine\n"); - ejs_error = 127; - goto failed; - } - - mprSetVar(ejsGetGlobalObject(eid), "ARGV", mprList("ARGV", NULL)); - - /* run the script */ - if (ejsEvalScript(eid, script, &result, &emsg) == -1) { - d_printf("smbscript: ejsEvalScript(): %s\n", emsg); - if (ejs_error == 0) ejs_error = 127; - goto failed; - } - - return_var = ejsGetReturnValue(eid); - ejs_error = mprVarToNumber(return_var); - -failed: - ejsClose(); - talloc_free(mem_ctx); - return ejs_error; -} - -static NTSTATUS test_become_dc_prepare_db_ejs(void *private_data, - const struct libnet_BecomeDC_PrepareDB *p) -{ - struct test_become_dc_state *s = talloc_get_type(private_data, struct test_become_dc_state); - char *ejs; - int ret; - bool ok; - - DEBUG(0,("Provision for Become-DC test using EJS\n")); - - DEBUG(0,("New Server[%s] in Site[%s]\n", - p->dest_dsa->dns_name, p->dest_dsa->site_name)); - - DEBUG(0,("DSA Instance [%s]\n" - "\tobjectGUID[%s]\n" - "\tinvocationId[%s]\n", - p->dest_dsa->ntds_dn_str, - GUID_string(s, &p->dest_dsa->ntds_guid), - GUID_string(s, &p->dest_dsa->invocation_id))); - - DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" - "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", - lp_private_dir(s->tctx->lp_ctx), - s->path.samdb_ldb, - s->path.secrets_ldb, - s->path.secrets_keytab)); - - DEBUG(0,("Schema Partition[%s => %s]\n", - p->forest->schema_dn_str, s->path.schemadn_ldb)); - - DEBUG(0,("Config Partition[%s => %s]\n", - p->forest->config_dn_str, s->path.configdn_ldb)); - - DEBUG(0,("Domain Partition[%s => %s]\n", - p->domain->dn_str, s->path.domaindn_ldb)); - - ejs = talloc_asprintf(s, - "libinclude(\"base.js\");\n" - "libinclude(\"provision.js\");\n" - "\n" - "function message() { print(vsprintf(arguments)); }\n" - "\n" - "var subobj = provision_guess();\n" - "subobj.ROOTDN = \"%s\";\n" - "subobj.DOMAINDN = \"%s\";\n" - "subobj.DOMAINDN_LDB = \"%s\";\n" - "subobj.CONFIGDN = \"%s\";\n" - "subobj.CONFIGDN_LDB = \"%s\";\n" - "subobj.SCHEMADN = \"%s\";\n" - "subobj.SCHEMADN_LDB = \"%s\";\n" - "subobj.HOSTNAME = \"%s\";\n" - "subobj.REALM = \"%s\";\n" - "subobj.DOMAIN = \"%s\";\n" - "subobj.DEFAULTSITE = \"%s\";\n" - "\n" - "subobj.KRBTGTPASS = \"_NOT_USED_\";\n" - "subobj.MACHINEPASS = \"%s\";\n" - "subobj.ADMINPASS = \"_NOT_USED_\";\n" - "\n" - "var paths = provision_default_paths(subobj);\n" - "paths.samdb = \"%s\";\n" - "paths.secrets = \"%s\";\n" - "paths.templates = \"%s\";\n" - "paths.keytab = \"%s\";\n" - "paths.dns_keytab = \"%s\";\n" - "\n" - "var system_session = system_session();\n" - "\n" - "var ok = provision_become_dc(subobj, message, true, paths, system_session);\n" - "assert(ok);\n" - "\n" - "return 0;\n", - p->forest->root_dn_str, /* subobj.ROOTDN */ - p->domain->dn_str, /* subobj.DOMAINDN */ - s->path.domaindn_ldb, /* subobj.DOMAINDN_LDB */ - p->forest->config_dn_str, /* subobj.CONFIGDN */ - s->path.configdn_ldb, /* subobj.CONFIGDN_LDB */ - p->forest->schema_dn_str, /* subobj.SCHEMADN */ - s->path.schemadn_ldb, /* subobj.SCHEMADN_LDB */ - p->dest_dsa->netbios_name, /* subobj.HOSTNAME */ - torture_join_dom_dns_name(s->tj),/* subobj.REALM */ - torture_join_dom_netbios_name(s->tj),/* subobj.DOMAIN */ - p->dest_dsa->site_name, /* subobj.DEFAULTSITE */ - cli_credentials_get_password(s->machine_account),/* subobj.MACHINEPASS */ - s->path.samdb_ldb, /* paths.samdb */ - s->path.templates_ldb, /* paths.templates */ - s->path.secrets_ldb, /* paths.secrets */ - s->path.secrets_keytab, /* paths.keytab */ - s->path.dns_keytab); /* paths.dns_keytab */ - NT_STATUS_HAVE_NO_MEMORY(ejs); - - ret = test_run_ejs(ejs); - if (ret != 0) { - DEBUG(0,("Failed to run ejs script: %d:\n%s", - ret, ejs)); - talloc_free(ejs); - return NT_STATUS_FOOBAR; - } - talloc_free(ejs); - - talloc_free(s->ldb); - - DEBUG(0,("Open the SAM LDB with system credentials: %s\n", - s->path.samdb_ldb)); - - s->ldb = ldb_wrap_connect(s, s->tctx->lp_ctx, s->path.samdb_ldb, - system_session(s, s->tctx->lp_ctx), - NULL, 0, NULL); - if (!s->ldb) { - DEBUG(0,("Failed to open '%s'\n", - s->path.samdb_ldb)); - return NT_STATUS_INTERNAL_DB_ERROR; - } - - ok = samdb_set_ntds_invocation_id(s->ldb, &p->dest_dsa->invocation_id); - if (!ok) { - DEBUG(0,("Failed to set cached ntds invocationId\n")); - return NT_STATUS_FOOBAR; - } - ok = samdb_set_ntds_objectGUID(s->ldb, &p->dest_dsa->ntds_guid); - if (!ok) { - DEBUG(0,("Failed to set cached ntds objectGUID\n")); - return NT_STATUS_FOOBAR; - } - - return NT_STATUS_OK; -} - -#include "param/param.h" -#include -#include "scripting/python/modules.h" - -static NTSTATUS test_become_dc_prepare_db_py(void *private_data, - const struct libnet_BecomeDC_PrepareDB *p) -{ - struct test_become_dc_state *s = talloc_get_type(private_data, struct test_become_dc_state); - bool ok; - PyObject *provision_fn, *result, *parameters; - - DEBUG(0,("Provision for Become-DC test using PYTHON\n")); - - py_load_samba_modules(); - Py_Initialize(); - - py_update_path("bin"); /* FIXME: Can't assume this always runs in source/... */ - - provision_fn = PyImport_Import(PyString_FromString("samba.provision.provision")); - - if (provision_fn == NULL) { - DEBUG(0, ("Unable to import provision Python module.\n")); - return NT_STATUS_UNSUCCESSFUL; - } - - DEBUG(0,("New Server[%s] in Site[%s]\n", - p->dest_dsa->dns_name, p->dest_dsa->site_name)); - - DEBUG(0,("DSA Instance [%s]\n" - "\tobjectGUID[%s]\n" - "\tinvocationId[%s]\n", - p->dest_dsa->ntds_dn_str, - GUID_string(s, &p->dest_dsa->ntds_guid), - GUID_string(s, &p->dest_dsa->invocation_id))); - - DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" - "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", - lp_private_dir(s->tctx->lp_ctx), - s->path.samdb_ldb, - s->path.secrets_ldb, - s->path.secrets_keytab)); - - DEBUG(0,("Schema Partition[%s => %s]\n", - p->forest->schema_dn_str, s->path.schemadn_ldb)); - - DEBUG(0,("Config Partition[%s => %s]\n", - p->forest->config_dn_str, s->path.configdn_ldb)); - - DEBUG(0,("Domain Partition[%s => %s]\n", - p->domain->dn_str, s->path.domaindn_ldb)); - - parameters = PyDict_New(); - - PyDict_SetItemString(parameters, "rootdn", PyString_FromString(p->forest->root_dn_str)); - PyDict_SetItemString(parameters, "domaindn", PyString_FromString(p->domain->dn_str)); - PyDict_SetItemString(parameters, "domaindn_ldb", PyString_FromString(s->path.domaindn_ldb)); - PyDict_SetItemString(parameters, "configdn", PyString_FromString(p->forest->config_dn_str)); - PyDict_SetItemString(parameters, "configdn_ldb", PyString_FromString(s->path.configdn_ldb)); - PyDict_SetItemString(parameters, "schema_dn_str", PyString_FromString(p->forest->schema_dn_str)); - PyDict_SetItemString(parameters, "schemadn_ldb", PyString_FromString(s->path.schemadn_ldb)); - PyDict_SetItemString(parameters, "netbios_name", PyString_FromString(p->dest_dsa->netbios_name)); - PyDict_SetItemString(parameters, "dnsname", PyString_FromString(p->dest_dsa->dns_name)); - PyDict_SetItemString(parameters, "defaultsite", PyString_FromString(p->dest_dsa->site_name)); - PyDict_SetItemString(parameters, "machinepass", PyString_FromString(cli_credentials_get_password(s->machine_account))); - PyDict_SetItemString(parameters, "samdb", PyString_FromString(s->path.samdb_ldb)); - PyDict_SetItemString(parameters, "secrets_ldb", PyString_FromString(s->path.secrets_ldb)); - PyDict_SetItemString(parameters, "secrets_keytab", PyString_FromString(s->path.secrets_keytab)); - - result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters); - - Py_DECREF(parameters); - - if (result == NULL) { - PyErr_Print(); - PyErr_Clear(); - return NT_STATUS_UNSUCCESSFUL; - } - - talloc_free(s->ldb); - - DEBUG(0,("Open the SAM LDB with system credentials: %s\n", - s->path.samdb_ldb)); - - s->ldb = ldb_wrap_connect(s, s->tctx->lp_ctx, s->path.samdb_ldb, - system_session(s, s->tctx->lp_ctx), - NULL, 0, NULL); - if (!s->ldb) { - DEBUG(0,("Failed to open '%s'\n", - s->path.samdb_ldb)); - return NT_STATUS_INTERNAL_DB_ERROR; - } - - ok = samdb_set_ntds_invocation_id(s->ldb, &p->dest_dsa->invocation_id); - if (!ok) { - DEBUG(0,("Failed to set cached ntds invocationId\n")); - return NT_STATUS_FOOBAR; - } - ok = samdb_set_ntds_objectGUID(s->ldb, &p->dest_dsa->ntds_guid); - if (!ok) { - DEBUG(0,("Failed to set cached ntds objectGUID\n")); - return NT_STATUS_FOOBAR; - } - - return NT_STATUS_OK; -} - static NTSTATUS test_apply_schema(struct test_become_dc_state *s, const struct libnet_BecomeDC_StoreChunk *c) { @@ -876,10 +587,7 @@ bool torture_net_become_dc(struct torture_context *torture) b.in.callbacks.private_data = s; b.in.callbacks.check_options = test_become_dc_check_options; - b.in.callbacks.prepare_db = test_become_dc_prepare_db_py; - if (getenv("PROVISION_EJS")) { - b.in.callbacks.prepare_db = test_become_dc_prepare_db_ejs; - } + b.in.callbacks.prepare_db = test_become_dc_prepare_db; b.in.callbacks.schema_chunk = test_become_dc_schema_chunk; b.in.callbacks.config_chunk = test_become_dc_store_chunk; b.in.callbacks.domain_chunk = test_become_dc_store_chunk; diff --git a/source4/torture/util_provision.c b/source4/torture/util_provision.c new file mode 100644 index 0000000000..3bea5f19a5 --- /dev/null +++ b/source4/torture/util_provision.c @@ -0,0 +1,322 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + Copyright (C) Jelmer Vernooij 2008 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "includes.h" +#include "lib/appweb/ejs/ejs.h" +#include "lib/appweb/ejs/ejsInternal.h" +#include "scripting/ejs/smbcalls.h" + +static EjsId eid; +static int ejs_error; + +static void test_ejs_exception(const char *reason) +{ + Ejs *ep = ejsPtr(eid); + ejsSetErrorMsg(eid, "%s", reason); + fprintf(stderr, "%s", ep->error); + ejs_error = 127; +} + +static int test_run_ejs(char *script) +{ + EjsHandle handle = 0; + MprVar result; + char *emsg; + TALLOC_CTX *mem_ctx = talloc_new(NULL); + struct MprVar *return_var; + + mprSetCtx(mem_ctx); + + if (ejsOpen(NULL, NULL, NULL) != 0) { + d_printf("ejsOpen(): unable to initialise EJS subsystem\n"); + ejs_error = 127; + goto failed; + } + + smb_setup_ejs_functions(test_ejs_exception); + + if ((eid = ejsOpenEngine(handle, 0)) == (EjsId)-1) { + d_printf("smbscript: ejsOpenEngine(): unable to initialise an EJS engine\n"); + ejs_error = 127; + goto failed; + } + + mprSetVar(ejsGetGlobalObject(eid), "ARGV", mprList("ARGV", NULL)); + + /* run the script */ + if (ejsEvalScript(eid, script, &result, &emsg) == -1) { + d_printf("smbscript: ejsEvalScript(): %s\n", emsg); + if (ejs_error == 0) ejs_error = 127; + goto failed; + } + + return_var = ejsGetReturnValue(eid); + ejs_error = mprVarToNumber(return_var); + +failed: + ejsClose(); + talloc_free(mem_ctx); + return ejs_error; +} + +static NTSTATUS test_become_dc_prepare_db_ejs(void *private_data, + const struct libnet_BecomeDC_PrepareDB *p) +{ + struct test_become_dc_state *s = talloc_get_type(private_data, struct test_become_dc_state); + char *ejs; + int ret; + bool ok; + + DEBUG(0,("Provision for Become-DC test using EJS\n")); + + DEBUG(0,("New Server[%s] in Site[%s]\n", + p->dest_dsa->dns_name, p->dest_dsa->site_name)); + + DEBUG(0,("DSA Instance [%s]\n" + "\tobjectGUID[%s]\n" + "\tinvocationId[%s]\n", + p->dest_dsa->ntds_dn_str, + GUID_string(s, &p->dest_dsa->ntds_guid), + GUID_string(s, &p->dest_dsa->invocation_id))); + + DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" + "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", + lp_private_dir(s->tctx->lp_ctx), + s->path.samdb_ldb, + s->path.secrets_ldb, + s->path.secrets_keytab)); + + DEBUG(0,("Schema Partition[%s => %s]\n", + p->forest->schema_dn_str, s->path.schemadn_ldb)); + + DEBUG(0,("Config Partition[%s => %s]\n", + p->forest->config_dn_str, s->path.configdn_ldb)); + + DEBUG(0,("Domain Partition[%s => %s]\n", + p->domain->dn_str, s->path.domaindn_ldb)); + + ejs = talloc_asprintf(s, + "libinclude(\"base.js\");\n" + "libinclude(\"provision.js\");\n" + "\n" + "function message() { print(vsprintf(arguments)); }\n" + "\n" + "var subobj = provision_guess();\n" + "subobj.ROOTDN = \"%s\";\n" + "subobj.DOMAINDN = \"%s\";\n" + "subobj.DOMAINDN_LDB = \"%s\";\n" + "subobj.CONFIGDN = \"%s\";\n" + "subobj.CONFIGDN_LDB = \"%s\";\n" + "subobj.SCHEMADN = \"%s\";\n" + "subobj.SCHEMADN_LDB = \"%s\";\n" + "subobj.HOSTNAME = \"%s\";\n" + "subobj.REALM = \"%s\";\n" + "subobj.DOMAIN = \"%s\";\n" + "subobj.DEFAULTSITE = \"%s\";\n" + "\n" + "subobj.KRBTGTPASS = \"_NOT_USED_\";\n" + "subobj.MACHINEPASS = \"%s\";\n" + "subobj.ADMINPASS = \"_NOT_USED_\";\n" + "\n" + "var paths = provision_default_paths(subobj);\n" + "paths.samdb = \"%s\";\n" + "paths.secrets = \"%s\";\n" + "paths.templates = \"%s\";\n" + "paths.keytab = \"%s\";\n" + "paths.dns_keytab = \"%s\";\n" + "\n" + "var system_session = system_session();\n" + "\n" + "var ok = provision_become_dc(subobj, message, true, paths, system_session);\n" + "assert(ok);\n" + "\n" + "return 0;\n", + p->forest->root_dn_str, /* subobj.ROOTDN */ + p->domain->dn_str, /* subobj.DOMAINDN */ + s->path.domaindn_ldb, /* subobj.DOMAINDN_LDB */ + p->forest->config_dn_str, /* subobj.CONFIGDN */ + s->path.configdn_ldb, /* subobj.CONFIGDN_LDB */ + p->forest->schema_dn_str, /* subobj.SCHEMADN */ + s->path.schemadn_ldb, /* subobj.SCHEMADN_LDB */ + p->dest_dsa->netbios_name, /* subobj.HOSTNAME */ + torture_join_dom_dns_name(s->tj),/* subobj.REALM */ + torture_join_dom_netbios_name(s->tj),/* subobj.DOMAIN */ + p->dest_dsa->site_name, /* subobj.DEFAULTSITE */ + cli_credentials_get_password(s->machine_account),/* subobj.MACHINEPASS */ + s->path.samdb_ldb, /* paths.samdb */ + s->path.templates_ldb, /* paths.templates */ + s->path.secrets_ldb, /* paths.secrets */ + s->path.secrets_keytab, /* paths.keytab */ + s->path.dns_keytab); /* paths.dns_keytab */ + NT_STATUS_HAVE_NO_MEMORY(ejs); + + ret = test_run_ejs(ejs); + if (ret != 0) { + DEBUG(0,("Failed to run ejs script: %d:\n%s", + ret, ejs)); + talloc_free(ejs); + return NT_STATUS_FOOBAR; + } + talloc_free(ejs); + + talloc_free(s->ldb); + + DEBUG(0,("Open the SAM LDB with system credentials: %s\n", + s->path.samdb_ldb)); + + s->ldb = ldb_wrap_connect(s, s->tctx->lp_ctx, s->path.samdb_ldb, + system_session(s, s->tctx->lp_ctx), + NULL, 0, NULL); + if (!s->ldb) { + DEBUG(0,("Failed to open '%s'\n", + s->path.samdb_ldb)); + return NT_STATUS_INTERNAL_DB_ERROR; + } + + ok = samdb_set_ntds_invocation_id(s->ldb, &p->dest_dsa->invocation_id); + if (!ok) { + DEBUG(0,("Failed to set cached ntds invocationId\n")); + return NT_STATUS_FOOBAR; + } + ok = samdb_set_ntds_objectGUID(s->ldb, &p->dest_dsa->ntds_guid); + if (!ok) { + DEBUG(0,("Failed to set cached ntds objectGUID\n")); + return NT_STATUS_FOOBAR; + } + + return NT_STATUS_OK; +} + +#include "param/param.h" +#include +#include "scripting/python/modules.h" + +static NTSTATUS test_become_dc_prepare_db_py(void *private_data, + const struct libnet_BecomeDC_PrepareDB *p) +{ + struct test_become_dc_state *s = talloc_get_type(private_data, struct test_become_dc_state); + bool ok; + PyObject *provision_fn, *result, *parameters; + + DEBUG(0,("Provision for Become-DC test using PYTHON\n")); + + py_load_samba_modules(); + Py_Initialize(); + + py_update_path("bin"); /* FIXME: Can't assume this always runs in source/... */ + + provision_fn = PyImport_Import(PyString_FromString("samba.provision.provision")); + + if (provision_fn == NULL) { + DEBUG(0, ("Unable to import provision Python module.\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + DEBUG(0,("New Server[%s] in Site[%s]\n", + p->dest_dsa->dns_name, p->dest_dsa->site_name)); + + DEBUG(0,("DSA Instance [%s]\n" + "\tobjectGUID[%s]\n" + "\tinvocationId[%s]\n", + p->dest_dsa->ntds_dn_str, + GUID_string(s, &p->dest_dsa->ntds_guid), + GUID_string(s, &p->dest_dsa->invocation_id))); + + DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" + "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", + lp_private_dir(s->tctx->lp_ctx), + s->path.samdb_ldb, + s->path.secrets_ldb, + s->path.secrets_keytab)); + + DEBUG(0,("Schema Partition[%s => %s]\n", + p->forest->schema_dn_str, s->path.schemadn_ldb)); + + DEBUG(0,("Config Partition[%s => %s]\n", + p->forest->config_dn_str, s->path.configdn_ldb)); + + DEBUG(0,("Domain Partition[%s => %s]\n", + p->domain->dn_str, s->path.domaindn_ldb)); + + parameters = PyDict_New(); + + PyDict_SetItemString(parameters, "rootdn", PyString_FromString(p->forest->root_dn_str)); + PyDict_SetItemString(parameters, "domaindn", PyString_FromString(p->domain->dn_str)); + PyDict_SetItemString(parameters, "domaindn_ldb", PyString_FromString(s->path.domaindn_ldb)); + PyDict_SetItemString(parameters, "configdn", PyString_FromString(p->forest->config_dn_str)); + PyDict_SetItemString(parameters, "configdn_ldb", PyString_FromString(s->path.configdn_ldb)); + PyDict_SetItemString(parameters, "schema_dn_str", PyString_FromString(p->forest->schema_dn_str)); + PyDict_SetItemString(parameters, "schemadn_ldb", PyString_FromString(s->path.schemadn_ldb)); + PyDict_SetItemString(parameters, "netbios_name", PyString_FromString(p->dest_dsa->netbios_name)); + PyDict_SetItemString(parameters, "dnsname", PyString_FromString(p->dest_dsa->dns_name)); + PyDict_SetItemString(parameters, "defaultsite", PyString_FromString(p->dest_dsa->site_name)); + PyDict_SetItemString(parameters, "machinepass", PyString_FromString(cli_credentials_get_password(s->machine_account))); + PyDict_SetItemString(parameters, "samdb", PyString_FromString(s->path.samdb_ldb)); + PyDict_SetItemString(parameters, "secrets_ldb", PyString_FromString(s->path.secrets_ldb)); + PyDict_SetItemString(parameters, "secrets_keytab", PyString_FromString(s->path.secrets_keytab)); + + result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters); + + Py_DECREF(parameters); + + if (result == NULL) { + PyErr_Print(); + PyErr_Clear(); + return NT_STATUS_UNSUCCESSFUL; + } + + talloc_free(s->ldb); + + DEBUG(0,("Open the SAM LDB with system credentials: %s\n", + s->path.samdb_ldb)); + + s->ldb = ldb_wrap_connect(s, s->tctx->lp_ctx, s->path.samdb_ldb, + system_session(s, s->tctx->lp_ctx), + NULL, 0, NULL); + if (!s->ldb) { + DEBUG(0,("Failed to open '%s'\n", + s->path.samdb_ldb)); + return NT_STATUS_INTERNAL_DB_ERROR; + } + + ok = samdb_set_ntds_invocation_id(s->ldb, &p->dest_dsa->invocation_id); + if (!ok) { + DEBUG(0,("Failed to set cached ntds invocationId\n")); + return NT_STATUS_FOOBAR; + } + ok = samdb_set_ntds_objectGUID(s->ldb, &p->dest_dsa->ntds_guid); + if (!ok) { + DEBUG(0,("Failed to set cached ntds objectGUID\n")); + return NT_STATUS_FOOBAR; + } + + return NT_STATUS_OK; +} + +NTSTATUS test_become_dc_prepare_db(void *private_data, + const struct libnet_BecomeDC_PrepareDB *p) +{ + if (getenv("PROVISION_EJS")) { + test_become_dc_prepare_db_ejs(private_data, p); + } else { + test_become_dc_prepare_db_py(private_data, p); + } +} + + -- cgit From 18a011d8a822476c3acfe37653ad19c31b904ff0 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 15 Feb 2008 00:23:56 +0100 Subject: Avoid using private libnet test structure inside util_provision. (This used to be commit 1a1f8a5e6b193f25f4838a3e7964cdf0590f4eb2) --- source4/torture/libnet/libnet_BecomeDC.c | 16 +++- source4/torture/util_provision.c | 134 ++++++++++++++++++------------- 2 files changed, 95 insertions(+), 55 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/libnet/libnet_BecomeDC.c b/source4/torture/libnet/libnet_BecomeDC.c index 46d9ba769e..34ae53eb22 100644 --- a/source4/torture/libnet/libnet_BecomeDC.c +++ b/source4/torture/libnet/libnet_BecomeDC.c @@ -34,8 +34,8 @@ #include "librpc/gen_ndr/ndr_drsblobs.h" #include "librpc/gen_ndr/ndr_misc.h" #include "system/time.h" -#include "auth/auth.h" #include "lib/ldb_wrap.h" +#include "auth/auth.h" #include "param/param.h" #include "torture/util.h" @@ -68,6 +68,20 @@ struct test_become_dc_state { } path; }; +static NTSTATUS test_become_dc_prepare_db(void *private_data, + const struct libnet_BecomeDC_PrepareDB *p) +{ + struct test_become_dc_state *s = talloc_get_type(private_data, struct test_become_dc_state); + return provision_bare(s, s->tctx->lp_ctx, p->dest_dsa->dns_name, + p->dest_dsa->site_name, p->forest->root_dn_str, + p->domain->dn_str, p->forest->config_dn_str, + p->forest->schema_dn_str, + &p->dest_dsa->invocation_id, + p->dest_dsa->netbios_name, + torture_join_dom_dns_name(s->tj), + torture_join_dom_netbios_name(s->tj)); +} + static NTSTATUS test_become_dc_check_options(void *private_data, const struct libnet_BecomeDC_CheckOptions *o) { diff --git a/source4/torture/util_provision.c b/source4/torture/util_provision.c index 3bea5f19a5..418137cbeb 100644 --- a/source4/torture/util_provision.c +++ b/source4/torture/util_provision.c @@ -18,9 +18,11 @@ */ #include "includes.h" +#include "dsdb/samdb/samdb.h" #include "lib/appweb/ejs/ejs.h" #include "lib/appweb/ejs/ejsInternal.h" #include "scripting/ejs/smbcalls.h" +#include "auth/auth.h" static EjsId eid; static int ejs_error; @@ -75,43 +77,52 @@ failed: return ejs_error; } -static NTSTATUS test_become_dc_prepare_db_ejs(void *private_data, - const struct libnet_BecomeDC_PrepareDB *p) +static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, + struct loadparm_context *lp_ctx, + const char *dns_name, + const char *site_name, + const char *root_dn_str, + const char *domain_dn_str, + const char *config_dn_str, + const char *schema_dn_str, + const struct GUID *invocation_id, + const char *netbios_name, + const char *realm, + const char *domain) { - struct test_become_dc_state *s = talloc_get_type(private_data, struct test_become_dc_state); char *ejs; int ret; bool ok; + struct ldb_context *ldb; DEBUG(0,("Provision for Become-DC test using EJS\n")); - DEBUG(0,("New Server[%s] in Site[%s]\n", - p->dest_dsa->dns_name, p->dest_dsa->site_name)); + DEBUG(0,("New Server[%s] in Site[%s]\n", dns_name, site_name)); DEBUG(0,("DSA Instance [%s]\n" "\tobjectGUID[%s]\n" "\tinvocationId[%s]\n", p->dest_dsa->ntds_dn_str, - GUID_string(s, &p->dest_dsa->ntds_guid), - GUID_string(s, &p->dest_dsa->invocation_id))); + GUID_string(mem_ctx, &p->dest_dsa->ntds_guid), + GUID_string(mem_ctx, invocation_id))); DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", - lp_private_dir(s->tctx->lp_ctx), + lp_private_dir(lp_ctx), s->path.samdb_ldb, s->path.secrets_ldb, s->path.secrets_keytab)); DEBUG(0,("Schema Partition[%s => %s]\n", - p->forest->schema_dn_str, s->path.schemadn_ldb)); + schema_dn_str, s->path.schemadn_ldb)); DEBUG(0,("Config Partition[%s => %s]\n", - p->forest->config_dn_str, s->path.configdn_ldb)); + config_dn_str, s->path.configdn_ldb)); DEBUG(0,("Domain Partition[%s => %s]\n", - p->domain->dn_str, s->path.domaindn_ldb)); + domain_dn_str, s->path.domaindn_ldb)); - ejs = talloc_asprintf(s, + ejs = talloc_asprintf(mem_ctx, "libinclude(\"base.js\");\n" "libinclude(\"provision.js\");\n" "\n" @@ -147,17 +158,17 @@ static NTSTATUS test_become_dc_prepare_db_ejs(void *private_data, "assert(ok);\n" "\n" "return 0;\n", - p->forest->root_dn_str, /* subobj.ROOTDN */ - p->domain->dn_str, /* subobj.DOMAINDN */ + root_dn_str, /* subobj.ROOTDN */ + domain_dn_str, /* subobj.DOMAINDN */ s->path.domaindn_ldb, /* subobj.DOMAINDN_LDB */ - p->forest->config_dn_str, /* subobj.CONFIGDN */ + config_dn_str, /* subobj.CONFIGDN */ s->path.configdn_ldb, /* subobj.CONFIGDN_LDB */ - p->forest->schema_dn_str, /* subobj.SCHEMADN */ + schema_dn_str, /* subobj.SCHEMADN */ s->path.schemadn_ldb, /* subobj.SCHEMADN_LDB */ - p->dest_dsa->netbios_name, /* subobj.HOSTNAME */ - torture_join_dom_dns_name(s->tj),/* subobj.REALM */ - torture_join_dom_netbios_name(s->tj),/* subobj.DOMAIN */ - p->dest_dsa->site_name, /* subobj.DEFAULTSITE */ + netbios_name, /* subobj.HOSTNAME */ + realm,/* subobj.REALM */ + domain,/* subobj.DOMAIN */ + site_name, /* subobj.DEFAULTSITE */ cli_credentials_get_password(s->machine_account),/* subobj.MACHINEPASS */ s->path.samdb_ldb, /* paths.samdb */ s->path.templates_ldb, /* paths.templates */ @@ -175,26 +186,26 @@ static NTSTATUS test_become_dc_prepare_db_ejs(void *private_data, } talloc_free(ejs); - talloc_free(s->ldb); + talloc_free(ldb); DEBUG(0,("Open the SAM LDB with system credentials: %s\n", s->path.samdb_ldb)); - s->ldb = ldb_wrap_connect(s, s->tctx->lp_ctx, s->path.samdb_ldb, - system_session(s, s->tctx->lp_ctx), + ldb = ldb_wrap_connect(mem_ctx, lp_ctx, s->path.samdb_ldb, + system_session(mem_ctx, lp_ctx), NULL, 0, NULL); - if (!s->ldb) { + if (!ldb) { DEBUG(0,("Failed to open '%s'\n", s->path.samdb_ldb)); return NT_STATUS_INTERNAL_DB_ERROR; } - ok = samdb_set_ntds_invocation_id(s->ldb, &p->dest_dsa->invocation_id); + ok = samdb_set_ntds_invocation_id(ldb, invocation_id); if (!ok) { DEBUG(0,("Failed to set cached ntds invocationId\n")); return NT_STATUS_FOOBAR; } - ok = samdb_set_ntds_objectGUID(s->ldb, &p->dest_dsa->ntds_guid); + ok = samdb_set_ntds_objectGUID(ldb, &p->dest_dsa->ntds_guid); if (!ok) { DEBUG(0,("Failed to set cached ntds objectGUID\n")); return NT_STATUS_FOOBAR; @@ -207,10 +218,17 @@ static NTSTATUS test_become_dc_prepare_db_ejs(void *private_data, #include #include "scripting/python/modules.h" -static NTSTATUS test_become_dc_prepare_db_py(void *private_data, - const struct libnet_BecomeDC_PrepareDB *p) +static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, + struct loadparm_context *lp_ctx, + const char *dns_name, + const char *site_name, + const char *root_dn_str, + const char *domain_dn_str, + const char *config_dn_str, + const char *schema_dn_str, + const struct GUID *invocation_id, + const char *domain) { - struct test_become_dc_state *s = talloc_get_type(private_data, struct test_become_dc_state); bool ok; PyObject *provision_fn, *result, *parameters; @@ -228,44 +246,43 @@ static NTSTATUS test_become_dc_prepare_db_py(void *private_data, return NT_STATUS_UNSUCCESSFUL; } - DEBUG(0,("New Server[%s] in Site[%s]\n", - p->dest_dsa->dns_name, p->dest_dsa->site_name)); + DEBUG(0,("New Server[%s] in Site[%s]\n", dns_name, site_name)); DEBUG(0,("DSA Instance [%s]\n" "\tobjectGUID[%s]\n" "\tinvocationId[%s]\n", p->dest_dsa->ntds_dn_str, - GUID_string(s, &p->dest_dsa->ntds_guid), - GUID_string(s, &p->dest_dsa->invocation_id))); + GUID_string(mem_ctx, &p->dest_dsa->ntds_guid), + GUID_string(mem_ctx, invocation_id))); DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", - lp_private_dir(s->tctx->lp_ctx), + lp_private_dir(lp_ctx), s->path.samdb_ldb, s->path.secrets_ldb, s->path.secrets_keytab)); DEBUG(0,("Schema Partition[%s => %s]\n", - p->forest->schema_dn_str, s->path.schemadn_ldb)); + schema_dn_str, s->path.schemadn_ldb)); DEBUG(0,("Config Partition[%s => %s]\n", - p->forest->config_dn_str, s->path.configdn_ldb)); + config_dn_str, s->path.configdn_ldb)); DEBUG(0,("Domain Partition[%s => %s]\n", - p->domain->dn_str, s->path.domaindn_ldb)); + domain_dn_str, s->path.domaindn_ldb)); parameters = PyDict_New(); - PyDict_SetItemString(parameters, "rootdn", PyString_FromString(p->forest->root_dn_str)); - PyDict_SetItemString(parameters, "domaindn", PyString_FromString(p->domain->dn_str)); + PyDict_SetItemString(parameters, "rootdn", PyString_FromString(root_dn_str)); + PyDict_SetItemString(parameters, "domaindn", PyString_FromString(domain_dn_str)); PyDict_SetItemString(parameters, "domaindn_ldb", PyString_FromString(s->path.domaindn_ldb)); - PyDict_SetItemString(parameters, "configdn", PyString_FromString(p->forest->config_dn_str)); + PyDict_SetItemString(parameters, "configdn", PyString_FromString(config_dn_str)); PyDict_SetItemString(parameters, "configdn_ldb", PyString_FromString(s->path.configdn_ldb)); - PyDict_SetItemString(parameters, "schema_dn_str", PyString_FromString(p->forest->schema_dn_str)); + PyDict_SetItemString(parameters, "schema_dn_str", PyString_FromString(schema_dn_str)); PyDict_SetItemString(parameters, "schemadn_ldb", PyString_FromString(s->path.schemadn_ldb)); - PyDict_SetItemString(parameters, "netbios_name", PyString_FromString(p->dest_dsa->netbios_name)); - PyDict_SetItemString(parameters, "dnsname", PyString_FromString(p->dest_dsa->dns_name)); - PyDict_SetItemString(parameters, "defaultsite", PyString_FromString(p->dest_dsa->site_name)); + PyDict_SetItemString(parameters, "netbios_name", PyString_FromString(netbios_name)); + PyDict_SetItemString(parameters, "dnsname", PyString_FromString(dns_name)); + PyDict_SetItemString(parameters, "defaultsite", PyString_FromString(site_name)); PyDict_SetItemString(parameters, "machinepass", PyString_FromString(cli_credentials_get_password(s->machine_account))); PyDict_SetItemString(parameters, "samdb", PyString_FromString(s->path.samdb_ldb)); PyDict_SetItemString(parameters, "secrets_ldb", PyString_FromString(s->path.secrets_ldb)); @@ -281,26 +298,26 @@ static NTSTATUS test_become_dc_prepare_db_py(void *private_data, return NT_STATUS_UNSUCCESSFUL; } - talloc_free(s->ldb); + talloc_free(ldb); DEBUG(0,("Open the SAM LDB with system credentials: %s\n", s->path.samdb_ldb)); - s->ldb = ldb_wrap_connect(s, s->tctx->lp_ctx, s->path.samdb_ldb, - system_session(s, s->tctx->lp_ctx), + ldb = ldb_wrap_connect(s, lp_ctx, s->path.samdb_ldb, + system_session(s, lp_ctx), NULL, 0, NULL); - if (!s->ldb) { + if (!ldb) { DEBUG(0,("Failed to open '%s'\n", s->path.samdb_ldb)); return NT_STATUS_INTERNAL_DB_ERROR; } - ok = samdb_set_ntds_invocation_id(s->ldb, &p->dest_dsa->invocation_id); + ok = samdb_set_ntds_invocation_id(ldb, invocation_id); if (!ok) { DEBUG(0,("Failed to set cached ntds invocationId\n")); return NT_STATUS_FOOBAR; } - ok = samdb_set_ntds_objectGUID(s->ldb, &p->dest_dsa->ntds_guid); + ok = samdb_set_ntds_objectGUID(ldb, &p->dest_dsa->ntds_guid); if (!ok) { DEBUG(0,("Failed to set cached ntds objectGUID\n")); return NT_STATUS_FOOBAR; @@ -309,13 +326,22 @@ static NTSTATUS test_become_dc_prepare_db_py(void *private_data, return NT_STATUS_OK; } -NTSTATUS test_become_dc_prepare_db(void *private_data, - const struct libnet_BecomeDC_PrepareDB *p) +NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, + const char *dns_name, const char *site_name, + const char *root_dn_str, const char *domain_dn_str, + const char *config_dn_str, const char *schema_dn_str, + const struct GUID *invocation_id, + const char *netbios_name, const char *realm, + const char *domain) { if (getenv("PROVISION_EJS")) { - test_become_dc_prepare_db_ejs(private_data, p); + provision_bare_ejs(mem_ctx, lp_ctx, dns_name, site_name, root_dn_str, + domain_dn_str, config_dn_str, schema_dn_str, + invocation_id, netbios_name, realm, domain); } else { - test_become_dc_prepare_db_py(private_data, p); + provision_bare_py(mem_ctx, lp_ctx, dns_name, site_name, root_dn_str, + domain_dn_str, config_dn_str, schema_dn_str, + invocation_id, netbios_name, realm, domain); } } -- cgit From 1f5cec6f405f8f4446d39a0b520cc3bae1f17ad6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 15 Feb 2008 00:35:17 +0100 Subject: Move Python dependencies. (This used to be commit f6c5b787cc031ddf858d7b16f455692a98a19b9e) --- source4/torture/config.mk | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 648c62f98e..f94d8db929 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -15,7 +15,7 @@ PUBLIC_DEPENDENCIES = \ [SUBSYSTEM::TORTURE_UTIL] OBJ_FILES = util_smb.o util_provision.o -PRIVATE_DEPENDENCIES = LIBCLI_RAW +PRIVATE_DEPENDENCIES = LIBCLI_RAW LIBPYTHON PUBLIC_PROTO_HEADER = util.h PUBLIC_DEPENDENCIES = POPT_CREDENTIALS @@ -297,8 +297,7 @@ PRIVATE_DEPENDENCIES = \ LIBSAMBA-NET \ smbcalls \ POPT_CREDENTIALS \ - torture_rpc \ - LIBPYTHON + torture_rpc # End SUBSYSTEM TORTURE_NET ################################# -- cgit From 3d6da3b162561b756a002c54f94a6739cfbb08fe Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 15 Feb 2008 01:16:12 +0100 Subject: Finish migration of provision code. (This used to be commit 53c5924195844dac4dfe99e5c9b0c8911394497a) --- source4/torture/config.mk | 3 +- source4/torture/libnet/libnet_BecomeDC.c | 8 +- source4/torture/util_provision.c | 149 ++++++++++++++++++++----------- 3 files changed, 103 insertions(+), 57 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index f94d8db929..bcb3233ce4 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -15,7 +15,7 @@ PUBLIC_DEPENDENCIES = \ [SUBSYSTEM::TORTURE_UTIL] OBJ_FILES = util_smb.o util_provision.o -PRIVATE_DEPENDENCIES = LIBCLI_RAW LIBPYTHON +PRIVATE_DEPENDENCIES = LIBCLI_RAW LIBPYTHON smbcalls PUBLIC_PROTO_HEADER = util.h PUBLIC_DEPENDENCIES = POPT_CREDENTIALS @@ -295,7 +295,6 @@ OBJ_FILES = \ libnet/libnet_BecomeDC.o PRIVATE_DEPENDENCIES = \ LIBSAMBA-NET \ - smbcalls \ POPT_CREDENTIALS \ torture_rpc # End SUBSYSTEM TORTURE_NET diff --git a/source4/torture/libnet/libnet_BecomeDC.c b/source4/torture/libnet/libnet_BecomeDC.c index 34ae53eb22..83d7426dfb 100644 --- a/source4/torture/libnet/libnet_BecomeDC.c +++ b/source4/torture/libnet/libnet_BecomeDC.c @@ -79,7 +79,13 @@ static NTSTATUS test_become_dc_prepare_db(void *private_data, &p->dest_dsa->invocation_id, p->dest_dsa->netbios_name, torture_join_dom_dns_name(s->tj), - torture_join_dom_netbios_name(s->tj)); + torture_join_dom_netbios_name(s->tj), + &p->dest_dsa->ntds_guid, + p->dest_dsa->ntds_dn_str, + cli_credentials_get_password(s->machine_account), + s->path.samdb_ldb, s->path.secrets_ldb, + s->path.secrets_keytab, s->path.schemadn_ldb, + s->path.configdn_ldb, s->path.domaindn_ldb); } static NTSTATUS test_become_dc_check_options(void *private_data, diff --git a/source4/torture/util_provision.c b/source4/torture/util_provision.c index 418137cbeb..bc4f3d2b28 100644 --- a/source4/torture/util_provision.c +++ b/source4/torture/util_provision.c @@ -23,6 +23,7 @@ #include "lib/appweb/ejs/ejsInternal.h" #include "scripting/ejs/smbcalls.h" #include "auth/auth.h" +#include "lib/ldb_wrap.h" static EjsId eid; static int ejs_error; @@ -88,7 +89,18 @@ static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, const struct GUID *invocation_id, const char *netbios_name, const char *realm, - const char *domain) + const char *domain, + const struct GUID *ntds_guid, + const char *ntds_dn_str, + const char *machine_password, + const char *samdb_ldb, + const char *secrets_ldb, + const char *secrets_keytab, + const char *schemadn_ldb, + const char *configdn_ldb, + const char *domaindn_ldb, + const char *templates_ldb, + const char *dns_keytab) { char *ejs; int ret; @@ -102,25 +114,25 @@ static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, DEBUG(0,("DSA Instance [%s]\n" "\tobjectGUID[%s]\n" "\tinvocationId[%s]\n", - p->dest_dsa->ntds_dn_str, - GUID_string(mem_ctx, &p->dest_dsa->ntds_guid), + ntds_dn_str, + GUID_string(mem_ctx, ntds_guid), GUID_string(mem_ctx, invocation_id))); DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", lp_private_dir(lp_ctx), - s->path.samdb_ldb, - s->path.secrets_ldb, - s->path.secrets_keytab)); + samdb_ldb, + secrets_ldb, + secrets_keytab)); DEBUG(0,("Schema Partition[%s => %s]\n", - schema_dn_str, s->path.schemadn_ldb)); + schema_dn_str, schemadn_ldb)); DEBUG(0,("Config Partition[%s => %s]\n", - config_dn_str, s->path.configdn_ldb)); + config_dn_str, configdn_ldb)); DEBUG(0,("Domain Partition[%s => %s]\n", - domain_dn_str, s->path.domaindn_ldb)); + domain_dn_str, domaindn_ldb)); ejs = talloc_asprintf(mem_ctx, "libinclude(\"base.js\");\n" @@ -160,21 +172,21 @@ static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, "return 0;\n", root_dn_str, /* subobj.ROOTDN */ domain_dn_str, /* subobj.DOMAINDN */ - s->path.domaindn_ldb, /* subobj.DOMAINDN_LDB */ + domaindn_ldb, /* subobj.DOMAINDN_LDB */ config_dn_str, /* subobj.CONFIGDN */ - s->path.configdn_ldb, /* subobj.CONFIGDN_LDB */ + configdn_ldb, /* subobj.CONFIGDN_LDB */ schema_dn_str, /* subobj.SCHEMADN */ - s->path.schemadn_ldb, /* subobj.SCHEMADN_LDB */ + schemadn_ldb, /* subobj.SCHEMADN_LDB */ netbios_name, /* subobj.HOSTNAME */ realm,/* subobj.REALM */ domain,/* subobj.DOMAIN */ site_name, /* subobj.DEFAULTSITE */ - cli_credentials_get_password(s->machine_account),/* subobj.MACHINEPASS */ - s->path.samdb_ldb, /* paths.samdb */ - s->path.templates_ldb, /* paths.templates */ - s->path.secrets_ldb, /* paths.secrets */ - s->path.secrets_keytab, /* paths.keytab */ - s->path.dns_keytab); /* paths.dns_keytab */ + machine_password,/* subobj.MACHINEPASS */ + samdb_ldb, /* paths.samdb */ + templates_ldb, /* paths.templates */ + secrets_ldb, /* paths.secrets */ + secrets_keytab, /* paths.keytab */ + dns_keytab); /* paths.dns_keytab */ NT_STATUS_HAVE_NO_MEMORY(ejs); ret = test_run_ejs(ejs); @@ -186,17 +198,15 @@ static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, } talloc_free(ejs); - talloc_free(ldb); - DEBUG(0,("Open the SAM LDB with system credentials: %s\n", - s->path.samdb_ldb)); + samdb_ldb)); - ldb = ldb_wrap_connect(mem_ctx, lp_ctx, s->path.samdb_ldb, + ldb = ldb_wrap_connect(mem_ctx, lp_ctx, samdb_ldb, system_session(mem_ctx, lp_ctx), NULL, 0, NULL); if (!ldb) { DEBUG(0,("Failed to open '%s'\n", - s->path.samdb_ldb)); + samdb_ldb)); return NT_STATUS_INTERNAL_DB_ERROR; } @@ -205,7 +215,7 @@ static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, DEBUG(0,("Failed to set cached ntds invocationId\n")); return NT_STATUS_FOOBAR; } - ok = samdb_set_ntds_objectGUID(ldb, &p->dest_dsa->ntds_guid); + ok = samdb_set_ntds_objectGUID(ldb, ntds_guid); if (!ok) { DEBUG(0,("Failed to set cached ntds objectGUID\n")); return NT_STATUS_FOOBAR; @@ -227,10 +237,23 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, const char *config_dn_str, const char *schema_dn_str, const struct GUID *invocation_id, - const char *domain) + const char *netbios_name, const char *realm, + const char *domain, + const struct GUID *ntds_guid, + const char *ntds_dn_str, + const char *machine_password, + const char *samdb_ldb, + const char *secrets_ldb, + const char *secrets_keytab, + const char *schemadn_ldb, + const char *configdn_ldb, + const char *domaindn_ldb, + const char *templates_ldb, + const char *dns_keytab) { bool ok; PyObject *provision_fn, *result, *parameters; + struct ldb_context *ldb; DEBUG(0,("Provision for Become-DC test using PYTHON\n")); @@ -251,42 +274,42 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, DEBUG(0,("DSA Instance [%s]\n" "\tobjectGUID[%s]\n" "\tinvocationId[%s]\n", - p->dest_dsa->ntds_dn_str, - GUID_string(mem_ctx, &p->dest_dsa->ntds_guid), + ntds_dn_str, + GUID_string(mem_ctx, ntds_guid), GUID_string(mem_ctx, invocation_id))); DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", lp_private_dir(lp_ctx), - s->path.samdb_ldb, - s->path.secrets_ldb, - s->path.secrets_keytab)); + samdb_ldb, + secrets_ldb, + secrets_keytab)); DEBUG(0,("Schema Partition[%s => %s]\n", - schema_dn_str, s->path.schemadn_ldb)); + schema_dn_str, schemadn_ldb)); DEBUG(0,("Config Partition[%s => %s]\n", - config_dn_str, s->path.configdn_ldb)); + config_dn_str, configdn_ldb)); DEBUG(0,("Domain Partition[%s => %s]\n", - domain_dn_str, s->path.domaindn_ldb)); + domain_dn_str, domaindn_ldb)); parameters = PyDict_New(); PyDict_SetItemString(parameters, "rootdn", PyString_FromString(root_dn_str)); PyDict_SetItemString(parameters, "domaindn", PyString_FromString(domain_dn_str)); - PyDict_SetItemString(parameters, "domaindn_ldb", PyString_FromString(s->path.domaindn_ldb)); + PyDict_SetItemString(parameters, "domaindn_ldb", PyString_FromString(domaindn_ldb)); PyDict_SetItemString(parameters, "configdn", PyString_FromString(config_dn_str)); - PyDict_SetItemString(parameters, "configdn_ldb", PyString_FromString(s->path.configdn_ldb)); + PyDict_SetItemString(parameters, "configdn_ldb", PyString_FromString(configdn_ldb)); PyDict_SetItemString(parameters, "schema_dn_str", PyString_FromString(schema_dn_str)); - PyDict_SetItemString(parameters, "schemadn_ldb", PyString_FromString(s->path.schemadn_ldb)); + PyDict_SetItemString(parameters, "schemadn_ldb", PyString_FromString(schemadn_ldb)); PyDict_SetItemString(parameters, "netbios_name", PyString_FromString(netbios_name)); PyDict_SetItemString(parameters, "dnsname", PyString_FromString(dns_name)); PyDict_SetItemString(parameters, "defaultsite", PyString_FromString(site_name)); - PyDict_SetItemString(parameters, "machinepass", PyString_FromString(cli_credentials_get_password(s->machine_account))); - PyDict_SetItemString(parameters, "samdb", PyString_FromString(s->path.samdb_ldb)); - PyDict_SetItemString(parameters, "secrets_ldb", PyString_FromString(s->path.secrets_ldb)); - PyDict_SetItemString(parameters, "secrets_keytab", PyString_FromString(s->path.secrets_keytab)); + PyDict_SetItemString(parameters, "machinepass", PyString_FromString(machine_password)); + PyDict_SetItemString(parameters, "samdb", PyString_FromString(samdb_ldb)); + PyDict_SetItemString(parameters, "secrets_ldb", PyString_FromString(secrets_ldb)); + PyDict_SetItemString(parameters, "secrets_keytab", PyString_FromString(secrets_keytab)); result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters); @@ -298,17 +321,15 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, return NT_STATUS_UNSUCCESSFUL; } - talloc_free(ldb); - DEBUG(0,("Open the SAM LDB with system credentials: %s\n", - s->path.samdb_ldb)); + samdb_ldb)); - ldb = ldb_wrap_connect(s, lp_ctx, s->path.samdb_ldb, - system_session(s, lp_ctx), + ldb = ldb_wrap_connect(mem_ctx, lp_ctx, samdb_ldb, + system_session(mem_ctx, lp_ctx), NULL, 0, NULL); if (!ldb) { DEBUG(0,("Failed to open '%s'\n", - s->path.samdb_ldb)); + samdb_ldb)); return NT_STATUS_INTERNAL_DB_ERROR; } @@ -317,7 +338,7 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, DEBUG(0,("Failed to set cached ntds invocationId\n")); return NT_STATUS_FOOBAR; } - ok = samdb_set_ntds_objectGUID(ldb, &p->dest_dsa->ntds_guid); + ok = samdb_set_ntds_objectGUID(ldb, ntds_guid); if (!ok) { DEBUG(0,("Failed to set cached ntds objectGUID\n")); return NT_STATUS_FOOBAR; @@ -332,16 +353,36 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, const char *config_dn_str, const char *schema_dn_str, const struct GUID *invocation_id, const char *netbios_name, const char *realm, - const char *domain) + const char *domain, const struct GUID *ntds_guid, + const char *ntds_dn_str, + const char *machine_password, + const char *samdb_ldb, + const char *secrets_ldb, + const char *secrets_keytab, + const char *schemadn_ldb, + const char *configdn_ldb, + const char *domaindn_ldb, + const char *templates_ldb, + const char *dns_keytab) { if (getenv("PROVISION_EJS")) { - provision_bare_ejs(mem_ctx, lp_ctx, dns_name, site_name, root_dn_str, - domain_dn_str, config_dn_str, schema_dn_str, - invocation_id, netbios_name, realm, domain); + return provision_bare_ejs(mem_ctx, lp_ctx, dns_name, site_name, + root_dn_str, domain_dn_str, config_dn_str, + schema_dn_str, invocation_id, netbios_name, + realm, domain, ntds_guid, ntds_dn_str, + machine_password, samdb_ldb, secrets_ldb, + secrets_keytab, schemadn_ldb, configdn_ldb, + domaindn_ldb, templates_ldb, + dns_keytab); } else { - provision_bare_py(mem_ctx, lp_ctx, dns_name, site_name, root_dn_str, - domain_dn_str, config_dn_str, schema_dn_str, - invocation_id, netbios_name, realm, domain); + return provision_bare_py(mem_ctx, lp_ctx, dns_name, site_name, + root_dn_str, domain_dn_str, config_dn_str, + schema_dn_str, invocation_id, netbios_name, + realm, domain, ntds_guid, ntds_dn_str, + machine_password, samdb_ldb, secrets_ldb, + secrets_keytab, schemadn_ldb, configdn_ldb, + domaindn_ldb, templates_ldb, + dns_keytab); } } -- cgit From d499dfd9388f39d0b45ba586169bd3c4b7138dd7 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 15 Feb 2008 01:37:57 +0100 Subject: Add test for provision_bare() code. (This used to be commit 0f3a1dbb5355bf5181d9a100af35be8a7f292be6) --- source4/torture/local/torture.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'source4/torture') diff --git a/source4/torture/local/torture.c b/source4/torture/local/torture.c index b57361bc8d..7d12c467df 100644 --- a/source4/torture/local/torture.c +++ b/source4/torture/local/torture.c @@ -39,12 +39,33 @@ static bool test_tempdir(struct torture_context *tctx) return true; } +static bool test_provision(struct torture_context *tctx) +{ + NTSTATUS status; + + status = provision_bare(tctx, tctx->lp_ctx, + "example.com", "SOME-SITE-NAME", + "DC=EXAMPLE,DC=COM", + "DC=EXAMPLE,DC=COM", + NULL, NULL, NULL, + "FOO", "EXAMPLE.COM", + "EXAMPLE", NULL, + NULL, "geheim", + NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL); + + torture_assert_ntstatus_ok(tctx, status, "provision"); + + return true; +} + struct torture_suite *torture_local_torture(TALLOC_CTX *mem_ctx) { struct torture_suite *suite = torture_suite_create(mem_ctx, "TORTURE"); torture_suite_add_simple_test(suite, "tempdir", test_tempdir); + torture_suite_add_simple_test(suite, "provision", test_provision); return suite; } -- cgit From b5f329602b3cd044cabb9ea0945724a307139eb9 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 15 Feb 2008 02:12:37 +0100 Subject: Add ability to not specify certain provision options(), fix some other options. (This used to be commit fe8bfda22d8e1fdbece4209b7489419074565efd) --- source4/torture/util_provision.c | 66 ++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 19 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/util_provision.c b/source4/torture/util_provision.c index bc4f3d2b28..5873b9f485 100644 --- a/source4/torture/util_provision.c +++ b/source4/torture/util_provision.c @@ -252,22 +252,36 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, const char *dns_keytab) { bool ok; - PyObject *provision_fn, *result, *parameters; + PyObject *provision_mod, *provision_dict, *provision_fn, *result, *parameters; struct ldb_context *ldb; DEBUG(0,("Provision for Become-DC test using PYTHON\n")); py_load_samba_modules(); Py_Initialize(); + py_update_path("bin"); /* FIXME: Can't assume this is always the case */ - py_update_path("bin"); /* FIXME: Can't assume this always runs in source/... */ + provision_mod = PyImport_Import(PyString_FromString("samba.provision")); - provision_fn = PyImport_Import(PyString_FromString("samba.provision.provision")); - - if (provision_fn == NULL) { + if (provision_mod == NULL) { + PyErr_Print(); DEBUG(0, ("Unable to import provision Python module.\n")); return NT_STATUS_UNSUCCESSFUL; } + + provision_dict = PyModule_GetDict(provision_mod); + + if (provision_dict == NULL) { + DEBUG(0, ("Unable to get dictionary for provision module\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + provision_fn = PyDict_GetItemString(provision_dict, "provision"); + if (provision_fn == NULL) { + PyErr_Print(); + DEBUG(0, ("Unable to get provision function\n")); + return NT_STATUS_UNSUCCESSFUL; + } DEBUG(0,("New Server[%s] in Site[%s]\n", dns_name, site_name)); @@ -275,8 +289,8 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, "\tobjectGUID[%s]\n" "\tinvocationId[%s]\n", ntds_dn_str, - GUID_string(mem_ctx, ntds_guid), - GUID_string(mem_ctx, invocation_id))); + ntds_guid == NULL?"None":GUID_string(mem_ctx, ntds_guid), + invocation_id == NULL?"None":GUID_string(mem_ctx, invocation_id))); DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", @@ -297,19 +311,33 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, parameters = PyDict_New(); PyDict_SetItemString(parameters, "rootdn", PyString_FromString(root_dn_str)); - PyDict_SetItemString(parameters, "domaindn", PyString_FromString(domain_dn_str)); - PyDict_SetItemString(parameters, "domaindn_ldb", PyString_FromString(domaindn_ldb)); - PyDict_SetItemString(parameters, "configdn", PyString_FromString(config_dn_str)); - PyDict_SetItemString(parameters, "configdn_ldb", PyString_FromString(configdn_ldb)); - PyDict_SetItemString(parameters, "schema_dn_str", PyString_FromString(schema_dn_str)); - PyDict_SetItemString(parameters, "schemadn_ldb", PyString_FromString(schemadn_ldb)); - PyDict_SetItemString(parameters, "netbios_name", PyString_FromString(netbios_name)); - PyDict_SetItemString(parameters, "dnsname", PyString_FromString(dns_name)); - PyDict_SetItemString(parameters, "defaultsite", PyString_FromString(site_name)); + if (domaindn_ldb != NULL) + PyDict_SetItemString(parameters, "domaindn_ldb", + PyString_FromString(domaindn_ldb)); + if (config_dn_str != NULL) + PyDict_SetItemString(parameters, "configdn", + PyString_FromString(config_dn_str)); + if (configdn_ldb != NULL) + PyDict_SetItemString(parameters, "configdn_ldb", + PyString_FromString(configdn_ldb)); + if (schema_dn_str != NULL) + PyDict_SetItemString(parameters, "schema_dn_str", + PyString_FromString(schema_dn_str)); + if (schemadn_ldb != NULL) + PyDict_SetItemString(parameters, "schemadn_ldb", + PyString_FromString(schemadn_ldb)); + PyDict_SetItemString(parameters, "hostname", PyString_FromString(netbios_name)); + PyDict_SetItemString(parameters, "sitename", PyString_FromString(site_name)); PyDict_SetItemString(parameters, "machinepass", PyString_FromString(machine_password)); - PyDict_SetItemString(parameters, "samdb", PyString_FromString(samdb_ldb)); - PyDict_SetItemString(parameters, "secrets_ldb", PyString_FromString(secrets_ldb)); - PyDict_SetItemString(parameters, "secrets_keytab", PyString_FromString(secrets_keytab)); + if (samdb_ldb != NULL) + PyDict_SetItemString(parameters, "samdb", + PyString_FromString(samdb_ldb)); + if (secrets_ldb != NULL) + PyDict_SetItemString(parameters, "secrets_ldb", + PyString_FromString(secrets_ldb)); + if (secrets_keytab != NULL) + PyDict_SetItemString(parameters, "secrets_keytab", + PyString_FromString(secrets_keytab)); result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters); -- cgit From 60b314428008878f949b9fba54825c2f4f900288 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Feb 2008 13:29:32 +1100 Subject: fixed loadparm handling in standalone tests (This used to be commit 2633f4259ed30ab990017c4c3205f92bf38f0135) --- source4/torture/gentest.c | 2 +- source4/torture/locktest.c | 2 +- source4/torture/masktest.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/gentest.c b/source4/torture/gentest.c index d50393baf0..8fa433a872 100644 --- a/source4/torture/gentest.c +++ b/source4/torture/gentest.c @@ -2205,7 +2205,7 @@ static bool split_unc_name(const char *unc, char **server, char **share) argc -= NSERVERS; argv += NSERVERS; - lp_ctx = loadparm_init(talloc_autofree_context()); + global_loadparm = lp_ctx = loadparm_init(talloc_autofree_context()); lp_load(lp_ctx, dyn_CONFIGFILE); servers[0].credentials = cli_credentials_init(talloc_autofree_context()); diff --git a/source4/torture/locktest.c b/source4/torture/locktest.c index 90e2eec2be..119b5186d9 100644 --- a/source4/torture/locktest.c +++ b/source4/torture/locktest.c @@ -572,7 +572,7 @@ static void usage(void) argc -= NSERVERS; argv += NSERVERS; - lp_ctx = loadparm_init(talloc_autofree_context()); + global_loadparm = lp_ctx = loadparm_init(talloc_autofree_context()); lp_load(lp_ctx, dyn_CONFIGFILE); servers[0] = cli_credentials_init(talloc_autofree_context()); diff --git a/source4/torture/masktest.c b/source4/torture/masktest.c index d1b853de72..855da54340 100644 --- a/source4/torture/masktest.c +++ b/source4/torture/masktest.c @@ -325,7 +325,7 @@ static void usage(void) argc -= 1; argv += 1; - lp_ctx = loadparm_init(talloc_autofree_context()); + global_loadparm = lp_ctx = loadparm_init(talloc_autofree_context()); lp_load(lp_ctx, dyn_CONFIGFILE); credentials = cli_credentials_init(talloc_autofree_context()); -- cgit From 66e8bc9dac291946986d1eb202fc2ed584330118 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Feb 2008 14:55:31 +1100 Subject: converted locktest to use popt and cmdline utility code (This used to be commit 625ea49a95cbdb507ea5b191f75ffa27e25cdb90) --- source4/torture/config.mk | 3 + source4/torture/locktest.c | 162 +++++++++++++++++++-------------------------- 2 files changed, 71 insertions(+), 94 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 0c5e641b4b..18e5ea70ec 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -362,6 +362,9 @@ INSTALLDIR = BINDIR OBJ_FILES = \ locktest.o PRIVATE_DEPENDENCIES = \ + LIBPOPT \ + POPT_SAMBA \ + POPT_CREDENTIALS \ LIBSAMBA-UTIL \ LIBCLI_SMB \ LIBSAMBA-CONFIG diff --git a/source4/torture/locktest.c b/source4/torture/locktest.c index 119b5186d9..ebc325fe2b 100644 --- a/source4/torture/locktest.c +++ b/source4/torture/locktest.c @@ -18,6 +18,7 @@ */ #include "includes.h" +#include "lib/cmdline/popt_common.h" #include "system/filesys.h" #include "system/time.h" #include "pstring.h" @@ -29,15 +30,15 @@ #include "libcli/resolve/resolve.h" static int numops = 1000; -static bool showall; -static bool analyze; -static bool hide_unlock_fails; -static bool use_oplocks; +static int showall; +static int analyze; +static int hide_unlock_fails; +static int use_oplocks; static uint_t lock_range = 100; static uint_t lock_base = 0; static uint_t min_length = 0; -static bool exact_error_codes; -static bool zero_zero; +static int exact_error_codes; +static int zero_zero; #define FILENAME "\\locktest.dat" @@ -520,26 +521,10 @@ static void test_locks(struct loadparm_context *lp_ctx, char *share[NSERVERS]) -static void usage(void) +_NORETURN_ static void usage(poptContext pc) { - printf( -"Usage:\n\ - locktest //server1/share1 //server2/share2 [options..]\n\ - options:\n\ - -U user%%pass (may be specified twice)\n\ - -s seed\n\ - -o numops\n\ - -u hide unlock fails\n\ - -a (show all ops)\n\ - -A analyse for minimal ops\n\ - -O use oplocks\n\ - -E enable exact error code checking\n\ - -Z enable the zero/zero lock\n\ - -R range set lock range\n\ - -B base set lock base\n\ - -M min set min lock length\n\ - -l filename unclist file\n\ -"); + printf("Usage:\n\tlocktest //server1/share1 //server2/share2 [options..]\n"); + poptPrintUsage(pc, stdout, 0); } /**************************************************************************** @@ -552,97 +537,86 @@ static void usage(void) int seed, server; int username_count=0; struct loadparm_context *lp_ctx; + poptContext pc; + int argc_new, i; + char **argv_new; + enum {OPT_UNCLIST=1000}; + struct poptOption long_options[] = { + POPT_AUTOHELP + {"seed", 0, POPT_ARG_INT, &seed, 0, "Seed to use for randomizer", NULL}, + {"num-ops", 0, POPT_ARG_INT, &numops, 0, "num ops", NULL}, + {"lockrange", 0, POPT_ARG_INT, &lock_range,0, "locking range", NULL}, + {"lockbase", 0, POPT_ARG_INT, &lock_base, 0, "locking base", NULL}, + {"minlength", 0, POPT_ARG_INT, &min_length,0, "min lock length", NULL}, + {"hidefails", 0, POPT_ARG_NONE, &hide_unlock_fails,0,"hide unlock fails", NULL}, + {"oplocks", 0, POPT_ARG_NONE, &use_oplocks,0, "use oplocks", NULL}, + {"showall", 0, POPT_ARG_NONE, &showall, 0, "display all operations", NULL}, + {"analyse", 0, POPT_ARG_NONE, &analyze, 0, "do backtrack analysis", NULL}, + {"zerozero", 0, POPT_ARG_NONE, &zero_zero, 0, "do zero/zero lock", NULL}, + {"exacterrors", 0, POPT_ARG_NONE, &exact_error_codes,0,"use exact error codes", NULL}, + {"unclist", 0, POPT_ARG_STRING, NULL, OPT_UNCLIST, "unclist", NULL}, + { "user", 'U', POPT_ARG_STRING, NULL, 'U', "Set the network username", "[DOMAIN/]USERNAME[%PASSWORD]" }, + POPT_COMMON_SAMBA + POPT_COMMON_CONNECTION + POPT_COMMON_CREDENTIALS + POPT_COMMON_VERSION + { NULL } + }; setlinebuf(stdout); + seed = time(NULL); - setup_logging("locktest", DEBUG_STDOUT); - - if (argc < 3 || argv[1][0] == '-') { - usage(); - exit(1); - } - - setup_logging(argv[0], DEBUG_STDOUT); - - for (server=0;server "); servers[0] = cli_credentials_init(talloc_autofree_context()); servers[1] = cli_credentials_init(talloc_autofree_context()); cli_credentials_guess(servers[0], lp_ctx); cli_credentials_guess(servers[1], lp_ctx); - seed = time(NULL); - - while ((opt = getopt(argc, argv, "U:s:ho:aAW:OR:B:M:EZW:l:")) != EOF) { + while((opt = poptGetNextOpt(pc)) != -1) { switch (opt) { + case OPT_UNCLIST: + lp_set_cmdline(cmdline_lp_ctx, "torture:unclist", poptGetOptArg(pc)); + break; case 'U': if (username_count == 2) { - usage(); + usage(pc); exit(1); } - cli_credentials_parse_string(servers[username_count], - optarg, CRED_SPECIFIED); + cli_credentials_parse_string(servers[username_count], poptGetOptArg(pc), CRED_SPECIFIED); username_count++; break; - case 'R': - lock_range = strtol(optarg, NULL, 0); - break; - case 'B': - lock_base = strtol(optarg, NULL, 0); - break; - case 'M': - min_length = strtol(optarg, NULL, 0); - break; - case 's': - seed = atoi(optarg); - break; - case 'u': - hide_unlock_fails = true; - break; - case 'o': - numops = atoi(optarg); - break; - case 'O': - use_oplocks = true; - break; - case 'a': - showall = true; - break; - case 'A': - analyze = true; - break; - case 'Z': - zero_zero = true; - break; - case 'E': - exact_error_codes = true; - break; - case 'l': - lp_set_cmdline(lp_ctx, "torture:unclist", optarg); - break; - case 'W': - lp_set_cmdline(lp_ctx, "workgroup", optarg); + } + } + + argv_new = discard_const_p(char *, poptGetArgs(pc)); + argc_new = argc; + for (i=0; i= 3)) { + usage(pc); + exit(1); + } + + setup_logging("locktest", DEBUG_STDOUT); + + for (server=0;server Date: Fri, 15 Feb 2008 15:26:20 +1100 Subject: fixed masktest to use popt, and fixed the incorrect pstring conversion (This used to be commit c37133fd95e6d02a0cdf0f7b5408211740d8046c) --- source4/torture/masktest.c | 157 ++++++++++++++++++--------------------------- 1 file changed, 63 insertions(+), 94 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/masktest.c b/source4/torture/masktest.c index 855da54340..ac7029aa50 100644 --- a/source4/torture/masktest.c +++ b/source4/torture/masktest.c @@ -18,6 +18,7 @@ */ #include "includes.h" +#include "lib/cmdline/popt_common.h" #include "system/filesys.h" #include "system/dir.h" #include "libcli/libcli.h" @@ -30,12 +31,10 @@ #include "dynconfig.h" #include "libcli/resolve/resolve.h" -static struct cli_credentials *credentials; static bool showall = false; static bool old_list = false; static const char *maskchars = "<>\"?*abc."; static const char *filechars = "abcdefghijklm."; -static int verbose; static int die_on_error; static int NumLoops = 0; static int max_length = 20; @@ -87,13 +86,13 @@ static struct smbcli_state *connect_one(struct resolve_context *resolve_ctx, *share = 0; share++; - cli_credentials_set_workstation(credentials, "masktest", CRED_SPECIFIED); + cli_credentials_set_workstation(cmdline_credentials, "masktest", CRED_SPECIFIED); status = smbcli_full_connection(NULL, &c, server, ports, share, NULL, - credentials, resolve_ctx, NULL, + cmdline_credentials, resolve_ctx, NULL, options); if (!NT_STATUS_IS_OK(status)) { @@ -112,7 +111,7 @@ static bool f_info_hit; static void listfn(struct clilist_file_info *f, const char *s, void *state) { - struct masktest_state *m = talloc_get_type(state,struct masktest_state); + struct masktest_state *m = (struct masktest_state *)state; if (ISDOT(f->name)) { resultp[0] = '+'; @@ -128,7 +127,7 @@ static void listfn(struct clilist_file_info *f, const char *s, void *state) } static void get_real_name(TALLOC_CTX *mem_ctx, struct smbcli_state *cli, - char *long_name, fstring short_name) + char **long_name, fstring short_name) { const char *mask; struct masktest_state state; @@ -151,12 +150,12 @@ static void get_real_name(TALLOC_CTX *mem_ctx, struct smbcli_state *cli, if (f_info_hit) { fstrcpy(short_name, last_hit.short_name); strlower(short_name); - long_name = talloc_strdup(mem_ctx, last_hit.long_name); - strlower(long_name); + *long_name = talloc_strdup(mem_ctx, last_hit.long_name); + strlower(*long_name); } if (*short_name == '\0') { - fstrcpy(short_name, long_name); + fstrcpy(short_name, *long_name); } } @@ -168,7 +167,7 @@ static void testpair(TALLOC_CTX *mem_ctx, struct smbcli_state *cli, char *mask, char *res2; static int count; fstring short_name; - char *long_name; + char *long_name = NULL; struct masktest_state state; count++; @@ -186,7 +185,7 @@ static void testpair(TALLOC_CTX *mem_ctx, struct smbcli_state *cli, char *mask, resultp = res1; fstrcpy(short_name, ""); - get_real_name(mem_ctx, cli, long_name, short_name); + get_real_name(mem_ctx, cli, &long_name, short_name); fstrcpy(res1, "---"); smbcli_list_new(cli->tree, mask, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY, @@ -241,6 +240,8 @@ static void test_mask(int argc, char *argv[], l2 = 1 + random() % max_length; mask = talloc_strdup(mem_ctx, "\\masktest\\"); file = talloc_strdup(mem_ctx, "\\masktest\\"); + mask = talloc_realloc_size(mem_ctx, mask, strlen(mask)+l1+1); + file = talloc_realloc_size(mem_ctx, file, strlen(file)+l2+1); l = strlen(mask); for (i=0;i"); - share = argv[1]; - - all_string_sub(share,"/","\\",0); + while((opt = poptGetNextOpt(pc)) != -1) { + switch (opt) { + case OPT_UNCLIST: + lp_set_cmdline(cmdline_lp_ctx, "torture:unclist", poptGetOptArg(pc)); + break; + } + } - setup_logging(argv[0], DEBUG_STDOUT); + argv_new = discard_const_p(char *, poptGetArgs(pc)); + argc_new = argc; + for (i=0; i= 2)) { + usage(pc); + exit(1); + } - global_loadparm = lp_ctx = loadparm_init(talloc_autofree_context()); - lp_load(lp_ctx, dyn_CONFIGFILE); + setup_logging("masktest", DEBUG_STDOUT); - credentials = cli_credentials_init(talloc_autofree_context()); - cli_credentials_guess(credentials, lp_ctx); + share = argv_new[1]; - seed = time(NULL); + all_string_sub(share,"/","\\",0); - while ((opt = getopt(argc, argv, "n:d:U:s:hm:f:aoW:M:vEl:")) != EOF) { - switch (opt) { - case 'n': - NumLoops = atoi(optarg); - break; - case 'd': - DEBUGLEVEL = atoi(optarg); - break; - case 'E': - die_on_error = 1; - break; - case 'v': - verbose++; - break; - case 'M': - lp_set_cmdline(lp_ctx, "max protocol", optarg); - break; - case 'U': - cli_credentials_parse_string(credentials, optarg, CRED_SPECIFIED); - break; - case 's': - seed = atoi(optarg); - break; - case 'h': - usage(); - exit(1); - case 'm': - maskchars = optarg; - break; - case 'l': - max_length = atoi(optarg); - break; - case 'f': - filechars = optarg; - break; - case 'a': - showall = 1; - break; - case 'o': - old_list = true; - break; - default: - printf("Unknown option %c (%d)\n", (char)opt, opt); - exit(1); - } - } + lp_ctx = cmdline_lp_ctx; gensec_init(lp_ctx); - argc -= optind; - argv += optind; - lp_smbcli_options(lp_ctx, &options); cli = connect_one(lp_resolve_context(lp_ctx), share, @@ -398,7 +367,7 @@ static void usage(void) DEBUG(0,("seed=%d format --- --- (server, correct)\n", seed)); srandom(seed); - test_mask(argc, argv, cli); + test_mask(argc_new-1, argv_new+1, cli); return(0); } -- cgit From c09f70608c97c5df87818f0c6297e85cf8827862 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Feb 2008 15:33:10 +1100 Subject: added a blackbox test for masktest (This used to be commit 05a110123df2372418e2ef2fd8f269b92054069c) --- source4/torture/locktest.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/locktest.c b/source4/torture/locktest.c index ebc325fe2b..fb2430f881 100644 --- a/source4/torture/locktest.c +++ b/source4/torture/locktest.c @@ -396,7 +396,7 @@ static int retest(struct smbcli_state *cli[NSERVERS][NCONNECTIONS], we then do random locking ops in tamdem on the 4 fnums from each server and ensure that the results match */ -static void test_locks(struct loadparm_context *lp_ctx, char *share[NSERVERS]) +static int test_locks(struct loadparm_context *lp_ctx, char *share[NSERVERS]) { struct smbcli_state *cli[NSERVERS][NCONNECTIONS]; int fnum[NSERVERS][NCONNECTIONS][NFILES]; @@ -451,7 +451,12 @@ static void test_locks(struct loadparm_context *lp_ctx, char *share[NSERVERS]) open_files(cli, fnum); n = retest(cli, fnum, numops); - if (n == numops || !analyze) return; + if (n == numops || !analyze) { + if (n != numops) { + return 1; + } + return 0; + } n++; skip = n/2; @@ -517,6 +522,8 @@ static void test_locks(struct loadparm_context *lp_ctx, char *share[NSERVERS]) (double)recorded[i].len, recorded[i].needed); } + + return 1; } @@ -632,8 +639,6 @@ _NORETURN_ static void usage(poptContext pc) seed, lock_base, lock_range, min_length)); srandom(seed); - test_locks(lp_ctx, share); - - return(0); + return test_locks(lp_ctx, share); } -- cgit From 80362574b83eaa27c4fcf8f93546f8700fc736c8 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Feb 2008 15:39:07 +1100 Subject: fix typo (This used to be commit 1699b2a804cf91175de2528c1e640a09b4de4f08) --- source4/torture/locktest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/torture') diff --git a/source4/torture/locktest.c b/source4/torture/locktest.c index fb2430f881..de25c0abc8 100644 --- a/source4/torture/locktest.c +++ b/source4/torture/locktest.c @@ -573,7 +573,7 @@ _NORETURN_ static void usage(poptContext pc) setlinebuf(stdout); seed = time(NULL); - pc = poptGetContext("locjtest", argc, (const char **) argv, long_options, + pc = poptGetContext("locktest", argc, (const char **) argv, long_options, POPT_CONTEXT_KEEP_FIRST); poptSetOtherOptionHelp(pc, " "); -- cgit From 9e6327dc41c8f3a4b523ccbab869e6b001e1b6df Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Feb 2008 15:52:52 +1100 Subject: make sure lp_ctx is initialised (This used to be commit 3abb33c8bff9aac8ba1ba4783b919732e5159283) --- source4/torture/locktest.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/torture') diff --git a/source4/torture/locktest.c b/source4/torture/locktest.c index de25c0abc8..039484a8cb 100644 --- a/source4/torture/locktest.c +++ b/source4/torture/locktest.c @@ -528,7 +528,7 @@ static int test_locks(struct loadparm_context *lp_ctx, char *share[NSERVERS]) -_NORETURN_ static void usage(poptContext pc) +static void usage(poptContext pc) { printf("Usage:\n\tlocktest //server1/share1 //server2/share2 [options..]\n"); poptPrintUsage(pc, stdout, 0); @@ -578,6 +578,7 @@ _NORETURN_ static void usage(poptContext pc) poptSetOtherOptionHelp(pc, " "); + lp_ctx = cmdline_lp_ctx; servers[0] = cli_credentials_init(talloc_autofree_context()); servers[1] = cli_credentials_init(talloc_autofree_context()); cli_credentials_guess(servers[0], lp_ctx); -- cgit From db408c0d0dbe159146c637c97bbe9bbf41983586 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Feb 2008 15:53:11 +1100 Subject: convert gentest to use popt and the cmdline library (This used to be commit 681366b956a71aa7bd16b75263ccd73ddc680082) --- source4/torture/gentest.c | 166 +++++++++++++++++++++++----------------------- 1 file changed, 83 insertions(+), 83 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/gentest.c b/source4/torture/gentest.c index 8fa433a872..28cac81624 100644 --- a/source4/torture/gentest.c +++ b/source4/torture/gentest.c @@ -18,6 +18,7 @@ */ #include "includes.h" +#include "lib/cmdline/popt_common.h" #include "system/time.h" #include "system/filesys.h" #include "libcli/raw/request.h" @@ -1755,6 +1756,7 @@ static void gen_setfileinfo(int instance, union smb_setfileinfo *info) info->end_of_file_info.in.size = gen_offset(); break; case RAW_SFILEINFO_RENAME_INFORMATION: + case RAW_SFILEINFO_RENAME_INFORMATION_SMB2: info->rename_information.in.overwrite = gen_bool(); info->rename_information.in.root_fid = gen_root_fid(instance); info->rename_information.in.new_name = gen_fname_open(instance); @@ -2129,25 +2131,13 @@ static bool start_gentest(struct loadparm_context *lp_ctx) } -static void usage(void) +static void usage(poptContext pc) { printf( "Usage:\n\ - gentest2 //server1/share1 //server2/share2 [options..]\n\ - options:\n\ - -U user%%pass (can be specified twice)\n\ - -s seed\n\ - -o numops\n\ - -a (show all ops)\n\ - -A backtrack to find minimal ops\n\ - -i FILE add a list of wildcard exclusions\n\ - -O enable oplocks\n\ - -S FILE set preset seeds file\n\ - -L use preset seeds\n\ - -F fast reconnect (just close files)\n\ - -C continuous analysis mode\n\ - -X analyse even when test OK\n\ + gentest //server1/share1 //server2/share2 [options..]\n\ "); + poptPrintUsage(pc, stdout, 0); } /** @@ -2180,14 +2170,88 @@ static bool split_unc_name(const char *unc, char **server, char **share) int opt; int i, username_count=0; bool ret; + char *ignore_file=NULL; struct loadparm_context *lp_ctx; + poptContext pc; + int argc_new; + char **argv_new; + enum {OPT_UNCLIST=1000}; + struct poptOption long_options[] = { + POPT_AUTOHELP + {"seed", 0, POPT_ARG_INT, &options.seed, 0, "Seed to use for randomizer", NULL}, + {"num-ops", 0, POPT_ARG_INT, &options.numops, 0, "num ops", NULL}, + {"oplocks", 0, POPT_ARG_NONE, &options.use_oplocks,0, "use oplocks", NULL}, + {"showall", 0, POPT_ARG_NONE, &options.showall, 0, "display all operations", NULL}, + {"analyse", 0, POPT_ARG_NONE, &options.analyze, 0, "do backtrack analysis", NULL}, + {"analysealways", 0, POPT_ARG_NONE, &options.analyze_always, 0, "analysis always", NULL}, + {"analysecontinuous", 0, POPT_ARG_NONE, &options.analyze_continuous, 0, "analysis continuous", NULL}, + {"ignore", 0, POPT_ARG_STRING, &ignore_file, 0, "ignore from file", NULL}, + {"preset", 0, POPT_ARG_NONE, &options.use_preset_seeds, 0, "use preset seeds", NULL}, + {"fast", 0, POPT_ARG_NONE, &options.fast_reconnect, 0, "use fast reconnect", NULL}, + {"unclist", 0, POPT_ARG_STRING, NULL, OPT_UNCLIST, "unclist", NULL}, + {"seedsfile", 0, POPT_ARG_STRING, &options.seeds_file, 0, "seed file", NULL}, + { "user", 'U', POPT_ARG_STRING, NULL, 'U', "Set the network username", "[DOMAIN/]USERNAME[%PASSWORD]" }, + POPT_COMMON_SAMBA + POPT_COMMON_CONNECTION + POPT_COMMON_CREDENTIALS + POPT_COMMON_VERSION + { NULL } + }; + + setlinebuf(stdout); + options.seed = time(NULL); + + pc = poptGetContext("gentest", argc, (const char **) argv, long_options, + POPT_CONTEXT_KEEP_FIRST); + + poptSetOtherOptionHelp(pc, " "); + + lp_ctx = cmdline_lp_ctx; + servers[0].credentials = cli_credentials_init(talloc_autofree_context()); + servers[1].credentials = cli_credentials_init(talloc_autofree_context()); + cli_credentials_guess(servers[0].credentials, lp_ctx); + cli_credentials_guess(servers[1].credentials, lp_ctx); + + while((opt = poptGetNextOpt(pc)) != -1) { + switch (opt) { + case OPT_UNCLIST: + lp_set_cmdline(cmdline_lp_ctx, "torture:unclist", poptGetOptArg(pc)); + break; + case 'U': + if (username_count == 2) { + usage(pc); + exit(1); + } + cli_credentials_parse_string(servers[username_count].credentials, poptGetOptArg(pc), CRED_SPECIFIED); + username_count++; + break; + } + } + + if (ignore_file) { + options.ignore_patterns = file_lines_load(ignore_file, NULL, NULL); + } + + argv_new = discard_const_p(char *, poptGetArgs(pc)); + argc_new = argc; + for (i=0; i= 3)) { + usage(pc); + exit(1); + } setlinebuf(stdout); setup_logging("gentest", DEBUG_STDOUT); if (argc < 3 || argv[1][0] == '-') { - usage(); + usage(pc); exit(1); } @@ -2195,7 +2259,6 @@ static bool split_unc_name(const char *unc, char **server, char **share) for (i=0;i Date: Fri, 15 Feb 2008 16:52:57 +1100 Subject: fixed some options that could not be overridden on the command line (This used to be commit eea486d8942fdda769684fa6e825c0f899cf3304) --- source4/torture/gentest.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/gentest.c b/source4/torture/gentest.c index 28cac81624..d5fc855f17 100644 --- a/source4/torture/gentest.c +++ b/source4/torture/gentest.c @@ -2200,6 +2200,9 @@ static bool split_unc_name(const char *unc, char **server, char **share) setlinebuf(stdout); options.seed = time(NULL); + options.numops = 1000; + options.max_open_handles = 20; + options.seeds_file = "gentest_seeds.dat"; pc = poptGetContext("gentest", argc, (const char **) argv, long_options, POPT_CONTEXT_KEEP_FIRST); @@ -2265,16 +2268,6 @@ static bool split_unc_name(const char *unc, char **server, char **share) } } - argc -= NSERVERS; - argv += NSERVERS; - - lp_load(lp_ctx, dyn_CONFIGFILE); - - options.seed = time(NULL); - options.numops = 1000; - options.max_open_handles = 20; - options.seeds_file = "gentest_seeds.dat"; - if (username_count == 0) { usage(pc); return -1; -- cgit From 339dcbb64169abe9c1b810140eaef25a17a9a690 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 15 Feb 2008 16:53:10 +1100 Subject: remove redundent code (This used to be commit 7f2421f17cae313d7dbf5c35c73b5410cb1d5db0) --- source4/torture/locktest.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/locktest.c b/source4/torture/locktest.c index 039484a8cb..618568acf9 100644 --- a/source4/torture/locktest.c +++ b/source4/torture/locktest.c @@ -633,9 +633,6 @@ static void usage(poptContext pc) gensec_init(lp_ctx); - argc -= optind; - argv += optind; - DEBUG(0,("seed=%u base=%d range=%d min_length=%d\n", seed, lock_base, lock_range, min_length)); srandom(seed); -- cgit From 17f31a7677a585834d8d172a67bf39bfda048a46 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 14 Feb 2008 14:56:58 +0100 Subject: NET-API-BECOME-DC: at least find the 'provision' function in python mode This is still broken, as we call provision() with wrong arguments. Also the python provision() function, doesn't allow us to specify the locations of the partition ldb files, this is strictly needed otherwise the torture test destroys a production databases. I think we should have a provision_become_dc() again! metze (This used to be commit 096eafd34778dde222bce4b0a5c0fc38b7de0359) --- source4/torture/libnet/libnet_BecomeDC.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/libnet/libnet_BecomeDC.c b/source4/torture/libnet/libnet_BecomeDC.c index 0dd06bda4c..997dbc93b8 100644 --- a/source4/torture/libnet/libnet_BecomeDC.c +++ b/source4/torture/libnet/libnet_BecomeDC.c @@ -284,6 +284,7 @@ static NTSTATUS test_become_dc_prepare_db_py(void *private_data, { struct test_become_dc_state *s = talloc_get_type(private_data, struct test_become_dc_state); bool ok; + PyObject *module, *module_dict; PyObject *provision_fn, *result, *parameters; DEBUG(0,("Provision for Become-DC test using PYTHON\n")); @@ -293,13 +294,24 @@ static NTSTATUS test_become_dc_prepare_db_py(void *private_data, py_update_path("bin"); /* FIXME: Can't assume this always runs in source/... */ - provision_fn = PyImport_Import(PyString_FromString("samba.provision.provision")); + module = PyImport_Import(PyString_FromString("samba.provision")); + if (module == NULL) { + DEBUG(0, ("Unable to import 'samba.provision' Python module.\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + module_dict = PyModule_GetDict(module); + if (module_dict == NULL) { + DEBUG(0, ("Unable to GetDict of 'samba.provision'.\n")); + return NT_STATUS_UNSUCCESSFUL; + } + provision_fn = PyDict_GetItemString(module_dict, "provision"); if (provision_fn == NULL) { - DEBUG(0, ("Unable to import provision Python module.\n")); - return NT_STATUS_UNSUCCESSFUL; + DEBUG(0, ("Unable to get function 'provision' of 'samba.provision'.\n")); + return NT_STATUS_UNSUCCESSFUL; } - + DEBUG(0,("New Server[%s] in Site[%s]\n", p->dest_dsa->dns_name, p->dest_dsa->site_name)); -- cgit From 85fe22a85fe7e8db7d2f6e2fdd6f02836f116b8e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 15 Feb 2008 15:14:55 +0100 Subject: Use struct for provision parameters since there are so many of them. (This used to be commit 4b9d5bc57ca4ee14c142ea720dce5e4ee97f8c16) --- source4/torture/libnet/libnet_BecomeDC.c | 39 +++--- source4/torture/local/torture.c | 36 +++-- source4/torture/util_provision.c | 222 +++++++++++-------------------- source4/torture/util_provision.h | 51 +++++++ 4 files changed, 180 insertions(+), 168 deletions(-) create mode 100644 source4/torture/util_provision.h (limited to 'source4/torture') diff --git a/source4/torture/libnet/libnet_BecomeDC.c b/source4/torture/libnet/libnet_BecomeDC.c index 83d7426dfb..13e1aec6d0 100644 --- a/source4/torture/libnet/libnet_BecomeDC.c +++ b/source4/torture/libnet/libnet_BecomeDC.c @@ -37,7 +37,7 @@ #include "lib/ldb_wrap.h" #include "auth/auth.h" #include "param/param.h" -#include "torture/util.h" +#include "torture/util_provision.h" struct test_become_dc_state { struct libnet_context *ctx; @@ -72,20 +72,29 @@ static NTSTATUS test_become_dc_prepare_db(void *private_data, const struct libnet_BecomeDC_PrepareDB *p) { struct test_become_dc_state *s = talloc_get_type(private_data, struct test_become_dc_state); - return provision_bare(s, s->tctx->lp_ctx, p->dest_dsa->dns_name, - p->dest_dsa->site_name, p->forest->root_dn_str, - p->domain->dn_str, p->forest->config_dn_str, - p->forest->schema_dn_str, - &p->dest_dsa->invocation_id, - p->dest_dsa->netbios_name, - torture_join_dom_dns_name(s->tj), - torture_join_dom_netbios_name(s->tj), - &p->dest_dsa->ntds_guid, - p->dest_dsa->ntds_dn_str, - cli_credentials_get_password(s->machine_account), - s->path.samdb_ldb, s->path.secrets_ldb, - s->path.secrets_keytab, s->path.schemadn_ldb, - s->path.configdn_ldb, s->path.domaindn_ldb); + struct provision_settings settings; + + settings.dns_name = p->dest_dsa->dns_name; + settings.site_name = p->dest_dsa->site_name; + settings.root_dn_str = p->forest->root_dn_str; + settings.domain_dn_str = p->domain->dn_str; + settings.config_dn_str = p->forest->config_dn_str; + settings.schema_dn_str = p->forest->schema_dn_str; + settings.invocation_id = &p->dest_dsa->invocation_id; + settings.netbios_name = p->dest_dsa->netbios_name; + settings.realm = torture_join_dom_dns_name(s->tj); + settings.domain = torture_join_dom_netbios_name(s->tj); + settings.ntds_guid = &p->dest_dsa->ntds_guid; + settings.ntds_dn_str = p->dest_dsa->ntds_dn_str; + settings.machine_password = cli_credentials_get_password(s->machine_account); + settings.samdb_ldb = s->path.samdb_ldb; + settings.secrets_ldb = s->path.secrets_ldb; + settings.secrets_keytab = s->path.secrets_keytab; + settings.schemadn_ldb = s->path.schemadn_ldb; + settings.configdn_ldb = s->path.configdn_ldb; + settings.domaindn_ldb = s->path.domaindn_ldb; + + return provision_bare(s, s->tctx->lp_ctx, &settings); } static NTSTATUS test_become_dc_check_options(void *private_data, diff --git a/source4/torture/local/torture.c b/source4/torture/local/torture.c index 7d12c467df..0c9931be03 100644 --- a/source4/torture/local/torture.c +++ b/source4/torture/local/torture.c @@ -24,7 +24,7 @@ #include "system/wait.h" #include "lib/events/events.h" #include "libcli/raw/libcliraw.h" -#include "torture/util.h" +#include "torture/util_provision.h" static bool test_tempdir(struct torture_context *tctx) { @@ -42,18 +42,32 @@ static bool test_tempdir(struct torture_context *tctx) static bool test_provision(struct torture_context *tctx) { NTSTATUS status; + struct provision_settings settings; - status = provision_bare(tctx, tctx->lp_ctx, - "example.com", "SOME-SITE-NAME", - "DC=EXAMPLE,DC=COM", - "DC=EXAMPLE,DC=COM", - NULL, NULL, NULL, - "FOO", "EXAMPLE.COM", - "EXAMPLE", NULL, - NULL, "geheim", - NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL); + settings.dns_name = "example.com"; + settings.site_name = "SOME-SITE-NAME"; + settings.root_dn_str = "DC=EXAMPLE,DC=COM"; + settings.domain_dn_str = "DC=EXAMPLE,DC=COM"; + settings.config_dn_str = NULL; + settings.schema_dn_str = NULL; + settings.invocation_id = NULL; + settings.netbios_name = "FOO"; + settings.realm = "EXAMPLE.COM"; + settings.domain = "EXAMPLE"; + settings.ntds_guid = NULL; + settings.ntds_dn_str = NULL; + settings.machine_password = "geheim"; + settings.samdb_ldb = NULL; + settings.secrets_ldb = NULL; + settings.secrets_keytab = NULL; + settings.schemadn_ldb = NULL; + settings.configdn_ldb = NULL; + settings.domaindn_ldb = NULL; + settings.templates_ldb = NULL; + settings.dns_keytab = NULL; + status = provision_bare(tctx, tctx->lp_ctx, &settings); + torture_assert_ntstatus_ok(tctx, status, "provision"); return true; diff --git a/source4/torture/util_provision.c b/source4/torture/util_provision.c index 5873b9f485..a5c564b05c 100644 --- a/source4/torture/util_provision.c +++ b/source4/torture/util_provision.c @@ -24,6 +24,7 @@ #include "scripting/ejs/smbcalls.h" #include "auth/auth.h" #include "lib/ldb_wrap.h" +#include "torture/util_provision.h" static EjsId eid; static int ejs_error; @@ -80,27 +81,7 @@ failed: static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, - const char *dns_name, - const char *site_name, - const char *root_dn_str, - const char *domain_dn_str, - const char *config_dn_str, - const char *schema_dn_str, - const struct GUID *invocation_id, - const char *netbios_name, - const char *realm, - const char *domain, - const struct GUID *ntds_guid, - const char *ntds_dn_str, - const char *machine_password, - const char *samdb_ldb, - const char *secrets_ldb, - const char *secrets_keytab, - const char *schemadn_ldb, - const char *configdn_ldb, - const char *domaindn_ldb, - const char *templates_ldb, - const char *dns_keytab) + struct provision_settings *settings) { char *ejs; int ret; @@ -109,30 +90,31 @@ static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, DEBUG(0,("Provision for Become-DC test using EJS\n")); - DEBUG(0,("New Server[%s] in Site[%s]\n", dns_name, site_name)); + DEBUG(0,("New Server[%s] in Site[%s]\n", settings->dns_name, + settings->site_name)); DEBUG(0,("DSA Instance [%s]\n" "\tobjectGUID[%s]\n" "\tinvocationId[%s]\n", - ntds_dn_str, - GUID_string(mem_ctx, ntds_guid), - GUID_string(mem_ctx, invocation_id))); + settings->ntds_dn_str, + GUID_string(mem_ctx, settings->ntds_guid), + GUID_string(mem_ctx, settings->invocation_id))); DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", lp_private_dir(lp_ctx), - samdb_ldb, - secrets_ldb, - secrets_keytab)); + settings->samdb_ldb, + settings->secrets_ldb, + settings->secrets_keytab)); DEBUG(0,("Schema Partition[%s => %s]\n", - schema_dn_str, schemadn_ldb)); + settings->schema_dn_str, settings->schemadn_ldb)); DEBUG(0,("Config Partition[%s => %s]\n", - config_dn_str, configdn_ldb)); + settings->config_dn_str, settings->configdn_ldb)); DEBUG(0,("Domain Partition[%s => %s]\n", - domain_dn_str, domaindn_ldb)); + settings->domain_dn_str, settings->domaindn_ldb)); ejs = talloc_asprintf(mem_ctx, "libinclude(\"base.js\");\n" @@ -170,23 +152,23 @@ static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, "assert(ok);\n" "\n" "return 0;\n", - root_dn_str, /* subobj.ROOTDN */ - domain_dn_str, /* subobj.DOMAINDN */ - domaindn_ldb, /* subobj.DOMAINDN_LDB */ - config_dn_str, /* subobj.CONFIGDN */ - configdn_ldb, /* subobj.CONFIGDN_LDB */ - schema_dn_str, /* subobj.SCHEMADN */ - schemadn_ldb, /* subobj.SCHEMADN_LDB */ - netbios_name, /* subobj.HOSTNAME */ - realm,/* subobj.REALM */ - domain,/* subobj.DOMAIN */ - site_name, /* subobj.DEFAULTSITE */ - machine_password,/* subobj.MACHINEPASS */ - samdb_ldb, /* paths.samdb */ - templates_ldb, /* paths.templates */ - secrets_ldb, /* paths.secrets */ - secrets_keytab, /* paths.keytab */ - dns_keytab); /* paths.dns_keytab */ + settings->root_dn_str, /* subobj.ROOTDN */ + settings->domain_dn_str, /* subobj.DOMAINDN */ + settings->domaindn_ldb, /* subobj.DOMAINDN_LDB */ + settings->config_dn_str, /* subobj.CONFIGDN */ + settings->configdn_ldb, /* subobj.CONFIGDN_LDB */ + settings->schema_dn_str, /* subobj.SCHEMADN */ + settings->schemadn_ldb, /* subobj.SCHEMADN_LDB */ + settings->netbios_name, /* subobj.HOSTNAME */ + settings->realm,/* subobj.REALM */ + settings->domain,/* subobj.DOMAIN */ + settings->site_name, /* subobj.DEFAULTSITE */ + settings->machine_password,/* subobj.MACHINEPASS */ + settings->samdb_ldb, /* paths.samdb */ + settings->templates_ldb, /* paths.templates */ + settings->secrets_ldb, /* paths.secrets */ + settings->secrets_keytab, /* paths.keytab */ + settings->dns_keytab); /* paths.dns_keytab */ NT_STATUS_HAVE_NO_MEMORY(ejs); ret = test_run_ejs(ejs); @@ -199,23 +181,23 @@ static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, talloc_free(ejs); DEBUG(0,("Open the SAM LDB with system credentials: %s\n", - samdb_ldb)); + settings->samdb_ldb)); - ldb = ldb_wrap_connect(mem_ctx, lp_ctx, samdb_ldb, + ldb = ldb_wrap_connect(mem_ctx, lp_ctx, settings->samdb_ldb, system_session(mem_ctx, lp_ctx), NULL, 0, NULL); if (!ldb) { DEBUG(0,("Failed to open '%s'\n", - samdb_ldb)); + settings->samdb_ldb)); return NT_STATUS_INTERNAL_DB_ERROR; } - ok = samdb_set_ntds_invocation_id(ldb, invocation_id); + ok = samdb_set_ntds_invocation_id(ldb, settings->invocation_id); if (!ok) { DEBUG(0,("Failed to set cached ntds invocationId\n")); return NT_STATUS_FOOBAR; } - ok = samdb_set_ntds_objectGUID(ldb, ntds_guid); + ok = samdb_set_ntds_objectGUID(ldb, settings->ntds_guid); if (!ok) { DEBUG(0,("Failed to set cached ntds objectGUID\n")); return NT_STATUS_FOOBAR; @@ -230,32 +212,13 @@ static NTSTATUS provision_bare_ejs(TALLOC_CTX *mem_ctx, static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, - const char *dns_name, - const char *site_name, - const char *root_dn_str, - const char *domain_dn_str, - const char *config_dn_str, - const char *schema_dn_str, - const struct GUID *invocation_id, - const char *netbios_name, const char *realm, - const char *domain, - const struct GUID *ntds_guid, - const char *ntds_dn_str, - const char *machine_password, - const char *samdb_ldb, - const char *secrets_ldb, - const char *secrets_keytab, - const char *schemadn_ldb, - const char *configdn_ldb, - const char *domaindn_ldb, - const char *templates_ldb, - const char *dns_keytab) + struct provision_settings *settings) { bool ok; PyObject *provision_mod, *provision_dict, *provision_fn, *result, *parameters; struct ldb_context *ldb; - DEBUG(0,("Provision for Become-DC test using PYTHON\n")); + DEBUG(0,("Provision for Become-DC test using python\n")); py_load_samba_modules(); Py_Initialize(); @@ -283,61 +246,66 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, return NT_STATUS_UNSUCCESSFUL; } - DEBUG(0,("New Server[%s] in Site[%s]\n", dns_name, site_name)); + DEBUG(0,("New Server[%s] in Site[%s]\n", settings->dns_name, + settings->site_name)); DEBUG(0,("DSA Instance [%s]\n" "\tobjectGUID[%s]\n" "\tinvocationId[%s]\n", - ntds_dn_str, - ntds_guid == NULL?"None":GUID_string(mem_ctx, ntds_guid), - invocation_id == NULL?"None":GUID_string(mem_ctx, invocation_id))); + settings->ntds_dn_str, + settings->ntds_guid == NULL?"None":GUID_string(mem_ctx, settings->ntds_guid), + settings->invocation_id == NULL?"None":GUID_string(mem_ctx, settings->invocation_id))); DEBUG(0,("Pathes under PRIVATEDIR[%s]\n" "SAMDB[%s] SECRETS[%s] KEYTAB[%s]\n", lp_private_dir(lp_ctx), - samdb_ldb, - secrets_ldb, - secrets_keytab)); + settings->samdb_ldb, + settings->secrets_ldb, + settings->secrets_keytab)); DEBUG(0,("Schema Partition[%s => %s]\n", - schema_dn_str, schemadn_ldb)); + settings->schema_dn_str, settings->schemadn_ldb)); DEBUG(0,("Config Partition[%s => %s]\n", - config_dn_str, configdn_ldb)); + settings->config_dn_str, settings->configdn_ldb)); DEBUG(0,("Domain Partition[%s => %s]\n", - domain_dn_str, domaindn_ldb)); + settings->domain_dn_str, settings->domaindn_ldb)); parameters = PyDict_New(); - PyDict_SetItemString(parameters, "rootdn", PyString_FromString(root_dn_str)); - if (domaindn_ldb != NULL) + PyDict_SetItemString(parameters, "rootdn", + PyString_FromString(settings->root_dn_str)); + if (settings->domaindn_ldb != NULL) PyDict_SetItemString(parameters, "domaindn_ldb", - PyString_FromString(domaindn_ldb)); - if (config_dn_str != NULL) + PyString_FromString(settings->domaindn_ldb)); + if (settings->config_dn_str != NULL) PyDict_SetItemString(parameters, "configdn", - PyString_FromString(config_dn_str)); - if (configdn_ldb != NULL) + PyString_FromString(settings->config_dn_str)); + if (settings->configdn_ldb != NULL) PyDict_SetItemString(parameters, "configdn_ldb", - PyString_FromString(configdn_ldb)); - if (schema_dn_str != NULL) + PyString_FromString(settings->configdn_ldb)); + if (settings->schema_dn_str != NULL) PyDict_SetItemString(parameters, "schema_dn_str", - PyString_FromString(schema_dn_str)); - if (schemadn_ldb != NULL) + PyString_FromString(settings->schema_dn_str)); + if (settings->schemadn_ldb != NULL) PyDict_SetItemString(parameters, "schemadn_ldb", - PyString_FromString(schemadn_ldb)); - PyDict_SetItemString(parameters, "hostname", PyString_FromString(netbios_name)); - PyDict_SetItemString(parameters, "sitename", PyString_FromString(site_name)); - PyDict_SetItemString(parameters, "machinepass", PyString_FromString(machine_password)); - if (samdb_ldb != NULL) + PyString_FromString(settings->schemadn_ldb)); + PyDict_SetItemString(parameters, "hostname", + PyString_FromString(settings->netbios_name)); + PyDict_SetItemString(parameters, "sitename", + PyString_FromString(settings->site_name)); + PyDict_SetItemString(parameters, "machinepass", + PyString_FromString(settings->machine_password)); + if (settings->samdb_ldb != NULL) PyDict_SetItemString(parameters, "samdb", - PyString_FromString(samdb_ldb)); - if (secrets_ldb != NULL) + PyString_FromString(settings->samdb_ldb)); + if (settings->secrets_ldb != NULL) PyDict_SetItemString(parameters, "secrets_ldb", - PyString_FromString(secrets_ldb)); - if (secrets_keytab != NULL) + PyString_FromString(settings->secrets_ldb)); + if (settings->secrets_keytab != NULL) PyDict_SetItemString(parameters, "secrets_keytab", - PyString_FromString(secrets_keytab)); + PyString_FromString(settings->secrets_keytab)); result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters); @@ -350,23 +318,22 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, } DEBUG(0,("Open the SAM LDB with system credentials: %s\n", - samdb_ldb)); + settings->samdb_ldb)); - ldb = ldb_wrap_connect(mem_ctx, lp_ctx, samdb_ldb, + ldb = ldb_wrap_connect(mem_ctx, lp_ctx, settings->samdb_ldb, system_session(mem_ctx, lp_ctx), NULL, 0, NULL); if (!ldb) { - DEBUG(0,("Failed to open '%s'\n", - samdb_ldb)); + DEBUG(0,("Failed to open '%s'\n", settings->samdb_ldb)); return NT_STATUS_INTERNAL_DB_ERROR; } - ok = samdb_set_ntds_invocation_id(ldb, invocation_id); + ok = samdb_set_ntds_invocation_id(ldb, settings->invocation_id); if (!ok) { DEBUG(0,("Failed to set cached ntds invocationId\n")); return NT_STATUS_FOOBAR; } - ok = samdb_set_ntds_objectGUID(ldb, ntds_guid); + ok = samdb_set_ntds_objectGUID(ldb, settings->ntds_guid); if (!ok) { DEBUG(0,("Failed to set cached ntds objectGUID\n")); return NT_STATUS_FOOBAR; @@ -376,41 +343,12 @@ static NTSTATUS provision_bare_py(TALLOC_CTX *mem_ctx, } NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, - const char *dns_name, const char *site_name, - const char *root_dn_str, const char *domain_dn_str, - const char *config_dn_str, const char *schema_dn_str, - const struct GUID *invocation_id, - const char *netbios_name, const char *realm, - const char *domain, const struct GUID *ntds_guid, - const char *ntds_dn_str, - const char *machine_password, - const char *samdb_ldb, - const char *secrets_ldb, - const char *secrets_keytab, - const char *schemadn_ldb, - const char *configdn_ldb, - const char *domaindn_ldb, - const char *templates_ldb, - const char *dns_keytab) + struct provision_settings *settings) { if (getenv("PROVISION_EJS")) { - return provision_bare_ejs(mem_ctx, lp_ctx, dns_name, site_name, - root_dn_str, domain_dn_str, config_dn_str, - schema_dn_str, invocation_id, netbios_name, - realm, domain, ntds_guid, ntds_dn_str, - machine_password, samdb_ldb, secrets_ldb, - secrets_keytab, schemadn_ldb, configdn_ldb, - domaindn_ldb, templates_ldb, - dns_keytab); + return provision_bare_ejs(mem_ctx, lp_ctx, settings); } else { - return provision_bare_py(mem_ctx, lp_ctx, dns_name, site_name, - root_dn_str, domain_dn_str, config_dn_str, - schema_dn_str, invocation_id, netbios_name, - realm, domain, ntds_guid, ntds_dn_str, - machine_password, samdb_ldb, secrets_ldb, - secrets_keytab, schemadn_ldb, configdn_ldb, - domaindn_ldb, templates_ldb, - dns_keytab); + return provision_bare_py(mem_ctx, lp_ctx, settings); } } diff --git a/source4/torture/util_provision.h b/source4/torture/util_provision.h new file mode 100644 index 0000000000..28467080b1 --- /dev/null +++ b/source4/torture/util_provision.h @@ -0,0 +1,51 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + Copyright (C) Jelmer Vernooij 2008 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _TORTURE_PROVISION_H_ +#define _TORTURE_PROVISION_H_ + +struct provision_settings { + const char *dns_name; + const char *site_name; + const char *root_dn_str; + const char *domain_dn_str; + const char *config_dn_str; + const char *schema_dn_str; + const struct GUID *invocation_id; + const char *netbios_name; + const char *realm; + const char *domain; + const struct GUID *ntds_guid; + const char *ntds_dn_str; + const char *machine_password; + const char *samdb_ldb; + const char *secrets_ldb; + const char *secrets_keytab; + const char *schemadn_ldb; + const char *configdn_ldb; + const char *domaindn_ldb; + const char *templates_ldb; + const char *dns_keytab; +}; + +NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, + struct provision_settings *settings); + + +#endif /* _TORTURE_PROVISION_H_ */ -- cgit From 56e75ed20cd71651f2c0fdc399389e2cd6471f3f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 15 Feb 2008 15:53:06 +0100 Subject: Reconcile header files for torture utility functions. (This used to be commit 1269758e95686cc155284d5d56080e1be11bbd75) --- source4/torture/config.mk | 1 - source4/torture/libnet/libnet_BecomeDC.c | 2 +- source4/torture/local/torture.c | 2 +- source4/torture/util.h | 120 +++++++++++++++++++++++++++++++ source4/torture/util_provision.c | 2 +- source4/torture/util_provision.h | 51 ------------- 6 files changed, 123 insertions(+), 55 deletions(-) create mode 100644 source4/torture/util.h delete mode 100644 source4/torture/util_provision.h (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 5a3e3d0658..7ab4658dc1 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -16,7 +16,6 @@ PUBLIC_DEPENDENCIES = \ [SUBSYSTEM::TORTURE_UTIL] OBJ_FILES = util_smb.o util_provision.o PRIVATE_DEPENDENCIES = LIBCLI_RAW LIBPYTHON smbcalls -PUBLIC_PROTO_HEADER = util.h PUBLIC_DEPENDENCIES = POPT_CREDENTIALS ################################# diff --git a/source4/torture/libnet/libnet_BecomeDC.c b/source4/torture/libnet/libnet_BecomeDC.c index 13e1aec6d0..9566f5ee29 100644 --- a/source4/torture/libnet/libnet_BecomeDC.c +++ b/source4/torture/libnet/libnet_BecomeDC.c @@ -37,7 +37,7 @@ #include "lib/ldb_wrap.h" #include "auth/auth.h" #include "param/param.h" -#include "torture/util_provision.h" +#include "torture/util.h" struct test_become_dc_state { struct libnet_context *ctx; diff --git a/source4/torture/local/torture.c b/source4/torture/local/torture.c index 0c9931be03..3273015347 100644 --- a/source4/torture/local/torture.c +++ b/source4/torture/local/torture.c @@ -24,7 +24,7 @@ #include "system/wait.h" #include "lib/events/events.h" #include "libcli/raw/libcliraw.h" -#include "torture/util_provision.h" +#include "torture/util.h" static bool test_tempdir(struct torture_context *tctx) { diff --git a/source4/torture/util.h b/source4/torture/util.h new file mode 100644 index 0000000000..c5219a5aaa --- /dev/null +++ b/source4/torture/util.h @@ -0,0 +1,120 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + Copyright (C) Jelmer Vernooij 2008 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _TORTURE_PROVISION_H_ +#define _TORTURE_PROVISION_H_ + +struct provision_settings { + const char *dns_name; + const char *site_name; + const char *root_dn_str; + const char *domain_dn_str; + const char *config_dn_str; + const char *schema_dn_str; + const struct GUID *invocation_id; + const char *netbios_name; + const char *realm; + const char *domain; + const struct GUID *ntds_guid; + const char *ntds_dn_str; + const char *machine_password; + const char *samdb_ldb; + const char *secrets_ldb; + const char *secrets_keytab; + const char *schemadn_ldb; + const char *configdn_ldb; + const char *domaindn_ldb; + const char *templates_ldb; + const char *dns_keytab; +}; + +NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, + struct provision_settings *settings); + + +/** + setup a directory ready for a test +*/ +_PUBLIC_ bool torture_setup_dir(struct smbcli_state *cli, const char *dname); +NTSTATUS create_directory_handle(struct smbcli_tree *tree, const char *dname, int *fnum); + +/** + sometimes we need a fairly complex file to work with, so we can test + all possible attributes. +*/ +_PUBLIC_ int create_complex_file(struct smbcli_state *cli, TALLOC_CTX *mem_ctx, const char *fname); +int create_complex_dir(struct smbcli_state *cli, TALLOC_CTX *mem_ctx, const char *dname); +void *shm_setup(int size); + +/** + check that a wire string matches the flags specified + not 100% accurate, but close enough for testing +*/ +bool wire_bad_flags(struct smb_wire_string *str, int flags, + struct smbcli_transport *transport); +void dump_all_info(TALLOC_CTX *mem_ctx, union smb_fileinfo *finfo); +void torture_all_info(struct smbcli_tree *tree, const char *fname); +bool torture_set_file_attribute(struct smbcli_tree *tree, const char *fname, uint16_t attrib); +NTSTATUS torture_set_sparse(struct smbcli_tree *tree, int fnum); +NTSTATUS torture_check_ea(struct smbcli_state *cli, + const char *fname, const char *eaname, const char *value); +_PUBLIC_ bool torture_open_connection_share(TALLOC_CTX *mem_ctx, + struct smbcli_state **c, + struct torture_context *tctx, + const char *hostname, + const char *sharename, + struct event_context *ev); +_PUBLIC_ bool torture_get_conn_index(int conn_index, + TALLOC_CTX *mem_ctx, + struct torture_context *tctx, + char **host, char **share); +_PUBLIC_ bool torture_open_connection_ev(struct smbcli_state **c, + int conn_index, + struct torture_context *tctx, + struct event_context *ev); +_PUBLIC_ bool torture_open_connection(struct smbcli_state **c, struct torture_context *tctx, int conn_index); +_PUBLIC_ bool torture_close_connection(struct smbcli_state *c); +_PUBLIC_ bool check_error(const char *location, struct smbcli_state *c, + uint8_t eclass, uint32_t ecode, NTSTATUS nterr); +double torture_create_procs(struct torture_context *tctx, + bool (*fn)(struct torture_context *, struct smbcli_state *, int), bool *result); +_PUBLIC_ struct torture_test *torture_suite_add_smb_multi_test( + struct torture_suite *suite, + const char *name, + bool (*run) (struct torture_context *, + struct smbcli_state *, + int i)); +_PUBLIC_ struct torture_test *torture_suite_add_2smb_test( + struct torture_suite *suite, + const char *name, + bool (*run) (struct torture_context *, + struct smbcli_state *, + struct smbcli_state *)); +_PUBLIC_ struct torture_test *torture_suite_add_1smb_test( + struct torture_suite *suite, + const char *name, + bool (*run) (struct torture_context *, struct smbcli_state *)); +NTSTATUS torture_second_tcon(TALLOC_CTX *mem_ctx, + struct smbcli_session *session, + const char *sharename, + struct smbcli_tree **res); + + + +#endif /* _TORTURE_PROVISION_H_ */ diff --git a/source4/torture/util_provision.c b/source4/torture/util_provision.c index a5c564b05c..2a1e9256f5 100644 --- a/source4/torture/util_provision.c +++ b/source4/torture/util_provision.c @@ -24,7 +24,7 @@ #include "scripting/ejs/smbcalls.h" #include "auth/auth.h" #include "lib/ldb_wrap.h" -#include "torture/util_provision.h" +#include "torture/util.h" static EjsId eid; static int ejs_error; diff --git a/source4/torture/util_provision.h b/source4/torture/util_provision.h deleted file mode 100644 index 28467080b1..0000000000 --- a/source4/torture/util_provision.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Samba utility functions - Copyright (C) Jelmer Vernooij 2008 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef _TORTURE_PROVISION_H_ -#define _TORTURE_PROVISION_H_ - -struct provision_settings { - const char *dns_name; - const char *site_name; - const char *root_dn_str; - const char *domain_dn_str; - const char *config_dn_str; - const char *schema_dn_str; - const struct GUID *invocation_id; - const char *netbios_name; - const char *realm; - const char *domain; - const struct GUID *ntds_guid; - const char *ntds_dn_str; - const char *machine_password; - const char *samdb_ldb; - const char *secrets_ldb; - const char *secrets_keytab; - const char *schemadn_ldb; - const char *configdn_ldb; - const char *domaindn_ldb; - const char *templates_ldb; - const char *dns_keytab; -}; - -NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, - struct provision_settings *settings); - - -#endif /* _TORTURE_PROVISION_H_ */ -- cgit From 10a374421bac7df15ab398bc46580be0d06d9d7d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 18 Feb 2008 14:54:59 +1100 Subject: open a root handle in SMB2 should use a NULL filename, not a zero length filename (This used to be commit a29dd708bf26440552ffa9d83332329b4c108857) --- source4/torture/smb2/util.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/torture') diff --git a/source4/torture/smb2/util.c b/source4/torture/smb2/util.c index 219c2140d3..f85b1c42ff 100644 --- a/source4/torture/smb2/util.c +++ b/source4/torture/smb2/util.c @@ -123,6 +123,7 @@ static NTSTATUS smb2_create_complex(struct smb2_tree *tree, const char *fname, io.in.create_disposition = NTCREATEX_DISP_CREATE; } + /* it seems vista is now fussier about alignment? */ if (strchr(fname, ':') == NULL) { /* setup some EAs */ io.in.eas.num_eas = 2; @@ -428,7 +429,7 @@ NTSTATUS smb2_util_roothandle(struct smb2_tree *tree, struct smb2_handle *handle io.in.create_disposition = NTCREATEX_DISP_OPEN; io.in.share_access = NTCREATEX_SHARE_ACCESS_READ|NTCREATEX_SHARE_ACCESS_DELETE; io.in.create_options = NTCREATEX_OPTIONS_ASYNC_ALERT; - io.in.fname = ""; + io.in.fname = NULL; status = smb2_create(tree, tree, &io); NT_STATUS_NOT_OK_RETURN(status); -- cgit From 0e03c3aa892439bb5567b0129a40b267ecb6cee5 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 18 Feb 2008 14:55:30 +1100 Subject: disable the EAS level in SMB2-GETINFO test until we get some feedback on how the alignment requirements have changed (This used to be commit 2a474568c2f85603657a97ad658089122a1f4f19) --- source4/torture/smb2/getinfo.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/smb2/getinfo.c b/source4/torture/smb2/getinfo.c index f561b62d47..c47a26277c 100644 --- a/source4/torture/smb2/getinfo.c +++ b/source4/torture/smb2/getinfo.c @@ -51,7 +51,9 @@ static struct { { LEVEL(RAW_FILEINFO_COMPRESSION_INFORMATION) }, { LEVEL(RAW_FILEINFO_NETWORK_OPEN_INFORMATION) }, { LEVEL(RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION) }, - { LEVEL(RAW_FILEINFO_SMB2_ALL_EAS) }, +/* +disabled until we know how the alignment now works +{ LEVEL(RAW_FILEINFO_SMB2_ALL_EAS) }, */ { LEVEL(RAW_FILEINFO_SMB2_ALL_INFORMATION) }, { LEVEL(RAW_FILEINFO_SEC_DESC) } }; @@ -85,13 +87,13 @@ static bool torture_smb2_fileinfo(struct torture_context *tctx, struct smb2_tree status = torture_smb2_testfile(tree, FNAME, &hfile); if (!NT_STATUS_IS_OK(status)) { - printf("Unable to create test file '%s' - %s\n", FNAME, nt_errstr(status)); + printf(__location__ " Unable to create test file '%s' - %s\n", FNAME, nt_errstr(status)); goto failed; } status = torture_smb2_testdir(tree, DNAME, &hdir); if (!NT_STATUS_IS_OK(status)) { - printf("Unable to create test directory '%s' - %s\n", DNAME, nt_errstr(status)); + printf(__location__ " Unable to create test directory '%s' - %s\n", DNAME, nt_errstr(status)); goto failed; } @@ -150,7 +152,7 @@ static bool torture_smb2_fsinfo(struct smb2_tree *tree) printf("Testing fsinfo levels\n"); status = smb2_util_roothandle(tree, &handle); if (!NT_STATUS_IS_OK(status)) { - printf("Unable to create test directory '%s' - %s\n", DNAME, nt_errstr(status)); + printf(__location__ " Unable to create root handle - %s\n", nt_errstr(status)); return false; } -- cgit From 602f4635da0935abffdda2a29ec302a775fdbe62 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 18 Feb 2008 19:06:17 +0100 Subject: Get rid of 'INTEGRATED' build of modules - now replaced by 'MERGED_OBJ' (This used to be commit 269cbf84d8b7dbf3bc88adc04ae283dc908af5ac) --- source4/torture/config.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 7ab4658dc1..a11b94b639 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -113,7 +113,7 @@ OBJ_FILES = ndr/ndr.o \ [MODULE::torture_rpc] # TORTURE_NET and TORTURE_NBT use functions from torture_rpc... -#OUTPUT_TYPE = INTEGRATED +#OUTPUT_TYPE = MERGED_OBJ SUBSYSTEM = torture INIT_FUNCTION = torture_rpc_init PRIVATE_PROTO_HEADER = \ -- cgit From ff0315ba859421dff6aba055887e086fa68c2951 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 18 Feb 2008 20:04:18 +0100 Subject: Rename include to mkinclude to emphasize it is different from make's include. (This used to be commit 0e1d0a874ae3d22b8f97a79b81fe0af3ef53a771) --- source4/torture/config.mk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index a11b94b639..a1975a6caf 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -95,8 +95,8 @@ PRIVATE_DEPENDENCIES = \ # End SUBSYSTEM TORTURE_RAW ################################# -include smb2/config.mk -include winbind/config.mk +mkinclude smb2/config.mk +mkinclude winbind/config.mk [SUBSYSTEM::TORTURE_NDR] PRIVATE_PROTO_HEADER = ndr/proto.h @@ -200,7 +200,7 @@ PRIVATE_DEPENDENCIES = \ # End SUBSYSTEM TORTURE_AUTH ################################# -include local/config.mk +mkinclude local/config.mk ################################# # Start MODULE TORTURE_NBENCH -- cgit From 89f4cfb26310d8f44a3727af1bed70b8c52b4e09 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 18 Feb 2008 23:20:08 +0100 Subject: Fix dependency on popt. (This used to be commit dd854adc7a203f18228195a080bfa8075b0cd170) --- source4/torture/config.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index a1975a6caf..cc9340e6b9 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -11,7 +11,8 @@ OBJ_FILES = \ PUBLIC_DEPENDENCIES = \ LIBSAMBA-CONFIG \ LIBSAMBA-UTIL \ - LIBTALLOC + LIBTALLOC \ + LIBPOPT [SUBSYSTEM::TORTURE_UTIL] OBJ_FILES = util_smb.o util_provision.o -- cgit From 5842df9d0fb71430d1bcda1c4c748589b38ecb00 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 19 Feb 2008 14:44:10 +1100 Subject: To partially simplfy our gcov handling, move to the new --coverage option. Andrew Bartlett (This used to be commit 7e49f75ee21adec321e0935c9cd4c2a96d7ef6d1) --- source4/torture/config.mk | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 7ab4658dc1..32085400b7 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -369,21 +369,20 @@ MANPAGE = man/locktest.1 # End BINARY locktest ################################# -GCOV_CFLAGS = -ftest-coverage -fprofile-arcs -GCOV_LDFLAGS = $(GCOV_CFLAGS) -lgcov +GCOV_FLAGS = --coverage COV_TARGET = test COV_VARS = \ - CFLAGS="$(CFLAGS) $(GCOV_CFLAGS)" \ - BNLD_FLAGS="$(BNLD_FLAGS) $(GCOV_LDFLAGS)" \ - SHLD_FLAGS="$(SHLD_FLAGS) $(GCOV_LDFLAGS)" \ - MDLD_FLAGS="$(MDLD_FLAGS) $(GCOV_LDFLAGS)" \ - HOSTCC_FLAGS="$(HOSTCC_FLAGS) $(GCOV_CFLAGS)" \ - HOSTLD_FLAGS="$(HOSTLD_FLAGS) $(GCOV_LDFLAGS)" + CFLAGS="$(CFLAGS) $(GCOV_FLAGS)" \ + BNLD_FLAGS="$(BNLD_FLAGS) $(GCOV_FLAGS)" \ + SHLD_FLAGS="$(SHLD_FLAGS) $(GCOV_FLAGS)" \ + MDLD_FLAGS="$(MDLD_FLAGS) $(GCOV_FLAGS)" \ + HOSTCC_FLAGS="$(HOSTCC_FLAGS) $(GCOV_FLAGS)" \ + HOSTLD_FLAGS="$(HOSTLD_FLAGS) $(GCOV_FLAGS)" test_cov: - @$(MAKE) $(COV_TARGET) $(COV_VARS) + -$(MAKE) $(COV_TARGET) $(COV_VARS) gcov: test_cov for I in $(sort $(dir $(ALL_OBJS))); \ @@ -395,10 +394,12 @@ lcov-split: @$(MAKE) $(COV_TARGET) $(COV_VARS) \ TEST_OPTIONS="--analyse-cmd=\"lcov --base-directory `pwd` --directory . --capture --output-file samba.info -t\"" -rm heimdal/lib/*/{lex,parse}.{gcda,gcno} + -rm lib/policy/*/{lex,parse}.{gcda,gcno} genhtml -o coverage samba.info lcov: test_cov -rm heimdal/lib/*/{lex,parse}.{gcda,gcno} + -rm lib/policy/*/{lex,parse}.{gcda,gcno} lcov --base-directory `pwd` --directory . --capture --output-file samba.info genhtml -o coverage samba.info -- cgit From 97c77cffade1b99f8c1345c8516a856644f40b01 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 14:12:05 +0100 Subject: Avoid use of global_loadparm. (This used to be commit e6751a3ca40d968f084642229845a729bd916222) --- source4/torture/rpc/samsync.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/rpc/samsync.c b/source4/torture/rpc/samsync.c index 1f7f9f463e..865ebf9fd2 100644 --- a/source4/torture/rpc/samsync.c +++ b/source4/torture/rpc/samsync.c @@ -398,7 +398,7 @@ static bool samsync_handle_policy(TALLOC_CTX *mem_ctx, struct samsync_state *sam return true; } -static bool samsync_handle_user(TALLOC_CTX *mem_ctx, struct samsync_state *samsync_state, +static bool samsync_handle_user(struct torture_context *tctx, TALLOC_CTX *mem_ctx, struct samsync_state *samsync_state, int database_id, struct netr_DELTA_ENUM *delta) { uint32_t rid = delta->delta_id_union.rid; @@ -548,7 +548,7 @@ static bool samsync_handle_user(TALLOC_CTX *mem_ctx, struct samsync_state *samsy data.data = user->user_private_info.SensitiveData; data.length = user->user_private_info.DataLength; creds_arcfour_crypt(samsync_state->creds, data.data, data.length); - ndr_err = ndr_pull_struct_blob(&data, mem_ctx, lp_iconv_convenience(global_loadparm), &keys, (ndr_pull_flags_fn_t)ndr_pull_netr_USER_KEYS); + ndr_err = ndr_pull_struct_blob(&data, mem_ctx, lp_iconv_convenience(tctx->lp_ctx), &keys, (ndr_pull_flags_fn_t)ndr_pull_netr_USER_KEYS); if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { if (keys.keys.keys2.lmpassword.length == 16) { sam_rid_crypt(rid, keys.keys.keys2.lmpassword.pwd.hash, lm_hash.hash, 0); @@ -1101,8 +1101,9 @@ static bool samsync_handle_account(TALLOC_CTX *mem_ctx, struct samsync_state *sa /* try a netlogon DatabaseSync */ -static bool test_DatabaseSync(struct samsync_state *samsync_state, - TALLOC_CTX *mem_ctx) +static bool test_DatabaseSync(struct torture_context *tctx, + struct samsync_state *samsync_state, + TALLOC_CTX *mem_ctx) { NTSTATUS status; TALLOC_CTX *loop_ctx, *delta_ctx, *trustdom_ctx; @@ -1162,7 +1163,7 @@ static bool test_DatabaseSync(struct samsync_state *samsync_state, } break; case NETR_DELTA_USER: - if (!samsync_handle_user(delta_ctx, samsync_state, + if (!samsync_handle_user(tctx, delta_ctx, samsync_state, r.in.database_id, &r.out.delta_enum_array->delta_enum[d])) { printf("Failed to handle DELTA_USER\n"); ret = false; @@ -1611,7 +1612,7 @@ bool torture_rpc_samsync(struct torture_context *torture) ret = false; } - if (!test_DatabaseSync(samsync_state, mem_ctx)) { + if (!test_DatabaseSync(torture, samsync_state, mem_ctx)) { printf("DatabaseSync failed\n"); ret = false; } -- cgit From 8fce27ad018c2a1db048d9e7c89881f877ea3a73 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 14:13:14 +0100 Subject: samba3rpc: Remove use of global_loadparm. (This used to be commit b3d084170e01fc678f9be6c280c52763ead52959) --- source4/torture/rpc/samba3rpc.c | 73 ++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 31 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/rpc/samba3rpc.c b/source4/torture/rpc/samba3rpc.c index b08cd05bdb..779a28e126 100644 --- a/source4/torture/rpc/samba3rpc.c +++ b/source4/torture/rpc/samba3rpc.c @@ -806,6 +806,7 @@ static bool join3(struct smbcli_state *cli, */ static bool auth2(struct smbcli_state *cli, + struct loadparm_context *lp_ctx, struct cli_credentials *wks_cred) { TALLOC_CTX *mem_ctx; @@ -829,7 +830,7 @@ static bool auth2(struct smbcli_state *cli, net_pipe = dcerpc_pipe_init(mem_ctx, cli->transport->socket->event.ctx, - lp_iconv_convenience(global_loadparm)); + lp_iconv_convenience(lp_ctx)); if (net_pipe == NULL) { d_printf("dcerpc_pipe_init failed\n"); goto done; @@ -1204,7 +1205,7 @@ bool torture_netlogon_samba3(struct torture_context *torture) int j; - if (!auth2(cli, wks_creds)) { + if (!auth2(cli, torture->lp_ctx, wks_creds)) { d_printf("auth2 failed\n"); goto done; } @@ -1283,7 +1284,7 @@ static bool test_join3(struct torture_context *tctx, cmdline_credentials, cli_credentials_get_domain(wks_creds), CRED_SPECIFIED); - if (!auth2(cli, wks_creds)) { + if (!auth2(cli, tctx->lp_ctx, wks_creds)) { d_printf("auth2 failed\n"); goto done; } @@ -1381,6 +1382,7 @@ bool torture_samba3_sessionkey(struct torture_context *torture) */ static NTSTATUS pipe_bind_smb(TALLOC_CTX *mem_ctx, + struct loadparm_context *lp_ctx, struct smbcli_tree *tree, const char *pipe_name, const struct ndr_interface_table *iface, @@ -1391,7 +1393,7 @@ static NTSTATUS pipe_bind_smb(TALLOC_CTX *mem_ctx, if (!(result = dcerpc_pipe_init( mem_ctx, tree->session->transport->socket->event.ctx, - lp_iconv_convenience(global_loadparm)))) { + lp_iconv_convenience(lp_ctx)))) { return NT_STATUS_NO_MEMORY; } @@ -1507,7 +1509,9 @@ static struct dom_sid *name2sid(TALLOC_CTX *mem_ctx, * Find out the user SID on this connection */ -static struct dom_sid *whoami(TALLOC_CTX *mem_ctx, struct smbcli_tree *tree) +static struct dom_sid *whoami(TALLOC_CTX *mem_ctx, + struct loadparm_context *lp_ctx, + struct smbcli_tree *tree) { struct dcerpc_pipe *lsa; struct lsa_GetUserName r; @@ -1515,7 +1519,7 @@ static struct dom_sid *whoami(TALLOC_CTX *mem_ctx, struct smbcli_tree *tree) struct lsa_StringPointer authority_name_p; struct dom_sid *result; - status = pipe_bind_smb(mem_ctx, tree, "\\pipe\\lsarpc", + status = pipe_bind_smb(mem_ctx, lp_ctx, tree, "\\pipe\\lsarpc", &ndr_table_lsarpc, &lsa); if (!NT_STATUS_IS_OK(status)) { d_printf("(%s) Could not bind to LSA: %s\n", @@ -1631,7 +1635,7 @@ bool torture_samba3_rpc_getusername(struct torture_context *torture) goto done; } - if (!(user_sid = whoami(mem_ctx, cli->tree))) { + if (!(user_sid = whoami(mem_ctx, torture->lp_ctx, cli->tree))) { d_printf("(%s) whoami on auth'ed connection failed\n", __location__); ret = false; @@ -1658,7 +1662,7 @@ bool torture_samba3_rpc_getusername(struct torture_context *torture) goto done; } - if (!(user_sid = whoami(mem_ctx, cli->tree))) { + if (!(user_sid = whoami(mem_ctx, torture->lp_ctx, cli->tree))) { d_printf("(%s) whoami on anon connection failed\n", __location__); ret = false; @@ -1732,7 +1736,7 @@ bool torture_samba3_rpc_getusername(struct torture_context *torture) goto done; } - if (!(user_sid = whoami(mem_ctx, tree))) { + if (!(user_sid = whoami(mem_ctx, torture->lp_ctx, tree))) { d_printf("(%s) whoami on user connection failed\n", __location__); ret = false; @@ -1870,8 +1874,8 @@ bool torture_samba3_rpc_srvsvc(struct torture_context *torture) return false; } - status = pipe_bind_smb(mem_ctx, cli->tree, "\\pipe\\srvsvc", - &ndr_table_srvsvc, &p); + status = pipe_bind_smb(mem_ctx, torture->lp_ctx, cli->tree, + "\\pipe\\srvsvc", &ndr_table_srvsvc, &p); if (!NT_STATUS_IS_OK(status)) { d_printf("(%s) could not bind to srvsvc pipe: %s\n", __location__, nt_errstr(status)); @@ -2007,6 +2011,7 @@ bool torture_samba3_rpc_randomauth2(struct torture_context *torture) } static struct security_descriptor *get_sharesec(TALLOC_CTX *mem_ctx, + struct loadparm_context *lp_ctx, struct smbcli_session *sess, const char *sharename) { @@ -2028,7 +2033,7 @@ static struct security_descriptor *get_sharesec(TALLOC_CTX *mem_ctx, return NULL; } - status = pipe_bind_smb(mem_ctx, tree, "\\pipe\\srvsvc", + status = pipe_bind_smb(mem_ctx, lp_ctx, tree, "\\pipe\\srvsvc", &ndr_table_srvsvc, &p); if (!NT_STATUS_IS_OK(status)) { d_printf("(%s) could not bind to srvsvc pipe: %s\n", @@ -2060,6 +2065,7 @@ static struct security_descriptor *get_sharesec(TALLOC_CTX *mem_ctx, } static NTSTATUS set_sharesec(TALLOC_CTX *mem_ctx, + struct loadparm_context *lp_ctx, struct smbcli_session *sess, const char *sharename, struct security_descriptor *sd) @@ -2083,7 +2089,7 @@ static NTSTATUS set_sharesec(TALLOC_CTX *mem_ctx, return NT_STATUS_UNSUCCESSFUL; } - status = pipe_bind_smb(mem_ctx, tree, "\\pipe\\srvsvc", + status = pipe_bind_smb(mem_ctx, lp_ctx, tree, "\\pipe\\srvsvc", &ndr_table_srvsvc, &p); if (!NT_STATUS_IS_OK(status)) { d_printf("(%s) could not bind to srvsvc pipe: %s\n", @@ -2115,6 +2121,7 @@ static NTSTATUS set_sharesec(TALLOC_CTX *mem_ctx, } bool try_tcon(TALLOC_CTX *mem_ctx, + struct loadparm_context *lp_ctx, struct security_descriptor *orig_sd, struct smbcli_session *session, const char *sharename, const struct dom_sid *user_sid, @@ -2162,7 +2169,7 @@ bool try_tcon(TALLOC_CTX *mem_ctx, return false; } - status = set_sharesec(mem_ctx, session, sharename, sd); + status = set_sharesec(mem_ctx, lp_ctx, session, sharename, sd); if (!NT_STATUS_IS_OK(status)) { d_printf("custom set_sharesec failed: %s\n", nt_errstr(status)); @@ -2193,7 +2200,7 @@ bool try_tcon(TALLOC_CTX *mem_ctx, done: smbcli_rmdir(rmdir_tree, "sharesec_testdir"); - status = set_sharesec(mem_ctx, session, sharename, orig_sd); + status = set_sharesec(mem_ctx, lp_ctx, session, sharename, orig_sd); if (!NT_STATUS_IS_OK(status)) { d_printf("custom set_sharesec failed: %s\n", nt_errstr(status)); @@ -2225,25 +2232,25 @@ bool torture_samba3_rpc_sharesec(struct torture_context *torture) return false; } - if (!(user_sid = whoami(mem_ctx, cli->tree))) { + if (!(user_sid = whoami(mem_ctx, torture->lp_ctx, cli->tree))) { d_printf("whoami failed\n"); talloc_free(mem_ctx); return false; } - sd = get_sharesec(mem_ctx, cli->session, torture_setting_string(torture, - "share", NULL)); + sd = get_sharesec(mem_ctx, torture->lp_ctx, cli->session, + torture_setting_string(torture, "share", NULL)); - ret &= try_tcon(mem_ctx, sd, cli->session, + ret &= try_tcon(mem_ctx, torture->lp_ctx, sd, cli->session, torture_setting_string(torture, "share", NULL), user_sid, 0, NT_STATUS_ACCESS_DENIED, NT_STATUS_OK); - ret &= try_tcon(mem_ctx, sd, cli->session, + ret &= try_tcon(mem_ctx, torture->lp_ctx, sd, cli->session, torture_setting_string(torture, "share", NULL), user_sid, SEC_FILE_READ_DATA, NT_STATUS_OK, NT_STATUS_MEDIA_WRITE_PROTECTED); - ret &= try_tcon(mem_ctx, sd, cli->session, + ret &= try_tcon(mem_ctx, torture->lp_ctx, sd, cli->session, torture_setting_string(torture, "share", NULL), user_sid, SEC_FILE_ALL, NT_STATUS_OK, NT_STATUS_OK); @@ -2273,7 +2280,7 @@ bool torture_samba3_rpc_lsa(struct torture_context *torture) return false; } - status = pipe_bind_smb(mem_ctx, cli->tree, "\\lsarpc", + status = pipe_bind_smb(mem_ctx, torture->lp_ctx, cli->tree, "\\lsarpc", &ndr_table_lsarpc, &p); if (!NT_STATUS_IS_OK(status)) { d_printf("(%s) pipe_bind_smb failed: %s\n", __location__, @@ -2356,7 +2363,8 @@ static NTSTATUS get_servername(TALLOC_CTX *mem_ctx, struct smbcli_tree *tree, } -static NTSTATUS find_printers(TALLOC_CTX *ctx, struct smbcli_tree *tree, +static NTSTATUS find_printers(TALLOC_CTX *ctx, struct loadparm_context *lp_ctx, + struct smbcli_tree *tree, const char ***printers, int *num_printers) { TALLOC_CTX *mem_ctx; @@ -2372,7 +2380,8 @@ static NTSTATUS find_printers(TALLOC_CTX *ctx, struct smbcli_tree *tree, return NT_STATUS_NO_MEMORY; } - status = pipe_bind_smb(mem_ctx, tree, "\\srvsvc", &ndr_table_srvsvc, + status = pipe_bind_smb(mem_ctx, lp_ctx, + tree, "\\srvsvc", &ndr_table_srvsvc, &p); if (!NT_STATUS_IS_OK(status)) { d_printf("could not bind to srvsvc pipe\n"); @@ -2560,7 +2569,7 @@ bool torture_samba3_rpc_spoolss(struct torture_context *torture) return false; } - if (!NT_STATUS_IS_OK(find_printers(mem_ctx, cli->tree, + if (!NT_STATUS_IS_OK(find_printers(mem_ctx, torture->lp_ctx, cli->tree, &printers, &num_printers))) { talloc_free(mem_ctx); return false; @@ -2572,7 +2581,7 @@ bool torture_samba3_rpc_spoolss(struct torture_context *torture) return true; } - status = pipe_bind_smb(mem_ctx, cli->tree, "\\spoolss", + status = pipe_bind_smb(mem_ctx, torture->lp_ctx, cli->tree, "\\spoolss", &ndr_table_spoolss, &p); if (!NT_STATUS_IS_OK(status)) { d_printf("(%s) pipe_bind_smb failed: %s\n", __location__, @@ -2746,7 +2755,7 @@ bool torture_samba3_rpc_wkssvc(struct torture_context *torture) return false; } - status = pipe_bind_smb(mem_ctx, cli->tree, "\\wkssvc", + status = pipe_bind_smb(mem_ctx, torture->lp_ctx, cli->tree, "\\wkssvc", &ndr_table_wkssvc, &p); if (!NT_STATUS_IS_OK(status)) { d_printf("(%s) pipe_bind_smb failed: %s\n", __location__, @@ -2995,6 +3004,7 @@ bool torture_samba3_rpc_winreg(struct torture_context *torture) } static NTSTATUS get_shareinfo(TALLOC_CTX *mem_ctx, + struct loadparm_context *lp_ctx, struct smbcli_state *cli, const char *share, struct srvsvc_NetShareInfo502 **info) @@ -3006,7 +3016,7 @@ static NTSTATUS get_shareinfo(TALLOC_CTX *mem_ctx, if (!(p = dcerpc_pipe_init(cli, cli->transport->socket->event.ctx, - lp_iconv_convenience(global_loadparm)))) { + lp_iconv_convenience(lp_ctx)))) { status = NT_STATUS_NO_MEMORY; goto fail; } @@ -3176,7 +3186,8 @@ static NTSTATUS torture_samba3_createshare(struct smbcli_state *cli, return status; } -static NTSTATUS torture_samba3_deleteshare(struct smbcli_state *cli, +static NTSTATUS torture_samba3_deleteshare(struct torture_context *torture, + struct smbcli_state *cli, const char *sharename) { struct dcerpc_pipe *p; @@ -3301,7 +3312,7 @@ bool torture_samba3_regconfig(struct torture_context *torture) goto done; } - status = get_shareinfo(torture, cli, "blubber", &i); + status = get_shareinfo(torture, torture->lp_ctx, cli, "blubber", &i); if (!NT_STATUS_IS_OK(status)) { torture_warning(torture, "get_shareinfo failed: " "%s\n", nt_errstr(status)); @@ -3314,7 +3325,7 @@ bool torture_samba3_regconfig(struct torture_context *torture) goto done; } - status = torture_samba3_deleteshare(cli, "blubber"); + status = torture_samba3_deleteshare(torture, cli, "blubber"); if (!NT_STATUS_IS_OK(status)) { torture_warning(torture, "torture_samba3_deleteshare failed: " "%s\n", nt_errstr(status)); -- cgit From 4473a07fb3118b4e5197f05c5b930c3eb828a94a Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 19 Feb 2008 11:57:32 +0100 Subject: winreg.idl: get rid of initshutdown_String and use lsa_StringLarge metze (This used to be commit 1ccea2a260de83b2e3137f762716ae67070c7024) --- source4/torture/rpc/winreg.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c index d77295605f..4695733671 100644 --- a/source4/torture/rpc/winreg.c +++ b/source4/torture/rpc/winreg.c @@ -38,12 +38,9 @@ #define TEST_SID "S-1-5-21-1234567890-1234567890-1234567890-500" -static void init_initshutdown_String(TALLOC_CTX *mem_ctx, - struct initshutdown_String *name, - const char *s) +static void init_lsa_StringLarge(struct lsa_StringLarge *name, const char *s) { - name->name = talloc(mem_ctx, struct initshutdown_String_sub); - name->name->name = s; + name->string = s; } static void init_winreg_String(struct winreg_String *name, const char *s) @@ -1636,8 +1633,8 @@ static bool test_InitiateSystemShutdown(struct torture_context *tctx, uint16_t hostname = 0x0; r.in.hostname = &hostname; - r.in.message = talloc(tctx, struct initshutdown_String); - init_initshutdown_String(tctx, r.in.message, "spottyfood"); + r.in.message = talloc(tctx, struct lsa_StringLarge); + init_lsa_StringLarge(r.in.message, "spottyfood"); r.in.force_apps = 1; r.in.timeout = 30; r.in.reboot = 1; @@ -1660,8 +1657,8 @@ static bool test_InitiateSystemShutdownEx(struct torture_context *tctx, uint16_t hostname = 0x0; r.in.hostname = &hostname; - r.in.message = talloc(tctx, struct initshutdown_String); - init_initshutdown_String(tctx, r.in.message, "spottyfood"); + r.in.message = talloc(tctx, struct lsa_StringLarge); + init_lsa_StringLarge(r.in.message, "spottyfood"); r.in.force_apps = 1; r.in.timeout = 30; r.in.reboot = 1; -- cgit From 665a7aafd13aed42a80beaf344dc87f7b753aeea Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 19 Feb 2008 14:58:33 +0100 Subject: initshutdown.idl: get rid of initshutdown_String and use lsa_StringLarge metze (This used to be commit d9303cb08324db5ceb89f69a1a71cc3e16fdf250) --- source4/torture/rpc/initshutdown.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/rpc/initshutdown.c b/source4/torture/rpc/initshutdown.c index 9f6f1735ee..92fec5be0c 100644 --- a/source4/torture/rpc/initshutdown.c +++ b/source4/torture/rpc/initshutdown.c @@ -24,10 +24,9 @@ #include "librpc/gen_ndr/ndr_initshutdown_c.h" #include "torture/rpc/rpc.h" -static void init_initshutdown_String(TALLOC_CTX *mem_ctx, struct initshutdown_String *name, const char *s) +static void init_lsa_StringLarge(struct lsa_StringLarge *name, const char *s) { - name->name = talloc(mem_ctx, struct initshutdown_String_sub); - name->name->name = s; + name->string = s; } @@ -58,8 +57,8 @@ static bool test_Init(struct torture_context *tctx, uint16_t hostname = 0x0; r.in.hostname = &hostname; - r.in.message = talloc(tctx, struct initshutdown_String); - init_initshutdown_String(tctx, r.in.message, "spottyfood"); + r.in.message = talloc(tctx, struct lsa_StringLarge); + init_lsa_StringLarge(r.in.message, "spottyfood"); r.in.force_apps = 1; r.in.timeout = 30; r.in.reboot = 1; @@ -80,8 +79,8 @@ static bool test_InitEx(struct torture_context *tctx, uint16_t hostname = 0x0; r.in.hostname = &hostname; - r.in.message = talloc(tctx, struct initshutdown_String); - init_initshutdown_String(tctx, r.in.message, "spottyfood"); + r.in.message = talloc(tctx, struct lsa_StringLarge); + init_lsa_StringLarge(r.in.message, "spottyfood"); r.in.force_apps = 1; r.in.timeout = 30; r.in.reboot = 1; -- cgit From 0020793515ade04f3ef5754717490e2eb2ca6bb9 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 20 Feb 2008 03:40:44 +0100 Subject: Fix static module list generation for ldb. (This used to be commit 92c1c0e9137f0845cac6cc96bf78711b6aaffe21) --- source4/torture/smbtorture.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c index 371ddc7297..4eeea73003 100644 --- a/source4/torture/smbtorture.c +++ b/source4/torture/smbtorture.c @@ -615,8 +615,6 @@ int main(int argc,char *argv[]) alarm(max_runtime); } - ldb_global_init(); - if (extra_module != NULL) { init_module_fn fn = load_module(talloc_autofree_context(), poptGetOptArg(pc)); -- cgit From 1c1781b2c4a09080a19f834ba947d0410b2141f7 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 20 Feb 2008 19:20:13 +1100 Subject: Simpler specification of CFLAGS and LDFLAGS By being more consistant in applying CFLAGS and LDFLAGS (in particular) to every invocation, we make it simpler to enable gcov code coverage, both in the build system and on the build farm. Andrew Bartlett (This used to be commit 8c2f658a9688f0c51d2f3b948dc3213b65c7b77f) --- source4/torture/config.mk | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'source4/torture') diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 82e32e1ece..626349a45d 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -370,17 +370,11 @@ MANPAGE = man/locktest.1 # End BINARY locktest ################################# -GCOV_FLAGS = --coverage - COV_TARGET = test COV_VARS = \ - CFLAGS="$(CFLAGS) $(GCOV_FLAGS)" \ - BNLD_FLAGS="$(BNLD_FLAGS) $(GCOV_FLAGS)" \ - SHLD_FLAGS="$(SHLD_FLAGS) $(GCOV_FLAGS)" \ - MDLD_FLAGS="$(MDLD_FLAGS) $(GCOV_FLAGS)" \ - HOSTCC_FLAGS="$(HOSTCC_FLAGS) $(GCOV_FLAGS)" \ - HOSTLD_FLAGS="$(HOSTLD_FLAGS) $(GCOV_FLAGS)" + CFLAGS="$(CFLAGS) --coverage" \ + LDFLAGS="$(LDFLAGS) --coverage" test_cov: -$(MAKE) $(COV_TARGET) $(COV_VARS) -- cgit