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 <g...@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 <g...@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 <g...@samba.org>
Date:   Fri Apr 9 13:50:10 2010 +0200

    s3: re-run make samba3-idl.
    
    Guenther

commit eda0aa4b9135a5a6bf7713276beebbbbecc56da9
Author: Günther Deschner <g...@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 <g...@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 <g...@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 <g...@samba.org>
Date:   Fri Apr 9 12:24:59 2010 +0200

    s3: re-run make samba3-idl.
    
    Guenther

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

    winreg: keytype options is a bitmask.
    
    Guenther

commit bc9289995a4d338644aec8a504e284ac65d73c53
Author: Günther Deschner <g...@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

Reply via email to