FreeBSDで運用する(その13)
今度はWWWユーザの設定である。
先ず、/etc/groupを変更して、WWWユーザを影舞ユーザグループにも追加する。
kagemai:*:1002: ↓ kagemai:*:1002:www
ちなみに、FreeBSD 5.4では/etc/passwdにWWWユーザが既に登録されている(実際には、apacheをインストールしたときに追加される)。
www:*:80:80:World Wide Web Owner:/usr/local/www:/usr/sbin/nologin
qmail上でWWWユーザがメールを受信したときに、指定したプログラムを実行するためには~www/.qmailを次のように記述する。
#↓これはデバッグ用 #|cat >> ~/mail.txt #↓これはプログラム実行用 |ruby ~/mailrcv.rb
そして、WWWユーザがメールを受信したときに実行するrubyスクリプトの~www/mailrcv.rbを以下のように記述する。
#!/usr/bin/env ruby =begin kagemai@KAGEMAI.LOCALDOMAIN.co.jp から www@KAGEMAI.LOCALDOMAIN.co.jp に転送されたバグ報告メールを投稿する。 詳細は mailtrn.rb を参照のこと。 =end $magic_guid = "{322A5CD3-8A74-4c2a-A988-18B65C57CE6B}" $kagemai_dir = "/usr/local/www/htdocs/kagemai" $project_dir = "#{$kagemai_dir}/project" $kagemai_mail = "/usr/local/bin/ruby #{$kagemai_dir}/bin/mailif.rb" =begin nameに一致するプロジェクトを検索する。 =end def match_project(name) Dir["#{$project_dir}/*"].each do |dir| dir.gsub!("#{$project_dir}/", "") if (name == dir) return true end end return false end =begin メールの X-Kagemai-Mail-Transfer が影舞ユーザか? Subject が "[PROJECT[:<BTS#>]]"(例:"[test:263]")に一致するか? をチェックする。 =end def check_kagemai(lines) project = "" lines.each do |line| if (line =~ /^X-Kagemai-Mail-Transfer: /) if ($' != $magic_guid) return "" end elsif (line =~ /^Subject: /) if ($' =~ /^.*?\[(.*?)[:\]]/) if (match_project($1)) project = $1 else return "" end else return "" end elsif (line == "") return project end end return project end =begin linesで指定された報告をprojectに投稿する。 =end def call_kagemai(lines, project) IO.popen("#{$kagemai_mail} #{project}", "w") do |kagemai| in_header = true lines.each do |line| if (in_header) if (line =~ /^Subject: /) if ($' =~ /^.*?\[.*?\]\s*?/) line = "Subject: #{$'}" end elsif (line == "") in_header = false end end kagemai.puts "#{line}\n" end end end #ここ↓からメイン lines = STDIN.read.split(/\n/) # メールを文字列配列に読み込む project = check_kagemai(lines) # メールの内容をチェック if (project != "") call_kagemai(lines, project) # エラーがなかったら影舞に投稿 end exit 0
qmailのセキュリティでは、以下のようにファイルのパーミッションを変更して置かないと、正常に動作しないので注意する必要がある。
# cd ~www # chown www:www .qmail mailrcv.rb # chmod 600 .qmail mailrcv.rb
これで、WWWユーザの設定は完了である。