mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-09-29 19:24:29 +03:00
Using Collection instead of GlobalCollection
Both has the same methods and characteristics except for the fact that one is global and the other not. That can be handled by the backend.
This commit is contained in:
@@ -26,8 +26,8 @@
|
||||
|
||||
#include "modsecurity/collection/variable.h"
|
||||
|
||||
#ifndef HEADERS_MODSECURITY_TRANSACTION_COLLECTION_H_
|
||||
#define HEADERS_MODSECURITY_TRANSACTION_COLLECTION_H_
|
||||
#ifndef HEADERS_MODSECURITY_COLLECTION_COLLECTION_H_
|
||||
#define HEADERS_MODSECURITY_COLLECTION_COLLECTION_H_
|
||||
|
||||
#ifndef __cplusplus
|
||||
typedef struct Variable_t Variables;
|
||||
@@ -44,7 +44,8 @@ class Collection {
|
||||
virtual bool storeOrUpdateFirst(const std::string &key,
|
||||
const std::string &value) = 0;
|
||||
|
||||
virtual bool updateFirst(const std::string &key, const std::string &value) = 0;
|
||||
virtual bool updateFirst(const std::string &key,
|
||||
const std::string &value) = 0;
|
||||
|
||||
virtual void del(const std::string& key) = 0;
|
||||
|
||||
@@ -56,6 +57,28 @@ class Collection {
|
||||
std::vector<const Variable *> *l) = 0;
|
||||
virtual void resolveRegularExpression(const std::string& var,
|
||||
std::vector<const Variable *> *l) = 0;
|
||||
|
||||
|
||||
virtual void store(std::string key, std::string compartment,
|
||||
std::string value) = 0;
|
||||
|
||||
virtual bool storeOrUpdateFirst(const std::string &key,
|
||||
std::string compartment, const std::string &value) = 0;
|
||||
|
||||
virtual bool updateFirst(const std::string &key, std::string compartment,
|
||||
const std::string &value) = 0;
|
||||
|
||||
virtual void del(const std::string& key, std::string compartment) = 0;
|
||||
|
||||
virtual std::string* resolveFirst(const std::string& var,
|
||||
std::string compartment) = 0;
|
||||
virtual void resolveSingleMatch(const std::string& var,
|
||||
std::string compartment, std::vector<const Variable *> *l) = 0;
|
||||
virtual void resolveMultiMatches(const std::string& var,
|
||||
std::string compartment, std::vector<const Variable *> *l) = 0;
|
||||
virtual void resolveRegularExpression(const std::string& var,
|
||||
std::string compartment,
|
||||
std::vector<const Variable *> *l) = 0;
|
||||
};
|
||||
|
||||
} // namespace collection
|
||||
@@ -63,4 +86,4 @@ class Collection {
|
||||
#endif
|
||||
|
||||
|
||||
#endif // HEADERS_MODSECURITY_TRANSACTION_COLLECTION_H_
|
||||
#endif // HEADERS_MODSECURITY_COLLECTION_COLLECTION_H_
|
||||
|
@@ -27,12 +27,11 @@
|
||||
#include <list>
|
||||
#endif
|
||||
|
||||
#include "modsecurity/collection/global_collection.h"
|
||||
#include "modsecurity/collection/collection.h"
|
||||
#include "modsecurity/collection/variable.h"
|
||||
|
||||
#ifndef HEADERS_MODSECURITY_TRANSACTION_COLLECTIONS_H_
|
||||
#define HEADERS_MODSECURITY_TRANSACTION_COLLECTIONS_H_
|
||||
#ifndef HEADERS_MODSECURITY_COLLECTION_COLLECTIONS_H_
|
||||
#define HEADERS_MODSECURITY_COLLECTION_COLLECTIONS_H_
|
||||
|
||||
#ifndef __cplusplus
|
||||
typedef struct Collections_t Collections;
|
||||
@@ -46,7 +45,7 @@ namespace collection {
|
||||
class Collections :
|
||||
public std::unordered_map<std::string, Collection *> {
|
||||
public:
|
||||
Collections(GlobalCollection *global, GlobalCollection *ip);
|
||||
Collections(Collection *global, Collection *ip);
|
||||
~Collections();
|
||||
|
||||
void store(std::string key, std::string value);
|
||||
@@ -88,8 +87,8 @@ class Collections :
|
||||
std::string m_global_collection_key;
|
||||
std::string m_ip_collection_key;
|
||||
|
||||
GlobalCollection *m_global_collection;
|
||||
GlobalCollection *m_ip_collection;
|
||||
Collection *m_global_collection;
|
||||
Collection *m_ip_collection;
|
||||
};
|
||||
|
||||
} // namespace collection
|
||||
@@ -97,6 +96,6 @@ class Collections :
|
||||
#endif
|
||||
|
||||
|
||||
#endif // HEADERS_MODSECURITY_TRANSACTION_COLLECTIONS_H_
|
||||
#endif // HEADERS_MODSECURITY_COLLECTION_COLLECTIONS_H_
|
||||
|
||||
|
||||
|
@@ -1,119 +0,0 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#endif
|
||||
|
||||
#include "modsecurity/collection/collection.h"
|
||||
#include "modsecurity/collection/variable.h"
|
||||
|
||||
|
||||
#ifndef HEADERS_MODSECURITY_TRANSACTION_GLOBAL_COLLECTION_H_
|
||||
#define HEADERS_MODSECURITY_TRANSACTION_GLOBAL_COLLECTION_H_
|
||||
|
||||
#ifndef __cplusplus
|
||||
typedef struct GlobalCollection_t GlobalCollection;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
namespace modsecurity {
|
||||
namespace collection {
|
||||
|
||||
class CollectionKey {
|
||||
public:
|
||||
CollectionKey()
|
||||
: m_compartiment(""),
|
||||
m_name("") { }
|
||||
explicit CollectionKey(std::string name)
|
||||
: m_compartiment(""),
|
||||
m_name(name) { }
|
||||
CollectionKey(std::string name, std::string compartiment)
|
||||
: m_compartiment(compartiment),
|
||||
m_name(name) { }
|
||||
|
||||
std::string m_name;
|
||||
std::string m_compartiment;
|
||||
};
|
||||
|
||||
|
||||
class collection_hash {
|
||||
public:
|
||||
size_t operator()(const CollectionKey *v) const {
|
||||
size_t h = 0;
|
||||
std::for_each(v->m_name.begin(), v->m_name.end(), [&](char c) {
|
||||
h += tolower(c);
|
||||
});
|
||||
std::for_each(v->m_compartiment.begin(),
|
||||
v->m_compartiment.end(), [&](char c) {
|
||||
h += tolower(c);
|
||||
});
|
||||
|
||||
return h;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class collection_equal {
|
||||
public:
|
||||
bool operator()(const CollectionKey *u, const CollectionKey *v) const {
|
||||
return u->m_name == v->m_name
|
||||
&& u->m_compartiment == v->m_compartiment;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class GlobalCollection :
|
||||
public std::unordered_multimap<CollectionKey *, std::string,
|
||||
collection_hash, collection_equal> {
|
||||
public:
|
||||
GlobalCollection();
|
||||
~GlobalCollection();
|
||||
void store(std::string key, std::string compartment, std::string value);
|
||||
|
||||
bool storeOrUpdateFirst(const std::string &key, std::string compartment,
|
||||
const std::string &value);
|
||||
|
||||
bool updateFirst(const std::string &key, std::string compartment,
|
||||
const std::string &value);
|
||||
|
||||
void del(const std::string& key, std::string compartment);
|
||||
|
||||
std::string* resolveFirst(const std::string& var, std::string compartment);
|
||||
void resolveSingleMatch(const std::string& var, std::string compartment,
|
||||
std::vector<const Variable *> *l);
|
||||
void resolveMultiMatches(const std::string& var, std::string compartment,
|
||||
std::vector<const Variable *> *l);
|
||||
|
||||
void resolveRegularExpression(const std::string& var,
|
||||
std::string compartment,
|
||||
std::vector<const Variable *> *l);
|
||||
};
|
||||
|
||||
} // namespace collection
|
||||
} // namespace modsecurity
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif // HEADERS_MODSECURITY_TRANSACTION_GLOBAL_COLLECTION_H_
|
||||
|
||||
|
@@ -19,8 +19,8 @@
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef HEADERS_MODSECURITY_TRANSACTION_VARIABLE_H_
|
||||
#define HEADERS_MODSECURITY_TRANSACTION_VARIABLE_H_
|
||||
#ifndef HEADERS_MODSECURITY_COLLECTION_VARIABLE_H_
|
||||
#define HEADERS_MODSECURITY_COLLECTION_VARIABLE_H_
|
||||
|
||||
|
||||
#ifndef __cplusplus
|
||||
@@ -44,4 +44,4 @@ class Variable {
|
||||
} // namespace modsecurity
|
||||
#endif
|
||||
|
||||
#endif // HEADERS_MODSECURITY_TRANSACTION_VARIABLE_H_
|
||||
#endif // HEADERS_MODSECURITY_COLLECTION_VARIABLE_H_
|
||||
|
Reference in New Issue
Block a user