From: Jan Kaluža Date: Tue, 12 Nov 2013 12:14:50 +0000 (+0000) Subject: Add parse_errorlog_arg callback to ap_errorlog_provider to allow providers X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8ac0643ad6386c3dadacb255a9392c77aac9c49c;p=thirdparty%2Fapache%2Fhttpd.git Add parse_errorlog_arg callback to ap_errorlog_provider to allow providers 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 --- diff --git a/CHANGES b/CHANGES index 6a586b8c28a..3b9fdf2202e 100644 --- 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 ] diff --git a/include/ap_mmn.h b/include/ap_mmn.h index baee00df216..b5404b5fec5 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -441,12 +441,13 @@ * 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 */ diff --git a/include/http_core.h b/include/http_core.h index 2e635cffa6a..15d1e978472 100644 --- a/include/http_core.h +++ b/include/http_core.h @@ -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; }; diff --git a/modules/loggers/mod_syslog.c b/modules/loggers/mod_syslog.c index fcea7875a01..cc4057315e8 100644 --- a/modules/loggers/mod_syslog.c +++ b/modules/loggers/mod_syslog.c @@ -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 }; diff --git a/server/core.c b/server/core.c index de7997952c8..72abb658315 100644 --- a/server/core.c +++ b/server/core.c @@ -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); }