Q: mount_smbfs 使用中文 share 名稱遇到如下的錯誤:
mount_smbfs: unable to open connection: syserr = No such file or directory
A: 如果沒有分享的打算, 現在大多用 smbutil 和 mount_smbfs 來看網芳.
# sbmutil view //killbee-xp Share Type Comment ------------------------------- 遊戲人間 disk # mount_smbfs -N //killbee-xp/遊戲人間 /mnt/遊戲人間 # df Filesystem 1K-blocks Used Avail Capacity Mounted on //ROOT@KILLBEE-XP/遊戲人間 27872740 22286264 5586476 80% /mnt/遊戲人間
不過, 有些特殊的中文字無法 mount 上來, 但是大多數(?)的中文是可以的. 會產生問題的原因是 libsmb.so 的 nls_str_upper 函式將中文內的 [a-z] 轉成 [A-Z] 了. 以下是個 contrib/smbfs/lib/smb/nls.c 的 dirty hack.
char *
nls_str_upper(char *dst, const char *src)
{
char *p = dst;
int big5 = 0;
while (*src) {
if(big5)
*dst++ = *src++;
else
*dst++ = toupper(*src++);
if(!big5 && *(src-1) < 0)
big5 = 1;
else
big5 = 0;
}
*dst = 0;
return p;
}
接著按照以下的方式更新 libsmb.so:
# cd /usr/src/lib/libsmb # make # make libsmb.so.1 # make install