HomeTravel ReportLocal FoodRail&BusAirportMileagemiscAbout Me
TechWiki
Updated : January 2011

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
後者の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>




Copyright(c) 2012-2013 T.F.T. All rights reserved.