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