From 16ca4e95859dc4728741bf97c6a1b9823aa275f3 Mon Sep 17 00:00:00 2001 From: Eric Bollengier Date: Thu, 3 Dec 2009 09:21:01 +0100 Subject: [PATCH] Apply Arno's patch on nagios plugin Tweak the Makefile to simplify the installation process --- bacula/autoconf/configure.in | 1 + .../examples/nagios/check_bacula/Makefile.in | 98 +++++ bacula/examples/nagios/check_bacula/README | 15 + .../nagios/check_bacula/authenticate.c | 180 +++++++++ .../nagios/check_bacula/check_bacula.c | 370 ++++++++++++++++++ .../nagios/check_bacula/check_bacula.h | 121 ++++++ .../nagios/nagios_plugin_check_bacula.tgz | Bin 6311 -> 0 bytes .../examples/nagios/prepare_for_check_bacula | 32 -- 8 files changed, 785 insertions(+), 32 deletions(-) create mode 100644 bacula/examples/nagios/check_bacula/Makefile.in create mode 100755 bacula/examples/nagios/check_bacula/README create mode 100644 bacula/examples/nagios/check_bacula/authenticate.c create mode 100644 bacula/examples/nagios/check_bacula/check_bacula.c create mode 100644 bacula/examples/nagios/check_bacula/check_bacula.h delete mode 100644 bacula/examples/nagios/nagios_plugin_check_bacula.tgz delete mode 100755 bacula/examples/nagios/prepare_for_check_bacula diff --git a/bacula/autoconf/configure.in b/bacula/autoconf/configure.in index 1699f8e9c2..649b746971 100644 --- a/bacula/autoconf/configure.in +++ b/bacula/autoconf/configure.in @@ -3005,6 +3005,7 @@ AC_OUTPUT([autoconf/Make.common \ updatedb/update_mysql_tables_10_to_11 \ updatedb/update_sqlite3_tables_10_to_11 \ updatedb/update_postgresql_tables_10_to_11 \ + examples/nagios/check_bacula/Makefile.in \ $PFILES ], [ ] ) diff --git a/bacula/examples/nagios/check_bacula/Makefile.in b/bacula/examples/nagios/check_bacula/Makefile.in new file mode 100644 index 0000000000..235efbf235 --- /dev/null +++ b/bacula/examples/nagios/check_bacula/Makefile.in @@ -0,0 +1,98 @@ +# +# Version $Id: Makefile.in,v 1.4 2004/09/25 10:19:59 nboichat Exp $ +# +@MCOMMON@ + +srcdir = . +VPATH = . +.PATH: . + +# one up +basedir = ../../../src +# top dir +topdir = ../../.. +# this dir relative to top dir +thisdir = ../examples/nagios/check_bacula + +DEBUG=@DEBUG@ + +first_rule: all +dummy: + +# +CHECKSRCS = check_bacula.c authenticate.c +CHECKOBJS = check_bacula.o authenticate.o + +# these are the objects that are changed by the .configure process +EXTRAOBJS = @OBJLIST@ + +CHECK_CPPFLAGS= +CHECK_LDFLAGS= + +.SUFFIXES: .c .o +.PHONY: +.DONTCARE: + +# inference rules +.c.o: + @echo "Compiling $<" + $(NO_ECHO) $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) $(CHECK_CPPFLAGS) \ + -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< +#------------------------------------------------------------------------- +all: Makefile check_bacula + @echo "==== Make of check_bacula is good ====" + @echo " " + +check_bacula: Makefile $(CHECKOBJS) $(basedir)/lib/libbac$(DEFAULT_ARCHIVE_TYPE) + $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) $(CHECK_LDFLAGS) -L$(basedir)/lib -o $@ \ + $(CHECKOBJS) $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + + +Makefile: $(srcdir)/Makefile.in $(topdir)/config.status + cd $(topdir) \ + && CONFIG_FILES=$(thisdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +libtool-clean: + $(RMF) -r .libs _libs + +clean: + @$(RMF) check_bacula core core.* a.out *.o *.bak *~ *.intpro *.extpro 1 2 3 + +realclean: clean + @$(RMF) tags + +distclean: realclean + if test $(srcdir) = .; then $(MAKE) realclean; fi + (cd $(srcdir); $(RMF) Makefile) + +devclean: realclean + if test $(srcdir) = .; then $(MAKE) realclean; fi + (cd $(srcdir); $(RMF) Makefile) + +install: all + $(INSTALL_PROGRAM) check_bacula $(DESTDIR)$(sbindir)/check_bacula + +uninstall: + (cd $(DESTDIR)$(sbindir); $(RMF) check_bacula) + + + +# Semi-automatic generation of dependencies: +# Use gcc -MM because X11 `makedepend' doesn't work on all systems +# and it also includes system headers. +# `semi'-automatic since dependencies are generated at distribution time. + +depend: + @$(MV) Makefile Makefile.bak + @$(SED) "/^# DO NOT DELETE:/,$$ d" Makefile.bak > Makefile + @$(ECHO) "# DO NOT DELETE: nice dependency list follows" >> Makefile + @$(CXX) -S -M $(CPPFLAGS) $(CHECK_CPPFLAGS) -I$(srcdir) -I$(basedir) *.c >> Makefile + @if test -f Makefile ; then \ + $(RMF) Makefile.bak; \ + else \ + $(MV) Makefile.bak Makefile; \ + echo -e "Something went wrong\n\a"; \ + fi + +# ----------------------------------------------------------------------- +# DO NOT DELETE: nice dependency list follows diff --git a/bacula/examples/nagios/check_bacula/README b/bacula/examples/nagios/check_bacula/README new file mode 100755 index 0000000000..2914b0b452 --- /dev/null +++ b/bacula/examples/nagios/check_bacula/README @@ -0,0 +1,15 @@ +# It's more or less untested, though. +# Submitted by Arno Lehmann +# + +run ./configure with your usual options at the toplevel. Afterwards, use +'make' to create your binaries. + +If you encounter problems, you'll have to setup the Bacula source manually. + +Note that check_bacula does not support TLS and is an unsupported add-on to +Bacula. Even if it's not part of the core Bacula programs, questions can be +asked at the bacula-users mailing list. + +Bacula is a Trademark of Kern Sibbald. Bacula and the accompanying programs +are open source. See the LICENSE file for more information. diff --git a/bacula/examples/nagios/check_bacula/authenticate.c b/bacula/examples/nagios/check_bacula/authenticate.c new file mode 100644 index 0000000000..e7cb17f977 --- /dev/null +++ b/bacula/examples/nagios/check_bacula/authenticate.c @@ -0,0 +1,180 @@ +/* + * + * Bacula authentication. Provides authentication with + * File and Storage daemons. + * + * Nicolas Boichat, August MMIV + * + * This routine runs as a thread and must be thread reentrant. + * + * Basic tasks done here: + * + */ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2004-2006 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ + +#include "bacula.h" +#include "check_bacula.h" + +void senditf(const char *fmt, ...); +void sendit(const char *buf); + +/* Commands sent to Director */ +static char DIRhello[] = "Hello %s calling\n"; + +/* Response from Director */ +static char DIROKhello[] = "1000 OK:"; + +/* Commands sent to Storage daemon and File daemon and received + * from the User Agent */ +static char SDFDhello[] = "Hello Director %s calling\n"; + +/* Response from SD */ +static char SDOKhello[] = "3000 OK Hello\n"; +/* Response from FD */ +static char FDOKhello[] = "2000 OK Hello\n"; +static char FD3OKhello[] = "2000 OK Hello 1\n"; +static char FD31OKhello[] = "2000 OK Hello 2\n"; + +/* Forward referenced functions */ + +/* + * Authenticate Director + */ +int authenticate_director(BSOCK *dir, char *dirname, char *password) +{ + int tls_local_need = BNET_TLS_NONE; + int tls_remote_need = BNET_TLS_NONE; + int compatible = true; + char bashed_name[MAX_NAME_LENGTH]; + + bstrncpy(bashed_name, dirname, sizeof(bashed_name)); + bash_spaces(bashed_name); + + /* Timeout Hello after 5 mins */ + btimer_t *tid = start_bsock_timer(dir, 60 * 5); + bnet_fsend(dir, DIRhello, bashed_name); + + if (!cram_md5_respond(dir, password, &tls_remote_need, &compatible) || + !cram_md5_challenge(dir, password, tls_local_need, compatible)) { + stop_bsock_timer(tid); + return 0; + } + + Dmsg1(6, ">dird: %s", dir->msg); + if (bnet_recv(dir) <= 0) { + stop_bsock_timer(tid); + return 0; + } + Dmsg1(10, "msg); + stop_bsock_timer(tid); + if (strncmp(dir->msg, DIROKhello, sizeof(DIROKhello)-1) != 0) { + return 0; + } + return 1; +} + +/* + * Authenticate Storage daemon connection + */ +int authenticate_storage_daemon(BSOCK *sd, char *sdname, char* password) +{ + char dirname[MAX_NAME_LENGTH]; + int tls_local_need = BNET_TLS_NONE; + int tls_remote_need = BNET_TLS_NONE; + int compatible = true; + + /* + * Send my name to the Storage daemon then do authentication + */ + bstrncpy(dirname, sdname, sizeof(dirname)); + bash_spaces(dirname); + /* Timeout Hello after 5 mins */ + btimer_t *tid = start_bsock_timer(sd, 60 * 5); + if (!bnet_fsend(sd, SDFDhello, dirname)) { + stop_bsock_timer(tid); + return 0; + } + if (!cram_md5_respond(sd, password, &tls_remote_need, &compatible) || + !cram_md5_challenge(sd, password, tls_local_need, compatible)) { + stop_bsock_timer(tid); + return 0; + } + Dmsg1(116, ">stored: %s", sd->msg); + if (bnet_recv(sd) <= 0) { + stop_bsock_timer(tid); + return 0; + } + Dmsg1(110, "msg); + stop_bsock_timer(tid); + if (strncmp(sd->msg, SDOKhello, sizeof(SDOKhello)) != 0) { + return 0; + } + return 1; +} + +/* + * Authenticate File daemon connection + */ +int authenticate_file_daemon(BSOCK *fd, char *fdname, char *password) +{ + char dirname[MAX_NAME_LENGTH]; + int tls_local_need = BNET_TLS_NONE; + int tls_remote_need = BNET_TLS_NONE; + int compatible = true; + + /* + * Send my name to the File daemon then do authentication + */ + bstrncpy(dirname, fdname, sizeof(dirname)); + bash_spaces(dirname); + /* Timeout Hello after 5 mins */ + btimer_t *tid = start_bsock_timer(fd, 60 * 5); + if (!bnet_fsend(fd, SDFDhello, dirname)) { + stop_bsock_timer(tid); + return 0; + } + if (!cram_md5_respond(fd, password, &tls_remote_need, &compatible) || + !cram_md5_challenge(fd, password, tls_local_need, compatible)) { + stop_bsock_timer(tid); + return 0; + } + Dmsg1(116, ">filed: %s", fd->msg); + if (bnet_recv(fd) <= 0) { + stop_bsock_timer(tid); + return 0; + } + Dmsg1(110, "msg); + stop_bsock_timer(tid); + if ((strncmp(fd->msg, FDOKhello, sizeof(FDOKhello)) != 0) && + (strncmp(fd->msg, FD3OKhello, sizeof(FD3OKhello)) != 0) && + (strncmp(fd->msg, FD31OKhello, sizeof(FD31OKhello)) != 0) ) { + return 0; + } + return 1; +} diff --git a/bacula/examples/nagios/check_bacula/check_bacula.c b/bacula/examples/nagios/check_bacula/check_bacula.c new file mode 100644 index 0000000000..872d31d155 --- /dev/null +++ b/bacula/examples/nagios/check_bacula/check_bacula.c @@ -0,0 +1,370 @@ +/* + * + * Nagios Plugin check_bacula + * + * Christian Masopust, (c)2005 + * + * Version $Id: check_bacula.c,v 1.0 2005/02/25 + */ + +/* + Copyright (C) 2005 Christian Masopust + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, + MA 02111-1307, USA. + + */ + +#include "bacula.h" +#include "check_bacula.h" + +#define STATE_OK 0 +#define STATE_WARNING 1 +#define STATE_CRITICAL 2 +#define STATE_UNKNOWN 3 + + +/* Imported functions */ +int authenticate_director(BSOCK *s, char *dirname, char *password); +int authenticate_file_daemon(BSOCK *s, char *fdname, char *password); +int authenticate_storage_daemon(BSOCK *s, char* sdname, char *password); + +/* Forward referenced functions */ +void writecmd(monitoritem* item, const char* command); +int docmd(monitoritem* item, const char* command, char *answer); + +/* Static variables */ +static monitoritem mitem; + +/* Data received from DIR/FD/SD */ +static char OKqstatus[] = "%c000 OK .status\n"; + + + +static void usage() +{ + fprintf(stderr, _( +"Copyright (C) 2005 Christian Masopust\n" +"Written by Christian Masopust (2005)\n" +"\nVersion: " VERSION " (" BDATE ") %s %s %s\n\n" +"Usage: check_bacula [-d debug_level] -H host -D daemon -N name -P port\n" +" -H hostname where daemon runs\n" +" -D which daemon to check: dir|sd|fd\n" +" -M name of monitor (as in bacula-*.conf)\n" +" -K password for access to daemon\n" +" -P port where daemon listens\n" +" -dnn set debug level to nn\n" +" -? print this message.\n" +"\n"), HOST_OS, DISTNAME, DISTVER); +} + + +/********************************************************************* + * + * Main Bacula Tray Monitor -- User Interface Program + * + */ +int main(int argc, char *argv[]) +{ + int ch; + DIRRES s_dird; + CLIENT s_filed; + STORE s_stored; + + char host[250]; + char daemon[20]; + char monitorname[100]; + char pw[200]; + int port = 0; + + char answer[1024]; + int retcode = STATE_UNKNOWN; + + unsigned int i, j; + struct MD5Context md5c; + unsigned char signature[16]; + + + struct sigaction sigignore; + sigignore.sa_flags = 0; + sigignore.sa_handler = SIG_IGN; + sigfillset(&sigignore.sa_mask); + sigaction(SIGPIPE, &sigignore, NULL); + + strcpy (pw, ""); + + init_stack_dump(); + my_name_is(argc, argv, "check_bacula"); + textdomain("bacula"); + init_msg(NULL, NULL); + + while ((ch = getopt(argc, argv, "H:D:M:P:K:d:h?")) != -1) { + + switch (ch) { + + case 'H': + strcpy (host, optarg); + break; + + case 'D': + strcpy (daemon, optarg); + break; + + case 'M': + strcpy (monitorname, optarg); + break; + + case 'P': + port = atoi(optarg); + break; + + case 'K': + strcpy (pw, optarg); + break; + + case 'd': + debug_level = atoi(optarg); + if (debug_level <= 0) { + debug_level = 1; + } + break; + + case 'h': + case '?': + default: + usage(); + exit(1); + } + } + argc -= optind; + //argv += optind; + + if (argc) { + usage(); + exit(STATE_UNKNOWN); + } + + lmgr_init_thread(); + + char sig[100]; + MD5Init(&md5c); + MD5Update(&md5c, (unsigned char *) pw, strlen(pw)); + MD5Final(signature, &md5c); + for (i = j = 0; i < sizeof(signature); i++) { + sprintf(&sig[j], "%02x", signature[i]); + j += 2; + } + + + /* director ? */ + if (strcmp (daemon, "dir") == 0) { + + if (port != 0) + s_dird.DIRport = port; + else + s_dird.DIRport = 9101; + + s_dird.address = host; + s_dird.password = sig; + s_dird.hdr.name = monitorname; + + mitem.type = R_DIRECTOR; + mitem.resource = &s_dird; + mitem.D_sock = NULL; + + } else if (strcmp (daemon, "sd") == 0) { + + if (port != 0) + s_stored.SDport = port; + else + s_stored.SDport = 9103; + + s_stored.address = host; + s_stored.password = sig; + s_stored.hdr.name = monitorname; + + mitem.type = R_STORAGE; + mitem.resource = &s_stored; + mitem.D_sock = NULL; + + } else if (strcmp (daemon, "fd") == 0) { + + if (port != 0) + s_filed.FDport = port; + else + s_filed.FDport = 9102; + + s_filed.address = host; + s_filed.password = sig; + s_filed.hdr.name = monitorname; + + mitem.type = R_CLIENT; + mitem.resource = &s_filed; + mitem.D_sock = NULL; + + } else { + + usage(); + exit(1); + } + + + if (mitem.type == R_DIRECTOR) + retcode = docmd(&mitem, ".status dir current\n", answer); + else + retcode = docmd(&mitem, ".status current\n", answer); + + + if (mitem.D_sock) { + bnet_sig(mitem.D_sock, BNET_TERMINATE); /* send EOF */ + bnet_close(mitem.D_sock); + } + + printf ("%s\n", answer); + return retcode; +} + + +static int authenticate_daemon(monitoritem* item) { + + DIRRES *d; + CLIENT *f; + STORE *s; + + switch (item->type) { + case R_DIRECTOR: + d = (DIRRES *)item->resource; + return authenticate_director(item->D_sock, d->hdr.name, d->password); + break; + case R_CLIENT: + f = (CLIENT *)item->resource; + return authenticate_file_daemon(item->D_sock, f->hdr.name, f->password); + break; + case R_STORAGE: + s = (STORE *)item->resource; + return authenticate_storage_daemon(item->D_sock, s->hdr.name, s->password); + break; + default: + printf("Error, currentitem is not a Client or a Storage..\n"); + return FALSE; + } +} + + + +int docmd(monitoritem* item, const char* command, char *answer) { + + int stat; + char num; + char *dname; + + dname = ""; + + if (!item->D_sock) { + + DIRRES* dird; + CLIENT* filed; + STORE* stored; + + switch (item->type) { + case R_DIRECTOR: + dird = (DIRRES*)item->resource; + item->D_sock = bnet_connect(NULL, 0, 0, 0, "Director daemon", dird->address, NULL, dird->DIRport, 0); + dname = "Director"; + break; + case R_CLIENT: + filed = (CLIENT*)item->resource; + item->D_sock = bnet_connect(NULL, 0, 0, 0, "File daemon", filed->address, NULL, filed->FDport, 0); + dname = "FileDaemon"; + break; + case R_STORAGE: + stored = (STORE*)item->resource; + item->D_sock = bnet_connect(NULL, 0, 0, 0, "Storage daemon", stored->address, NULL, stored->SDport, 0); + dname = "StorageDaemon"; + break; + default: + printf("Error, currentitem is not a Client, a Storage or a Director..\n"); + return STATE_UNKNOWN; + } + + if (item->D_sock == NULL) { + sprintf (answer, "BACULA CRITICAL - Cannot connect to %s!", dname); + return STATE_CRITICAL; + } + + if (!authenticate_daemon(item)) { + sprintf (answer, "BACULA CRITICAL - Cannot authenticate to %s: %s", dname, item->D_sock->msg); + item->D_sock = NULL; + return STATE_CRITICAL; + } + + } + + if (command[0] != 0) + writecmd(item, command); + + while(1) { + if ((stat = bnet_recv(item->D_sock)) >= 0) { + + /* welcome message of director */ + if ((item->type == R_DIRECTOR) && (strncmp(item->D_sock->msg, "Using ", 6) == 0)) + 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; + } else { + 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_PROMPT) { + strcpy(answer, "BACULA WARNING - BNET_PROMPT signal received."); + return STATE_WARNING; + } + else if (item->D_sock->msglen == BNET_HEARTBEAT) { + bnet_sig(item->D_sock, BNET_HB_RESPONSE); + } + else { + sprintf(answer, "BACULA WARNING - Unexpected signal received : %s ", bnet_sig_to_ascii(item->D_sock)); + } + } + else { /* BNET_HARDEOF || BNET_ERROR */ + strcpy(answer, "BACULA CRITICAL - ERROR: BNET_HARDEOF or BNET_ERROR"); + item->D_sock = NULL; + return STATE_CRITICAL; + } + + if (is_bnet_stop(item->D_sock)) { + item->D_sock = NULL; + return STATE_WARNING; + } + } +} + +void writecmd(monitoritem* item, const char* command) { + if (item->D_sock) { + item->D_sock->msglen = strlen(command); + pm_strcpy(&item->D_sock->msg, command); + bnet_send(item->D_sock); + } +} + diff --git a/bacula/examples/nagios/check_bacula/check_bacula.h b/bacula/examples/nagios/check_bacula/check_bacula.h new file mode 100644 index 0000000000..03811af503 --- /dev/null +++ b/bacula/examples/nagios/check_bacula/check_bacula.h @@ -0,0 +1,121 @@ +/* + * Includes specific to the tray monitor + * + * Nicolas Boichat, August MMIV + * + * Version $Id: tray-monitor.h,v 1.6 2004/08/25 12:20:01 nboichat Exp $ + */ +/* + Copyright (C) 2004 Kern Sibbald and John Walker + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + */ + +/* + * Resource codes -- they must be sequential for indexing + */ +enum rescode { + R_MONITOR = 1001, + R_DIRECTOR, + R_CLIENT, + R_STORAGE, + R_FIRST = R_MONITOR, + R_LAST = R_STORAGE /* keep this updated */ +}; + + +/* + * Some resource attributes + */ +enum { + R_NAME = 1020, + R_ADDRESS, + R_PASSWORD, + R_TYPE, + R_BACKUP +}; + +/* Director */ +struct DIRRES { + RES hdr; + int DIRport; /* UA server port */ + char *address; /* UA server address */ + char *password; /* UA server password */ + int enable_ssl; /* Use SSL */ +}; + +/* + * Tray Monitor Resource + * + */ +struct MONITOR { + RES hdr; + int require_ssl; /* Require SSL for all connections */ + MSGS *messages; /* Daemon message handler */ + char *password; /* UA server password */ + utime_t RefreshInterval; /* Status refresh interval */ + utime_t FDConnectTimeout; /* timeout for connect in seconds */ + utime_t SDConnectTimeout; /* timeout in seconds */ +}; + + +/* + * Client Resource + * + */ +struct CLIENT { + RES hdr; + + int FDport; /* Where File daemon listens */ + char *address; + char *password; + int enable_ssl; /* Use SSL */ +}; + +/* + * Store Resource + * + */ +struct STORE { + RES hdr; + + int SDport; /* port where Directors connect */ + char *address; + char *password; + int enable_ssl; /* Use SSL */ +}; + + + +/* Define the Union of all the above + * resource structure definitions. + */ +union URES { + MONITOR res_monitor; + DIRRES res_dir; + CLIENT res_client; + STORE res_store; + RES hdr; +}; + + + +struct monitoritem { + rescode type; /* R_DIRECTOR, R_CLIENT or R_STORAGE */ + void* resource; /* DIRRES*, CLIENT* or STORE* */ + BSOCK *D_sock; +}; diff --git a/bacula/examples/nagios/nagios_plugin_check_bacula.tgz b/bacula/examples/nagios/nagios_plugin_check_bacula.tgz deleted file mode 100644 index 761751e6a6167c72214eb6d171b7e6fe7dcad81a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6311 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 z 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 d3 -# - -# Save configure -mv -uiv configure configure.without_check_bacula - -# Modify ./configure -sed -e 's/\(ac_config_files=".*$PFILES\)"/\1 src\/check_bacula\/Makefile"/' -e 's/\(^ *# Handling of arguments.*$\)/\1\n "src\/check_bacula\/Makefile" ) CONFIG_FILES="$CONFIG_FILES src\/check_bacula\/Makefile" ;;/' configure.without_check_bacula > configure -chmod a+x configure - -# extract check_bacula source -tar xzCf src examples/nagios/nagios_plugin_check_bacula.tgz - -echo "Now you can run ./configure with your usual options. Afterwards, use -'make' to create your binaries. Then you can run 'make' in -src/check_bacula to create that program. - -If you encounter problems, you'll have to setup the Bacula source manually. -The original configure script has been saved to configure.without_check_bacula - -Note that check_bacula does not support TLS and is an unsupported add-on to -Bacula. Even if it's not part of the core Bacula programs, questions can be -asked at the bacula-users mailing list. - -Bacula is a Trademark of Kern Sibbald. Bacula and the accompanying programs -are open source. See the LICENSE file for more information. -" -- 2.39.5