Pierre-Yves BONNETAIN
2001-Oct-23 05:15 UTC
PATCH to Samba >= 2.2.1, accents and special chars
Okay, I've had some fun there. Let me tell I am no samba pro, so the patch
below _should be tested and tested again_ in _your_ environment before doing
anything close to putting your patched samba into production. It can possibly
break everything. You have been warned.
The mail is somehow longish, because sending a quick (and dirty) patch
without any explanation seems wrong to me. And explanations may help the more
knowledgeable find the best fix.
My history is simple. I am french, using Linux and W2K. On the W2K systems,
I have accented file and directories names.
Access FROM the W2K computers TO my Linux box, with Samba 2.2.1a, is ok. No
problems at all with accents and the stuff, everything is properly translated.
The reverse is, sadly, not true :
-------------------
smb: \> cd Pierre-Yves
smb: \Pierre-Yves\> ls
. DA 0 Mon Jul 2 11:41:34 2001
.. DA 0 Mon Jul 2 11:41:34 2001
Bureau DA 0 Tue Oct 2 10:48:10 2001
Menu D?marrer DA 0 Mon Aug 20 00:01:01 2001
Mes documents DA 0 Mon Oct 1 09:19:33 2001
Mod?les DAH 0 Sat Jun 23 15:57:23 2001
58627 blocks of size 524288. 52259 blocks available
smb: \Pierre-Yves\> cd Mod?les
cd \Pierre-Yves\Mod?les\: ERRDOS - ERRbadpath (Directory invalid.)
smb: \Pierre-Yves\> cd Bureau
smb: \Pierre-Yves\Bureau\> ls
. DA 0 Tue Oct 2 10:48:10 2001
.. DA 0 Tue Oct 2 10:48:10 2001
El?phant.txt A 11 Tue Oct 2 10:48:17 2001
rp8-setup.exe R 5136384 Sun Aug 19 23:57:50 2001
58627 blocks of size 524288. 52259 blocks available
smb: \Pierre-Yves\Bureau\> get El?phant.txt
ERRDOS - ERRbadfile (File not found.) opening remote file
\Pierre-Yves\Bureau\El?phant.txt
smb: \Pierre-Yves\> cd "../Mes documents"
smb: \Pierre-Yves\Mes documents\> ls
. DA 0 Mon Oct 1 09:19:33 2001
.. DA 0 Mon Oct 1 09:19:33 2001
Gestion D 0 Mon Oct 1 09:21:53 2001
Perso DA 0 Thu Sep 13 13:12:53 2001
58627 blocks of size 524288. 52259 blocks available
smb: \Pierre-Yves\Mes documents\>
-------------------
My smb.conf seems OK as code page and character set are concerned :
client code page = 850
character set = ISO8859-1
The problem is easy to pinpoint (a network sniffer helped me a little there,
and then a nice debugger). At one point in processing input commands,
smbclient>= 2.2.1 thinks it has a DOS-translated name, but this is wrong. And thus
accented characters are improperly translated.
I backpatched to Samba 2.2.0, since several people told me they did not have
this kind of problem. And it's true :-)
The 'core' of my grudge seems to lie in the new clistr_push function,
which
does not exist in release 2.2.0. A 'cd directory' command is thus
processed by
cli_chkpath, which does :
cli_setup_packet(cli);
p = smb_buf(cli->outbuf);
*p++ = 4;
safe_strcpy(p,path2,strlen(path2));
unix_to_dos(p,True);
cli_send_smb(cli);
It is clear the path is known to be in Unix format, and is properly
translated to dos stuff.
But cli_chkpath, in smbclient 2.2.1a/2.2.2, is now :
cli_setup_packet(cli);
p = smb_buf(cli->outbuf);
*p++ = 4;
p += clistr_push(cli, p, path2, -1, STR_TERMINATE | STR_CONVERT);
cli_setup_bcc(cli, p);
cli_send_smb(cli);
And clistr_push says :
/* the server likes unicode. give it the works */
if (flags & STR_CONVERT) {
dos_PutUniCode(dest, src, dest_len, flags & STR_TERMINATE);
} else {
ascii_to_unistr(dest, src, dest_len);
}
No such luck, src is NOT in Dos format but in Unix format. Hence all my
troubles.
The same ting is done/not done anymore in cli_open, cli_mkdir, etc.
My fix is easy. It's just a call to unix_to_dos in the proper place. The
patch may be applied to samba 2.2.1a or 2.2.2.
I'm not sure if it's the proper answer, though. So, I submit it to
the
community. No flames, please :-)
--
-+-+ Pierre-Yves BONNETAIN
Consultant Internet/S?curit? --- B & A Consultants
Tel : 0 563.277.241 - Fax : 0 563.277.245
-------------- next part --------------
diff -c -r samba-2.2.1a/source/libsmb/clistr.c
samba-2.2.1a-pyb/source/libsmb/clistr.c
*** samba-2.2.1a/source/libsmb/clistr.c Fri Jul 6 02:59:35 2001
--- samba-2.2.1a-pyb/source/libsmb/clistr.c Tue Oct 23 12:16:04 2001
***************
*** 69,76 ****
/* the server likes unicode. give it the works */
if (flags & STR_CONVERT) {
! dos_PutUniCode(dest, src, dest_len, flags & STR_TERMINATE);
} else {
ascii_to_unistr(dest, src, dest_len);
}
if (flags & STR_UPPER) {
--- 69,79 ----
/* the server likes unicode. give it the works */
if (flags & STR_CONVERT) {
! /* bonnetain@acm.org, 23-oct-2001 : added call to
! unix_to_dos */
! dos_PutUniCode(dest, unix_to_dos(src,False), dest_len, flags &
STR_TERMINATE);
} else {
+ /* bonnetain@acm.org, 23-oct-2001 : there also ??? */
ascii_to_unistr(dest, src, dest_len);
}
if (flags & STR_UPPER) {
Gerald (Jerry) Carter
2001-Oct-23 05:41 UTC
PATCH to Samba >= 2.2.1, accents and special chars
On Tue, 23 Oct 2001, Pierre-Yves BONNETAIN wrote:> My history is simple. I am french, using Linux and W2K. On the W2K > systems, I have accented file and directories names. > Access FROM the W2K computers TO my Linux box, with Samba 2.2.1a, > is ok. No problems at all with accents and the stuff, everything is > properly translated. The reverse is, sadly, not true :Please resend the patch (diff -u) to samba-patches@samba.org and copy me. I'll take a look at it. cheers, jerry --------------------------------------------------------------------- www.samba.org SAMBA Team jerry_at_samba.org www.plainjoe.org jerry_at_plainjoe.org --"I never saved anything for the swim back." Ethan Hawk in Gattaca--