samba-cvs.cvs
[Top] [All Lists]

svn commit: samba r19918 - in branches/SAMBA_3_0/source: librpc/gen_ndr

Subject: svn commit: samba r19918 - in branches/SAMBA_3_0/source: librpc/gen_ndr librpc/idl rpc_server
From: vlendec@xxxxxxxxx
Date: Mon, 27 Nov 2006 14:05:28 +0000 (GMT)
Author: vlendec
Date: 2006-11-27 14:05:28 +0000 (Mon, 27 Nov 2006)
New Revision: 19918

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19918

Log:
Convert winreg_CreateKey to use a ref ** instead of a unique *. W2k3 can still
create keys on Samba and vice versa.

Jelmer, please check.

Thanks,

Volker

Modified:
   branches/SAMBA_3_0/source/librpc/gen_ndr/cli_winreg.c
   branches/SAMBA_3_0/source/librpc/gen_ndr/ndr_winreg.c
   branches/SAMBA_3_0/source/librpc/gen_ndr/srv_winreg.h
   branches/SAMBA_3_0/source/librpc/gen_ndr/winreg.h
   branches/SAMBA_3_0/source/librpc/idl/winreg.idl
   branches/SAMBA_3_0/source/rpc_server/srv_winreg_nt.c


Changeset:
Modified: branches/SAMBA_3_0/source/librpc/gen_ndr/cli_winreg.c
===================================================================
--- branches/SAMBA_3_0/source/librpc/gen_ndr/cli_winreg.c       2006-11-27 
08:41:41 UTC (rev 19917)
+++ branches/SAMBA_3_0/source/librpc/gen_ndr/cli_winreg.c       2006-11-27 
14:05:28 UTC (rev 19918)
@@ -209,7 +209,7 @@
        r.in.options = options;
        r.in.access_mask = access_mask;
        r.in.secdesc = secdesc;
-       r.in.action_taken = *action_taken;
+       r.in.action_taken = action_taken;
        
        if (DEBUGLEVEL >= 10)
                NDR_PRINT_IN_DEBUG(winreg_CreateKey, &r);
@@ -229,7 +229,7 @@
        
        /* Return variables */
        *new_handle = *r.out.new_handle;
-       *action_taken = r.out.action_taken;
+       *action_taken = *r.out.action_taken;
        
        /* Return result */
        return werror_to_ntstatus(r.out.result);

Modified: branches/SAMBA_3_0/source/librpc/gen_ndr/ndr_winreg.c
===================================================================
--- branches/SAMBA_3_0/source/librpc/gen_ndr/ndr_winreg.c       2006-11-27 
08:41:41 UTC (rev 19917)
+++ branches/SAMBA_3_0/source/librpc/gen_ndr/ndr_winreg.c       2006-11-27 
14:05:28 UTC (rev 19918)
@@ -1019,18 +1019,18 @@
                if (r->in.secdesc) {
                        NDR_CHECK(ndr_push_winreg_SecBuf(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->in.secdesc));
                }
-               NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.action_taken));
-               if (r->in.action_taken) {
-                       NDR_CHECK(ndr_push_winreg_CreateAction(ndr, 
NDR_SCALARS, *r->in.action_taken));
-               }
+               if (r->in.action_taken == NULL) return 
NT_STATUS_INVALID_PARAMETER_MIX;
+               if (*r->in.action_taken == NULL) return 
NT_STATUS_INVALID_PARAMETER_MIX;
+               NDR_CHECK(ndr_push_ref_ptr(ndr));
+               NDR_CHECK(ndr_push_winreg_CreateAction(ndr, NDR_SCALARS, 
**r->in.action_taken));
        }
        if (flags & NDR_OUT) {
                if (r->out.new_handle == NULL) return 
NT_STATUS_INVALID_PARAMETER_MIX;
                NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, 
r->out.new_handle));
-               NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.action_taken));
-               if (r->out.action_taken) {
-                       NDR_CHECK(ndr_push_winreg_CreateAction(ndr, 
NDR_SCALARS, *r->out.action_taken));
-               }
+               if (r->out.action_taken == NULL) return 
NT_STATUS_INVALID_PARAMETER_MIX;
+               if (*r->out.action_taken == NULL) return 
NT_STATUS_INVALID_PARAMETER_MIX;
+               NDR_CHECK(ndr_push_ref_ptr(ndr));
+               NDR_CHECK(ndr_push_winreg_CreateAction(ndr, NDR_SCALARS, 
**r->out.action_taken));
                NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
        }
        return NT_STATUS_OK;
@@ -1044,6 +1044,7 @@
        TALLOC_CTX *_mem_save_secdesc_0;
        TALLOC_CTX *_mem_save_new_handle_0;
        TALLOC_CTX *_mem_save_action_taken_0;
+       TALLOC_CTX *_mem_save_action_taken_1;
        if (flags & NDR_IN) {
                ZERO_STRUCT(r->out);
 
@@ -1070,20 +1071,24 @@
                        NDR_CHECK(ndr_pull_winreg_SecBuf(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->in.secdesc));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
                }
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_action_taken));
-               if (_ptr_action_taken) {
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->in.action_taken);
-               } else {
-                       r->in.action_taken = NULL;
                }
-               if (r->in.action_taken) {
-                       _mem_save_action_taken_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->in.action_taken, 0);
-                       NDR_CHECK(ndr_pull_winreg_CreateAction(ndr, 
NDR_SCALARS, r->in.action_taken));
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_action_taken_0, 0);
+               _mem_save_action_taken_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->in.action_taken, 
LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_action_taken));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, *r->in.action_taken);
                }
+               _mem_save_action_taken_1 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, *r->in.action_taken, 
LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_winreg_CreateAction(ndr, NDR_SCALARS, 
*r->in.action_taken));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_action_taken_1, 
LIBNDR_FLAG_REF_ALLOC);
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_action_taken_0, 
LIBNDR_FLAG_REF_ALLOC);
                NDR_PULL_ALLOC(ndr, r->out.new_handle);
                ZERO_STRUCTP(r->out.new_handle);
+               NDR_PULL_ALLOC(ndr, r->out.action_taken);
+               *r->out.action_taken = *r->in.action_taken;
        }
        if (flags & NDR_OUT) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
@@ -1093,18 +1098,20 @@
                NDR_PULL_SET_MEM_CTX(ndr, r->out.new_handle, 
LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, 
r->out.new_handle));
                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_handle_0, 
LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_action_taken));
-               if (_ptr_action_taken) {
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.action_taken);
-               } else {
-                       r->out.action_taken = NULL;
                }
-               if (r->out.action_taken) {
-                       _mem_save_action_taken_0 = NDR_PULL_GET_MEM_CTX(ndr);
-                       NDR_PULL_SET_MEM_CTX(ndr, r->out.action_taken, 0);
-                       NDR_CHECK(ndr_pull_winreg_CreateAction(ndr, 
NDR_SCALARS, r->out.action_taken));
-                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_action_taken_0, 0);
+               _mem_save_action_taken_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->out.action_taken, 
LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_action_taken));
+               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+                       NDR_PULL_ALLOC(ndr, *r->out.action_taken);
                }
+               _mem_save_action_taken_1 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, *r->out.action_taken, 
LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_winreg_CreateAction(ndr, NDR_SCALARS, 
*r->out.action_taken));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_action_taken_1, 
LIBNDR_FLAG_REF_ALLOC);
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_action_taken_0, 
LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
        }
        return NT_STATUS_OK;
@@ -1136,11 +1143,12 @@
                ndr->depth--;
                ndr_print_ptr(ndr, "action_taken", r->in.action_taken);
                ndr->depth++;
-               if (r->in.action_taken) {
-                       ndr_print_winreg_CreateAction(ndr, "action_taken", 
*r->in.action_taken);
-               }
+               ndr_print_ptr(ndr, "action_taken", *r->in.action_taken);
+               ndr->depth++;
+               ndr_print_winreg_CreateAction(ndr, "action_taken", 
**r->in.action_taken);
                ndr->depth--;
                ndr->depth--;
+               ndr->depth--;
        }
        if (flags & NDR_OUT) {
                ndr_print_struct(ndr, "out", "winreg_CreateKey");
@@ -1151,10 +1159,11 @@
                ndr->depth--;
                ndr_print_ptr(ndr, "action_taken", r->out.action_taken);
                ndr->depth++;
-               if (r->out.action_taken) {
-                       ndr_print_winreg_CreateAction(ndr, "action_taken", 
*r->out.action_taken);
-               }
+               ndr_print_ptr(ndr, "action_taken", *r->out.action_taken);
+               ndr->depth++;
+               ndr_print_winreg_CreateAction(ndr, "action_taken", 
**r->out.action_taken);
                ndr->depth--;
+               ndr->depth--;
                ndr_print_WERROR(ndr, "result", r->out.result);
                ndr->depth--;
        }

Modified: branches/SAMBA_3_0/source/librpc/gen_ndr/srv_winreg.h
===================================================================
--- branches/SAMBA_3_0/source/librpc/gen_ndr/srv_winreg.h       2006-11-27 
08:41:41 UTC (rev 19917)
+++ branches/SAMBA_3_0/source/librpc/gen_ndr/srv_winreg.h       2006-11-27 
14:05:28 UTC (rev 19918)
@@ -7,7 +7,7 @@
 WERROR _winreg_OpenHKPD(pipes_struct *p, uint16_t *system_name, uint32_t 
access_mask, struct policy_handle *handle);
 WERROR _winreg_OpenHKU(pipes_struct *p, uint16_t *system_name, uint32_t 
access_mask, struct policy_handle *handle);
 WERROR _winreg_CloseKey(pipes_struct *p, struct policy_handle *handle);
-WERROR _winreg_CreateKey(pipes_struct *p, struct policy_handle *handle, struct 
winreg_String name, struct winreg_String keyclass, uint32_t options, uint32_t 
access_mask, struct winreg_SecBuf *secdesc, struct policy_handle *new_handle, 
enum winreg_CreateAction *action_taken);
+WERROR _winreg_CreateKey(pipes_struct *p, struct policy_handle *handle, struct 
winreg_String name, struct winreg_String keyclass, uint32_t options, uint32_t 
access_mask, struct winreg_SecBuf *secdesc, struct policy_handle *new_handle, 
enum winreg_CreateAction **action_taken);
 WERROR _winreg_DeleteKey(pipes_struct *p, struct policy_handle *handle, struct 
winreg_String key);
 WERROR _winreg_DeleteValue(pipes_struct *p, struct policy_handle *handle, 
struct winreg_String value);
 WERROR _winreg_EnumKey(pipes_struct *p, struct policy_handle *handle, uint32_t 
enum_index, struct winreg_StringBuf *name, struct winreg_StringBuf *keyclass, 
NTTIME *last_changed_time);

Modified: branches/SAMBA_3_0/source/librpc/gen_ndr/winreg.h
===================================================================
--- branches/SAMBA_3_0/source/librpc/gen_ndr/winreg.h   2006-11-27 08:41:41 UTC 
(rev 19917)
+++ branches/SAMBA_3_0/source/librpc/gen_ndr/winreg.h   2006-11-27 14:05:28 UTC 
(rev 19918)
@@ -164,12 +164,12 @@
                uint32_t options;
                uint32_t access_mask;
                struct winreg_SecBuf *secdesc;/* [unique] */
-               enum winreg_CreateAction *action_taken;/* [unique] */
+               enum winreg_CreateAction **action_taken;/* [ref] */
        } in;
 
        struct {
                struct policy_handle *new_handle;/* [ref] */
-               enum winreg_CreateAction *action_taken;/* [unique] */
+               enum winreg_CreateAction **action_taken;/* [ref] */
                WERROR result;
        } out;
 

Modified: branches/SAMBA_3_0/source/librpc/idl/winreg.idl
===================================================================
--- branches/SAMBA_3_0/source/librpc/idl/winreg.idl     2006-11-27 08:41:41 UTC 
(rev 19917)
+++ branches/SAMBA_3_0/source/librpc/idl/winreg.idl     2006-11-27 14:05:28 UTC 
(rev 19918)
@@ -114,7 +114,7 @@
                [in] winreg_AccessMask access_mask,
                [in,unique] winreg_SecBuf *secdesc,
                [out,ref] policy_handle *new_handle,
-               [in,out,unique] winreg_CreateAction *action_taken
+               [in,out,ref] winreg_CreateAction **action_taken
        );
 
        /******************/

Modified: branches/SAMBA_3_0/source/rpc_server/srv_winreg_nt.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_winreg_nt.c        2006-11-27 
08:41:41 UTC (rev 19917)
+++ branches/SAMBA_3_0/source/rpc_server/srv_winreg_nt.c        2006-11-27 
14:05:28 UTC (rev 19918)
@@ -1196,7 +1196,7 @@
                          uint32_t options, uint32_t access_mask, 
                          struct winreg_SecBuf *secdesc,
                          struct policy_handle *new_handle, 
-                         enum winreg_CreateAction *action_taken )
+                         enum winreg_CreateAction **action_taken )
 {
        struct regkey_info *parent = find_regkey_info_by_hnd(p, handle);
        struct regkey_info *newparentinfo, *keyinfo;
@@ -1288,8 +1288,8 @@
        
        /* FIXME: report the truth here */
        
-       if ( action_taken ) {
-               *action_taken = REG_CREATED_NEW_KEY;
+       if ( *action_taken ) {
+               **action_taken = REG_CREATED_NEW_KEY;
        }
 
 done:

<Prev in Thread] Current Thread [Next in Thread>
  • svn commit: samba r19918 - in branches/SAMBA_3_0/source: librpc/gen_ndr librpc/idl rpc_server, vlendec <=