1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-02 00:22:11 +03:00

printing/nt_printing.c: After long soul searching and making both Andrew and my

life a misery, here is the only possible null driver fix we have found.
		This *SUCKS*.
rpc_server/srv_spoolss_nt.c: Correct printername search. Correct portname reply
						Correct attributes reply. Removal of unused temp variable.
Jeremy.
(This used to be commit 06e71c9f8b)
This commit is contained in:
Jeremy Allison
2000-11-14 02:14:58 +00:00
parent f77ceb61c0
commit e0bcc7ff54
2 changed files with 14 additions and 15 deletions

View File

@ -1664,11 +1664,13 @@ static uint32 get_a_printer_2_default(NT_PRINTER_INFO_LEVEL_2 **info_ptr, fstrin
snum = lp_servicenumber(sharename);
slprintf(info.servername, sizeof(info.servername), "\\\\%s", global_myname);
slprintf(info.printername, sizeof(info.printername), "\\\\%s\\%s",
global_myname, sharename);
fstrcpy(info.sharename, sharename);
fstrcpy(info.portname, SAMBA_PRINTER_PORT_NAME);
fstrcpy(info.drivername, lp_printerdriver(snum));
if (*info.drivername == '\0')
fstrcpy(info.drivername, "NO DRIVER AVAILABLE");
slprintf(info.printername, sizeof(info.printername), "\\\\%s\\%s", global_myname, sharename);
pstrcpy(info.comment, "");
fstrcpy(info.printprocessor, "winprint");
fstrcpy(info.datatype, "RAW");

View File

@ -405,6 +405,7 @@ static BOOL set_printer_hnd_name(Printer_entry *Printer, char *handlename)
*/
for (snum=0;snum<n_services && found==False;snum++) {
char *printername;
if ( !(lp_snum_ok(snum) && lp_print_ok(snum) ) )
continue;
@ -414,15 +415,18 @@ static BOOL set_printer_hnd_name(Printer_entry *Printer, char *handlename)
if (get_a_printer(&printer, 2, lp_servicename(snum))!=0)
continue;
printername=strchr(printer->info_2->printername+2, '\\');
printername++;
DEBUG(10,("set_printer_hnd_name: name [%s], aprinter [%s]\n",
printer->info_2->printername, aprinter ));
if ( strlen(printer->info_2->printername) != strlen(aprinter) ) {
if ( strlen(printername) != strlen(aprinter) ) {
free_a_printer(&printer, 2);
continue;
}
if ( strncasecmp(printer->info_2->printername, aprinter, strlen(aprinter))) {
if ( strncasecmp(printername, aprinter, strlen(aprinter))) {
free_a_printer(&printer, 2);
continue;
}
@ -1097,8 +1101,7 @@ static void spoolss_notify_server_name(int snum, SPOOL_NOTIFY_INFO_DATA *data, p
}
/*******************************************************************
* fill a notify_info_data with the servicename
* jfmxxxx: it's incorrect should be long_printername
* fill a notify_info_data with the printername (not including the servername).
********************************************************************/
static void spoolss_notify_printer_name(int snum, SPOOL_NOTIFY_INFO_DATA *data, print_queue_struct *queue,
NT_PRINTER_INFO_LEVEL *printer)
@ -1110,10 +1113,7 @@ static void spoolss_notify_printer_name(int snum, SPOOL_NOTIFY_INFO_DATA *data,
} else {
p++;
}
/*
data->notify_data.data.length=strlen(lp_servicename(snum));
dos_PutUniCode(data->notify_data.data.string, lp_servicename(snum), sizeof(data->notify_data.data.string), True);
*/
data->notify_data.data.length=(uint32)((dos_PutUniCode((char *)data->notify_data.data.string,
p, sizeof(data->notify_data.data.string), True) - sizeof(uint16))/sizeof(uint16));
}
@ -1135,7 +1135,7 @@ static void spoolss_notify_port_name(int snum, SPOOL_NOTIFY_INFO_DATA *data, pri
/* even if it's strange, that's consistant in all the code */
data->notify_data.data.length=(uint32)((dos_PutUniCode((char *)data->notify_data.data.string,
lp_servicename(snum), sizeof(data->notify_data.data.string), True) - sizeof(uint16))/sizeof(uint16));
printer->info_2->portname, sizeof(data->notify_data.data.string), True) - sizeof(uint16))/sizeof(uint16));
}
/*******************************************************************
@ -1239,9 +1239,7 @@ static void spoolss_notify_security_desc(int snum, SPOOL_NOTIFY_INFO_DATA *data,
********************************************************************/
static void spoolss_notify_attributes(int snum, SPOOL_NOTIFY_INFO_DATA *data, print_queue_struct *queue, NT_PRINTER_INFO_LEVEL *printer)
{
data->notify_data.value[0] = PRINTER_ATTRIBUTE_SHARED \
| PRINTER_ATTRIBUTE_LOCAL \
| PRINTER_ATTRIBUTE_RAW_ONLY ;
data->notify_data.value[0] = printer->info_2->attributes;
}
/*******************************************************************
@ -2614,7 +2612,6 @@ static uint32 getprinter_level_2(int snum, NEW_BUFFER *buffer, uint32 offered, u
static uint32 getprinter_level_3(int snum, NEW_BUFFER *buffer, uint32 offered, uint32 *needed)
{
PRINTER_INFO_3 *printer=NULL;
fstring temp;
if (!construct_printer_info_3(&printer, snum))
return ERROR_NOT_ENOUGH_MEMORY;