smb.confのincludeを用いた,セッション毎の文字コードの使い分け

  • おそらく以下に書いてあることは正しくありません。現バージョンのアプリケーションで何とか運用する苦肉の策です。sambaのバージョンがあがると実装(仕様?)が変わるかもしれませんので注意。後でマシンが飛んだときのメモ程度のつもりで。
  • 上記のsamba鯖は、普通にeuc-jpのディレクトリもサービスしているので、アクセスしてくるディレクトリに応じて挙動を変えなければならない。しかし,文字コードの設定は[global]なのが悩みどころ。そこでincludeでアクセスしてきたマシン毎に挙動を変えます。(上記cifsマウントはLinuxマシン(つまり自分)しか用いないため,どのマシンか特定可能.
  • 結論から書くと以下の設定になった.
    • smb.conf

[global]
include = smb.%h.conf
include = smb.%m.conf

    • smb.「Samba が動作しているマシンの インターネットホスト名(%h)」.conf (a)

[global]
unix charset = UTF-8
dos charset = CP932
display charset = CP932
[utf_dir]
comment = utf8 space
path = /hoge

    • smb.「クライアントマシンの NetBIOS 名(%m)」.conf (b)

[global]
unix charset = EUC-JP *1
unix charset = eucJP-ms
dos charset = CP932
display charset = CP932
[homes]
comment = Home Directories

  • 動作の概要。
    • mount -t cifs の場合、マシンのNetBIOS名は解決できず*2,include = smb.%m.conf は無視される。(%mに値は入らない?)結果、(a)の設定が適用される.(鯖上のファイルはUTF8として扱う)
    • 他のマシンからアクセスする場合, (a)と(b)の両方のファイルがincludeされるが,先にinclude したものが優先されるので,(b)の設定が適用される.(鯖上のファイルはEUCとして扱う)
  • 実は、ここが今回一番しんどかった設定。しかし、この設定はsambaのバージョンがあがったら無効になるかも(泣)。smb.conf 上に矛盾する設定や二重に設定が書いてあったら、どっちが優先されるか、とか、そういう仕様はどこよめば分かるんじゃろう、、

*1:間違い。こちらにあるようにマイクロソフト標準キャラクタセットを含むコード「eucJP-ms」に定義する必要がある。でないと全角チルダ「〜」が文字化けする

*2:正確な原因は不明