mirror of
https://github.com/samba-team/samba.git
synced 2025-03-08 04:58:40 +03:00
s4-spoolss: fix spoolss_GetPrinterData w.r.t. out pointer changes.
Guenther
This commit is contained in:
parent
c6e3e5eabc
commit
be9a34e75d
@ -128,43 +128,43 @@ static WERROR sptr_GetPrintServerData(struct ntptr_GenericHandle *server, TALLOC
|
||||
struct dcerpc_server_info *server_info = lp_dcerpc_server_info(mem_ctx, server->ntptr->lp_ctx);
|
||||
if (strcmp("W3SvcInstalled", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_UINT32;
|
||||
r->out.data.value = 0;
|
||||
r->out.data->value = 0;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("BeepEnabled", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_UINT32;
|
||||
r->out.data.value = 0;
|
||||
r->out.data->value = 0;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("EventLog", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_UINT32;
|
||||
r->out.data.value = 0;
|
||||
r->out.data->value = 0;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("NetPopup", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_UINT32;
|
||||
r->out.data.value = 0;
|
||||
r->out.data->value = 0;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("NetPopupToComputer", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_UINT32;
|
||||
r->out.data.value = 0;
|
||||
r->out.data->value = 0;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("MajorVersion", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_UINT32;
|
||||
r->out.data.value = 3;
|
||||
r->out.data->value = 3;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("MinorVersion", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_UINT32;
|
||||
r->out.data.value = 0;
|
||||
r->out.data->value = 0;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("DefaultSpoolDirectory", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_STRING;
|
||||
r->out.data.string = "C:\\PRINTERS";
|
||||
r->out.data->string = "C:\\PRINTERS";
|
||||
return WERR_OK;
|
||||
} else if (strcmp("Architecture", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_STRING;
|
||||
r->out.data.string = SPOOLSS_ARCHITECTURE_NT_X86;
|
||||
r->out.data->string = SPOOLSS_ARCHITECTURE_NT_X86;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("DsPresent", r->in.value_name) == 0) {
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_UINT32;
|
||||
r->out.data.value = 1;
|
||||
r->out.data->value = 1;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("OSVersion", r->in.value_name) == 0) {
|
||||
DATA_BLOB blob;
|
||||
@ -182,7 +182,7 @@ static WERROR sptr_GetPrintServerData(struct ntptr_GenericHandle *server, TALLOC
|
||||
}
|
||||
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_BINARY;
|
||||
r->out.data.binary = blob;
|
||||
r->out.data->binary = blob;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("OSVersionEx", r->in.value_name) == 0) {
|
||||
DATA_BLOB blob;
|
||||
@ -202,16 +202,16 @@ static WERROR sptr_GetPrintServerData(struct ntptr_GenericHandle *server, TALLOC
|
||||
}
|
||||
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_BINARY;
|
||||
r->out.data.binary = blob;
|
||||
r->out.data->binary = blob;
|
||||
return WERR_OK;
|
||||
} else if (strcmp("DNSMachineName", r->in.value_name) == 0) {
|
||||
if (!lp_realm(server->ntptr->lp_ctx)) return WERR_INVALID_PARAM;
|
||||
|
||||
*r->out.type = SPOOLSS_PRINTER_DATA_TYPE_STRING;
|
||||
r->out.data.string = talloc_asprintf(mem_ctx, "%s.%s",
|
||||
r->out.data->string = talloc_asprintf(mem_ctx, "%s.%s",
|
||||
lp_netbios_name(server->ntptr->lp_ctx),
|
||||
lp_realm(server->ntptr->lp_ctx));
|
||||
W_ERROR_HAVE_NO_MEMORY(r->out.data.string);
|
||||
W_ERROR_HAVE_NO_MEMORY(r->out.data->string);
|
||||
return WERR_OK;
|
||||
}
|
||||
|
||||
|
@ -583,6 +583,12 @@ static WERROR dcesrv_spoolss_GetPrinterData(struct dcesrv_call_state *dce_call,
|
||||
r->out.type = talloc_zero(mem_ctx, enum spoolss_PrinterDataType);
|
||||
W_ERROR_HAVE_NO_MEMORY(r->out.type);
|
||||
|
||||
r->out.needed = talloc_zero(mem_ctx, uint32_t);
|
||||
W_ERROR_HAVE_NO_MEMORY(r->out.needed);
|
||||
|
||||
r->out.data = talloc_zero(mem_ctx, union spoolss_PrinterData);
|
||||
W_ERROR_HAVE_NO_MEMORY(r->out.data);
|
||||
|
||||
switch (handle->type) {
|
||||
case NTPTR_HANDLE_SERVER:
|
||||
status = ntptr_GetPrintServerData(handle, mem_ctx, r);
|
||||
@ -594,7 +600,7 @@ static WERROR dcesrv_spoolss_GetPrinterData(struct dcesrv_call_state *dce_call,
|
||||
|
||||
W_ERROR_NOT_OK_RETURN(status);
|
||||
|
||||
*r->out.needed = ndr_size_spoolss_PrinterData(&r->out.data, *r->out.type, ic, 0);
|
||||
*r->out.needed = ndr_size_spoolss_PrinterData(r->out.data, *r->out.type, ic, 0);
|
||||
*r->out.type = SPOOLSS_BUFFER_OK(*r->out.type, SPOOLSS_PRINTER_DATA_TYPE_NULL);
|
||||
r->out.data = SPOOLSS_BUFFER_OK(r->out.data, r->out.data);
|
||||
return SPOOLSS_BUFFER_OK(WERR_OK, WERR_MORE_DATA);
|
||||
|
Loading…
x
Reference in New Issue
Block a user