[samba-jp:22679] dos charsetパラメータについて (Re: Samba4を「ふつうに」使おう!資料の公開)
TAKAHASHI Motonobu/高橋 基信
monyo @ monyo.com
2015年 11月 17日 (火) 02:01:59 JST
たかはしもとのぶです。
> オープンソース・ソリューション・テクノロジ株式会社
> 小田切です。
>
> > dos charsetについては、ソースを見る限り、プリンタ機能の一部で使われて
> > いる他、smb_iconv()関数などから参照されていると思います。
> >
> > このsmb_iconv()関数が更にラップされて……となっているようで、正直
> > 追い切れてないのですが、機能的にいうとブラウジング機能などからは
> > 呼び出されているはずだと思ってます。
>
> ソースコード読んでないですが、関係するのは 95 98 Me で2000,XP以降は関係
> ないのでは?
ちょっと時間ができたので、もう少しソースコードを調べてみました。
ちなみに、ブラウジング機能はそもそもUnicode化されていないため、
Windows NT系(2000/XP以降含む)もANSIの文字コードを使用します。
unix charset = UTF-8(デフォルト)の環境で、netbios nameパラメータや
workgroupパラメータにUTF-8の日本語文字列を指定してみましたが、
dos charsetの指定如何に関わらず、そもそも正しく動作しませんでした。
dos charset = CP932を指定しなかった場合は文字コード変換に失敗して、
文字列が(おそらく)ヌル文字列になり、指定した場合は文字化けした
文字列が表示されるため、動作に関与はしているのですが……といった
感じです。
これらのNetBIOS名を表示する前に、セキュリティ対策で危険性が高い
文字を削除する処理が行われてるっぽいため、それが原因だったと
記憶しています。
> > とはいえ、プリンタ名やコンピュータ名などで日本語を使うなど
> > しない限り影響は発生しないと思いますし、ファイルサーバ機能などでは
> > 問題は発生しないので、影響が少ないのは確かだと考えています。
>
> 同様に関係するのは 95 98 Me で2000,XP以降は関係ないのでは?
その他はソースコードを追った限りですが、max protocolパラメータで
NT1より前を指定した際の動作の一部や、古いメールスロット関連の
メッセージ呼び出し、OS/2固有の印刷関連メッセージ呼び出しなどでは、
dos charsetパラメータが関与しているっぽい感じです。
Sambaのソースコード上、dos charsetパラメータの値は、
smb_iconv_handle_reinit()関数のオプションで指定されているだけで、
この関数でどこかの領域に保存された値が、以降文字コード変換関数が
呼び出される際に、参照されるという動作になっています。
上記のようにdos charsetパラメータの値自体が直接参照はされていないと
いう実装もあり、ソースコードを追い切れていないのですが、いろいろ
コードを追ってみて、最終的にSamba内部の文字コード変換でSTR_ASCIIが
指定されている個所を中心に調べました。
> > ただ、まったく意味がないとまでは言い切れないと思っていて、日本語
> > 環境であれば、設定したほうがリスクが減るとは思いますので、一応
> > 説明には含めました。
>
> HPがHP-UX向けに、IBMがAIX向けに出しているSambaにはiconvがちゃんと入って
> いなくて、dos charset=cp932 を設定するとエラーになる、という問題があって
> もう説明しない方が良いかと思っています。
わたしも最近説明を端折ってしまってましたが、CP932云々は、
あくまでglibcもしくはGNU libiconvで実装されているiconv関数で
定義されている名称なので、ほかの実装では違いますよね…。
例えばSolarisだとCP932相当の名称はms932で、かつこれを指定しても
UTF-8との相互変換しかできない実装のため、Sambaには対応していない
とか。
dos charsetパラメータについての技術的な状況はこんな感じかなと
思ってます。
・本パラメータを適切に設定する上では、glibcもしくはGNU libiconvが
提供するiconv()関数、もしくは同等の機能を有するiconv()関数の
実装を使用する必要がある
(そのため、Linux以外の環境では、通常OS付属のiconv()関数ではなく、
別途libiconvをインストールしたうえで、Sambaがそれを使用する
ようにビルドする必要がある)
※今回の話題と外れますが、FreeBSD 9以降のOS付属のiconv()は、検証
してみる価値があると考えています。
・ファイルサーバ機能を含む大半の機能については、設定しなくても
問題は発生しないと考えられる。ただし、設定しなかった場合に
まったく影響がないとは言い切れない
上記を踏まえると、次のような感じかなと思ってます。
・上記を踏まえ、無用のトラブルを避ける意味で、Linux環境では適切に
設定しておいた方がより無難
→ただし、設定しなくても実害がでる可能性は低いと考えられる
・Linux以外の環境(iconv()関数の実装に問題がある環境)、すなわち
本パラメータを適切に設定できない環境では、デフォルト値のままで
使用しても基本的には問題ないと思われる
→問題が発生してしまった場合や気になる場合は、別途GNU libiconvを
インストールしたうえで、GNU libiconvの使用を明示した上で、Sambaを
ビルドする必要がある(が、いわゆる野良ビルドとなる懸念もあり)
--
TAKAHASHI Motonobu/高橋 基信 <monyo @ monyo.com>
@damemonyo / facebook.com/takahashi.motonobu
samba-jp メーリングリストの案内