[Nagiosplug-devel] bug with "-e" argument to check_disk [patch included]

sean finney seanius at seanius.net
Tue Jun 1 05:13:06 CEST 2004


hi there,

i've been looking into getting disk space monitoring integrated into
the other nagios monitoring i'm already doing, and i think i've found
a bug with on of the command line options, "-e".  the description says:

 -e, --errors-only
     Display only devices/mountpoints with errors

when running on a system with no disk space errors:

cork[~]12:49:49$ /usr/local/sbin/check_disk -w 15% -c 10%
DISK OK [1247916 kB (63%) free on /dev/sda7] [25815 kB (26%) free on
/dev/sda2] [1931628 kB (100%) free on /dev/shm] [1768884 kB (52%) free
on /dev/sda6] [7517516 kB (76%) free on /dev/sda3] [9166460 kB (93%)
free on /dev/sda5] [16410780 kB (74%) free on /dev/emcpowerb6] [92890296
kB (78%) free on /dev/emcpowera1] [51267056 kB (43%) free on
/dev/emcpowera2] [22861384 kB (79%) free on /dev/emcpowerb3] [7366696 kB
(51%) free on /dev/emcpowerb5]

however, when running with -e

cork[~]12:50:05$ /usr/local/sbin/check_disk -w 15% -c 10% -e
Unable to read output
/bin/df -Pk 
/dev/emcpowerb5       15124868   6983988   7372576      49%
/usr/local/swat

very strange indeed!  even stranger, if you specify the run with the
-v option, the behaviour goes away:

cork[~]12:50:44$ /usr/local/sbin/check_disk -w 15% -c 10% -e -v
/bin/df -Pk  ==> DISK OK [1247900 kB (63%) free on /dev/sda7] [25815 kB
(26%) free on /dev/sda2] [1931628 kB (100%) free on /dev/shm] [1768884
kB (52%) free on /dev/sda6] [7517516 kB (76%) free on /dev/sda3]
[9166276 kB (93%) free on /dev/sda5] [16410760 kB (74%) free on
/dev/emcpowerb6] [92899616 kB (78%) free on /dev/emcpowera1] [51266780
kB (43%) free on /dev/emcpowera2] [22861368 kB (79%) free on
/dev/emcpowerb3] [7326368 kB (51%) free on /dev/emcpowerb5]

some investigation turned up what looks like a bug in the flow of
execution in the main while loop processing the output of df, which
causes the last processed line to always have result == STATE_UNKNOWN.
specifically, line 121-122:

if (disk_result==STATE_OK && erronly && !verbose)
	continue

result is not set to the value of disk_result (via calling max_state at
the end of the while loop, which is skipped by this continue statement),
and as such is still in STATE_UNKNOWN.

attached is a very short patch (diff -u) which i believe fixes the
problem.


	sean

ps - please cc me with any correspondance, i'm not subscribed to the
     list
-------------- next part --------------
--- check_disk.c.old	2004-05-31 12:04:37.000000000 -0400
+++ check_disk.c	2004-05-31 12:45:11.000000000 -0400
@@ -118,8 +118,10 @@
 			if (strcmp (file_system, "none") == 0)
 				strncpy (file_system, mntp, MAX_INPUT_BUFFER-1);
 
-			if (disk_result==STATE_OK && erronly && !verbose)
+			if (disk_result==STATE_OK && erronly && !verbose){
+				result = max_state (result, disk_result);
 				continue;
+			}
 
 			if (disk_result!=STATE_OK || verbose>=0) 
 				asprintf (&output, "%s [%.0f kB (%d%%) free on %s]", output,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <https://www.monitoring-plugins.org/archive/devel/attachments/20040601/c9cb7c82/attachment.sig>


More information about the Devel mailing list