From c22658ec80e0e2e0b4abb6d13e6ccc71591c8223 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Sun, 20 Aug 2017 18:30:17 -0300 Subject: [PATCH] Adds `msc_update_status_code' method to the libmodsec api --- headers/modsecurity/transaction.h | 4 +++ src/transaction.cc | 43 +++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/headers/modsecurity/transaction.h b/headers/modsecurity/transaction.h index fb12dd41..e6ed609e 100644 --- a/headers/modsecurity/transaction.h +++ b/headers/modsecurity/transaction.h @@ -309,6 +309,7 @@ class Transaction : public TransactionAnchoredVariables { int appendResponseBody(const unsigned char *body, size_t size); int processLogging(); + int updateStatusCode(int status); bool intervention(ModSecurityIntervention *it); @@ -622,6 +623,9 @@ int msc_intervention(Transaction *transaction, ModSecurityIntervention *it); /** @ingroup ModSecurity_C_API */ int msc_process_logging(Transaction *transaction); +/** @ingroup ModSecurity_C_API */ +int msc_update_status_code(Transaction *transaction, int status); + #ifdef __cplusplus } } // namespace modsecurity diff --git a/src/transaction.cc b/src/transaction.cc index 97115893..1a566830 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -1694,6 +1694,29 @@ int Transaction::getRuleEngineState() { } +/** + * @name updateStatusCode + * @brief Updates response status code. + * + * Called after processResponseHeaders to inform a new response code. + * Not mandatory. + * + * + * @param status The returned http code. + * + * @returns If the operation was successful or not. + * @retval true Operation was successful. + * @retval false Operation failed. + * + */ +int Transaction::updateStatusCode(int code) { + this->m_httpCodeReturned = code; + m_variableResponseStatus.set(std::to_string(code), m_variableOffset); + + return true; +} + + /** * @name msc_new_transaction * @brief Create a new transaction for a given configuration and ModSecurity core. @@ -2126,5 +2149,25 @@ extern "C" int msc_process_logging(Transaction *transaction) { return transaction->processLogging(); } + +/** + * @name msc_update_status_code + * @brief Updates response status code. + * + * Called after msc_process_response_headers to inform a new response code. + * Not mandatory. + * + * @param transaction ModSecurity transaction. + * + * @returns If the operation was successful or not. + * @retval 1 Operation was successful. + * @retval 0 Operation failed. + * + */ +extern "C" int msc_update_status_code(Transaction *transaction, int status) { + return transaction->updateStatusCode(status); +} + + } // namespace modsecurity