svn commit: samba r5543 - in branches/SAMBA_3_0/source/param: .

jra at samba.org jra at samba.org
Thu Feb 24 21:06:11 GMT 2005


Author: jra
Date: 2005-02-24 21:06:11 +0000 (Thu, 24 Feb 2005)
New Revision: 5543

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

Log:
Fix for bug #962 - using MB sharenames containing a ']' character.
Processing a share name is now MB safe so long as the correct
unix charset is in scope.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/param/params.c


Changeset:
Modified: branches/SAMBA_3_0/source/param/params.c
===================================================================
--- branches/SAMBA_3_0/source/param/params.c	2005-02-24 19:10:28 UTC (rev 5542)
+++ branches/SAMBA_3_0/source/param/params.c	2005-02-24 21:06:11 UTC (rev 5543)
@@ -107,6 +107,7 @@
 	char *buf;
 	char *p;
 	size_t size;
+	char *end_section_p;
 } myFILE;
 
 static int mygetc(myFILE *f)
@@ -125,6 +126,22 @@
 	SAFE_FREE(f);
 }
 
+/* Find the end of the section. We must use mb functions for this. */
+static int FindSectionEnd(myFILE *f)
+{
+	f->end_section_p = strchr_m(f->p, ']');
+	return f->end_section_p ? 1 : 0;
+}
+
+static int AtSectionEnd(myFILE *f)
+{
+	if (f->p == f->end_section_p + 1) {
+		f->end_section_p = NULL;
+		return 1;
+	}
+	return 0;
+}
+
 /* -------------------------------------------------------------------------- **
  * Functions...
  */
@@ -230,6 +247,13 @@
 		    /* character written to bufr[] is a space, then <end>     */
 		    /* will be one less than <i>.                             */
 
+
+	/* Find the end of the section. We must use mb functions for this. */
+	if (!FindSectionEnd(InFile)) {
+		DEBUG(0, ("%s No terminating ']' character in section.\n", func) );
+		return False;
+	}
+
 	c = EatWhitespace( InFile );    /* We've already got the '['.  Scan */
 					/* past initial white space.        */
 
@@ -247,20 +271,8 @@
 			bSize += BUFR_INC;
 		}
 
-		/* Handle a single character. */
+		/* Handle a single character other than section end. */
 		switch( c ) {
-			case ']': /* Found the closing bracket.         */
-				bufr[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. */
-					return False;
-				EatComment( InFile );     /* Finish off the line.             */
-				return True;
-
 			case '\n': /* Got newline before closing ']'.    */
 				i = Continuation( bufr, i );    /* Check for line continuation.     */
 				if( i < 0 ) {
@@ -284,6 +296,21 @@
 					c = mygetc( InFile );
 				}
 		}
+
+		if (AtSectionEnd(InFile)) {
+			/* Got to the closing bracket. */
+			bufr[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. */
+				return False;
+			EatComment( InFile );     /* Finish off the line.             */
+			return True;
+		}
+
 	}
 
 	/* We arrive here if we've met the EOF before the closing bracket. */
@@ -513,6 +540,7 @@
 	}
 
 	ret->p = ret->buf;
+	ret->end_section_p = NULL;
 	return( ret );
 }
 



More information about the samba-cvs mailing list