[hobbit] msgcache hobbitfetch problems

Steinar M. Skúlason steinarms at gmail.com
Wed Feb 10 10:33:19 CET 2010


On Mon, Feb 8, 2010 at 6:53 PM, Cade Robinson <cade.robinson at gmail.com>wrote:

> The issue is in the hobbitfetch "grabdata" function.
>
> int n;
> char buf[8192];
> ...
> n = read(conn->sockfd, buf, sizeof(buf));
> ...
> else if (n > 0) {
> ...
> buf[n] = '\0';
> ...
>
> If the "read" reads 8192 bytes then n is 8192 and then buf[n] tries to
> get set to NULL.  There is no element 8192.
> Also only one read happens so if there is more than 8192 bytes to be
> fetched not everything is fetched.
>
> I put the "read" and "if"s in a do...while loop and fixed the null
> termination on buf and haven't had any issues.
>
> ~/hobbitmon/trunk/hobbitd:-> diff -u hobbitfetch.c ./hobbitfetch.c.new
> --- hobbitfetch.c       2010-02-08 12:43:22.781543905 -0600
> +++ ./hobbitfetch.c.new 2010-02-08 12:52:25.249509306 -0600
> @@ -342,8 +342,9 @@
>     int n;
>     char buf[8192];
>
> +    do {
>     /* Read data from a peer connection (client or server) */
> -        n = read(conn->sockfd, buf, sizeof(buf));
> +        n = read(conn->sockfd, buf, sizeof(buf)-2);
>     if (n == -1) {
>         if ((errno != EINTR) && (errno != EAGAIN)) {
>             /* Read failure */
> @@ -360,7 +361,7 @@
>         /* Save the data */
>         dbgprintf("Got %d bytes of data from %s (req %lu)\n",
>             n, addrstring(&conn->caddr), conn->seq);
> -        buf[n] = '\0';
> +        buf[n+1] = '\0';
>         addtobuffer(conn->msgbuf, buf);
>     }
>     else if (n == 0) {
> @@ -380,6 +381,7 @@
>             break;
>         }
>     }
> +    } while (n>0);
>  }
>
>  void set_polltime(clients_t *client)
>
>
>
>
>
>
>
> On Mon, 2010-02-08 at 18:12 +0000, Steinar M. Skúlason wrote:
> >
> >
> > On Mon, Feb 8, 2010 at 5:36 PM, Daniel McDonald
> > <dan.mcdonald at austinenergy.com> wrote:
> >         On 2/8/10 10:37 AM, "Steinar M. Skúlason"
> >         <steinarms at gmail.com> wrote:
> >
> >         > Hi,
> >         >
> >         > I'm having problems with "msgcache" on the client machines
> >         and "hobbitfetch"
> >         > on the server machine.
> >         > It works for a short period and then get's stuck and all my
> >         client side checks
> >         > end up with status purple.
> >
> >
> >         Yup.  Been doing that for a long time here.  I sent a bunch of
> >         corefiles to
> >         Henrik about it, and he tried a bunch of patches.  Eventually,
> >         we just wrote
> >         a routine that restarts hobbitfetch whenever a host turns
> >         purple.
> >
> >         --
> >         Daniel J McDonald, CCIE # 2495, CISSP # 78281
> >
> >
> >         To unsubscribe from the hobbit list, send an e-mail to
> >         hobbit-unsubscribe at hswn.dk
> >
> >
> >
> > Ok, good to hear that I am not the only one.
> > I wrote a ugly routine that restarts hobbitfetch if there is no new
> > entry in the logfile
> >
> >
> > #!/bin/bash
> >
> > #This is to see if any progress has been made within the hobbitfetch
> > utility.
> > TMP_FILE=/tmp/tmp.hobbitfetch.last
> > LAST_LINE=`tail -1 /usr/lib/xymon/server/log/hobbitfetch.log|awk
> > '{print $1 $2}'`
> > PREV_LINE=`cat /tmp/tmp.hobbitfetch.last`
> > echo $LAST_LINE > $TMP_FILE
> >
> > if [ "$LAST_LINE" == "$PREV_LINE" ]; then
> >   echo "Nothing has happend .... killing hobbitfetch!"
> >   PID=`ps -ef|grep hobbitfetch|awk '{print $2}'`
> >   kill -9 $PID
> > fi
> >
> > Best Regards,
> > Steinar M.
>
>
> To unsubscribe from the hobbit list, send an e-mail to
> hobbit-unsubscribe at hswn.dk
>
>
> Thank you for your reply Cade, I tried your patch but it was not working
for me
are you using the 4.3.0-beta2 for both client and server?
I get no checks populated with your changes.
Or did you also make changes to the msgcache.c ?

Regards,
Steinar M.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xymon.com/pipermail/xymon/attachments/20100210/6a1d0104/attachment.html>


More information about the Xymon mailing list