Received: (from majordom@localhost) by hyperreal.org (8.8.5/8.8.5) id GAA02451; Wed, 9 Jul 1997 06:09:31 -0700 (PDT) Received: from colin.muc.de (root@colin.muc.de [193.174.4.1]) by hyperreal.org (8.8.5/8.8.5) with SMTP id GAA02309 for ; Wed, 9 Jul 1997 06:07:30 -0700 (PDT) Received: from en by colin.muc.de with UUCP id <86300-2>; Wed, 9 Jul 1997 15:06:08 +0200 Received: by en1.engelschall.com (Sendmail 8.8.2) for new-httpd@hyperreal.org id OAA14512; Wed, 9 Jul 1997 14:34:53 +0200 (MET DST) Message-Id: <199707091234.OAA14512@en1.engelschall.com> Subject: [SYNC] mod_rewrite 3.0.8 To: new-httpd@hyperreal.org (Apache Developer ML) Date: Wed, 9 Jul 1997 14:34:48 +0200 From: rse@engelschall.com (Ralf S. Engelschall) Organization: Engelschall, Germany. X-Home: http://www.engelschall.com/ X-Mailer: ELM [version 2.4ME+ PL32 (25)] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: new-httpd-owner@apache.org Precedence: bulk Reply-To: new-httpd@apache.org Below is the context diff for syncing the CVS source of mod_rewrite with the current release 3.0.8. The ChangeLog entries follow (note that the NT-porting #ifdef's will be removed for final Apache 1.3, but currently 1.2.1 is the release and mod_rewrite should compile with this version, too): Changes between 3.0.7 and 3.0.8 =============================== 970706 - incorporated a bugfix which fixes a problem with the response code on redirects. [Thanks to Marc Slemko for patch] - slightly changed the documentation: solutions.src - disable the locking of the RewriteMap child pipe under SunOS 4.1.x because this OS does us not allow to lock pipes. Here without locking should work ats least _most of the time_, but its better this way than it does not work completely. 970708 - allow env variables to be set even on rules with no substitution part ("-"). [Thanks to Peter Hegedus for patch] - bugfix: now when HostnameLookups is off and get_host_name() returns NULL the logfile says "UNKNOWN-HOST" instead of passing NULL to the pstrdup function. - changed the MODULE_MAGIC_NUMBER checks because Apache 1.2.1 has 19970622 as its value. - changed a few left-over static variables to non-static ones to make mod_rewrite more thread-safe. [Thanks to Dean Gaudet ] Changes between 3.0.6 and 3.0.7 =============================== 970622 - incorporated the NT-porting changes from the Apache Groups 1.3-dev version. 970624 - fixed a problem when creating a empty query string via "xxx?". Now it is possible to actually remove an existing query string. [Thanks to "Taso N. Devetzis" for hint] - made mod_rewrite compile again without warnings under "old" Apache 1.2.0. BTW: Yes, I hate it to sync the stuff all the time, too. Instead I would really prefer to maintain the code _FOR_ and _AT_ the Apache Groups repository. But because the Apache Group never gave me group ownership _including_ CVS access, I'm still forced to maintain my own (official) copy of the mod_rewrite sources. Sorry, but I don't want to give my own code away and maintain it in a way where I don't have direct access too it any longer. (Yes, I know, voting is always needed, but thats not the point). I've discussed this two times with the group in the past and although most of the members agreed with me I still don't have CVS access. Hmmm, the group will have reasons, I'm sure... Greetings, Ralf S. Engelschall rse@engelschall.com www.engelschall.com *** mod_rewrite.c.old Sun Jun 22 09:00:14 1997 --- mod_rewrite.c Wed Jul 9 12:45:56 1997 *************** *** 61,67 **** ** |_| |_| |_|\___/ \__,_|___|_| \___| \_/\_/ |_| |_|\__\___| ** |_____| ** ! ** URL Rewriting Module, Version 3.0.6 (15-Jun-1997) ** ** This module uses a rule-based rewriting engine (based on a ** regular-expression parser) to rewrite requested URLs on the fly. --- 61,67 ---- ** |_| |_| |_|\___/ \__,_|___|_| \___| \_/\_/ |_| |_|\__\___| ** |_____| ** ! ** URL Rewriting Module, Version 3.0.8 (09-Jul-1997) ** ** This module uses a rule-based rewriting engine (based on a ** regular-expression parser) to rewrite requested URLs on the fly. *************** *** 1503,1510 **** return 0; /* if any condition fails this complete rule fails */ /* if this is a pure matching rule we return immediately */ ! if (strcmp(output, "-") == 0) return 2; /* if this is a forced proxy request ... */ if (p->flags & RULEFLAG_PROXY) { --- 1503,1519 ---- return 0; /* if any condition fails this complete rule fails */ /* if this is a pure matching rule we return immediately */ ! if (strcmp(output, "-") == 0) { ! /* but before we set the env variables... */ ! for (i = 0; p->env[i] != NULL; i++) { ! strncpy(env2, p->env[i], sizeof(env2)-1); ! EOS_PARANOIA(env2); ! strncpy(env, pregsub(r->pool, env2, uri, regexp->re_nsub+1, regmatch), sizeof(env)-1); /* substitute in output */ ! EOS_PARANOIA(env); ! add_env_variable(r, env); ! } return 2; + } /* if this is a forced proxy request ... */ if (p->flags & RULEFLAG_PROXY) { *************** *** 1624,1629 **** --- 1633,1639 ---- and the current URL still is not a fully qualified one we finally prefix it with http[s]:// explicitly */ if (flags & RULEFLAG_FORCEREDIRECT) { + r->status = p->forced_responsecode; if ( !(strlen(r->filename) > 7 && strncmp(r->filename, "http://", 7) == 0) && !(strlen(r->filename) > 8 && *************** *** 1659,1665 **** else rewritelog(r, 2, "[per-dir %s] prepare forced redirect %s -> %s", perdir, r->filename, newuri); r->filename = pstrdup(r->pool, newuri); - r->status = p->forced_responsecode; return 1; } } --- 1669,1674 ---- *************** *** 1808,1816 **** r->args = pstrcat(r->pool, q, "&", r->args, NULL); else r->args = pstrdup(r->pool, q); ! if (r->args[strlen(r->args)-1] == '&') ! r->args[strlen(r->args)-1] = '\0'; ! rewritelog(r, 3, "split uri=%s -> uri=%s, args=%s", olduri, r->filename, r->args); } return; } --- 1817,1831 ---- r->args = pstrcat(r->pool, q, "&", r->args, NULL); else r->args = pstrdup(r->pool, q); ! if (strlen(r->args) == 0) { ! r->args = NULL; ! rewritelog(r, 3, "split uri=%s -> uri=%s, args=", olduri, r->filename); ! } ! else { ! if (r->args[strlen(r->args)-1] == '&') ! r->args[strlen(r->args)-1] = '\0'; ! rewritelog(r, 3, "split uri=%s -> uri=%s, args=%s", olduri, r->filename, r->args); ! } } return; } *************** *** 2213,2219 **** --- 2228,2236 ---- int i; /* lock the channel */ + #ifdef USE_PIPE_LOCKING fd_lock(fpin); + #endif /* write out the request key */ write(fpin, key, strlen(key)); *************** *** 2229,2235 **** --- 2246,2254 ---- buf[i] = '\0'; /* unlock the channel */ + #ifdef USE_PIPE_LOCKING fd_unlock(fpin); + #endif if (strcasecmp(buf, "NULL") == 0) return NULL; *************** *** 2254,2261 **** rewrite_server_conf *conf; char *fname; FILE *fp; ! static int rewritelog_flags = ( O_WRONLY|O_APPEND|O_CREAT ); ! static mode_t rewritelog_mode = ( S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH ); conf = get_module_config(s->module_config, &rewrite_module); --- 2273,2280 ---- rewrite_server_conf *conf; char *fname; FILE *fp; ! int rewritelog_flags = ( O_WRONLY|O_APPEND|O_CREAT ); ! mode_t rewritelog_mode = ( S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH ); conf = get_module_config(s->module_config, &rewrite_module); *************** *** 2288,2294 **** --- 2307,2317 ---- } /* Child process code for 'RewriteLog "|..."' */ + #if MODULE_MAGIC_NUMBER > 19970622 static int rewritelog_child(void *cmd) + #else + static void rewritelog_child(void *cmd) + #endif { int child_pid = 1; *************** *** 2302,2308 **** --- 2325,2335 ---- #else execl(SHELL_PATH, SHELL_PATH, "-c", (char *)cmd, NULL); #endif + #if MODULE_MAGIC_NUMBER > 19970622 return(child_pid); + #else + return; + #endif } static void rewritelog(request_rec *r, int level, const char *text, ...) *************** *** 2310,2323 **** rewrite_server_conf *conf; conn_rec *connect; char *str1; ! static char str2[HUGE_STRING_LEN]; ! static char str3[HUGE_STRING_LEN]; ! static char type[20]; ! static char redir[20]; va_list ap; int i; request_rec *req; char *ruser; va_start(ap, text); conf = get_module_config(r->server->module_config, &rewrite_module); --- 2337,2351 ---- rewrite_server_conf *conf; conn_rec *connect; char *str1; ! char str2[512]; ! char str3[1024]; ! char type[20]; ! char redir[20]; va_list ap; int i; request_rec *req; char *ruser; + const char *rhost; va_start(ap, text); conf = get_module_config(r->server->module_config, &rewrite_module); *************** *** 2343,2349 **** ruser = "\"\""; } ! str1 = pstrcat(r->pool, get_remote_host(connect, r->server->module_config, REMOTE_NAME), " ", (connect->remote_logname != NULL ? connect->remote_logname : "-"), " ", ruser, NULL); ap_vsnprintf(str2, sizeof(str2), text, ap); --- 2371,2381 ---- ruser = "\"\""; } ! rhost = get_remote_host(connect, r->server->module_config, REMOTE_NAME); ! if (rhost == NULL) ! rhost = "UNKNOWN-HOST"; ! ! str1 = pstrcat(r->pool, rhost, " ", (connect->remote_logname != NULL ? connect->remote_logname : "-"), " ", ruser, NULL); ap_vsnprintf(str2, sizeof(str2), text, ap); *************** *** 2439,2445 **** --- 2471,2481 ---- } /* child process code */ + #if MODULE_MAGIC_NUMBER > 19970622 static int rewritemap_program_child(void *cmd) + #else + static void rewritemap_program_child(void *cmd) + #endif { int child_pid = 1; *************** *** 2453,2459 **** --- 2489,2499 ---- #else execl(SHELL_PATH, SHELL_PATH, "-c", (char *)cmd, NULL); #endif + #if MODULE_MAGIC_NUMBER > 19970622 return(child_pid); + #else + return; + #endif } *** mod_rewrite.h.old Sun Jun 22 09:00:14 1997 --- mod_rewrite.h Wed Jul 9 09:19:29 1997 *************** *** 64,70 **** ** |_| |_| |_|\___/ \__,_|___|_| \___| \_/\_/ |_| |_|\__\___| ** |_____| ** ! ** URL Rewriting Module, Version 3.0.6 (15-Jun-1997) ** ** This module uses a rule-based rewriting engine (based on a ** regular-expression parser) to rewrite requested URLs on the fly. --- 64,70 ---- ** |_| |_| |_|\___/ \__,_|___|_| \___| \_/\_/ |_| |_|\__\___| ** |_____| ** ! ** URL Rewriting Module, Version 3.0.8 (09-Jul-1997) ** ** This module uses a rule-based rewriting engine (based on a ** regular-expression parser) to rewrite requested URLs on the fly. *************** *** 137,143 **** #include #endif ! /* --- 137,150 ---- #include #endif ! /* The locking support for the RewriteMap programs: ! Locking a pipe to the child works fine under most ! Unix derivates, but braindead SunOS 4.1.x has ! problems with this approach... */ ! #define USE_PIPE_LOCKING 1 ! #ifdef SUNOS4 ! #undef USE_PIPE_LOCKING ! #endif /* *************** *** 350,362 **** --- 357,377 ---- /* rewriting logfile support */ static void open_rewritelog(server_rec *s, pool *p); + #if MODULE_MAGIC_NUMBER > 19970622 static int rewritelog_child(void *cmd); + #else + static void rewritelog_child(void *cmd); + #endif static void rewritelog(request_rec *r, int level, const char *text, ...); static char *current_logtime(request_rec *r); /* program map support */ static void run_rewritemap_programs(server_rec *s, pool *p); + #if MODULE_MAGIC_NUMBER > 19970622 static int rewritemap_program_child(void *cmd); + #else + static void rewritemap_program_child(void *cmd); + #endif /* env variable support */ static void expand_variables_inbuffer(request_rec *r, char *buf, int buf_len);