diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-09-21 14:53:35 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-09-21 14:53:35 +0100 |
commit | 8b79a2907e9f0d9e0b633ae4fd89ac38619c5814 (patch) | |
tree | c90405a07767448ebbd47b7597bb02d3b21a0c30 /src/libutil/rrd.c | |
parent | 223c083212db14ef659ce35a1083e72d45301c15 (diff) | |
download | rspamd-8b79a2907e9f0d9e0b633ae4fd89ac38619c5814.tar.gz rspamd-8b79a2907e9f0d9e0b633ae4fd89ac38619c5814.zip |
Perform some rrd file check.
Diffstat (limited to 'src/libutil/rrd.c')
-rw-r--r-- | src/libutil/rrd.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/libutil/rrd.c b/src/libutil/rrd.c index a4d4ef378..bf3d76c99 100644 --- a/src/libutil/rrd.c +++ b/src/libutil/rrd.c @@ -1213,7 +1213,7 @@ struct rspamd_rrd_file * rspamd_rrd_file_default (const gchar *path, GError **err) { - struct rspamd_rrd_file *rrd; + struct rspamd_rrd_file *file; struct rrd_ds_def ds[4]; struct rrd_rra_def rra[4]; GArray ar; @@ -1222,21 +1222,31 @@ rspamd_rrd_file_default (const gchar *path, if (access (path, R_OK) != -1) { /* We can open rrd file */ - rrd = rspamd_rrd_open (path, err); + file = rspamd_rrd_open (path, err); + + if (file == NULL) { + return NULL; + } + + + if (file->stat_head->ds_cnt != 4 || file->stat_head->rra_cnt != 4) { + msg_err_rrd ("rrd file is not suitable for rspamd: it has " + "%d ds and %d rra", file->stat_head->ds_cnt, + file->stat_head->rra_cnt); + g_set_error (err, rrd_error_quark (), EINVAL, "bad rrd file"); + rspamd_rrd_close (file); - if (rrd == NULL) { return NULL; } - /* XXX: check rrd file sanity */ - return rrd; + return file; } /* Try to create new rrd file */ - rrd = rspamd_rrd_create (path, 4, 4, 1, rspamd_get_calendar_ticks (), err); + file = rspamd_rrd_create (path, 4, 4, 1, rspamd_get_calendar_ticks (), err); - if (rrd == NULL) { + if (file == NULL) { return NULL; } @@ -1250,8 +1260,8 @@ rspamd_rrd_file_default (const gchar *path, ar.data = (gchar *)ds; ar.len = sizeof (ds); - if (!rspamd_rrd_add_ds (rrd, &ar, err)) { - rspamd_rrd_close (rrd); + if (!rspamd_rrd_add_ds (file, &ar, err)) { + rspamd_rrd_close (file); return NULL; } @@ -1270,15 +1280,15 @@ rspamd_rrd_file_default (const gchar *path, ar.data = (gchar *)rra; ar.len = sizeof (rra); - if (!rspamd_rrd_add_rra (rrd, &ar, err)) { - rspamd_rrd_close (rrd); + if (!rspamd_rrd_add_rra (file, &ar, err)) { + rspamd_rrd_close (file); return NULL; } - if (!rspamd_rrd_finalize (rrd, err)) { - rspamd_rrd_close (rrd); + if (!rspamd_rrd_finalize (file, err)) { + rspamd_rrd_close (file); return NULL; } - return rrd; + return file; } |