Nagios fails on empty config file

Andreas Ericsson ae at op5.se
Wed Aug 23 11:04:32 CEST 2006


Andreas Ericsson wrote:
> Ethan Galstad wrote:
>> Marc Haber wrote:
>>> Hi,
>>>
>>> this is a forward from the Debian BTS, http://bugs.debian.org/354007.
>>>
>>> If Nagios 2 encounters an empty config file, it exits with "invalid
>>> argument":
>>>
>>> |Reading configuration data...
>>> |
>>> |Error: Cannot open config file '/etc/nagios-plugins/config/imap.cfg' for
>>> |reading: Invalid argument
>>> |
>>> |***> One or more problems was encountered while processing the config files...
>>> |
>>> |      Check your configuration file(s) to ensure that they contain valid
>>> |      directives and data defintions.  If you are upgrading from a previous
>>> |      version of Nagios, you should be aware that some variables/definitions
>>> |      may have been removed or modified in this version.  Make sure to read
>>> |      the HTML documentation regarding the config files, as well as the
>>> |      'Whats New' section to find out what has changed.
>>> |
>>> |* errors in config!
>>> |  failed!
>>> |invoke-rc.d: initscript nagios2, action "start" failed.
>>> |root at debian:/etc/nagios-plugins/config#
>>>
>>> This has been verified to be still present in nagios 2.5.
>>>
>>> Greetings
>>> Marc
>>>
>> I believe this is proper behavior.  The "Invalid argument" string is 
>> coming from the system via the strerror() function.
>>
> 
> I'm not sure what filesystem this happens on, but all filesystems I've 
> ever worked with allows opening a zero-length file for reading.
> 
> Unless the code goes something like this, strerror() should never spit 
> out that error string
> 
> ----
> int fd;
> 
> fd = open(config_file, O_RDONLY)
> fstat(config_file, &st);
> if (st.st_size == 0)
> 	close(fd);
> 
> read(fd, buf, size);
> ----
> 
> in which case the "invalid argument" comes from the read() call, and not 
> the open() call (I can't imagine the options being wrong for the open() 
> call, but I haven't checked it).
> 

Having investigated a bit further, it seems the mmap() call is the 
culprit in case the system doesn't support zero-length mmaps (many 
systems don't), in which case a simple "echo > config_file" would do the 
trick. Marc, can you verify if this is the case?

The simplest solution in this case would be to just skip the mmap() step 
in case of zero-length files, as they're closed before real operations 
commence anyways, and I think it's safe to assume most systems can spare 
the 100 bytes or so of memory that are lost during the config reading.

-- 
Andreas Ericsson                   andreas.ericsson at op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642




More information about the Developers mailing list