[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Fri Mar 19 15:49:03 MDT 2010


The branch, master has been updated
       via  3cb5694... s4-smbtorture: rework RPC-DFS test a bit.
      from  5d5c6e1... s3-selftest: use proper names for samba3 dcerpc tests.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 3cb56942ed958723bf312040dd9245cd08e9ffcb
Author: Günther Deschner <gd at samba.org>
Date:   Fri Mar 19 22:37:53 2010 +0100

    s4-smbtorture: rework RPC-DFS test a bit.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source4/torture/rpc/dfs.c |  405 ++++++++++++++++++++++-----------------------
 source4/torture/rpc/rpc.c |    2 +-
 2 files changed, 196 insertions(+), 211 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/torture/rpc/dfs.c b/source4/torture/rpc/dfs.c
index a778e68..3327223 100644
--- a/source4/torture/rpc/dfs.c
+++ b/source4/torture/rpc/dfs.c
@@ -40,8 +40,7 @@
 		return true;\
 	}\
 
-static bool test_NetShareAdd(TALLOC_CTX *mem_ctx,
-			     struct torture_context *tctx,
+static bool test_NetShareAdd(struct torture_context *tctx,
 			     const char *host,
 			     const char *sharename,
 			     const char *dir)
@@ -72,7 +71,7 @@ static bool test_NetShareAdd(TALLOC_CTX *mem_ctx,
 	r.in.server_name	= host;
 	r.in.share 		= i;
 
-	status = libnet_AddShare(libnetctx, mem_ctx, &r);
+	status = libnet_AddShare(libnetctx, tctx, &r);
 	if (!NT_STATUS_IS_OK(status)) {
 		d_printf("Failed to add new share: %s (%s)\n",
 			nt_errstr(status), r.out.error_string);
@@ -82,8 +81,7 @@ static bool test_NetShareAdd(TALLOC_CTX *mem_ctx,
 	return true;
 }
 
-static bool test_NetShareDel(TALLOC_CTX *mem_ctx,
-			     struct torture_context *tctx,
+static bool test_NetShareDel(struct torture_context *tctx,
 			     const char *host,
 			     const char *sharename)
 {
@@ -91,7 +89,7 @@ static bool test_NetShareDel(TALLOC_CTX *mem_ctx,
 	struct libnet_context* libnetctx;
 	struct libnet_DelShare r;
 
-	printf("Deleting share %s\n", sharename);
+	torture_comment(tctx, "Deleting share %s\n", sharename);
 
 	if (!(libnetctx = libnet_context_init(tctx->ev, tctx->lp_ctx))) {
 		return false;
@@ -102,7 +100,7 @@ static bool test_NetShareDel(TALLOC_CTX *mem_ctx,
 	r.in.share_name		= sharename;
 	r.in.server_name	= host;
 
-	status = libnet_DelShare(libnetctx, mem_ctx, &r);
+	status = libnet_DelShare(libnetctx, tctx, &r);
 	if (!NT_STATUS_IS_OK(status)) {
 		d_printf("Failed to delete share: %s (%s)\n",
 			nt_errstr(status), r.out.error_string);
@@ -132,10 +130,11 @@ static bool test_CreateDir(TALLOC_CTX *mem_ctx,
 	return true;
 }
 
-static bool test_DeleteDir(struct smbcli_state *cli,
+static bool test_DeleteDir(struct torture_context *tctx,
+			   struct smbcli_state *cli,
 			   const char *dir)
 {
-	printf("Deleting directory %s\n", dir);
+	torture_comment(tctx, "Deleting directory %s\n", dir);
 
 	if (smbcli_deltree(cli->tree, dir) == -1) {
 		printf("Unable to delete dir %s - %s\n", dir,
@@ -146,47 +145,57 @@ static bool test_DeleteDir(struct smbcli_state *cli,
 	return true;
 }
 
-static bool test_GetManagerVersion(struct dcerpc_binding_handle *b,
-				   TALLOC_CTX *mem_ctx,
-				   enum dfs_ManagerVersion *version)
+static bool test_GetManagerVersion_opts(struct torture_context *tctx,
+					struct dcerpc_binding_handle *b,
+					enum dfs_ManagerVersion *version_p)
 {
-	NTSTATUS status;
 	struct dfs_GetManagerVersion r;
+	enum dfs_ManagerVersion version;
 
-	r.out.version = version;
+	r.out.version = &version;
 
-	status = dcerpc_dfs_GetManagerVersion_r(b, mem_ctx, &r);
-	if (!NT_STATUS_IS_OK(status)) {
-		printf("GetManagerVersion failed - %s\n", nt_errstr(status));
-		return false;
+	torture_assert_ntstatus_ok(tctx,
+		dcerpc_dfs_GetManagerVersion_r(b, tctx, &r),
+		"GetManagerVersion failed");
+
+	if (version_p) {
+		*version_p = version;
 	}
 
 	return true;
 }
 
-static bool test_ManagerInitialize(struct dcerpc_binding_handle *b,
-				   TALLOC_CTX *mem_ctx,
-				   const char *host)
+
+static bool test_GetManagerVersion(struct torture_context *tctx,
+				   struct dcerpc_pipe *p)
+{
+	struct dcerpc_binding_handle *b = p->binding_handle;
+
+	return test_GetManagerVersion_opts(tctx, b, NULL);
+}
+
+static bool test_ManagerInitialize(struct torture_context *tctx,
+				   struct dcerpc_pipe *p)
 {
-	NTSTATUS status;
 	enum dfs_ManagerVersion version;
 	struct dfs_ManagerInitialize r;
+	struct dcerpc_binding_handle *b = p->binding_handle;
+	const char *host = torture_setting_string(tctx, "host", NULL);
 
-	printf("Testing ManagerInitialize\n");
+	torture_comment(tctx, "Testing ManagerInitialize\n");
 
-	if (!test_GetManagerVersion(b, mem_ctx, &version)) {
-		return false;
-	}
+	torture_assert(tctx,
+		test_GetManagerVersion_opts(tctx, b, &version),
+		"GetManagerVersion failed");
 
 	r.in.servername = host;
 	r.in.flags = 0;
 
-	status = dcerpc_dfs_ManagerInitialize_r(b, mem_ctx, &r);
-	if (!NT_STATUS_IS_OK(status)) {
-		printf("ManagerInitialize failed - %s\n", nt_errstr(status));
-		return false;
-	} else if (!W_ERROR_IS_OK(r.out.result)) {
-		printf("dfs_ManagerInitialize failed - %s\n",
+	torture_assert_ntstatus_ok(tctx,
+		dcerpc_dfs_ManagerInitialize_r(b, tctx, &r),
+		"ManagerInitialize failed");
+	if (!W_ERROR_IS_OK(r.out.result)) {
+		torture_warning(tctx, "dfs_ManagerInitialize failed - %s\n",
 			win_errstr(r.out.result));
 		IS_DFS_VERSION_UNSUPPORTED_CALL_W2K3(version, r.out.result);
 		return false;
@@ -195,38 +204,37 @@ static bool test_ManagerInitialize(struct dcerpc_binding_handle *b,
 	return true;
 }
 
-static bool test_GetInfoLevel(struct dcerpc_binding_handle *b,
-			      TALLOC_CTX *mem_ctx,
+static bool test_GetInfoLevel(struct torture_context *tctx,
+			      struct dcerpc_binding_handle *b,
 			      uint16_t level,
 			      const char *root)
 {
-	NTSTATUS status;
 	struct dfs_GetInfo r;
 	union dfs_Info info;
 
-	printf("Testing GetInfo level %u on '%s'\n", level, root);
+	torture_comment(tctx, "Testing GetInfo level %u on '%s'\n", level, root);
 
-	r.in.dfs_entry_path = talloc_strdup(mem_ctx, root);
+	r.in.dfs_entry_path = root;
 	r.in.servername = NULL;
 	r.in.sharename = NULL;
 	r.in.level = level;
 	r.out.info = &info;
 
-	status = dcerpc_dfs_GetInfo_r(b, mem_ctx, &r);
-	if (!NT_STATUS_IS_OK(status)) {
-		printf("GetInfo failed - %s\n", nt_errstr(status));
-		return false;
-	} else if (!W_ERROR_IS_OK(r.out.result) &&
-		   !W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, r.out.result)) {
-		printf("dfs_GetInfo failed - %s\n", win_errstr(r.out.result));
+	torture_assert_ntstatus_ok(tctx,
+		dcerpc_dfs_GetInfo_r(b, tctx, &r),
+		"GetInfo failed");
+
+	if (!W_ERROR_IS_OK(r.out.result) &&
+	    !W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, r.out.result)) {
+		torture_warning(tctx, "dfs_GetInfo failed - %s\n", win_errstr(r.out.result));
 		return false;
 	}
 
 	return true;
 }
 
-static bool test_GetInfo(struct dcerpc_binding_handle *b,
-			 TALLOC_CTX *mem_ctx,
+static bool test_GetInfo(struct torture_context *tctx,
+			 struct dcerpc_binding_handle *b,
 			 const char *root)
 {
 	bool ret = true;
@@ -235,19 +243,18 @@ static bool test_GetInfo(struct dcerpc_binding_handle *b,
 	int i;
 
 	for (i=0;i<ARRAY_SIZE(levels);i++) {
-		if (!test_GetInfoLevel(b, mem_ctx, levels[i], root)) {
+		if (!test_GetInfoLevel(tctx, b, levels[i], root)) {
 			ret = false;
 		}
 	}
 	return ret;
 }
 
-static bool test_EnumLevelEx(struct dcerpc_binding_handle *b,
-			     TALLOC_CTX *mem_ctx,
+static bool test_EnumLevelEx(struct torture_context *tctx,
+			     struct dcerpc_binding_handle *b,
 			     uint16_t level,
 			     const char *dfs_name)
 {
-	NTSTATUS status;
 	struct dfs_EnumEx rex;
 	uint32_t total=0;
 	struct dfs_EnumStruct e;
@@ -267,20 +274,19 @@ static bool test_EnumLevelEx(struct dcerpc_binding_handle *b,
 	e.e.info1->s = &s;
 	s.path = NULL;
 
-	printf("Testing EnumEx level %u on '%s'\n", level, dfs_name);
+	torture_comment(tctx, "Testing EnumEx level %u on '%s'\n", level, dfs_name);
 
-	status = dcerpc_dfs_EnumEx_r(b, mem_ctx, &rex);
-	if (!NT_STATUS_IS_OK(status)) {
-		printf("EnumEx failed - %s\n", nt_errstr(status));
-		return false;
-	}
+	torture_assert_ntstatus_ok(tctx,
+		dcerpc_dfs_EnumEx_r(b, tctx, &rex),
+		"EnumEx failed");
+	torture_assert_werr_ok(tctx, rex.out.result,
+		"EnumEx failed");
 
 	if (level == 1 && rex.out.total) {
 		int i;
 		for (i=0;i<*rex.out.total;i++) {
-			const char *root = talloc_strdup(mem_ctx,
-				rex.out.info->e.info1->s[i].path);
-			if (!test_GetInfo(b, mem_ctx, root)) {
+			const char *root = rex.out.info->e.info1->s[i].path;
+			if (!test_GetInfo(tctx, b, root)) {
 				ret = false;
 			}
 		}
@@ -290,16 +296,15 @@ static bool test_EnumLevelEx(struct dcerpc_binding_handle *b,
 		int i,k;
 		for (i=0;i<*rex.out.total;i++) {
 			uint16_t levels[] = {1, 2, 3, 4, 200}; /* 300 */
-			const char *root = talloc_strdup(mem_ctx,
-				rex.out.info->e.info300->s[i].dom_root);
+			const char *root = rex.out.info->e.info300->s[i].dom_root;
 			for (k=0;k<ARRAY_SIZE(levels);k++) {
-				if (!test_EnumLevelEx(b, mem_ctx,
+				if (!test_EnumLevelEx(tctx, b,
 						      levels[k], root))
 				{
 					ret = false;
 				}
 			}
-			if (!test_GetInfo(b, mem_ctx, root)) {
+			if (!test_GetInfo(tctx, b, root)) {
 				ret = false;
 			}
 		}
@@ -309,11 +314,10 @@ static bool test_EnumLevelEx(struct dcerpc_binding_handle *b,
 }
 
 
-static bool test_EnumLevel(struct dcerpc_binding_handle *b,
-			   TALLOC_CTX *mem_ctx,
+static bool test_EnumLevel(struct torture_context *tctx,
+			   struct dcerpc_binding_handle *b,
 			   uint16_t level)
 {
-	NTSTATUS status;
 	struct dfs_Enum r;
 	uint32_t total=0;
 	struct dfs_EnumStruct e;
@@ -332,15 +336,15 @@ static bool test_EnumLevel(struct dcerpc_binding_handle *b,
 	e.e.info1->s = &s;
 	s.path = NULL;
 
-	printf("Testing Enum level %u\n", level);
+	torture_comment(tctx, "Testing Enum level %u\n", level);
 
-	status = dcerpc_dfs_Enum_r(b, mem_ctx, &r);
-	if (!NT_STATUS_IS_OK(status)) {
-		printf("Enum failed - %s\n", nt_errstr(status));
-		return false;
-	} else if (!W_ERROR_IS_OK(r.out.result) &&
-		   !W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, r.out.result)) {
-		printf("dfs_Enum failed - %s\n", win_errstr(r.out.result));
+	torture_assert_ntstatus_ok(tctx,
+		dcerpc_dfs_Enum_r(b, tctx, &r),
+		"Enum failed");
+
+	if (!W_ERROR_IS_OK(r.out.result) &&
+	    !W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, r.out.result)) {
+		torture_warning(tctx, "dfs_Enum failed - %s\n", win_errstr(r.out.result));
 		return false;
 	}
 
@@ -348,25 +352,26 @@ static bool test_EnumLevel(struct dcerpc_binding_handle *b,
 		int i;
 		for (i=0;i<*r.out.total;i++) {
 			const char *root = r.out.info->e.info1->s[i].path;
-			if (!test_GetInfo(b, mem_ctx, root)) {
+			if (!test_GetInfo(tctx, b, root)) {
 				ret = false;
 			}
 		}
-
 	}
 
 	return ret;
 }
 
 
-static bool test_Enum(struct dcerpc_binding_handle *b, TALLOC_CTX *mem_ctx)
+static bool test_Enum(struct torture_context *tctx,
+		      struct dcerpc_pipe *p)
 {
 	bool ret = true;
 	uint16_t levels[] = {1, 2, 3, 4, 5, 6, 200, 300};
 	int i;
+	struct dcerpc_binding_handle *b = p->binding_handle;
 
 	for (i=0;i<ARRAY_SIZE(levels);i++) {
-		if (!test_EnumLevel(b, mem_ctx, levels[i])) {
+		if (!test_EnumLevel(tctx, b, levels[i])) {
 			ret = false;
 		}
 	}
@@ -374,16 +379,17 @@ static bool test_Enum(struct dcerpc_binding_handle *b, TALLOC_CTX *mem_ctx)
 	return ret;
 }
 
-static bool test_EnumEx(struct dcerpc_binding_handle *b,
-			TALLOC_CTX *mem_ctx,
-			const char *host)
+static bool test_EnumEx(struct torture_context *tctx,
+			struct dcerpc_pipe *p)
 {
 	bool ret = true;
 	uint16_t levels[] = {1, 2, 3, 4, 5, 6, 200, 300};
 	int i;
+	struct dcerpc_binding_handle *b = p->binding_handle;
+	const char *host = torture_setting_string(tctx, "host", NULL);
 
 	for (i=0;i<ARRAY_SIZE(levels);i++) {
-		if (!test_EnumLevelEx(b, mem_ctx, levels[i], host)) {
+		if (!test_EnumLevelEx(tctx, b, levels[i], host)) {
 			ret = false;
 		}
 	}
@@ -391,152 +397,144 @@ static bool test_EnumEx(struct dcerpc_binding_handle *b,
 	return ret;
 }
 
-static bool test_RemoveStdRoot(struct dcerpc_binding_handle *b,
-			       TALLOC_CTX *mem_ctx,
+static bool test_RemoveStdRoot(struct torture_context *tctx,
+			       struct dcerpc_binding_handle *b,
 			       const char *host,
 			       const char *sharename)
 {
 	struct dfs_RemoveStdRoot r;
-	NTSTATUS status;
 
-	printf("Testing RemoveStdRoot\n");
+	torture_comment(tctx, "Testing RemoveStdRoot\n");
 
 	r.in.servername	= host;
 	r.in.rootshare	= sharename;
 	r.in.flags	= 0;
 
-	status = dcerpc_dfs_RemoveStdRoot_r(b, mem_ctx, &r);
-	if (!NT_STATUS_IS_OK(status)) {
-		printf("RemoveStdRoot failed - %s\n", nt_errstr(status));
-		return false;
-	} else if (!W_ERROR_IS_OK(r.out.result)) {
-		printf("dfs_RemoveStdRoot failed - %s\n",
-			win_errstr(r.out.result));
-		return false;
-	}
+	torture_assert_ntstatus_ok(tctx,
+		dcerpc_dfs_RemoveStdRoot_r(b, tctx, &r),
+		"RemoveStdRoot failed");
+	torture_assert_werr_ok(tctx, r.out.result,
+		"dfs_RemoveStdRoot failed");
 
 	return true;
 }
 
-static bool test_AddStdRoot(struct dcerpc_binding_handle *b,
-			    TALLOC_CTX *mem_ctx,
+static bool test_AddStdRoot(struct torture_context *tctx,
+			    struct dcerpc_binding_handle *b,
 			    const char *host,
 			    const char *sharename)
 {
-	NTSTATUS status;
 	struct dfs_AddStdRoot r;
 
-	printf("Testing AddStdRoot\n");
+	torture_comment(tctx, "Testing AddStdRoot\n");
 
 	r.in.servername	= host;
 	r.in.rootshare	= sharename;
 	r.in.comment	= "standard dfs standalone DFS root created by smbtorture (dfs_AddStdRoot)";
 	r.in.flags	= 0;
 
-	status = dcerpc_dfs_AddStdRoot_r(b, mem_ctx, &r);
-	if (!NT_STATUS_IS_OK(status)) {
-		printf("AddStdRoot failed - %s\n", nt_errstr(status));
-		return false;
-	} else if (!W_ERROR_IS_OK(r.out.result)) {
-		printf("dfs_AddStdRoot failed - %s\n",
-			win_errstr(r.out.result));
-		return false;
-	}
+	torture_assert_ntstatus_ok(tctx,
+		dcerpc_dfs_AddStdRoot_r(b, tctx, &r),
+		"AddStdRoot failed");
+	torture_assert_werr_ok(tctx, r.out.result,
+		"AddStdRoot failed");
 
 	return true;
 }
 
-static bool test_AddStdRootForced(struct dcerpc_binding_handle *b,
-				  TALLOC_CTX *mem_ctx,
+static bool test_AddStdRootForced(struct torture_context *tctx,
+				  struct dcerpc_binding_handle *b,
 				  const char *host,
 				  const char *sharename)
 {
-	NTSTATUS status;
 	struct dfs_AddStdRootForced r;
 	enum dfs_ManagerVersion version;
 
-	printf("Testing AddStdRootForced\n");
+	torture_comment(tctx, "Testing AddStdRootForced\n");
 
-	if (!test_GetManagerVersion(b, mem_ctx, &version)) {
-		return false;
-	}
+	torture_assert(tctx,
+		test_GetManagerVersion_opts(tctx, b, &version),
+		"GetManagerVersion failed");
 
 	r.in.servername	= host;
 	r.in.rootshare	= sharename;
 	r.in.comment	= "standard dfs forced standalone DFS root created by smbtorture (dfs_AddStdRootForced)";
 	r.in.store	= SMBTORTURE_DFS_PATHNAME;
 
-	status = dcerpc_dfs_AddStdRootForced_r(b, mem_ctx, &r);
-	if (!NT_STATUS_IS_OK(status)) {
-		printf("AddStdRootForced failed - %s\n", nt_errstr(status));
-		return false;
-	} else if (!W_ERROR_IS_OK(r.out.result)) {
-		printf("dfs_AddStdRootForced failed - %s\n",
+	torture_assert_ntstatus_ok(tctx,
+		dcerpc_dfs_AddStdRootForced_r(b, tctx, &r),
+		"AddStdRootForced failed");
+	if (!W_ERROR_IS_OK(r.out.result)) {
+		torture_warning(tctx, "dfs_AddStdRootForced failed - %s\n",
 			win_errstr(r.out.result));
 		IS_DFS_VERSION_UNSUPPORTED_CALL_W2K3(version, r.out.result);
 		return false;
 	}
 
-	return test_RemoveStdRoot(b, mem_ctx, host, sharename);
+	return test_RemoveStdRoot(tctx, b, host, sharename);
 }
 
-static void test_cleanup_stdroot(struct dcerpc_binding_handle *b,
-				 TALLOC_CTX *mem_ctx,
-				 struct torture_context *tctx,
+static void test_cleanup_stdroot(struct torture_context *tctx,
+				 struct dcerpc_binding_handle *b,
 				 const char *host,
 				 const char *sharename,
 				 const char *dir)
 {
 	struct smbcli_state *cli;
 
-	printf("Cleaning up StdRoot\n");
+	torture_comment(tctx, "Cleaning up StdRoot\n");
 
-	test_RemoveStdRoot(b, mem_ctx, host, sharename);
-	test_NetShareDel(mem_ctx, tctx, host, sharename);
-	torture_open_connection_share(mem_ctx, &cli, tctx, host, "C$", tctx->ev);
-	test_DeleteDir(cli, dir);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list