From d44cf7b20ed6607dad23c8f3391d21c3bc9f9221 Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Wed, 5 Dec 2018 14:25:44 +0200 Subject: [PATCH] MXS-2208 Allow dbfw parser to be compiled as C maxsbase/log.h will turn into C++, but the flex and bison generated files are by default C. --- server/modules/filter/dbfwfilter/dbfwfilter.cc | 10 ++++++++++ server/modules/filter/dbfwfilter/dbfwfilter.h | 11 +++++++++++ server/modules/filter/dbfwfilter/ruleparser.y | 3 +-- server/modules/filter/dbfwfilter/token.l | 4 ++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/server/modules/filter/dbfwfilter/dbfwfilter.cc b/server/modules/filter/dbfwfilter/dbfwfilter.cc index 8c9b2ce84..225d3dc7d 100644 --- a/server/modules/filter/dbfwfilter/dbfwfilter.cc +++ b/server/modules/filter/dbfwfilter/dbfwfilter.cc @@ -1779,3 +1779,13 @@ json_t* Dbfw::diagnostics_json() const { return rules_to_json(this_thread->rules(this)); } + +extern "C" +void dbfilter_log_warning(const char* file, int line, const char* function, + const char* format, const char* what) +{ + char buffer[strlen(format) + strlen(what) + 1]; + + sprintf(buffer, format, what); + mxb_log_message(LOG_WARNING, file, line, function, "%s", buffer); +} diff --git a/server/modules/filter/dbfwfilter/dbfwfilter.h b/server/modules/filter/dbfwfilter/dbfwfilter.h index 3026b7099..c59587928 100644 --- a/server/modules/filter/dbfwfilter/dbfwfilter.h +++ b/server/modules/filter/dbfwfilter/dbfwfilter.h @@ -21,6 +21,10 @@ #include +#ifndef MXS_MODULE_NAME +#define MXS_MODULE_NAME "dbfwfilter" +#endif + MXS_BEGIN_DECLS /** Matching type */ @@ -56,4 +60,11 @@ void add_active_rule(void* scanner, const char* name); void set_matching_mode(void* scanner, enum match_type mode); bool create_user_templates(void* scanner); +/** Log warnings from C code */ +void log_warning(const char* module, const char* file, int line, const char* function, + const char* format, const char* what); + +#define FW_LOG_WARNING(format, what)\ + log_warning(MXS_MODULE_NAME, __FILE__, __LINE__, __func__, format, what) + MXS_END_DECLS diff --git a/server/modules/filter/dbfwfilter/ruleparser.y b/server/modules/filter/dbfwfilter/ruleparser.y index fc29b1f74..1d90072d4 100644 --- a/server/modules/filter/dbfwfilter/ruleparser.y +++ b/server/modules/filter/dbfwfilter/ruleparser.y @@ -20,7 +20,6 @@ %{ #include #include "dbfwfilter.h" -#include %} /** We need a reentrant scanner so no global variables are used */ @@ -53,7 +52,7 @@ input : line_input - | line_input command { MXS_WARNING("Firewall rules file lacks a trailing newline."); } + | line_input command { FW_LOG_WARNING("Firewall rules file lacks a trailing newline.", ""); } ; line_input diff --git a/server/modules/filter/dbfwfilter/token.l b/server/modules/filter/dbfwfilter/token.l index 81558fcb2..e09915e02 100644 --- a/server/modules/filter/dbfwfilter/token.l +++ b/server/modules/filter/dbfwfilter/token.l @@ -13,7 +13,7 @@ %{ #include -#include +#include "dbfwfilter.h" %} %option reentrant noyywrap bison-bridge prefix="dbfw_yy" @@ -37,7 +37,7 @@ CMP [=<>!]+ %% {SPACE}"\n"+ return '\n'; {COMMENT} return FWTOK_COMMENT; -deny|allow MXS_WARNING("Use of '%s' is deprecated, use 'match' instead", yytext);return FWTOK_MATCH; +deny|allow FW_LOG_WARNING("Use of '%s' is deprecated, use 'match' instead", yytext);return FWTOK_MATCH; rule return FWTOK_RULE; function return FWTOK_FUNCTION; not_function return FWTOK_NOT_FUNCTION;