Adds support to the server ID generation

The server ID is a sha-1 identifier generated from the mac address of the first
ethernet device plus the server name. The process is the same used by
ModSecurity 2.9
This commit is contained in:
Felipe Zimmerle
2015-07-07 15:38:21 -03:00
parent aadbacf854
commit 2109910848
19 changed files with 813 additions and 38 deletions

View File

@@ -78,13 +78,12 @@ void perform_unit_test(std::vector<RegressionTest *> *tests,
}
modsec_assay = new ModSecurity::Assay(modsec, modsec_rules);
if (t->ip.empty() == false) {
// FIXME: no cast please.
modsec_assay->processConnection(t->ip.c_str());
actions(&r, modsec_assay->intervention());
if (r.status != 200) {
goto end;
}
modsec_assay->processConnection(t->clientIp.c_str(),
t->clientPort, t->serverIp.c_str(), t->serverPort);
actions(&r, modsec_assay->intervention());
if (r.status != 200) {
goto end;
}
if (t->uri.empty() == false) {
modsec_assay->processURI(t->uri.c_str());

View File

@@ -107,6 +107,32 @@ RegressionTest *RegressionTest::from_yajl_node(const yajl_val &node) {
if (strcmp(key, "github_issue") == 0) {
u->github_issue = YAJL_GET_INTEGER(val);
}
if (strcmp(key, "client") == 0) {
for (int j = 0; j < val->u.object.len; j++) {
const char *key2 = val->u.object.keys[j];
yajl_val val2 = val->u.object.values[j];
if (strcmp(key2, "ip") == 0) {
u->clientIp = YAJL_GET_STRING(val2);
}
if (strcmp(key2, "port") == 0) {
u->clientPort = YAJL_GET_INTEGER(val2);
}
}
}
if (strcmp(key, "server") == 0) {
for (int j = 0; j < val->u.object.len; j++) {
const char *key2 = val->u.object.keys[j];
yajl_val val2 = val->u.object.values[j];
if (strcmp(key2, "ip") == 0) {
u->serverIp = YAJL_GET_STRING(val2);
}
if (strcmp(key2, "port") == 0) {
u->serverPort = YAJL_GET_INTEGER(val2);
}
}
}
if (strcmp(key, "request") == 0) {
for (int j = 0; j < val->u.object.len; j++) {
const char *key2 = val->u.object.keys[j];
@@ -115,9 +141,6 @@ RegressionTest *RegressionTest::from_yajl_node(const yajl_val &node) {
if (strcmp(key2, "uri") == 0) {
u->uri = YAJL_GET_STRING(val2);
}
if (strcmp(key2, "ip") == 0) {
u->ip = YAJL_GET_STRING(val2);
}
if (strcmp(key2, "headers") == 0) {
u->request_headers = yajl_array_to_map(val2);
}

View File

@@ -51,7 +51,11 @@ class RegressionTest {
std::string debug_log;
std::string error_log;
std::string ip;
std::string clientIp;
std::string serverIp;
int clientPort;
int serverPort;
std::string uri;
static inline std::string yajl_array_to_str(const yajl_val &node);