mirror of
https://github.com/samba-team/samba.git
synced 2025-01-31 01:48:16 +03:00
* set PRINTER_ATTRIBUTE_RAW_ONLY; CR 1736
* never save a pointer to an automatic variable (they go away) implement a deep copy for SPOOLSS_NOTIFY_MSG to correct messages being sent that have junk for strings; fix in response to changes for CR 1504
This commit is contained in:
parent
643172ac1a
commit
043b9dff22
@ -373,6 +373,10 @@ PRINTER_MESSAGE_INFO;
|
||||
#define PRINTER_ATTRIBUTE_RAW_ONLY 0x00001000
|
||||
#define PRINTER_ATTRIBUTE_PUBLISHED 0x00002000
|
||||
|
||||
#define PRINTER_ATTRIBUTE_SAMBA (PRINTER_ATTRIBUTE_RAW_ONLY|\
|
||||
PRINTER_ATTRIBUTE_SHARED|\
|
||||
PRINTER_ATTRIBUTE_NETWORK)
|
||||
|
||||
#define NO_PRIORITY 0
|
||||
#define MAX_PRIORITY 99
|
||||
#define MIN_PRIORITY 1
|
||||
|
@ -190,11 +190,35 @@ void print_notify_send_messages(unsigned int timeout)
|
||||
talloc_destroy_pool(send_ctx);
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
deep copy a SPOOLSS_NOTIFY_MSG structure using a TALLOC_CTX
|
||||
*********************************************************************/
|
||||
|
||||
static BOOL copy_notify2_msg( SPOOLSS_NOTIFY_MSG *to, SPOOLSS_NOTIFY_MSG *from )
|
||||
{
|
||||
|
||||
if ( !to || !from )
|
||||
return False;
|
||||
|
||||
memcpy( to, from, sizeof(SPOOLSS_NOTIFY_MSG) );
|
||||
|
||||
if ( from->len ) {
|
||||
to->notify.data = talloc_memdup(send_ctx, from->notify.data, from->len );
|
||||
if ( !to->notify.data ) {
|
||||
DEBUG(0,("copy_notify2_msg: talloc_memdup() of size [%d] failed!\n", from->len ));
|
||||
return False;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Batch up print notify messages.
|
||||
*******************************************************************/
|
||||
|
||||
static void send_spoolss_notify2_msg(struct spoolss_notify_msg *msg)
|
||||
static void send_spoolss_notify2_msg(SPOOLSS_NOTIFY_MSG *msg)
|
||||
{
|
||||
struct notify_queue *pnqueue, *tmp_ptr;
|
||||
|
||||
@ -227,7 +251,14 @@ in notify_queue\n", msg->type, msg->field, msg->printer));
|
||||
return;
|
||||
}
|
||||
|
||||
pnqueue->msg = msg;
|
||||
/* allocate a new msg structure and copy the fields */
|
||||
|
||||
if ( !(pnqueue->msg = (SPOOLSS_NOTIFY_MSG*)talloc(send_ctx, sizeof(SPOOLSS_NOTIFY_MSG))) ) {
|
||||
DEBUG(0,("send_spoolss_notify2_msg: talloc() of size [%d] failed!\n",
|
||||
sizeof(SPOOLSS_NOTIFY_MSG)));
|
||||
return;
|
||||
}
|
||||
copy_notify2_msg(pnqueue->msg, msg);
|
||||
pnqueue->buf = NULL;
|
||||
pnqueue->buflen = 0;
|
||||
|
||||
|
@ -3132,7 +3132,7 @@ static WERROR get_a_printer_2_default(NT_PRINTER_INFO_LEVEL_2 **info_ptr, fstrin
|
||||
fstrcpy(info.printprocessor, "winprint");
|
||||
fstrcpy(info.datatype, "RAW");
|
||||
|
||||
info.attributes = PRINTER_ATTRIBUTE_SHARED | PRINTER_ATTRIBUTE_NETWORK; /* attributes */
|
||||
info.attributes = PRINTER_ATTRIBUTE_SAMBA;
|
||||
|
||||
info.starttime = 0; /* Minutes since 12:00am GMT */
|
||||
info.untiltime = 0; /* Minutes since 12:00am GMT */
|
||||
@ -3224,7 +3224,7 @@ static WERROR get_a_printer_2(NT_PRINTER_INFO_LEVEL_2 **info_ptr, fstring sharen
|
||||
info.parameters);
|
||||
|
||||
/* Samba has to have shared raw drivers. */
|
||||
info.attributes |= (PRINTER_ATTRIBUTE_SHARED | PRINTER_ATTRIBUTE_NETWORK);
|
||||
info.attributes |= PRINTER_ATTRIBUTE_SAMBA;
|
||||
|
||||
/* Restore the stripped strings. */
|
||||
slprintf(info.servername, sizeof(info.servername)-1, "\\\\%s", get_called_name());
|
||||
|
@ -5770,7 +5770,7 @@ static BOOL check_printer_ok(NT_PRINTER_INFO_LEVEL_2 *info, int snum)
|
||||
fstrcpy(info->sharename, lp_servicename(snum));
|
||||
slprintf(info->printername, sizeof(info->printername)-1, "\\\\%s\\%s",
|
||||
get_called_name(), info->sharename);
|
||||
info->attributes = PRINTER_ATTRIBUTE_SHARED | PRINTER_ATTRIBUTE_NETWORK;
|
||||
info->attributes = PRINTER_ATTRIBUTE_SAMBA;
|
||||
|
||||
return True;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user