GIF89a; EcchiShell v1.0
//proc/self/root/usr/local/modsecurity/ m_clientIpAddress; /** * Holds the HTTP version: 1.2, 2.0, 3.0 and so on.... */ std::string m_httpVersion; /** * Holds the server IP Address */ std::shared_ptr m_serverIpAddress; /** * Holds the raw URI that was requested. */ std::string m_uri; /** * Holds the URI that was requests (without the query string). */ std::shared_ptr m_uri_no_query_string_decoded; /** * Holds the combined size of all arguments, later used to fill the * variable ARGS_COMBINED_SIZE. */ double m_ARGScombinedSizeDouble; /** * Client tcp port. */ int m_clientPort; /** * This variable is set by the action `severity' and later can be * consulted via the SecLanguage variable HIGHEST_SEVERITY. */ int m_highestSeverityAction; /** * Holds the HTTP return code when it is known. If 0 nothing was * set. */ int m_httpCodeReturned; /** * Holds the server port. */ int m_serverPort; /** * ModSecurity instance used to start this transaction. Basically used * to fill the server log whenever is needed. */ ModSecurity *m_ms; /** * Holds the type of the request body, in case there is one. */ RequestBodyType m_requestBodyType; /** * Holds the request body "processor" */ RequestBodyType m_requestBodyProcessor; /** * Rules object utilized during this specific transaction. */ RulesSet *m_rules; /** * */ std::list m_ruleRemoveById; std::list > m_ruleRemoveByIdRange; /** * */ std::list m_ruleRemoveByTag; /** * */ std::list< std::pair > m_ruleRemoveTargetByTag; /** * */ std::list< std::pair > m_ruleRemoveTargetById; /** * */ int m_requestBodyAccess; /** * The list m_auditLogModifier contains modifications to the `auditlogs' * for this specific request, those modifications can happens via the * utilization of the action: `ctl:auditLogParts=' * */ std::list< std::pair > m_auditLogModifier; /** * This variable holds all the messages asked to be save by the utilization * of the actions: `log_data' and `msg'. These should be included on the * auditlogs. */ std::list m_rulesMessages; /** * Holds the request body, in case of any. */ std::ostringstream m_requestBody; /** * Holds the response body, in case of any. */ std::ostringstream m_responseBody; /** * Contains the unique ID of the transaction. Use by the variable * `UNIQUE_ID'. This unique id is also saved as part of the AuditLog. */ std::shared_ptr m_id; /** * Holds the amount of rules that should be skipped. If bigger than 0 the * current rule should be skipped and the number needs to be decreased. */ int m_skip_next; /** * If allow action was utilized, this variable holds the allow type. */ modsecurity::actions::disruptive::AllowType m_allowType; /** * Holds the decode URI. Notice that m_uri holds the raw version * of the URI. */ std::string m_uri_decoded; /** * Actions (disruptive?) that should be taken by the connector related to * that transaction. */ std::vector m_actions; ModSecurityIntervention m_it; /** * Holds the creation time stamp, using std::time. * * TODO: m_timeStamp and m_creationTimeStamp may be merged into a single * variable. */ time_t m_timeStamp; /** * Holds all the collections related to that transaction. */ collection::Collections m_collections; /** * Holds the whatever matched in the operation utilization. * That variable will be further used by the capture action. * */ std::list m_matched; RequestBodyProcessor::XML *m_xml; RequestBodyProcessor::JSON *m_json; int m_secRuleEngine; std::string m_variableDuration; std::map m_variableEnvs; std::string m_variableHighestSeverityAction; std::string m_variableRemoteUser; std::string m_variableTime; std::string m_variableTimeDay; std::string m_variableTimeEpoch; std::string m_variableTimeHour; std::string m_variableTimeMin; std::string m_variableTimeSec; std::string m_variableTimeWDay; std::string m_variableTimeYear; private: /** * Pointer to the callback function that will be called to fill * the web server (connector) log. */ void *m_logCbData; }; #endif #ifdef __cplusplus extern "C" { #endif /** @ingroup ModSecurity_C_API */ Transaction *msc_new_transaction(ModSecurity *ms, RulesSet *rules, void *logCbData); /** @ingroup ModSecurity_C_API */ Transaction *msc_new_transaction_with_id(ModSecurity *ms, RulesSet *rules, char *id, void *logCbData); /** @ingroup ModSecurity_C_API */ int msc_process_connection(Transaction *transaction, const char *client, int cPort, const char *server, int sPort); /** @ingroup ModSecurity_C_API */ int msc_process_request_headers(Transaction *transaction); /** @ingroup ModSecurity_C_API */ int msc_add_request_header(Transaction *transaction, const unsigned char *key, const unsigned char *value); /** @ingroup ModSecurity_C_API */ int msc_add_n_request_header(Transaction *transaction, const unsigned char *key, size_t len_key, const unsigned char *value, size_t len_value); /** @ingroup ModSecurity_C_API */ int msc_process_request_body(Transaction *transaction); /** @ingroup ModSecurity_C_API */ int msc_append_request_body(Transaction *transaction, const unsigned char *body, size_t size); /** @ingroup ModSecurity_C_API */ int msc_request_body_from_file(Transaction *transaction, const char *path); /** @ingroup ModSecurity_C_API */ int msc_process_response_headers(Transaction *transaction, int code, const char* protocol); /** @ingroup ModSecurity_C_API */ int msc_add_response_header(Transaction *transaction, const unsigned char *key, const unsigned char *value); /** @ingroup ModSecurity_C_API */ int msc_add_n_response_header(Transaction *transaction, const unsigned char *key, size_t len_key, const unsigned char *value, size_t len_value); /** @ingroup ModSecurity_C_API */ int msc_process_response_body(Transaction *transaction); /** @ingroup ModSecurity_C_API */ int msc_append_response_body(Transaction *transaction, const unsigned char *body, size_t size); /** @ingroup ModSecurity_C_API */ int msc_process_uri(Transaction *transaction, const char *uri, const char *protocol, const char *http_version); /** @ingroup ModSecurity_C_API */ const char *msc_get_response_body(Transaction *transaction); /** @ingroup ModSecurity_C_API */ size_t msc_get_response_body_length(Transaction *transaction); /** @ingroup ModSecurity_C_API */ size_t msc_get_request_body_length(Transaction *transaction); /** @ingroup ModSecurity_C_API */ void msc_transaction_cleanup(Transaction *transaction); /** @ingroup ModSecurity_C_API */ 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 #endif #endif // HEADERS_MODSECURITY_TRANSACTION_H_