apache2.2にmod_auth_mysqlを追加。


どうも、最近そわそわしているたかとしです。


なんか会社に不穏な空気(?)が…



本題。


先日jail内にapache2.2をインストールしましたが、それにBASIC認証のモジュールを追加しました。

手順

1.公式サイトからダウンロード。
http://sourceforge.net/projects/modauthmysql/

2.コンパイルエラーが発生するらしいので、パッチファイルをダウンロード。

      • mod_auth_mysql.c.orig 2005-06-23 01:17:45.000000000 +0900
      1. mod_auth_mysql.c 2006-12-19 19:33:25.106795000 +0900

@@ -206,7 +206,7 @@
#define SNPRINTF apr_snprintf
#define PSTRDUP apr_pstrdup
#define PSTRNDUP apr_pstrndup

  • #define STRCAT ap_pstrcat
  1. #define STRCAT apr_pstrcat

#define POOL apr_pool_t
#include "http_request.h" /* for ap_hook_(check_user_id | auth_checker)*/
#include "ap_compat.h"
@@ -237,7 +237,7 @@
#define SNPRINTF ap_snprintf
#define PSTRDUP ap_pstrdup
#define PSTRNDUP ap_pstrndup

  • #define STRCAT ap_pstrcat
  1. #define STRCAT apr_pstrcat

#define POOL pool
#include
#include "ap_sha1.h"
@@ -589,87 +589,87 @@
static
command_rec mysql_auth_cmds[] = {
AP_INIT_TAKE1("AuthMySQLHost", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlhost),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlhost),

OR_AUTHCFG, "mysql server host name"),

AP_INIT_TAKE1("AuthMySQLPort", ap_set_int_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlport),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlport),

OR_AUTHCFG, "mysql server port number"),

AP_INIT_TAKE1("AuthMySQLSocket", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlsocket),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlsocket),

OR_AUTHCFG, "mysql server socket path"),

AP_INIT_TAKE1("AuthMySQLUser", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqluser),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqluser),

OR_AUTHCFG, "mysql server user name"),

AP_INIT_TAKE1("AuthMySQLPassword", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlpasswd),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlpasswd),

OR_AUTHCFG, "mysql server user password"),

AP_INIT_TAKE1("AuthMySQLDB", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlDB),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlDB),

OR_AUTHCFG, "mysql database name"),

AP_INIT_TAKE1("AuthMySQLUserTable", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlpwtable),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlpwtable),

OR_AUTHCFG, "mysql user table name"),

AP_INIT_TAKE1("AuthMySQLGroupTable", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlgrptable),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlgrptable),

OR_AUTHCFG, "mysql group table name"),

AP_INIT_TAKE1("AuthMySQLNameField", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlNameField),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlNameField),

OR_AUTHCFG, "mysql User ID field name within User table"),

AP_INIT_TAKE1("AuthMySQLGroupField", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlGroupField),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlGroupField),

OR_AUTHCFG, "mysql Group field name within table"),

AP_INIT_TAKE1("AuthMySQLGroupUserNameField", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlGroupUserNameField),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlGroupUserNameField),

OR_AUTHCFG, "mysql User ID field name within Group table"),

AP_INIT_TAKE1("AuthMySQLPasswordField", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlPasswordField),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlPasswordField),

OR_AUTHCFG, "mysql Password field name within table"),

AP_INIT_TAKE1("AuthMySQLPwEncryption", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlEncryptionField),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlEncryptionField),

OR_AUTHCFG, "mysql password encryption method"),

AP_INIT_TAKE1("AuthMySQLSaltField", ap_set_string_slot,

  • (void*) APR_XtOffsetOf(mysql_auth_config_rec, mysqlSaltField),
  1. (void*) APR_OFFSETOF(mysql_auth_config_rec, mysqlSaltField),

OR_AUTHCFG, "mysql salfe field name within table"),

/* AP_INIT_FLAG("AuthMySQLKeepAlive", ap_set_flag_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlKeepAlive),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlKeepAlive),

OR_AUTHCFG, "mysql connection kept open across requests if On"),
*/
AP_INIT_FLAG("AuthMySQLAuthoritative", ap_set_flag_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlAuthoritative),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlAuthoritative),

OR_AUTHCFG, "mysql lookup is authoritative if On"),

AP_INIT_FLAG("AuthMySQLNoPasswd", ap_set_flag_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlNoPasswd),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlNoPasswd),

OR_AUTHCFG, "If On, only check if user exists; ignore password"),

AP_INIT_FLAG("AuthMySQLEnable", ap_set_flag_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlEnable),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlEnable),

OR_AUTHCFG, "enable mysql authorization"),

AP_INIT_TAKE1("AuthMySQLUserCondition", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlUserCondition),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlUserCondition),

OR_AUTHCFG, "condition to add to user where-clause"),

AP_INIT_TAKE1("AuthMySQLGroupCondition", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlGroupCondition),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlGroupCondition),

OR_AUTHCFG, "condition to add to group where-clause"),

AP_INIT_TAKE1("AuthMySQLCharacterSet", ap_set_string_slot,

  • (void *) APR_XtOffsetOf(mysql_auth_config_rec, mysqlCharacterSet),
  1. (void *) APR_OFFSETOF(mysql_auth_config_rec, mysqlCharacterSet),

OR_AUTHCFG, "mysql character set to be used"),

{ NULL }

3.以下コマンド実行。

% tar zxvf mod_auth_mysql-3.0.0.tar.gz
% cd mod_auth_mysql-3.0.0
% patch -p0 < ../mod_auth_mysql.c.patch
% /usr/local/sbin/apxs -c -L/usr/local/lib/mysql -I/usr/local/include/mysql lmysqlclient -lm -lz mod_auth_mysql.c
% apxs -i mod_auth_mysql.la

4.httpd.confに以下を追加。

LoadModule mysql_auth_module modules/mod_auth_mysql.so
※mod_auth_basic.soの前に記述しなきゃだめみたい。

5.httpd.confに以下を追加。(というかvhost/に01.mysql.authを作成して記述)

AuthMySQLEnable On
AuthMySQLSocket /var/lib/mysql/mysql.sock
AuthMySQLHost host_name
AuthMySQLUser auth_user_name
AuthMySQLPassword *********
AuthMySQLDB auth
AuthMySQLUserTable user
AuthMySQLNameField name
AuthMySQLPasswordField password
AuthMySQLPwEncryption sha1
AuthMySQLNoPasswd Off
AuthGroupFile /dev/null
AuthName "Enter your ID and password"
AuthType Basic
require valid-user



追記。

上記ですが、動かなかったので結局portsからmod_auth_mysql_anotherをインストール。
んで上記設定をすると動きました。