]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Perform some rrd file check.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 21 Sep 2015 13:53:35 +0000 (14:53 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 21 Sep 2015 13:53:35 +0000 (14:53 +0100)
src/libutil/rrd.c

index a4d4ef378a3ac8a43c6595545668bdd12fff1abe..bf3d76c995dd2170abf23d35fdc5b9e7b11b1439 100644 (file)
@@ -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;
 }