Return-Path: Delivered-To: apmail-httpd-cvs-archive@httpd.apache.org Received: (qmail 57622 invoked by uid 500); 30 Dec 2001 06:51:22 -0000 Mailing-List: contact cvs-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cvs@httpd.apache.org Received: (qmail 57610 invoked by uid 500); 30 Dec 2001 06:51:22 -0000 Delivered-To: apmail-httpd-2.0-cvs@apache.org Date: 30 Dec 2001 06:51:21 -0000 Message-ID: <20011230065121.48538.qmail@icarus.apache.org> From: ianh@apache.org To: httpd-2.0-cvs@apache.org Subject: cvs commit: httpd-2.0/modules/filters mod_include.c mod_include.h X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N ianh 01/12/29 22:51:21 Modified: . CHANGES docs/manual/mod mod_include.html modules/filters mod_include.c mod_include.h Log: allow mod_include to handle different start/end tags instead of the default ones. Revision Changes Path 1.494 +2 -0 httpd-2.0/CHANGES Index: CHANGES =================================================================== RCS file: /home/cvs/httpd-2.0/CHANGES,v retrieving revision 1.493 retrieving revision 1.494 diff -u -r1.493 -r1.494 --- CHANGES 30 Dec 2001 04:40:40 -0000 1.493 +++ CHANGES 30 Dec 2001 06:51:20 -0000 1.494 @@ -1,5 +1,7 @@ Changes with Apache 2.0.30-dev + *) Allow mod-include to look for alternate start & end tags [Ian Holsman] + *) Introduced the ForceLanguagePriority directive, to prevent returning MULTIPLE_CHOICES or NONE_ACCEPTABLE in some cases, when using Multiviews. [William Rowe] 1.42 +42 -0 httpd-2.0/docs/manual/mod/mod_include.html Index: mod_include.html =================================================================== RCS file: /home/cvs/httpd-2.0/docs/manual/mod/mod_include.html,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- mod_include.html 30 Dec 2001 06:41:14 -0000 1.41 +++ mod_include.html 30 Dec 2001 06:51:21 -0000 1.42 @@ -41,6 +41,8 @@
  • XBitHack
  • SSIErrorMsg
  • SSITimeFormat
  • +
  • SSIStartTag
  • +
  • SSIEndTag
  • See also: Options, This directive changes the format in which date strings are displayed in note variables


    +

    SSIStartTag + directive

    + + Syntax: SSIStartTag + tag
    + Default: SSIStartTag + "<--!"
    + Context: server config, virtual + host
    + Status: Base
    + Module: mod_include + +

    This directive changes the string that mod_include looks for + to mark a include command to process

    +

    you may want to use this option if have 2 servers parsing the output of a file + each processing different comnmands (possibly at different times)

    +
    +

    SSIEndTag + directive

    + + Syntax: SSIEndTag + tag
    + Default: SSIEndTag + "-->"
    + Context: server config, virtual + host
    + Status: Base
    + Module: mod_include +

    This directive changes the string that mod_include looks for + to mark the end of a include command

    1.177 +70 -26 httpd-2.0/modules/filters/mod_include.c Index: mod_include.c =================================================================== RCS file: /home/cvs/httpd-2.0/modules/filters/mod_include.c,v retrieving revision 1.176 retrieving revision 1.177 diff -u -r1.176 -r1.177 --- mod_include.c 30 Dec 2001 01:24:14 -0000 1.176 +++ mod_include.c 30 Dec 2001 06:51:21 -0000 1.177 @@ -106,12 +106,24 @@ xbithack_off, xbithack_on, xbithack_full }; +struct bndm_t { + unsigned int T[256]; + unsigned int x; +} ; + typedef struct { char *default_error_msg; char *default_time_fmt; enum xbithack *xbithack; } include_dir_config; +typedef struct { + char *default_start_tag; + char *default_end_tag; + int start_tag_len; + bndm_t start_seq_pat; +} include_server_config; + #ifdef XBITHACK #define DEFAULT_XBITHACK xbithack_full #else @@ -216,16 +228,6 @@ * Initial code submitted by Sascha Schumann. */ -typedef struct { - unsigned int T[256]; - unsigned int x; -} bndm_t; - -/* This is the pattern matcher that holds the STARTING_SEQUENCE bndm_t - * structure. - */ -static bndm_t start_seq_pat; - /* Precompile the bndm_t data structure. */ static void bndm_compile(bndm_t *t, const char *n, apr_size_t nl) { @@ -328,8 +330,8 @@ apr_size_t len; const char *c; const char *buf; - const char *str = STARTING_SEQUENCE; - apr_size_t slen = sizeof(STARTING_SEQUENCE) - 1; + const char *str = ctx->start_seq ; + apr_size_t slen = ctx->start_seq_len; apr_size_t pos; *do_cleanup = 0; @@ -411,7 +413,7 @@ if (len) { - pos = bndm(str, slen, c, len, &start_seq_pat); + pos = bndm(str, slen, c, len, ctx->start_seq_pat); if (pos != len) { ctx->head_start_bucket = dptr; @@ -475,7 +477,7 @@ apr_size_t len; const char *c; const char *buf; - const char *str = ENDING_SEQUENCE; + const char *str = ctx->end_seq; do { apr_status_t rv = 0; @@ -2713,7 +2715,7 @@ if ((do_cleanup) && (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade))) { apr_bucket *tmp_bkt; - tmp_bkt = apr_bucket_immortal_create(STARTING_SEQUENCE, + tmp_bkt = apr_bucket_immortal_create(ctx->start_seq, cleanup_bytes); APR_BRIGADE_INSERT_HEAD(*bb, tmp_bkt); apr_brigade_cleanup(ctx->ssi_tag_brigade); @@ -3018,6 +3020,19 @@ return result; } +static void *create_includes_server_config(apr_pool_t*p, server_rec *server) +{ + include_server_config *result = + (include_server_config *)apr_palloc(p, sizeof(include_server_config)); + result->default_end_tag = ENDING_SEQUENCE; + result->default_start_tag =STARTING_SEQUENCE; + result->start_tag_len = sizeof(STARTING_SEQUENCE)-1; + /* compile the pattern used by find_start_sequence */ + bndm_compile(&result->start_seq_pat, result->default_start_tag, + result->start_tag_len); + + return result; +} static const char *set_xbithack(cmd_parms *cmd, void *xbp, const char *arg) { include_dir_config *conf = (include_dir_config *)xbp; @@ -3047,6 +3062,9 @@ (include_dir_config *)ap_get_module_config(r->per_dir_config, &include_module); + include_server_config *sconf= ap_get_module_config(r->server->module_config, + &include_module); + if (!(ap_allow_options(r) & OPT_INCLUDES)) { return ap_pass_brigade(f->next, b); } @@ -3065,6 +3083,10 @@ ctx->error_str = conf->default_error_msg; ctx->time_str = conf->default_time_fmt; ctx->pool = f->c->pool; + ctx->start_seq_pat = &sconf->start_seq_pat; + ctx->start_seq = sconf->default_start_tag; + ctx->start_seq_len = sconf->start_tag_len; + ctx->end_seq = sconf->default_end_tag; } else { return ap_pass_brigade(f->next, b); @@ -3139,11 +3161,7 @@ apr_pool_t *ptemp, server_rec *s) { include_hash = apr_hash_make(p); - - /* compile the pattern used by find_start_sequence */ - bndm_compile(&start_seq_pat, STARTING_SEQUENCE, - sizeof(STARTING_SEQUENCE)-1); - + ssi_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_include_handler); if(ssi_pfn_register) { @@ -3169,6 +3187,27 @@ return NULL; } +static const char *set_default_start_tag(cmd_parms *cmd, void *mconfig, const char *msg) +{ + include_server_config *conf; + conf= ap_get_module_config(cmd->server->module_config , &include_module); + conf->default_start_tag = apr_pstrdup(cmd->pool, msg); + conf->start_tag_len = strlen(conf->default_start_tag ); + bndm_compile(&conf->start_seq_pat, conf->default_start_tag, + conf->start_tag_len); + + return NULL; +} + +static const char *set_default_end_tag(cmd_parms *cmd, void *mconfig, const char *msg) +{ + include_server_config *conf; + conf= ap_get_module_config(cmd->server->module_config , &include_module); + conf->default_end_tag = apr_pstrdup(cmd->pool, msg); + + return NULL; +} + static const char *set_default_time_fmt(cmd_parms *cmd, void *mconfig, const char *fmt) { include_dir_config *conf = (include_dir_config *)mconfig; @@ -3187,6 +3226,11 @@ "a string"), AP_INIT_TAKE1("SSITimeFormat", set_default_time_fmt, NULL, OR_ALL, "a strftime(3) formatted string"), + AP_INIT_TAKE1("SSIStartTag", set_default_start_tag, NULL, RSRC_CONF, + "SSI Start String Tag"), + AP_INIT_TAKE1("SSIEndTag", set_default_end_tag, NULL, RSRC_CONF, + "SSI End String Tag"), + {NULL} }; @@ -3246,10 +3290,10 @@ module AP_MODULE_DECLARE_DATA include_module = { STANDARD20_MODULE_STUFF, - create_includes_dir_config, /* dir config creater */ - NULL, /* dir merger --- default is to override */ - NULL, /* server config */ - NULL, /* merge server config */ - includes_cmds, /* command apr_table_t */ - register_hooks /* register hooks */ + create_includes_dir_config, /* dir config creater */ + NULL, /* dir merger --- default is to override */ + create_includes_server_config,/* server config */ + NULL, /* merge server config */ + includes_cmds, /* command apr_table_t */ + register_hooks /* register hooks */ }; 1.26 +9 -0 httpd-2.0/modules/filters/mod_include.h Index: mod_include.h =================================================================== RCS file: /home/cvs/httpd-2.0/modules/filters/mod_include.h,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- mod_include.h 15 Nov 2001 05:05:20 -0000 1.25 +++ mod_include.h 30 Dec 2001 06:51:21 -0000 1.26 @@ -131,6 +131,10 @@ * the buckets containing parts of the ssi tag and headers. */ typedef enum {PRE_HEAD, PARSE_HEAD, PARSE_DIRECTIVE, PARSE_TAG, PARSE_TAIL, PARSED} states; + +/** forward referenced as it needs to be held on the context */ +typedef struct bndm_t bndm_t; + typedef struct include_filter_ctx { states state; long flags; /* See the FLAG_XXXXX definitions. */ @@ -161,6 +165,11 @@ apr_pool_t *pool; apr_bucket_brigade *ssi_tag_brigade; + bndm_t *start_seq_pat; + char *start_seq; + int start_seq_len; + char *end_seq; + } include_ctx_t; /* These flags are used to set flag bits. */