diff --git a/src/modsecurity.cc b/src/modsecurity.cc index 0380d346..3a0d3d03 100644 --- a/src/modsecurity.cc +++ b/src/modsecurity.cc @@ -21,8 +21,10 @@ #include #include #endif +#ifdef WITH_LIBXML2 #include #include +#endif #ifdef MSC_WITH_CURL #include #endif @@ -78,7 +80,9 @@ ModSecurity::ModSecurity() #ifdef MSC_WITH_CURL curl_global_init(CURL_GLOBAL_ALL); #endif +#ifdef WITH_LIBXML2 xmlInitParser(); +#endif } @@ -89,8 +93,9 @@ ModSecurity::~ModSecurity() { #ifdef WITH_GEOIP Utils::GeoLookup::getInstance().cleanUp(); #endif +#ifdef WITH_LIBXML2 xmlCleanupParser(); - +#endif delete m_global_collection; delete m_resource_collection; delete m_ip_collection; diff --git a/src/operators/validate_dtd.cc b/src/operators/validate_dtd.cc index bb3e05c4..5767a6a4 100644 --- a/src/operators/validate_dtd.cc +++ b/src/operators/validate_dtd.cc @@ -24,7 +24,7 @@ namespace modsecurity { namespace operators { - +#ifdef WITH_LIBXML2 bool ValidateDTD::init(const std::string &file, std::string *error) { std::string err; m_resource = utils::find_resource(m_param, file, &err); @@ -112,7 +112,7 @@ bool ValidateDTD::evaluate(Transaction *t, const std::string &str) { return false; } - +#endif } // namespace operators } // namespace modsecurity diff --git a/src/operators/validate_dtd.h b/src/operators/validate_dtd.h index a533398f..a3440d05 100644 --- a/src/operators/validate_dtd.h +++ b/src/operators/validate_dtd.h @@ -19,9 +19,10 @@ #include #include #include +#ifdef WITH_LIBXML2 #include #include - +#endif #include #include #include @@ -37,6 +38,7 @@ class ValidateDTD : public Operator { /** @ingroup ModSecurity_Operator */ explicit ValidateDTD(std::unique_ptr param) : Operator("ValidateDTD", std::move(param)) { } +#ifdef WITH_LIBXML2 ~ValidateDTD() { if (m_dtd != NULL) { xmlFreeDtd(m_dtd); @@ -92,6 +94,7 @@ class ValidateDTD : public Operator { private: std::string m_resource; xmlDtdPtr m_dtd; +#endif }; } // namespace operators diff --git a/src/operators/validate_schema.cc b/src/operators/validate_schema.cc index 8bf97bce..658c8674 100644 --- a/src/operators/validate_schema.cc +++ b/src/operators/validate_schema.cc @@ -25,6 +25,8 @@ namespace modsecurity { namespace operators { +#ifdef WITH_LIBXML2 + bool ValidateSchema::init(const std::string &file, std::string *error) { std::string err; m_resource = utils::find_resource(m_param, file, &err); @@ -146,6 +148,7 @@ bool ValidateSchema::evaluate(Transaction *t, return false; } +#endif } // namespace operators } // namespace modsecurity diff --git a/src/operators/validate_schema.h b/src/operators/validate_schema.h index e1becf3f..e07e237b 100644 --- a/src/operators/validate_schema.h +++ b/src/operators/validate_schema.h @@ -19,9 +19,10 @@ #include #include #include +#ifdef WITH_LIBXML2 #include #include - +#endif #include #include #include @@ -35,6 +36,10 @@ namespace operators { class ValidateSchema : public Operator { public: /** @ingroup ModSecurity_Operator */ +#ifndef WITH_LIBXML2 + explicit ValidateSchema(std::unique_ptr param) + : Operator("ValidateSchema", std::move(param)) { } +#else explicit ValidateSchema(std::unique_ptr param) : Operator("ValidateSchema", std::move(param)), m_parserCtx(NULL), @@ -133,6 +138,7 @@ class ValidateSchema : public Operator { xmlSchemaPtr m_schema; std::string m_resource; std::string m_err; +#endif }; } // namespace operators diff --git a/src/request_body_processor/xml.cc b/src/request_body_processor/xml.cc index bca1a22e..26d494e1 100644 --- a/src/request_body_processor/xml.cc +++ b/src/request_body_processor/xml.cc @@ -23,6 +23,7 @@ namespace modsecurity { namespace RequestBodyProcessor { +#ifdef WITH_LIBXML2 XML::XML(Transaction *transaction) : m_transaction(transaction) { @@ -148,6 +149,7 @@ bool XML::complete(std::string *error) { return true; } +#endif } // namespace RequestBodyProcessor } // namespace modsecurity diff --git a/src/request_body_processor/xml.h b/src/request_body_processor/xml.h index e3ca8723..2616c36a 100644 --- a/src/request_body_processor/xml.h +++ b/src/request_body_processor/xml.h @@ -13,9 +13,10 @@ * */ - +#ifdef WITH_LIBXML2 #include #include +#endif #include #include @@ -30,6 +31,7 @@ namespace modsecurity { namespace RequestBodyProcessor { +#ifdef WITH_LIBXML2 struct xml_data { xmlSAXHandler *sax_handler; @@ -63,6 +65,8 @@ class XML { std::string m_header; }; +#endif + } // namespace RequestBodyProcessor } // namespace modsecurity diff --git a/src/transaction.cc b/src/transaction.cc index a6a967c6..574cd54b 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -126,7 +126,11 @@ Transaction::Transaction(ModSecurity *ms, Rules *rules, void *logCbData) #else m_json(NULL), #endif +#ifdef WITH_LIBXML2 m_xml(new RequestBodyProcessor::XML(this)), +#else + m_xml(NULL), +#endif TransactionAnchoredVariables(this) { m_id = std::to_string(this->m_timeStamp) + \ std::to_string(modsecurity::utils::generate_transaction_unique_id()); @@ -159,7 +163,9 @@ Transaction::~Transaction() { #ifdef WITH_YAJL delete m_json; #endif +#ifdef WITH_LIBXML2 delete m_xml; +#endif } @@ -666,6 +672,7 @@ int Transaction::processRequestBody() { */ std::unique_ptr a = m_variableRequestHeaders.resolveFirst( "Content-Type"); +#ifdef WITH_LIBXML2 if (m_requestBodyProcessor == XMLRequestBody) { std::string error; if (m_xml->init() == true) { @@ -685,8 +692,13 @@ int Transaction::processRequestBody() { m_variableReqbodyError.set("0", m_variableOffset); m_variableReqbodyProcessorError.set("0", m_variableOffset); } +#endif #if WITH_YAJL +#ifdef WITH_LIBXML2 } else if (m_requestBodyProcessor == JSONRequestBody) { +#else + if (m_requestBodyProcessor == JSONRequestBody) { +#endif std::string error; if (m_json->init() == true) { m_json->processChunk(m_requestBody.str().c_str(), @@ -706,7 +718,11 @@ int Transaction::processRequestBody() { m_variableReqbodyProcessorError.set("0", m_variableOffset); } #endif +#if defined(WITH_LIBXML2) or defined(WITH_YAJL) } else if (m_requestBodyType == MultiPartRequestBody) { +#else + if (m_requestBodyType == MultiPartRequestBody) { +#endif std::string error; if (a != NULL) { Multipart m(*a, this); diff --git a/src/variables/xml.cc b/src/variables/xml.cc index 985a3bcc..8531de16 100644 --- a/src/variables/xml.cc +++ b/src/variables/xml.cc @@ -21,11 +21,13 @@ #include #include #include +#ifdef WITH_LIBXML2 #include #include #include #include #include +#endif #include #include @@ -44,6 +46,12 @@ namespace modsecurity { namespace Variables { +#ifndef WITH_LIBXML2 +void XML::evaluate(Transaction *t, + Rule *rule, + std::vector *l) { } +#else + void XML::evaluate(Transaction *t, Rule *rule, std::vector *l) { @@ -138,6 +146,7 @@ void XML::evaluate(Transaction *t, xmlXPathFreeContext(xpathCtx); } +#endif } // namespace Variables } // namespace modsecurity