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 thusaccented 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--