上書きコピーで読み取り専用属性が消える
KB番号 | J0103 |
最終更新日 | 2001/07/21 |
作成者 | はせがわようすけ |
最終更新者 |
対象
この文書は、以下のプロダクトに付いて説明したものです。
- Samba 2.0.x
- Windows NT 4.0
- Windows 2000
現象
WindowsNT/2000 から Sambaサーバ上にすでに存在するファイルと同名の、読み取り専用の属性のついたファイルを上書きコピーすると、読み取り専用属性が消えてしまいます。 なお、サーバ上に同名ファイルが存在しない(上書きでない)、通常のコピーでは読み取り専用属性はただしく保持されます。
また、Windows98SE から上書きコピーした場合にはこの現象は発生しません。
原因
これは、Samba と WindowsNT における SMB パケットの扱いの差異に起因すると思われます。
上書きコピー時に Samba サーバで SMB パケットを解析すると、以下のようになっていることがわかりました。
- 既存ファイルの読み取り専用属性を落とすリクエストを受信(読み取り専用属性が付いているファイルのみ)
- 属性を変更後、コピーを実行
- コピー完了後は属性を変更するリクエストは受信されない
おそらく Windows NT 同士で上書きコピーを行ったときには、このような複数のリクエストに分断されることはないと考えられます。 Samba では、Windows NT と最終的な結果が同じであれば、その過程のパケットが異なっても構わない、という方針で開発されており、上書きコピーにおいてもこのように複数のリクエストに分断されてそれぞれ処理されています。ところが、最終的に属性を設定するリクエストを受信していないため、結果として上書きコピー完了後は、常にファイルは読み取り専用属性のついていない(読み書き可能な)状態となります。
これらより推測される仮説は二つあります。
- Samba が request を分断させてしまっていること自体が悪い。 なので対処法はもっと抜本的なものになり、現状の枠組みでは対処不能と考えるべき。
- Samba が request を取りこぼしてしまっているのが悪い。 分断しても最後に属性復活 request を送らせることが可能なので、そういう対処であれば比較的容易に対処可能。
仮説段階から脱却するためにはもっと SMB packet を追って調べる必要があるので、その方面に明るくて気力体力のある方に委ねようとしたのですが、現状誰も手を挙げていないという状況です。
対処策
現在のバージョンの Samba では、これは Samba を使う上での制限事項となります。
現在、原因と対策を調査中です。
この技術情報は sugj-tech:3667, samba-jp:10253 からの一連のスレッドの議論を元に作成されています。