diff options
-rw-r--r-- | plugins/check_tcp.c | 38 | ||||
-rw-r--r-- | plugins/netutils.c | 98 | ||||
-rw-r--r-- | plugins/netutils.h | 32 |
3 files changed, 37 insertions, 131 deletions
diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c index fd2fe66b..1bf1f4cb 100644 --- a/plugins/check_tcp.c +++ b/plugins/check_tcp.c @@ -57,11 +57,7 @@ int connect_SSL (void); int check_certificate (X509 **); #endif -enum { - TCP_PROTOCOL = 1, - UDP_PROTOCOL = 2, - MAXBUF = 1024 -}; +#define MAXBUF 1024 int process_arguments (int, char **); int my_recv (void); @@ -120,7 +116,7 @@ main (int argc, char **argv) SEND = NULL; EXPECT = NULL; QUIT = NULL; - PROTOCOL = UDP_PROTOCOL; + PROTOCOL = IPPROTO_UDP; PORT = 0; } else if (strstr (argv[0], "check_tcp")) { @@ -129,7 +125,7 @@ main (int argc, char **argv) SEND = NULL; EXPECT = NULL; QUIT = NULL; - PROTOCOL = TCP_PROTOCOL; + PROTOCOL = IPPROTO_TCP; PORT = 0; } else if (strstr (argv[0], "check_ftp")) { @@ -138,7 +134,7 @@ main (int argc, char **argv) SEND = NULL; EXPECT = strdup ("220"); QUIT = strdup ("QUIT\r\n"); - PROTOCOL = TCP_PROTOCOL; + PROTOCOL = IPPROTO_TCP; PORT = 21; } else if (strstr (argv[0], "check_smtp")) { @@ -147,7 +143,7 @@ main (int argc, char **argv) SEND = NULL; EXPECT = strdup ("220"); QUIT = strdup ("QUIT\r\n"); - PROTOCOL = TCP_PROTOCOL; + PROTOCOL = IPPROTO_TCP; PORT = 25; } else if (strstr (argv[0], "check_pop")) { @@ -156,7 +152,7 @@ main (int argc, char **argv) SEND = NULL; EXPECT = strdup ("+OK"); QUIT = strdup ("QUIT\r\n"); - PROTOCOL = TCP_PROTOCOL; + PROTOCOL = IPPROTO_TCP; PORT = 110; } else if (strstr (argv[0], "check_imap")) { @@ -165,7 +161,7 @@ main (int argc, char **argv) SEND = NULL; EXPECT = strdup ("* OK"); QUIT = strdup ("a1 LOGOUT\r\n"); - PROTOCOL = TCP_PROTOCOL; + PROTOCOL = IPPROTO_TCP; PORT = 143; } #ifdef HAVE_SSL @@ -175,7 +171,7 @@ main (int argc, char **argv) SEND=NULL; EXPECT = strdup ("* OK"); QUIT = strdup ("a1 LOGOUT\r\n"); - PROTOCOL=TCP_PROTOCOL; + PROTOCOL=IPPROTO_TCP; use_ssl=TRUE; PORT=993; } @@ -185,7 +181,7 @@ main (int argc, char **argv) SEND=NULL; EXPECT = strdup ("+OK"); QUIT = strdup ("QUIT\r\n"); - PROTOCOL=TCP_PROTOCOL; + PROTOCOL=IPPROTO_TCP; use_ssl=TRUE; PORT=995; } @@ -195,7 +191,7 @@ main (int argc, char **argv) SEND=NULL; EXPECT = strdup ("220"); QUIT = strdup ("QUIT\r\n"); - PROTOCOL=TCP_PROTOCOL; + PROTOCOL=IPPROTO_TCP; use_ssl=TRUE; PORT=465; } @@ -205,7 +201,7 @@ main (int argc, char **argv) SEND = strdup("<stream:stream to=\'host\' xmlns=\'jabber:client\' xmlns:stream=\'http://etherx.jabber.org/streams\'>\n"); EXPECT = strdup("<?xml version=\'1.0\'?><stream:stream xmlns:stream=\'http://etherx.jabber.org/streams\'"); QUIT = strdup("</stream:stream>\n"); - PROTOCOL=TCP_PROTOCOL; + PROTOCOL=IPPROTO_TCP; use_ssl=TRUE; PORT = 5222; } @@ -219,7 +215,7 @@ main (int argc, char **argv) server_expect = realloc (server_expect, ++server_expect_count); asprintf (&server_expect[server_expect_count - 1], "201"); QUIT = strdup("QUIT\r\n"); - PROTOCOL = TCP_PROTOCOL; + PROTOCOL = IPPROTO_TCP; use_ssl=TRUE; PORT = 563; } @@ -235,7 +231,7 @@ main (int argc, char **argv) server_expect = realloc (server_expect, sizeof (char *) * (++server_expect_count)); asprintf (&server_expect[server_expect_count - 1], "201"); asprintf (&QUIT, "QUIT\r\n"); - PROTOCOL = TCP_PROTOCOL; + PROTOCOL = IPPROTO_TCP; PORT = 119; } else { @@ -288,13 +284,7 @@ main (int argc, char **argv) result = connect_SSL (); else #endif - { - if (PROTOCOL == UDP_PROTOCOL) - result = my_udp_connect (server_address, server_port, &sd); - else - /* default is TCP */ - result = my_tcp_connect (server_address, server_port, &sd); - } + result = my_connect (server_address, server_port, &sd, PROTOCOL); if (result == STATE_CRITICAL) return STATE_CRITICAL; diff --git a/plugins/netutils.c b/plugins/netutils.c index 1231c1ef..e7d5ba78 100644 --- a/plugins/netutils.c +++ b/plugins/netutils.c @@ -39,7 +39,6 @@ int econn_refuse_state = STATE_CRITICAL; int was_refused = FALSE; int address_family = AF_UNSPEC; -static int my_connect(const char *address, int port, int *sd, int proto); /* handles socket timeouts */ void socket_timeout_alarm_handler (int sig) @@ -53,37 +52,6 @@ socket_timeout_alarm_handler (int sig) } -/* connects to a host on a specified TCP port, sends a string, - and gets a response */ -int -process_tcp_request (const char *server_address, int server_port, - const char *send_buffer, char *recv_buffer, int recv_size) -{ - int result; - - result = process_request (server_address, server_port, - IPPROTO_TCP, send_buffer, recv_buffer, recv_size); - - return result; -} - - -/* connects to a host on a specified UDP port, sends a string, and gets a - response */ -int -process_udp_request (const char *server_address, int server_port, - const char *send_buffer, char *recv_buffer, int recv_size) -{ - int result; - - result = process_request (server_address, server_port, - IPPROTO_UDP, send_buffer, recv_buffer, recv_size); - - return result; -} - - - /* connects to a host on a specified tcp port, sends a string, and gets a response. loops on select-recv until timeout or eof to get all of a multi-packet answer */ @@ -163,6 +131,7 @@ process_tcp_request2 (const char *server_address, int server_port, return result; } + /* connects to a host on a specified port, sends a string, and gets a response */ int @@ -186,32 +155,8 @@ process_request (const char *server_address, int server_port, int proto, } -/* opens a connection to a remote host/tcp port */ -int -my_tcp_connect (const char *host_name, int port, int *sd) -{ - int result; - - result = my_connect (host_name, port, sd, IPPROTO_TCP); - - return result; -} - - -/* opens a connection to a remote host/udp port */ -int -my_udp_connect (const char *host_name, int port, int *sd) -{ - int result; - - result = my_connect (host_name, port, sd, IPPROTO_UDP); - - return result; -} - - /* opens a tcp or udp connection to a remote host */ -static int +int my_connect (const char *host_name, int port, int *sd, int proto) { struct addrinfo hints; @@ -291,20 +236,6 @@ my_connect (const char *host_name, int port, int *sd, int proto) int -send_tcp_request (int sd, const char *send_buffer, char *recv_buffer, int recv_size) -{ - return send_request (sd, IPPROTO_TCP, send_buffer, recv_buffer, recv_size); -} - - -int -send_udp_request (int sd, const char *send_buffer, char *recv_buffer, int recv_size) -{ - return send_request (sd, IPPROTO_UDP, send_buffer, recv_buffer, recv_size); -} - - -int send_request (int sd, int proto, const char *send_buffer, char *recv_buffer, int recv_size) { int result = STATE_OK; @@ -397,28 +328,3 @@ resolve_host_or_addr (const char *address, int family) return TRUE; } } - -int -is_inet_addr (const char *address) -{ - return resolve_host_or_addr (address, AF_INET); -} - -#ifdef USE_IPV6 -int -is_inet6_addr (const char *address) -{ - return resolve_host_or_addr (address, AF_INET6); -} -#endif - -int -is_hostname (const char *s1) -{ -#ifdef USE_IPV6 - return resolve_host_or_addr (s1, address_family); -#else - return resolve_host_or_addr (s1, AF_INET); -#endif -} - diff --git a/plugins/netutils.h b/plugins/netutils.h index 2f31bdc8..bd532011 100644 --- a/plugins/netutils.h +++ b/plugins/netutils.h @@ -38,30 +38,40 @@ RETSIGTYPE socket_timeout_alarm_handler (int) __attribute__((noreturn)); +/* process_request and wrapper macros */ +#define process_tcp_request(addr, port, sbuf, rbuf, rsize) \ + process_request(addr, port, IPPROTO_TCP, sbuf, rbuf, rsize) +#define process_udp_request(addr, port, sbuf, rbuf, rsize) \ + process_request(addr, port, IPPROTO_UDP, sbuf, rbuf, rsize) int process_tcp_request2 (const char *address, int port, const char *sbuffer, char *rbuffer, int rsize); -int process_tcp_request (const char *address, int port, - const char *sbuffer, char *rbuffer, int rsize); -int process_udp_request (const char *address, int port, - const char *sbuffer, char *rbuffer, int rsize); int process_request (const char *address, int port, int proto, const char *sbuffer, char *rbuffer, int rsize); -int my_tcp_connect (const char *address, int port, int *sd); -int my_udp_connect (const char *address, int port, int *sd); +/* my_connect and wrapper macros */ +#define my_tcp_connect(addr, port, s) my_connect(addr, port, s, IPPROTO_TCP) +#define my_udp_connect(addr, port, s) my_connect(addr, port, s, IPPROTO_UDP) +int my_connect(const char *address, int port, int *sd, int proto); -int send_tcp_request (int sd, const char *send_buffer, char *recv_buffer, int recv_size); -int send_udp_request (int sd, const char *send_buffer, char *recv_buffer, int recv_size); +/* send_request and wrapper macros */ +#define send_tcp_request(s, sbuf, rbuf, rsize) \ + send_request(s, IPPROTO_TCP, sbuf, rbuf, rsize) +#define send_udp_request(s, sbuf, rbuf, rsize) \ + send_request(s, IPPROTO_UDP, sbuf, rbuf, rsize) int send_request (int sd, int proto, const char *send_buffer, char *recv_buffer, int recv_size); + +/* "is_*" wrapper macros and functions */ int is_host (const char *); int is_addr (const char *); int resolve_host_or_addr (const char *, int); -int is_inet_addr (const char *); +#define is_inet_addr(addr) resolve_host_or_addr(addr, AF_INET) #ifdef USE_IPV6 -int is_inet6_addr (const char *); +# define is_inet6_addr(addr) resolve_host_or_addr(addr, AF_INET6) +# define is_hostname(addr) resolve_host_or_addr(addr, address_family) +#else +# define is_hostname(addr) resolve_host_or_addr(addr, AF_INET) #endif -int is_hostname (const char *); extern unsigned int socket_timeout; extern int econn_refuse_state; |