[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-unstable-582-g068e8de

Jeremy Allison jra at samba.org
Mon Dec 10 20:37:12 GMT 2007


The branch, v3-2-test has been updated
       via  068e8de72ceb49ef2e02cca1913b6d2197bab5e0 (commit)
       via  bb8c044d425cf62b76e487103c8fb0b6cd4c83c2 (commit)
      from  d78e081043124bbd80cf56d4a991ddf24ff46ef6 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 068e8de72ceb49ef2e02cca1913b6d2197bab5e0
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Dec 9 17:40:48 2007 +0100

    Remove two completely unnecessary globals
    
    Can someone look over this? To me it looks as if bufr was only made static to
    save a malloc during an included smb.conf file. I think that's pretty much
    pointless.

commit bb8c044d425cf62b76e487103c8fb0b6cd4c83c2
Author: Jeremy Allison <jra at samba.org>
Date:   Mon Dec 10 12:11:45 2007 -0800

    Fix return values for invalid printers. Found by kblin
    spoolss test.
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source/param/params.c              |  112 ++++++++++++++++-------------------
 source/rpc_server/srv_spoolss_nt.c |   19 +++++--
 2 files changed, 65 insertions(+), 66 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/param/params.c b/source/param/params.c
index 24bef0a..44b44d9 100644
--- a/source/param/params.c
+++ b/source/param/params.c
@@ -99,9 +99,6 @@ extern bool in_client;
  *  bSize       - The size of the global buffer <bufr>.
  */
 
-static char *bufr  = NULL;
-static int   bSize = 0;
-
 /* we can't use FILE* due to the 256 fd limit - use this cheap hack
    instead */
 typedef struct {
@@ -212,7 +209,7 @@ static int EatComment( myFILE *InFile )
  *
  *****************************************************************************/
 
-static int Continuation(char *line, int pos )
+static int Continuation(uint8_t *line, int pos )
 {
 	pos--;
 	while( (pos >= 0) && isspace((int)line[pos]))
@@ -235,7 +232,7 @@ static int Continuation(char *line, int pos )
  * ------------------------------------------------------------------------ **
  */
 
-static bool Section( myFILE *InFile, bool (*sfunc)(const char *) )
+static bool Section( DATA_BLOB *buf, myFILE *InFile, bool (*sfunc)(const char *) )
 {
 	int   c;
 	int   i;
@@ -260,37 +257,37 @@ static bool Section( myFILE *InFile, bool (*sfunc)(const char *) )
 
 	while( (EOF != c) && (c > 0) ) {
 		/* Check that the buffer is big enough for the next character. */
-		if( i > (bSize - 2) ) {
-			char *tb = (char *)SMB_REALLOC_KEEP_OLD_ON_ERROR( bufr, bSize +BUFR_INC );
+		if( i > (buf->length - 2) ) {
+			uint8_t *tb = (uint8_t *)SMB_REALLOC_KEEP_OLD_ON_ERROR(buf->data, buf->length+BUFR_INC );
 			if(!tb) {
 				DEBUG(0, ("%s Memory re-allocation failure.", func) );
 				return False;
 			}
-			bufr = tb;
-			bSize += BUFR_INC;
+			buf->data = tb;
+			buf->length += BUFR_INC;
 		}
 
 		/* Handle a single character other than section end. */
 		switch( c ) {
 			case '\n': /* Got newline before closing ']'.    */
-				i = Continuation( bufr, i );    /* Check for line continuation.     */
+				i = Continuation( buf->data, i );    /* Check for line continuation.     */
 				if( i < 0 ) {
-					bufr[end] = '\0';
-					DEBUG(0, ("%s Badly formed line in configuration file: %s\n", func, bufr ));
+					buf->data[end] = '\0';
+					DEBUG(0, ("%s Badly formed line in configuration file: %s\n", func, buf->data ));
 					return False;
 				}
-				end = ( (i > 0) && (' ' == bufr[i - 1]) ) ? (i - 1) : (i);
+				end = ( (i > 0) && (' ' == buf->data[i - 1]) ) ? (i - 1) : (i);
 					c = mygetc( InFile );             /* Continue with next line.         */
 				break;
 
 			default: /* All else are a valid name chars.   */
 				if(isspace( c )) {
 					/* One space per whitespace region. */
-					bufr[end] = ' ';
+					buf->data[end] = ' ';
 					i = end + 1;
 					c = EatWhitespace( InFile );
 				} else {
-					bufr[i++] = c;
+					buf->data[i++] = c;
 					end = i;
 					c = mygetc( InFile );
 				}
@@ -298,13 +295,13 @@ static bool Section( myFILE *InFile, bool (*sfunc)(const char *) )
 
 		if (AtSectionEnd(InFile)) {
 			/* Got to the closing bracket. */
-			bufr[end] = '\0';
+			buf->data[end] = '\0';
 			if( 0 == end ) {
 				/* Don't allow an empty name.       */
 				DEBUG(0, ("%s Empty section name in configuration file.\n", func ));
 				return False;
 			}
-			if( !sfunc(bufr) )            /* Got a valid name.  Deal with it. */
+			if( !sfunc((char *)buf->data) )            /* Got a valid name.  Deal with it. */
 				return False;
 			EatComment( InFile );     /* Finish off the line.             */
 			return True;
@@ -313,7 +310,7 @@ static bool Section( myFILE *InFile, bool (*sfunc)(const char *) )
 	}
 
 	/* We arrive here if we've met the EOF before the closing bracket. */
-	DEBUG(0, ("%s Unexpected EOF in the configuration file: %s\n", func, bufr ));
+	DEBUG(0, ("%s Unexpected EOF in the configuration file: %s\n", func, buf->data ));
 	return False;
 }
 
@@ -341,7 +338,7 @@ static bool Section( myFILE *InFile, bool (*sfunc)(const char *) )
  * ------------------------------------------------------------------------ **
  */
 
-static bool Parameter( myFILE *InFile, bool (*pfunc)(const char *, const char *), int c )
+static bool Parameter( DATA_BLOB *buf, myFILE *InFile, bool (*pfunc)(const char *, const char *), int c )
 {
 	int   i       = 0;    /* Position within bufr. */
 	int   end     = 0;    /* bufr[end] is current end-of-string. */
@@ -351,15 +348,15 @@ static bool Parameter( myFILE *InFile, bool (*pfunc)(const char *, const char *)
 	/* Read the parameter name. */
 	while( 0 == vstart ) {
 		/* Loop until we've found the start of the value. */
-		if( i > (bSize - 2) ) {
+		if( i > (buf->length - 2) ) {
 			/* Ensure there's space for next char.    */
-			char *tb = (char *)SMB_REALLOC_KEEP_OLD_ON_ERROR( bufr, bSize + BUFR_INC );
+			uint8_t *tb = (uint8_t *)SMB_REALLOC_KEEP_OLD_ON_ERROR( buf->data, buf->length + BUFR_INC );
 			if (!tb) {
 				DEBUG(0, ("%s Memory re-allocation failure.", func) );
 				return False;
 			}
-			bufr = tb;
-			bSize += BUFR_INC;
+			buf->data = tb;
+			buf->length += BUFR_INC;
 		}
 
 		switch(c) {
@@ -369,37 +366,37 @@ static bool Parameter( myFILE *InFile, bool (*pfunc)(const char *, const char *)
 					DEBUG(0, ("%s Invalid parameter name in config. file.\n", func ));
 					return False;
 				}
-				bufr[end++] = '\0';         /* Mark end of string & advance.   */
+				buf->data[end++] = '\0';         /* Mark end of string & advance.   */
 				i       = end;              /* New string starts here.         */
 				vstart  = end;              /* New string is parameter value.  */
-				bufr[i] = '\0';             /* New string is nul, for now.     */
+				buf->data[i] = '\0';             /* New string is nul, for now.     */
 				break;
 
 			case '\n': /* Find continuation char, else error. */
-				i = Continuation( bufr, i );
+				i = Continuation( buf->data, i );
 				if( i < 0 ) {
-					bufr[end] = '\0';
-					DEBUG(1,("%s Ignoring badly formed line in configuration file: %s\n", func, bufr ));
+					buf->data[end] = '\0';
+					DEBUG(1,("%s Ignoring badly formed line in configuration file: %s\n", func, buf->data ));
 					return True;
 				}
-				end = ( (i > 0) && (' ' == bufr[i - 1]) ) ? (i - 1) : (i);
+				end = ( (i > 0) && (' ' == buf->data[i - 1]) ) ? (i - 1) : (i);
 				c = mygetc( InFile );       /* Read past eoln.                   */
 				break;
 
 			case '\0': /* Shouldn't have EOF within param name. */
 			case EOF:
-				bufr[i] = '\0';
-				DEBUG(1,("%s Unexpected end-of-file at: %s\n", func, bufr ));
+				buf->data[i] = '\0';
+				DEBUG(1,("%s Unexpected end-of-file at: %s\n", func, buf->data ));
 				return True;
 
 			default:
 				if(isspace( c )) {
 					/* One ' ' per whitespace region.       */
-					bufr[end] = ' ';
+					buf->data[end] = ' ';
 					i = end + 1;
 					c = EatWhitespace( InFile );
 				} else {
-					bufr[i++] = c;
+					buf->data[i++] = c;
 					end = i;
 					c = mygetc( InFile );
 				}
@@ -409,15 +406,15 @@ static bool Parameter( myFILE *InFile, bool (*pfunc)(const char *, const char *)
 	/* Now parse the value. */
 	c = EatWhitespace( InFile );  /* Again, trim leading whitespace. */
 	while( (EOF !=c) && (c > 0) ) {
-		if( i > (bSize - 2) ) {
+		if( i > (buf->length - 2) ) {
 			/* Make sure there's enough room. */
-			char *tb = (char *)SMB_REALLOC_KEEP_OLD_ON_ERROR( bufr, bSize + BUFR_INC );
+			uint8_t *tb = (uint8_t *)SMB_REALLOC_KEEP_OLD_ON_ERROR( buf->data, buf->length + BUFR_INC );
 			if (!tb) {
 				DEBUG(0, ("%s Memory re-allocation failure.", func));
 				return False;
 			}
-			bufr = tb;
-			bSize += BUFR_INC;
+			buf->data = tb;
+			buf->length += BUFR_INC;
 		}
 
 		switch(c) {
@@ -426,27 +423,27 @@ static bool Parameter( myFILE *InFile, bool (*pfunc)(const char *, const char *)
 				break;                /* removes them.                            */
 
 			case '\n': /* Marks end of value unless there's a '\'. */
-				i = Continuation( bufr, i );
+				i = Continuation( buf->data, i );
 				if( i < 0 ) {
 					c = 0;
 				} else {
-					for( end = i; (end >= 0) && isspace((int)bufr[end]); end-- )
+					for( end = i; (end >= 0) && isspace((int)buf->data[end]); end-- )
 						;
 					c = mygetc( InFile );
 				}
 				break;
 
 			default: /* All others verbatim.  Note that spaces do not advance <end>.  This allows trimming  */
-				bufr[i++] = c;
+				buf->data[i++] = c;
 				if( !isspace( c ) )  /* of whitespace at the end of the line.     */
 					end = i;
 				c = mygetc( InFile );
 				break;
 		}
 	}
-	bufr[end] = '\0';          /* End of value. */
+	buf->data[end] = '\0';          /* End of value. */
 
-	return( pfunc( bufr, &bufr[vstart] ) );   /* Pass name & value to pfunc().  */
+	return( pfunc( (char *)buf->data, (char *)&buf->data[vstart] ) );   /* Pass name & value to pfunc().  */
 }
 
 /* ------------------------------------------------------------------------ **
@@ -471,7 +468,7 @@ static bool Parameter( myFILE *InFile, bool (*pfunc)(const char *, const char *)
  * ------------------------------------------------------------------------ **
  */
 
-static bool Parse( myFILE *InFile,
+static bool Parse( DATA_BLOB *buf, myFILE *InFile,
                    bool (*sfunc)(const char *),
                    bool (*pfunc)(const char *, const char *) )
 {
@@ -490,7 +487,7 @@ static bool Parse( myFILE *InFile,
 				break;
 
 			case '[': /* Section Header. */
-				if( !Section( InFile, sfunc ) )
+				if( !Section( buf, InFile, sfunc ) )
 					return False;
 				c = EatWhitespace( InFile );
 				break;
@@ -500,7 +497,7 @@ static bool Parse( myFILE *InFile,
 				break;
 
 			default: /* Parameter line. */
-				if( !Parameter( InFile, pfunc, c ) )
+				if( !Parameter( buf, InFile, pfunc, c ) )
 					return False;
 				c = EatWhitespace( InFile );
 				break;
@@ -563,6 +560,7 @@ bool pm_process( const char *FileName,
 	int   result;
 	myFILE *InFile;
 	const char *func = "params.c:pm_process() -";
+	DATA_BLOB buf;
 
 	InFile = OpenConfFile( FileName );          /* Open the config file. */
 	if( NULL == InFile )
@@ -570,25 +568,17 @@ bool pm_process( const char *FileName,
 
 	DEBUG( 3, ("%s Processing configuration file \"%s\"\n", func, FileName) );
 
-	if( NULL != bufr ) {
-		/* If we already have a buffer */
-		/* (recursive call), then just */
-		/* use it.                     */
-		result = Parse( InFile, sfunc, pfunc );
-	} else {
-		bSize = BUFR_INC;
-		bufr = (char *)SMB_MALLOC( bSize );
-		if( NULL == bufr ) {
-			DEBUG(0,("%s memory allocation failure.\n", func));
-			myfile_close(InFile);
-			return False;
-		}
+	buf = data_blob(NULL, 256);
 
-		result = Parse( InFile, sfunc, pfunc );
-		SAFE_FREE( bufr );
-		bSize = 0;
+	if (buf.data == NULL) {
+		DEBUG(0,("%s memory allocation failure.\n", func));
+		myfile_close(InFile);
+		return False;
 	}
 
+	result = Parse( &buf, InFile, sfunc, pfunc );
+	data_blob_free(&buf);
+
 	myfile_close(InFile);
 
 	if( !result ) {
diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c
index a17a8eb..c1e4226 100644
--- a/source/rpc_server/srv_spoolss_nt.c
+++ b/source/rpc_server/srv_spoolss_nt.c
@@ -1530,6 +1530,13 @@ WERROR _spoolss_open_printer(pipes_struct *p, SPOOL_Q_OPEN_PRINTER *q_u, SPOOL_R
 
 	memcpy(r_u, &r_u_ex, sizeof(*r_u));
 
+	if (W_ERROR_EQUAL(r_u->status, WERR_INVALID_PARAM)) {
+		/* OpenPrinterEx returns this for a bad
+		 * printer name. We must return WERR_INVALID_PRINTER_NAME
+		 * instead.
+		 */
+		r_u->status = WERR_INVALID_PRINTER_NAME;
+	}
 	return r_u->status;
 }
 
@@ -1545,8 +1552,9 @@ WERROR _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u,
 	int snum;
 	Printer_entry *Printer=NULL;
 
-	if ( !q_u->printername )
-		return WERR_INVALID_PRINTER_NAME;
+	if (!q_u->printername) {
+		return WERR_INVALID_PARAM;
+	}
 
 	/* some sanity check because you can open a printer or a print server */
 	/* aka: \\server\printer or \\server */
@@ -1555,15 +1563,16 @@ WERROR _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u,
 
 	DEBUGADD(3,("checking name: %s\n",name));
 
-	if (!open_printer_hnd(p, handle, name, 0))
-		return WERR_INVALID_PRINTER_NAME;
+	if (!open_printer_hnd(p, handle, name, 0)) {
+		return WERR_INVALID_PARAM;
+	}
 
 	Printer=find_printer_index_by_hnd(p, handle);
 	if ( !Printer ) {
 		DEBUG(0,(" _spoolss_open_printer_ex: logic error.  Can't find printer "
 			"handle we created for printer %s\n", name ));
 		close_printer_handle(p,handle);
-		return WERR_INVALID_PRINTER_NAME;
+		return WERR_INVALID_PARAM;
 	}
 
 	/*


-- 
Samba Shared Repository


More information about the samba-cvs mailing list