[Nagiosplug-devel] check_ping problem

Robert Nelson rnelson at windchannel.com
Thu Jul 22 17:18:21 CEST 2004


> A reasonable question is whether this is a problem in the 
> nagios plugin
> or in your local resolver library.  If you just type a
>   ping tap-5300h.2wachovia.nc.windchannel.com
> to a shell prompt, do you get normal output or a resolver error?  If
> the bare ping command works, you may have to tweak the check_ping to
> use it instead of some ping program that comes with the 
> nagios plugins.
> (My nagios box is down at the moment so I can't check exactly where
> nagios gets its ping; I do remember that it configured it wrong and I
> had to fix that).

Pings and nslookups themselves resolve fine without difficulty, which is
why I was so surprised :) I'm using nagios-plugins-1.3.1 and here's what
I found - goes beyond check_ping, in fact:


The offending code in check_ping.c is (starting on line 200):

=====
                case 'H':       /* hostname */
                        if (is_host (optarg) == FALSE)
                                usage2 ("Invalid host name/address",
optarg);
                        server_address = optarg;
                        break;
=====

The is_host seems to be defined in utils.c on line 167:

=====
int
is_host (char *address)
{
        if (is_dotted_quad (address) || is_hostname (address))
                return (TRUE);
        return (FALSE);
}
=====

That then leads to utils.c on line 215:

=====
int
is_hostname (char *s1)
{
        if (!s1 || strlen (s1) > 255) {
                return FALSE;
        }
        /* if s1 contains anything but ALPHA, NUM, dash, or period*/
        if (strcspn (s1,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789-.") !=
0) {
                return FALSE;
        }
        /* or if s1 begins with dash or period */
        if (strspn (s1, "-.") == 1) {
                return FALSE;
        }
  /* '..' and '.-' are not legal either */
        while ((s1 = index (s1, '.'))) {
                s1++;
                if (strspn (s1, "0123456789-.") == 1) {
                        return FALSE;
                }
        }
        return TRUE;
}
=====

I know enough about code to be dangerous but not offer anything helpful.
But I'm going to try anyway ;) If I remove the last if test, it will
probably start accepting the domain 2wachovia...However, I'm not sure
why a check for '..' and '.-' use a regex that will match '.0' through
'.9' as well. What else would this affect, if I "fixed" that if
statement and recompiled? And how long can I reasonably expect for any
such fix to happen and be merged with the source?

Rob Nelson
Network Engineer
Windchannel Communications
919-538-6326 




More information about the Devel mailing list