]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Add parse_errorlog_arg callback to ap_errorlog_provider to allow providers
authorJan Kaluža <jkaluza@apache.org>
Tue, 12 Nov 2013 12:14:50 +0000 (12:14 +0000)
committerJan Kaluža <jkaluza@apache.org>
Tue, 12 Nov 2013 12:14:50 +0000 (12:14 +0000)
to check the ErrorLog argument. Implement this check in mod_syslog.

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

CHANGES
include/ap_mmn.h
include/http_core.h
modules/loggers/mod_syslog.c
server/core.c

diff --git a/CHANGES b/CHANGES
index 6a586b8c28a30b9df50f12506a07d7289c466171..3b9fdf2202ed09c01c1fd6584881a121dcca4ed2 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) core: Add parse_errorlog_arg callback to ap_errorlog_provider
+     to allow providers to check the ErrorLog argument. [Jan Kaluza]
+
   *) core: Detect incomplete body in HTTP input filter and return
      APR_INCOMPLETE. PR 55475 [Yann Ylavic <ylavic dev gmail com>]
 
index baee00df216bb5cb171880e64b44c8bb95b75946..b5404b5fec5725aa08f0dd5a108b0450b9c26535 100644 (file)
  * 20130903.0 (2.5.0-dev)  Changes sizeof(worker_score) in scoreboard 
  * 20130924.0 (2.5.0-dev)  Add ap_errorlog_provider
  * 20130924.1 (2.5.0-dev)  Add ap_proxy_connection_reusable()
+ * 20131112.0 (2.5.0-dev)  Add parse_errorlog_arg to ap_errorlog_provider
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
 
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
-#define MODULE_MAGIC_NUMBER_MAJOR 20130924
+#define MODULE_MAGIC_NUMBER_MAJOR 20131112
 #endif
 #define MODULE_MAGIC_NUMBER_MINOR 1                  /* 0...n */
 
index 2e635cffa6a2b1d7d82c214e6154dd235959df99..15d1e978472a7523be951f31cecdeb70dc23e7f5 100644 (file)
@@ -872,6 +872,13 @@ struct ap_errorlog_provider {
     apr_status_t (*writer)(const ap_errorlog_info *info, void *handle,
                            const char *errstr, apr_size_t len);
 
+    /** Checks syntax of ErrorLog directive argument.
+     * @param cmd The config directive
+     * @param arg ErrorLog directive argument
+     * @return Error message or NULL on success
+     */
+    const char * (*parse_errorlog_arg)(cmd_parms *cmd, const char *arg);
+
     /** a combination of the AP_ERRORLOG_PROVIDER_* flags */
     unsigned int flags;
 };
index fcea7875a01f2ab26e6944b274f7b1f9a7ea10d4..cc4057315e84db0b353dd3899851cd3d2f87ed8f 100644 (file)
@@ -139,12 +139,25 @@ static apr_status_t syslog_error_log(const ap_errorlog_info *info,
     return APR_SUCCESS;
 }
 
+static const char *syslog_error_log_parse(cmd_parms *cmd, const char *arg)
+{
+    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+
+    if (err != NULL) {
+        return apr_pstrcat(cmd->pool,
+                           "When using syslog error log provider, ", err,
+                           NULL);
+    }
+
+    return NULL;
+}
 
 static void syslog_register_hooks(apr_pool_t *p)
 {
     static const ap_errorlog_provider syslog_provider = {
         &syslog_error_log_init,
         &syslog_error_log,
+        &syslog_error_log_parse,
         0
     };
 
index de7997952c8fe64d0b212b723c8e4e6e746c2b84..72abb6583151602b6617be1f30cd271f6eff75d9 100644 (file)
@@ -3960,6 +3960,7 @@ static const char *set_errorlog(cmd_parms *cmd, void *dummy, const char *arg1,
                                 const char *arg2)
 {
     ap_errorlog_provider *provider;
+    const char *err;
     cmd->server->errorlog_provider = NULL;
 
     if (!arg2) {
@@ -3995,6 +3996,11 @@ static const char *set_errorlog(cmd_parms *cmd, void *dummy, const char *arg1,
                             arg1);
     }
 
+    err = provider->parse_errorlog_arg(cmd, arg2);
+    if (err) {
+        return err;
+    }
+
     cmd->server->errorlog_provider = provider;
     return set_server_string_slot(cmd, dummy, arg2);
 }