[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [hobbit] [BUG] hobbitd_alert fails to execute script on large message
- To: hobbit (at) hswn.dk
- Subject: Re: [hobbit] [BUG] hobbitd_alert fails to execute script on large message
- From: Henrik Stoerner <henrik (at) hswn.dk>
- Date: Wed, 2 Jan 2008 15:17:52 +0100
- References: <20071217154351.GG2940 (at) cgoyard1.exp75.cvf>
- User-agent: Mutt/1.5.15+20070412 (2007-04-11)
On Mon, Dec 17, 2007 at 04:43:51PM +0100, Charles Goyard wrote:
> Hi,
>
> I encounter a serious problem when using the following rule in hobbit-alerts.cfg :
>
> EXSERVICE=_site
> SCRIPT=/usr2/hobbitlocal/bin/send_to foobar FORMAT=text RECOVERED REPEAT=6m
>
> when BBALPHAMSG is large (ie a "procs" or "ports" on a very busy box),
> the log says :
>
> 2007-12-17 16:31:01 Could not launch paging script /usr2/hobbitlocal/bin/send_to: Argument list too long
The attached patch can be used to solve this, it puts an upper limit on
the size of the status message passed through the BBALPHAMSG environment
variable. The limit is defined at compile-time through a setting in the
top-level Makefile.
I think this will apply on top of 4.2.0 as well.
Henrik
--- build/Makefile.rules 2006/07/09 19:22:14 1.197
+++ build/Makefile.rules 2008/01/02 14:09:45
@@ -92,7 +92,7 @@
CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" RPATHOPT="$(RPATHOPT)" NETLIBS="$(NETLIBS)" BBHOME="$(BBHOME)" $(MAKE) -C bbproxy all
hobbitd-build: lib-build build-build common-build
- CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" RPATHOPT="$(RPATHOPT)" RRDDEF="$(RRDDEF)" RRDINCDIR="$(RRDINCDIR)" PCREINCDIR="$(PCREINCDIR)" NETLIBS="$(NETLIBS)" RRDLIBS="$(RRDLIBS)" PCRELIBS="$(PCRELIBS)" BBTOPDIR="$(BBTOPDIR)" BBHOME="$(BBHOME)" BBVAR="$(BBVAR)" BBLOGDIR="$(BBLOGDIR)" BBHOSTNAME="$(BBHOSTNAME)" BBHOSTIP="$(BBHOSTIP)" BBHOSTOS="$(BBHOSTOS)" BBUSER="$(BBUSER)" CGIDIR="$(CGIDIR)" SECURECGIDIR="$(SECURECGIDIR)" BBHOSTURL="$(BBHOSTURL)" BBCGIURL="$(BBCGIURL)" SECUREBBCGIURL="$(SECUREBBCGIURL)" MAILPROGRAM="$(MAILPROGRAM)" FPING="$(FPING)" RUNTIMEDEFS="$(RUNTIMEDEFS)" INSTALLWWWDIR="$(INSTALLWWWDIR)" INSTALLETCDIR="$(INSTALLETCDIR)" $(MAKE) -C hobbitd all
+ CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" RPATHOPT="$(RPATHOPT)" RRDDEF="$(RRDDEF)" RRDINCDIR="$(RRDINCDIR)" PCREINCDIR="$(PCREINCDIR)" NETLIBS="$(NETLIBS)" RRDLIBS="$(RRDLIBS)" PCRELIBS="$(PCRELIBS)" BBTOPDIR="$(BBTOPDIR)" BBHOME="$(BBHOME)" BBVAR="$(BBVAR)" BBLOGDIR="$(BBLOGDIR)" BBHOSTNAME="$(BBHOSTNAME)" BBHOSTIP="$(BBHOSTIP)" BBHOSTOS="$(BBHOSTOS)" BBUSER="$(BBUSER)" CGIDIR="$(CGIDIR)" SECURECGIDIR="$(SECURECGIDIR)" BBHOSTURL="$(BBHOSTURL)" BBCGIURL="$(BBCGIURL)" SECUREBBCGIURL="$(SECUREBBCGIURL)" MAILPROGRAM="$(MAILPROGRAM)" FPING="$(FPING)" RUNTIMEDEFS="$(RUNTIMEDEFS)" INSTALLWWWDIR="$(INSTALLWWWDIR)" INSTALLETCDIR="$(INSTALLETCDIR)" MAXALERTMSGSZ="$(MAXALERTMSGSZ)" $(MAKE) -C hobbitd all
web-build: lib-build build-build common-build
CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" RPATHOPT="$(RPATHOPT)" RRDDEF="$(RRDDEF)" RRDINCDIR="$(RRDINCDIR)" PCREINCDIR="$(PCREINCDIR)" NETLIBS="$(NETLIBS)" RRDLIBS="$(RRDLIBS)" PCRELIBS="$(PCRELIBS)" BBTOPDIR="$(BBTOPDIR)" BBHOME="$(BBHOME)" BBVAR="$(BBVAR)" BBLOGDIR="$(BBLOGDIR)" BBHOSTNAME="$(BBHOSTNAME)" BBHOSTIP="$(BBHOSTIP)" BBHOSTOS="$(BBHOSTOS)" BBUSER="$(BBUSER)" CGIDIR="$(CGIDIR)" SECURECGIDIR="$(SECURECGIDIR)" BBHOSTURL="$(BBHOSTURL)" BBCGIURL="$(BBCGIURL)" SECUREBBCGIURL="$(SECUREBBCGIURL)" MAILPROGRAM="$(MAILPROGRAM)" RUNTIMEDEFS="$(RUNTIMEDEFS)" INSTALLWWWDIR="$(INSTALLWWWDIR)" INSTALLETCDIR="$(INSTALLETCDIR)" $(MAKE) -C web all
--- hobbitd/Makefile 2007/07/22 06:55:32 1.115
+++ hobbitd/Makefile 2008/01/02 14:10:13
@@ -52,7 +52,7 @@
$(CC) $(LDFLAGS) -o $@ $(RPATHOPT) $(RRDOBJS) $(LIBOBJS) $(RRDLIBS) $(PCRELIBS) $(NETLIBS)
do_alert.o: do_alert.c
- $(CC) $(CFLAGS) $(PCREINCDIR) -c -o $@ do_alert.c
+ $(CC) $(CFLAGS) $(PCREINCDIR) -DMAX_ALERTMSG_SCRIPTS=$(MAXALERTMSGSZ) -c -o $@ do_alert.c
do_rrd.o: do_rrd.c do_rrd.h rrd/*.c
$(CC) $(CFLAGS) $(RRDINCDIR) $(PCREINCDIR) -c -o $@ do_rrd.c
--- hobbitd/do_alert.c 2007/07/18 21:20:15 1.98
+++ hobbitd/do_alert.c 2008/01/02 14:05:59
@@ -422,14 +422,21 @@
char *p;
int ip1=0, ip2=0, ip3=0, ip4=0;
char *bbalphamsg, *ackcode, *rcpt, *bbhostname, *bbhostsvc, *bbhostsvccommas, *bbnumeric, *machip, *bbsvcname, *bbsvcnum, *bbcolorlevel, *recovered, *downsecs, *eventtstamp, *downsecsmsg, *cfidtxt;
+ int msglen;
cfidtxt = (char *)malloc(strlen("CFID=") + 10);
sprintf(cfidtxt, "CFID=%d", recip->cfid);
putenv(cfidtxt);
p = message_text(alert, recip);
- bbalphamsg = (char *)malloc(strlen("BBALPHAMSG=") + strlen(p) + 1);
- sprintf(bbalphamsg, "BBALPHAMSG=%s", p);
+ msglen = strlen(p);
+ if (msglen > MAX_ALERTMSG_SCRIPTS) {
+ dbgprintf("Cropping large alert message from %d to %d bytes\n", msglen, MAX_ALERTMSG_SCRIPTS);
+ msglen = MAX_ALERTMSG_SCRIPTS;
+ }
+ msglen += strlen("BBALPHAMSG=");
+ bbalphamsg = (char *)malloc(msglen + 1);
+ snprintf(bbalphamsg, msglen, "BBALPHAMSG=%s", p);
putenv(bbalphamsg);
ackcode = (char *)malloc(strlen("ACKCODE=") + 10);
--- configure.server 2006/08/17 07:47:34 1.67
+++ configure.server 2008/01/02 14:14:49
@@ -463,6 +463,9 @@
echo "# Large File Support settings" >>Makefile
echo "LFSDEF = $LFS" >>Makefile
+echo "# Limit the size of status message texts passed to external alert scripts" >>Makefile
+echo "MAXALERTMSGSZ = 4096"
+
echo "" >>Makefile
if test -r build/Makefile.`uname -s`
then