Bug 10447 - smbclient неправильно работает в однобайтовых локалях c русским W2k
: smbclient неправильно работает в однобайтовых локалях c русским W2k
Status: NEW
: Sisyphus
(All bugs in Sisyphus/samba)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2006-12-18 17:24 by
Modified: 2014-02-15 21:20 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2006-12-18 17:24:26
[novikov@novikov novikov]$ LC_ALL=C smbclient -gNL somehost -A ~/.netrc 
Domain=[SOMEHOST] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]
IPC|IPC$|Disk|D$|Disk|print$|Disk|C|
Disk|D|
Printer|hpLaserJ|hp LaserJet 1300 PCL 6
Disk|ADMIN$|Disk|N$|
Domain=[SOMEHOST] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]
Disk|C$|

[novikov@novikov novikov]$ LC_ALL=ru_RU.CP1251 smbclient -gNL somehost -A ~/.netrc 
Domain=[SOMEHOST] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]
IPC|IPC$|Disk|D$|Disk|print$|Disk|C|
Disk|D|
Printer|hpLaserJ|hp LaserJet 1300 PCL 6
Disk|ADMIN$|Disk|N$|
Domain=[SOMEHOST] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]
Disk|C$|

[novikov@novikov novikov]$ LC_ALL=ru_RU.UTF-8 smbclient -gNL somehost -A ~/.netrc 
Domain=[SOMEHOST] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]
IPC|IPC$|ôñá½Ñ¡¡Ù® IPC
Disk|D$|æÔá¡ñáÓÔ¡Ù® «íÚ¿® ÓÑßÒÓß
Disk|print$|äÓá®óÑÓÙ »Ó¿¡ÔÑÓ«ó
Disk|C|
Disk|D|
Printer|hpLaserJ|hp LaserJet 1300 PCL 6
Disk|ADMIN$|ôñá½Ñ¡¡Ù® Admin
Disk|N$|
Disk|C$|æÔá¡ñáÓÔ¡Ù® «íÚ¿® ÓÑßÒÓß
Domain=[SOMEHOST] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]
------- Comment #1 From 2006-12-19 09:32:51 -------
(In reply to comment #0)
Прошу прощения, был не настроен /etc/samba/smb.conf, однако даже с настроенным
неправильное поведение в локали POSIX сохраняется

[novikov@novikov novikov]$ LC_ALL=C smbclient -gNL somehost -A ~/.netrc 2>/dev/null
IPC|IPC$|Disk|D$|Disk|print$|Disk|C|
Disk|D|
Printer|hpLaserJ|hp LaserJet 1300 PCL 6
Disk|ADMIN$|Disk|N$|
Disk|C$|

В остальных локалях вроде работает. Из-за такого поведения не работает auto.smb
из пакета autofs, приходится для smbclient'а указывать локаль отличную от POSIX
------- Comment #2 From 2006-12-19 10:51:21 -------
Работа в локали POSIX полностью соответствует логике локали -- в ней возможно
только ASCII. Однако, почему-то "проглатывается" заключительный \n в некоторых
строках...

Соответствующий код выглядит так:
        /* FIXME: If the remote machine returns non-ascii characters           

           in any of these fields, they can corrupt the output.  We            

           should remove them. */                                              

        if (!grepable) {                                                       

                d_printf("\t%-15s %-10.10s%s\n",                               

                        name,typestr,comment);                                 

        } else {                                                               

                d_printf ("%s|%s|%s\n",typestr,name,comment);                  

        }                                                                      


Предполагается, что поступающие на вход d_printf() строки переданы в unix
charset и она транслирует их в display charset и выводит на экран. Собственно
так и происходит, поскольку в browse_fn() (где этот код присутствует) данные
попадают в unix charset, будучи преобразованными туда из UCS2.

Комментарий, на мой взгляд, относится только к первой части -- !greppable; там
вполне очевидно, что вывод испортится, поскольку он форматируется побайтно
пробелами, а на самом деле при юникоде там совсем не восьмибитные буквы. Однако
к greppable это не относится. В этом случае d_printf() должен сформировать
нормальную строку (в utf-8, насколько я полагаю -- unix charset по умолчанию) и
попытаться ее вывести. А чему все же равны настройки *charset в smb.conf?
------- Comment #3 From 2006-12-19 13:18:10 -------
(In reply to comment #2)
Сейчас в /etc/samba/smb.conf
dos charset = CP866
unix charset = UTF8
display charset = LOCALE

[novikov@novikov etc]$ rpm -qf /usr/bin/smbclient 
samba-client-3.0.14a-alt2

Локаль - UTF-8

Кстати, пока не забыл
[novikov@novikov etc]$ man smbclient | grep '^.*-g'
[novikov@novikov etc]$
в смысле опция -g в мане отсутствует

А так все равно
LC_ALL=C smbclient -gNL monakhov -A ~/.netrc >~/aaa
в файле имеем
IPC|IPC$|Disk|D$|Disk|print$|Disk|C|
Disk|D|
Printer|hpLaserJ|hp LaserJet 1300 PCL 6
Disk|ADMIN$|Disk|N$|
Disk|C$|
причем последняя строка без \n
------- Comment #4 From 2008-02-15 19:58:20 -------
moved to sisyphus; please check with 3.0.28+
------- Comment #5 From 2008-02-18 09:36:19 -------
(In reply to comment #4)
> moved to sisyphus; please check with 3.0.28+

Система - branch 4.0
$ rpm -q samba-client
samba-client-3.0.28-alt1

LC_ALL=C smbclient -gNL <win2k_ru_host> -A /etc/netrc

display charset = LOCALE - не работает
display charset = UTF8 - работает
------- Comment #6 From 2008-06-13 13:00:39 -------
*** This bug has been confirmed by popular vote. ***
------- Comment #7 From 2011-01-22 17:17:11 -------
Просьба по возможности проверить с 3.5+.
------- Comment #8 From 2011-01-24 08:32:48 -------
(В ответ на комментарий №7)
> Просьба по возможности проверить с 3.5+.

$ LC_ALL=C smbclient -gNL host -U user 2>/dev/null |hexdump -C
00000000  41 6e 6f 6e 79 6d 6f 75  73 20 6c 6f 67 69 6e 20  |Anonymous login |
00000010  73 75 63 63 65 73 73 66  75 6c 0a 49 50 43 7c 49  |successful.IPC|I|
00000020  50 43 24 7c 44 69 73 6b  7c 70 72 69 6e 74 24 7c  |PC$|Disk|print$||
00000030  44 69 73 6b 7c 43 7c 0a  50 72 69 6e 74 65 72 7c  |Disk|C|.Printer||
00000040  48 50 4c 61 73 65 72 4a  7c 48 50 20 4c 61 73 65  |HPLaserJ|HP Lase|
00000050  72 4a 65 74 20 31 30 31  38 0a 44 69 73 6b 7c 41  |rJet 1018.Disk|A|
00000060  44 4d 49 4e 24 7c 44 69  73 6b 7c 43 24 7c 41 6e  |DMIN$|Disk|C$|An|
00000070  6f 6e 79 6d 6f 75 73 20  6c 6f 67 69 6e 20 73 75  |onymous login su|
00000080  63 63 65 73 73 66 75 6c  0a                       |ccessful.|
00000089

Hint: например, между Disk|ADMIN$ и Disk|C$ не перевод строки, а "|"
$ rpmquery samba-client
samba-client-3.5.6-alt1
------- Comment #9 From 2011-01-24 08:34:57 -------
(В ответ на комментарий №7)
> Просьба по возможности проверить с 3.5+.

А вот с UTF-8 (она же локаль)

$ LC_ALL=ru_RU.UTF-8 smbclient -gNL host -U user 2>/dev/null |hexdump -C
00000000  41 6e 6f 6e 79 6d 6f 75  73 20 6c 6f 67 69 6e 20  |Anonymous login |
00000010  73 75 63 63 65 73 73 66  75 6c 0a 49 50 43 7c 49  |successful.IPC|I|
00000020  50 43 24 7c d0 a3 d0 b4  d0 b0 d0 bb d0 b5 d0 bd  |PC$|............|
00000030  d0 bd d1 8b d0 b9 20 49  50 43 0a 44 69 73 6b 7c  |...... IPC.Disk||
00000040  70 72 69 6e 74 24 7c d0  94 d1 80 d0 b0 d0 b9 d0  |print$|.........|
00000050  b2 d0 b5 d1 80 d1 8b 20  d0 bf d1 80 d0 b8 d0 bd  |....... ........|
00000060  d1 82 d0 b5 d1 80 d0 be  d0 b2 0a 44 69 73 6b 7c  |...........Disk||
00000070  43 7c 0a 50 72 69 6e 74  65 72 7c 48 50 4c 61 73  |C|.Printer|HPLas|
00000080  65 72 4a 7c 48 50 20 4c  61 73 65 72 4a 65 74 20  |erJ|HP LaserJet |
00000090  31 30 31 38 0a 44 69 73  6b 7c 41 44 4d 49 4e 24  |1018.Disk|ADMIN$|
000000a0  7c d0 a3 d0 b4 d0 b0 d0  bb d0 b5 d0 bd d0 bd d1  ||...............|
000000b0  8b d0 b9 20 41 64 6d 69  6e 0a 44 69 73 6b 7c 43  |... Admin.Disk|C|
000000c0  24 7c d0 a1 d1 82 d0 b0  d0 bd d0 b4 d0 b0 d1 80  |$|..............|
000000d0  d1 82 d0 bd d1 8b d0 b9  20 d0 be d0 b1 d1 89 d0  |........ .......|
000000e0  b8 d0 b9 20 d1 80 d0 b5  d1 81 d1 83 d1 80 d1 81  |... ............|
000000f0  0a 41 6e 6f 6e 79 6d 6f  75 73 20 6c 6f 67 69 6e  |.Anonymous login|
00000100  20 73 75 63 63 65 73 73  66 75 6c 0a              | successful.|
0000010c