Home > Apacheについて | Linux | 研究について > apacheモジュールでconfigをcreateする時の注意する事

apacheモジュールでconfigをcreateする時の注意する事


apacheモジュールで必須のconfig構造体を作成する作業。

これは、通常1.3系ではモジュール読み込み構造体(MODULE_VAR_EXPORT等)の3番目にディレクトリ毎のconfig、5番目にserver毎のconfigを作成する関数指定する。

2系の場合は、モジュール読み込み構造体(AP_MODULE_DECLARE_DATA等)の2番目にディレクトリ毎のconfig、4番目にserver毎のconfigを作成する関数指定する。

ここで注意しなければならないのが、configを作成した後、command_rec構造体から具体的なconfの値を設定していく時の扱い方。

ディレクトリ毎に使用するconfigは、command_recに登録されている関数でそのconfigの構造体を引き継ぐには以下のように実装する。

static const char *
set_sample_dir_config(cmd_parms *cmd, void *dir_config_fmt, char *arg)
{
    SAMPLE_D_CONF *pSampleDirConf = (SAMPLE_D_CONF *)dir_config_fmt;

上記のように実装することで、configをcreateする関数で作成したconfig保存用の構造体を引き継ぐことができるが、serverのconfigは引継ぎ方が違う。

以下のように、引き継ぐ。

static const char *
set_sample_server_config(cmd_parms *cmd, void *server_config_fmt, char *arg1)
{
    SAMPLE_S_CONF *pSampleServerConf;
    pSampleServerConf =
        (SAMPLE_S_CONF *)ap_get_module_config(cmd->server->module_config, &sample_module);

このように、「ap_get_module_config」を使って構造体を引き継ぐ必要がある。

なお、実際にrequest_recに対して処理するhook関数やhandler等では、ディレクトリ毎とサーバ毎のcommand_recで具体的な値を設定した後の構造体を「ap_get_module_config」を使って読み込む。

例えば、access_checkerの場合だと以下のようになる。

static int sample_access_checker(request_rec *r)
{
    SAMPLE_S_CONF *pSampleServerConf;
    SAMPLE_D_CONF *pSampleDirConf;

    pSampleServerConf =
        (SAMPLE_S_CONF *)ap_get_module_config(r->server->module_config, &sample_module);

    pSampleDirConf =
        (SAMPLE_D_CONF *)ap_get_module_config(r->per_dir_config, &sample_module);

結構ひっかかったとこなので、覚書も含めて書いておいた。

コメント:2

okn 09-09-19 (土) 9:41

靴の写真があって、なかなかいい感じの体裁ですね。

matsumoto_r 09-10-01 (木) 10:27

プログラムとかばっかりだと、あまりにさびしい感じがしたので・・・^^;

コメントフォーム
Remember personal info

CAPTCHA


トラックバック:0

このエントリーのトラックバックURL
http://blog.matsumoto-r.jp/wp-trackback.php?p=609
Listed below are links to weblogs that reference
apacheモジュールでconfigをcreateする時の注意する事 from 人間とウェブの未来

Home > Apacheについて | Linux | 研究について > apacheモジュールでconfigをcreateする時の注意する事

検索
フィード
メタ情報

Return to page top