[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Fri Apr 9 05:57:33 MDT 2010


The branch, master has been updated
       via  5d04aad... s4-smbtorture: Fix winreg test after keytype renameing.
       via  35ef609... s4-winreg: Fix dcesrv_winreg_CreateKey after rename.
       via  faf2d49... s3: re-run make samba3-idl.
       via  eda0aa4... winreg: rename winreg_KeyType to winreg_KeyOptions.
       via  8c593f6... s4-smbtorture: when creating winreg-symlinks during a test, it is very wise to make them volatile.
       via  299a6ff... s4-smbtorture: winreg keytype options is a bitmask.
       via  ab27c6d... s3: re-run make samba3-idl.
       via  8805490... winreg: keytype options is a bitmask.
       via  bc92899... s4-smbtorture: more work on registry REG_LINK (in-registry symlinks) test.
      from  92a051e... s4-waf: only enable the python uuid module if python <= 2.4

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


- Log -----------------------------------------------------------------
commit 5d04aadcb90c0272a2fe03a85ac2f91b99845c32
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 13:51:42 2010 +0200

    s4-smbtorture: Fix winreg test after keytype renameing.
    
    Guenther

commit 35ef60918ba5f9a39ce8d516b65ae5fd56e1c65f
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 13:50:34 2010 +0200

    s4-winreg: Fix dcesrv_winreg_CreateKey after rename.
    
    Guenther

commit faf2d4988bd0eb9390b04b1ea76fb059d5495185
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 13:50:10 2010 +0200

    s3: re-run make samba3-idl.
    
    Guenther

commit eda0aa4b9135a5a6bf7713276beebbbbecc56da9
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 13:49:28 2010 +0200

    winreg: rename winreg_KeyType to winreg_KeyOptions.
    
    Guenther

commit 8c593f63557d056bd80b4ce0b0d5e04f5a56a4bc
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 12:40:36 2010 +0200

    s4-smbtorture: when creating winreg-symlinks during a test, it is very wise to make them volatile.
    
    Guenther

commit 299a6ffe9eb88b5907ca98ad06f9d6ac253945e0
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 12:26:06 2010 +0200

    s4-smbtorture: winreg keytype options is a bitmask.
    
    Guenther

commit ab27c6d138277a01a40c3f6dd735512d466ea722
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 12:24:59 2010 +0200

    s3: re-run make samba3-idl.
    
    Guenther

commit 8805490853f449dc2d71e80d5052a6615740c2a2
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 12:24:18 2010 +0200

    winreg: keytype options is a bitmask.
    
    Guenther

commit bc9289995a4d338644aec8a504e284ac65d73c53
Author: Günther Deschner <gd at samba.org>
Date:   Fri Apr 9 01:07:39 2010 +0200

    s4-smbtorture: more work on registry REG_LINK (in-registry symlinks) test.
    
    Guenther

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

Summary of changes:
 librpc/gen_ndr/cli_winreg.c            |    8 ++--
 librpc/gen_ndr/cli_winreg.h            |    8 ++--
 librpc/gen_ndr/ndr_winreg.c            |   38 ++++++++++----------
 librpc/gen_ndr/ndr_winreg.h            |    2 +-
 librpc/gen_ndr/winreg.h                |   24 ++++--------
 librpc/idl/winreg.idl                  |   16 +++++----
 source4/rpc_server/winreg/rpc_winreg.c |    2 +-
 source4/torture/rpc/winreg.c           |   60 +++++++++++++++++++------------
 8 files changed, 83 insertions(+), 75 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/cli_winreg.c b/librpc/gen_ndr/cli_winreg.c
index 57e78a7..208ca66 100644
--- a/librpc/gen_ndr/cli_winreg.c
+++ b/librpc/gen_ndr/cli_winreg.c
@@ -939,7 +939,7 @@ struct tevent_req *rpccli_winreg_CreateKey_send(TALLOC_CTX *mem_ctx,
 						struct policy_handle *_handle /* [in] [ref] */,
 						struct winreg_String _name /* [in]  */,
 						struct winreg_String _keyclass /* [in]  */,
-						enum winreg_KeyType _options /* [in]  */,
+						uint32_t _options /* [in]  */,
 						uint32_t _access_mask /* [in]  */,
 						struct winreg_SecBuf *_secdesc /* [in] [unique] */,
 						struct policy_handle *_new_handle /* [out] [ref] */,
@@ -1058,7 +1058,7 @@ NTSTATUS rpccli_winreg_CreateKey(struct rpc_pipe_client *cli,
 				 struct policy_handle *handle /* [in] [ref] */,
 				 struct winreg_String name /* [in]  */,
 				 struct winreg_String keyclass /* [in]  */,
-				 enum winreg_KeyType options /* [in]  */,
+				 uint32_t options /* [in]  */,
 				 uint32_t access_mask /* [in]  */,
 				 struct winreg_SecBuf *secdesc /* [in] [unique] */,
 				 struct policy_handle *new_handle /* [out] [ref] */,
@@ -2388,7 +2388,7 @@ struct tevent_req *rpccli_winreg_OpenKey_send(TALLOC_CTX *mem_ctx,
 					      struct rpc_pipe_client *cli,
 					      struct policy_handle *_parent_handle /* [in] [ref] */,
 					      struct winreg_String _keyname /* [in]  */,
-					      enum winreg_KeyType _options /* [in]  */,
+					      uint32_t _options /* [in]  */,
 					      uint32_t _access_mask /* [in]  */,
 					      struct policy_handle *_handle /* [out] [ref] */)
 {
@@ -2497,7 +2497,7 @@ NTSTATUS rpccli_winreg_OpenKey(struct rpc_pipe_client *cli,
 			       TALLOC_CTX *mem_ctx,
 			       struct policy_handle *parent_handle /* [in] [ref] */,
 			       struct winreg_String keyname /* [in]  */,
-			       enum winreg_KeyType options /* [in]  */,
+			       uint32_t options /* [in]  */,
 			       uint32_t access_mask /* [in]  */,
 			       struct policy_handle *handle /* [out] [ref] */,
 			       WERROR *werror)
diff --git a/librpc/gen_ndr/cli_winreg.h b/librpc/gen_ndr/cli_winreg.h
index 670958e..4ed75fd 100644
--- a/librpc/gen_ndr/cli_winreg.h
+++ b/librpc/gen_ndr/cli_winreg.h
@@ -93,7 +93,7 @@ struct tevent_req *rpccli_winreg_CreateKey_send(TALLOC_CTX *mem_ctx,
 						struct policy_handle *_handle /* [in] [ref] */,
 						struct winreg_String _name /* [in]  */,
 						struct winreg_String _keyclass /* [in]  */,
-						enum winreg_KeyType _options /* [in]  */,
+						uint32_t _options /* [in]  */,
 						uint32_t _access_mask /* [in]  */,
 						struct winreg_SecBuf *_secdesc /* [in] [unique] */,
 						struct policy_handle *_new_handle /* [out] [ref] */,
@@ -106,7 +106,7 @@ NTSTATUS rpccli_winreg_CreateKey(struct rpc_pipe_client *cli,
 				 struct policy_handle *handle /* [in] [ref] */,
 				 struct winreg_String name /* [in]  */,
 				 struct winreg_String keyclass /* [in]  */,
-				 enum winreg_KeyType options /* [in]  */,
+				 uint32_t options /* [in]  */,
 				 uint32_t access_mask /* [in]  */,
 				 struct winreg_SecBuf *secdesc /* [in] [unique] */,
 				 struct policy_handle *new_handle /* [out] [ref] */,
@@ -249,7 +249,7 @@ struct tevent_req *rpccli_winreg_OpenKey_send(TALLOC_CTX *mem_ctx,
 					      struct rpc_pipe_client *cli,
 					      struct policy_handle *_parent_handle /* [in] [ref] */,
 					      struct winreg_String _keyname /* [in]  */,
-					      enum winreg_KeyType _options /* [in]  */,
+					      uint32_t _options /* [in]  */,
 					      uint32_t _access_mask /* [in]  */,
 					      struct policy_handle *_handle /* [out] [ref] */);
 NTSTATUS rpccli_winreg_OpenKey_recv(struct tevent_req *req,
@@ -259,7 +259,7 @@ NTSTATUS rpccli_winreg_OpenKey(struct rpc_pipe_client *cli,
 			       TALLOC_CTX *mem_ctx,
 			       struct policy_handle *parent_handle /* [in] [ref] */,
 			       struct winreg_String keyname /* [in]  */,
-			       enum winreg_KeyType options /* [in]  */,
+			       uint32_t options /* [in]  */,
 			       uint32_t access_mask /* [in]  */,
 			       struct policy_handle *handle /* [out] [ref] */,
 			       WERROR *werror);
diff --git a/librpc/gen_ndr/ndr_winreg.c b/librpc/gen_ndr/ndr_winreg.c
index fcb65d4..964b109 100644
--- a/librpc/gen_ndr/ndr_winreg.c
+++ b/librpc/gen_ndr/ndr_winreg.c
@@ -217,30 +217,30 @@ _PUBLIC_ void ndr_print_winreg_SecBuf(struct ndr_print *ndr, const char *name, c
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_winreg_KeyType(struct ndr_push *ndr, int ndr_flags, enum winreg_KeyType r)
+static enum ndr_err_code ndr_push_winreg_KeyOptions(struct ndr_push *ndr, int ndr_flags, uint32_t r)
 {
-	NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
+	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
 	return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_winreg_KeyType(struct ndr_pull *ndr, int ndr_flags, enum winreg_KeyType *r)
+static enum ndr_err_code ndr_pull_winreg_KeyOptions(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
 {
 	uint32_t v;
-	NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
+	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
 	*r = v;
 	return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ void ndr_print_winreg_KeyType(struct ndr_print *ndr, const char *name, enum winreg_KeyType r)
+_PUBLIC_ void ndr_print_winreg_KeyOptions(struct ndr_print *ndr, const char *name, uint32_t r)
 {
-	const char *val = NULL;
-
-	switch (r) {
-		case REG_KEYTYPE_NON_VOLATILE: val = "REG_KEYTYPE_NON_VOLATILE"; break;
-		case REG_KEYTYPE_VOLATILE: val = "REG_KEYTYPE_VOLATILE"; break;
-		case REG_KEYTYPE_SYMLINK: val = "REG_KEYTYPE_SYMLINK"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
+	ndr_print_uint32(ndr, name, r);
+	ndr->depth++;
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "REG_OPTION_NON_VOLATILE", REG_OPTION_NON_VOLATILE, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "REG_OPTION_VOLATILE", REG_OPTION_VOLATILE, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "REG_OPTION_CREATE_LINK", REG_OPTION_CREATE_LINK, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "REG_OPTION_BACKUP_RESTORE", REG_OPTION_BACKUP_RESTORE, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "REG_OPTION_OPEN_LINK", REG_OPTION_OPEN_LINK, r);
+	ndr->depth--;
 }
 
 static enum ndr_err_code ndr_push_winreg_CreateAction(struct ndr_push *ndr, int ndr_flags, enum winreg_CreateAction r)
@@ -1067,7 +1067,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_winreg_CreateKey(struct ndr_push *ndr, int f
 		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.handle));
 		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
 		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.keyclass));
-		NDR_CHECK(ndr_push_winreg_KeyType(ndr, NDR_SCALARS, r->in.options));
+		NDR_CHECK(ndr_push_winreg_KeyOptions(ndr, NDR_SCALARS, r->in.options));
 		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.secdesc));
 		if (r->in.secdesc) {
@@ -1112,7 +1112,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_winreg_CreateKey(struct ndr_pull *ndr, int f
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
 		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.keyclass));
-		NDR_CHECK(ndr_pull_winreg_KeyType(ndr, NDR_SCALARS, &r->in.options));
+		NDR_CHECK(ndr_pull_winreg_KeyOptions(ndr, NDR_SCALARS, &r->in.options));
 		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
 		if (_ptr_secdesc) {
@@ -1182,7 +1182,7 @@ _PUBLIC_ void ndr_print_winreg_CreateKey(struct ndr_print *ndr, const char *name
 		ndr->depth--;
 		ndr_print_winreg_String(ndr, "name", &r->in.name);
 		ndr_print_winreg_String(ndr, "keyclass", &r->in.keyclass);
-		ndr_print_winreg_KeyType(ndr, "options", r->in.options);
+		ndr_print_winreg_KeyOptions(ndr, "options", r->in.options);
 		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
 		ndr_print_ptr(ndr, "secdesc", r->in.secdesc);
 		ndr->depth++;
@@ -2179,7 +2179,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_winreg_OpenKey(struct ndr_push *ndr, int fla
 		}
 		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.parent_handle));
 		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.keyname));
-		NDR_CHECK(ndr_push_winreg_KeyType(ndr, NDR_SCALARS, r->in.options));
+		NDR_CHECK(ndr_push_winreg_KeyOptions(ndr, NDR_SCALARS, r->in.options));
 		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
 	}
 	if (flags & NDR_OUT) {
@@ -2207,7 +2207,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_winreg_OpenKey(struct ndr_pull *ndr, int fla
 		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.parent_handle));
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parent_handle_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.keyname));
-		NDR_CHECK(ndr_pull_winreg_KeyType(ndr, NDR_SCALARS, &r->in.options));
+		NDR_CHECK(ndr_pull_winreg_KeyOptions(ndr, NDR_SCALARS, &r->in.options));
 		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
 		NDR_PULL_ALLOC(ndr, r->out.handle);
 		ZERO_STRUCTP(r->out.handle);
@@ -2240,7 +2240,7 @@ _PUBLIC_ void ndr_print_winreg_OpenKey(struct ndr_print *ndr, const char *name,
 		ndr_print_policy_handle(ndr, "parent_handle", r->in.parent_handle);
 		ndr->depth--;
 		ndr_print_winreg_String(ndr, "keyname", &r->in.keyname);
-		ndr_print_winreg_KeyType(ndr, "options", r->in.options);
+		ndr_print_winreg_KeyOptions(ndr, "options", r->in.options);
 		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
 		ndr->depth--;
 	}
diff --git a/librpc/gen_ndr/ndr_winreg.h b/librpc/gen_ndr/ndr_winreg.h
index 39f10e2..c16e2fd 100644
--- a/librpc/gen_ndr/ndr_winreg.h
+++ b/librpc/gen_ndr/ndr_winreg.h
@@ -90,7 +90,7 @@ enum ndr_err_code ndr_pull_winreg_String(struct ndr_pull *ndr, int ndr_flags, st
 void ndr_print_winreg_String(struct ndr_print *ndr, const char *name, const struct winreg_String *r);
 void ndr_print_KeySecurityData(struct ndr_print *ndr, const char *name, const struct KeySecurityData *r);
 void ndr_print_winreg_SecBuf(struct ndr_print *ndr, const char *name, const struct winreg_SecBuf *r);
-void ndr_print_winreg_KeyType(struct ndr_print *ndr, const char *name, enum winreg_KeyType r);
+void ndr_print_winreg_KeyOptions(struct ndr_print *ndr, const char *name, uint32_t r);
 void ndr_print_winreg_CreateAction(struct ndr_print *ndr, const char *name, enum winreg_CreateAction r);
 void ndr_print_winreg_StringBuf(struct ndr_print *ndr, const char *name, const struct winreg_StringBuf *r);
 void ndr_print_winreg_ValNameBuf(struct ndr_print *ndr, const char *name, const struct winreg_ValNameBuf *r);
diff --git a/librpc/gen_ndr/winreg.h b/librpc/gen_ndr/winreg.h
index aa05148..c0e13d0 100644
--- a/librpc/gen_ndr/winreg.h
+++ b/librpc/gen_ndr/winreg.h
@@ -42,20 +42,12 @@ struct winreg_SecBuf {
 	uint8_t inherit;
 };
 
-enum winreg_KeyType
-#ifndef USE_UINT_ENUMS
- {
-	REG_KEYTYPE_NON_VOLATILE=(int)(0x00000000),
-	REG_KEYTYPE_VOLATILE=(int)(0x00000001),
-	REG_KEYTYPE_SYMLINK=(int)(0x00000002)
-}
-#else
- { __donnot_use_enum_winreg_KeyType=0x7FFFFFFF}
-#define REG_KEYTYPE_NON_VOLATILE ( 0x00000000 )
-#define REG_KEYTYPE_VOLATILE ( 0x00000001 )
-#define REG_KEYTYPE_SYMLINK ( 0x00000002 )
-#endif
-;
+/* bitmap winreg_KeyOptions */
+#define REG_OPTION_NON_VOLATILE ( 0x00000000 )
+#define REG_OPTION_VOLATILE ( 0x00000001 )
+#define REG_OPTION_CREATE_LINK ( 0x00000002 )
+#define REG_OPTION_BACKUP_RESTORE ( 0x00000004 )
+#define REG_OPTION_OPEN_LINK ( 0x00000008 )
 
 enum winreg_CreateAction
 #ifndef USE_UINT_ENUMS
@@ -192,7 +184,7 @@ struct winreg_CreateKey {
 		struct policy_handle *handle;/* [ref] */
 		struct winreg_String name;
 		struct winreg_String keyclass;
-		enum winreg_KeyType options;
+		uint32_t options;
 		uint32_t access_mask;
 		struct winreg_SecBuf *secdesc;/* [unique] */
 		enum winreg_CreateAction *action_taken;/* [unique] */
@@ -338,7 +330,7 @@ struct winreg_OpenKey {
 	struct {
 		struct policy_handle *parent_handle;/* [ref] */
 		struct winreg_String keyname;
-		enum winreg_KeyType options;
+		uint32_t options;
 		uint32_t access_mask;
 	} in;
 
diff --git a/librpc/idl/winreg.idl b/librpc/idl/winreg.idl
index bb0870c..349018a 100644
--- a/librpc/idl/winreg.idl
+++ b/librpc/idl/winreg.idl
@@ -112,11 +112,13 @@ import "lsa.idl", "security.idl", "misc.idl";
 		boolean8  inherit;
 	} winreg_SecBuf;
 
-	typedef [v1_enum] enum {
-		REG_KEYTYPE_NON_VOLATILE	= 0x00000000,
-		REG_KEYTYPE_VOLATILE		= 0x00000001,
-		REG_KEYTYPE_SYMLINK		= 0x00000002
-	} winreg_KeyType;
+	typedef [bitmap32bit] bitmap {
+		REG_OPTION_NON_VOLATILE		= 0x00000000,
+		REG_OPTION_VOLATILE		= 0x00000001,
+		REG_OPTION_CREATE_LINK		= 0x00000002,
+		REG_OPTION_BACKUP_RESTORE	= 0x00000004,
+		REG_OPTION_OPEN_LINK		= 0x00000008
+	} winreg_KeyOptions;
 
 	typedef [v1_enum] enum {
 		REG_ACTION_NONE         = 0, /* used by caller */
@@ -128,7 +130,7 @@ import "lsa.idl", "security.idl", "misc.idl";
 		[in,ref] policy_handle *handle,
 		[in] winreg_String name,
 		[in] winreg_String keyclass,
-		[in] winreg_KeyType options,
+		[in] winreg_KeyOptions options,
 		[in] winreg_AccessMask access_mask,
 		[in,unique] winreg_SecBuf *secdesc,
 		[out,ref] policy_handle *new_handle,
@@ -236,7 +238,7 @@ import "lsa.idl", "security.idl", "misc.idl";
 	[public] WERROR winreg_OpenKey(
 		[in,ref] policy_handle *parent_handle,
 		[in] winreg_String keyname,
-		[in] winreg_KeyType options,
+		[in] winreg_KeyOptions options,
 		[in] winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
diff --git a/source4/rpc_server/winreg/rpc_winreg.c b/source4/rpc_server/winreg/rpc_winreg.c
index af67167..cfaee09 100644
--- a/source4/rpc_server/winreg/rpc_winreg.c
+++ b/source4/rpc_server/winreg/rpc_winreg.c
@@ -128,7 +128,7 @@ static WERROR dcesrv_winreg_CreateKey(struct dcesrv_call_state *dce_call,
 	case SECURITY_SYSTEM:
 	case SECURITY_ADMINISTRATOR:
 		/* we support only non volatile keys */
-		if (r->in.options != REG_KEYTYPE_NON_VOLATILE) {
+		if (r->in.options != REG_OPTION_NON_VOLATILE) {
 			return WERR_NOT_SUPPORTED;
 		}
 
diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c
index 8b57dd8..ba82e88 100644
--- a/source4/torture/rpc/winreg.c
+++ b/source4/torture/rpc/winreg.c
@@ -114,7 +114,7 @@ static bool test_CreateKey_opts(struct torture_context *tctx,
 				struct policy_handle *handle,
 				const char *name,
 				const char *kclass,
-				enum winreg_KeyType options,
+				uint32_t options,
 				uint32_t access_mask,
 				struct winreg_SecBuf *secdesc,
 				WERROR expected_result,
@@ -159,7 +159,7 @@ static bool test_CreateKey(struct dcerpc_binding_handle *b,
 			   const char *kclass)
 {
 	return test_CreateKey_opts(tctx, b, handle, name, kclass,
-				   REG_KEYTYPE_NON_VOLATILE,
+				   REG_OPTION_NON_VOLATILE,
 				   SEC_FLAG_MAXIMUM_ALLOWED,
 				   NULL, /* secdesc */
 				   WERR_OK,
@@ -393,7 +393,7 @@ static bool test_OpenKey_opts(struct torture_context *tctx,
 			      struct dcerpc_binding_handle *b,
 			      struct policy_handle *hive_handle,
 			      const char *keyname,
-			      enum winreg_KeyType options,
+			      uint32_t options,
 			      uint32_t access_mask,
 			      struct policy_handle *key_handle,
 			      WERROR expected_result)
@@ -422,7 +422,7 @@ static bool test_OpenKey(struct dcerpc_binding_handle *b,
 			 const char *keyname, struct policy_handle *key_handle)
 {
 	return test_OpenKey_opts(tctx, b, hive_handle, keyname,
-				 REG_KEYTYPE_NON_VOLATILE,
+				 REG_OPTION_NON_VOLATILE,
 				 SEC_FLAG_MAXIMUM_ALLOWED,
 				 key_handle,
 				 WERR_OK);
@@ -504,7 +504,7 @@ static bool _test_SecurityDescriptor(struct dcerpc_pipe *p,
 
 	torture_assert(tctx,
 		test_OpenKey_opts(tctx, b, handle, key,
-				  REG_KEYTYPE_NON_VOLATILE,
+				  REG_OPTION_NON_VOLATILE,
 				  access_mask,
 				  &new_handle,
 				  open_werr),
@@ -610,7 +610,7 @@ static bool _test_sacl_trustee_present(struct dcerpc_pipe *p,
 
 	torture_assert(tctx,
 		test_OpenKey_opts(tctx, b, handle, key,
-				  REG_KEYTYPE_NON_VOLATILE,
+				  REG_OPTION_NON_VOLATILE,
 				  SEC_FLAG_SYSTEM_SECURITY,
 				  &new_handle,
 				  WERR_OK),
@@ -1120,7 +1120,7 @@ static bool test_SetSecurityDescriptor_SecInfo(struct dcerpc_pipe *p,
 
 	torture_assert(tctx,
 		test_OpenKey_opts(tctx, b, handle, key,
-				  REG_KEYTYPE_NON_VOLATILE,
+				  REG_OPTION_NON_VOLATILE,
 				  access_mask,
 				  &new_handle,
 				  WERR_OK),
@@ -2092,7 +2092,7 @@ static bool test_HKLM_wellknown(struct torture_context *tctx,
 	if (torture_setting_bool(tctx, "samba3", false)) {
 		torture_assert(tctx, test_OpenKey_opts(tctx, b, handle,
 			       KEY_CURRENT_VERSION,
-			       REG_KEYTYPE_NON_VOLATILE,
+			       REG_OPTION_NON_VOLATILE,
 			       KEY_QUERY_VALUE,
 			       &newhandle,
 			       WERR_OK),
@@ -2124,29 +2124,29 @@ static bool test_volatile_keys(struct torture_context *tctx,
 	struct policy_handle new_handle;
 	enum winreg_CreateAction action_taken;
 
-	torture_comment(tctx, "Testing REG_KEYTYPE_VOLATILE key\n");
+	torture_comment(tctx, "Testing REG_OPTION_VOLATILE key\n");
 
 	torture_assert(tctx,
 		test_CreateKey_opts(tctx, b, handle, TEST_KEY_VOLATILE, NULL,
-				    REG_KEYTYPE_VOLATILE,
+				    REG_OPTION_VOLATILE,
 				    SEC_FLAG_MAXIMUM_ALLOWED,
 				    NULL,
 				    WERR_OK,
 				    &action_taken,
 				    &new_handle),
-		"failed to create REG_KEYTYPE_VOLATILE type key");
+		"failed to create REG_OPTION_VOLATILE type key");
 
 	torture_assert_int_equal(tctx, action_taken, REG_CREATED_NEW_KEY, "unexpected action");
 
 	torture_assert(tctx,
 		test_CreateKey_opts(tctx, b, &new_handle, TEST_SUBKEY_VOLATILE, NULL,
-				    REG_KEYTYPE_NON_VOLATILE,
+				    REG_OPTION_NON_VOLATILE,
 				    SEC_FLAG_MAXIMUM_ALLOWED,
 				    NULL,
 				    WERR_CHILD_MUST_BE_VOLATILE,
 				    NULL,
 				    NULL),
-		"failed to fail create REG_KEYTYPE_VOLATILE type key");
+		"failed to fail create REG_OPTION_VOLATILE type key");
 
 	torture_assert(tctx,
 		test_CloseKey(b, tctx, &new_handle),
@@ -2154,7 +2154,7 @@ static bool test_volatile_keys(struct torture_context *tctx,
 
 	torture_assert(tctx,
 		test_OpenKey_opts(tctx, b, handle, TEST_KEY_VOLATILE,
-				  REG_KEYTYPE_NON_VOLATILE,
+				  REG_OPTION_NON_VOLATILE,
 				  SEC_FLAG_MAXIMUM_ALLOWED,
 				  &new_handle,
 				  WERR_OK),
@@ -2166,13 +2166,13 @@ static bool test_volatile_keys(struct torture_context *tctx,
 
 	torture_assert(tctx,
 		test_CreateKey_opts(tctx, b, handle, TEST_KEY_VOLATILE, NULL,
-				    REG_KEYTYPE_VOLATILE,
+				    REG_OPTION_VOLATILE,
 				    SEC_FLAG_MAXIMUM_ALLOWED,
 				    NULL,
 				    WERR_OK,
 				    &action_taken,
 				    &new_handle),
-		"failed to create REG_KEYTYPE_VOLATILE type key");
+		"failed to create REG_OPTION_VOLATILE type key");
 
 	torture_assert_int_equal(tctx, action_taken, REG_CREATED_NEW_KEY, "unexpected action");
 
@@ -2182,7 +2182,7 @@ static bool test_volatile_keys(struct torture_context *tctx,
 
 	torture_assert(tctx,
 		test_OpenKey_opts(tctx, b, handle, TEST_KEY_VOLATILE,
-				  REG_KEYTYPE_VOLATILE,
+				  REG_OPTION_VOLATILE,
 				  SEC_FLAG_MAXIMUM_ALLOWED,
 				  &new_handle,
 				  WERR_OK),
@@ -2205,40 +2205,54 @@ static bool test_symlink_keys(struct torture_context *tctx,
 {
 	struct policy_handle new_handle;
 	enum winreg_CreateAction action_taken;
+	DATA_BLOB blob;
+	/* symlink destination needs to be a kernel mode registry path */
+	const char *dest = "\\Registry\\MACHINE\\SOFTWARE\\foo";
 
 	/* disable until we know how to *not* screw up a windows registry */
 	torture_skip(tctx, "symlink test disabled");
 
-	torture_comment(tctx, "Testing REG_KEYTYPE_SYMLINK key\n");
+	torture_comment(tctx, "Testing REG_OPTION_CREATE_LINK key\n");
 
 	test_DeleteKey(b, tctx, handle, TEST_KEY_SYMLINK);
 
 	torture_assert(tctx,
 		test_CreateKey_opts(tctx, b, handle, TEST_KEY_SYMLINK, NULL,
-				    REG_KEYTYPE_SYMLINK,
+				    REG_OPTION_CREATE_LINK | REG_OPTION_VOLATILE,
 				    SEC_FLAG_MAXIMUM_ALLOWED,
 				    NULL,
 				    WERR_OK,
 				    &action_taken,
 				    &new_handle),
-		"failed to create REG_KEYTYPE_SYMLINK type key");
+		"failed to create REG_OPTION_CREATE_LINK type key");
 
 	torture_assert_int_equal(tctx, action_taken, REG_CREATED_NEW_KEY, "unexpected action");
 
 	torture_assert(tctx,
+		convert_string_talloc(tctx, CH_UNIX, CH_UTF16,
+				      dest, strlen(dest), /* not NULL terminated */
+				      &blob.data, &blob.length,
+				      false),
+		"failed to convert");
+
+	torture_assert(tctx,
+		test_SetValue(b, tctx, &new_handle, "SymbolicLinkValue", REG_LINK, blob.data, blob.length),
+		"failed to create SymbolicLinkValue value");
+
+	torture_assert(tctx,
 		test_CloseKey(b, tctx, &new_handle),
 		"failed to close");
 
 	torture_assert(tctx,
 		test_OpenKey_opts(tctx, b, handle, TEST_KEY_SYMLINK,
-				  REG_KEYTYPE_SYMLINK,
+				  REG_OPTION_OPEN_LINK | REG_OPTION_VOLATILE,
 				  SEC_FLAG_MAXIMUM_ALLOWED,
 				  &new_handle,
 				  WERR_OK),
 		"failed to open symlink key");
 
 	torture_assert(tctx,
-		test_DeleteKey(b, tctx, &new_handle, TEST_KEY_SYMLINK),
+		test_DeleteKey(b, tctx, handle, TEST_KEY_SYMLINK),


-- 
Samba Shared Repository


More information about the samba-cvs mailing list