「:」や「¥」を含むファイル、ディレクトリにアクセスできない
KB番号 | J0031 |
最終更新日 | 2001/06/30 |
作成者 | たかはしもとのぶ |
最終更新者 |
対象
この文書は、以下のプロダクトに付いて説明したものです。
- Samba 2.0.7 日本語版リリース2.2
- Samba 2.0.9 日本語版リリース1.0
- Samba 2.0.7
現象
Sambaの共有中に「:」や「\」などのWindows側でファイル名として利用できない文字を含むファイル名やディレクトリ名が存在した場合、それらにアクセスすることができない、もしくはディレクトリ内のファイルにアクセスできないといった不具合が発生します。
原因
これはSamba 2.0.7の不具合になります。
Sambaの共有中に「:」や「\」などのWindows側でファイル名として利用できない文字を含むファイル名やディレクトリ名が存在した場合、それらのファイル名は「~XX」を含む形式に置き換えられてWinsdows側に渡されます。 逆に Windows 側から「~XX」形式のファイル名を受け取ったら、元のファイル名に戻した上でUNIX上のファイルにアクセスする必要があります。 しかし、Windows側から受け取った「.../hoge~XX/...」という形のパス名を元に戻す際の処理に不具合があり、問題の事象が発生しています。
例えば「hoge_XX/abcdefgh」というフルパス名を受取った場合、Sambaはこれを一旦「hoge_XX」「\0」「abcdefgh」という要素に分割します。しかし、このパス名の区切り文字を「\0」から「/」に戻す際に、単純に元の位置に「/」を書いてしまいます。 このため、「hoge_XX」が「0123456789」のように長くなる場合、得られる復元文字列は「0123456/89」「\0」「defgh」となり、後続の文字列が壊されてしまいます。
逆に「hoge_XX」が「012」のように短くなる場合、得られる復元文字列は「012」「\0」「_XX/abcdefgh」となり、後続の文字列が完全に失われてしまいます。
対処策
Samba 2.0.7日本語版リリース2.2は以下の暫定パッチにて対応しました。この仕様が問題となる場合はこのパッチをソースに適用した上で、再コンパイルを行なってください。なお、このパッチはSamba 2.0.10日本語版リリース1.0にて統合されました。 またSamba 2.0.7オリジナル版およびリリース2.2以前のSamba 2.0.7日本語版に対しても、同様のロジックを適用することで、この問題を修正することが可能だと考えられます。 samba-2.0.7-ja-2.2_mangled-name.patch
この技術情報は sugj-tech:3012 からの一連のスレッドの議論を元に作成されています。