Apache2.2の各フックで動くモジュールのファイル一覧

フックの順番はてきとう(処理順ではない)です。(あとで気が向いたら直します。)
↑なるべく順番になるように直してみた。けど順番は無保証にしときます。
あとたぶん標準のモジュールだけのはずだけどなんかが紛れ込んでるかも。

これの出しかたはエントリ下に書いておきます。

hook source file
pre_config mod_logio.c mod_log_config.c prefork.c mod_rewrite.c mod_headers.c mod_dbd.c mod_proxy.c
test_config mod_so.c
open_logs prefork.c core.c mod_log_config.c
post_config mod_include.c mod_cgi.c core.c mod_ext_filter.c mod_headers.c mod_proxy.c mod_proxy_balancer.c mod_mime.c mod_dav.c mod_status.c mod_rewrite.c mod_auth_digest.c mod_dbd.c
child_init mod_rewrite.c mod_auth_digest.c mod_dbd.c mod_log_config.c mod_proxy.c mod_proxy_balancer.c mod_status.c core.c
create_connection core.c
process_connection http_core.c
pre_connection mod_dumpio.c mod_logio.c core.c
pre_mpm core.c
create_request core.c http_core.c
post_read_request mod_headers.c mod_proxy.c mod_auth_digest.c mod_setenvif.c
translate_name mod_rewrite.c mod_proxy.c mod_alias.c mod_userdir.c mod_vhost_alias.c core.c
map_to_storage mod_proxy.c http_core.c http_core.c core.c
header_parser mod_setenvif.c
access_checker mod_authz_host.c core.c
check_user_id mod_auth_basic.c mod_auth_digest.c mod_authn_default.c
auth_checker mod_authz_owner.c mod_authz_groupfile.c mod_authz_user.c mod_authz_dbm.c mod_authz_default.c
type_checker mod_negotiation.c mod_mime.c core.c
fixups core.c mod_proxy.c mod_rewrite.c mod_dav.c mod_auth_digest.c mod_env.c mod_negotiation.c mod_alias.c mod_dir.c mod_speling.c mod_rewrite.c mod_headers.c mod_include.c
insert_filter core.c mod_filter.c mod_expires.c mod_headers.c
handler mod_proxy.c mod_proxy_balancer.c mod_hiload_cache.c mod_autoindex.c mod_asis.c mod_cgi.c mod_negotiation.c mod_imagemap.c mod_info.c mod_dav.c mod_status.c mod_rewrite.c mod_actions.c core.c
log_transaction mod_log_config.c mod_logio.c

ちなみにどうやって出したかというと、適当なモジュールを作って下記のようにapr_hook_debug_enabledにtrue値を入れるだけです。

apr_hook_debug_enabled = 1;

なんでこれで表示されるのかというと、srclib/apr-util/include/apr_hooks.h の 82 行目あたりの APR_IMPLEMENT_EXTERNAL_HOOK_BASE の定義の中に書いてあります。

     83     if(apr_hook_debug_enabled) \
     84         apr_hook_debug_show(#name,aszPre,aszSucc); \
     85     } \

隠しコマンドみたいだなぁ。

APRのapr_time_tはmicrosecondsだぜ

time_tは秒数だけど、apr_time_tはマイクロ秒数なのね。
秒数を取るには apr_time_sec(変数) ってやらないとだめみたい。

int interval_sec = 10;
apr_time_t start = apr_time_now();
// do something
apr_time_t end = apr_time_now();
if (end - start > interval) {
}

↑これは間違い。
interval_secが秒数なのに、end - start がマイクロ秒数だから。

int interval_sec = 10;
apr_time_t start = apr_time_now();
// do something
apr_time_t end = apr_time_now();
if (apr_time_sec(end) - apr_time_sec(start) > interval) {
}

ってやらないと秒数にならない。

OpenID 2.0 で setup_needed が返ってきたときにどうすればいいか

昨日の記事で、OpenID 1.1 の際にsetup_neededを返す場合にはuser_setup_urlを返せばいいんだよっていうのをid:ZIGOROuさんから教えてもらったのですが、OpenID 2.0 でsetup_neededが返ってきた場合にはuser_setup_urlがないのでどうしたらいいのかがわかりません。

と思ったのですが下記のURLの説明を見ると、その場合にはRPは「checkid_setupモードでやりなおすべきである」って書いてありました。
でも自信がない…。この理解で合ってるんだろうか…。

http://openid.net/specs/openid-authentication-2_0.html#rfc.section.10.2

もしそうであれば、Net::OpenID::ServerのSYNOPSISは下のようにuser_setup_urlが取れなかった場合のsetup_needed modeの際にcheckid_setupをやりなおす分岐を示してやるべき(だと思うんだですがどうでしょう)。

         if (my $setup_url = $csr->user_setup_url) {
              # redirect/link/popup user to $setup_url
         } elsif ($csr->message->mode eq 'setup_needed') {
              # re-construct checkid_setup mode
         } elsif ($csr->user_cancel) {
              # restore web app state to prior to check_url
         } elsif (my $vident = $csr->verified_identity) {
              my $verified_url = $vident->url;
              print "You are $verified_url !";
         } else {
              die "Error validating identity: " . $csr->err;
         }

ちなみに、mixiなどはOpenID 2.0でcheckid_immediateしても、setup_neededとuser_setup_urlが返ってくることから、おそらくNet::OpenID::Serverのバージョン1.1を使ってるんじゃまいか(あくまで予想)。