DBD-mysqlのインストール

昨日のMT4BETAのインストールですっかりPerlにMySQLコネクタをインストールし忘れていたので今度BETA4を入れる前までに用意します。

# mv DBD-mysql-4.005.tar.gz /usr/local/src/
# cd /usr/local/src
# tar zxf DBD-mysql-4.005.tar.gz
# cd DBD-mysql-4.005

ここまではいつも通りの前準備

まずPerlコマンドを利用してMakefileを作成します。
# perl Makefile.PL

Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 76.

Cannot find the file ‘mysql_config’! Your execution PATH doesn’t seem
not contain the path to mysql_config. Resorting to guessed values!
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.
Failed to determine directory of mysql.h. Use

perl Makefile.PL –cflags=-I<dir>

to set this directory. For details see the INSTALL.html file,
section “C Compiler flags” or type

perl Makefile.PL –help

…う、mysql_configへパスを通してなかったorz。

# find / -name mysql_config
/usr/local/src/mysql-5.0.18/scripts/mysql_config
/usr/local/mysql/bin/mysql_config

.cshrcを確認
set path=(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)

以上より一時的に/usr/local/mysql/binをPATHに追加

set path=(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin /usr/local/mysql/bin)

後はmakeとmake installで完了です。
# make
# make install

FedoraにPHPをソースから入れると…

MySQLだけでは操作がしんどいのでphpMyAdmin使うためにApacheとPHPをソースから入れてみました。デスクトップ環境は全てパッケージ任せですが、ローカルでテスト稼動環境作るのには公開用と同じくソースから入れているのですが、Apacheを起動しようとしたときに、

# /usr/local/apache/bin/apachectl start
httpd: Syntax error on line 53 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied

こんなエラー出るんですね。文法エラー?でconfigtestしても同じ表示だし意味不明だったのでネットで検索したらSELinuxのセキュリティーが絡んでて、自前で入れたsoライブラリが使えないように制限しているらしい。詳しいことは良く分からないので下部の参考サイトで、

結果として次のコマンドを実行することでlibphp5.soがロードできるようになりました。
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache/modules/libphp5.so

参考:
cannot restore segment prot after reloc Permission denied – Linuxシステム設定
http://ppwww.phys.sci.kobe-u.ac.jp/~akusumoto/linux/detail.php?d=config/selinux/chcon

Fedora JP 掲示板
http://bbs.fedora.jp/read.php?FID=9&TID=3278
http://bbs.fedora.jp/read.php?FID=10&TID=4759

Cannot restore segment prot after reloc Permission deniedというエラーメッセージが表示されたら,どうしたらよいのですか.
http://support.wolfram.com/mathematica/systems/linux/general/selinux.ja.html

空メールでユーザ登録

無料ケータイサイト等では空メールを送信することで利用登録するシステムがありますが、簡単に実装するとしたらこんな例があります。

1.空メールを送信。

2.メールサーバのalias若しくはforwardでスクリプトに転送。

3.スクリプトはメールのヘッダを解析し、登録完了メール返信及びDB登録を行う。

4.登録完了メールのURLからアクセスすると送られたIDの認証を行い案内する。

と、こんな感じです。

メールサーバをqmail、スクリプトをPHPとしてこんなサンプルを作ってみました。

1と4は同じPHPページml.phpを使用し、IDがない場合は空メール送信の案内。IDで認証できた場合はコンテンツを表示。
3は登録用スクリプトとしてmlreg.phpを使用。メールサーバからのみ起動される。

ml mlreg

mlreg.phpのサンプル中にあるFrom抽出は完全ではありませんが、メールの規格は実質無法地帯な状態できりがないのである程度対応できるレベルに留めておきます。

そしてqmailのaliasを使う場合
# cat /var/qmail/alias/.qmail-regist
| /usr/local/apache/htdocs/mlreg.php

このように転送先にスクリプトを設定します。
別に登録用PHPはウェブからアクセスする必要がないのでこの場所は不適切ですが…。

【2007/08/27 19:40追記】
上記プログラムはあくまで動作確認用でセキュリティに関しては一切考慮に入れておりません。
まさかそのまま使う人はいないだろうと思っているので注意事項も書かず放置しておりましたが、はてなブックマークからリンクされているのに気づき自分の愚かさと恥ずかしさで申し訳ない気持ちでいっぱいです。今後もセキュリティに関するサンプル以外はセキュリティ対策コードを含めることは少ないと思いますが、必ずどこが危険かは併記したいとおもいます。

因みに上記のプログラム内では、
ml.txt 6行目:
直接MySQLにGET引数を渡している事、これはセミコロンを挟んで閲覧者が任意のSQL文を実行できます(SQLインジェクション)。外部から取り込むパラメータには必ず内容のチェックを入れます。
ml.txt 9行目:
逆にDBから取り出したデータをそのまま表示するのも推奨できません。出力する書式に合わせて内容のチェックを行います。
ml.txt 12行目:
exsample・・・orz typoです。しかも実在するドメインですね。exsampleの方申し訳ありません。
ml.txt 16行目以降:
とりあえず表示されれば良いレベルで書いているので実際はちゃんとしたHTML書くなりしてください。
mlreg.txt 12~14行目:
ここはあまり参考にならないと思います。ヘッダー内にFromが2箇所あったりしても最初のFromを拾いますし、この部分については他所で良いライブラリが公開されています。
mlreg.txt 16~17行目:
コピペかすです… このコードはメールアラートに使っているものの流用です。その上変数名の変換忘れ
orz
mlreg.txt 22行目:
ここも$toまで用意して何故か$from[0]にしている…。どっちもどっちですが。
mlreg.txt 23~30行目:
これはauto_incrementで得たidをそのままアカウントに使用することに問題があります。つまり他の数字を使ってアクセスしたら他人の情報が表示されるという罠です。ここは連続性のないユニークIDを作成して発行するなりの工夫が必要です。(セッションハイジャックというのも厚かましいセキュリティホール)
mlreg.txt 35行目:
これも$titleではなく$subjectです。また元の文字コードを考慮していないので文字の組み合わせが悪いと誤認識するかも。実際にローカルで動作確認した時は日本語すら使ってなかったのでこのコードは跡付けです。
mlreg.txt 40行目:
ここもtypoです。

この度は大変お騒がせしました。直ぐに無意味なコードとtypoを修正したサンプルをアップします

【2007/09/23 02:20追記】
うわぁ…修正ファイルのアップを忘れてました…。一ヶ月近く経ってる。
とりあえず上記のとおりtypoと無意味なコードを省いたもので更新しています。セキュリティはまったく考慮していないので、使用するときは変数無害化とアクセス制限を追加してください。

メールサーバ上でのメール受信をトリガーとしてメールの内容を処理に使用するデータとして取り出すまでがエントリーの趣旨だったのでそれ以降の処理は端折っています。