ここしばらく調査していた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 件のコメント:
コメントを投稿