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