1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-04 17:47:26 +03:00

s3-spoolss: Migrated spoolss_EnumPrinterDataEx to the winreg functions.

Signed-off-by: Jim McDonough <jmcd@samba.org>
This commit is contained in:
Andreas Schneider 2010-03-15 14:01:01 +01:00 committed by Simo Sorce
parent 795618a592
commit df35b343db

View File

@ -8926,31 +8926,6 @@ WERROR _spoolss_DeletePrinterKey(pipes_struct *p,
return status;
}
/****************************************************************
****************************************************************/
static WERROR registry_value_to_printer_enum_value(TALLOC_CTX *mem_ctx,
struct regval_blob *v,
struct spoolss_PrinterEnumValues *r)
{
r->data = TALLOC_ZERO_P(mem_ctx, DATA_BLOB);
W_ERROR_HAVE_NO_MEMORY(r->data);
r->value_name = talloc_strdup(mem_ctx, regval_name(v));
W_ERROR_HAVE_NO_MEMORY(r->value_name);
r->value_name_len = strlen_m_term(regval_name(v)) * 2;
r->type = regval_type(v);
r->data_length = regval_size(v);
if (r->data_length) {
*r->data = data_blob_talloc(r->data, regval_data_p(v), regval_size(v));
}
return WERR_OK;
}
/****************************************************************
_spoolss_EnumPrinterDataEx
****************************************************************/
@ -8959,14 +8934,10 @@ WERROR _spoolss_EnumPrinterDataEx(pipes_struct *p,
struct spoolss_EnumPrinterDataEx *r)
{
uint32_t count = 0;
NT_PRINTER_INFO_LEVEL *printer = NULL;
struct spoolss_PrinterEnumValues *info = NULL;
NT_PRINTER_DATA *p_data;
Printer_entry *Printer = find_printer_index_by_hnd(p, r->in.handle);
int snum;
WERROR result;
int key_index;
int i;
DEBUG(4,("_spoolss_EnumPrinterDataEx\n"));
@ -8992,70 +8963,21 @@ WERROR _spoolss_EnumPrinterDataEx(pipes_struct *p,
goto done;
}
/* get the printer off of disk */
if (!get_printer_snum(p, r->in.handle, &snum, NULL)) {
return WERR_BADFID;
}
ZERO_STRUCT(printer);
result = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
if (!W_ERROR_IS_OK(result)) {
return result;
}
/* now look for a match on the key name */
p_data = printer->info_2->data;
key_index = lookup_printerkey(p_data, r->in.key_name);
if (key_index == -1) {
DEBUG(10,("_spoolss_EnumPrinterDataEx: Unknown keyname [%s]\n",
r->in.key_name));
result = WERR_INVALID_PARAM;
result = winreg_enum_printer_dataex(p->mem_ctx,
p->server_info,
lp_const_servicename(snum),
r->in.key_name,
&count,
&info);
if (!W_ERROR_IS_OK(result)) {
goto done;
}
/* allocate the memory for the array of pointers -- if necessary */
count = regval_ctr_numvals(p_data->keys[key_index].values);
if (!count) {
result = WERR_OK; /* ??? */
goto done;
}
info = TALLOC_ZERO_ARRAY(p->mem_ctx,
struct spoolss_PrinterEnumValues,
count);
if (!info) {
DEBUG(0,("_spoolss_EnumPrinterDataEx: talloc() failed\n"));
result = WERR_NOMEM;
goto done;
}
/*
* loop through all params and build the array to pass
* back to the client
*/
for (i=0; i < count; i++) {
struct regval_blob *val;
/* lookup the registry value */
val = regval_ctr_specific_value(p_data->keys[key_index].values, i);
DEBUG(10,("retrieved value number [%d] [%s]\n", i, regval_name(val)));
/* copy the data */
result = registry_value_to_printer_enum_value(info, val, &info[i]);
if (!W_ERROR_IS_OK(result)) {
goto done;
}
}
#if 0 /* FIXME - gd */
/* housekeeping information in the reply */
@ -9072,11 +8994,6 @@ WERROR _spoolss_EnumPrinterDataEx(pipes_struct *p,
*r->out.info = info;
done:
if (printer) {
free_a_printer(&printer, 2);
}
if (!W_ERROR_IS_OK(result)) {
return result;
}