連載
» 2007年08月14日 00時00分 公開

第9回 HFS、HFS Plusの基本的概念【後編】Undocumented Mac OS X(3/4 ページ)

[白山貴之,ITmedia]

データフォーク以外へのアクセスパスの拡張

 ファイルをオープンして、先頭から最後まで読んだとしても、読み取れるのはデータフォークにある内容だけであり、リソースフォークなどそのほかのフォークの内容は読み取れない。これは便利な一方、ファイルの操作としては不便なこともある。例えば、リスト1のような、とても単純なファイルコピーコマンドがあるとしよう。


int main( int argc, char *argv[])
{
  int c;
  FILE *fp_r = fopen( argv[1], "r" );
  FILE *fp_w = fopen( argvp[2], "w" );

  while( EOF != ( c = fgetc( fp_r ) ) )         fputc( c, fp_w );   fclose(fp_r);   fclose(fp_w); }
リスト1 単純なファイルコピーコマンド

 通常のファイルならこのプログラムでコピーできるが、リソースフォークを含むHFS Plus上のファイルではリソースフォークやファイルタイプ、クリエータといった独自の情報が欠損してしまう。UNIXのセマンティックスと整合性を損なわないようにデータフォーク以外をアクセスするための最初の手段が、パスの拡張だ。

 Mac OS Xでは、通常ファイル自身の名前で終わるパスを伸ばし、どのフォークにアクセスするかを切り替えられる。例えば、

/path/to/forked_file.dat


の場合、このパスではデータフォークにアクセスできるが、

/path/to/forked_file.dat/..namedfork/rsrc


とすることでリソースフォークへのアクセスが可能になる。あまり意味はないが、

/path/to/forked_file.dat/..namedfork/data


とすればデータフォークに明示的にアクセスできる。

 この機能を利用することで、UNIXコマンドからリソースフォークをアクセスできるようになるのだ(コラム2)。なお、この問題についてはMac OS X 10.4 (以下、Tiger)において、拡張属性(Extended Attribute)の形でさらにエレガントな解答が用意されている。

コラム2:ApacheとHFS Plus

 HFS Plusには/..namedfork/を利用したパスの拡張や、大文字小文字を区別しないファイルシステムなど通常のUNIXとは異なるものがあり、思わぬところでセキュリティホールが生じてしまう。

 例えば、Apacheの設定でリストAのようなアクセス制限をしていても、

http://myserver/foo.HtMl

などと大文字小文字を交ぜられたり、

http://myserver/foo.html/..namedfork/data

とされると、アクセスが制限されているファイルへのアクセスが成功する恐れがある。

 このため、Mac OS X標準搭載のhttpd.confにはリストBが追記されている。これは見てのとおり、パスの拡張によるアクセスやリソースフォークへのアクセスを禁止するものだ。

 また、mod_hfs_apple.so*というモジュールがデフォルトで組み込まれている。このモジュールはURLの大文字小文字を正規化することで、大文字小文字が異なるだけのファイルへのアクセスを禁止するというものだ。

 これらは標準搭載のApacheで実現されており、通常気にする必要のないことではあるが、もし何らかの理由で自前でコンパイルしたApacheや独自の設定を使う場合は注意する必要がある。

mod_hfs_apple.so:ソースコードは、こちらのURLにおいて、Darwinの一部として入手できる。

関連キーワード

Mac | Mac OS X | UNIX | BSD | オープンソース


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ