mirror of
https://github.com/samba-team/samba.git
synced 2024-12-27 03:21:53 +03:00
r19028: Implement getprinterinfo level 6 (only the status) and get rid of snum in the
getprinter calls. Survives the RPC-SAMBA3-SPOOLSS test which I will activate when the Samba4 build farm has picked it up. Volker
This commit is contained in:
parent
5d16aa61c6
commit
d7248b6cfa
@ -984,6 +984,12 @@ typedef struct printer_info_5
|
|||||||
}
|
}
|
||||||
PRINTER_INFO_5;
|
PRINTER_INFO_5;
|
||||||
|
|
||||||
|
typedef struct printer_info_6
|
||||||
|
{
|
||||||
|
uint32 status;
|
||||||
|
}
|
||||||
|
PRINTER_INFO_6;
|
||||||
|
|
||||||
#define SPOOL_DS_PUBLISH 1
|
#define SPOOL_DS_PUBLISH 1
|
||||||
#define SPOOL_DS_UPDATE 2
|
#define SPOOL_DS_UPDATE 2
|
||||||
#define SPOOL_DS_UNPUBLISH 4
|
#define SPOOL_DS_UNPUBLISH 4
|
||||||
|
@ -2451,6 +2451,24 @@ BOOL smb_io_printer_info_5(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_5
|
|||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
Parse a PRINTER_INFO_6 structure.
|
||||||
|
********************************************************************/
|
||||||
|
|
||||||
|
BOOL smb_io_printer_info_6(const char *desc, RPC_BUFFER *buffer,
|
||||||
|
PRINTER_INFO_6 *info, int depth)
|
||||||
|
{
|
||||||
|
prs_struct *ps=&buffer->prs;
|
||||||
|
|
||||||
|
prs_debug(ps, depth, desc, "smb_io_printer_info_6");
|
||||||
|
depth++;
|
||||||
|
|
||||||
|
if (!prs_uint32("status", ps, depth, &info->status))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
Parse a PRINTER_INFO_7 structure.
|
Parse a PRINTER_INFO_7 structure.
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
@ -3110,6 +3128,14 @@ uint32 spoolss_size_printer_info_5(PRINTER_INFO_5 *info)
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
return the size required by a struct in the stream
|
||||||
|
********************************************************************/
|
||||||
|
|
||||||
|
uint32 spoolss_size_printer_info_6(PRINTER_INFO_6 *info)
|
||||||
|
{
|
||||||
|
return sizeof(uint32);
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
return the size required by a struct in the stream
|
return the size required by a struct in the stream
|
||||||
@ -6263,6 +6289,11 @@ void free_printer_info_5(PRINTER_INFO_5 *printer)
|
|||||||
SAFE_FREE(printer);
|
SAFE_FREE(printer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void free_printer_info_6(PRINTER_INFO_6 *printer)
|
||||||
|
{
|
||||||
|
SAFE_FREE(printer);
|
||||||
|
}
|
||||||
|
|
||||||
void free_printer_info_7(PRINTER_INFO_7 *printer)
|
void free_printer_info_7(PRINTER_INFO_7 *printer)
|
||||||
{
|
{
|
||||||
SAFE_FREE(printer);
|
SAFE_FREE(printer);
|
||||||
|
@ -373,7 +373,8 @@ static WERROR delete_printer_handle(pipes_struct *p, POLICY_HND *hnd)
|
|||||||
Return the snum of a printer corresponding to an handle.
|
Return the snum of a printer corresponding to an handle.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static BOOL get_printer_snum(pipes_struct *p, POLICY_HND *hnd, int *number)
|
static BOOL get_printer_snum(pipes_struct *p, POLICY_HND *hnd, int *number,
|
||||||
|
struct share_params **params)
|
||||||
{
|
{
|
||||||
Printer_entry *Printer = find_printer_index_by_hnd(p, hnd);
|
Printer_entry *Printer = find_printer_index_by_hnd(p, hnd);
|
||||||
|
|
||||||
@ -386,6 +387,13 @@ static BOOL get_printer_snum(pipes_struct *p, POLICY_HND *hnd, int *number)
|
|||||||
case SPLHND_PRINTER:
|
case SPLHND_PRINTER:
|
||||||
DEBUG(4,("short name:%s\n", Printer->sharename));
|
DEBUG(4,("short name:%s\n", Printer->sharename));
|
||||||
*number = print_queue_snum(Printer->sharename);
|
*number = print_queue_snum(Printer->sharename);
|
||||||
|
if ((*number != -1) && (params != NULL)) {
|
||||||
|
*params = get_share_params(tmp_talloc_ctx(),
|
||||||
|
Printer->sharename);
|
||||||
|
if (*params == NULL) {
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
}
|
||||||
return (*number != -1);
|
return (*number != -1);
|
||||||
case SPLHND_SERVER:
|
case SPLHND_SERVER:
|
||||||
return False;
|
return False;
|
||||||
@ -1626,7 +1634,7 @@ WERROR _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u,
|
|||||||
/* NT doesn't let us connect to a printer if the connecting user
|
/* NT doesn't let us connect to a printer if the connecting user
|
||||||
doesn't have print permission. */
|
doesn't have print permission. */
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum)) {
|
if (!get_printer_snum(p, handle, &snum, NULL)) {
|
||||||
close_printer_handle(p, handle);
|
close_printer_handle(p, handle);
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
@ -1853,7 +1861,7 @@ static WERROR _spoolss_enddocprinter_internal(pipes_struct *p, POLICY_HND *handl
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
Printer->document_started=False;
|
Printer->document_started=False;
|
||||||
@ -2445,7 +2453,7 @@ WERROR _spoolss_getprinterdata(pipes_struct *p, SPOOL_Q_GETPRINTERDATA *q_u, SPO
|
|||||||
status = getprinterdata_printer_server( p->mem_ctx, value, type, data, needed, *out_size );
|
status = getprinterdata_printer_server( p->mem_ctx, value, type, data, needed, *out_size );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( !get_printer_snum(p,handle, &snum) ) {
|
if ( !get_printer_snum(p,handle, &snum, NULL) ) {
|
||||||
status = WERR_BADFID;
|
status = WERR_BADFID;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2663,7 +2671,7 @@ WERROR _spoolss_rffpcnex(pipes_struct *p, SPOOL_Q_RFFPCNEX *q_u, SPOOL_R_RFFPCNE
|
|||||||
if ( Printer->printer_type == SPLHND_SERVER)
|
if ( Printer->printer_type == SPLHND_SERVER)
|
||||||
snum = -1;
|
snum = -1;
|
||||||
else if ( (Printer->printer_type == SPLHND_PRINTER) &&
|
else if ( (Printer->printer_type == SPLHND_PRINTER) &&
|
||||||
!get_printer_snum(p, handle, &snum) )
|
!get_printer_snum(p, handle, &snum, NULL) )
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
client_ip.s_addr = inet_addr(p->conn->client_address);
|
client_ip.s_addr = inet_addr(p->conn->client_address);
|
||||||
@ -3751,7 +3759,7 @@ static WERROR printer_notify_info(pipes_struct *p, POLICY_HND *hnd, SPOOL_NOTIFY
|
|||||||
if ( !option )
|
if ( !option )
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
get_printer_snum(p, hnd, &snum);
|
get_printer_snum(p, hnd, &snum, NULL);
|
||||||
|
|
||||||
for (i=0; i<option->count; i++) {
|
for (i=0; i<option->count; i++) {
|
||||||
option_type=&option->ctr.type[i];
|
option_type=&option->ctr.type[i];
|
||||||
@ -3869,7 +3877,9 @@ done:
|
|||||||
* fill a printer_info_0 struct
|
* fill a printer_info_0 struct
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
static BOOL construct_printer_info_0(Printer_entry *print_hnd, PRINTER_INFO_0 *printer, int snum)
|
static BOOL construct_printer_info_0(Printer_entry *print_hnd,
|
||||||
|
PRINTER_INFO_0 *printer,
|
||||||
|
const struct share_params *params)
|
||||||
{
|
{
|
||||||
pstring chaine;
|
pstring chaine;
|
||||||
int count;
|
int count;
|
||||||
@ -3880,14 +3890,15 @@ static BOOL construct_printer_info_0(Printer_entry *print_hnd, PRINTER_INFO_0 *p
|
|||||||
time_t setuptime;
|
time_t setuptime;
|
||||||
print_status_struct status;
|
print_status_struct status;
|
||||||
|
|
||||||
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
|
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
|
||||||
|
lp_const_servicename(params->service))))
|
||||||
return False;
|
return False;
|
||||||
|
|
||||||
count = print_queue_length(snum, &status);
|
count = print_queue_length(params->service, &status);
|
||||||
|
|
||||||
/* check if we already have a counter for this printer */
|
/* check if we already have a counter for this printer */
|
||||||
for(session_counter = counter_list; session_counter; session_counter = session_counter->next) {
|
for(session_counter = counter_list; session_counter; session_counter = session_counter->next) {
|
||||||
if (session_counter->snum == snum)
|
if (session_counter->snum == params->service)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3898,7 +3909,7 @@ static BOOL construct_printer_info_0(Printer_entry *print_hnd, PRINTER_INFO_0 *p
|
|||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
ZERO_STRUCTP(session_counter);
|
ZERO_STRUCTP(session_counter);
|
||||||
session_counter->snum=snum;
|
session_counter->snum=params->service;
|
||||||
session_counter->counter=0;
|
session_counter->counter=0;
|
||||||
DLIST_ADD(counter_list, session_counter);
|
DLIST_ADD(counter_list, session_counter);
|
||||||
}
|
}
|
||||||
@ -3974,21 +3985,25 @@ static BOOL construct_printer_info_0(Printer_entry *print_hnd, PRINTER_INFO_0 *p
|
|||||||
* construct_printer_info_1
|
* construct_printer_info_1
|
||||||
* fill a printer_info_1 struct
|
* fill a printer_info_1 struct
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
static BOOL construct_printer_info_1(Printer_entry *print_hnd, uint32 flags, PRINTER_INFO_1 *printer, int snum)
|
static BOOL construct_printer_info_1(Printer_entry *print_hnd, uint32 flags,
|
||||||
|
PRINTER_INFO_1 *printer,
|
||||||
|
const struct share_params *params)
|
||||||
{
|
{
|
||||||
pstring chaine;
|
pstring chaine;
|
||||||
pstring chaine2;
|
pstring chaine2;
|
||||||
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
||||||
|
|
||||||
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
|
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
|
||||||
|
lp_const_servicename(params->service))))
|
||||||
return False;
|
return False;
|
||||||
|
|
||||||
printer->flags=flags;
|
printer->flags=flags;
|
||||||
|
|
||||||
if (*ntprinter->info_2->comment == '\0') {
|
if (*ntprinter->info_2->comment == '\0') {
|
||||||
init_unistr(&printer->comment, lp_comment(snum));
|
init_unistr(&printer->comment, lp_comment(params->service));
|
||||||
slprintf(chaine,sizeof(chaine)-1,"%s,%s,%s", ntprinter->info_2->printername,
|
slprintf(chaine,sizeof(chaine)-1,"%s,%s,%s", ntprinter->info_2->printername,
|
||||||
ntprinter->info_2->drivername, lp_comment(snum));
|
ntprinter->info_2->drivername,
|
||||||
|
lp_comment(params->service));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
init_unistr(&printer->comment, ntprinter->info_2->comment); /* saved comment. */
|
init_unistr(&printer->comment, ntprinter->info_2->comment); /* saved comment. */
|
||||||
@ -4112,26 +4127,29 @@ done:
|
|||||||
* fill a printer_info_2 struct
|
* fill a printer_info_2 struct
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
static BOOL construct_printer_info_2(Printer_entry *print_hnd, PRINTER_INFO_2 *printer, int snum)
|
static BOOL construct_printer_info_2(Printer_entry *print_hnd,
|
||||||
|
PRINTER_INFO_2 *printer,
|
||||||
|
const struct share_params *params)
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
||||||
|
|
||||||
print_status_struct status;
|
print_status_struct status;
|
||||||
|
|
||||||
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
|
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
|
||||||
|
lp_const_servicename(params->service))))
|
||||||
return False;
|
return False;
|
||||||
|
|
||||||
count = print_queue_length(snum, &status);
|
count = print_queue_length(params->service, &status);
|
||||||
|
|
||||||
init_unistr(&printer->servername, ntprinter->info_2->servername); /* servername*/
|
init_unistr(&printer->servername, ntprinter->info_2->servername); /* servername*/
|
||||||
init_unistr(&printer->printername, ntprinter->info_2->printername); /* printername*/
|
init_unistr(&printer->printername, ntprinter->info_2->printername); /* printername*/
|
||||||
init_unistr(&printer->sharename, lp_servicename(snum)); /* sharename */
|
init_unistr(&printer->sharename, lp_servicename(params->service)); /* sharename */
|
||||||
init_unistr(&printer->portname, ntprinter->info_2->portname); /* port */
|
init_unistr(&printer->portname, ntprinter->info_2->portname); /* port */
|
||||||
init_unistr(&printer->drivername, ntprinter->info_2->drivername); /* drivername */
|
init_unistr(&printer->drivername, ntprinter->info_2->drivername); /* drivername */
|
||||||
|
|
||||||
if (*ntprinter->info_2->comment == '\0')
|
if (*ntprinter->info_2->comment == '\0')
|
||||||
init_unistr(&printer->comment, lp_comment(snum)); /* comment */
|
init_unistr(&printer->comment, lp_comment(params->service)); /* comment */
|
||||||
else
|
else
|
||||||
init_unistr(&printer->comment, ntprinter->info_2->comment); /* saved comment. */
|
init_unistr(&printer->comment, ntprinter->info_2->comment); /* saved comment. */
|
||||||
|
|
||||||
@ -4151,7 +4169,8 @@ static BOOL construct_printer_info_2(Printer_entry *print_hnd, PRINTER_INFO_2 *p
|
|||||||
printer->cjobs = count; /* jobs */
|
printer->cjobs = count; /* jobs */
|
||||||
printer->averageppm = ntprinter->info_2->averageppm; /* average pages per minute */
|
printer->averageppm = ntprinter->info_2->averageppm; /* average pages per minute */
|
||||||
|
|
||||||
if ( !(printer->devmode = construct_dev_mode(lp_const_servicename(snum))) )
|
if ( !(printer->devmode = construct_dev_mode(
|
||||||
|
lp_const_servicename(params->service))) )
|
||||||
DEBUG(8, ("Returning NULL Devicemode!\n"));
|
DEBUG(8, ("Returning NULL Devicemode!\n"));
|
||||||
|
|
||||||
printer->secdesc = NULL;
|
printer->secdesc = NULL;
|
||||||
@ -4176,12 +4195,15 @@ static BOOL construct_printer_info_2(Printer_entry *print_hnd, PRINTER_INFO_2 *p
|
|||||||
* fill a printer_info_3 struct
|
* fill a printer_info_3 struct
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
static BOOL construct_printer_info_3(Printer_entry *print_hnd, PRINTER_INFO_3 **pp_printer, int snum)
|
static BOOL construct_printer_info_3(Printer_entry *print_hnd,
|
||||||
|
PRINTER_INFO_3 **pp_printer,
|
||||||
|
const struct share_params *params)
|
||||||
{
|
{
|
||||||
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
||||||
PRINTER_INFO_3 *printer = NULL;
|
PRINTER_INFO_3 *printer = NULL;
|
||||||
|
|
||||||
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
|
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
|
||||||
|
lp_const_servicename(params->service))))
|
||||||
return False;
|
return False;
|
||||||
|
|
||||||
*pp_printer = NULL;
|
*pp_printer = NULL;
|
||||||
@ -4216,11 +4238,14 @@ static BOOL construct_printer_info_3(Printer_entry *print_hnd, PRINTER_INFO_3 **
|
|||||||
* fill a printer_info_4 struct
|
* fill a printer_info_4 struct
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
static BOOL construct_printer_info_4(Printer_entry *print_hnd, PRINTER_INFO_4 *printer, int snum)
|
static BOOL construct_printer_info_4(Printer_entry *print_hnd,
|
||||||
|
PRINTER_INFO_4 *printer,
|
||||||
|
const struct share_params *params)
|
||||||
{
|
{
|
||||||
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
||||||
|
|
||||||
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
|
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
|
||||||
|
lp_const_servicename(params->service))))
|
||||||
return False;
|
return False;
|
||||||
|
|
||||||
init_unistr(&printer->printername, ntprinter->info_2->printername); /* printername*/
|
init_unistr(&printer->printername, ntprinter->info_2->printername); /* printername*/
|
||||||
@ -4236,11 +4261,14 @@ static BOOL construct_printer_info_4(Printer_entry *print_hnd, PRINTER_INFO_4 *p
|
|||||||
* fill a printer_info_5 struct
|
* fill a printer_info_5 struct
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
static BOOL construct_printer_info_5(Printer_entry *print_hnd, PRINTER_INFO_5 *printer, int snum)
|
static BOOL construct_printer_info_5(Printer_entry *print_hnd,
|
||||||
|
PRINTER_INFO_5 *printer,
|
||||||
|
const struct share_params *params)
|
||||||
{
|
{
|
||||||
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
||||||
|
|
||||||
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
|
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
|
||||||
|
lp_const_servicename(params->service))))
|
||||||
return False;
|
return False;
|
||||||
|
|
||||||
init_unistr(&printer->printername, ntprinter->info_2->printername);
|
init_unistr(&printer->printername, ntprinter->info_2->printername);
|
||||||
@ -4257,17 +4285,45 @@ static BOOL construct_printer_info_5(Printer_entry *print_hnd, PRINTER_INFO_5 *p
|
|||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
* construct_printer_info_6
|
||||||
|
* fill a printer_info_6 struct
|
||||||
|
********************************************************************/
|
||||||
|
|
||||||
|
static BOOL construct_printer_info_6(Printer_entry *print_hnd,
|
||||||
|
PRINTER_INFO_6 *printer,
|
||||||
|
const struct share_params *params)
|
||||||
|
{
|
||||||
|
NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
|
||||||
|
int count;
|
||||||
|
print_status_struct status;
|
||||||
|
|
||||||
|
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
|
||||||
|
lp_const_servicename(params->service))))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
count = print_queue_length(params->service, &status);
|
||||||
|
|
||||||
|
printer->status = nt_printq_status(status.status);
|
||||||
|
|
||||||
|
free_a_printer(&ntprinter, 2);
|
||||||
|
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* construct_printer_info_7
|
* construct_printer_info_7
|
||||||
* fill a printer_info_7 struct
|
* fill a printer_info_7 struct
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
static BOOL construct_printer_info_7(Printer_entry *print_hnd, PRINTER_INFO_7 *printer, int snum)
|
static BOOL construct_printer_info_7(Printer_entry *print_hnd,
|
||||||
|
PRINTER_INFO_7 *printer,
|
||||||
|
const struct share_params *params)
|
||||||
{
|
{
|
||||||
char *guid_str = NULL;
|
char *guid_str = NULL;
|
||||||
struct GUID guid;
|
struct GUID guid;
|
||||||
|
|
||||||
if (is_printer_published(print_hnd, snum, &guid)) {
|
if (is_printer_published(print_hnd, params->service, &guid)) {
|
||||||
asprintf(&guid_str, "{%s}", smb_uuid_string_static(guid));
|
asprintf(&guid_str, "{%s}", smb_uuid_string_static(guid));
|
||||||
strupper_m(guid_str);
|
strupper_m(guid_str);
|
||||||
init_unistr(&printer->guid, guid_str);
|
init_unistr(&printer->guid, guid_str);
|
||||||
@ -4297,9 +4353,12 @@ static WERROR enum_all_printers_info_1(uint32 flags, RPC_BUFFER *buffer, uint32
|
|||||||
|
|
||||||
for (snum=0; snum<n_services; snum++) {
|
for (snum=0; snum<n_services; snum++) {
|
||||||
if (lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) ) {
|
if (lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) ) {
|
||||||
|
struct share_params params;
|
||||||
|
params.service = snum;
|
||||||
|
|
||||||
DEBUG(4,("Found a printer in smb.conf: %s[%x]\n", lp_servicename(snum), snum));
|
DEBUG(4,("Found a printer in smb.conf: %s[%x]\n", lp_servicename(snum), snum));
|
||||||
|
|
||||||
if (construct_printer_info_1(NULL, flags, ¤t_prt, snum)) {
|
if (construct_printer_info_1(NULL, flags, ¤t_prt, ¶ms)) {
|
||||||
if((printers=SMB_REALLOC_ARRAY(printers, PRINTER_INFO_1, *returned +1)) == NULL) {
|
if((printers=SMB_REALLOC_ARRAY(printers, PRINTER_INFO_1, *returned +1)) == NULL) {
|
||||||
DEBUG(2,("enum_all_printers_info_1: failed to enlarge printers buffer!\n"));
|
DEBUG(2,("enum_all_printers_info_1: failed to enlarge printers buffer!\n"));
|
||||||
*returned=0;
|
*returned=0;
|
||||||
@ -4483,9 +4542,11 @@ static WERROR enum_all_printers_info_2(RPC_BUFFER *buffer, uint32 offered, uint3
|
|||||||
|
|
||||||
for (snum=0; snum<n_services; snum++) {
|
for (snum=0; snum<n_services; snum++) {
|
||||||
if (lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) ) {
|
if (lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) ) {
|
||||||
|
struct share_params params;
|
||||||
|
params.service = snum;
|
||||||
DEBUG(4,("Found a printer in smb.conf: %s[%x]\n", lp_servicename(snum), snum));
|
DEBUG(4,("Found a printer in smb.conf: %s[%x]\n", lp_servicename(snum), snum));
|
||||||
|
|
||||||
if (construct_printer_info_2(NULL, ¤t_prt, snum)) {
|
if (construct_printer_info_2(NULL, ¤t_prt, ¶ms)) {
|
||||||
if ( !(printers=SMB_REALLOC_ARRAY(printers, PRINTER_INFO_2, *returned +1)) ) {
|
if ( !(printers=SMB_REALLOC_ARRAY(printers, PRINTER_INFO_2, *returned +1)) ) {
|
||||||
DEBUG(2,("enum_all_printers_info_2: failed to enlarge printers buffer!\n"));
|
DEBUG(2,("enum_all_printers_info_2: failed to enlarge printers buffer!\n"));
|
||||||
*returned = 0;
|
*returned = 0;
|
||||||
@ -4666,7 +4727,10 @@ WERROR _spoolss_enumprinters( pipes_struct *p, SPOOL_Q_ENUMPRINTERS *q_u, SPOOL_
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static WERROR getprinter_level_0(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
|
static WERROR getprinter_level_0(Printer_entry *print_hnd,
|
||||||
|
const struct share_params *params,
|
||||||
|
RPC_BUFFER *buffer, uint32 offered,
|
||||||
|
uint32 *needed)
|
||||||
{
|
{
|
||||||
PRINTER_INFO_0 *printer=NULL;
|
PRINTER_INFO_0 *printer=NULL;
|
||||||
WERROR result = WERR_OK;
|
WERROR result = WERR_OK;
|
||||||
@ -4674,7 +4738,7 @@ static WERROR getprinter_level_0(Printer_entry *print_hnd, int snum, RPC_BUFFER
|
|||||||
if((printer=SMB_MALLOC_P(PRINTER_INFO_0)) == NULL)
|
if((printer=SMB_MALLOC_P(PRINTER_INFO_0)) == NULL)
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
|
|
||||||
construct_printer_info_0(print_hnd, printer, snum);
|
construct_printer_info_0(print_hnd, printer, params);
|
||||||
|
|
||||||
/* check the required size. */
|
/* check the required size. */
|
||||||
*needed += spoolss_size_printer_info_0(printer);
|
*needed += spoolss_size_printer_info_0(printer);
|
||||||
@ -4703,7 +4767,10 @@ out:
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static WERROR getprinter_level_1(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
|
static WERROR getprinter_level_1(Printer_entry *print_hnd,
|
||||||
|
const struct share_params *params,
|
||||||
|
RPC_BUFFER *buffer, uint32 offered,
|
||||||
|
uint32 *needed)
|
||||||
{
|
{
|
||||||
PRINTER_INFO_1 *printer=NULL;
|
PRINTER_INFO_1 *printer=NULL;
|
||||||
WERROR result = WERR_OK;
|
WERROR result = WERR_OK;
|
||||||
@ -4711,7 +4778,8 @@ static WERROR getprinter_level_1(Printer_entry *print_hnd, int snum, RPC_BUFFER
|
|||||||
if((printer=SMB_MALLOC_P(PRINTER_INFO_1)) == NULL)
|
if((printer=SMB_MALLOC_P(PRINTER_INFO_1)) == NULL)
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
|
|
||||||
construct_printer_info_1(print_hnd, PRINTER_ENUM_ICON8, printer, snum);
|
construct_printer_info_1(print_hnd, PRINTER_ENUM_ICON8, printer,
|
||||||
|
params);
|
||||||
|
|
||||||
/* check the required size. */
|
/* check the required size. */
|
||||||
*needed += spoolss_size_printer_info_1(printer);
|
*needed += spoolss_size_printer_info_1(printer);
|
||||||
@ -4739,7 +4807,10 @@ out:
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static WERROR getprinter_level_2(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
|
static WERROR getprinter_level_2(Printer_entry *print_hnd,
|
||||||
|
const struct share_params *params,
|
||||||
|
RPC_BUFFER *buffer, uint32 offered,
|
||||||
|
uint32 *needed)
|
||||||
{
|
{
|
||||||
PRINTER_INFO_2 *printer=NULL;
|
PRINTER_INFO_2 *printer=NULL;
|
||||||
WERROR result = WERR_OK;
|
WERROR result = WERR_OK;
|
||||||
@ -4747,7 +4818,7 @@ static WERROR getprinter_level_2(Printer_entry *print_hnd, int snum, RPC_BUFFER
|
|||||||
if((printer=SMB_MALLOC_P(PRINTER_INFO_2))==NULL)
|
if((printer=SMB_MALLOC_P(PRINTER_INFO_2))==NULL)
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
|
|
||||||
construct_printer_info_2(print_hnd, printer, snum);
|
construct_printer_info_2(print_hnd, printer, params);
|
||||||
|
|
||||||
/* check the required size. */
|
/* check the required size. */
|
||||||
*needed += spoolss_size_printer_info_2(printer);
|
*needed += spoolss_size_printer_info_2(printer);
|
||||||
@ -4776,12 +4847,15 @@ out:
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static WERROR getprinter_level_3(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
|
static WERROR getprinter_level_3(Printer_entry *print_hnd,
|
||||||
|
const struct share_params *params,
|
||||||
|
RPC_BUFFER *buffer, uint32 offered,
|
||||||
|
uint32 *needed)
|
||||||
{
|
{
|
||||||
PRINTER_INFO_3 *printer=NULL;
|
PRINTER_INFO_3 *printer=NULL;
|
||||||
WERROR result = WERR_OK;
|
WERROR result = WERR_OK;
|
||||||
|
|
||||||
if (!construct_printer_info_3(print_hnd, &printer, snum))
|
if (!construct_printer_info_3(print_hnd, &printer, params))
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
|
|
||||||
/* check the required size. */
|
/* check the required size. */
|
||||||
@ -4810,7 +4884,10 @@ out:
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static WERROR getprinter_level_4(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
|
static WERROR getprinter_level_4(Printer_entry *print_hnd,
|
||||||
|
const struct share_params *params,
|
||||||
|
RPC_BUFFER *buffer, uint32 offered,
|
||||||
|
uint32 *needed)
|
||||||
{
|
{
|
||||||
PRINTER_INFO_4 *printer=NULL;
|
PRINTER_INFO_4 *printer=NULL;
|
||||||
WERROR result = WERR_OK;
|
WERROR result = WERR_OK;
|
||||||
@ -4818,7 +4895,7 @@ static WERROR getprinter_level_4(Printer_entry *print_hnd, int snum, RPC_BUFFER
|
|||||||
if((printer=SMB_MALLOC_P(PRINTER_INFO_4))==NULL)
|
if((printer=SMB_MALLOC_P(PRINTER_INFO_4))==NULL)
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
|
|
||||||
if (!construct_printer_info_4(print_hnd, printer, snum)) {
|
if (!construct_printer_info_4(print_hnd, printer, params)) {
|
||||||
SAFE_FREE(printer);
|
SAFE_FREE(printer);
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
}
|
}
|
||||||
@ -4849,7 +4926,10 @@ out:
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static WERROR getprinter_level_5(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
|
static WERROR getprinter_level_5(Printer_entry *print_hnd,
|
||||||
|
const struct share_params *params,
|
||||||
|
RPC_BUFFER *buffer, uint32 offered,
|
||||||
|
uint32 *needed)
|
||||||
{
|
{
|
||||||
PRINTER_INFO_5 *printer=NULL;
|
PRINTER_INFO_5 *printer=NULL;
|
||||||
WERROR result = WERR_OK;
|
WERROR result = WERR_OK;
|
||||||
@ -4857,7 +4937,7 @@ static WERROR getprinter_level_5(Printer_entry *print_hnd, int snum, RPC_BUFFER
|
|||||||
if((printer=SMB_MALLOC_P(PRINTER_INFO_5))==NULL)
|
if((printer=SMB_MALLOC_P(PRINTER_INFO_5))==NULL)
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
|
|
||||||
if (!construct_printer_info_5(print_hnd, printer, snum)) {
|
if (!construct_printer_info_5(print_hnd, printer, params)) {
|
||||||
free_printer_info_5(printer);
|
free_printer_info_5(printer);
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
}
|
}
|
||||||
@ -4885,7 +4965,50 @@ out:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static WERROR getprinter_level_7(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
|
static WERROR getprinter_level_6(Printer_entry *print_hnd,
|
||||||
|
const struct share_params *params,
|
||||||
|
RPC_BUFFER *buffer, uint32 offered,
|
||||||
|
uint32 *needed)
|
||||||
|
{
|
||||||
|
PRINTER_INFO_6 *printer;
|
||||||
|
WERROR result = WERR_OK;
|
||||||
|
|
||||||
|
if ((printer = SMB_MALLOC_P(PRINTER_INFO_6)) == NULL) {
|
||||||
|
return WERR_NOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!construct_printer_info_6(print_hnd, printer, params)) {
|
||||||
|
free_printer_info_6(printer);
|
||||||
|
return WERR_NOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check the required size. */
|
||||||
|
*needed += spoolss_size_printer_info_6(printer);
|
||||||
|
|
||||||
|
if (*needed > offered) {
|
||||||
|
result = WERR_INSUFFICIENT_BUFFER;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!rpcbuf_alloc_size(buffer, *needed)) {
|
||||||
|
result = WERR_NOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fill the buffer with the structures */
|
||||||
|
smb_io_printer_info_6("", buffer, printer, 0);
|
||||||
|
|
||||||
|
out:
|
||||||
|
/* clear memory */
|
||||||
|
free_printer_info_6(printer);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static WERROR getprinter_level_7(Printer_entry *print_hnd,
|
||||||
|
const struct share_params *params,
|
||||||
|
RPC_BUFFER *buffer, uint32 offered,
|
||||||
|
uint32 *needed)
|
||||||
{
|
{
|
||||||
PRINTER_INFO_7 *printer=NULL;
|
PRINTER_INFO_7 *printer=NULL;
|
||||||
WERROR result = WERR_OK;
|
WERROR result = WERR_OK;
|
||||||
@ -4893,7 +5016,7 @@ static WERROR getprinter_level_7(Printer_entry *print_hnd, int snum, RPC_BUFFER
|
|||||||
if((printer=SMB_MALLOC_P(PRINTER_INFO_7))==NULL)
|
if((printer=SMB_MALLOC_P(PRINTER_INFO_7))==NULL)
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
|
|
||||||
if (!construct_printer_info_7(print_hnd, printer, snum))
|
if (!construct_printer_info_7(print_hnd, printer, params))
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
|
|
||||||
/* check the required size. */
|
/* check the required size. */
|
||||||
@ -4931,6 +5054,7 @@ WERROR _spoolss_getprinter(pipes_struct *p, SPOOL_Q_GETPRINTER *q_u, SPOOL_R_GET
|
|||||||
uint32 offered = q_u->offered;
|
uint32 offered = q_u->offered;
|
||||||
uint32 *needed = &r_u->needed;
|
uint32 *needed = &r_u->needed;
|
||||||
Printer_entry *Printer=find_printer_index_by_hnd(p, handle);
|
Printer_entry *Printer=find_printer_index_by_hnd(p, handle);
|
||||||
|
struct share_params *params;
|
||||||
|
|
||||||
int snum;
|
int snum;
|
||||||
|
|
||||||
@ -4945,24 +5069,34 @@ WERROR _spoolss_getprinter(pipes_struct *p, SPOOL_Q_GETPRINTER *q_u, SPOOL_R_GET
|
|||||||
|
|
||||||
*needed=0;
|
*needed=0;
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, ¶ms))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case 0:
|
case 0:
|
||||||
return getprinter_level_0(Printer, snum, buffer, offered, needed);
|
return getprinter_level_0(Printer, params, buffer, offered,
|
||||||
|
needed);
|
||||||
case 1:
|
case 1:
|
||||||
return getprinter_level_1(Printer, snum, buffer, offered, needed);
|
return getprinter_level_1(Printer, params, buffer, offered,
|
||||||
|
needed);
|
||||||
case 2:
|
case 2:
|
||||||
return getprinter_level_2(Printer, snum, buffer, offered, needed);
|
return getprinter_level_2(Printer, params, buffer, offered,
|
||||||
|
needed);
|
||||||
case 3:
|
case 3:
|
||||||
return getprinter_level_3(Printer, snum, buffer, offered, needed);
|
return getprinter_level_3(Printer, params, buffer, offered,
|
||||||
|
needed);
|
||||||
case 4:
|
case 4:
|
||||||
return getprinter_level_4(Printer, snum, buffer, offered, needed);
|
return getprinter_level_4(Printer, params, buffer, offered,
|
||||||
|
needed);
|
||||||
case 5:
|
case 5:
|
||||||
return getprinter_level_5(Printer, snum, buffer, offered, needed);
|
return getprinter_level_5(Printer, params, buffer, offered,
|
||||||
|
needed);
|
||||||
|
case 6:
|
||||||
|
return getprinter_level_6(Printer, params, buffer, offered,
|
||||||
|
needed);
|
||||||
case 7:
|
case 7:
|
||||||
return getprinter_level_7(Printer, snum, buffer, offered, needed);
|
return getprinter_level_7(Printer, params, buffer, offered,
|
||||||
|
needed);
|
||||||
}
|
}
|
||||||
return WERR_UNKNOWN_LEVEL;
|
return WERR_UNKNOWN_LEVEL;
|
||||||
}
|
}
|
||||||
@ -5559,7 +5693,7 @@ WERROR _spoolss_getprinterdriver2(pipes_struct *p, SPOOL_Q_GETPRINTERDRIVER2 *q_
|
|||||||
fstrcpy(servername, get_server_name( printer ));
|
fstrcpy(servername, get_server_name( printer ));
|
||||||
unistr2_to_ascii(architecture, uni_arch, sizeof(architecture)-1);
|
unistr2_to_ascii(architecture, uni_arch, sizeof(architecture)-1);
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
switch (level) {
|
switch (level) {
|
||||||
@ -5615,7 +5749,7 @@ WERROR _spoolss_endpageprinter(pipes_struct *p, SPOOL_Q_ENDPAGEPRINTER *q_u, SPO
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
Printer->page_started=False;
|
Printer->page_started=False;
|
||||||
@ -5664,7 +5798,7 @@ WERROR _spoolss_startdocprinter(pipes_struct *p, SPOOL_Q_STARTDOCPRINTER *q_u, S
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get the share number of the printer */
|
/* get the share number of the printer */
|
||||||
if (!get_printer_snum(p, handle, &snum)) {
|
if (!get_printer_snum(p, handle, &snum, NULL)) {
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5716,7 +5850,7 @@ WERROR _spoolss_writeprinter(pipes_struct *p, SPOOL_Q_WRITEPRINTER *q_u, SPOOL_R
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
(*buffer_written) = (uint32)print_job_write(snum, Printer->jobid, (const char *)buffer,
|
(*buffer_written) = (uint32)print_job_write(snum, Printer->jobid, (const char *)buffer,
|
||||||
@ -5752,7 +5886,7 @@ static WERROR control_printer(POLICY_HND *handle, uint32 command,
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
switch (command) {
|
switch (command) {
|
||||||
@ -5797,7 +5931,7 @@ WERROR _spoolss_abortprinter(pipes_struct *p, SPOOL_Q_ABORTPRINTER *q_u, SPOOL_R
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
print_job_delete( &p->pipe_user, snum, Printer->jobid, &errcode );
|
print_job_delete( &p->pipe_user, snum, Printer->jobid, &errcode );
|
||||||
@ -5820,7 +5954,7 @@ static WERROR update_printer_sec(POLICY_HND *handle, uint32 level,
|
|||||||
|
|
||||||
Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
|
Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
|
||||||
|
|
||||||
if (!Printer || !get_printer_snum(p, handle, &snum)) {
|
if (!Printer || !get_printer_snum(p, handle, &snum, NULL)) {
|
||||||
DEBUG(2,("update_printer_sec: Invalid handle (%s:%u:%u)\n",
|
DEBUG(2,("update_printer_sec: Invalid handle (%s:%u:%u)\n",
|
||||||
OUR_HANDLE(handle)));
|
OUR_HANDLE(handle)));
|
||||||
|
|
||||||
@ -6095,7 +6229,7 @@ static WERROR update_printer(pipes_struct *p, POLICY_HND *handle, uint32 level,
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum)) {
|
if (!get_printer_snum(p, handle, &snum, NULL)) {
|
||||||
result = WERR_BADFID;
|
result = WERR_BADFID;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -6286,7 +6420,7 @@ static WERROR publish_or_unpublish_printer(pipes_struct *p, POLICY_HND *handle,
|
|||||||
if (!Printer)
|
if (!Printer)
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
nt_printer_publish(Printer, snum, info7->action);
|
nt_printer_publish(Printer, snum, info7->action);
|
||||||
@ -6356,7 +6490,7 @@ WERROR _spoolss_fcpn(pipes_struct *p, SPOOL_Q_FCPN *q_u, SPOOL_R_FCPN *r_u)
|
|||||||
if ( Printer->printer_type == SPLHND_SERVER)
|
if ( Printer->printer_type == SPLHND_SERVER)
|
||||||
snum = -1;
|
snum = -1;
|
||||||
else if ( (Printer->printer_type == SPLHND_PRINTER) &&
|
else if ( (Printer->printer_type == SPLHND_PRINTER) &&
|
||||||
!get_printer_snum(p, handle, &snum) )
|
!get_printer_snum(p, handle, &snum, NULL) )
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
srv_spoolss_replycloseprinter(snum, &Printer->notify.client_hnd);
|
srv_spoolss_replycloseprinter(snum, &Printer->notify.client_hnd);
|
||||||
@ -6603,7 +6737,7 @@ WERROR _spoolss_enumjobs( pipes_struct *p, SPOOL_Q_ENUMJOBS *q_u, SPOOL_R_ENUMJO
|
|||||||
|
|
||||||
/* lookup the printer snum and tdb entry */
|
/* lookup the printer snum and tdb entry */
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
wret = get_a_printer(NULL, &ntprinter, 2, lp_servicename(snum));
|
wret = get_a_printer(NULL, &ntprinter, 2, lp_servicename(snum));
|
||||||
@ -6657,7 +6791,7 @@ WERROR _spoolss_setjob(pipes_struct *p, SPOOL_Q_SETJOB *q_u, SPOOL_R_SETJOB *r_u
|
|||||||
int snum;
|
int snum;
|
||||||
WERROR errcode = WERR_BADFUNC;
|
WERROR errcode = WERR_BADFUNC;
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum)) {
|
if (!get_printer_snum(p, handle, &snum, NULL)) {
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7883,7 +8017,7 @@ WERROR _spoolss_enumprinterdata(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATA *q_u, S
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p,handle, &snum))
|
if (!get_printer_snum(p,handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
result = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
result = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
||||||
@ -8048,7 +8182,7 @@ WERROR _spoolss_setprinterdata( pipes_struct *p, SPOOL_Q_SETPRINTERDATA *q_u, SP
|
|||||||
return WERR_INVALID_PARAM;
|
return WERR_INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p,handle, &snum))
|
if (!get_printer_snum(p,handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -8120,7 +8254,7 @@ WERROR _spoolss_resetprinter(pipes_struct *p, SPOOL_Q_RESETPRINTER *q_u, SPOOL_R
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p,handle, &snum))
|
if (!get_printer_snum(p,handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
|
|
||||||
@ -8150,7 +8284,7 @@ WERROR _spoolss_deleteprinterdata(pipes_struct *p, SPOOL_Q_DELETEPRINTERDATA *q_
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) {
|
if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) {
|
||||||
@ -8202,7 +8336,7 @@ WERROR _spoolss_addform( pipes_struct *p, SPOOL_Q_ADDFORM *q_u, SPOOL_R_ADDFORM
|
|||||||
|
|
||||||
if ( Printer->printer_type == SPLHND_PRINTER )
|
if ( Printer->printer_type == SPLHND_PRINTER )
|
||||||
{
|
{
|
||||||
if (!get_printer_snum(p,handle, &snum))
|
if (!get_printer_snum(p,handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
||||||
@ -8273,7 +8407,7 @@ WERROR _spoolss_deleteform( pipes_struct *p, SPOOL_Q_DELETEFORM *q_u, SPOOL_R_DE
|
|||||||
|
|
||||||
if ( Printer->printer_type == SPLHND_PRINTER )
|
if ( Printer->printer_type == SPLHND_PRINTER )
|
||||||
{
|
{
|
||||||
if (!get_printer_snum(p,handle, &snum))
|
if (!get_printer_snum(p,handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
||||||
@ -8341,7 +8475,7 @@ WERROR _spoolss_setform(pipes_struct *p, SPOOL_Q_SETFORM *q_u, SPOOL_R_SETFORM *
|
|||||||
|
|
||||||
if ( Printer->printer_type == SPLHND_PRINTER )
|
if ( Printer->printer_type == SPLHND_PRINTER )
|
||||||
{
|
{
|
||||||
if (!get_printer_snum(p,handle, &snum))
|
if (!get_printer_snum(p,handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
||||||
@ -8827,7 +8961,7 @@ WERROR _spoolss_getjob( pipes_struct *p, SPOOL_Q_GETJOB *q_u, SPOOL_R_GETJOB *r_
|
|||||||
|
|
||||||
*needed = 0;
|
*needed = 0;
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
wstatus = get_a_printer(NULL, &ntprinter, 2, lp_servicename(snum));
|
wstatus = get_a_printer(NULL, &ntprinter, 2, lp_servicename(snum));
|
||||||
@ -8910,7 +9044,7 @@ WERROR _spoolss_getprinterdataex(pipes_struct *p, SPOOL_Q_GETPRINTERDATAEX *q_u,
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !get_printer_snum(p,handle, &snum) )
|
if ( !get_printer_snum(p,handle, &snum, NULL) )
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
status = get_a_printer(Printer, &printer, 2, lp_servicename(snum));
|
status = get_a_printer(Printer, &printer, 2, lp_servicename(snum));
|
||||||
@ -8996,7 +9130,7 @@ WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u,
|
|||||||
return WERR_INVALID_PARAM;
|
return WERR_INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !get_printer_snum(p,handle, &snum) )
|
if ( !get_printer_snum(p,handle, &snum, NULL) )
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -9083,7 +9217,7 @@ WERROR _spoolss_deleteprinterdataex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDATAEX
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) {
|
if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) {
|
||||||
@ -9135,7 +9269,7 @@ WERROR _spoolss_enumprinterkey(pipes_struct *p, SPOOL_Q_ENUMPRINTERKEY *q_u, SPO
|
|||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !get_printer_snum(p,handle, &snum) )
|
if ( !get_printer_snum(p,handle, &snum, NULL) )
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
|
||||||
@ -9205,7 +9339,7 @@ WERROR _spoolss_deleteprinterkey(pipes_struct *p, SPOOL_Q_DELETEPRINTERKEY *q_u,
|
|||||||
if ( !q_u->keyname.buffer )
|
if ( !q_u->keyname.buffer )
|
||||||
return WERR_INVALID_PARAM;
|
return WERR_INVALID_PARAM;
|
||||||
|
|
||||||
if (!get_printer_snum(p, handle, &snum))
|
if (!get_printer_snum(p, handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) {
|
if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) {
|
||||||
@ -9278,7 +9412,7 @@ WERROR _spoolss_enumprinterdataex(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATAEX *q_
|
|||||||
|
|
||||||
/* get the printer off of disk */
|
/* get the printer off of disk */
|
||||||
|
|
||||||
if (!get_printer_snum(p,handle, &snum))
|
if (!get_printer_snum(p,handle, &snum, NULL))
|
||||||
return WERR_BADFID;
|
return WERR_BADFID;
|
||||||
|
|
||||||
ZERO_STRUCT(printer);
|
ZERO_STRUCT(printer);
|
||||||
|
Loading…
Reference in New Issue
Block a user