diff --git a/configure.in b/configure.in index ec3606e1..eea01da4 100644 --- a/configure.in +++ b/configure.in @@ -386,7 +386,7 @@ else if test x$enable_emulate_getaddrinfo != xyes ; then AC_MSG_ERROR([getaddrinfo not found: try --with-lwres or --enable-emulate-getaddrinfo]) fi - LIBOBJS="$LIBOBJS getaddrinfo.o" + EXTRA_NETOBJS="$EXTRA_NETOBJS getaddrinfo.o" fi if test x"$enable_emulate_getaddrinfo" != xno ; then @@ -414,7 +414,8 @@ if test x"$enable_emulate_getaddrinfo" != xno ; then AC_SEARCH_LIBS(gethostbyname, resolv bind nsl, , [AC_MSG_ERROR([cannot find gethostbyname])]) fi - LIBOBJS="$LIBOBJS gethostbyname.o" + EXTRA_NETOBJS="$EXTRA_NETOBJS gethostbyname.o" + AC_DEFINE(EMULATE_GETADDRINFO,1,[Define if emulating getaddrinfo]) fi @@ -1451,7 +1452,7 @@ AC_TRY_COMPILE([#ifdef __STDC__ [NEED_VA_LIST=-DNEED_VA_LIST AC_SUBST(NEED_VA_LIST) AC_MSG_RESULT(no)]) AC_SUBST(EXTRAS) -AC_SUBST(LIBOBJS) +AC_SUBST(EXTRA_NETOBJS) AC_SUBST(DEPLIBS) AC_DEFINE_UNQUOTED(PACKAGE_VERSION,"${VERSION}",[package version]) diff --git a/lib/Makefile.am b/lib/Makefile.am index b24bc407..9a26e419 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -2,12 +2,8 @@ noinst_LIBRARIES = libnagiosplug.a -noinst_HEADERS = getopt.h getaddrinfo.h gethostbyname.h +noinst_HEADERS = getopt.h libnagiosplug_a_SOURCES = getopt.c getopt1.c getloadavg.c snprintf.c -libnagiosplug_a_DEPENDENCIES = @LIBOBJS@ - INCLUDES = -I$(srcdir) - -EXTRA_DIST = getaddrinfo.c gethostbyname.c diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 2524e1ac..a884b451 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -14,14 +14,15 @@ EXTRA_PROGRAMS = check_mysql check_radius check_pgsql check_snmp check_hpjd \ check_swap check_fping check_ldap check_game check_dig \ check_nagios check_by_ssh check_dns check_nt -check_tcp_programs = check_ftp check_imap check_nntp check_pop +check_tcp_programs = check_ftp check_imap check_nntp check_pop check_udp2 -EXTRA_DIST = t utils.c netutils.c popen.c utils.h netutils.h popen.h common.h +EXTRA_DIST = t utils.c netutils.c popen.c utils.h netutils.h popen.h common.h \ + getaddrinfo.c getaddrinfo.h gethostbyname.c gethostbyname.h PLUGINHDRS = common.h config.h BASEOBJS = utils.o ../lib/libnagiosplug.a -NETOBJS = netutils.o $(BASEOBJS) +NETOBJS = netutils.o $(BASEOBJS) $(EXTRA_NETOBJS) NETLIBS = $(NETOBJS) $(SOCKETLIBS) TESTS_ENVIRONMENT = perl -I $(top_builddir) -I $(top_srcdir) @@ -36,27 +37,27 @@ AM_INSTALL_PROGRAM_FLAGS = @INSTALL_OPTS@ ############################################################################## # the actual targets -check_dig_LDADD = $(BASEOBJS) popen.o +check_dig_LDADD = $(NETLIBS) popen.o check_disk_LDADD = $(BASEOBJS) popen.o -check_dns_LDADD = $(BASEOBJS) popen.o +check_dns_LDADD = $(NETLIBS) popen.o check_dummy_LDADD = $(BASEOBJS) -check_fping_LDADD = $(BASEOBJS) popen.o +check_fping_LDADD = $(NETLIBS) popen.o check_game_LDADD = $(BASEOBJS) check_http_LDADD = $(NETLIBS) $(SSLLIBS) -check_hpjd_LDADD = $(BASEOBJS) popen.o +check_hpjd_LDADD = $(NETLIBS) popen.o check_ldap_LDADD = $(NETLIBS) $(LDAPLIBS) check_load_LDADD = $(BASEOBJS) popen.o check_mrtg_LDADD = $(BASEOBJS) check_mrtgtraf_LDADD = $(BASEOBJS) -check_mysql_LDADD = $(BASEOBJS) $(MYSQLLIBS) +check_mysql_LDADD = $(NETLIBS) $(MYSQLLIBS) check_nagios_LDADD = $(BASEOBJS) popen.o check_nt_LDADD = $(NETLIBS) check_nwstat_LDADD = $(NETLIBS) check_overcr_LDADD = $(NETLIBS) -check_pgsql_LDADD = $(BASEOBJS) $(PGLIBS) -check_ping_LDADD = $(BASEOBJS) popen.o +check_pgsql_LDADD = $(NETLIBS) $(PGLIBS) +check_ping_LDADD = $(NETLIBS) popen.o check_procs_LDADD = $(BASEOBJS) popen.o -check_radius_LDADD = $(BASEOBJS) $(RADIUSLIBS) +check_radius_LDADD = $(NETLIBS) $(RADIUSLIBS) check_real_LDADD = $(NETLIBS) check_snmp_LDADD = $(BASEOBJS) popen.o check_smtp_LDADD = $(NETLIBS) @@ -68,31 +69,31 @@ check_udp_LDADD = $(NETLIBS) check_ups_LDADD = $(NETLIBS) check_users_LDADD = $(BASEOBJS) popen.o check_vsz_LDADD = $(BASEOBJS) popen.o -check_by_ssh_LDADD = $(BASEOBJS) popen.o +check_by_ssh_LDADD = $(NETLIBS) popen.o negate_LDADD = $(BASEOBJS) popen.o urlize_LDADD = $(BASEOBJS) popen.o -check_dig_DEPENDENCIES = check_dig.c $(BASEOBJS) popen.o $(DEPLIBS) +check_dig_DEPENDENCIES = check_dig.c $(NETOBJS) popen.o $(DEPLIBS) check_disk_DEPENDENCIES = check_disk.c $(BASEOBJS) popen.o $(DEPLIBS) -check_dns_DEPENDENCIES = check_dns.c $(BASEOBJS) popen.o $(DEPLIBS) -check_dummy_DEPENDENCIES = check_dummy.c $(DEPLIBS) -check_fping_DEPENDENCIES = check_fping.c $(BASEOBJS) popen.o $(DEPLIBS) +check_dns_DEPENDENCIES = check_dns.c $(NETOBJS) popen.o $(DEPLIBS) +check_dummy_DEPENDENCIES = check_dummy.c $(DEPLIBS) +check_fping_DEPENDENCIES = check_fping.c $(NETOBJS) popen.o $(DEPLIBS) check_game_DEPENDENCIES = check_game.c $(DEPLIBS) check_http_DEPENDENCIES = check_http.c $(NETOBJS) $(DEPLIBS) -check_hpjd_DEPENDENCIES = check_hpjd.c $(BASEOBJS) popen.o $(DEPLIBS) +check_hpjd_DEPENDENCIES = check_hpjd.c $(NETOBJS) popen.o $(DEPLIBS) check_ldap_DEPENDENCIES = check_ldap.c $(NETOBJS) $(DEPLIBS) check_load_DEPENDENCIES = check_load.c $(BASEOBJS) popen.o $(DEPLIBS) -check_mrtg_DEPENDENCIES = check_mrtg.c $(DEPLIBS) -check_mrtgtraf_DEPENDENCIES = check_mrtgtraf.c $(DEPLIBS) -check_mysql_DEPENDENCIES = check_mysql.c $(DEPLIBS) +check_mrtg_DEPENDENCIES = check_mrtg.c $(DEPLIBS) +check_mrtgtraf_DEPENDENCIES = check_mrtgtraf.c $(DEPLIBS) +check_mysql_DEPENDENCIES = check_mysql.c $(NETOBJS) $(DEPLIBS) check_nagios_DEPENDENCIES = check_nagios.c $(BASEOBJS) popen.o $(DEPLIBS) check_nt_DEPENDENCIES = check_nt.c $(NETOBJS) $(DEPLIBS) check_nwstat_DEPENDENCIES = check_nwstat.c $(NETOBJS) $(DEPLIBS) check_overcr_DEPENDENCIES = check_overcr.c $(NETOBJS) $(DEPLIBS) -check_pgsql_DEPENDENCIES = check_pgsql.c $(DEPLIBS) -check_ping_DEPENDENCIES = check_ping.c $(BASEOBJS) popen.o $(DEPLIBS) +check_pgsql_DEPENDENCIES = check_pgsql.c $(NETOBJS) $(DEPLIBS) +check_ping_DEPENDENCIES = check_ping.c $(NETOBJS) popen.o $(DEPLIBS) check_procs_DEPENDENCIES = check_procs.c $(BASEOBJS) popen.o $(DEPLIBS) -check_radius_DEPENDENCIES = check_radius.c $(DEPLIBS) +check_radius_DEPENDENCIES = check_radius.c $(NETOBJS) $(DEPLIBS) check_real_DEPENDENCIES = check_real.c $(NETOBJS) $(DEPLIBS) check_snmp_DEPENDENCIES = check_snmp.c $(BASEOBJS) popen.o $(DEPLIBS) check_smtp_DEPENDENCIES = check_smtp.c $(NETOBJS) $(DEPLIBS) @@ -104,7 +105,7 @@ check_udp_DEPENDENCIES = check_udp.c $(NETOBJS) $(DEPLIBS) check_ups_DEPENDENCIES = check_ups.c $(NETOBJS) $(DEPLIBS) check_users_DEPENDENCIES = check_users.c $(BASEOBJS) popen.o $(DEPLIBS) check_vsz_DEPENDENCIES = check_vsz.c $(BASEOBJS) popen.o $(DEPLIBS) -check_by_ssh_DEPENDENCIES = check_by_ssh.c $(BASEOBJS) popen.o $(DEPLIBS) +check_by_ssh_DEPENDENCIES = check_by_ssh.c $(NETOBJS) popen.o $(DEPLIBS) negate_DEPENDENCIES = negate.c $(BASEOBJS) popen.o $(DEPLIBS) urlize_DEPENDENCIES = urlize.c $(BASEOBJS) popen.o $(DEPLIBS) @@ -117,6 +118,10 @@ utils.o: utils.c utils.h $(PLUGINHDRS) netutils.o: netutils.c netutils.h $(PLUGINHDRS) +getaddrinfo.o: getaddrinfo.h $(PLUGINHDRS) + +gethostbyname.o: gethostbyname.h $(PLUGINHDRS) + all-local: $(check_tcp_programs) $(check_tcp_programs): check_tcp diff --git a/lib/getaddrinfo.c b/plugins/getaddrinfo.c similarity index 93% rename from lib/getaddrinfo.c rename to plugins/getaddrinfo.c index c958da6c..12ac67d6 100644 --- a/lib/getaddrinfo.c +++ b/plugins/getaddrinfo.c @@ -2,6 +2,7 @@ * This file is part of libESMTP, a library for submission of RFC 2822 * formatted electronic mail messages using the SMTP protocol described * in RFC 2821. + * Modified by Jeremy T. Bouse for use in Nagios plugins * * Copyright (C) 2001,2002 Brian Stafford * @@ -89,26 +90,17 @@ getaddrinfo (const char *nodename, const char *servname, hints = &hint; } - /* servname must not be NULL in this implementation */ - if (servname == NULL) - return EAI_NONAME; - - /* check for tcp or udp sockets only */ - if (hints->ai_socktype == SOCK_STREAM) - socktype = "tcp"; - else if (hints->ai_socktype == SOCK_DGRAM) - socktype = "udp"; - else - return EAI_SERVICE; result.ai_socktype = hints->ai_socktype; /* Note: maintain port in host byte order to make debugging easier */ - if (isdigit (*servname)) - port = strtol (servname, NULL, 10); - else if ((servent = getservbyname (servname, socktype)) != NULL) - port = ntohs (servent->s_port); - else - return EAI_NONAME; + if (servname != NULL) { + if (isdigit (*servname)) + port = strtol (servname, NULL, 10); + else if ((servent = getservbyname (servname, socktype)) != NULL) + port = ntohs (servent->s_port); + else + return EAI_NONAME; + } /* if nodename == NULL refer to the local host for a client or any for a server */ @@ -309,4 +301,3 @@ gai_strerror (int ecode) return "unknown error"; return eai_descr[ecode]; } - diff --git a/lib/getaddrinfo.h b/plugins/getaddrinfo.h similarity index 98% rename from lib/getaddrinfo.h rename to plugins/getaddrinfo.h index c474d3bc..5bcc8844 100644 --- a/lib/getaddrinfo.h +++ b/plugins/getaddrinfo.h @@ -4,6 +4,7 @@ * This file is part of libESMTP, a library for submission of RFC 2822 * formatted electronic mail messages using the SMTP protocol described * in RFC 2821. + * Modified by Jeremy T. Bouse for use in Nagios plugins * * Copyright (C) 2001,2002 Brian Stafford * diff --git a/lib/gethostbyname.c b/plugins/gethostbyname.c similarity index 100% rename from lib/gethostbyname.c rename to plugins/gethostbyname.c diff --git a/lib/gethostbyname.h b/plugins/gethostbyname.h similarity index 100% rename from lib/gethostbyname.h rename to plugins/gethostbyname.h diff --git a/plugins/netutils.c b/plugins/netutils.c index c0e82dad..4234c436 100644 --- a/plugins/netutils.c +++ b/plugins/netutils.c @@ -29,22 +29,9 @@ * ****************************************************************************/ -#include "config.h" -#include "common.h" -#include -#include +#include "netutils.h" -extern int socket_timeout; -RETSIGTYPE socket_timeout_alarm_handler (int); - -int process_tcp_request2 (char *, int, char *, char *, int); -int process_tcp_request (char *, int, char *, char *, int); -int process_udp_request (char *, int, char *, char *, int); -int process_request (char *, int, int, char *, char *, int); - -int my_tcp_connect (char *, int, int *); -int my_udp_connect (char *, int, int *); -int my_connect (char *, int, int *, int); +int socket_timeout = DEFAULT_SOCKET_TIMEOUT; /* handles socket timeouts */ void @@ -304,3 +291,69 @@ my_connect (char *host_name, int port, int *sd, int proto) return STATE_CRITICAL; } } + +int +is_host (char *address) +{ + if (is_addr (address) || is_hostname (address)) + return (TRUE); + + return (FALSE); +} + +int +is_addr (char *address) +{ +#ifdef USE_IPV6 + if (is_inet_addr (address) || is_inet6_addr (address)) +#else + if (is_inet_addr (address)) +#endif + return (TRUE); + + return (FALSE); +} + +int +resolve_host_or_addr (char *address, int family) +{ + struct addrinfo hints; + struct addrinfo *res; + int retval; + + memset (&hints, 0, sizeof (hints)); + hints.ai_family = family; + retval = getaddrinfo (address, NULL, &hints, &res); + + if (retval != 0) + return FALSE; + else { + freeaddrinfo (res); + return TRUE; + } +} + +int +is_inet_addr (char *address) +{ + return resolve_host_or_addr (address, AF_INET); +} + +#ifdef USE_IPV6 +int +is_inet6_addr (char *address) +{ + return resolve_host_or_addr (address, AF_INET6); +} +#endif + +int +is_hostname (char *s1) +{ +#ifdef USE_IPV6 + return resolve_host_or_addr (s1, AF_UNSPEC); +#else + return resolve_host_or_addr (s1, AF_INET); +#endif +} + diff --git a/plugins/netutils.h b/plugins/netutils.h index 3ea51663..6c8eed36 100644 --- a/plugins/netutils.h +++ b/plugins/netutils.h @@ -43,11 +43,20 @@ int process_tcp_request (char *address, int port, char *sbuffer, char *rbuffer, int rsize); int process_udp_request (char *address, int port, char *sbuffer, char *rbuffer, int rsize); -int process_request (char *address, int port, char *proto, char *sbuffer, +int process_request (char *address, int port, int proto, char *sbuffer, char *rbuffer, int rsize); int my_tcp_connect (char *address, int port, int *sd); int my_udp_connect (char *address, int port, int *sd); int my_connect (char *address, int port, int *sd, int proto); -int socket_timeout = DEFAULT_SOCKET_TIMEOUT; +int is_host (char *); +int is_addr (char *); +int resolve_host_or_addr (char *, int); +int is_inet_addr (char *); +#ifdef USE_IPV6 +int is_inet6_addr (char *); +#endif +int is_hostname (char *); + +extern int socket_timeout; diff --git a/plugins/utils.c b/plugins/utils.c index 7361323f..e204e238 100644 --- a/plugins/utils.c +++ b/plugins/utils.c @@ -27,15 +27,6 @@ void print_revision (const char *, const char *); void terminate (int, const char *fmt, ...); RETSIGTYPE timeout_alarm_handler (int); -int is_host (char *); -int is_addr (char *); -int resolve_host_or_addr (char *, int); -int is_inet_addr (char *); -#ifdef USE_IPV6 -int is_inet6_addr (char *); -#endif -int is_hostname (char *); - int is_integer (char *); int is_intpos (char *); int is_intneg (char *); @@ -170,78 +161,6 @@ timeout_alarm_handler (int signo) } } -int -is_host (char *address) -{ - if (is_addr (address) || is_hostname (address)) - return (TRUE); - - return (FALSE); -} - -int -is_addr (char *address) -{ -#ifdef USE_IPV6 - if (is_inet_addr (address) || is_inet6_addr (address)) -#else - if (is_inet_addr (address)) -#endif - return (TRUE); - - return (FALSE); -} - -int -resolve_host_or_addr (char *address, int family) -{ - struct addrinfo hints; - struct addrinfo *res; - int retval; - - memset (&hints, 0, sizeof (hints)); - hints.ai_family = family; - retval = getaddrinfo (address, NULL, &hints, &res); - - if (retval != 0) - return FALSE; - else { - freeaddrinfo (res); - return TRUE; - } -} - -int -is_inet_addr (char *address) -{ - return resolve_host_or_addr (address, AF_INET); -} - -#ifdef USE_IPV6 -int -is_inet6_addr (char *address) -{ - return resolve_host_or_addr (address, AF_INET6); -} -#endif - -/* from RFC-1035 - * - * The labels must follow the rules for ARPANET host names. They must - * start with a letter, end with a letter or digit, and have as interior - * characters only letters, digits, and hyphen. There are also some - * restrictions on the length. Labels must be 63 characters or less. */ - -int -is_hostname (char *s1) -{ -#ifdef USE_IPV6 - return resolve_host_or_addr (s1, AF_UNSPEC); -#else - return resolve_host_or_addr (s1, AF_INET); -#endif -} - int is_numeric (char *number) { diff --git a/plugins/utils.h b/plugins/utils.h index 89ada6f0..43b612c1 100644 --- a/plugins/utils.h +++ b/plugins/utils.h @@ -27,14 +27,6 @@ int timeout_interval = DEFAULT_SOCKET_TIMEOUT; /* Test input types */ -int is_host (char *); -int is_addr (char *); -int is_inet_addr (char *); -#ifdef USE_IPV6 -int is_inet6_addr (char *); -#endif -int is_hostname (char *); - int is_integer (char *); int is_intpos (char *); int is_intneg (char *);