2006年07月27日
[補足記事]ディレクティブ処理関数登録マクロ一覧 (apache module 開発事初め その3-2)
前回の記事で後回しにした AP_INIT_XXX() シリーズの一覧です.
AP_INIT_XXX() マクロに対する引数は全て共通で,つぎのようになります.
AP_INIT_XXX("directive", function, info, where, help)
引数の意味はそれぞれ
- directive
- 設定ファイル中で用いるディレクティブの名前.char *型.大文字小文字は無視されます.
- function
- ディレクティブ処理用の関数を指定すします.関数の型は,AP_INIT_XXX の種類によって変わります.
- info
- function() を呼び出す時に渡す情報.void *型.特に渡すものがなければ NULL を指定します.
- where
- このディレクティブが現れてよい場所の指定.int型.指定できる値のようなものがあります.
- OR_LIMIT
- httpd.conf内の <Directory> か <Location> の中か, AllowOverride Limit が指定されていれば .htaccess の中.このタイプのディレクティブの例として,Allow や Deny があります.
- OR_OPTIONS
- httpd.conf の中か,AllowOverride Options が指定されていれば .htaccess の中.このタイプのディレクティブの例として,XBitHack や CheckSpelling があります.
- OR_FILEINFO
- httpd.conf の中か,AllowOverride FileInfo が指定されていれば .htaccess の中.このタイプのディレクティブの例として,SetEnvIf や Header があります.
- OR_AUTHCFG
- httpd.conf 内の <Directory> か <Location> の中か,AllowOverride AuthConfig が指定されていれば .htaccess の中.このタイプのディレクティブの例として,AuthName や AuthDigestFile があります.
- OR_INDEXES
- httpd.conf の中か,AllowOverride Indexes が指定されていれば .htaccess の中.
- OR_ALL
- OR_XXX の条件の内いずれかを満たしている箇所.
- ACCESS_CONF
- httpd.conf 内の <Directory> か <Location> の中.
- RSRC_CONF
- httpd.conf 内の <Directory> 及び <Location> の外.
- EXEC_ON_READ
- httpd.conf の内容を実質的に変更するようなディレクティブの場合指定します.このタイプのディレクティブの例として,IFModule や IfVersion があります.
- help
- このディレクティブに関する説明.char *型.ディレクティブ使用時に書式が間違っていた場合に表示されます.
次に,AP_INIT_XXX() とそれに対するディレクティブ処理関数のプロトタイプについてそれぞれ説明します.
AP_INIT_NO_ARGS()
static const char *proc_NO_ARGS(cmd_parms *cmd, void *mconfig);- 引数を取らないディレクティブ用.
AP_INIT_RAW_ARGS()
static const char *proc_RAW_ARGS(cmd_parms *cmd, void *mconfig,
const char *args);- 引数を生の形で受け取るディレクティブ用.
- ディレクティブへの引数が,そのままの形で渡される.
AP_INIT_FLAG()
static const char *proc_FLAG(cmd_parms *cmd, void *mconfig, int bool);- On/Off のみを引数に取るディレクティブ用.
- フラグは int 型の bool 値で引き渡され,Off の場合は 0,On の場合は 0 以外になる.
AP_INIT_TAKE1()
static const char *proc_TAKE1(cmd_parms *cmd, void *mconfig,
char *word1);- 引数を一つだけ取るディレクティブ用.
AP_INIT_TAKE2()
static const char *proc_TAKE2(cmd_parms *cmd, void *mconfig,
char *word1, char *word2);- 引数を二つとるディレクティブ用.引数が2つ無いとエラーになる.
AP_INIT_TAKE3()
static const char *proc_TAKE3(cmd_parms *cmd, void *mconfig,
char *word1, char *word2, char *word3);- 引数を3つとるディレクティブ用.引数が3つ無いとエラーになる.
AP_INIT_TAKE12()
static const char *proc_TAKE12(cmd_parms *cmd, void *mconfig,
char *word1, char *word2);- 引数を 1つか2つとるディレクティブ用.
- ディレクティブへの引数が一つだけの場合,word2 には NULL が渡される.
AP_INIT_TAKE123()
static const char *proc_TAKE123(cmd_parms *cmd, void *mconfig,
char *word1, char *word2, char *word3);- 引数を1つから3つとるディレクティブ用.
引数が1つだけの場合,word2 と word3 には NULL が渡される. - 引数が2つだけの場合,word3 には NULL が渡される.
AP_INIT_TAKE13()
static const char *proc_TAKE13(cmd_parms *cmd, void *mconfig,
char *word1, char *word2, char *word3);- 引数を1つあるいは3つとるディレクティブ用.引数が2つの場合エラーになる.
- 引数が1つだけの場合,word2 と word3 には NULL が渡される.
AP_INIT_TAKE23()
static const char *proc_TAKE23(cmd_parms *cmd, void *mconfig,
char *word1, char *word2, char *word3);- 引数を2つあるいは3つとるディレクティブ用.
- 引数が2つだけの場合,word3 には NULL が渡される.
AP_INIT_ITERATE()
static const char *proc_ITERATE(cmd_parms *cmd, void *mconfig,
char *word1);- 引数の数は無制限で,それらを一つずつ処理するディレクティブ用.
- 一つの引数に対して一度,指定したディレクティブ処理関数が呼び出される.
AP_INIT_ITERATE2()
static const char *proc_ITERATE2(cmd_parms *cmd, void *mconfig,
char *word1, char *word2);- 引数の数は無制限で,それらを一つずつ処理するディレクティブ用.
- 二つめ以降の引数一つずつに対して一度,指定したディレクティブ処理関数が呼び出される.一つめの引数は呼び出しの度に渡される(word1).
- このタイプのディレクティブの例として,Allow がある.
Allow ディレクティブの場合,それに続く 'from' キーワードが word1 に渡され,'from' に続くアクセス元の指定が一つずつ切り出されて word2 に渡される.
ディレクティブ処理関数の引数の内 cmd と mconfig の意味はそれぞれ,
- cmd_parms *cmd
- ディレクティブ処理関数が処理する上で必要となる様々な変数が詰まった cmd_parms 構造体の変数です.cmd_parms 構造体のメンバには,apr_pool_t 型のポインタ(cmd->pool)や,処理するディレクティブが記述されたファイルの情報を表すメンバがあります.AP_INIT_XXX() マクロでディレクティブを登録するときにセットする info 引数は,この構造体の info メンバ変数(cmd->info) に入っています.
- void *mconfig
- ディレクトリ設定データ初期化関数(create_dir_config())で確保したデータ領域のポインタが渡されます.