diff --git a/server/core/admin.cc b/server/core/admin.cc index c99771115..386a4e666 100644 --- a/server/core/admin.cc +++ b/server/core/admin.cc @@ -372,6 +372,19 @@ static bool load_ssl_certificates() return rval; } +static bool log_daemon_errors = true; + +void admin_log_error(void* arg, const char* fmt, va_list ap) +{ + if (log_daemon_errors) + { + char buf[1024]; + vsnprintf(buf, sizeof(buf), fmt, ap); + trim(buf); + MXS_ERROR("HTTP daemon error: %s\n", buf); + } +} + bool mxs_admin_init() { struct sockaddr_storage addr; @@ -380,7 +393,7 @@ bool mxs_admin_init() config_get_global_options()->admin_port, &addr)) { - int options = MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY; + int options = MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY | MHD_USE_DEBUG; if (addr.ss_family == AF_INET6) { @@ -395,6 +408,7 @@ bool mxs_admin_init() // The port argument is ignored and the port in the struct sockaddr is used instead http_daemon = MHD_start_daemon(options, 0, NULL, NULL, handle_client, NULL, + MHD_OPTION_EXTERNAL_LOGGER, admin_log_error, NULL, MHD_OPTION_NOTIFY_COMPLETED, close_client, NULL, MHD_OPTION_SOCK_ADDR, &addr, !using_ssl ? MHD_OPTION_END : @@ -404,6 +418,9 @@ bool mxs_admin_init() MHD_OPTION_END); } + // Silence all other errors to prevent malformed requests from flooding the log + log_daemon_errors = false; + return http_daemon != NULL; }