]> granicus.if.org Git - apache/commitdiff
Fix mod_rewrite hang when APR uses SysV Semaphores. Before we were
authorAaron Bannert <aaron@apache.org>
Mon, 6 May 2002 18:24:03 +0000 (18:24 +0000)
committerAaron Bannert <aaron@apache.org>
Mon, 6 May 2002 18:24:03 +0000 (18:24 +0000)
silently failing when locking/unlocking the mutex, since httpd
child processes didn't have permissions to access the root-created
semaphore.

PR: 8143

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94969 13f79535-47bb-0310-9956-ffa450edef68

modules/mappers/mod_rewrite.c
modules/mappers/mod_rewrite.h

index bde70161168619d6804959233e862498c5a2b262..fe5e3a634610d95a50a74789127e478c96beb357 100644 (file)
@@ -964,7 +964,19 @@ static int post_config(apr_pool_t *p,
         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 @@ static char *current_logtime(request_rec *r)
 
 #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)
index f325dd8f0eda115c3cde63266992bd18dbc8d4fb..7590c11278408c24e7741d1baf41cbe192cf2cd4 100644 (file)
@@ -451,7 +451,7 @@ static void  rewritelog(request_rec *r, int level, const char *text, ...)
 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 */