From: Eric Bollengier Date: Thu, 18 Mar 2021 10:26:25 +0000 (+0100) Subject: Fix check_bacula.c to ignore daemon events X-Git-Tag: Release-11.0.2~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac5039e5fb7e34ec5d5443875a01f2d89c56d6ef;p=thirdparty%2Fbacula.git Fix check_bacula.c to ignore daemon events Description: ------------ check_bacula fails on file daemon $ check_bacula -H localhost -D fd -M vlbackup.obvsg.at-mon -K secretsecret BACULA CRITICAL - FileDaemon Status: Events: code=FC0002 daemon=vlbackup.obvsg.at-fd ref=0x7fe29000ee58 type=connection source=xxx-mon text=Director connection Workaround: ----------- It should be possible to disable events for these filedaemons. --- diff --git a/bacula/examples/nagios/check_bacula/check_bacula.c b/bacula/examples/nagios/check_bacula/check_bacula.c index db0e22d2b..3f47a3529 100644 --- a/bacula/examples/nagios/check_bacula/check_bacula.c +++ b/bacula/examples/nagios/check_bacula/check_bacula.c @@ -319,44 +319,48 @@ int docmd(monitoritem* item, const char* command, char *answer) { while(1) { if ((stat = item->D_sock->recv()) >= 0) { - /* welcome message of director */ - if ((item->type == R_DIRECTOR) && (strncmp(item->D_sock->msg, "Using ", 6) == 0)) - continue; + /* welcome message of director */ + if ((item->type == R_DIRECTOR) && (strncmp(item->D_sock->msg, "Using ", 6) == 0)) { + continue; + } + + if (strncmp(item->D_sock, "Events:", strlen("Events:")) == 0) { + /* Daemons can send events to the director, ignore them here */ + continue; + } if (sscanf(item->D_sock->msg, OKqstatus, &num) != 1) { - /* Error, couldn't find OK */ - sprintf (answer, "BACULA CRITICAL - %s Status: %s", dname, item->D_sock->msg); - return STATE_CRITICAL; + /* Error, couldn't find OK */ + sprintf (answer, "BACULA CRITICAL - %s Status: %s", dname, item->D_sock->msg); + return STATE_CRITICAL; } else { - sprintf (answer, "BACULA OK - %s Status OK", dname); - return STATE_OK; + sprintf (answer, "BACULA OK - %s Status OK", dname); + return STATE_OK; } - } - else if (stat == BNET_SIGNAL) { - if (item->D_sock->msglen == BNET_EOD) { - strcpy(answer, "BACULA WARNING - << EOD >>"); - return STATE_WARNING; - } - else if (item->D_sock->msglen == BNET_SUB_PROMPT) { + + } else if (stat == BNET_SIGNAL) { + if (item->D_sock->msglen == BNET_EOD) { + strcpy(answer, "BACULA WARNING - << EOD >>"); + return STATE_WARNING; + + } else if (item->D_sock->msglen == BNET_SUB_PROMPT) { strcpy(answer, "BACULA WARNING - BNET_SUB_PROMPT signal received."); return STATE_WARNING; - } - else if (item->D_sock->msglen == BNET_HEARTBEAT) { + + } else if (item->D_sock->msglen == BNET_HEARTBEAT) { item->D_sock->signal(BNET_HB_RESPONSE); + } else { + sprintf(answer, "BACULA WARNING - Unexpected signal received : %s ", bnet_sig_to_ascii(item->D_sock->msglen)); } - else { - sprintf(answer, "BACULA WARNING - Unexpected signal received : %s ", bnet_sig_to_ascii(item->D_sock->msglen)); - } - } - else { /* BNET_HARDEOF || BNET_ERROR */ - strcpy(answer, "BACULA CRITICAL - ERROR: BNET_HARDEOF or BNET_ERROR"); - item->D_sock = NULL; - return STATE_CRITICAL; + } else { /* BNET_HARDEOF || BNET_ERROR */ + strcpy(answer, "BACULA CRITICAL - ERROR: BNET_HARDEOF or BNET_ERROR"); + item->D_sock = NULL; + return STATE_CRITICAL; } if (item->D_sock->is_stop()) { - item->D_sock = NULL; - return STATE_WARNING; + item->D_sock = NULL; + return STATE_WARNING; } } }