[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Fri Apr 9 08:17:55 MDT 2010


The branch, master has been updated
       via  48daa0b... s4-smbtorture: add test to check for registry symlinks in RPC-SPOOLSS-PRINTER.
      from  a21be5f... s4-smbtorture: fix build after winreg IDL renames, sorry..

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


- Log -----------------------------------------------------------------
commit 48daa0b6ee1d7d1214455112b1e9dad406c29be3
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 15:58:01 2010 +0200

    s4-smbtorture: add test to check for registry symlinks in RPC-SPOOLSS-PRINTER.
    
    Guenther

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

Summary of changes:
 source4/torture/rpc/spoolss.c |   72 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 66 insertions(+), 6 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index 59f2b5f..1517b4d 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -3692,17 +3692,18 @@ static void init_winreg_String(struct winreg_String *name, const char *s)
 	}
 }
 
-static bool test_winreg_OpenKey(struct torture_context *tctx,
-				struct dcerpc_binding_handle *b,
-				struct policy_handle *hive_handle,
-				const char *keyname,
-				struct policy_handle *key_handle)
+static bool test_winreg_OpenKey_opts(struct torture_context *tctx,
+				     struct dcerpc_binding_handle *b,
+				     struct policy_handle *hive_handle,
+				     const char *keyname,
+				     uint32_t options,
+				     struct policy_handle *key_handle)
 {
 	struct winreg_OpenKey r;
 
 	r.in.parent_handle = hive_handle;
 	init_winreg_String(&r.in.keyname, keyname);
-	r.in.options = REG_OPTION_NON_VOLATILE;
+	r.in.options = options;
 	r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
 	r.out.handle = key_handle;
 
@@ -3714,6 +3715,16 @@ static bool test_winreg_OpenKey(struct torture_context *tctx,
 	return true;
 }
 
+static bool test_winreg_OpenKey(struct torture_context *tctx,
+				struct dcerpc_binding_handle *b,
+				struct policy_handle *hive_handle,
+				const char *keyname,
+				struct policy_handle *key_handle)
+{
+	return test_winreg_OpenKey_opts(tctx, b, hive_handle, keyname,
+					REG_OPTION_NON_VOLATILE, key_handle);
+}
+
 static bool test_winreg_CloseKey(struct torture_context *tctx,
 				 struct dcerpc_binding_handle *b,
 				 struct policy_handle *handle)
@@ -3843,6 +3854,46 @@ static bool test_GetForm_winreg(struct torture_context *tctx,
 	return true;
 }
 
+static bool test_winreg_symbolic_link(struct torture_context *tctx,
+				      struct dcerpc_binding_handle *b,
+				      struct policy_handle *handle,
+				      const char *symlink_keyname,
+				      const char *symlink_destination)
+{
+	/* check if the first key is a symlink to the second key */
+
+	enum winreg_Type w_type;
+	uint32_t w_size;
+	uint32_t w_length;
+	uint8_t *w_data;
+	struct policy_handle key_handle;
+	DATA_BLOB blob;
+	const char *str;
+
+	torture_assert(tctx,
+		test_winreg_OpenKey_opts(tctx, b, handle, symlink_keyname, REG_OPTION_OPEN_LINK, &key_handle),
+			"failed to open key link");
+
+	torture_assert(tctx,
+		test_winreg_QueryValue(tctx, b, &key_handle,
+				       "SymbolicLinkValue",
+				       &w_type, &w_size, &w_length, &w_data),
+		"failed to query for 'SymbolicLinkValue' attribute");
+
+	torture_assert_int_equal(tctx, w_type, REG_LINK, "unexpected type");
+
+	blob = data_blob(w_data, w_size);
+	str = reg_val_data_string(tctx, lp_iconv_convenience(tctx->lp_ctx), REG_SZ, blob);
+
+	torture_assert_str_equal(tctx, str, symlink_destination, "unexpected symlink target string");
+
+	torture_assert(tctx,
+		test_winreg_CloseKey(tctx, b, &key_handle),
+		"failed to close key link");
+
+	return true;
+}
+
 static const char *strip_unc(const char *unc)
 {
 	char *name;
@@ -3973,6 +4024,15 @@ do {\
 		"sd unequal");\
 } while(0);
 
+
+	if (!test_winreg_symbolic_link(tctx, winreg_handle, hive_handle,
+				       TOP_LEVEL_CONTROL_PRINTERS_KEY,
+				       "\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers"))
+	{
+		torture_warning(tctx, "failed to check for winreg symlink");
+	}
+
+
 	for (i=0; i < ARRAY_SIZE(keys); i++) {
 
 		const char *printer_key;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list