rse 99/05/21 05:16:28
Modified: src CHANGES src/include httpd.h ap_mmn.h ap_compat.h src/main util.c http_request.c util_uri.c src/support httpd.exp src/modules/standard mod_setenvif.c mod_rewrite.c mod_include.c mod_alias.c Log: Replace regexec() calls with calls to a new API stub function ap_regexec(). This solves problems with DSO modules which use the regex library. Submitted by: Jens-Uwe Mager <[EMAIL PROTECTED]>, Ralf S. Engelschall Reviewed by: Ralf S. Engelschall Revision Changes Path 1.1361 +4 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1360 retrieving revision 1.1361 diff -u -r1.1360 -r1.1361 --- CHANGES 1999/05/19 13:26:07 1.1360 +++ CHANGES 1999/05/21 12:16:14 1.1361 @@ -1,5 +1,9 @@ Changes with Apache 1.3.7 + *) Replace regexec() calls with calls to a new API stub function + ap_regexec(). This solves problems with DSO modules which use the regex + library. [Jens-Uwe Mager <[EMAIL PROTECTED]>, Ralf S. Engelschall] + *) Add 'Request_Protocol' special keyword to mod_setenvif so that environment variables can be set according to the protocol version (e.g., HTTP/0.9 or HTTP/1.1) of the request. [Ken Coar] 1.277 +3 -1 apache-1.3/src/include/httpd.h Index: httpd.h =================================================================== RCS file: /home/cvs/apache-1.3/src/include/httpd.h,v retrieving revision 1.276 retrieving revision 1.277 diff -u -r1.276 -r1.277 --- httpd.h 1999/03/23 00:36:33 1.276 +++ httpd.h 1999/05/21 12:16:17 1.277 @@ -968,8 +968,10 @@ void os2pathname(char *path); #endif +API_EXPORT(int) ap_regexec(const regex_t *preg, const char *string, + size_t nmatch, regmatch_t pmatch[], int eflags); API_EXPORT(char *) ap_pregsub(pool *p, const char *input, const char *source, - size_t nmatch, regmatch_t pmatch[]); + size_t nmatch, regmatch_t pmatch[]); API_EXPORT(void) ap_content_type_tolower(char *); API_EXPORT(void) ap_str_tolower(char *); 1.35 +2 -1 apache-1.3/src/include/ap_mmn.h Index: ap_mmn.h =================================================================== RCS file: /home/cvs/apache-1.3/src/include/ap_mmn.h,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- ap_mmn.h 1999/05/07 00:16:09 1.34 +++ ap_mmn.h 1999/05/21 12:16:17 1.35 @@ -217,12 +217,13 @@ * 19990320.1 - add ap_vrprintf() * 19990320.2 - add cmd_parms.context, ap_set_config_vectors, * export ap_add_file_conf + * 19990521 - add ap_regexec() */ #define MODULE_MAGIC_COOKIE 0x41503133UL /* "AP13" */ #ifndef MODULE_MAGIC_NUMBER_MAJOR -#define MODULE_MAGIC_NUMBER_MAJOR 19990320 +#define MODULE_MAGIC_NUMBER_MAJOR 19990521 #endif #define MODULE_MAGIC_NUMBER_MINOR 2 /* 0...n */ #define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR /* backward compat */ 1.18 +1 -0 apache-1.3/src/include/ap_compat.h Index: ap_compat.h =================================================================== RCS file: /home/cvs/apache-1.3/src/include/ap_compat.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- ap_compat.h 1999/05/07 00:16:09 1.17 +++ ap_compat.h 1999/05/21 12:16:18 1.18 @@ -305,6 +305,7 @@ #define rationalize_mtime ap_rationalize_mtime #define read_config ap_read_config #define read_request ap_read_request +#define regexec ap_regexec #define register_cleanup ap_register_cleanup #define register_other_child ap_register_other_child #define release_mutex ap_release_mutex 1.161 +13 -1 apache-1.3/src/main/util.c Index: util.c =================================================================== RCS file: /home/cvs/apache-1.3/src/main/util.c,v retrieving revision 1.160 retrieving revision 1.161 diff -u -r1.160 -r1.161 --- util.c 1999/04/21 18:25:44 1.160 +++ util.c 1999/05/21 12:16:21 1.161 @@ -281,9 +281,21 @@ return 0; } +/* + * Apache stub function for the regex libraries regexec() to make sure the + * whole regex(3) API is available through the Apache (exported) namespace. + * This is especially important for the DSO situations of modules. + * DO NOT MAKE A MACRO OUT OF THIS FUNCTION! + */ +API_EXPORT(int) ap_regexec(const regex_t *preg, const char *string, + size_t nmatch, regmatch_t pmatch[], int eflags) +{ + return regexec(preg, string, nmatch, pmatch, eflags); +} + /* This function substitutes for $0-$9, filling in regular expression * submatches. Pass it the same nmatch and pmatch arguments that you - * passed regexec(). pmatch should not be greater than the maximum number + * passed ap_regexec(). pmatch should not be greater than the maximum number * of subexpressions - i.e. one more than the re_nsub member of regex_t. * * input should be the string with the $-expressions, source should be the 1.149 +4 -4 apache-1.3/src/main/http_request.c Index: http_request.c =================================================================== RCS file: /home/cvs/apache-1.3/src/main/http_request.c,v retrieving revision 1.148 retrieving revision 1.149 diff -u -r1.148 -r1.149 --- http_request.c 1999/05/12 16:50:42 1.148 +++ http_request.c 1999/05/21 12:16:21 1.149 @@ -370,7 +370,7 @@ this_conf = NULL; if (entry_core->r) { - if (!regexec(entry_core->r, r->filename, 0, NULL, 0)) + if (!ap_regexec(entry_core->r, r->filename, 0, NULL, 0)) this_conf = entry_config; } else if (entry_core->d_is_fnmatch) { @@ -536,7 +536,7 @@ ap_get_module_config(entry_config, &core_module); if (entry_core->r) { - if (!regexec(entry_core->r, test_dirname, 0, NULL, REG_NOTEOL)) { + if (!ap_regexec(entry_core->r, test_dirname, 0, NULL, REG_NOTEOL)) { per_dir_defaults = ap_merge_per_dir_configs(r->pool, per_dir_defaults, entry_config); @@ -612,7 +612,7 @@ this_conf = NULL; if (entry_core->r) { - if (!regexec(entry_core->r, r->uri, 0, NULL, 0)) + if (!ap_regexec(entry_core->r, r->uri, 0, NULL, 0)) this_conf = entry_config; } else if (entry_core->d_is_fnmatch) { @@ -673,7 +673,7 @@ this_conf = NULL; if (entry_core->r) { - if (!regexec(entry_core->r, test_file, 0, NULL, 0)) + if (!ap_regexec(entry_core->r, test_file, 0, NULL, 0)) this_conf = entry_config; } else if (entry_core->d_is_fnmatch) { 1.24 +4 -4 apache-1.3/src/main/util_uri.c Index: util_uri.c =================================================================== RCS file: /home/cvs/apache-1.3/src/main/util_uri.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- util_uri.c 1999/01/01 19:04:54 1.23 +++ util_uri.c 1999/05/21 12:16:21 1.24 @@ -306,11 +306,11 @@ memset (uptr, '\0', sizeof(*uptr)); uptr->is_initialized = 1; - ret = regexec(&re_uri, uri, re_uri.re_nsub + 1, match, 0); + ret = ap_regexec(&re_uri, uri, re_uri.re_nsub + 1, match, 0); if (ret != 0) { ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, NULL, - "regexec() could not parse uri (\"%s\")", + "ap_regexec() could not parse uri (\"%s\")", uri); return HTTP_BAD_REQUEST; @@ -336,10 +336,10 @@ if (uptr->hostinfo) { /* Parse the hostinfo part to extract user, password, host, and port */ - ret = regexec(&re_hostpart, uptr->hostinfo, re_hostpart.re_nsub + 1, match, 0); + ret = ap_regexec(&re_hostpart, uptr->hostinfo, re_hostpart.re_nsub + 1, match, 0); if (ret != 0) { ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, NULL, - "regexec() could not parse (\"%s\") as host part", + "ap_regexec() could not parse (\"%s\") as host part", uptr->hostinfo); return HTTP_BAD_REQUEST; 1.19 +1 -0 apache-1.3/src/support/httpd.exp Index: httpd.exp =================================================================== RCS file: /home/cvs/apache-1.3/src/support/httpd.exp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- httpd.exp 1999/05/04 19:02:09 1.18 +++ httpd.exp 1999/05/21 12:16:23 1.19 @@ -249,6 +249,7 @@ ap_rationalize_mtime ap_read_config ap_read_request +ap_regexec ap_register_cleanup ap_register_other_child ap_remove_module 1.28 +1 -1 apache-1.3/src/modules/standard/mod_setenvif.c Index: mod_setenvif.c =================================================================== RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_setenvif.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- mod_setenvif.c 1999/05/19 13:26:09 1.27 +++ mod_setenvif.c 1999/05/21 12:16:24 1.28 @@ -378,7 +378,7 @@ val = ""; } - if (!regexec(b->preg, val, 0, NULL, 0)) { + if (!ap_regexec(b->preg, val, 0, NULL, 0)) { array_header *arr = ap_table_elts(b->features); elts = (table_entry *) arr->elts; 1.139 +3 -3 apache-1.3/src/modules/standard/mod_rewrite.c Index: mod_rewrite.c =================================================================== RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_rewrite.c,v retrieving revision 1.138 retrieving revision 1.139 diff -u -r1.138 -r1.139 --- mod_rewrite.c 1999/04/22 10:48:59 1.138 +++ mod_rewrite.c 1999/05/21 12:16:24 1.139 @@ -1799,7 +1799,7 @@ rewritelog(r, 3, "[per-dir %s] applying pattern '%s' to uri '%s'", perdir, p->pattern, uri); } - rc = (regexec(regexp, uri, regexp->re_nsub+1, regmatch, 0) == 0); + rc = (ap_regexec(regexp, uri, regexp->re_nsub+1, regmatch, 0) == 0); if (! (( rc && !(p->flags & RULEFLAG_NOTMATCH)) || (!rc && (p->flags & RULEFLAG_NOTMATCH)) ) ) { return 0; @@ -2268,8 +2268,8 @@ } else { /* it is really a regexp pattern, so apply it */ - rc = (regexec(p->regexp, input, - p->regexp->re_nsub+1, regmatch,0) == 0); + rc = (ap_regexec(p->regexp, input, + p->regexp->re_nsub+1, regmatch,0) == 0); /* if it isn't a negated pattern and really matched we update the passed-through regex subst info structure */ 1.117 +1 -1 apache-1.3/src/modules/standard/mod_include.c Index: mod_include.c =================================================================== RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_include.c,v retrieving revision 1.116 retrieving revision 1.117 diff -u -r1.116 -r1.117 --- mod_include.c 1999/05/13 19:00:41 1.116 +++ mod_include.c 1999/05/21 12:16:25 1.117 @@ -1187,7 +1187,7 @@ "unable to compile pattern \"%s\"", rexp); return -1; } - regex_error = regexec(compiled, string, 0, (regmatch_t *) NULL, 0); + regex_error = ap_regexec(compiled, string, 0, (regmatch_t *) NULL, 0); ap_pregfree(r->pool, compiled); return (!regex_error); } 1.41 +1 -1 apache-1.3/src/modules/standard/mod_alias.c Index: mod_alias.c =================================================================== RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_alias.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- mod_alias.c 1999/01/01 19:05:06 1.40 +++ mod_alias.c 1999/05/21 12:16:26 1.41 @@ -300,7 +300,7 @@ int l; if (p->regexp) { - if (!regexec(p->regexp, r->uri, p->regexp->re_nsub + 1, regm, 0)) { + if (!ap_regexec(p->regexp, r->uri, p->regexp->re_nsub + 1, regm, 0)) { if (p->real) { found = ap_pregsub(r->pool, p->real, r->uri, p->regexp->re_nsub + 1, regm);