From a708cf18956cb2f2379f84bc8ad10cbdaf209d00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20K=C3=A1cha?= <ph@cesnet.cz> Date: Wed, 29 Apr 2015 17:14:40 +0200 Subject: [PATCH] Server now limits max accepted event size. events.data changed to longtext to accomodate longer events --- warden3/warden_server/README | 1 + warden3/warden_server/warden_3.0.sql | 2 +- warden3/warden_server/warden_server.py | 11 +++++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/warden3/warden_server/README b/warden3/warden_server/README index fd448be..bc52c21 100644 --- a/warden3/warden_server/README +++ b/warden3/warden_server/README @@ -156,6 +156,7 @@ object from particular section list is used ("FileLogger" for example). port: database server port, default 3306 retry_pause: retry in case of database errors, in seconds, defaults to 5 retry_count: number of retries, defaults to 3 + event_size_limit: max size of serialized event, defaults to 5 MB catmap_filename: IDEA category mapping to database ids, defaults to "catmap_mysql.json" at installation directory tagmap_filename": IDEA node type mapping to database ids, defaults to diff --git a/warden3/warden_server/warden_3.0.sql b/warden3/warden_server/warden_3.0.sql index 9a9cc0e..750ccee 100644 --- a/warden3/warden_server/warden_3.0.sql +++ b/warden3/warden_server/warden_3.0.sql @@ -66,7 +66,7 @@ CREATE TABLE IF NOT EXISTS `events` ( `id` int(11) NOT NULL AUTO_INCREMENT, `received` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `client_id` int(11) NOT NULL, - `data` text NOT NULL, + `data` longtext NOT NULL, `valid` tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY (`id`), KEY `id` (`id`,`client_id`) diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py index ffbe651..cce4aeb 100755 --- a/warden3/warden_server/warden_server.py +++ b/warden3/warden_server/warden_server.py @@ -422,7 +422,8 @@ class JSONSchemaValidator(NoValidator): class MySQL(ObjectReq): - def __init__(self, req, host, user, password, dbname, port, retry_count, retry_pause, catmap_filename, tagmap_filename): + def __init__(self, req, host, user, password, dbname, port, retry_count, + retry_pause, event_size_limit, catmap_filename, tagmap_filename): ObjectReq.__init__(self, req) self.host = host self.user = user @@ -431,6 +432,7 @@ class MySQL(ObjectReq): self.port = port self.retry_count = retry_count self.retry_pause = retry_pause + self.event_size_limit = event_size_limit self.catmap_filename = catmap_filename self.tagmap_filename = tagmap_filename @@ -669,8 +671,12 @@ class MySQL(ObjectReq): def store_event(self, client, event): + json_event = json.dumps(event) + if len(json_event) >= self.event_size_limit: + return [{"error": 413, "message": "Event too long (>%i B)" % self.event_size_limit}] try: - self.query("INSERT INTO events (received,client_id,data) VALUES (NOW(), %s, %s)", (client.id, json.dumps(event)), dml=True) + self.query("INSERT INTO events (received,client_id,data) VALUES (NOW(), %s, %s)", + (client.id, json_event), dml=True) lastid = self.crs.lastrowid catlist = event.get('Category', ["Other"]) @@ -1151,6 +1157,7 @@ def build_server(conf): "port": {"type": natural, "default": 3306}, "retry_pause": {"type": natural, "default": 5}, "retry_count": {"type": natural, "default": 3}, + "event_size_limit": {"type": natural, "default": 5*1024*1024}, "catmap_filename": {"type": filepath, "default": path.join(path.dirname(__file__), "catmap_mysql.json")}, "tagmap_filename": {"type": filepath, "default": path.join(path.dirname(__file__), "tagmap_mysql.json")} }, -- GitLab