2008年11月20日木曜日

Samba + DFS + Vista

ここしばらく調査していたSambaのDFSの問題をようやく修正した。
結局、修正としては1行パッチだったが、たどり着くまで非常に苦労した。

https://bugzilla.samba.org/show_bug.cgi?id=5909


問題発生の条件としては次のとおり
1. MS-DFS用のリンクとして、日本語を含むリンク名を作成する。
# ln -s msdfs:192.168.1.10\share DFSリンク

2. Vistaでドメインログオンしたユーザーで、SambaのDFSルート共有を
ネットワークドライブに割り当てる(Z:など)

3. ユーザーでドメインログオンし、スタートメニューの右クリックから、エクスプローラーを起動
ネットワークドライブから、DFSリンクをクリックすると、「ネットワークパスが見つかりません。」の
エラーが発生。

不思議なことに、XPでは発生せず、VistaでもマイネットワークからDFSリンクにアクセスすると問題が発生しないという...。

原因としては、SambaがDFSリンク名を格納したパケット内で、DFSリンクのパス名の数値を格納する箇所に、UCS-2のバイト数ではなく、UTF-8(unix charset) * 2のバイト数を格納していたことが原因だった。
そのために、ASCIIだけのDFSリンクでは、バイト数は文字数 * 2なので、問題が発生しない。

パケットキャプチャを見比べても、一見、ASCIIだけのリンクも日本語を含むリンクも、パケットの内容として間違っているように見えなかったので、問題箇所の特定に時間がかかった。

MicrosoftのオープンプロトコルドキュメントのDFSプロトコルを参照しながら、いろいろ比較をしていって、ようやく格納されているバイト数がおかしいことに気がついた。
このドキュメントが無かったら、正しい値の確証が持てなかっただろうから、挫折していたかも。
これからは、もう少し参考にしてみよう。

今回参考にしたDFSのプロトコルドキュメントは下記から。
http://msdn.microsoft.com/ja-jp/library/cc202172(en-us).aspx


0 件のコメント:

コメントを投稿