mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-08-13 21:36:00 +03:00
Moves system related functions from utils' to
utils/system'
This commit is contained in:
parent
73c4d69174
commit
f1e742c159
@ -220,7 +220,8 @@ UTILS = \
|
|||||||
utils/msc_tree.cc \
|
utils/msc_tree.cc \
|
||||||
utils/regex.cc \
|
utils/regex.cc \
|
||||||
utils/sha1.cc \
|
utils/sha1.cc \
|
||||||
utils/msc_string.cc
|
utils/msc_string.cc \
|
||||||
|
utils/msc_system.cc
|
||||||
|
|
||||||
COLLECTION = \
|
COLLECTION = \
|
||||||
collection/collections.cc \
|
collection/collections.cc \
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "audit_log/audit_log.h"
|
#include "audit_log/audit_log.h"
|
||||||
#include "modsecurity/transaction.h"
|
#include "modsecurity/transaction.h"
|
||||||
#include "src/utils.h"
|
#include "src/utils.h"
|
||||||
|
#include "src/utils/msc_system.h"
|
||||||
#include "utils/md5.h"
|
#include "utils/md5.h"
|
||||||
|
|
||||||
namespace modsecurity {
|
namespace modsecurity {
|
||||||
@ -110,10 +111,10 @@ bool Parallel::write(Transaction *transaction, int parts) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
createDir((logPath +
|
utils::createDir((logPath +
|
||||||
logFilePath(&transaction->m_timeStamp, YearMonthDayDirectory)).c_str(),
|
logFilePath(&transaction->m_timeStamp, YearMonthDayDirectory)).c_str(),
|
||||||
m_audit->directoryPermission);
|
m_audit->directoryPermission);
|
||||||
createDir((logPath +
|
utils::createDir((logPath +
|
||||||
logFilePath(&transaction->m_timeStamp, YearMonthDayDirectory
|
logFilePath(&transaction->m_timeStamp, YearMonthDayDirectory
|
||||||
| YearMonthDayAndTimeDirectory)).c_str(),
|
| YearMonthDayAndTimeDirectory)).c_str(),
|
||||||
m_audit->directoryPermission);
|
m_audit->directoryPermission);
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "operators/operator.h"
|
#include "operators/operator.h"
|
||||||
#include "utils/https_client.h"
|
#include "utils/https_client.h"
|
||||||
#include "src/utils.h"
|
#include "src/utils.h"
|
||||||
|
#include "src/utils/msc_system.h"
|
||||||
|
|
||||||
namespace modsecurity {
|
namespace modsecurity {
|
||||||
namespace operators {
|
namespace operators {
|
||||||
@ -37,7 +38,7 @@ bool PmFromFile::init(const std::string &config, std::string *error) {
|
|||||||
}
|
}
|
||||||
iss = new std::stringstream(client.content);
|
iss = new std::stringstream(client.content);
|
||||||
} else {
|
} else {
|
||||||
std::string resource = find_resource(m_param, config);
|
std::string resource = utils::find_resource(m_param, config);
|
||||||
iss = new std::ifstream(resource, std::ios::in);
|
iss = new std::ifstream(resource, std::ios::in);
|
||||||
|
|
||||||
if (((std::ifstream *)iss)->is_open() == false) {
|
if (((std::ifstream *)iss)->is_open() == false) {
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include "request_body_processor/xml.h"
|
#include "request_body_processor/xml.h"
|
||||||
#include "src/utils.h"
|
#include "src/utils.h"
|
||||||
|
#include "src/utils/msc_system.h"
|
||||||
#include "operators/operator.h"
|
#include "operators/operator.h"
|
||||||
|
|
||||||
namespace modsecurity {
|
namespace modsecurity {
|
||||||
@ -26,7 +27,7 @@ namespace operators {
|
|||||||
|
|
||||||
|
|
||||||
bool ValidateDTD::init(const std::string &file, std::string *error) {
|
bool ValidateDTD::init(const std::string &file, std::string *error) {
|
||||||
m_resource = find_resource(m_param, file);
|
m_resource = utils::find_resource(m_param, file);
|
||||||
if (m_resource == "") {
|
if (m_resource == "") {
|
||||||
error->assign("XML: File not found: " + m_param + ".");
|
error->assign("XML: File not found: " + m_param + ".");
|
||||||
return false;
|
return false;
|
||||||
|
@ -19,14 +19,14 @@
|
|||||||
|
|
||||||
#include "operators/operator.h"
|
#include "operators/operator.h"
|
||||||
#include "request_body_processor/xml.h"
|
#include "request_body_processor/xml.h"
|
||||||
#include "src/utils.h"
|
#include "src/utils/msc_system.h"
|
||||||
|
|
||||||
|
|
||||||
namespace modsecurity {
|
namespace modsecurity {
|
||||||
namespace operators {
|
namespace operators {
|
||||||
|
|
||||||
bool ValidateSchema::init(const std::string &file, std::string *error) {
|
bool ValidateSchema::init(const std::string &file, std::string *error) {
|
||||||
m_resource = find_resource(m_param, file);
|
m_resource = utils::find_resource(m_param, file);
|
||||||
if (m_resource == "") {
|
if (m_resource == "") {
|
||||||
error->assign("XML: File not found: " + m_param + ".");
|
error->assign("XML: File not found: " + m_param + ".");
|
||||||
return false;
|
return false;
|
||||||
|
@ -57,6 +57,7 @@ class Driver;
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "utils/geo_lookup.h"
|
#include "utils/geo_lookup.h"
|
||||||
#include "utils/msc_string.h"
|
#include "utils/msc_string.h"
|
||||||
|
#include "utils/msc_system.h"
|
||||||
#include "variables/xml.h"
|
#include "variables/xml.h"
|
||||||
#include "variables/duration.h"
|
#include "variables/duration.h"
|
||||||
#include "variables/env.h"
|
#include "variables/env.h"
|
||||||
@ -661,7 +662,8 @@ expression:
|
|||||||
| CONFIG_DIR_GEO_DB
|
| CONFIG_DIR_GEO_DB
|
||||||
{
|
{
|
||||||
#ifdef WITH_GEOIP
|
#ifdef WITH_GEOIP
|
||||||
std::string file = modsecurity::find_resource($1, driver.ref.back());
|
std::string file = modsecurity::utils::find_resource($1,
|
||||||
|
driver.ref.back());
|
||||||
if (GeoLookup::getInstance().setDataBase(file) == false) {
|
if (GeoLookup::getInstance().setDataBase(file) == false) {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "Failed to load the GeoDB from: ";
|
ss << "Failed to load the GeoDB from: ";
|
||||||
|
@ -398,8 +398,8 @@ VAR_FREE_TEXT_SPACE_COMMA [^, \t\"]+
|
|||||||
|
|
||||||
{CONFIG_INCLUDE}[ ]{CONFIG_VALUE_PATH} {
|
{CONFIG_INCLUDE}[ ]{CONFIG_VALUE_PATH} {
|
||||||
const char *file = strchr(yytext, ' ') + 1;
|
const char *file = strchr(yytext, ' ') + 1;
|
||||||
for (auto& s: modsecurity::expandEnv(file, 0)) {
|
for (auto& s: modsecurity::utils::expandEnv(file, 0)) {
|
||||||
std::string f = modsecurity::find_resource(s, driver.ref.back());
|
std::string f = modsecurity::utils::find_resource(s, driver.ref.back());
|
||||||
yyin = fopen(f.c_str(), "r" );
|
yyin = fopen(f.c_str(), "r" );
|
||||||
if (!yyin) {
|
if (!yyin) {
|
||||||
BEGIN(INITIAL);
|
BEGIN(INITIAL);
|
||||||
@ -416,8 +416,8 @@ VAR_FREE_TEXT_SPACE_COMMA [^, \t\"]+
|
|||||||
const char *file = strchr(yytext, ' ') + 1;
|
const char *file = strchr(yytext, ' ') + 1;
|
||||||
char *f = strdup(file + 1);
|
char *f = strdup(file + 1);
|
||||||
f[strlen(f)-1] = '\0';
|
f[strlen(f)-1] = '\0';
|
||||||
for (auto& s: modsecurity::expandEnv(f, 0)) {
|
for (auto& s: modsecurity::utils::expandEnv(f, 0)) {
|
||||||
std::string f = modsecurity::find_resource(s, driver.ref.back());
|
std::string f = modsecurity::utils::find_resource(s, driver.ref.back());
|
||||||
yyin = fopen(f.c_str(), "r" );
|
yyin = fopen(f.c_str(), "r" );
|
||||||
if (!yyin) {
|
if (!yyin) {
|
||||||
BEGIN(INITIAL);
|
BEGIN(INITIAL);
|
||||||
|
@ -43,11 +43,13 @@
|
|||||||
#include "src/unique_id.h"
|
#include "src/unique_id.h"
|
||||||
#include "src/utils.h"
|
#include "src/utils.h"
|
||||||
#include "utils/msc_string.h"
|
#include "utils/msc_string.h"
|
||||||
|
#include "utils/msc_system.h"
|
||||||
#include "modsecurity/rule.h"
|
#include "modsecurity/rule.h"
|
||||||
#include "modsecurity/rules_properties.h"
|
#include "modsecurity/rules_properties.h"
|
||||||
#include "src/actions/allow.h"
|
#include "src/actions/allow.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
using modsecurity::actions::Action;
|
using modsecurity::actions::Action;
|
||||||
using modsecurity::RequestBodyProcessor::Multipart;
|
using modsecurity::RequestBodyProcessor::Multipart;
|
||||||
using modsecurity::RequestBodyProcessor::XML;
|
using modsecurity::RequestBodyProcessor::XML;
|
||||||
@ -121,7 +123,7 @@ Transaction::Transaction(ModSecurity *ms, Rules *rules, void *logCbData)
|
|||||||
m_marker(""),
|
m_marker(""),
|
||||||
m_allowType(modsecurity::actions::NoneAllowType),
|
m_allowType(modsecurity::actions::NoneAllowType),
|
||||||
m_skip_next(0),
|
m_skip_next(0),
|
||||||
m_creationTimeStamp(cpu_seconds()),
|
m_creationTimeStamp(utils::cpu_seconds()),
|
||||||
m_logCbData(logCbData),
|
m_logCbData(logCbData),
|
||||||
m_ms(ms),
|
m_ms(ms),
|
||||||
m_collections(ms->m_global_collection, ms->m_ip_collection,
|
m_collections(ms->m_global_collection, ms->m_ip_collection,
|
||||||
|
81
src/utils.cc
81
src/utils.cc
@ -235,31 +235,6 @@ std::string uri_decode(const std::string & sSrc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void createDir(std::string dir, int mode) {
|
|
||||||
#if defined _MSC_VER
|
|
||||||
_mkdir(dir.data());
|
|
||||||
#elif defined __GNUC__
|
|
||||||
mkdir(dir.data(), mode);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
double cpu_seconds(void) {
|
|
||||||
/*
|
|
||||||
* FIXME: Temporary hack to fix build on MacOS X. Very issuficient way, but
|
|
||||||
* works. Worth reimplementing using mach_absolute_time().
|
|
||||||
*/
|
|
||||||
#ifndef MACOSX
|
|
||||||
struct timespec t;
|
|
||||||
if (!clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t))
|
|
||||||
return static_cast<double>(t.tv_sec)
|
|
||||||
+ static_cast<double>(t.tv_nsec / 1000000000.0);
|
|
||||||
else
|
|
||||||
return static_cast<double>(clock()) /
|
|
||||||
static_cast<double>(CLOCKS_PER_SEC);
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -602,61 +577,5 @@ unsigned char *c2x(unsigned what, unsigned char *where) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
std::vector<std::string> expandEnv(const std::string& var, int flags) {
|
|
||||||
std::vector<std::string> vars;
|
|
||||||
|
|
||||||
wordexp_t p;
|
|
||||||
if (wordexp(var.c_str(), &p, flags) == false) {
|
|
||||||
if (p.we_wordc) {
|
|
||||||
for (char** exp = p.we_wordv; *exp; ++exp) {
|
|
||||||
vars.push_back(exp[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
wordfree(&p);
|
|
||||||
}
|
|
||||||
return vars;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
std::string get_path(const std::string& file) {
|
|
||||||
size_t found;
|
|
||||||
|
|
||||||
found = file.find_last_of("/\\");
|
|
||||||
if (found > 0) {
|
|
||||||
return file.substr(0, found);
|
|
||||||
}
|
|
||||||
|
|
||||||
return std::string("");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
std::string find_resource(const std::string& resource,
|
|
||||||
const std::string& config) {
|
|
||||||
std::ifstream *iss = NULL;
|
|
||||||
|
|
||||||
// Trying absolute or relative to the current dir.
|
|
||||||
iss = new std::ifstream(resource, std::ios::in);
|
|
||||||
if (iss->is_open()) {
|
|
||||||
iss->close();
|
|
||||||
delete iss;
|
|
||||||
return resource;
|
|
||||||
}
|
|
||||||
delete iss;
|
|
||||||
|
|
||||||
// Trying the same path of the configuration file.
|
|
||||||
std::string f = get_path(config) + "/" + resource;
|
|
||||||
iss = new std::ifstream(f, std::ios::in);
|
|
||||||
if (iss->is_open()) {
|
|
||||||
iss->close();
|
|
||||||
delete iss;
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
delete iss;
|
|
||||||
|
|
||||||
return std::string("");
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace modsecurity
|
} // namespace modsecurity
|
||||||
|
|
||||||
|
@ -34,9 +34,7 @@ namespace modsecurity {
|
|||||||
uint64_t input_len, int *invalid_count, int *changed);
|
uint64_t input_len, int *invalid_count, int *changed);
|
||||||
double random_number(const double from, const double to);
|
double random_number(const double from, const double to);
|
||||||
double generate_transaction_unique_id();
|
double generate_transaction_unique_id();
|
||||||
void createDir(std::string dir, int mode);
|
|
||||||
std::string uri_decode(const std::string & sSrc);
|
std::string uri_decode(const std::string & sSrc);
|
||||||
double cpu_seconds(void);
|
|
||||||
int js_decode_nonstrict_inplace(unsigned char *input, int64_t input_len);
|
int js_decode_nonstrict_inplace(unsigned char *input, int64_t input_len);
|
||||||
unsigned char x2c(unsigned char *what);
|
unsigned char x2c(unsigned char *what);
|
||||||
unsigned char *c2x(unsigned what, unsigned char *where);
|
unsigned char *c2x(unsigned what, unsigned char *where);
|
||||||
@ -48,9 +46,6 @@ namespace modsecurity {
|
|||||||
int urldecode_uni_nonstrict_inplace_ex(Transaction *transaction,
|
int urldecode_uni_nonstrict_inplace_ex(Transaction *transaction,
|
||||||
unsigned char *input, int64_t input_len, int *changed);
|
unsigned char *input, int64_t input_len, int *changed);
|
||||||
std::string phase_name(int x);
|
std::string phase_name(int x);
|
||||||
std::vector<std::string> expandEnv(const std::string& var, int flags);
|
|
||||||
std::string find_resource(const std::string& file,
|
|
||||||
const std::string& param);
|
|
||||||
} // namespace modsecurity
|
} // namespace modsecurity
|
||||||
|
|
||||||
|
|
||||||
|
126
src/utils/msc_system.cc
Normal file
126
src/utils/msc_system.cc
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
/*
|
||||||
|
* ModSecurity, http://www.modsecurity.org/
|
||||||
|
* Copyright (c) 2015 Trustwave Holdings, Inc. (http://www.trustwave.com/)
|
||||||
|
*
|
||||||
|
* You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* If any of the files related to licensing are missing or if you have any
|
||||||
|
* other questions related to licensing please contact Trustwave Holdings, Inc.
|
||||||
|
* directly using the email address security@modsecurity.org.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <wordexp.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
#include <ctime>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#if defined _MSC_VER
|
||||||
|
#include <direct.h>
|
||||||
|
#elif defined __GNUC__
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "utils.h"
|
||||||
|
#include "utils/msc_system.h"
|
||||||
|
|
||||||
|
namespace modsecurity {
|
||||||
|
namespace utils {
|
||||||
|
|
||||||
|
|
||||||
|
double cpu_seconds(void) {
|
||||||
|
/*
|
||||||
|
* FIXME: Temporary hack to fix build on MacOS X. Very issuficient way, but
|
||||||
|
* works. Worth reimplementing using mach_absolute_time().
|
||||||
|
*/
|
||||||
|
#ifndef MACOSX
|
||||||
|
struct timespec t;
|
||||||
|
if (!clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t))
|
||||||
|
return static_cast<double>(t.tv_sec)
|
||||||
|
+ static_cast<double>(t.tv_nsec / 1000000000.0);
|
||||||
|
else
|
||||||
|
return static_cast<double>(clock()) /
|
||||||
|
static_cast<double>(CLOCKS_PER_SEC);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string find_resource(const std::string& resource,
|
||||||
|
const std::string& config) {
|
||||||
|
std::ifstream *iss = NULL;
|
||||||
|
|
||||||
|
// Trying absolute or relative to the current dir.
|
||||||
|
iss = new std::ifstream(resource, std::ios::in);
|
||||||
|
if (iss->is_open()) {
|
||||||
|
iss->close();
|
||||||
|
delete iss;
|
||||||
|
return resource;
|
||||||
|
}
|
||||||
|
delete iss;
|
||||||
|
|
||||||
|
// Trying the same path of the configuration file.
|
||||||
|
std::string f = get_path(config) + "/" + resource;
|
||||||
|
iss = new std::ifstream(f, std::ios::in);
|
||||||
|
if (iss->is_open()) {
|
||||||
|
iss->close();
|
||||||
|
delete iss;
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
delete iss;
|
||||||
|
|
||||||
|
return std::string("");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string get_path(const std::string& file) {
|
||||||
|
size_t found;
|
||||||
|
|
||||||
|
found = file.find_last_of("/\\");
|
||||||
|
if (found > 0) {
|
||||||
|
return file.substr(0, found);
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::string("");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::string> expandEnv(const std::string& var, int flags) {
|
||||||
|
std::vector<std::string> vars;
|
||||||
|
|
||||||
|
wordexp_t p;
|
||||||
|
if (wordexp(var.c_str(), &p, flags) == false) {
|
||||||
|
if (p.we_wordc) {
|
||||||
|
for (char** exp = p.we_wordv; *exp; ++exp) {
|
||||||
|
vars.push_back(exp[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wordfree(&p);
|
||||||
|
}
|
||||||
|
return vars;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void createDir(std::string dir, int mode) {
|
||||||
|
#if defined _MSC_VER
|
||||||
|
_mkdir(dir.data());
|
||||||
|
#elif defined __GNUC__
|
||||||
|
mkdir(dir.data(), mode);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace utils
|
||||||
|
} // namespace modsecurity
|
41
src/utils/msc_system.h
Normal file
41
src/utils/msc_system.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* ModSecurity, http://www.modsecurity.org/
|
||||||
|
* Copyright (c) 2015 Trustwave Holdings, Inc. (http://www.trustwave.com/)
|
||||||
|
*
|
||||||
|
* You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* If any of the files related to licensing are missing or if you have any
|
||||||
|
* other questions related to licensing please contact Trustwave Holdings, Inc.
|
||||||
|
* directly using the email address security@modsecurity.org.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ctime>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "modsecurity/modsecurity.h"
|
||||||
|
|
||||||
|
#ifndef SRC_UTILS_SYSTEM_H_
|
||||||
|
#define SRC_UTILS_SYSTEM_H_
|
||||||
|
|
||||||
|
|
||||||
|
namespace modsecurity {
|
||||||
|
namespace utils {
|
||||||
|
|
||||||
|
|
||||||
|
double cpu_seconds(void);
|
||||||
|
std::string find_resource(const std::string& file, const std::string& param);
|
||||||
|
std::string get_path(const std::string& file);
|
||||||
|
std::vector<std::string> expandEnv(const std::string& var, int flags);
|
||||||
|
void createDir(std::string dir, int mode);
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace utils
|
||||||
|
} // namespace modsecurity
|
||||||
|
|
||||||
|
#endif // SRC_UTILS_SYSTEM_H_
|
@ -22,7 +22,7 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "modsecurity/transaction.h"
|
#include "modsecurity/transaction.h"
|
||||||
#include "src/utils.h"
|
#include "src/utils/msc_system.h"
|
||||||
|
|
||||||
namespace modsecurity {
|
namespace modsecurity {
|
||||||
namespace Variables {
|
namespace Variables {
|
||||||
@ -31,7 +31,7 @@ void Duration::evaluateInternal(Transaction *transaction,
|
|||||||
std::vector<const collection::Variable *> *l) {
|
std::vector<const collection::Variable *> *l) {
|
||||||
std::string res;
|
std::string res;
|
||||||
|
|
||||||
double e = cpu_seconds() - transaction->m_creationTimeStamp;
|
double e = utils::cpu_seconds() - transaction->m_creationTimeStamp;
|
||||||
|
|
||||||
res = std::to_string(e);
|
res = std::to_string(e);
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "modsecurity/modsecurity.h"
|
#include "modsecurity/modsecurity.h"
|
||||||
#include "modsecurity/rules.h"
|
#include "modsecurity/rules.h"
|
||||||
#include "src/utils.h"
|
#include "src/utils.h"
|
||||||
|
#include "src/utils/msc_system.h"
|
||||||
#include "parser/driver.h"
|
#include "parser/driver.h"
|
||||||
#include "utils/https_client.h"
|
#include "utils/https_client.h"
|
||||||
#include "modsecurity/rules_properties.h"
|
#include "modsecurity/rules_properties.h"
|
||||||
@ -42,7 +43,8 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
int i = 1;
|
int i = 1;
|
||||||
while (i < argc) {
|
while (i < argc) {
|
||||||
std::vector<std::string> tfiles = modsecurity::expandEnv(argv[i] , 0);
|
std::vector<std::string> tfiles = modsecurity::utils::expandEnv(
|
||||||
|
argv[i], 0);
|
||||||
for (const auto &file : tfiles) {
|
for (const auto &file : tfiles) {
|
||||||
files.insert(files.begin(), file);
|
files.insert(files.begin(), file);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user