diff options
author | Günther Deschner <gd@samba.org> | 2010-02-18 01:58:56 +0100 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2010-02-18 02:19:42 +0100 |
commit | 2d2db2a8226f6a3a8e114abc9a37aea66dba912e (patch) | |
tree | 95c2f963a6f2ff0be6961b39e8d93138da9c7811 | |
parent | 5cff7e1692e4caa308271581f3df3f72c4f31261 (diff) | |
download | samba-2d2db2a8226f6a3a8e114abc9a37aea66dba912e.tar.gz samba-2d2db2a8226f6a3a8e114abc9a37aea66dba912e.tar.bz2 samba-2d2db2a8226f6a3a8e114abc9a37aea66dba912e.zip |
s3-spoolss: more AddPrinter{Ex} checks.
Windows will allow to add a non-shared printer that is returned by EnumPrinters.
Samba has no notion of non-shared local printers yet, so just make sure to
behave like we do elsewhere: a printer autoloaded by samba or added to samba is
shared.
Guenther
-rw-r--r-- | source3/rpc_server/srv_spoolss_nt.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 66eb59bd40..49ca8c2c2b 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -7136,6 +7136,15 @@ static WERROR spoolss_addprinterex_level_2(pipes_struct *p, return WERR_NOMEM; } + /* samba does not have a concept of local, non-shared printers yet, so + * make sure we always setup sharename - gd */ + if ((printer->info_2->sharename[0] == '\0') && (printer->info_2->printername != '\0')) { + DEBUG(5, ("spoolss_addprinterex_level_2: " + "no sharename has been set, setting printername %s as sharename\n", + printer->info_2->printername)); + fstrcpy(printer->info_2->sharename, printer->info_2->printername); + } + /* check to see if the printer already exists */ if ((snum = print_queue_snum(printer->info_2->sharename)) != -1) { @@ -7145,6 +7154,15 @@ static WERROR spoolss_addprinterex_level_2(pipes_struct *p, return WERR_PRINTER_ALREADY_EXISTS; } + if (!lp_force_printername(GLOBAL_SECTION_SNUM)) { + if ((snum = print_queue_snum(printer->info_2->printername)) != -1) { + DEBUG(5, ("spoolss_addprinterex_level_2: Attempted to add a printer named [%s] when one already existed!\n", + printer->info_2->printername)); + free_a_printer(&printer, 2); + return WERR_PRINTER_ALREADY_EXISTS; + } + } + /* validate printer info struct */ if (!info_ctr->info.info2->printername || strlen(info_ctr->info.info2->printername) == 0) { |