diff --git a/samba/samba-lib.pl b/samba/samba-lib.pl index 873f392a8..c24472318 100755 --- a/samba/samba-lib.pl +++ b/samba/samba-lib.pl @@ -209,6 +209,17 @@ else { } } +# decode_unicode_string(string) +# Decodes a string from UTF-8 if needed +sub decode_unicode_string +{ +my ($str) = @_; +eval "use Encode"; +if ($@) { + return $str; + } +return decode('utf8', $str); +} # list_connections([share]) # Uses the smbstatus program to return a list of connections a share. Each diff --git a/samba/save_fshare.cgi b/samba/save_fshare.cgi index 108b1e537..73d5f347e 100755 --- a/samba/save_fshare.cgi +++ b/samba/save_fshare.cgi @@ -57,7 +57,7 @@ if ($name ne "global") { elsif ($in{'old_name'} ne $name && $exists{$name}) { &error(&text('savefshare_exist', $name)); } - elsif ($name !~ /^[A-Za-z0-9_\$\-\. ]+$/) { + elsif (&decode_unicode_string($name) !~ /^[\p{L}\p{N}_\$\-\.\s]+$/) { &error(&text('savefshare_mode', $name)); } elsif ($name eq "global") { # unreachable code ? EB diff --git a/samba/save_pshare.cgi b/samba/save_pshare.cgi index cca754dab..c7e8c438a 100755 --- a/samba/save_pshare.cgi +++ b/samba/save_pshare.cgi @@ -59,7 +59,7 @@ if ($name ne "global") { elsif ($in{'old_name'} ne $name && $exists{$name}) { &error(&text('savepshare_exist', $name)); } - elsif ($name !~ /^[\p{L}\p{N}_\$\-\.\s]+$/) { + elsif (&decode_unicode_string($name) !~ /^[\p{L}\p{N}_\$\-\.\s]+$/) { &error(&text('savepshare_name', $name)); } elsif ($name eq "global") {