summaryrefslogtreecommitdiff
path: root/source3/rpc_server/srv_spoolss_nt.c
diff options
context:
space:
mode:
authorJean-François Micouleau <jfm@samba.org>2000-02-24 23:01:24 +0000
committerJean-François Micouleau <jfm@samba.org>2000-02-24 23:01:24 +0000
commit66018871c7eb1fedcdf8829b53038b6b484db6a3 (patch)
treeb62789deec1323d45189996c95663e2bab58e67b /source3/rpc_server/srv_spoolss_nt.c
parentf3319f7963e04a9642d604e706a10df3cd96dd73 (diff)
downloadsamba-66018871c7eb1fedcdf8829b53038b6b484db6a3.tar.gz
samba-66018871c7eb1fedcdf8829b53038b6b484db6a3.tar.bz2
samba-66018871c7eb1fedcdf8829b53038b6b484db6a3.zip
made dynamic the Printer struct. No more limits :-)
J.F. (This used to be commit b59233b3b61b17e85f5d5b44cc6f2ced9d27b497)
Diffstat (limited to 'source3/rpc_server/srv_spoolss_nt.c')
-rw-r--r--source3/rpc_server/srv_spoolss_nt.c356
1 files changed, 169 insertions, 187 deletions
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index cd0d0a8ab1..da7eda5795 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -39,9 +39,11 @@ extern pstring global_myname;
/* and a reference to what it's pointing to */
/* and the notify info asked about */
/* that's the central struct */
-static struct {
+typedef struct _Printer{
+ ubi_dlNode Next;
+ ubi_dlNode Prev;
+
BOOL open;
- BOOL ok;
BOOL document_started;
BOOL page_started;
uint32 current_jobid;
@@ -64,21 +66,18 @@ static struct {
uint32 printerlocal;
SPOOL_NOTIFY_OPTION *option;
} notify;
-} Printer[MAX_OPEN_PRINTER_EXS];
+} Printer_entry;
+
+static ubi_dlList Printer_list;
-#define VALID_HANDLE(pnum) (((pnum) >= 0) && ((pnum) < MAX_OPEN_PRINTER_EXS))
-#define OPEN_HANDLE(pnum) (VALID_HANDLE(pnum) && Printer[pnum].open)
+#define OPEN_HANDLE(pnum) ((pnum!=NULL) && (pnum->open!=False))
/****************************************************************************
initialise printer handle states...
****************************************************************************/
void init_printer_hnd(void)
{
- int i;
- for (i = 0; i < MAX_OPEN_PRINTER_EXS; i++)
- {
- Printer[i].open = False;
- }
+ ubi_dlInitList(&Printer_list);
}
/****************************************************************************
@@ -105,22 +104,25 @@ static void create_printer_hnd(POLICY_HND *hnd)
/****************************************************************************
find printer index by handle
****************************************************************************/
-static int find_printer_index_by_hnd(const POLICY_HND *hnd)
+static Printer_entry *find_printer_index_by_hnd(const POLICY_HND *hnd)
{
- int i;
+ Printer_entry *find_printer;
- for (i = 0; i < MAX_OPEN_PRINTER_EXS; i++)
- {
- if (memcmp(&(Printer[i].printer_hnd), hnd, sizeof(*hnd)) == 0)
+ find_printer = (Printer_entry *)ubi_dlFirst(&Printer_list);
+
+ for(; find_printer; find_printer = (Printer_entry *)ubi_dlNext(find_printer)) {
+
+ if (memcmp(&(find_printer->printer_hnd), hnd, sizeof(*hnd)) == 0)
{
- DEBUG(4,("Found printer handle[%x] \n", i));
+ DEBUG(4,("Found printer handle \n"));
/*dump_data(4, hnd->data, sizeof(hnd->data));*/
- return i;
+ return find_printer;
}
}
+
DEBUG(3,("Whoops, Printer handle not found: "));
/*dump_data(4, hnd->data, sizeof(hnd->data));*/
- return -1;
+ return NULL;
}
/****************************************************************************
@@ -136,24 +138,30 @@ static void clear_handle(POLICY_HND *hnd)
****************************************************************************/
static BOOL close_printer_handle(POLICY_HND *hnd)
{
- int pnum = find_printer_index_by_hnd(hnd);
+ Printer_entry *Printer = find_printer_index_by_hnd(hnd);
- if (pnum == -1)
+ if (!OPEN_HANDLE(Printer))
{
- DEBUG(3,("Error closing printer handle (pnum=%x)\n", pnum));
+ DEBUG(3,("Error closing printer handle\n"));
return False;
}
- Printer[pnum].open=False;
- Printer[pnum].notify.flags=0;
- Printer[pnum].notify.options=0;
- Printer[pnum].notify.localmachine[0]='\0';
- Printer[pnum].notify.printerlocal=0;
- safe_free(Printer[pnum].notify.option);
- Printer[pnum].notify.option=NULL;
+ Printer->open=False;
+ Printer->notify.flags=0;
+ Printer->notify.options=0;
+ Printer->notify.localmachine[0]='\0';
+ Printer->notify.printerlocal=0;
+ safe_free(Printer->notify.option);
+ Printer->notify.option=NULL;
clear_handle(hnd);
+ ubi_dlRemThis(&Printer_list, Printer);
+
+ safe_free(Printer);
+
+ DEBUG(0,("[%d] entrys still in list\n", ubi_dlCount(&Printer_list)));
+
return True;
}
@@ -163,23 +171,23 @@ static BOOL close_printer_handle(POLICY_HND *hnd)
static BOOL get_printer_snum(const POLICY_HND *hnd, int *number)
{
int snum;
- int pnum = find_printer_index_by_hnd(hnd);
+ Printer_entry *Printer = find_printer_index_by_hnd(hnd);
int n_services=lp_numservices();
- if (!OPEN_HANDLE(pnum)) {
+ if (!OPEN_HANDLE(Printer)) {
DEBUG(3,("Error getting printer - take a nap quickly !\n"));
return False;
}
- switch (Printer[pnum].printer_type) {
+ switch (Printer->printer_type) {
case PRINTER_HANDLE_IS_PRINTER:
- DEBUG(4,("short name:%s\n", Printer[pnum].dev.printername));
+ DEBUG(4,("short name:%s\n", Printer->dev.printername));
for (snum=0;snum<n_services; snum++) {
if (lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) ) {
DEBUG(4,("share:%s\n",lp_servicename(snum)));
- if ( ( strlen(lp_servicename(snum)) == strlen( Printer[pnum].dev.printername ) )
+ if ( ( strlen(lp_servicename(snum)) == strlen( Printer->dev.printername ) )
&& ( !strncasecmp(lp_servicename(snum),
- Printer[pnum].dev.printername,
+ Printer->dev.printername,
strlen( lp_servicename(snum) ))) ) {
DEBUG(4,("Printer found: %s[%x]\n",lp_servicename(snum),snum));
*number=snum;
@@ -204,22 +212,19 @@ static BOOL get_printer_snum(const POLICY_HND *hnd, int *number)
****************************************************************************/
static BOOL open_printer_hnd(POLICY_HND *hnd)
{
- int i;
+ Printer_entry *new_printer;
- for (i = 0; i < MAX_OPEN_PRINTER_EXS; i++)
- {
- if (!Printer[i].open)
- {
- Printer[i].open = True;
- memcpy(&(Printer[i].printer_hnd), hnd, sizeof(*hnd));
- DEBUG(4,("Opened printer handle[%x] ", i));
- dump_data(4, hnd->data, sizeof(hnd->data));
- Printer[i].notify.option=NULL;
- return True;
- }
- }
- DEBUG(1,("ERROR - open_printer_hnd: out of Printers Handles!\n"));
- return False;
+ new_printer=(Printer_entry *)malloc(sizeof(Printer_entry));
+ ZERO_STRUCTP(new_printer);
+
+ new_printer->open = True;
+ new_printer->notify.option=NULL;
+
+ memcpy(&(new_printer->printer_hnd), hnd, sizeof(*hnd));
+
+ ubi_dlAddHead( &Printer_list, (ubi_dlNode *)new_printer);
+
+ return True;
}
/****************************************************************************
@@ -227,15 +232,15 @@ static BOOL open_printer_hnd(POLICY_HND *hnd)
****************************************************************************/
static BOOL set_printer_hnd_accesstype(POLICY_HND *hnd, uint32 access_required)
{
- int pnum = find_printer_index_by_hnd(hnd);
+ Printer_entry *Printer = find_printer_index_by_hnd(hnd);
- if (!OPEN_HANDLE(pnum)) {
- DEBUG(4,("Error setting printer type=%x (pnum=%x)", access_required, pnum));
+ if (!OPEN_HANDLE(Printer)) {
+ DEBUG(4,("Error setting printer type=%x", access_required));
return False;
}
- DEBUG(4,("Setting printer access=%x (pnum=%x)\n", access_required, pnum));
- Printer[pnum].access = access_required;
+ DEBUG(4,("Setting printer access=%x\n", access_required));
+ Printer->access = access_required;
return True;
}
@@ -245,14 +250,14 @@ static BOOL set_printer_hnd_accesstype(POLICY_HND *hnd, uint32 access_required)
****************************************************************************/
static BOOL set_printer_hnd_printertype(POLICY_HND *hnd, char *printername)
{
- int pnum = find_printer_index_by_hnd(hnd);
+ Printer_entry *Printer = find_printer_index_by_hnd(hnd);
- if (!OPEN_HANDLE(pnum)) {
- DEBUGADD(4,("Error setting printer name %s (pnum=%x)", printername, pnum));
+ if (!OPEN_HANDLE(Printer)) {
+ DEBUGADD(4,("Error setting printer name %s", printername));
return False;
}
- DEBUG(3,("Setting printer type=%s (pnum=%x)\n", printername, pnum));
+ DEBUG(3,("Setting printer type=%s\n", printername));
if ( strlen(printername) < 3 ) {
DEBUGADD(4,("A print server must have at least 1 char ! %s\n", printername));
@@ -262,13 +267,13 @@ static BOOL set_printer_hnd_printertype(POLICY_HND *hnd, char *printername)
/* it's a print server */
if (!strchr(printername+2, '\\')) {
DEBUGADD(4,("Printer is a print server\n"));
- Printer[pnum].printer_type = PRINTER_HANDLE_IS_PRINTSERVER;
+ Printer->printer_type = PRINTER_HANDLE_IS_PRINTSERVER;
return True;
}
/* it's a printer */
else {
DEBUGADD(4,("Printer is a printer\n"));
- Printer[pnum].printer_type = PRINTER_HANDLE_IS_PRINTER;
+ Printer->printer_type = PRINTER_HANDLE_IS_PRINTER;
return True;
}
@@ -280,28 +285,28 @@ static BOOL set_printer_hnd_printertype(POLICY_HND *hnd, char *printername)
****************************************************************************/
static BOOL set_printer_hnd_printername(POLICY_HND *hnd, char *printername)
{
- int pnum = find_printer_index_by_hnd(hnd);
+ Printer_entry *Printer = find_printer_index_by_hnd(hnd);
NT_PRINTER_INFO_LEVEL printer;
int snum;
int n_services=lp_numservices();
char *aprinter;
BOOL found=False;
- if (!OPEN_HANDLE(pnum))
+ if (!OPEN_HANDLE(Printer))
{
- DEBUG(0,("Error setting printer name=%s (pnum=%x)\n", printername, pnum));
+ DEBUG(0,("Error setting printer name=%s\n", printername));
return False;
}
- DEBUG(4,("Setting printer name=%s (len=%d) (pnum=%x)\n", printername, strlen(printername), pnum));
+ DEBUG(4,("Setting printer name=%s (len=%d)\n", printername, strlen(printername)));
- if (Printer[pnum].printer_type==PRINTER_HANDLE_IS_PRINTSERVER) {
- ZERO_STRUCT(Printer[pnum].dev.printerservername);
- strncpy(Printer[pnum].dev.printerservername, printername, strlen(printername));
+ if (Printer->printer_type==PRINTER_HANDLE_IS_PRINTSERVER) {
+ ZERO_STRUCT(Printer->dev.printerservername);
+ strncpy(Printer->dev.printerservername, printername, strlen(printername));
return True;
}
- if (Printer[pnum].printer_type!=PRINTER_HANDLE_IS_PRINTER)
+ if (Printer->printer_type!=PRINTER_HANDLE_IS_PRINTER)
return False;
aprinter=strchr(printername+2, '\\');
@@ -347,8 +352,8 @@ static BOOL set_printer_hnd_printername(POLICY_HND *hnd, char *printername)
snum--;
DEBUGADD(4,("Printer found: %s[%x]\n",lp_servicename(snum),snum));
- ZERO_STRUCT(Printer[pnum].dev.printername);
- strncpy(Printer[pnum].dev.printername, lp_servicename(snum), strlen(lp_servicename(snum)));
+ ZERO_STRUCT(Printer->dev.printername);
+ strncpy(Printer->dev.printername, lp_servicename(snum), strlen(lp_servicename(snum)));
free_a_printer(printer, 2);
return True;
@@ -359,12 +364,12 @@ static BOOL set_printer_hnd_printername(POLICY_HND *hnd, char *printername)
********************************************************************/
static BOOL handle_is_printserver(const POLICY_HND *handle)
{
- int pnum=find_printer_index_by_hnd(handle);
+ Printer_entry *Printer=find_printer_index_by_hnd(handle);
- if (!OPEN_HANDLE(pnum))
+ if (!OPEN_HANDLE(Printer))
return False;
- if (Printer[pnum].printer_type != PRINTER_HANDLE_IS_PRINTSERVER)
+ if (Printer->printer_type != PRINTER_HANDLE_IS_PRINTSERVER)
return False;
return True;
@@ -631,15 +636,14 @@ static BOOL getprinterdata_printer(const POLICY_HND *handle,
uint8 **data, uint32 *needed, uint32 in_size )
{
NT_PRINTER_INFO_LEVEL printer;
- int pnum=0;
int snum=0;
uint8 *idata=NULL;
uint32 len;
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
DEBUG(5,("getprinterdata_printer\n"));
- pnum = find_printer_index_by_hnd(handle);
- if (OPEN_HANDLE(pnum))
+ if (OPEN_HANDLE(Printer))
{
get_printer_snum(handle, &snum);
get_a_printer(&printer, 2, lp_servicename(snum));
@@ -672,7 +676,7 @@ uint32 _spoolss_getprinterdata(const POLICY_HND *handle, UNISTR2 *valuename,
{
fstring value;
BOOL found=False;
- int pnum = find_printer_index_by_hnd(handle);
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
/*
* Reminder: when it's a string, the length is in BYTES
@@ -689,7 +693,7 @@ uint32 _spoolss_getprinterdata(const POLICY_HND *handle, UNISTR2 *valuename,
DEBUG(4,("_spoolss_getprinterdata\n"));
- if (!OPEN_HANDLE(pnum)) {
+ if (!OPEN_HANDLE(Printer)) {
*data=(uint8 *)malloc(4*sizeof(uint8));
return NT_STATUS_INVALID_HANDLE;
}
@@ -729,20 +733,18 @@ uint32 _spoolss_rffpcnex(const POLICY_HND *handle, uint32 flags, uint32 options,
const UNISTR2 *localmachine, uint32 printerlocal,
SPOOL_NOTIFY_OPTION *option)
{
- int i;
-
/* store the notify value in the printer struct */
- i=find_printer_index_by_hnd(handle);
+ Printer_entry *Printer=find_printer_index_by_hnd(handle);
- if (i == -1)
+ if (!OPEN_HANDLE(Printer))
return NT_STATUS_INVALID_HANDLE;
- Printer[i].notify.flags=flags;
- Printer[i].notify.options=options;
- Printer[i].notify.printerlocal=printerlocal;
- Printer[i].notify.option=option;
- unistr2_to_ascii(Printer[i].notify.localmachine, localmachine, sizeof(Printer[i].notify.localmachine)-1);
+ Printer->notify.flags=flags;
+ Printer->notify.options=options;
+ Printer->notify.printerlocal=printerlocal;
+ Printer->notify.option=option;
+ unistr2_to_ascii(Printer->notify.localmachine, localmachine, sizeof(Printer->notify.localmachine)-1);
return NT_STATUS_NO_PROBLEMO;
}
@@ -1316,7 +1318,7 @@ static BOOL construct_notify_jobs_info(print_queue_struct *queue, SPOOL_NOTIFY_I
static uint32 printserver_notify_info(const POLICY_HND *hnd, SPOOL_NOTIFY_INFO *info)
{
int snum;
- int pnum=find_printer_index_by_hnd(hnd);
+ Printer_entry *Printer=find_printer_index_by_hnd(hnd);
int n_services=lp_numservices();
int i;
uint32 id;
@@ -1325,7 +1327,7 @@ static uint32 printserver_notify_info(const POLICY_HND *hnd, SPOOL_NOTIFY_INFO *
DEBUG(4,("printserver_notify_info\n"));
- option=Printer[pnum].notify.option;
+ option=Printer->notify.option;
id=1;
info->version=2;
info->data=NULL;
@@ -1371,7 +1373,7 @@ static uint32 printserver_notify_info(const POLICY_HND *hnd, SPOOL_NOTIFY_INFO *
static uint32 printer_notify_info(const POLICY_HND *hnd, SPOOL_NOTIFY_INFO *info)
{
int snum;
- int pnum=find_printer_index_by_hnd(hnd);
+ Printer_entry *Printer=find_printer_index_by_hnd(hnd);
int i;
uint32 id;
SPOOL_NOTIFY_OPTION *option;
@@ -1382,7 +1384,7 @@ static uint32 printer_notify_info(const POLICY_HND *hnd, SPOOL_NOTIFY_INFO *info
DEBUG(4,("printer_notify_info\n"));
- option=Printer[pnum].notify.option;
+ option=Printer->notify.option;
id=1;
info->version=2;
info->data=NULL;
@@ -1435,14 +1437,12 @@ static uint32 printer_notify_info(const POLICY_HND *hnd, SPOOL_NOTIFY_INFO *info
uint32 _spoolss_rfnpcnex( const POLICY_HND *handle, uint32 change,
SPOOL_NOTIFY_OPTION *option, SPOOL_NOTIFY_INFO *info)
{
- int pnum=find_printer_index_by_hnd(handle);
+ Printer_entry *Printer=find_printer_index_by_hnd(handle);
- if (pnum == -1 || !OPEN_HANDLE(pnum))
- {
+ if (!OPEN_HANDLE(Printer))
return NT_STATUS_INVALID_HANDLE;
- }
- DEBUG(4,("Printer %x of type %x\n",pnum, Printer[pnum].printer_type));
+ DEBUG(4,("Printer type %x\n",Printer->printer_type));
/* jfm: the change value isn't used right now.
* we will honour it when
@@ -1461,7 +1461,7 @@ uint32 _spoolss_rfnpcnex( const POLICY_HND *handle, uint32 change,
safe_free(option);
- switch (Printer[pnum].printer_type) {
+ switch (Printer->printer_type) {
case PRINTER_HANDLE_IS_PRINTSERVER:
return printserver_notify_info(handle, info);
break;
@@ -2403,15 +2403,15 @@ uint32 _spoolss_getprinterdriver2(const POLICY_HND *handle, const UNISTR2 *uni_a
****************************************************************************/
uint32 _spoolss_startpageprinter(const POLICY_HND *handle)
{
- int pnum = find_printer_index_by_hnd(handle);
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
- if (OPEN_HANDLE(pnum))
+ if (OPEN_HANDLE(Printer))
{
- Printer[pnum].page_started=True;
+ Printer->page_started=True;
return 0x0;
}
- DEBUG(3,("Error in startpageprinter printer handle (pnum=%x)\n",pnum));
+ DEBUG(3,("Error in startpageprinter printer handle\n"));
return NT_STATUS_INVALID_HANDLE;
}
@@ -2419,16 +2419,17 @@ uint32 _spoolss_startpageprinter(const POLICY_HND *handle)
****************************************************************************/
uint32 _spoolss_endpageprinter(const POLICY_HND *handle)
{
- int pnum = find_printer_index_by_hnd(handle);
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
- if (OPEN_HANDLE(pnum))
+ if (!OPEN_HANDLE(Printer))
{
- Printer[pnum].page_started=False;
- return 0x0;
+ DEBUG(3,("Error in endpageprinter printer handle\n"));
+ return NT_STATUS_INVALID_HANDLE;
}
+
+ Printer->page_started=False;
- DEBUG(3,("Error in endpageprinter printer handle (pnum=%x)\n",pnum));
- return NT_STATUS_INVALID_HANDLE;
+ return NT_STATUS_NO_PROBLEMO;
}
@@ -2447,11 +2448,9 @@ uint32 _spoolss_startdocprinter( const POLICY_HND *handle, uint32 level,
pstring datatype;
int fd = -1;
int snum;
- int pnum;
-
- pnum = find_printer_index_by_hnd(handle);
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
- if (!VALID_HANDLE(pnum))
+ if (!OPEN_HANDLE(Printer))
{
return NT_STATUS_INVALID_HANDLE;
}
@@ -2494,16 +2493,14 @@ uint32 _spoolss_startdocprinter( const POLICY_HND *handle, uint32 level,
fd=open(fname, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR );
DEBUG(4,("Temp spool file created: [%s]\n", fname));
- Printer[pnum].current_jobid=fd;
- pstrcpy(Printer[pnum].document_name,fname);
+ Printer->current_jobid=fd;
+ pstrcpy(Printer->document_name, fname);
- unistr2_to_ascii(Printer[pnum].job_name,
- &info_1->docname,
- sizeof(Printer[pnum].job_name));
+ unistr2_to_ascii(Printer->job_name, &info_1->docname, sizeof(Printer->job_name));
- Printer[pnum].document_fd=fd;
- Printer[pnum].document_started=True;
- (*jobid) = Printer[pnum].current_jobid;
+ Printer->document_fd=fd;
+ Printer->document_started=True;
+ (*jobid) = Printer->current_jobid;
return 0x0;
}
@@ -2515,29 +2512,28 @@ uint32 _spoolss_startdocprinter( const POLICY_HND *handle, uint32 level,
********************************************************************/
uint32 _spoolss_enddocprinter(const POLICY_HND *handle)
{
- int pnum;
int snum;
pstring filename;
pstring filename1;
pstring job_name;
pstring syscmd;
char *tstr;
+ Printer_entry *Printer=find_printer_index_by_hnd(handle);
*syscmd=0;
- pnum = find_printer_index_by_hnd(handle);
-
- if (!OPEN_HANDLE(pnum))
+ if (!OPEN_HANDLE(Printer))
{
- DEBUG(3,("Error in enddocprinter handle (pnum=%x)\n",pnum));
+ DEBUG(3,("Error in enddocprinter handle\n"));
return NT_STATUS_INVALID_HANDLE;
}
- Printer[pnum].document_started=False;
- close(Printer[pnum].document_fd);
+
+ Printer->document_started=False;
+ close(Printer->document_fd);
DEBUG(4,("Temp spool file closed, printing now ...\n"));
- pstrcpy(filename1, Printer[pnum].document_name);
- pstrcpy(job_name, Printer[pnum].job_name);
+ pstrcpy(filename1, Printer->document_name);
+ pstrcpy(job_name, Printer->job_name);
if (!get_printer_snum(handle,&snum))
{
@@ -2607,20 +2603,18 @@ uint32 _spoolss_writeprinter( const POLICY_HND *handle,
const uint8 *buffer,
uint32 *buffer_written)
{
- int pnum;
int fd;
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
- pnum = find_printer_index_by_hnd(handle);
-
- if (!OPEN_HANDLE(pnum))
+ if (!OPEN_HANDLE(Printer))
{
- DEBUG(3,("Error in writeprinter handle (pnum=%x)\n",pnum));
+ DEBUG(3,("Error in writeprinter handle\n"));
return NT_STATUS_INVALID_HANDLE;
}
- fd = Printer[pnum].document_fd;
+ fd = Printer->document_fd;
(*buffer_written) = write(fd, buffer, buffer_size);
- Printer[pnum].document_lastwritten = (*buffer_written);
+ Printer->document_lastwritten = (*buffer_written);
return 0x0;
}
@@ -2632,11 +2626,13 @@ uint32 _spoolss_writeprinter( const POLICY_HND *handle,
********************************************************************/
static uint32 control_printer(const POLICY_HND *handle, uint32 command)
{
- int pnum;
int snum;
- pnum = find_printer_index_by_hnd(handle);
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
+
+ if (!OPEN_HANDLE(Printer))
+ return NT_STATUS_INVALID_HANDLE;
- if ( pnum == -1 || !get_printer_snum(handle, &snum) )
+ if (!get_printer_snum(handle, &snum) )
{
return NT_STATUS_INVALID_HANDLE;
}
@@ -2669,11 +2665,11 @@ static uint32 update_printer(const POLICY_HND *handle, uint32 level,
const SPOOL_PRINTER_INFO_LEVEL *info,
const DEVICEMODE *devmode)
{
- int pnum;
int snum;
NT_PRINTER_INFO_LEVEL printer;
NT_DEVICEMODE *nt_devmode;
uint32 status = 0x0;
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
nt_devmode=NULL;
@@ -2686,11 +2682,12 @@ static uint32 update_printer(const POLICY_HND *handle, uint32 level,
return NT_STATUS_INVALID_INFO_CLASS;
}
- pnum = find_printer_index_by_hnd(handle);
- if ( pnum == -1 || !get_printer_snum(handle, &snum) )
- {
+ if (!OPEN_HANDLE(Printer))
return NT_STATUS_INVALID_HANDLE;
- }
+
+ if (!get_printer_snum(handle, &snum) )
+ return NT_STATUS_INVALID_HANDLE;
+
get_a_printer(&printer, level, lp_servicename(snum));
DEBUGADD(8,("Converting info_2 struct\n"));
@@ -2744,17 +2741,20 @@ uint32 _spoolss_setprinter( const POLICY_HND *handle,
const char *sec_buf,
uint32 command)
{
- int pnum = find_printer_index_by_hnd(handle);
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
- if (!OPEN_HANDLE(pnum))
- {
+ if (!OPEN_HANDLE(Printer))
return NT_STATUS_INVALID_HANDLE;
- }
+
/* check the level */
switch (level)
{
- case 0: return control_printer(handle, command);
- case 2: return update_printer(handle, level, info, devmode);
+ case 0:
+ return control_printer(handle, command);
+ break;
+ case 2:
+ return update_printer(handle, level, info, devmode);
+ break;
}
return NT_STATUS_INVALID_INFO_CLASS;
@@ -2764,19 +2764,17 @@ uint32 _spoolss_setprinter( const POLICY_HND *handle,
****************************************************************************/
uint32 _spoolss_fcpn(const POLICY_HND *handle)
{
- int pnum = find_printer_index_by_hnd(handle);
+ Printer_entry *Printer= find_printer_index_by_hnd(handle);
- if (!OPEN_HANDLE(pnum))
- {
+ if (!OPEN_HANDLE(Printer))
return NT_STATUS_INVALID_HANDLE;
- }
- Printer[pnum].notify.flags=0;
- Printer[pnum].notify.options=0;
- Printer[pnum].notify.localmachine[0]='\0';
- Printer[pnum].notify.printerlocal=0;
- safe_free(Printer[pnum].notify.option);
- Printer[pnum].notify.option=NULL;
+ Printer->notify.flags=0;
+ Printer->notify.options=0;
+ Printer->notify.localmachine[0]='\0';
+ Printer->notify.printerlocal=0;
+ safe_free(Printer->notify.option);
+ Printer->notify.option=NULL;
return NT_STATUS_NO_PROBLEMO;
}
@@ -3608,9 +3606,8 @@ uint32 _spoolss_enumprinterdata(const POLICY_HND *handle,
uint32 biggest_valuesize;
uint32 biggest_datasize;
uint32 data_len;
- uint32 status = 0x0;
-
- int pnum = find_printer_index_by_hnd(handle);
+ uint32 status = 0x0;
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
int snum;
ZERO_STRUCT(printer);
@@ -3618,20 +3615,16 @@ uint32 _spoolss_enumprinterdata(const POLICY_HND *handle,
DEBUG(5,("spoolss_enumprinterdata\n"));
- if (!OPEN_HANDLE(pnum))
- {
+ if (!OPEN_HANDLE(Printer))
return NT_STATUS_INVALID_HANDLE;
- }
+
if (!get_printer_snum(handle, &snum))
- {
return NT_STATUS_INVALID_HANDLE;
- }
+
status = get_a_printer(&printer, 2, lp_servicename(snum));
if (status != 0x0)
- {
return status;
- }
/* The NT machine wants to know the biggest size of value and data */
if ( ((*valuesize)==0) && ((*datasize)==0) )
@@ -3711,28 +3704,22 @@ uint32 _spoolss_setprinterdata( const POLICY_HND *handle,
NT_PRINTER_INFO_LEVEL printer;
NT_PRINTER_PARAM *param = NULL;
- int pnum=0;
int snum=0;
uint32 status = 0x0;
+ Printer_entry *Printer=find_printer_index_by_hnd(handle);
DEBUG(5,("spoolss_setprinterdata\n"));
- pnum = find_printer_index_by_hnd(handle);
- if (!OPEN_HANDLE(pnum))
- {
+ if (!OPEN_HANDLE(Printer))
return NT_STATUS_INVALID_HANDLE;
- }
+
if (!get_printer_snum(handle, &snum))
- {
return NT_STATUS_INVALID_HANDLE;
- }
status = get_a_printer(&printer, 2, lp_servicename(snum));
if (status != 0x0)
- {
return status;
- }
convert_specific_param(&param, value , type, data, real_len);
unlink_specific_param_if_exist(printer.info_2, param);
@@ -3756,18 +3743,14 @@ uint32 _spoolss_addform( const POLICY_HND *handle,
uint32 level,
const FORM *form)
{
- int pnum=0;
int count=0;
nt_forms_struct *list=NULL;
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
DEBUG(5,("spoolss_addform\n"));
- pnum = find_printer_index_by_hnd(handle);
-
- if (!OPEN_HANDLE(pnum))
- {
+ if (!OPEN_HANDLE(Printer))
return NT_STATUS_INVALID_HANDLE;
- }
count=get_ntforms(&list);
add_a_form(&list, form, &count);
@@ -3785,14 +3768,13 @@ uint32 _spoolss_setform( const POLICY_HND *handle,
uint32 level,
const FORM *form)
{
- int pnum=0;
int count=0;
nt_forms_struct *list=NULL;
+ Printer_entry *Printer = find_printer_index_by_hnd(handle);
DEBUG(5,("spoolss_setform\n"));
- pnum = find_printer_index_by_hnd(handle);
- if (!OPEN_HANDLE(pnum))
+ if (!OPEN_HANDLE(Printer))
{
return NT_STATUS_INVALID_HANDLE;
}