[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Tue Jul 19 15:49:02 MDT 2011


The branch, master has been updated
       via  93dcfde Second part of fix for bug 8310 - toupper_ascii() is broken on big-endian systems.
       via  ee34c25 First part of fix for bug 8310 - toupper_ascii() is broken on big-endian systems
      from  2052c2d s3-libsmb: remove unused cli_lock()

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 93dcfdea389098fd802cc4f5be8d5d578454d624
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Jul 19 13:35:45 2011 -0700

    Second part of fix for bug 8310 - toupper_ascii() is broken on big-endian systems.
    
    Re-add:
    	smb_ucs2_t toupper_w(smb_ucs2_t v);
    
    and ensure it is called whenever we are operating on smb_ucs2_t
    variables. I'd like to make the definition of smb_ucs2_t incompatible
    with int and codepoint_t so they can't be mixed, but that's a patch
    for another time.
    
    Autobuild-User: Jeremy Allison <jra at samba.org>
    Autobuild-Date: Tue Jul 19 23:48:05 CEST 2011 on sn-devel-104

commit ee34c25c8a989b5a7c0ad59d71bb39f8efff045c
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Jul 19 13:19:29 2011 -0700

    First part of fix for bug 8310 - toupper_ascii() is broken on big-endian systems
    
    Remove
    int toupper_ascii(int c);
    int tolower_ascii(int c);
    int isupper_ascii(int c);
    int islower_ascii(int c);
    
    and replace with their _m equivalents, as they are identical.

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

Summary of changes:
 lib/util/charset/charset.h       |    5 +---
 lib/util/charset/util_unistr_w.c |   43 +++++++------------------------------
 lib/util/util_str_common.c       |    2 +-
 source3/auth/pass_check.c        |    4 +-
 source3/client/clitar.c          |    2 +-
 source3/lib/charcnv.c            |    2 +-
 source3/lib/ms_fnmatch.c         |    2 +-
 source3/lib/username.c           |    4 +-
 source3/lib/util_str.c           |    2 +-
 source3/param/loadparm.c         |    6 ++--
 source3/passdb/passdb.c          |    8 +++---
 source3/smbd/mangle_hash.c       |    6 ++--
 source3/smbd/mangle_hash2.c      |   12 +++++-----
 source3/web/swat.c               |    2 +-
 14 files changed, 35 insertions(+), 65 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/charset/charset.h b/lib/util/charset/charset.h
index b36c461..ce297d0 100644
--- a/lib/util/charset/charset.h
+++ b/lib/util/charset/charset.h
@@ -257,10 +257,7 @@ int strcmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b);
 int strcasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b);
 int strncasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b, size_t len);
 int strcmp_wa(const smb_ucs2_t *a, const char *b);
-int toupper_ascii(int c);
-int tolower_ascii(int c);
-int isupper_ascii(int c);
-int islower_ascii(int c);
+smb_ucs2_t toupper_w(smb_ucs2_t v);
 
 /*
  *   Define stub for charset module which implements 8-bit encoding with gaps.
diff --git a/lib/util/charset/util_unistr_w.c b/lib/util/charset/util_unistr_w.c
index 3fbed7f..7e0ece3 100644
--- a/lib/util/charset/util_unistr_w.c
+++ b/lib/util/charset/util_unistr_w.c
@@ -253,40 +253,13 @@ int strcmp_wa(const smb_ucs2_t *a, const char *b)
 	return (*(COPY_UCS2_CHAR(&cp,a)) - UCS2_CHAR(*b));
 }
 
-/*************************************************************
- ascii only toupper - saves the need for smbd to be in C locale.
-*************************************************************/
-
-int toupper_ascii(int c)
-{
-	smb_ucs2_t uc = toupper_m(UCS2_CHAR(c));
-	return UCS2_TO_CHAR(uc);
-}
-
-/*************************************************************
- ascii only tolower - saves the need for smbd to be in C locale.
-*************************************************************/
-
-int tolower_ascii(int c)
-{
-	smb_ucs2_t uc = tolower_m(UCS2_CHAR(c));
-	return UCS2_TO_CHAR(uc);
-}
-
-/*************************************************************
- ascii only isupper - saves the need for smbd to be in C locale.
-*************************************************************/
-
-int isupper_ascii(int c)
+smb_ucs2_t toupper_w(smb_ucs2_t v)
 {
-	return isupper_m(UCS2_CHAR(c));
-}
-
-/*************************************************************
- ascii only islower - saves the need for smbd to be in C locale.
-*************************************************************/
-
-int islower_ascii(int c)
-{
-	return islower_m(UCS2_CHAR(c));
+	smb_ucs2_t ret;
+	/* LE to native. */
+	codepoint_t cp = SVAL(&v,0);
+	cp = toupper_m(cp);
+	/* native to LE. */
+	SSVAL(&ret,0,cp);
+	return ret;
 }
diff --git a/lib/util/util_str_common.c b/lib/util/util_str_common.c
index fe78d65..20682f9 100644
--- a/lib/util/util_str_common.c
+++ b/lib/util/util_str_common.c
@@ -43,7 +43,7 @@ _PUBLIC_ int strwicmp(const char *psz1, const char *psz2)
 			psz1++;
 		while (isspace((int)*psz2))
 			psz2++;
-		if (toupper_ascii((unsigned char)*psz1) != toupper_ascii((unsigned char)*psz2)
+		if (toupper_m((unsigned char)*psz1) != toupper_m((unsigned char)*psz2)
 		    || *psz1 == '\0'
 		    || *psz2 == '\0')
 			break;
diff --git a/source3/auth/pass_check.c b/source3/auth/pass_check.c
index 714cc96..74d6f1f 100644
--- a/source3/auth/pass_check.c
+++ b/source3/auth/pass_check.c
@@ -518,9 +518,9 @@ static NTSTATUS string_combinations2(char *s, int offset,
 
 	for (i = offset; i < (len - (N - 1)); i++) {
 		char c = s[i];
-		if (!islower_ascii(c))
+		if (!islower_m(c))
 			continue;
-		s[i] = toupper_ascii(c);
+		s[i] = toupper_m(c);
 		nt_status = string_combinations2(s, i + 1, fn, N - 1,
 						 private_data);
 		if (!NT_STATUS_EQUAL(nt_status, NT_STATUS_WRONG_PASSWORD)) {
diff --git a/source3/client/clitar.c b/source3/client/clitar.c
index a5de8eb..3fff081 100644
--- a/source3/client/clitar.c
+++ b/source3/client/clitar.c
@@ -473,7 +473,7 @@ static int strslashcmp(char *s1, char *s2)
 {
 	char *s1_0=s1;
 
-	while(*s1 && *s2 && (*s1 == *s2 || tolower_ascii(*s1) == tolower_ascii(*s2) ||
+	while(*s1 && *s2 && (*s1 == *s2 || tolower_m(*s1) == tolower_m(*s2) ||
 				(*s1 == '\\' && *s2=='/') || (*s1 == '/' && *s2=='\\'))) {
 		s1++; s2++;
 	}
diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c
index 17e836d..7d7058c 100644
--- a/source3/lib/charcnv.c
+++ b/source3/lib/charcnv.c
@@ -287,7 +287,7 @@ static size_t push_ucs2(const void *base_ptr, void *dest, const char *src, size_
 		   terminated if STR_TERMINATE isn't set. */
 
 		for (i = 0; i < (ret / 2) && i < (dest_len / 2) && dest_ucs2[i]; i++) {
-			smb_ucs2_t v = toupper_m(dest_ucs2[i]);
+			smb_ucs2_t v = toupper_w(dest_ucs2[i]);
 			if (v != dest_ucs2[i]) {
 				dest_ucs2[i] = v;
 			}
diff --git a/source3/lib/ms_fnmatch.c b/source3/lib/ms_fnmatch.c
index f02354b..e32d094 100644
--- a/source3/lib/ms_fnmatch.c
+++ b/source3/lib/ms_fnmatch.c
@@ -129,7 +129,7 @@ static int ms_fnmatch_core(const smb_ucs2_t *p, const smb_ucs2_t *n,
 				if (is_case_sensitive) {
 					return -1;
 				}
-				if (toupper_m(c) != toupper_m(*n)) {
+				if (toupper_w(c) != toupper_w(*n)) {
 					return -1;
 				}
 			}
diff --git a/source3/lib/username.c b/source3/lib/username.c
index d5da532..925b44b 100644
--- a/source3/lib/username.c
+++ b/source3/lib/username.c
@@ -196,9 +196,9 @@ static struct passwd *uname_string_combinations2(char *s, TALLOC_CTX *mem_ctx,
 
 	for (i=offset;i<(len-(N-1));i++) {
 		char c = s[i];
-		if (!islower_ascii((int)c))
+		if (!islower_m((int)c))
 			continue;
-		s[i] = toupper_ascii(c);
+		s[i] = toupper_m(c);
 		ret = uname_string_combinations2(s, mem_ctx, i+1, fn, N-1);
 		if(ret)
 			return(ret);
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c
index a348b38..baa5a1f 100644
--- a/source3/lib/util_str.c
+++ b/source3/lib/util_str.c
@@ -470,7 +470,7 @@ void strlower_m(char *s)
 	   (ie. they match for the first 128 chars) */
 
 	while (*s && !(((unsigned char)s[0]) & 0x80)) {
-		*s = tolower_ascii((unsigned char)*s);
+		*s = tolower_m((unsigned char)*s);
 		s++;
 	}
 
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 1258709..3b4ff6a 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -6923,9 +6923,9 @@ static bool handle_dos_charset(struct loadparm_context *unused, int snum, const
 	if (len == 4 || len == 5) {
 		/* Don't use StrCaseCmp here as we don't want to
 		   initialize iconv. */
-		if ((toupper_ascii(pszParmValue[0]) == 'U') &&
-		    (toupper_ascii(pszParmValue[1]) == 'T') &&
-		    (toupper_ascii(pszParmValue[2]) == 'F')) {
+		if ((toupper_m(pszParmValue[0]) == 'U') &&
+		    (toupper_m(pszParmValue[1]) == 'T') &&
+		    (toupper_m(pszParmValue[2]) == 'F')) {
 			if (len == 4) {
 				if (pszParmValue[3] == '8') {
 					is_utf8 = true;
diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c
index 5116396..faa608c 100644
--- a/source3/passdb/passdb.c
+++ b/source3/passdb/passdb.c
@@ -407,8 +407,8 @@ bool pdb_gethexpwd(const char *p, unsigned char *pwd)
 		return false;
 
 	for (i = 0; i < 32; i += 2) {
-		hinybble = toupper_ascii(p[i]);
-		lonybble = toupper_ascii(p[i + 1]);
+		hinybble = toupper_m(p[i]);
+		lonybble = toupper_m(p[i + 1]);
 
 		p1 = strchr(hexchars, hinybble);
 		p2 = strchr(hexchars, lonybble);
@@ -457,8 +457,8 @@ bool pdb_gethexhours(const char *p, unsigned char *hours)
 	}
 
 	for (i = 0; i < 42; i += 2) {
-		hinybble = toupper_ascii(p[i]);
-		lonybble = toupper_ascii(p[i + 1]);
+		hinybble = toupper_m(p[i]);
+		lonybble = toupper_m(p[i + 1]);
 
 		p1 = strchr(hexchars, hinybble);
 		p2 = strchr(hexchars, lonybble);
diff --git a/source3/smbd/mangle_hash.c b/source3/smbd/mangle_hash.c
index a51ea6b..0238083 100644
--- a/source3/smbd/mangle_hash.c
+++ b/source3/smbd/mangle_hash.c
@@ -424,8 +424,8 @@ static bool is_mangled(const char *s, const struct share_params *p)
 	magic = strchr_m( s, magic_char );
 	while( magic && magic[1] && magic[2] ) {         /* 3 chars, 1st is magic. */
 		if( ('.' == magic[3] || '/' == magic[3] || !(magic[3]))          /* Ends with '.' or nul or '/' ?  */
-				&& isbasechar( toupper_ascii(magic[1]) )           /* is 2nd char basechar?  */
-				&& isbasechar( toupper_ascii(magic[2]) ) )         /* is 3rd char basechar?  */
+				&& isbasechar( toupper_m(magic[1]) )           /* is 2nd char basechar?  */
+				&& isbasechar( toupper_m(magic[2]) ) )         /* is 3rd char basechar?  */
 			return( True );                           /* If all above, then true, */
 		magic = strchr_m( magic+1, magic_char );      /*    else seek next magic. */
 	}
@@ -479,7 +479,7 @@ static void cache_mangled_name( const char mangled_name[13],
 	s1 = strrchr( mangled_name_key, '.' );
 	if( s1 && (s2 = strrchr( raw_name, '.' )) ) {
 		size_t i = 1;
-		while( s1[i] && (tolower_ascii( s1[i] ) == s2[i]) )
+		while( s1[i] && (tolower_m( s1[i] ) == s2[i]) )
 			i++;
 		if( !s1[i] && !s2[i] ) {
 			/* Truncate at the '.' */
diff --git a/source3/smbd/mangle_hash2.c b/source3/smbd/mangle_hash2.c
index 4de80cb..09cd44d 100644
--- a/source3/smbd/mangle_hash2.c
+++ b/source3/smbd/mangle_hash2.c
@@ -173,10 +173,10 @@ static void init_tables(void)
 		char_flags[c2] |= FLAG_POSSIBLE2;
 		char_flags[c3] |= FLAG_POSSIBLE3;
 		char_flags[c4] |= FLAG_POSSIBLE4;
-		char_flags[tolower_ascii(c1)] |= FLAG_POSSIBLE1;
-		char_flags[tolower_ascii(c2)] |= FLAG_POSSIBLE2;
-		char_flags[tolower_ascii(c3)] |= FLAG_POSSIBLE3;
-		char_flags[tolower_ascii(c4)] |= FLAG_POSSIBLE4;
+		char_flags[tolower_m(c1)] |= FLAG_POSSIBLE1;
+		char_flags[tolower_m(c2)] |= FLAG_POSSIBLE2;
+		char_flags[tolower_m(c3)] |= FLAG_POSSIBLE3;
+		char_flags[tolower_m(c4)] |= FLAG_POSSIBLE4;
 
 		char_flags[(unsigned char)'.'] |= FLAG_POSSIBLE4;
 	}
@@ -737,7 +737,7 @@ static bool hash2_name_to_8_3(const char *name,
 		if (! FLAG_CHECK(lead_chars[i], FLAG_ASCII)) {
 			lead_chars[i] = '_';
 		}
-		lead_chars[i] = toupper_ascii(lead_chars[i]);
+		lead_chars[i] = toupper_m(lead_chars[i]);
 	}
 	for (;i<mangle_prefix;i++) {
 		lead_chars[i] = '_';
@@ -758,7 +758,7 @@ static bool hash2_name_to_8_3(const char *name,
 			char c = dot_p[i];
 			if (FLAG_CHECK(c, FLAG_ASCII)) {
 				extension[extension_length++] =
-					toupper_ascii(c);
+					toupper_m(c);
 			}
 		}
 	}
diff --git a/source3/web/swat.c b/source3/web/swat.c
index 97c9613..15632b7 100644
--- a/source3/web/swat.c
+++ b/source3/web/swat.c
@@ -124,7 +124,7 @@ static char *stripspaceupper(const char *str)
 	char *p = newstring;
 
 	while (*str) {
-		if (*str != ' ') *p++ = toupper_ascii(*str);
+		if (*str != ' ') *p++ = toupper_m(*str);
 		++str;
 	}
 	*p = '\0';


-- 
Samba Shared Repository


More information about the samba-cvs mailing list