I found a bug when in /var/monit event file is empty or corrupt Attatch the fix
Bye
diff -ruN monit-4.10.1.old/event.c monit-4.10.1.old.basedir/event.c --- monit-4.10.1.old/event.c 2007-07-29 22:23:26.000000000 +0200 +++ monit-4.10.1.old.basedir/event.c 2008-08-24 09:33:21.000000000 +0200 @@ -571,37 +571,41 @@ } /* read event structure version */ - if(!(version = File_readQueue(file, &size)) || size != sizeof(int)) { - LogError("skipping %s - unknown data format\n", - file_name, *version); + if(!(version = File_readQueue(file, &size))) { + LogError("skipping %s - unknown data format\n", file_name); goto error2; } - if(*version != EVENT_VERSION) + if(*version != EVENT_VERSION || size != sizeof(int)) { LogError("Aborting event %s - incompatible data format version %d\n", file_name, *version); - goto error2; + goto error3; } /* read event structure */ - if(!(e = File_readQueue(file, &size)) || size != sizeof(*e)) - goto error2; + if(!(e = File_readQueue(file, &size))) + goto error3; + + if(size != sizeof(*e)) + goto error4; /* read source */ if(!(e->source = File_readQueue(file, &size))) - goto error3; + goto error4; /* read group */ if(!(e->group = File_readQueue(file, &size))) - goto error3; + goto error5; /* read message */ if(!(e->message = File_readQueue(file, &size))) - goto error3; + goto error6; /* read event action */ - if(!(action = File_readQueue(file, &size)) || size != sizeof(short)) - goto error3; + if(!(action = File_readQueue(file, &size))) + goto error7; + if(size != sizeof(short)) + goto error8; a->id = *action; if(e->state == STATE_FAILED) { @@ -667,14 +671,19 @@ unlink(file_name); } - error3: - FREE(e->source); - FREE(e->group); + error8: + FREE(action); + error7: FREE(e->message); + error6: + FREE(e->group); + error5: + FREE(e->source); + error4: FREE(e); - FREE(action); - error2: + error3: FREE(version); + error2: fclose(file); } error1:
_______________________________________________ monit-dev mailing list monit-dev@nongnu.org http://lists.nongnu.org/mailman/listinfo/monit-dev