svn commit: samba r11860 - branches/SAMBA_3_0/source/registry
branches/SAMBA_3_0/source/rpc_server trunk/source/registry
trunk/source/rpc_server
jerry at samba.org
jerry at samba.org
Tue Nov 22 15:52:25 GMT 2005
Author: jerry
Date: 2005-11-22 15:52:22 +0000 (Tue, 22 Nov 2005)
New Revision: 11860
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=11860
Log:
BUG 3156: don't use find_service() when explicitly looking for a printer as the username map might get in the way
Modified:
branches/SAMBA_3_0/source/registry/reg_printing.c
branches/SAMBA_3_0/source/rpc_server/srv_spoolss_nt.c
trunk/source/registry/reg_printing.c
trunk/source/rpc_server/srv_spoolss_nt.c
Changeset:
Modified: branches/SAMBA_3_0/source/registry/reg_printing.c
===================================================================
--- branches/SAMBA_3_0/source/registry/reg_printing.c 2005-11-22 14:41:40 UTC (rev 11859)
+++ branches/SAMBA_3_0/source/registry/reg_printing.c 2005-11-22 15:52:22 UTC (rev 11860)
@@ -227,7 +227,16 @@
reg_split_path( printers_key, &printername, &printerdatakey );
- if ( find_service(printername) == -1
+ /* validate the printer name */
+
+ for (snum=0; snum<n_services; snum++) {
+ if ( !lp_snum_ok(snum) || !lp_print_ok(snum) )
+ continue;
+ if (strequal( lp_servicename(snum), printername ) )
+ break;
+ }
+
+ if ( snum>=n_services
|| !W_ERROR_IS_OK( get_a_printer(NULL, &printer, 2, printername) ) )
{
return -1;
Modified: branches/SAMBA_3_0/source/rpc_server/srv_spoolss_nt.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_spoolss_nt.c 2005-11-22 14:41:40 UTC (rev 11859)
+++ branches/SAMBA_3_0/source/rpc_server/srv_spoolss_nt.c 2005-11-22 15:52:22 UTC (rev 11860)
@@ -479,29 +479,30 @@
DEBUGADD(5, ("searching for [%s]\n", aprinter ));
/* Search all sharenames first as this is easier than pulling
- the printer_info_2 off of disk */
+ the printer_info_2 off of disk. Don't use find_service() since
+ that calls out to map_username() */
- snum = find_service(aprinter);
-
- if ( lp_snum_ok(snum) && lp_print_ok(snum) ) {
- found = True;
- fstrcpy( sname, aprinter );
- }
-
/* do another loop to look for printernames */
for (snum=0; !found && snum<n_services; snum++) {
- /* no point in checking if this is not a printer or
- we aren't allowing printername != sharename */
+ /* no point going on if this is not a printer */
- if ( !(lp_snum_ok(snum)
- && lp_print_ok(snum)
- && !lp_force_printername(snum)) )
- {
+ if ( !(lp_snum_ok(snum) && lp_print_ok(snum)) )
continue;
+
+ fstrcpy(sname, lp_servicename(snum));
+ if ( strequal( aprinter, sname ) ) {
+ found = True;
+ break;
}
+
+ /* no point looking up the printer object if
+ we aren't allowing printername != sharename */
+ if ( lp_force_printername(snum) )
+ continue;
+
fstrcpy(sname, lp_servicename(snum));
printer = NULL;
@@ -524,6 +525,7 @@
if ( strequal(printername, aprinter) ) {
found = True;
+ break;
}
DEBUGADD(10, ("printername: %s\n", printername));
Modified: trunk/source/registry/reg_printing.c
===================================================================
--- trunk/source/registry/reg_printing.c 2005-11-22 14:41:40 UTC (rev 11859)
+++ trunk/source/registry/reg_printing.c 2005-11-22 15:52:22 UTC (rev 11860)
@@ -227,7 +227,16 @@
reg_split_path( printers_key, &printername, &printerdatakey );
- if ( find_service(printername) == -1
+ /* validate the printer name */
+
+ for (snum=0; snum<n_services; snum++) {
+ if ( !lp_snum_ok(snum) || !lp_print_ok(snum) )
+ continue;
+ if (strequal( lp_servicename(snum), printername ) )
+ break;
+ }
+
+ if ( snum>=n_services
|| !W_ERROR_IS_OK( get_a_printer(NULL, &printer, 2, printername) ) )
{
return -1;
Modified: trunk/source/rpc_server/srv_spoolss_nt.c
===================================================================
--- trunk/source/rpc_server/srv_spoolss_nt.c 2005-11-22 14:41:40 UTC (rev 11859)
+++ trunk/source/rpc_server/srv_spoolss_nt.c 2005-11-22 15:52:22 UTC (rev 11860)
@@ -479,29 +479,30 @@
DEBUGADD(5, ("searching for [%s]\n", aprinter ));
/* Search all sharenames first as this is easier than pulling
- the printer_info_2 off of disk */
+ the printer_info_2 off of disk. Don't use find_service() since
+ that calls out to map_username() */
- snum = find_service(aprinter);
-
- if ( lp_snum_ok(snum) && lp_print_ok(snum) ) {
- found = True;
- fstrcpy( sname, aprinter );
- }
-
/* do another loop to look for printernames */
for (snum=0; !found && snum<n_services; snum++) {
- /* no point in checking if this is not a printer or
- we aren't allowing printername != sharename */
+ /* no point going on if this is not a printer */
- if ( !(lp_snum_ok(snum)
- && lp_print_ok(snum)
- && !lp_force_printername(snum)) )
- {
+ if ( !(lp_snum_ok(snum) && lp_print_ok(snum)) )
continue;
+
+ fstrcpy(sname, lp_servicename(snum));
+ if ( strequal( aprinter, sname ) ) {
+ found = True;
+ break;
}
+
+ /* no point looking up the printer object if
+ we aren't allowing printername != sharename */
+ if ( lp_force_printername(snum) )
+ continue;
+
fstrcpy(sname, lp_servicename(snum));
printer = NULL;
@@ -524,6 +525,7 @@
if ( strequal(printername, aprinter) ) {
found = True;
+ break;
}
DEBUGADD(10, ("printername: %s\n", printername));
More information about the samba-cvs
mailing list