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

s3-spoolss: Use spoolss_PrinterInfo2 in notify code.

This commit is contained in:
Simo Sorce 2010-04-26 13:08:32 -04:00
parent 78b985ac3e
commit afc4a38762

View File

@ -33,6 +33,7 @@
#include "../librpc/gen_ndr/cli_spoolss.h"
#include "rpc_client/init_spoolss.h"
#include "librpc/gen_ndr/messaging.h"
#include "librpc/gen_ndr/ndr_security.h"
#include "registry.h"
#include "registry/reg_objects.h"
@ -666,12 +667,13 @@ static bool is_monitoring_event(Printer_entry *p, uint16_t notify_type,
#define SETUP_SPOOLSS_NOTIFY_DATA_DEVMODE(_data, _devmode) \
_data->data.devmode.devmode = _devmode;
#define SETUP_SPOOLSS_NOTIFY_DATA_SECDESC(_data, _size, _sd) \
#define SETUP_SPOOLSS_NOTIFY_DATA_SECDESC(_data, _sd) \
_data->data.sd.sd = dup_sec_desc(mem_ctx, _sd); \
if (!_data->data.sd.sd) { \
_data->data.sd.sd_size = 0; \
} \
_data->data.sd.sd_size = _size;
_data->data.sd.sd_size = \
ndr_size_security_descriptor(_data->data.sd.sd, 0);
static void init_systemtime_buffer(TALLOC_CTX *mem_ctx,
struct tm *t,
@ -937,10 +939,9 @@ static int notify_msg_ctr_addmsg( SPOOLSS_NOTIFY_MSG_CTR *ctr, SPOOLSS_NOTIFY_MS
return ctr->num_groups;
}
void construct_info_data(struct spoolss_Notify *info_data,
enum spoolss_NotifyType type,
uint16_t field,
int id);
static void construct_info_data(struct spoolss_Notify *info_data,
enum spoolss_NotifyType type,
uint16_t field, int id);
/***********************************************************************
Send a change notication message on all handles which have a call
@ -2443,10 +2444,10 @@ WERROR _spoolss_RemoteFindFirstPrinterChangeNotifyEx(pipes_struct *p,
static void spoolss_notify_server_name(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, printer->info_2->servername);
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, pinfo2->servername);
}
/*******************************************************************
@ -2456,14 +2457,14 @@ static void spoolss_notify_server_name(int snum,
static void spoolss_notify_printer_name(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
/* the notify name should not contain the \\server\ part */
char *p = strrchr(printer->info_2->printername, '\\');
const char *p = strrchr(pinfo2->printername, '\\');
if (!p) {
p = printer->info_2->printername;
p = pinfo2->printername;
} else {
p++;
}
@ -2478,7 +2479,7 @@ static void spoolss_notify_printer_name(int snum,
static void spoolss_notify_share_name(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, lp_servicename(snum));
@ -2491,10 +2492,10 @@ static void spoolss_notify_share_name(int snum,
static void spoolss_notify_port_name(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, printer->info_2->portname);
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, pinfo2->portname);
}
/*******************************************************************
@ -2505,10 +2506,10 @@ static void spoolss_notify_port_name(int snum,
static void spoolss_notify_driver_name(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, printer->info_2->drivername);
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, pinfo2->drivername);
}
/*******************************************************************
@ -2518,18 +2519,18 @@ static void spoolss_notify_driver_name(int snum,
static void spoolss_notify_comment(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
char *p;
const char *p;
if (*printer->info_2->comment == '\0') {
if (*pinfo2->comment == '\0') {
p = lp_comment(snum);
} else {
p = printer->info_2->comment;
p = pinfo2->comment;
}
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, printer->info_2->comment);
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, p);
}
/*******************************************************************
@ -2540,10 +2541,10 @@ static void spoolss_notify_comment(int snum,
static void spoolss_notify_location(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, printer->info_2->location);
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, pinfo2->location);
}
/*******************************************************************
@ -2554,7 +2555,7 @@ static void spoolss_notify_location(int snum,
static void spoolss_notify_devmode(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
/* for a dummy implementation we have to zero the fields */
@ -2568,10 +2569,10 @@ static void spoolss_notify_devmode(int snum,
static void spoolss_notify_sepfile(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, printer->info_2->sepfile);
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, pinfo2->sepfile);
}
/*******************************************************************
@ -2582,10 +2583,10 @@ static void spoolss_notify_sepfile(int snum,
static void spoolss_notify_print_processor(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, printer->info_2->printprocessor);
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, pinfo2->printprocessor);
}
/*******************************************************************
@ -2596,10 +2597,10 @@ static void spoolss_notify_print_processor(int snum,
static void spoolss_notify_parameters(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, printer->info_2->parameters);
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, pinfo2->parameters);
}
/*******************************************************************
@ -2610,10 +2611,10 @@ static void spoolss_notify_parameters(int snum,
static void spoolss_notify_datatype(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, printer->info_2->datatype);
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, pinfo2->datatype);
}
/*******************************************************************
@ -2625,12 +2626,10 @@ static void spoolss_notify_datatype(int snum,
static void spoolss_notify_security_desc(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_SECDESC(data,
printer->info_2->secdesc_buf->sd_size,
printer->info_2->secdesc_buf->sd);
SETUP_SPOOLSS_NOTIFY_DATA_SECDESC(data, pinfo2->secdesc);
}
/*******************************************************************
@ -2641,10 +2640,10 @@ static void spoolss_notify_security_desc(int snum,
static void spoolss_notify_attributes(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, printer->info_2->attributes);
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, pinfo2->attributes);
}
/*******************************************************************
@ -2654,10 +2653,10 @@ static void spoolss_notify_attributes(int snum,
static void spoolss_notify_priority(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, printer->info_2->priority);
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, pinfo2->priority);
}
/*******************************************************************
@ -2667,10 +2666,10 @@ static void spoolss_notify_priority(int snum,
static void spoolss_notify_default_priority(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, printer->info_2->default_priority);
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, pinfo2->defaultpriority);
}
/*******************************************************************
@ -2680,10 +2679,10 @@ static void spoolss_notify_default_priority(int snum,
static void spoolss_notify_start_time(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, printer->info_2->starttime);
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, pinfo2->starttime);
}
/*******************************************************************
@ -2693,10 +2692,10 @@ static void spoolss_notify_start_time(int snum,
static void spoolss_notify_until_time(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, printer->info_2->untiltime);
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, pinfo2->untiltime);
}
/*******************************************************************
@ -2706,7 +2705,7 @@ static void spoolss_notify_until_time(int snum,
static void spoolss_notify_status(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
print_status_struct status;
@ -2722,7 +2721,7 @@ static void spoolss_notify_status(int snum,
static void spoolss_notify_cjobs(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, print_queue_length(snum, NULL));
@ -2735,12 +2734,12 @@ static void spoolss_notify_cjobs(int snum,
static void spoolss_notify_average_ppm(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
/* always respond 8 pages per minutes */
/* a little hard ! */
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, printer->info_2->averageppm);
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, pinfo2->averageppm);
}
/*******************************************************************
@ -2750,7 +2749,7 @@ static void spoolss_notify_average_ppm(int snum,
static void spoolss_notify_username(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, queue->fs_user);
@ -2763,7 +2762,7 @@ static void spoolss_notify_username(int snum,
static void spoolss_notify_job_status(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, nt_printj_status(queue->status));
@ -2776,7 +2775,7 @@ static void spoolss_notify_job_status(int snum,
static void spoolss_notify_job_name(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, queue->fs_file);
@ -2789,7 +2788,7 @@ static void spoolss_notify_job_name(int snum,
static void spoolss_notify_job_status_string(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
/*
@ -2827,7 +2826,7 @@ static void spoolss_notify_job_status_string(int snum,
static void spoolss_notify_job_time(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, 0);
@ -2840,7 +2839,7 @@ static void spoolss_notify_job_time(int snum,
static void spoolss_notify_job_size(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, queue->size);
@ -2852,7 +2851,7 @@ static void spoolss_notify_job_size(int snum,
static void spoolss_notify_total_pages(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, queue->page_count);
@ -2864,7 +2863,7 @@ static void spoolss_notify_total_pages(int snum,
static void spoolss_notify_pages_printed(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
/* Add code when back-end tracks this */
@ -2878,7 +2877,7 @@ static void spoolss_notify_pages_printed(int snum,
static void spoolss_notify_job_position(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, queue->job);
@ -2891,7 +2890,7 @@ static void spoolss_notify_job_position(int snum,
static void spoolss_notify_submitted_time(int snum,
struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
data->data.string.string = NULL;
@ -2911,7 +2910,8 @@ struct s_notify_info_data_table
enum spoolss_NotifyTable variable_type;
void (*fn) (int snum, struct spoolss_Notify *data,
print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer, TALLOC_CTX *mem_ctx);
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx);
};
/* A table describing the various print notification constants and
@ -3016,10 +3016,9 @@ static bool search_notify(enum spoolss_NotifyType type,
/****************************************************************************
****************************************************************************/
void construct_info_data(struct spoolss_Notify *info_data,
enum spoolss_NotifyType type,
uint16_t field,
int id)
static void construct_info_data(struct spoolss_Notify *info_data,
enum spoolss_NotifyType type,
uint16_t field, int id)
{
info_data->type = type;
info_data->field.field = field;
@ -3035,6 +3034,7 @@ void construct_info_data(struct spoolss_Notify *info_data,
static bool construct_notify_printer_info(Printer_entry *print_hnd,
struct spoolss_NotifyInfo *info,
struct spoolss_PrinterInfo2 *pinfo2,
int snum,
const struct spoolss_NotifyOptionType *option_type,
uint32_t id,
@ -3045,7 +3045,6 @@ static bool construct_notify_printer_info(Printer_entry *print_hnd,
uint16_t field;
struct spoolss_Notify *current_data;
NT_PRINTER_INFO_LEVEL *printer = NULL;
print_queue_struct *queue=NULL;
type = option_type->type;
@ -3054,9 +3053,6 @@ static bool construct_notify_printer_info(Printer_entry *print_hnd,
(type == PRINTER_NOTIFY_TYPE ? "PRINTER_NOTIFY_TYPE" : "JOB_NOTIFY_TYPE"),
option_type->count, lp_servicename(snum)));
if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &printer, 2, lp_const_servicename(snum))))
return false;
for(field_num=0; field_num < option_type->count; field_num++) {
field = option_type->fields[field_num].field;
@ -3070,7 +3066,6 @@ static bool construct_notify_printer_info(Printer_entry *print_hnd,
info->count + 1);
if (info->notifies == NULL) {
DEBUG(2,("construct_notify_printer_info: failed to enlarge buffer info->data!\n"));
free_a_printer(&printer, 2);
return false;
}
@ -3078,16 +3073,17 @@ static bool construct_notify_printer_info(Printer_entry *print_hnd,
construct_info_data(current_data, type, field, id);
DEBUG(10,("construct_notify_printer_info: calling [%s] snum=%d printername=[%s])\n",
notify_info_data_table[j].name, snum, printer->info_2->printername ));
DEBUG(10, ("construct_notify_printer_info: "
"calling [%s] snum=%d printername=[%s])\n",
notify_info_data_table[j].name, snum,
pinfo2->printername));
notify_info_data_table[j].fn(snum, current_data, queue,
printer, mem_ctx);
pinfo2, mem_ctx);
info->count++;
}
free_a_printer(&printer, 2);
return true;
}
@ -3099,7 +3095,7 @@ static bool construct_notify_printer_info(Printer_entry *print_hnd,
static bool construct_notify_jobs_info(print_queue_struct *queue,
struct spoolss_NotifyInfo *info,
NT_PRINTER_INFO_LEVEL *printer,
struct spoolss_PrinterInfo2 *pinfo2,
int snum,
const struct spoolss_NotifyOptionType *option_type,
uint32_t id,
@ -3136,7 +3132,7 @@ static bool construct_notify_jobs_info(print_queue_struct *queue,
construct_info_data(current_data, type, field, id);
notify_info_data_table[j].fn(snum, current_data, queue,
printer, mem_ctx);
pinfo2, mem_ctx);
info->count++;
}
@ -3184,6 +3180,8 @@ static WERROR printserver_notify_info(pipes_struct *p,
int i;
struct spoolss_NotifyOption *option;
struct spoolss_NotifyOptionType option_type;
struct spoolss_PrinterInfo2 *pinfo2 = NULL;
WERROR result;
DEBUG(4,("printserver_notify_info\n"));
@ -3208,10 +3206,32 @@ static WERROR printserver_notify_info(pipes_struct *p,
if (option_type.type != PRINTER_NOTIFY_TYPE)
continue;
for (snum=0; snum<n_services; snum++)
{
if ( lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) )
construct_notify_printer_info ( Printer, info, snum, &option_type, snum, mem_ctx );
for (snum = 0; snum < n_services; snum++) {
if (!lp_browseable(snum) ||
!lp_snum_ok(snum) ||
!lp_print_ok(snum)) {
continue; /* skip */
}
/* FIXME: should we use a SYSTEM server_info here? */
result = winreg_get_printer(mem_ctx, p->server_info,
Printer->servername,
lp_servicename(snum),
&pinfo2);
if (!W_ERROR_IS_OK(result)) {
DEBUG(4, ("printserver_notify_info: "
"Failed to get printer [%s]\n",
lp_servicename(snum)));
continue;
}
construct_notify_printer_info(Printer, info,
pinfo2, snum,
&option_type, snum,
mem_ctx);
TALLOC_FREE(pinfo2);
}
}
@ -3253,6 +3273,8 @@ static WERROR printer_notify_info(pipes_struct *p, struct policy_handle *hnd,
int count,j;
print_queue_struct *queue=NULL;
print_status_struct status;
struct spoolss_PrinterInfo2 *pinfo2 = NULL;
WERROR result;
DEBUG(4,("printer_notify_info\n"));
@ -3274,40 +3296,42 @@ static WERROR printer_notify_info(pipes_struct *p, struct policy_handle *hnd,
get_printer_snum(p, hnd, &snum, NULL);
/* FIXME: should we use a SYSTEM server_info here ? */
result = winreg_get_printer(mem_ctx, p->server_info,
Printer->servername,
lp_servicename(snum), &pinfo2);
if (!W_ERROR_IS_OK(result)) {
return WERR_BADFID;
}
for (i=0; i<option->count; i++) {
option_type = option->types[i];
switch (option_type.type) {
case PRINTER_NOTIFY_TYPE:
if(construct_notify_printer_info(Printer, info, snum,
&option_type, id,
mem_ctx))
if (construct_notify_printer_info(Printer, info,
pinfo2, snum,
&option_type, id,
mem_ctx)) {
id--;
}
break;
case JOB_NOTIFY_TYPE: {
NT_PRINTER_INFO_LEVEL *printer = NULL;
case JOB_NOTIFY_TYPE:
count = print_queue_status(snum, &queue, &status);
if (!W_ERROR_IS_OK(get_a_printer(Printer, &printer, 2, lp_const_servicename(snum))))
goto done;
for (j=0; j<count; j++) {
construct_notify_jobs_info(&queue[j], info,
printer, snum,
pinfo2, snum,
&option_type,
queue[j].job,
mem_ctx);
}
free_a_printer(&printer, 2);
done:
SAFE_FREE(queue);
break;
}
}
}
/*
@ -3324,6 +3348,8 @@ static WERROR printer_notify_info(pipes_struct *p, struct policy_handle *hnd,
info->data[i].id, info->data[i].size, info->data[i].enc_type));
}
*/
talloc_free(pinfo2);
return WERR_OK;
}