]> source.dussan.org Git - rspamd.git/commitdiff
Fix some border cases in control logic
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 16 Dec 2015 00:32:47 +0000 (00:32 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 16 Dec 2015 00:32:47 +0000 (00:32 +0000)
src/fuzzy_storage.c
src/libserver/rspamd_control.c

index 34b5e631f2bc22c8274b24c995434fac96152ae2..72e3bff0386f17d7b14123b1da84f6237d04ee93 100644 (file)
@@ -1089,7 +1089,8 @@ fuzzy_peer_rep (struct rspamd_worker *worker,
        ctx->peer_fd = rep_fd;
 
        if (rep_fd == -1) {
-               msg_warn ("cannot receive peer fd from the main process");
+               msg_err ("cannot receive peer fd from the main process");
+               exit (EXIT_FAILURE);
        }
 
        /* Start listening */
index b683ac46ff22194a90371009cec1b5495d969642..df9746abfaedb03127cb87ed9a2a50a545926ff3 100644 (file)
@@ -543,10 +543,14 @@ rspamd_control_default_worker_handler (gint fd, short what, gpointer ud)
 
        r = read (fd, &cmd, sizeof (cmd));
 
-       if (r != sizeof (cmd)) {
+       if (r == -1) {
                msg_err ("cannot read request from the control socket: %s",
                                strerror (errno));
        }
+       else if (r < (gint)sizeof (cmd)) {
+               msg_err ("short read of control command: %d of %d", (gint)r,
+                               (gint)sizeof (cmd));
+       }
        else if ((gint)cmd.type >= 0 && cmd.type < RSPAMD_CONTROL_MAX) {
 
                if (cd->handlers[cmd.type].handler) {
@@ -557,6 +561,9 @@ rspamd_control_default_worker_handler (gint fd, short what, gpointer ud)
                        rspamd_control_default_cmd_handler (fd, cd, &cmd);
                }
        }
+       else {
+               msg_err ("unknown command: %d", (gint)cmd.type);
+       }
 }
 
 void