diff options
-rw-r--r-- | source3/rpcclient/cmd_spoolss.c | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index b5f34c4b2e..e2d59be5e0 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -729,25 +729,25 @@ static WERROR cmd_spoolss_getprinter(struct rpc_pipe_client *cli, /**************************************************************************** ****************************************************************************/ -static void display_reg_value(struct regval_blob value) +static void display_reg_value(struct regval_blob *value) { const char *text = NULL; DATA_BLOB blob; - switch(value.type) { + switch(regval_type(value)) { case REG_DWORD: - printf("%s: REG_DWORD: 0x%08x\n", value.valuename, - *((uint32_t *) value.data_p)); + printf("%s: REG_DWORD: 0x%08x\n", regval_name(value), + *((uint32_t *) regval_data_p(value))); break; case REG_SZ: - blob = data_blob_const(value.data_p, value.size); + blob = data_blob_const(regval_data_p(value), regval_size(value)); pull_reg_sz(talloc_tos(), &blob, &text); - printf("%s: REG_SZ: %s\n", value.valuename, text ? text : ""); + printf("%s: REG_SZ: %s\n", regval_name(value), text ? text : ""); break; case REG_BINARY: { - char *hex = hex_encode_talloc(NULL, value.data_p, value.size); + char *hex = hex_encode_talloc(NULL, regval_data_p(value), regval_size(value)); size_t i, len; - printf("%s: REG_BINARY:", value.valuename); + printf("%s: REG_BINARY:", regval_name(value)); len = strlen(hex); for (i=0; i<len; i++) { if (hex[i] == '\0') { @@ -765,14 +765,14 @@ static void display_reg_value(struct regval_blob value) case REG_MULTI_SZ: { uint32_t i; const char **values; - blob = data_blob_const(value.data_p, value.size); + blob = data_blob_const(regval_data_p(value), regval_size(value)); if (!pull_reg_multi_sz(NULL, &blob, &values)) { d_printf("pull_reg_multi_sz failed\n"); break; } - printf("%s: REG_MULTI_SZ: \n", value.valuename); + printf("%s: REG_MULTI_SZ: \n", regval_name(value)); for (i=0; values[i] != NULL; i++) { d_printf("%s\n", values[i]); } @@ -780,7 +780,7 @@ static void display_reg_value(struct regval_blob value) break; } default: - printf("%s: unknown type %d\n", value.valuename, value.type); + printf("%s: unknown type %d\n", regval_name(value), regval_type(value)); } } @@ -2900,12 +2900,20 @@ static WERROR cmd_spoolss_enum_data(struct rpc_pipe_client *cli, &data_needed, &result); if (NT_STATUS_IS_OK(status) && W_ERROR_IS_OK(result)) { - struct regval_blob v; - fstrcpy(v.valuename, value_name); - v.type = type; - v.size = data_offered; - v.data_p = data; + struct regval_blob *v; + + v = regval_compose(talloc_tos(), + value_name, + type, + data, + data_offered); + if (v == NULL) { + result = WERR_NOMEM; + goto done; + } + display_reg_value(v); + talloc_free(v); } } |