Apache2.2 mod_auth_oracle 1.1.1
Serg Oskin氏によりApacheのベーシック認証のユーザ、グループの管理をOracleを使用して行うモジュール。
ダウンロード
Current unofficial CVS Apache webserver binaries and module binaries
http://www.gknw.net/development/apache/httpd-2.2/win32/modules/mod_auth_oracle-1.0-2.2.3-w32.zip 17-Aug-2006 15:2629K
http://oskin.ru/pub/linux/db/oracle/mod_auth_oracle.html
http://oskin.ru/pub/linux/db/oracle/
mod_auth_oracle-1.1.1.tar.gz 14-Apr-2005 00:00 17K後者のmod_auth_oracle-1.1.1を使用する。Apache2.0, Oracle9iでの稼動確認が済んでいるようであるが、Apache2.2, Oracle10g環境では動作しないのでソースを修正してリビルドする。
修正箇所
#ifdef OCI7 でOracle7対応コードがあるが、現在では不要であるので削除する。(12箇所)
#include <http_request.h> を追加
#include <ap_compat.h> に代えて #include <apr_strings.h>に変更
crypt関数を使用している箇所「sent_pw = (char*)crypt(sent_pw, real_pw);」 をコメントアウトして「;」行を追加する。(Auth_Ora_encrypted=on, cryptを指定してもoffと同じ動作となる。→off, md5の2種類のみが使用できる。)
MODULE_VAR_EXPORT を AP_MODULE_DECLARE_DATA に変更(1箇所)
ap_palloc を apr_palloc に変更(7箇所)
ap_snprintf を apr_snprintf に変更(10箇所)
その他
ユーザIDからパスワードをselectする処理で、大小文字の識別がされているが、識別しないよう(Upper or Lower関数で)にselect文を変更する方が良い(get_ora_pw関数)。
ビルド方法
コンパイルオプション例
/O2 /I "C:\Develop\ref\Apache2.2\include" /I "C:\Develop\ref\OCI\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "MOD_AUTH_ORACLE_EXPORTS" /D "_WINDLL" /FD /EHsc /MD /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:promptリンカオプション例
/OUT:"Release\mod_auth_oracle.so" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Develop\ref\Apache2.2\lib" /LIBPATH:"C:\Develop\ref\OCI\lib\MSVC\VC8" /DLL /MANIFEST /MANIFESTFILE:"Release\mod_auth_oracle.so.intermediate.manifest" /DEBUG /PDB:"c:\Develop\src\mod_auth_oracle\Release\mod_auth_oracle.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /MACHINE:X86 /ERRORREPORT:PROMPT libhttpd.lib libapr-1.lib libaprutil-1.lib oci.lib oraocci10.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
Oracleの設定
アクセスするユーザ、パスワード管理テーブルを作成する。パスワードはMD5でHashした値を設定する。
(アクセスするユーザはSELECT権限があれば十分であるので、テーブルのownerとは別に用意したほうが良い。)
create user dbuser identified by dbpasswd
default tablespace users
temporary tablespace temp
quota unlimited on users;
grant connect, resource to dbuser;
connect dbuser/dbpasswd
create table pwdtable(
userid varchar2(20),
passwd varchar2(50)
);
insert into pwdtable values('testuser1', '41da76f0fc3ec62a6939e634bfb6a342');
commit;
Apache2.2の構成
ビルドして作成された「mod_auth_oracle.so」を<Apache>/modulesに入れる。
<Apache>/conf/httpd.confに以下を参考に追加する。
LoadModule auth_oracle_module modules/mod_auth_oracle.so
<IfModule auth_oracle_module>
<Directory "C:/Apache2.2/htdocs/limited">
Auth_Ora_home C:/oraclexe/app/oracle/product/10.2.0/server # Oracleホーム
Auth_Ora_dbuser dbuser # Oracleユーザ
Auth_Ora_dbpasswd dbpasswd # Oracleパスワード
Auth_Ora_encrypted md5 # MD5 Hash(no:plain text)
Auth_Ora_SID XE # Oracle SID
Auth_Ora_pwd_table pwdtable # テーブル名
Auth_Ora_uid_field userid # ユーザID列名
Auth_Ora_pwd_field passwd # パスワード列名
AuthName "Restricted"
AuthType basic
<Limit GET POST>
require valid-user
</Limit>
</Directory>
</IfModule>