[Nagiosplug-checkins] nagiosplug/plugins Makefile.am,1.57,1.58 check_tcp.c,1.69,1.70 netutils.c,1.28,1.29 netutils.h,1.14,1.15 utils.h,1.23,1.24
M. Sean Finney
seanius at users.sourceforge.net
Tue Oct 25 03:40:36 CEST 2005
- Previous message: [Nagiosplug-checkins] nagiosplug/plugins Makefile.am,1.56,1.57 check_by_ssh.c,1.35,1.36 check_dig.c,1.40,1.41 check_dns.c,1.47,1.48 check_game.c,1.23,1.24 check_nagios.c,1.26,1.27 netutils.c,1.27,1.28 runcmd.c,1.1,1.2 runcmd.h,1.1,1.2 utils.c,1.41,1.42 utils.h,1.22,1.23
- Next message: [Nagiosplug-checkins] nagiosplug COPYING,1.2,1.3 configure.in,1.161,1.162
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/nagiosplug/nagiosplug/plugins
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10788/plugins
Modified Files:
Makefile.am check_tcp.c netutils.c netutils.h utils.h
Log Message:
- added code to allow check_tcp (via np_net_connect) work with local
unix sockets. some testing would be welcome. based on idea from
Alex Samorukov.
- also introduced a check_clamd behavior in check_tcp.
Index: check_tcp.c
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_tcp.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- check_tcp.c 19 Oct 2005 20:22:00 -0000 1.69
+++ check_tcp.c 25 Oct 2005 10:38:02 -0000 1.70
@@ -177,6 +177,12 @@
QUIT = "QUIT\r\n";
PORT = 119;
}
+ else if (strncmp(SERVICE, "CLAMD", 5)) {
+ SEND = "PING";
+ EXPECT = "PONG";
+ QUIT = NULL;
+ PORT = 3310;
+ }
/* fallthrough check, so it's supposed to use reverse matching */
else if (strcmp (SERVICE, "TCP"))
usage (_("CRITICAL - Generic check_tcp called with unknown service\n"));
@@ -318,10 +324,14 @@
printf(_("%s %s - "), SERVICE, state_text(result));
if(match == -2 && len && !(flags & FLAG_HIDE_OUTPUT))
- printf("Unexpected response from host: %s", status);
- else
- printf("%.3f second response time on port %d",
- elapsed_time, server_port);
+ printf("Unexpected response from host/socket: %s", status);
+ else {
+ printf("%.3f second response time on ", elapsed_time);
+ if(server_address[0] != '/')
+ printf("port %d", server_port);
+ else
+ printf("socket %s", server_address);
+ }
if (match != -2 && !(flags & FLAG_HIDE_OUTPUT) && len)
printf (" [%s]", status);
@@ -431,8 +441,6 @@
#endif
break;
case 'H': /* hostname */
- if (is_host (optarg) == FALSE)
- usage2 (_("Invalid hostname/address"), optarg);
server_address = optarg;
break;
case 'c': /* critical */
@@ -542,6 +550,8 @@
if (server_address == NULL)
usage4 (_("You must provide a server address"));
+ else if (is_host (optarg) == FALSE && optarg[0] != '/')
+ usage2 (_("Invalid hostname, address, or socket"), optarg);
return TRUE;
}
@@ -555,7 +565,7 @@
printf ("Copyright (c) 1999 Ethan Galstad <nagios at nagios.org>\n");
printf (COPYRIGHT, copyright, email);
- printf (_("This plugin tests %s connections with the specified host.\n\n"),
+ printf (_("This plugin tests %s connections with the specified host (or unix socket).\n\n"),
SERVICE);
print_usage ();
Index: Makefile.am
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/Makefile.am,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- Makefile.am 24 Oct 2005 11:10:29 -0000 1.57
+++ Makefile.am 25 Oct 2005 10:38:02 -0000 1.58
@@ -17,7 +17,7 @@
urlize @EXTRAS@
check_tcp_programs = check_ftp check_imap check_nntp check_pop \
- check_udp2 @check_tcp_ssl@
+ check_udp2 check_clamd @check_tcp_ssl@
EXTRA_PROGRAMS = check_mysql check_radius check_pgsql check_snmp check_hpjd \
check_swap check_fping check_ldap check_game check_dig \
Index: netutils.h
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/netutils.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- netutils.h 19 Oct 2005 20:22:00 -0000 1.14
+++ netutils.h 25 Oct 2005 10:38:02 -0000 1.15
@@ -40,6 +40,14 @@
#include <netinet/in.h>
#include <arpa/inet.h>
+#ifdef HAVE_SYS_UN_H
+# include <sys/un.h>
+# ifndef UNIX_PATH_MAX
+ /* linux uses this, on sun it's hard-coded at 108 without a define */
+# define UNIX_PATH_MAX 108
+# endif /* UNIX_PATH_MAX */
+#endif /* HAVE_SYS_UN_H */
+
RETSIGTYPE socket_timeout_alarm_handler (int) __attribute__((noreturn));
/* process_request and wrapper macros */
Index: utils.h
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/utils.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- utils.h 24 Oct 2005 11:10:29 -0000 1.23
+++ utils.h 25 Oct 2005 10:38:02 -0000 1.24
@@ -139,7 +139,7 @@
#define UT_HOST_PORT "\
-H, --hostname=ADDRESS\n\
- Host name or IP Address\n\
+ Host name, IP Address, or unix socket (must be an absolute path)\n\
-%c, --port=INTEGER\n\
Port number (default: %s)\n"
Index: netutils.c
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/netutils.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- netutils.c 24 Oct 2005 11:10:29 -0000 1.28
+++ netutils.c 25 Oct 2005 10:38:02 -0000 1.29
@@ -155,42 +155,46 @@
}
-/* opens a tcp or udp connection to a remote host */
+/* opens a tcp or udp connection to a remote host or local socket */
int
np_net_connect (const char *host_name, int port, int *sd, int proto)
{
struct addrinfo hints;
- struct addrinfo *res, *res0;
+ struct addrinfo *r, *res;
+ struct sockaddr_un su;
char port_str[6];
- int result;
+ int socktype, result;
- memset (&hints, 0, sizeof (hints));
- hints.ai_family = address_family;
- hints.ai_protocol = proto;
- hints.ai_socktype = (proto == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM;
+ socktype = (proto == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM;
- snprintf (port_str, sizeof (port_str), "%d", port);
- result = getaddrinfo (host_name, port_str, &hints, &res0);
+ /* as long as it doesn't start with a '/', it's assumed a host or ip */
+ if(host_name[0] != '/'){
+ memset (&hints, 0, sizeof (hints));
+ hints.ai_family = address_family;
+ hints.ai_protocol = proto;
+ hints.ai_socktype = socktype;
- if (result != 0) {
- printf ("%s\n", gai_strerror (result));
- return STATE_UNKNOWN;
- }
- else {
- res = res0;
- while (res) {
+ snprintf (port_str, sizeof (port_str), "%d", port);
+ result = getaddrinfo (host_name, port_str, &hints, &res);
+
+ if (result != 0) {
+ printf ("%s\n", gai_strerror (result));
+ return STATE_UNKNOWN;
+ }
+
+ r = res;
+ while (r) {
/* attempt to create a socket */
- *sd = socket (res->ai_family, (proto == IPPROTO_UDP) ?
- SOCK_DGRAM : SOCK_STREAM, res->ai_protocol);
+ *sd = socket (r->ai_family, socktype, r->ai_protocol);
if (*sd < 0) {
printf (_("Socket creation failed\n"));
- freeaddrinfo (res);
+ freeaddrinfo (r);
return STATE_UNKNOWN;
}
/* attempt to open a connection */
- result = connect (*sd, res->ai_addr, res->ai_addrlen);
+ result = connect (*sd, r->ai_addr, r->ai_addrlen);
if (result == 0) {
was_refused = FALSE;
@@ -206,9 +210,25 @@
}
close (*sd);
- res = res->ai_next;
+ r = r->ai_next;
}
- freeaddrinfo (res0);
+ freeaddrinfo (res);
+ }
+ /* else the hostname is interpreted as a path to a unix socket */
+ else {
+ if(strlen(host_name) >= UNIX_PATH_MAX){
+ die(_("Supplied path too long unix domain socket"));
+ }
+ memset(&su, 0, sizeof(su));
+ su.sun_family = AF_UNIX;
+ strncpy(su.sun_path, host_name, UNIX_PATH_MAX);
+ *sd = socket(PF_UNIX, SOCK_STREAM, 0);
+ if(sd < 0){
+ die(_("Socket creation failed"));
+ }
+ result = connect(*sd, (struct sockaddr *)&su, sizeof(su));
+ if (result < 0 && errno == ECONNREFUSED)
+ was_refused = TRUE;
}
if (result == 0)
- Previous message: [Nagiosplug-checkins] nagiosplug/plugins Makefile.am,1.56,1.57 check_by_ssh.c,1.35,1.36 check_dig.c,1.40,1.41 check_dns.c,1.47,1.48 check_game.c,1.23,1.24 check_nagios.c,1.26,1.27 netutils.c,1.27,1.28 runcmd.c,1.1,1.2 runcmd.h,1.1,1.2 utils.c,1.41,1.42 utils.h,1.22,1.23
- Next message: [Nagiosplug-checkins] nagiosplug COPYING,1.2,1.3 configure.in,1.161,1.162
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Commits
mailing list