r6232: more cleanups; remove BUFFER3; rename BUFFER4 -> RPC_DATA_BLOB; rename REG_CRE...
authorGerald Carter <jerry@samba.org>
Thu, 7 Apr 2005 04:58:38 +0000 (04:58 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:56:30 +0000 (10:56 -0500)
source/include/rpc_misc.h
source/include/rpc_netlogon.h
source/include/rpc_reg.h
source/registry/reg_db.c
source/rpc_client/cli_reg.c
source/rpc_parse/parse_misc.c
source/rpc_parse/parse_net.c
source/rpc_parse/parse_reg.c
source/rpc_server/srv_reg_nt.c
source/rpcclient/cmd_reg.c

index e93d6610ba88371f7e88608b7af5eb7d5f51a8ef..dcc0ecc554ab49ab47a96d649fffa7e5a708c4f5 100644 (file)
@@ -147,20 +147,12 @@ typedef struct {
 
 
 /********************************************************************** 
- * Buffers use by winreg
+ * Buffers 
  **********************************************************************/
 
-/* 
-   OLD COMMENT: 
-      BUFFER2 - unicode string, size (in uint8 ascii chars) and buffer 
-      pathetic.  some stupid team of \PIPE\winreg writers got the concept
-      of a unicode string different from the other \PIPE\ writers
-
-   NEW COMMENT: 
-      buffer used by \winreg\ calls to fill in arbitrary REG_XXX values.
-      It *may* look like a UNISTR2 but it is *not*.  This is not a goof
-      by the winreg developers.  It is a generic buffer 
-*/
+/* buffer used by \winreg\ calls to fill in arbitrary REG_XXX values.
+   It *may* look like a UNISTR2 but it is *not*.  This is not a goof
+   by the winreg developers.  It is a generic buffer */
 
 typedef struct {
        uint32 buf_max_len;
@@ -169,34 +161,22 @@ typedef struct {
        uint16 *buffer;
 } REGVAL_BUFFER;
 
-typedef struct buffer3_info {
-       uint32 buf_max_len;
-       uint8  *buffer;                 /* Data */
-       uint32 buf_len;
-} BUFFER3;
-
-
-
-/********************************************************************** 
- * Buffers use by spoolss
- **********************************************************************/
+/* generic rpc version of the DATA_BLOB.  Just a length and uint8 array */
 
 typedef struct {
        uint32 buf_len;
-       uint16 *buffer; /* data */
-} BUFFER5;
-
-
+       uint8 *buffer;
+} RPC_DATA_BLOB;
 
 /********************************************************************** 
- * Buffers use by netlogon
+ * Buffers use by spoolss (i might be able to replace it with
+ * an RPC_DATA_BLOB)
  **********************************************************************/
 
 typedef struct {
        uint32 buf_len;
-       uint8 *buffer;
-} BUFFER4;
-
+       uint16 *buffer; /* data */
+} BUFFER5;
 
 
 /********************************************************************** 
index 3ba1ce6465bf2c5c38930047f8a0fe139506a895..6812358575ac5d9237fe5eefb3e64380e2e66413 100644 (file)
@@ -643,7 +643,7 @@ typedef struct sam_domain_info_info
        UNISTR2 uni_dom_name;
        UNISTR2 buf_oem_info; 
 
-       BUFFER4 buf_sec_desc;
+       RPC_DATA_BLOB buf_sec_desc;
 
        LOCKOUT_STRING account_lockout;
 
@@ -670,7 +670,7 @@ typedef struct sam_group_info_info
 
        UNISTR2 uni_grp_name;
        UNISTR2 uni_grp_desc;
-       BUFFER4 buf_sec_desc;
+       RPC_DATA_BLOB buf_sec_desc;
 
 } SAM_GROUP_INFO;
 
@@ -748,11 +748,11 @@ typedef struct sam_account_info_info
        uint32 unknown1; /* 0x4EC */
        uint32 unknown2; /* 0 */
 
-       BUFFER4 buf_logon_hrs;
+       RPC_DATA_BLOB buf_logon_hrs;
        UNISTR2 uni_comment;
        UNISTR2 uni_parameters;
        SAM_PWD pass;
-       BUFFER4 buf_sec_desc;
+       RPC_DATA_BLOB buf_sec_desc;
        UNISTR2 uni_profile;
 
 } SAM_ACCOUNT_INFO;
@@ -783,7 +783,7 @@ typedef struct sam_alias_info_info
        uint8 reserved[40];
 
        UNISTR2 uni_als_name;
-       BUFFER4 buf_sec_desc;
+       RPC_DATA_BLOB buf_sec_desc;
        UNISTR2 uni_als_desc;
 
 } SAM_ALIAS_INFO;
@@ -829,7 +829,7 @@ typedef struct
        UNISTR2  domain_name;
        DOM_SID2 domain_sid;
 
-       BUFFER4  buf_sec_desc;
+       RPC_DATA_BLOB  buf_sec_desc;
 } SAM_DELTA_POLICY;
 
 /* SAM_DELTA_TRUST_DOMS */
@@ -881,7 +881,7 @@ typedef struct
        UNIHDR *hdr_privslist;
        UNISTR2 *uni_privslist;
 
-       BUFFER4 buf_sec_desc;
+       RPC_DATA_BLOB buf_sec_desc;
 } SAM_DELTA_PRIVS;
 
 /* SAM_DELTA_SECRET */
index 51f8ff8d966c6610e7d0f6e9e1461ebe1a000f84..f70fb5f03cf218412ad3c82f140fa3c3ae16bb3d 100644 (file)
@@ -45,7 +45,7 @@
 #define REG_RESTORE_KEY                0x13
 #define REG_SAVE_KEY           0x14
 #define REG_SET_KEY_SEC                0x15
-#define REG_CREATE_VALUE       0x16
+#define REG_SET_VALUE          0x16
 #define REG_SHUTDOWN           0x18
 #define REG_ABORT_SHUTDOWN     0x19
 #define REG_GETVERSION         0x1a
@@ -209,12 +209,13 @@ typedef struct {
        POLICY_HND pol;   
        UNISTR4 name;           
        uint32 type;  
-       BUFFER3 *value; 
-} REG_Q_CREATE_VALUE;
+       RPC_DATA_BLOB value; 
+       uint32 size;
+} REG_Q_SET_VALUE;
 
 typedef struct { 
        WERROR status;
-} REG_R_CREATE_VALUE;
+} REG_R_SET_VALUE;
 
 /***********************************************/
 
@@ -331,13 +332,29 @@ typedef struct {
 
 /***********************************************/
 
+
+/* I have no idea if this is correct since I 
+   have not seen the full structure on the wire 
+   as of yet */
+   
+typedef struct {
+       uint32 max_len;
+       uint32 len;
+       SEC_DESC *secdesc;
+} REG_SEC_DESC_BUF;
+
+typedef struct {
+       uint32 size;            /* size in bytes of security descriptor */
+       REG_SEC_DESC_BUF secdesc;
+       uint8  inherit;         /* see MSDN for a description */
+} SECURITY_ATTRIBUTE;
+
 typedef struct {
        POLICY_HND pol; 
        UNISTR4 filename;
-       uint32 unknown;         /* I'm pretty sure this is a pointer to a SEC_DESC as per MSDN */
+       SECURITY_ATTRIBUTE *sec_attr;
 } REG_Q_SAVE_KEY;
 
-
 typedef struct {
        WERROR status;         /* return status */
 } REG_R_SAVE_KEY;
index 5ac8329309046cdb27f4ebf3a2afbecaa7d46901..f93b7e1ffba74b8a4f03ea2be46c8992dd0034fc 100644 (file)
@@ -65,6 +65,13 @@ static BOOL init_registry_data( void )
                return False;
        regsubkey_ctr_destroy( &subkeys );
 
+#ifdef REG_TEST_CODE
+       pstrcpy( keyname, KEY_HKLM );
+       pstrcat( keyname, "/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Print" );
+       if ( !regdb_store_reg_keys( keyname, &subkeys ))
+               return False;
+#endif
+
        regsubkey_ctr_init( &subkeys );
        pstrcpy( keyname, KEY_HKLM );
        pstrcat( keyname, "/SYSTEM/CurrentControlSet/Control" );
index 773144742bf1acc98a09122f5d62aa9d98bcd371..0d7d194850c91608fcfd51d4cceebc82ade6617c 100644 (file)
@@ -651,14 +651,14 @@ done:
 /****************************************************************************
 do a REG Create Value
 ****************************************************************************/
-WERROR cli_reg_create_val(struct cli_state *cli, TALLOC_CTX *mem_ctx,
+WERROR cli_reg_set_val(struct cli_state *cli, TALLOC_CTX *mem_ctx,
                             POLICY_HND *hnd, char *val_name, uint32 type,
-                            BUFFER3 *data)
+                            RPC_DATA_BLOB *data)
 {
        prs_struct rbuf;
        prs_struct qbuf; 
-       REG_Q_CREATE_VALUE q_o;
-       REG_R_CREATE_VALUE r_o;
+       REG_Q_SET_VALUE q_o;
+       REG_R_SET_VALUE r_o;
        WERROR result = WERR_GENERAL_FAILURE;
 
        prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
@@ -666,17 +666,17 @@ WERROR cli_reg_create_val(struct cli_state *cli, TALLOC_CTX *mem_ctx,
 
        /* Marshall data and send request */
 
-       init_reg_q_create_val(&q_o, hnd, val_name, type, data);
+       init_reg_q_set_val(&q_o, hnd, val_name, type, data);
 
-       if (!reg_io_q_create_val("", &q_o, &qbuf, 0) ||
-           !rpc_api_pipe_req(cli, PI_WINREG, REG_CREATE_VALUE, &qbuf, &rbuf))
+       if (!reg_io_q_set_val("", &q_o, &qbuf, 0) ||
+           !rpc_api_pipe_req(cli, PI_WINREG, REG_SET_VALUE, &qbuf, &rbuf))
                goto done;
 
        ZERO_STRUCT(r_o);
 
        /* Unmarshal response */
 
-       if (reg_io_r_create_val("", &r_o, &rbuf, 0))
+       if (reg_io_r_set_val("", &r_o, &rbuf, 0))
                result = r_o.status;
 
 done:
index 858366d4adc8bb0fb37fb5c1a0ddfb9bc94bd9e3..faa00d1862421bd260c9fcb0014a7a7dd6ba1990 100644 (file)
@@ -554,105 +554,69 @@ BOOL smb_io_unistr(const char *desc, UNISTR *uni, prs_struct *ps, int depth)
 }
 
 /*******************************************************************
- Allocate the BUFFER3 memory.
+ Allocate the RPC_DATA_BLOB memory.
 ********************************************************************/
 
-static size_t create_buffer3(BUFFER3 *str, size_t len)
+static size_t create_rpc_blob(RPC_DATA_BLOB *str, size_t len)
 {
        str->buffer = TALLOC_ZERO(get_talloc_ctx(), len);
        if (str->buffer == NULL)
-               smb_panic("create_buffer3: talloc fail\n");
+               smb_panic("create_rpc_blob: talloc fail\n");
        return len;
 }
 
 /*******************************************************************
- Inits a BUFFER3 structure from a uint32
+ Inits a RPC_DATA_BLOB structure from a uint32
 ********************************************************************/
 
-void init_buffer3_uint32(BUFFER3 *str, uint32 val)
+void init_rpc_blob_uint32(RPC_DATA_BLOB *str, uint32 val)
 {
        ZERO_STRUCTP(str);
 
        /* set up string lengths. */
-       str->buf_max_len = str->buf_len = create_buffer3(str, sizeof(uint32));
+       str->buf_len = create_rpc_blob(str, sizeof(uint32));
        SIVAL(str->buffer, 0, val);
 }
 
 /*******************************************************************
- Inits a BUFFER3 structure.
+ Inits a RPC_DATA_BLOB structure.
 ********************************************************************/
 
-void init_buffer3_str(BUFFER3 *str, const char *buf, int len)
+void init_rpc_blob_str(RPC_DATA_BLOB *str, const char *buf, int len)
 {
        ZERO_STRUCTP(str);
 
        /* set up string lengths. */
-       str->buf_max_len = str->buf_len = create_buffer3(str, len*2);
-       rpcstr_push(str->buffer, buf, str->buf_max_len, STR_TERMINATE);
+       str->buf_len = create_rpc_blob(str, len*2);
+       rpcstr_push(str->buffer, buf, str->buf_len, STR_TERMINATE);
        
 }
 
 /*******************************************************************
- Inits a BUFFER3 structure from a hex string.
+ Inits a RPC_DATA_BLOB structure from a hex string.
 ********************************************************************/
 
-void init_buffer3_hex(BUFFER3 *str, const char *buf)
+void init_rpc_blob_hex(RPC_DATA_BLOB *str, const char *buf)
 {
        ZERO_STRUCTP(str);
-       str->buf_max_len = str->buf_len = create_buffer3(str, strlen(buf));
-       str->buf_max_len = str->buf_len = strhex_to_str((char *)str->buffer, str->buf_len, buf);
+       str->buf_len = create_rpc_blob(str, strlen(buf));
+       str->buf_len = strhex_to_str((char *)str->buffer, str->buf_len, buf);
 }
 
 /*******************************************************************
- Inits a BUFFER3 structure.
+ Inits a RPC_DATA_BLOB structure.
 ********************************************************************/
 
-void init_buffer3_bytes(BUFFER3 *str, uint8 *buf, size_t len)
+void init_rpc_blob_bytes(RPC_DATA_BLOB *str, uint8 *buf, size_t len)
 {
        ZERO_STRUCTP(str);
 
        /* max buffer size (allocated size) */
        if (buf != NULL) {
-               len = create_buffer3(str, len);
+               len = create_rpc_blob(str, len);
                memcpy(str->buffer, buf, len);
        }
-       str->buf_max_len = len;
-       str->buf_len = buf != NULL ? len : 0;
-}
-
-/*******************************************************************
- Reads or writes a BUFFER3 structure.
-   the uni_max_len member tells you how large the buffer is.
-   the uni_str_len member tells you how much of the buffer is really used.
-********************************************************************/
-
-BOOL smb_io_buffer3(const char *desc, BUFFER3 *buf3, prs_struct *ps, int depth)
-{
-       if (buf3 == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "smb_io_buffer3");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-       
-       if(!prs_uint32("uni_max_len", ps, depth, &buf3->buf_max_len))
-               return False;
-
-       if (UNMARSHALLING(ps)) {
-               buf3->buffer = PRS_ALLOC_MEM(ps, unsigned char, buf3->buf_max_len);
-               if (buf3->buffer == NULL)
-                       return False;
-       }
-
-       if(!prs_uint8s(True, "buffer     ", ps, depth, buf3->buffer, buf3->buf_max_len))
-               return False;
-
-       if(!prs_uint32("buf_len    ", ps, depth, &buf3->buf_len))
-               return False;
-
-       return True;
+       str->buf_len = len;
 }
 
 /*******************************************************************
@@ -1816,23 +1780,30 @@ BOOL smb_io_bufhdr4(const char *desc, BUFHDR4 *hdr, prs_struct *ps, int depth)
 }
 
 /*******************************************************************
-reads or writes a BUFFER4 structure.
+reads or writes a RPC_DATA_BLOB structure.
 ********************************************************************/
 
-BOOL smb_io_buffer4(const char *desc, BUFFER4 *buf4, uint32 buffer, prs_struct *ps, int depth)
+BOOL smb_io_rpc_blob(const char *desc, RPC_DATA_BLOB *blob, prs_struct *ps, int depth)
 {
-       prs_debug(ps, depth, desc, "smb_io_buffer4");
+       prs_debug(ps, depth, desc, "smb_io_rpc_blob");
        depth++;
 
        prs_align(ps);
-       prs_uint32("buf_len", ps, depth, &buf4->buf_len);
+       if ( !prs_uint32("buf_len", ps, depth, &blob->buf_len) )
+               return False;
+
+       if ( blob->buf_len == 0 )
+               return True;
+
        if (UNMARSHALLING(ps)) {
-               buf4->buffer = PRS_ALLOC_MEM(ps, uint8, buf4->buf_len);
-               if (!buf4->buffer) {
+               blob->buffer = PRS_ALLOC_MEM(ps, uint8, blob->buf_len);
+               if (!blob->buffer) {
                        return False;
                }
        }
-       prs_uint8s(True, "buffer", ps, depth, buf4->buffer, buf4->buf_len);
+
+       if ( !prs_uint8s(True, "buffer", ps, depth, blob->buffer, blob->buf_len) )
+               return False;
 
        return True;
 }
index d7bdca4df995a763b80689a891cf3002ace02cbe..ed95656fdae0f7847cf76be35aa719c4914384ab 100644 (file)
@@ -1972,8 +1972,7 @@ static BOOL net_io_sam_domain_info(const char *desc, SAM_DOMAIN_INFO * info,
                             info->hdr_oem_info.buffer, ps, depth))
                 return False;
 
-       if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc,
-                            info->hdr_sec_desc.buffer, ps, depth))
+       if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
                 return False;
 
        if (!smb_io_account_lockout_str("account_lockout", &info->account_lockout, 
@@ -2021,8 +2020,7 @@ static BOOL net_io_sam_group_info(const char *desc, SAM_GROUP_INFO * info,
        if (!smb_io_unistr2("uni_grp_desc", &info->uni_grp_desc,
                             info->hdr_grp_desc.buffer, ps, depth))
                 return False;
-       if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc,
-                            info->hdr_sec_desc.buffer, ps, depth))
+       if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
                 return False;
 
        return True;
@@ -2274,8 +2272,7 @@ static BOOL net_io_sam_account_info(const char *desc, uint8 sess_key[16],
        if (!prs_uint32("unknown2", ps, depth, &info->unknown2))
                 return False;
 
-       if (!smb_io_buffer4("buf_logon_hrs", &info->buf_logon_hrs,
-                            info->ptr_logon_hrs, ps, depth))
+       if (!smb_io_rpc_blob("buf_logon_hrs", &info->buf_logon_hrs, ps, depth))
                 return False;
        prs_align(ps);
        if (!smb_io_unistr2("uni_comment", &info->uni_comment,
@@ -2316,8 +2313,7 @@ static BOOL net_io_sam_account_info(const char *desc, uint8 sess_key[16],
                         return False;
                ps->data_offset = old_offset + len;
        }
-       if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc,
-                            info->hdr_sec_desc.buffer, ps, depth))
+       if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
                 return False;
        prs_align(ps);
        if (!smb_io_unistr2("uni_profile", &info->uni_profile,
@@ -2436,8 +2432,7 @@ static BOOL net_io_sam_alias_info(const char *desc, SAM_ALIAS_INFO * info,
        if (!smb_io_unistr2("uni_als_name", &info->uni_als_name,
                             info->hdr_als_name.buffer, ps, depth))
                 return False;
-       if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc,
-                            info->hdr_sec_desc.buffer, ps, depth))
+       if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
                 return False;
 
        if (!smb_io_unistr2("uni_als_desc", &info->uni_als_desc,
@@ -2596,8 +2591,7 @@ static BOOL net_io_sam_policy_info(const char *desc, SAM_DELTA_POLICY *info,
        if(!smb_io_dom_sid2("domain_sid", &info->domain_sid, ps, depth))
                return False;
 
-       if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc,
-                            info->hdr_sec_desc.buffer, ps, depth))
+       if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
 
                return False;
 
@@ -2831,8 +2825,7 @@ static BOOL net_io_sam_privs_info(const char *desc, SAM_DELTA_PRIVS *info,
                if (!smb_io_unistr2("uni_privslist", &info->uni_privslist[i], True, ps, depth))
                        return False;
 
-       if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc,
-                            info->hdr_sec_desc.buffer, ps, depth))
+       if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
                 return False;
 
        return True;
index e76c536cee198fa1a62b30d9a21088c2ab0081cd..a51b4269e3ad8c85981f8ae020805b335e4a8789 100644 (file)
@@ -639,8 +639,10 @@ BOOL reg_io_q_save_key(const char *desc,  REG_Q_SAVE_KEY *q_u, prs_struct *ps, i
        if(!prs_unistr4("filename", ps, depth, &q_u->filename))
                return False;
 
+#if 0  /* reg_io_sec_attr() */
        if(!prs_uint32("unknown", ps, depth, &q_u->unknown))
                return False;
+#endif
 
        return True;
 }
@@ -1203,9 +1205,9 @@ BOOL reg_io_r_enum_val(const char *desc,  REG_R_ENUM_VALUE *r_u, prs_struct *ps,
 makes a structure.
 ********************************************************************/
 
-void init_reg_q_create_val(REG_Q_CREATE_VALUE *q_u, POLICY_HND *pol,
+void init_reg_q_set_val(REG_Q_SET_VALUE *q_u, POLICY_HND *pol,
                                char *val_name, uint32 type,
-                               BUFFER3 *val)
+                               RPC_DATA_BLOB *val)
 {
        ZERO_STRUCTP(q_u);
 
@@ -1214,19 +1216,20 @@ void init_reg_q_create_val(REG_Q_CREATE_VALUE *q_u, POLICY_HND *pol,
        init_unistr4(&q_u->name, val_name, UNI_STR_TERMINATE);
        
        q_u->type      = type;
-       q_u->value     = val;
+       q_u->value     = *val;
+       q_u->size      = val->buf_len;
 }
 
 /*******************************************************************
 reads or writes a structure.
 ********************************************************************/
 
-BOOL reg_io_q_create_val(const char *desc,  REG_Q_CREATE_VALUE *q_u, prs_struct *ps, int depth)
+BOOL reg_io_q_set_val(const char *desc,  REG_Q_SET_VALUE *q_u, prs_struct *ps, int depth)
 {
        if (q_u == NULL)
                return False;
 
-       prs_debug(ps, depth, desc, "reg_io_q_create_val");
+       prs_debug(ps, depth, desc, "reg_io_q_set_val");
        depth++;
 
        if(!prs_align(ps))
@@ -1242,11 +1245,15 @@ BOOL reg_io_q_create_val(const char *desc,  REG_Q_CREATE_VALUE *q_u, prs_struct
 
        if(!prs_uint32("type", ps, depth, &q_u->type))
                return False;
-       if(!smb_io_buffer3("value", q_u->value, ps, depth))
+
+       if(!smb_io_rpc_blob("value", &q_u->value, ps, depth ))
                return False;
        if(!prs_align(ps))
                return False;
 
+       if(!prs_uint32("size", ps, depth, &q_u->size))
+               return False;
+
        return True;
 }
 
@@ -1254,12 +1261,12 @@ BOOL reg_io_q_create_val(const char *desc,  REG_Q_CREATE_VALUE *q_u, prs_struct
 reads or writes a structure.
 ********************************************************************/
 
-BOOL reg_io_r_create_val(const char *desc,  REG_R_CREATE_VALUE *q_u, prs_struct *ps, int depth)
+BOOL reg_io_r_set_val(const char *desc,  REG_R_SET_VALUE *q_u, prs_struct *ps, int depth)
 {
        if ( !q_u )
                return False;
 
-       prs_debug(ps, depth, desc, "reg_io_r_create_val");
+       prs_debug(ps, depth, desc, "reg_io_r_set_val");
        depth++;
 
        if(!prs_align(ps))
@@ -1451,7 +1458,7 @@ BOOL reg_io_q_open_entry(const char *desc,  REG_Q_OPEN_ENTRY *q_u, prs_struct *p
        if ( !q_u )
                return False;
 
-       prs_debug(ps, depth, desc, "reg_io_q_entry");
+       prs_debug(ps, depth, desc, "reg_io_q_open_entry");
        depth++;
 
        if(!prs_align(ps))
index ad7aaa4469a136553a3e708cd03e72f4a1d34936..f031a3213f2a167f6970d68cefddcf5ab4805fd0 100644 (file)
@@ -720,6 +720,7 @@ WERROR _reg_abort_shutdown(pipes_struct *p, REG_Q_ABORT_SHUTDOWN *q_u, REG_R_ABO
 WERROR _reg_restore_key(pipes_struct *p, REG_Q_RESTORE_KEY  *q_u, REG_R_RESTORE_KEY *r_u)
 {
        REGISTRY_KEY    *regkey = find_regkey_index_by_hnd( p, &q_u->pol );
+       pstring         filename;
        
        DEBUG(5,("_reg_restore_key: Enter\n"));
        
@@ -731,7 +732,9 @@ WERROR _reg_restore_key(pipes_struct *p, REG_Q_RESTORE_KEY  *q_u, REG_R_RESTORE_
        if ( !regkey )
                return WERR_BADFID; 
 
-       DEBUG(8,("_reg_restore_key: verifying backup of key [%s]\n", regkey->name));
+       rpcstr_pull(filename, q_u->filename.string->buffer, sizeof(filename), q_u->filename.string->uni_str_len*2, STR_TERMINATE);
+
+       DEBUG(8,("_reg_restore_key: verifying restore of key [%s] from \"%s\"\n", regkey->name, filename));
 
 #if 0
        validate_reg_filemame( filename );
@@ -747,6 +750,7 @@ WERROR _reg_restore_key(pipes_struct *p, REG_Q_RESTORE_KEY  *q_u, REG_R_RESTORE_
 WERROR _reg_save_key(pipes_struct *p, REG_Q_SAVE_KEY  *q_u, REG_R_SAVE_KEY *r_u)
 {
        REGISTRY_KEY    *regkey = find_regkey_index_by_hnd( p, &q_u->pol );
+       pstring         filename;
        
        DEBUG(5,("_reg_save_key: Enter\n"));
        
@@ -758,7 +762,9 @@ WERROR _reg_save_key(pipes_struct *p, REG_Q_SAVE_KEY  *q_u, REG_R_SAVE_KEY *r_u)
        if ( !regkey )
                return WERR_BADFID; 
 
-       DEBUG(8,("_reg_save_key: verifying backup of key [%s]\n", regkey->name));
+       rpcstr_pull(filename, q_u->filename.string->buffer, sizeof(filename), q_u->filename.string->uni_str_len*2, STR_TERMINATE);
+
+       DEBUG(8,("_reg_save_key: verifying backup of key [%s] to \"%s\"\n", regkey->name, filename));
 
 #if 0
        validate_reg_filemame( filename );
index 7eb3a1052b3574fb0a81611c148da9bbad7ab0d7..fcc18cd9f526fa5b69efd45c8d0ba7ceae660b78 100644 (file)
@@ -320,7 +320,7 @@ static void cmd_reg_query_key(struct client_info *info)
 /****************************************************************************
 nt registry create value
 ****************************************************************************/
-static void cmd_reg_create_val(struct client_info *info)
+static void cmd_reg_set_val(struct client_info *info)
 {
        BOOL res = True;
        BOOL res3 = True;
@@ -333,7 +333,7 @@ static void cmd_reg_create_val(struct client_info *info)
        fstring val_name;
        fstring tmp;
        uint32 val_type;
-       BUFFER3 value;
+       RPC_DATA_BLOB value;
 
 #if 0
        uint32 unk_0;
@@ -343,7 +343,7 @@ static void cmd_reg_create_val(struct client_info *info)
                                val_name, *val_type) : False;
 #endif
 
-       DEBUG(5, ("cmd_reg_create_val: smb_cli->fd:%d\n", smb_cli->fd));
+       DEBUG(5, ("cmd_reg_set_val: smb_cli->fd:%d\n", smb_cli->fd));
 
        if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname)))
        {
@@ -383,12 +383,12 @@ static void cmd_reg_create_val(struct client_info *info)
        {
                case 0x01: /* UNISTR */
                {
-                       init_buffer3_str(&value, tmp, strlen(tmp)+1);
+                       init_rpc_blob_str(&value, tmp, strlen(tmp)+1);
                        break;
                }
                case 0x03: /* BYTES */
                {
-                       init_buffer3_hex(&value, tmp);
+                       init_rpc_blob_hex(&value, tmp);
                        break;
                }
                case 0x04: /* DWORD */
@@ -402,7 +402,7 @@ static void cmd_reg_create_val(struct client_info *info)
                        {
                                tmp_val = strtol(tmp, (char**)NULL, 10);
                        }
-                       init_buffer3_uint32(&value, tmp_val);
+                       init_rpc_blob_uint32(&value, tmp_val);
                        break;
                }
                default:
@@ -434,7 +434,7 @@ static void cmd_reg_create_val(struct client_info *info)
        }
 
        /* create an entry */
-       res4 = res3 ? do_reg_create_val(smb_cli, &parent_pol,
+       res4 = res3 ? do_reg_set_val(smb_cli, &parent_pol,
                                 val_name, val_type, &value) : False;
 
        /* flush the modified key */
@@ -454,12 +454,12 @@ static void cmd_reg_create_val(struct client_info *info)
 
        if (res && res3 && res4)
        {
-               DEBUG(5,("cmd_reg_create_val: query succeeded\n"));
+               DEBUG(5,("cmd_reg_set_val: query succeeded\n"));
                fprintf(out_hnd,"OK\n");
        }
        else
        {
-               DEBUG(5,("cmd_reg_create_val: query failed\n"));
+               DEBUG(5,("cmd_reg_set_val: query failed\n"));
        }
 }
 
@@ -988,7 +988,7 @@ struct cmd_set reg_commands[] = {
        { "regqueryval",        cmd_reg_query_info,             "Registry Value Query", "<valname>" },
        { "regquerykey",        cmd_reg_query_key,              "Registry Key Query", "<keyname>" },
        { "regdeleteval",       cmd_reg_delete_val,             "Registry Value Delete", "<valname>" },
-       { "regcreateval",       cmd_reg_create_val,             "Registry Key Create", "<valname> <valtype> <value>" },
+       { "regsetval",          cmd_reg_set_val,                "Registry Key Create", "<valname> <valtype> <value>" },
        { "reggetsec",          cmd_reg_get_key_sec,            "Registry Key Security", "<keyname>" },
        { "regtestsec",         cmd_reg_test_key_sec,           "Test Registry Key Security", "<keyname>" },
 #endif