You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Brad Nicholes <BN...@novell.com> on 2002/05/06 21:49:36 UTC
Re: cvs commit: httpd-2.0/modules/mappers mod_rewrite.c
mod_rewrite.h
Why are we calling a Unix specific function in the middle of a module?
Since unixd_set_global_mutex_perms() doesn't exist on NetWare,
mod_rewrite won't compile. Should this be handled in APR somewhere?
Brad
Brad Nicholes
Senior Software Engineer
Novell, Inc., a leading provider of Net business solutions
http://www.novell.com
>>> aaron@apache.org Monday, May 06, 2002 12:24:04 PM >>>
aaron 02/05/06 11:24:04
Modified: modules/mappers mod_rewrite.c mod_rewrite.h
Log:
Fix mod_rewrite hang when APR uses SysV Semaphores. Before we were
silently failing when locking/unlocking the mutex, since httpd
child processes didn't have permissions to access the root-created
semaphore.
PR: 8143
Revision Changes Path
1.111 +26 -6 httpd-2.0/modules/mappers/mod_rewrite.c
Index: mod_rewrite.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_rewrite.c,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -r1.110 -r1.111
--- mod_rewrite.c 6 May 2002 18:04:53 -0000 1.110
+++ mod_rewrite.c 6 May 2002 18:24:03 -0000 1.111
@@ -964,7 +964,19 @@
return HTTP_INTERNAL_SERVER_ERROR;
}
- rewritelock_create(s, p);
+ rv = unixd_set_global_mutex_perms(rewrite_log_lock);
+ if (rv != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
+ "mod_rewrite: Could not set permissions on "
+ "rewrite_log_lock; check User and Group
directives");
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ rv = rewritelock_create(s, p);
+ if (rv != APR_SUCCESS) {
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
+
apr_pool_cleanup_register(p, (void *)s, rewritelock_remove,
apr_pool_cleanup_null);
/* step through the servers and
@@ -3296,26 +3308,34 @@
#define REWRITELOCK_MODE ( APR_UREAD | APR_UWRITE | APR_GREAD |
APR_WREAD )
-static void rewritelock_create(server_rec *s, apr_pool_t *p)
+static apr_status_t rewritelock_create(server_rec *s, apr_pool_t
*p)
{
apr_status_t rc;
/* only operate if a lockfile is used */
if (lockname == NULL || *(lockname) == '\0') {
- return;
+ return APR_EINVAL;
}
/* create the lockfile */
rc = apr_global_mutex_create(&rewrite_mapr_lock_acquire,
lockname,
APR_LOCK_DEFAULT, p);
if (rc != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rc, s,
+ ap_log_error(APLOG_MARK, APLOG_CRIT, rc, s,
"mod_rewrite: Parent could not create
RewriteLock "
"file %s", lockname);
- exit(1);
+ return rc;
}
- return;
+ rc = unixd_set_global_mutex_perms(rewrite_mapr_lock_acquire);
+ if (rc != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_CRIT, rc, s,
+ "mod_rewrite: Parent could not set permissions
"
+ "on RewriteLock; check User and Group
directives");
+ return rc;
+ }
+
+ return APR_SUCCESS;
}
static apr_status_t rewritelock_remove(void *data)
1.32 +1 -1 httpd-2.0/modules/mappers/mod_rewrite.h
Index: mod_rewrite.h
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_rewrite.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- mod_rewrite.h 6 May 2002 03:10:24 -0000 1.31
+++ mod_rewrite.h 6 May 2002 18:24:03 -0000 1.32
@@ -451,7 +451,7 @@
static char *current_logtime(request_rec *r);
/* rewriting lockfile support */
-static void rewritelock_create(server_rec *s, apr_pool_t *p);
+static apr_status_t rewritelock_create(server_rec *s, apr_pool_t
*p);
static apr_status_t rewritelock_remove(void *data);
/* program map support */