svn commit: samba r8506 - branches/SAMBA_3_0/source/lib branches/SAMBA_3_0/source/printing trunk/source/lib trunk/source/printing

jerry at samba.org jerry at samba.org
Fri Jul 15 17:38:56 GMT 2005


Author: jerry
Date: 2005-07-15 17:38:55 +0000 (Fri, 15 Jul 2005)
New Revision: 8506

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=8506

Log:
BUG 2853: don't strip out characters like '$' from printer names
when substituting for the lpq command.



Modified:
   branches/SAMBA_3_0/source/lib/util_str.c
   branches/SAMBA_3_0/source/printing/printing.c
   trunk/source/lib/util_str.c
   trunk/source/printing/printing.c


Changeset:
Modified: branches/SAMBA_3_0/source/lib/util_str.c
===================================================================
--- branches/SAMBA_3_0/source/lib/util_str.c	2005-07-15 15:17:35 UTC (rev 8505)
+++ branches/SAMBA_3_0/source/lib/util_str.c	2005-07-15 17:38:55 UTC (rev 8506)
@@ -916,7 +916,7 @@
  use of len==0 which was for no length checks to be done.
 **/
 
-void string_sub(char *s,const char *pattern, const char *insert, size_t len)
+void string_sub2(char *s,const char *pattern, const char *insert, size_t len, BOOL remove_unsafe_characters)
 {
 	char *p;
 	ssize_t ls,lp,li, i;
@@ -951,8 +951,12 @@
 			case '%':
 			case '\r':
 			case '\n':
-				p[i] = '_';
-				break;
+				if ( remove_unsafe_characters ) {
+					p[i] = '_';
+					/* yes this break should be here since we want to 
+					   fall throw if not replacing unsafe chars */
+					break;
+				}
 			default:
 				p[i] = insert[i];
 			}
@@ -962,6 +966,11 @@
 	}
 }
 
+void string_sub(char *s,const char *pattern, const char *insert, size_t len)
+{
+	string_sub2( s, pattern, insert, len, True );
+}
+
 void fstring_sub(char *s,const char *pattern,const char *insert)
 {
 	string_sub(s, pattern, insert, sizeof(fstring));

Modified: branches/SAMBA_3_0/source/printing/printing.c
===================================================================
--- branches/SAMBA_3_0/source/printing/printing.c	2005-07-15 15:17:35 UTC (rev 8505)
+++ branches/SAMBA_3_0/source/printing/printing.c	2005-07-15 17:38:55 UTC (rev 8506)
@@ -43,13 +43,6 @@
    jobids are assigned when a job starts spooling. 
 */
 
-struct print_queue_update_context {
-	char* sharename;
-	int printing_type;
-	char* lpqcommand;
-};
-
-
 static TDB_CONTEXT *rap_tdb;
 static uint16 next_rap_jobid;
 struct rap_jobid_key {
@@ -1290,14 +1283,14 @@
 ****************************************************************************/
 static void print_queue_receive(int msg_type, pid_t src, void *buf, size_t msglen)
 {
-	struct print_queue_update_context ctx;
 	fstring sharename;
 	pstring lpqcommand;
+	int printing_type;
 	size_t len;
 
 	len = tdb_unpack( buf, msglen, "fdP",
 		sharename,
-		&ctx.printing_type,
+		&printing_type,
 		lpqcommand );
 
 	if ( len == -1 ) {
@@ -1305,13 +1298,10 @@
 		return;
 	}
 
-	ctx.sharename = sharename;
-	ctx.lpqcommand = lpqcommand;
+	print_queue_update_with_lock(sharename, 
+		get_printer_fns_from_type(printing_type),
+		lpqcommand );
 
-	print_queue_update_with_lock(ctx.sharename, 
-		get_printer_fns_from_type(ctx.printing_type),
-		ctx.lpqcommand );
-
 	return;
 }
 
@@ -1390,8 +1380,10 @@
 
 	fstrcpy( sharename, lp_const_servicename(snum));
 
+	/* don't strip out characters like '$' from the printername */
+	
 	pstrcpy( lpqcommand, lp_lpqcommand(snum));
-	pstring_sub( lpqcommand, "%p", PRINTERNAME(snum) );
+	string_sub2( lpqcommand, "%p", PRINTERNAME(snum), sizeof(lpqcommand), False );
 	standard_sub_snum( snum, lpqcommand, sizeof(lpqcommand) );
 	
 	/* 

Modified: trunk/source/lib/util_str.c
===================================================================
--- trunk/source/lib/util_str.c	2005-07-15 15:17:35 UTC (rev 8505)
+++ trunk/source/lib/util_str.c	2005-07-15 17:38:55 UTC (rev 8506)
@@ -916,7 +916,7 @@
  use of len==0 which was for no length checks to be done.
 **/
 
-void string_sub(char *s,const char *pattern, const char *insert, size_t len)
+void string_sub2(char *s,const char *pattern, const char *insert, size_t len, BOOL remove_unsafe_characters)
 {
 	char *p;
 	ssize_t ls,lp,li, i;
@@ -951,8 +951,12 @@
 			case '%':
 			case '\r':
 			case '\n':
-				p[i] = '_';
-				break;
+				if ( remove_unsafe_characters ) {
+					p[i] = '_';
+					/* yes this break should be here since we want to 
+					   fall throw if not replacing unsafe chars */
+					break;
+				}
 			default:
 				p[i] = insert[i];
 			}
@@ -962,6 +966,11 @@
 	}
 }
 
+void string_sub(char *s,const char *pattern, const char *insert, size_t len)
+{
+	string_sub2( s, pattern, insert, len, True );
+}
+
 void fstring_sub(char *s,const char *pattern,const char *insert)
 {
 	string_sub(s, pattern, insert, sizeof(fstring));

Modified: trunk/source/printing/printing.c
===================================================================
--- trunk/source/printing/printing.c	2005-07-15 15:17:35 UTC (rev 8505)
+++ trunk/source/printing/printing.c	2005-07-15 17:38:55 UTC (rev 8506)
@@ -43,13 +43,6 @@
    jobids are assigned when a job starts spooling. 
 */
 
-struct print_queue_update_context {
-	char* sharename;
-	int printing_type;
-	char* lpqcommand;
-};
-
-
 static TDB_CONTEXT *rap_tdb;
 static uint16 next_rap_jobid;
 struct rap_jobid_key {
@@ -1290,14 +1283,14 @@
 ****************************************************************************/
 static void print_queue_receive(int msg_type, pid_t src, void *buf, size_t msglen)
 {
-	struct print_queue_update_context ctx;
 	fstring sharename;
 	pstring lpqcommand;
+	int printing_type;
 	size_t len;
 
 	len = tdb_unpack( buf, msglen, "fdP",
 		sharename,
-		&ctx.printing_type,
+		&printing_type,
 		lpqcommand );
 
 	if ( len == -1 ) {
@@ -1305,13 +1298,10 @@
 		return;
 	}
 
-	ctx.sharename = sharename;
-	ctx.lpqcommand = lpqcommand;
+	print_queue_update_with_lock(sharename, 
+		get_printer_fns_from_type(printing_type),
+		lpqcommand );
 
-	print_queue_update_with_lock(ctx.sharename, 
-		get_printer_fns_from_type(ctx.printing_type),
-		ctx.lpqcommand );
-
 	return;
 }
 
@@ -1390,8 +1380,10 @@
 
 	fstrcpy( sharename, lp_const_servicename(snum));
 
+	/* don't strip out characters like '$' from the printername */
+	
 	pstrcpy( lpqcommand, lp_lpqcommand(snum));
-	pstring_sub( lpqcommand, "%p", PRINTERNAME(snum) );
+	string_sub2( lpqcommand, "%p", PRINTERNAME(snum), sizeof(lpqcommand), False );
 	standard_sub_snum( snum, lpqcommand, sizeof(lpqcommand) );
 	
 	/* 



More information about the samba-cvs mailing list