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