mirror of
https://github.com/samba-team/samba.git
synced 2025-02-09 09:57:48 +03:00
r2476: now that PRINTER_ATTRIBUTE_PUBLISHED does not get reset anymore, migrate
the publishing-state for migrated printers as well. Therefor added client-side-support for setprinter level 7. Next will be a "net rpc printer publish"-command (just for completeness). Guenther
This commit is contained in:
parent
486bcff17f
commit
224920738f
@ -1076,6 +1076,32 @@ BOOL make_spoolss_printer_info_3(TALLOC_CTX *mem_ctx, SPOOL_PRINTER_INFO_LEVEL_3
|
||||
return True;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
create a SPOOL_PRINTER_INFO_7 struct from a PRINTER_INFO_7 struct
|
||||
*******************************************************************/
|
||||
|
||||
BOOL make_spoolss_printer_info_7(TALLOC_CTX *mem_ctx, SPOOL_PRINTER_INFO_LEVEL_7 **spool_info7,
|
||||
PRINTER_INFO_7 *info)
|
||||
{
|
||||
|
||||
SPOOL_PRINTER_INFO_LEVEL_7 *inf;
|
||||
|
||||
/* allocate the necessary memory */
|
||||
if (!(inf=(SPOOL_PRINTER_INFO_LEVEL_7*)talloc(mem_ctx, sizeof(SPOOL_PRINTER_INFO_LEVEL_7)))) {
|
||||
DEBUG(0,("make_spoolss_printer_info_7: Unable to allocate SPOOL_PRINTER_INFO_LEVEL_7 struct!\n"));
|
||||
return False;
|
||||
}
|
||||
|
||||
inf->guid_ptr = (info->guid.buffer!=NULL)?1:0;
|
||||
inf->action = info->action;
|
||||
init_unistr2_from_unistr(&inf->guid, &info->guid);
|
||||
|
||||
*spool_info7 = inf;
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* read a structure.
|
||||
* called from spoolss_q_open_printer_ex (srv_spoolss.c)
|
||||
@ -4149,6 +4175,10 @@ BOOL make_spoolss_q_setprinter(TALLOC_CTX *mem_ctx, SPOOL_Q_SETPRINTER *q_u,
|
||||
q_u->secdesc_ctr->sec = secdesc;
|
||||
|
||||
break;
|
||||
case 7:
|
||||
make_spoolss_printer_info_7 (mem_ctx, &q_u->info.info_7, info->printers_7);
|
||||
break;
|
||||
|
||||
default:
|
||||
DEBUG(0,("make_spoolss_q_setprinter: Unknown info level [%d]\n", level));
|
||||
break;
|
||||
|
@ -2011,7 +2011,7 @@ NTSTATUS rpc_printer_migrate_settings_internals(const DOM_SID *domain_sid, const
|
||||
BOOL got_hnd_dst = False;
|
||||
BOOL got_dst_spoolss_pipe = False;
|
||||
POLICY_HND hnd_src, hnd_dst;
|
||||
PRINTER_INFO_CTR ctr_enum, ctr_dst;
|
||||
PRINTER_INFO_CTR ctr_enum, ctr_dst, ctr_dst_publish;
|
||||
REGVAL_CTR reg_ctr;
|
||||
struct cli_state *cli_dst = NULL;
|
||||
char *devicename = NULL, *unc_name = NULL, *url = NULL;
|
||||
@ -2095,10 +2095,19 @@ NTSTATUS rpc_printer_migrate_settings_internals(const DOM_SID *domain_sid, const
|
||||
is correctly installed (incl. driver ???) */
|
||||
init_unistr( &ctr_dst.printers_2->portname, SAMBA_PRINTER_PORT_NAME);
|
||||
|
||||
/* check if printer is published -> no publish-migration for the moment */
|
||||
/* check if printer is published */
|
||||
if (ctr_enum.printers_2[i].attributes & PRINTER_ATTRIBUTE_PUBLISHED) {
|
||||
printf("printer on originating server was published, ignoring that\n");
|
||||
ctr_dst.printers_2->attributes = PRINTER_ATTRIBUTE_SAMBA;
|
||||
|
||||
/* check for existing dst printer */
|
||||
if (!net_spoolss_getprinter(cli_dst, mem_ctx, &hnd_dst, 7, &ctr_dst_publish))
|
||||
goto done;
|
||||
|
||||
ctr_dst_publish.printers_7->action = SPOOL_DS_PUBLISH;
|
||||
|
||||
/* ignore False from setprinter due to WERR_IO_PENDING */
|
||||
net_spoolss_setprinter(cli_dst, mem_ctx, &hnd_dst, 7, &ctr_dst_publish);
|
||||
|
||||
DEBUG(3,("republished printer\n"));
|
||||
}
|
||||
|
||||
/* copy devmode (info level 2) */
|
||||
|
Loading…
x
Reference in New Issue
Block a user