mod_datetimelimit22(2.2系統用)
元ネタはコチラ。
この練習用モジュールを Apache 2.2 で利用できるよう移植してみました。
ただ、劣化移植なのでマルチスレッド環境で動かす場合は(別途)考慮が必要です。
ソースを掲載すると長くなるので差分ダケ。分かりやすいように少しだけ改変していますが、何が変わったかは容易に判断できるかと思いますので参考程度に、ということで。
--- mod_datetimelimit13.c 2009-06-08 16:29:39.314327000 +0900 +++ mod_datetimelimit22.c 2009-06-08 16:29:39.481327000 +0900 @@ -39,14 +40,14 @@ char *end_location_softbank; } datetimelimit_config; -module MODULE_VAR_EXPORT datetimelimit_module; +module AP_MODULE_DECLARE_DATA datetimelimit_module; /************************************************************************** define of main function **************************************************************************/ -static void *datetimelimit_cdir_config( pool *pool, char *path ) +static void *datetimelimit_cdir_config( apr_pool_t *pool, char *path ) { - datetimelimit_config *cfg = (datetimelimit_config *)ap_pcalloc( pool, sizeof( datetimelimit_config ) ); + datetimelimit_config *cfg = (datetimelimit_config *)apr_pcalloc( pool, sizeof( datetimelimit_config ) ); cfg->start_location_pc = NULL; cfg->start_location_docomo = NULL; @@ -65,7 +66,7 @@ } /*************************************************************************/ -static const char *set_datetimelimit_start_location_pc( cmd_parms *parms, void *myconfig, char *Buffer ) +static const char *set_datetimelimit_start_location_pc( cmd_parms *parms, void *myconfig, const char *Buffer ) { datetimelimit_config *cfg = (datetimelimit_config *)myconfig; @@ -79,13 +80,13 @@ return "duplicate entry for DateTimeLimitStartLocationURL_PC."; } - cfg->start_location_pc = ap_pstrdup( parms->pool, Buffer ); + cfg->start_location_pc = (char *)apr_pstrdup( parms->pool, Buffer ); return NULL; } /*************************************************************************/ -static const char *set_datetimelimit_start_location_docomo( cmd_parms *parms, void *myconfig, char *Buffer ) +static const char *set_datetimelimit_start_location_docomo( cmd_parms *parms, void *myconfig, const char *Buffer ) { datetimelimit_config *cfg = (datetimelimit_config *)myconfig; @@ -311,12 +312,11 @@ int Result; Result = 0; - - agent = ap_table_get( rec->headers_in, "User-Agent" ); + agent = apr_table_get( rec->headers_in, "User-Agent" ); @@ -574,7 +601,7 @@ } } - ap_table_setn( rec->headers_out, "Location", url ); + apr_table_setn( rec->headers_out, "Location", url ); return HTTP_MOVED_TEMPORARILY; } @@ -674,12 +729,12 @@ **************************************************************************/ static int datetimelimit_is_digit( const char *Buffer ) { - if( !ap_isdigit( *Buffer ) ) + if( !apr_isdigit( *Buffer ) ) { return 0; } - while( ap_isdigit( *( ++Buffer ) ) ) + while( apr_isdigit( *( ++Buffer ) ) ) { } @@ -689,53 +744,47 @@ /************************************************************************** Dispatch list for API hooks **************************************************************************/ -static command_rec datetimelimit_cmds[] = +static const command_rec datetimelimit_cmds[] = { - { "DateTimeLimitLocationStartURL_PC", set_datetimelimit_start_location_pc, NULL, OR_LIMIT, TAKE1, - "specify location start URL for PC" }, - { "DateTimeLimitLocationStartURL_DOCOMO", set_datetimelimit_start_location_docomo, NULL, OR_LIMIT, TAKE1, - "specify location start URL for DOCOMO" }, - { "DateTimeLimitLocationStartURL_EZWEB", set_datetimelimit_start_location_ezweb, NULL, OR_LIMIT, TAKE1, - "specify location start URL for EZWEB" }, - { "DateTimeLimitLocationStartURL_SOFTBANK", set_datetimelimit_start_location_softbank, NULL, OR_LIMIT, TAKE1, - "specify location start URL for SOFTBANK" }, - { "DateTimeLimitLocationEndURL_PC", set_datetimelimit_end_location_pc, NULL, OR_LIMIT, TAKE1, - "specify location end URL for PC" }, - { "DateTimeLimitLocationEndURL_DOCOMO", set_datetimelimit_end_location_docomo, NULL, OR_LIMIT, TAKE1, - "specify location end URL for DOCOMO" }, - { "DateTimeLimitLocationEndURL_EZWEB", set_datetimelimit_end_location_ezweb, NULL, OR_LIMIT, TAKE1, - "specify location end URL for EZWEB" }, - { "DateTimeLimitLocationEndURL_SOFTBANK", set_datetimelimit_end_location_softbank, NULL, OR_LIMIT, TAKE1, - "specify location end URL for SOFTBANK" }, - { "DateTimeLimitStartDate", set_datetimelimit_start_date, NULL, OR_LIMIT, TAKE1, - "specify start DATE" }, - { "DateTimeLimitStartTime", set_datetimelimit_start_time, NULL, OR_LIMIT, TAKE1, - "specify start TIME" }, - { "DateTimeLimitEndDate", set_datetimelimit_end_date, NULL, OR_LIMIT, TAKE1, - "specify start DATE" }, - { "DateTimeLimitEndTime", set_datetimelimit_end_time, NULL, OR_LIMIT, TAKE1, - "specify start TIME" }, + AP_INIT_TAKE1( "DateTimeLimitLocationStartURL_PC", set_datetimelimit_start_location_pc, + NULL, OR_LIMIT, "specify location start URL for PC" ), + AP_INIT_TAKE1( "DateTimeLimitLocationStartURL_DOCOMO", set_datetimelimit_start_location_docomo, + NULL, OR_LIMIT, "specify location start URL for DOCOMO" ), + AP_INIT_TAKE1( "DateTimeLimitLocationStartURL_EZWEB", set_datetimelimit_start_location_ezweb, + NULL, OR_LIMIT, "specify location start URL for EZWEB" ), + AP_INIT_TAKE1( "DateTimeLimitLocationStartURL_SOFTBANK", set_datetimelimit_start_location_softbank, + NULL, OR_LIMIT, "specify location start URL for SOFTBANK" ), + AP_INIT_TAKE1( "DateTimeLimitLocationEndURL_PC", set_datetimelimit_end_location_pc, + NULL, OR_LIMIT, "specify location end URL for PC" ), + AP_INIT_TAKE1( "DateTimeLimitLocationEndURL_DOCOMO", set_datetimelimit_end_location_docomo, + NULL, OR_LIMIT, "specify location end URL for DOCOMO" ), + AP_INIT_TAKE1( "DateTimeLimitLocationEndURL_EZWEB", set_datetimelimit_end_location_ezweb, + NULL, OR_LIMIT, "specify location end URL for EZWEB" ), + AP_INIT_TAKE1( "DateTimeLimitLocationEndURL_SOFTBANK", set_datetimelimit_end_location_softbank, + NULL, OR_LIMIT, "specify location end URL for SOFTBANK" ), + AP_INIT_TAKE1( "DateTimeLimitStartDate", set_datetimelimit_start_date, + NULL, OR_LIMIT, "specify start DATE" ), + AP_INIT_TAKE1( "DateTimeLimitStartTime", set_datetimelimit_start_time, + NULL, OR_LIMIT, "specify start TIME" ), + AP_INIT_TAKE1( "DateTimeLimitEndDate", set_datetimelimit_end_date, + NULL, OR_LIMIT, "specify start DATE" ), + AP_INIT_TAKE1( "DateTimeLimitEndTime", set_datetimelimit_end_time, + NULL, OR_LIMIT, "specify start TIME" ), { NULL } }; -module MODULE_VAR_EXPORT datetimelimit_module = { - STANDARD_MODULE_STUFF, - NULL, /* module initializer */ - datetimelimit_cdir_config, /* create per-dir config structures */ - NULL, /* merge per-dir config structures */ - NULL, /* create per-server config structures */ - NULL, /* merge per-server config structures */ - datetimelimit_cmds, /* table of config file commands */ - NULL, /* [#8] MIME-typed-dispatched handlers */ - NULL, /* [#1] URI to filename translation */ - NULL, /* [#4] validate user id from request */ - NULL, /* [#5] check if the user is ok _here_ */ - datetimelimit_is_check, /* [#3] check access by host address */ - NULL, /* [#6] determine MIME type */ - NULL, /* [#7] pre-run fixups */ - NULL, /* [#9] log a transaction */ - NULL, /* [#2] header parser */ - NULL, /* child_init */ - NULL, /* child_exit */ - NULL /* [#0] post read-request */ +static void datetimelimit_register_hooks(apr_pool_t *p) +{ + ap_hook_access_checker(datetimelimit_is_check, NULL, NULL, APR_HOOK_MIDDLE); +} + +module AP_MODULE_DECLARE_DATA datetimelimit_module = { + STANDARD20_MODULE_STUFF, + datetimelimit_cdir_config, /* create per-dir config structures */ + NULL, /* merge per-dir config structures */ + NULL, /* create per-server config structures */ + NULL, /* merge per-server config structures */ + datetimelimit_cmds, /* table of config file commands */ + datetimelimit_register_hooks /* register hooks */ };
面倒くさかったのでキャストで逃げている部分は真似しないように(ぉ