coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

WebDAVで気になること

2007-02-17 00:45:52 | Apache httpd
Apache httpd 2.2.4 で WebDAV を実行できるようになりましたが、WebDAV を利用してファイルを書き込みにいくと作成されたファイルのパーミッションは
# ls -l /home/data/davhome/dav/test001.txt
-rw-r--r-- 1 www www ...................
#

となって、同じグループに属する複数のユーザで利用するときに、coLinux 側から修正できません。
# umask
0022
#

だからだと思います。これは通常は変更しません。

しかし umask を変更する httpd のディレクティブはないみたいです。確か Apache httpd 1.3.37 あたりで mod_dav を持ってくるときにソースを見たら open() が直接使ってあったので、その直前に umask(00002) とか行えばできそうです。httpd-2.2.4/modules/dav/ 以下を調べると open()がありません。おそらく Apache httpd の module に入ったときに変更があり、変わりに
apr_file_open()

が使われているようです。

http://dev.ariel-networks.com/apr/apr-tutorial/html/apr-tutorial-5.html
によると、APR_OS_DEFAULT (0666 らしいです)が使えるらしいので、dav/fs 内を調べたところ、repos.c にそれらしき記述が。
/* ### do we need to deal with the umask? */
status = apr_file_open(&outf, dst, APR_WRITE | APR_CREATE | APR_TRUNCATE
                       | APR_BINARY, perms, p);

ここは、dav_fs_copymove_file() 内です。ここに
umask(00002);

と入れてみます。しかしこれははずれ。さらに dav_fs_open_stream() あたりにそれらしき記述があるので、この関数内の最初に umask(00002); を入れて、Windows XP からこのフォルダに何かファイルをコピーしたところ
# ls -l /home/data/davhome/dav/test001.txt
-rw-rw-r-- 1 www www ...................
#

これで一応うまくいきました。実際には、1回ここを通れば以降はすべてこの umask が有効になり、何回も umask を実行してしまうのであまり良い修正ではありませんし、他に影響を与えないように終わったら元に戻しておかないといけないと思いますので、すごくいい加減ですが実験なのでこれで OK です。

忘れないように書いておきますが、ソースを修正したら httpd-2.2.4/ で、
$ make
...........
# make install 
...........
# /etc/init.d/httpd stop
# /etc/init.d/httpd start
#

のようにしてから試します。その際、/usr/local/httpd224/conf 以下の設定は変更されず、/usr/local/httpd224/conf/original 以下が置き換わるだけです。便利ですね。

coLinux 側で、group 名 www のファイルを各ユーザが扱えるようにするには、
# lgroupmod -M espiya www

$ groups espiya
espiya: user www

$ newgrp www 

みたいなコマンドを使うわけです。フォルダ(coLinux 側ではディレクトリ) の場合も1回 umask を通ってしまえばこちらが有効になります。

こんな修正がお気楽にできるのも、家庭内の coLinux 環境で、Apache httpd をソースからインストールしたからで
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする