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