summaryrefslogtreecommitdiff
path: root/source3/lib
diff options
context:
space:
mode:
authorDavid Disseldorp <ddiss@suse.de>2011-04-01 11:21:59 -0700
committerKarolin Seeger <kseeger@samba.org>2011-06-14 12:56:31 +0200
commitb290e70432852614eba9261502bf6bc6eb8aadf6 (patch)
treeeefcd0bd3b8510450147df9c8cefe6005b594e33 /source3/lib
parentd65d2279399316b80b1a992e5821919c6800cad4 (diff)
downloadsamba-b290e70432852614eba9261502bf6bc6eb8aadf6.tar.gz
alpha_strcpy() is a utility function which reportedly: Strips out all but 'a-Z0-9' and the character in other_safe_chars and replaces with '_'.
This statement does not currently hold true in all cases (e.g. src = "ТАНЦЕВАТЬ"). Part of a fix for bug 8040 - smbclient segfaults when a Cyrillic netbios name or workgroup is configured. (cherry picked from commit 3e0f539596fbb867b672eeaff037e81c33428309)
Diffstat (limited to 'source3/lib')
-rw-r--r--source3/lib/util_str.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c
index 3da2b834d20..d86963702e0 100644
--- a/source3/lib/util_str.c
+++ b/source3/lib/util_str.c
@@ -586,7 +586,9 @@ char *safe_strcat_fn(const char *fn,
Paranoid strcpy into a buffer of given length (includes terminating
zero. Strips out all but 'a-Z0-9' and the character in other_safe_chars
and replaces with '_'. Deliberately does *NOT* check for multibyte
- characters. Don't change it !
+ characters. Treats src as an array of bytes, not as a multibyte
+ string. Any byte >0x7f is automatically converted to '_'.
+ other_safe_chars must also contain an ascii string (bytes<0x7f).
**/
char *alpha_strcpy_fn(const char *fn,
@@ -622,8 +624,12 @@ char *alpha_strcpy_fn(const char *fn,
for(i = 0; i < len; i++) {
int val = (src[i] & 0xff);
- if (isupper_ascii(val) || islower_ascii(val) ||
- isdigit(val) || strchr_m(other_safe_chars, val))
+ if (val > 0x7f) {
+ dest[i] = '_';
+ continue;
+ }
+ if (isupper(val) || islower(val) ||
+ isdigit(val) || strchr(other_safe_chars, val))
dest[i] = src[i];
else
dest[i] = '_';