summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/include/rpc_misc.h42
-rw-r--r--source3/include/rpc_netlogon.h14
-rw-r--r--source3/include/rpc_reg.h29
-rw-r--r--source3/registry/reg_db.c7
-rw-r--r--source3/rpc_client/cli_reg.c16
-rw-r--r--source3/rpc_parse/parse_misc.c93
-rw-r--r--source3/rpc_parse/parse_net.c21
-rw-r--r--source3/rpc_parse/parse_reg.c25
-rw-r--r--source3/rpc_server/srv_reg_nt.c10
-rw-r--r--source3/rpcclient/cmd_reg.c20
10 files changed, 129 insertions, 148 deletions
diff --git a/source3/include/rpc_misc.h b/source3/include/rpc_misc.h
index e93d6610ba..dcc0ecc554 100644
--- a/source3/include/rpc_misc.h
+++ b/source3/include/rpc_misc.h
@@ -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;
/**********************************************************************
diff --git a/source3/include/rpc_netlogon.h b/source3/include/rpc_netlogon.h
index 3ba1ce6465..6812358575 100644
--- a/source3/include/rpc_netlogon.h
+++ b/source3/include/rpc_netlogon.h
@@ -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 */
diff --git a/source3/include/rpc_reg.h b/source3/include/rpc_reg.h
index 51f8ff8d96..f70fb5f03c 100644
--- a/source3/include/rpc_reg.h
+++ b/source3/include/rpc_reg.h
@@ -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;
diff --git a/source3/registry/reg_db.c b/source3/registry/reg_db.c
index 5ac8329309..f93b7e1ffb 100644
--- a/source3/registry/reg_db.c
+++ b/source3/registry/reg_db.c
@@ -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" );
diff --git a/source3/rpc_client/cli_reg.c b/source3/rpc_client/cli_reg.c
index 773144742b..0d7d194850 100644
--- a/source3/rpc_client/cli_reg.c
+++ b/source3/rpc_client/cli_reg.c
@@ -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:
diff --git a/source3/rpc_parse/parse_misc.c b/source3/rpc_parse/parse_misc.c
index 858366d4ad..faa00d1862 100644
--- a/source3/rpc_parse/parse_misc.c
+++ b/source3/rpc_parse/parse_misc.c
@@ -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;
}
diff --git a/source3/rpc_parse/parse_net.c b/source3/rpc_parse/parse_net.c
index d7bdca4df9..ed95656fda 100644
--- a/source3/rpc_parse/parse_net.c
+++ b/source3/rpc_parse/parse_net.c
@@ -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;
diff --git a/source3/rpc_parse/parse_reg.c b/source3/rpc_parse/parse_reg.c
index e76c536cee..a51b4269e3 100644
--- a/source3/rpc_parse/parse_reg.c
+++ b/source3/rpc_parse/parse_reg.c
@@ -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))
diff --git a/source3/rpc_server/srv_reg_nt.c b/source3/rpc_server/srv_reg_nt.c
index ad7aaa4469..f031a3213f 100644
--- a/source3/rpc_server/srv_reg_nt.c
+++ b/source3/rpc_server/srv_reg_nt.c
@@ -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 );
diff --git a/source3/rpcclient/cmd_reg.c b/source3/rpcclient/cmd_reg.c
index 7eb3a1052b..fcc18cd9f5 100644
--- a/source3/rpcclient/cmd_reg.c
+++ b/source3/rpcclient/cmd_reg.c
@@ -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