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); | |||
| 57 | int check_certificate (X509 **); | 57 | int check_certificate (X509 **); |
| 58 | #endif | 58 | #endif |
| 59 | 59 | ||
| 60 | enum { | 60 | #define MAXBUF 1024 |
| 61 | TCP_PROTOCOL = 1, | ||
| 62 | UDP_PROTOCOL = 2, | ||
| 63 | MAXBUF = 1024 | ||
| 64 | }; | ||
| 65 | 61 | ||
| 66 | int process_arguments (int, char **); | 62 | int process_arguments (int, char **); |
| 67 | int my_recv (void); | 63 | int my_recv (void); |
| @@ -120,7 +116,7 @@ main (int argc, char **argv) | |||
| 120 | SEND = NULL; | 116 | SEND = NULL; |
| 121 | EXPECT = NULL; | 117 | EXPECT = NULL; |
| 122 | QUIT = NULL; | 118 | QUIT = NULL; |
| 123 | PROTOCOL = UDP_PROTOCOL; | 119 | PROTOCOL = IPPROTO_UDP; |
| 124 | PORT = 0; | 120 | PORT = 0; |
| 125 | } | 121 | } |
| 126 | else if (strstr (argv[0], "check_tcp")) { | 122 | else if (strstr (argv[0], "check_tcp")) { |
| @@ -129,7 +125,7 @@ main (int argc, char **argv) | |||
| 129 | SEND = NULL; | 125 | SEND = NULL; |
| 130 | EXPECT = NULL; | 126 | EXPECT = NULL; |
| 131 | QUIT = NULL; | 127 | QUIT = NULL; |
| 132 | PROTOCOL = TCP_PROTOCOL; | 128 | PROTOCOL = IPPROTO_TCP; |
| 133 | PORT = 0; | 129 | PORT = 0; |
| 134 | } | 130 | } |
| 135 | else if (strstr (argv[0], "check_ftp")) { | 131 | else if (strstr (argv[0], "check_ftp")) { |
| @@ -138,7 +134,7 @@ main (int argc, char **argv) | |||
| 138 | SEND = NULL; | 134 | SEND = NULL; |
| 139 | EXPECT = strdup ("220"); | 135 | EXPECT = strdup ("220"); |
| 140 | QUIT = strdup ("QUIT\r\n"); | 136 | QUIT = strdup ("QUIT\r\n"); |
| 141 | PROTOCOL = TCP_PROTOCOL; | 137 | PROTOCOL = IPPROTO_TCP; |
| 142 | PORT = 21; | 138 | PORT = 21; |
| 143 | } | 139 | } |
| 144 | else if (strstr (argv[0], "check_smtp")) { | 140 | else if (strstr (argv[0], "check_smtp")) { |
| @@ -147,7 +143,7 @@ main (int argc, char **argv) | |||
| 147 | SEND = NULL; | 143 | SEND = NULL; |
| 148 | EXPECT = strdup ("220"); | 144 | EXPECT = strdup ("220"); |
| 149 | QUIT = strdup ("QUIT\r\n"); | 145 | QUIT = strdup ("QUIT\r\n"); |
| 150 | PROTOCOL = TCP_PROTOCOL; | 146 | PROTOCOL = IPPROTO_TCP; |
| 151 | PORT = 25; | 147 | PORT = 25; |
| 152 | } | 148 | } |
| 153 | else if (strstr (argv[0], "check_pop")) { | 149 | else if (strstr (argv[0], "check_pop")) { |
| @@ -156,7 +152,7 @@ main (int argc, char **argv) | |||
| 156 | SEND = NULL; | 152 | SEND = NULL; |
| 157 | EXPECT = strdup ("+OK"); | 153 | EXPECT = strdup ("+OK"); |
| 158 | QUIT = strdup ("QUIT\r\n"); | 154 | QUIT = strdup ("QUIT\r\n"); |
| 159 | PROTOCOL = TCP_PROTOCOL; | 155 | PROTOCOL = IPPROTO_TCP; |
| 160 | PORT = 110; | 156 | PORT = 110; |
| 161 | } | 157 | } |
| 162 | else if (strstr (argv[0], "check_imap")) { | 158 | else if (strstr (argv[0], "check_imap")) { |
| @@ -165,7 +161,7 @@ main (int argc, char **argv) | |||
| 165 | SEND = NULL; | 161 | SEND = NULL; |
| 166 | EXPECT = strdup ("* OK"); | 162 | EXPECT = strdup ("* OK"); |
| 167 | QUIT = strdup ("a1 LOGOUT\r\n"); | 163 | QUIT = strdup ("a1 LOGOUT\r\n"); |
| 168 | PROTOCOL = TCP_PROTOCOL; | 164 | PROTOCOL = IPPROTO_TCP; |
| 169 | PORT = 143; | 165 | PORT = 143; |
| 170 | } | 166 | } |
| 171 | #ifdef HAVE_SSL | 167 | #ifdef HAVE_SSL |
| @@ -175,7 +171,7 @@ main (int argc, char **argv) | |||
| 175 | SEND=NULL; | 171 | SEND=NULL; |
| 176 | EXPECT = strdup ("* OK"); | 172 | EXPECT = strdup ("* OK"); |
| 177 | QUIT = strdup ("a1 LOGOUT\r\n"); | 173 | QUIT = strdup ("a1 LOGOUT\r\n"); |
| 178 | PROTOCOL=TCP_PROTOCOL; | 174 | PROTOCOL=IPPROTO_TCP; |
| 179 | use_ssl=TRUE; | 175 | use_ssl=TRUE; |
| 180 | PORT=993; | 176 | PORT=993; |
| 181 | } | 177 | } |
| @@ -185,7 +181,7 @@ main (int argc, char **argv) | |||
| 185 | SEND=NULL; | 181 | SEND=NULL; |
| 186 | EXPECT = strdup ("+OK"); | 182 | EXPECT = strdup ("+OK"); |
| 187 | QUIT = strdup ("QUIT\r\n"); | 183 | QUIT = strdup ("QUIT\r\n"); |
| 188 | PROTOCOL=TCP_PROTOCOL; | 184 | PROTOCOL=IPPROTO_TCP; |
| 189 | use_ssl=TRUE; | 185 | use_ssl=TRUE; |
| 190 | PORT=995; | 186 | PORT=995; |
| 191 | } | 187 | } |
| @@ -195,7 +191,7 @@ main (int argc, char **argv) | |||
| 195 | SEND=NULL; | 191 | SEND=NULL; |
| 196 | EXPECT = strdup ("220"); | 192 | EXPECT = strdup ("220"); |
| 197 | QUIT = strdup ("QUIT\r\n"); | 193 | QUIT = strdup ("QUIT\r\n"); |
| 198 | PROTOCOL=TCP_PROTOCOL; | 194 | PROTOCOL=IPPROTO_TCP; |
| 199 | use_ssl=TRUE; | 195 | use_ssl=TRUE; |
| 200 | PORT=465; | 196 | PORT=465; |
| 201 | } | 197 | } |
| @@ -205,7 +201,7 @@ main (int argc, char **argv) | |||
| 205 | SEND = strdup("<stream:stream to=\'host\' xmlns=\'jabber:client\' xmlns:stream=\'http://etherx.jabber.org/streams\'>\n"); | 201 | SEND = strdup("<stream:stream to=\'host\' xmlns=\'jabber:client\' xmlns:stream=\'http://etherx.jabber.org/streams\'>\n"); |
| 206 | EXPECT = strdup("<?xml version=\'1.0\'?><stream:stream xmlns:stream=\'http://etherx.jabber.org/streams\'"); | 202 | EXPECT = strdup("<?xml version=\'1.0\'?><stream:stream xmlns:stream=\'http://etherx.jabber.org/streams\'"); |
| 207 | QUIT = strdup("</stream:stream>\n"); | 203 | QUIT = strdup("</stream:stream>\n"); |
| 208 | PROTOCOL=TCP_PROTOCOL; | 204 | PROTOCOL=IPPROTO_TCP; |
| 209 | use_ssl=TRUE; | 205 | use_ssl=TRUE; |
| 210 | PORT = 5222; | 206 | PORT = 5222; |
| 211 | } | 207 | } |
| @@ -219,7 +215,7 @@ main (int argc, char **argv) | |||
| 219 | server_expect = realloc (server_expect, ++server_expect_count); | 215 | server_expect = realloc (server_expect, ++server_expect_count); |
| 220 | asprintf (&server_expect[server_expect_count - 1], "201"); | 216 | asprintf (&server_expect[server_expect_count - 1], "201"); |
| 221 | QUIT = strdup("QUIT\r\n"); | 217 | QUIT = strdup("QUIT\r\n"); |
| 222 | PROTOCOL = TCP_PROTOCOL; | 218 | PROTOCOL = IPPROTO_TCP; |
| 223 | use_ssl=TRUE; | 219 | use_ssl=TRUE; |
| 224 | PORT = 563; | 220 | PORT = 563; |
| 225 | } | 221 | } |
| @@ -235,7 +231,7 @@ main (int argc, char **argv) | |||
| 235 | server_expect = realloc (server_expect, sizeof (char *) * (++server_expect_count)); | 231 | server_expect = realloc (server_expect, sizeof (char *) * (++server_expect_count)); |
| 236 | asprintf (&server_expect[server_expect_count - 1], "201"); | 232 | asprintf (&server_expect[server_expect_count - 1], "201"); |
| 237 | asprintf (&QUIT, "QUIT\r\n"); | 233 | asprintf (&QUIT, "QUIT\r\n"); |
| 238 | PROTOCOL = TCP_PROTOCOL; | 234 | PROTOCOL = IPPROTO_TCP; |
| 239 | PORT = 119; | 235 | PORT = 119; |
| 240 | } | 236 | } |
| 241 | else { | 237 | else { |
| @@ -288,13 +284,7 @@ main (int argc, char **argv) | |||
| 288 | result = connect_SSL (); | 284 | result = connect_SSL (); |
| 289 | else | 285 | else |
| 290 | #endif | 286 | #endif |
| 291 | { | 287 | result = my_connect (server_address, server_port, &sd, PROTOCOL); |
| 292 | if (PROTOCOL == UDP_PROTOCOL) | ||
| 293 | result = my_udp_connect (server_address, server_port, &sd); | ||
| 294 | else | ||
| 295 | /* default is TCP */ | ||
| 296 | result = my_tcp_connect (server_address, server_port, &sd); | ||
| 297 | } | ||
| 298 | 288 | ||
| 299 | if (result == STATE_CRITICAL) | 289 | if (result == STATE_CRITICAL) |
| 300 | return STATE_CRITICAL; | 290 | 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; | |||
| 39 | int was_refused = FALSE; | 39 | int was_refused = FALSE; |
| 40 | int address_family = AF_UNSPEC; | 40 | int address_family = AF_UNSPEC; |
| 41 | 41 | ||
| 42 | static int my_connect(const char *address, int port, int *sd, int proto); | ||
| 43 | /* handles socket timeouts */ | 42 | /* handles socket timeouts */ |
| 44 | void | 43 | void |
| 45 | socket_timeout_alarm_handler (int sig) | 44 | socket_timeout_alarm_handler (int sig) |
| @@ -53,37 +52,6 @@ socket_timeout_alarm_handler (int sig) | |||
| 53 | } | 52 | } |
| 54 | 53 | ||
| 55 | 54 | ||
| 56 | /* connects to a host on a specified TCP port, sends a string, | ||
| 57 | and gets a response */ | ||
| 58 | int | ||
| 59 | process_tcp_request (const char *server_address, int server_port, | ||
| 60 | const char *send_buffer, char *recv_buffer, int recv_size) | ||
| 61 | { | ||
| 62 | int result; | ||
| 63 | |||
| 64 | result = process_request (server_address, server_port, | ||
| 65 | IPPROTO_TCP, send_buffer, recv_buffer, recv_size); | ||
| 66 | |||
| 67 | return result; | ||
| 68 | } | ||
| 69 | |||
| 70 | |||
| 71 | /* connects to a host on a specified UDP port, sends a string, and gets a | ||
| 72 | response */ | ||
| 73 | int | ||
| 74 | process_udp_request (const char *server_address, int server_port, | ||
| 75 | const char *send_buffer, char *recv_buffer, int recv_size) | ||
| 76 | { | ||
| 77 | int result; | ||
| 78 | |||
| 79 | result = process_request (server_address, server_port, | ||
| 80 | IPPROTO_UDP, send_buffer, recv_buffer, recv_size); | ||
| 81 | |||
| 82 | return result; | ||
| 83 | } | ||
| 84 | |||
| 85 | |||
| 86 | |||
| 87 | /* connects to a host on a specified tcp port, sends a string, and gets a | 55 | /* connects to a host on a specified tcp port, sends a string, and gets a |
| 88 | response. loops on select-recv until timeout or eof to get all of a | 56 | response. loops on select-recv until timeout or eof to get all of a |
| 89 | multi-packet answer */ | 57 | multi-packet answer */ |
| @@ -163,6 +131,7 @@ process_tcp_request2 (const char *server_address, int server_port, | |||
| 163 | return result; | 131 | return result; |
| 164 | } | 132 | } |
| 165 | 133 | ||
| 134 | |||
| 166 | /* connects to a host on a specified port, sends a string, and gets a | 135 | /* connects to a host on a specified port, sends a string, and gets a |
| 167 | response */ | 136 | response */ |
| 168 | int | 137 | int |
| @@ -186,32 +155,8 @@ process_request (const char *server_address, int server_port, int proto, | |||
| 186 | } | 155 | } |
| 187 | 156 | ||
| 188 | 157 | ||
| 189 | /* opens a connection to a remote host/tcp port */ | ||
| 190 | int | ||
| 191 | my_tcp_connect (const char *host_name, int port, int *sd) | ||
| 192 | { | ||
| 193 | int result; | ||
| 194 | |||
| 195 | result = my_connect (host_name, port, sd, IPPROTO_TCP); | ||
| 196 | |||
| 197 | return result; | ||
| 198 | } | ||
| 199 | |||
| 200 | |||
| 201 | /* opens a connection to a remote host/udp port */ | ||
| 202 | int | ||
| 203 | my_udp_connect (const char *host_name, int port, int *sd) | ||
| 204 | { | ||
| 205 | int result; | ||
| 206 | |||
| 207 | result = my_connect (host_name, port, sd, IPPROTO_UDP); | ||
| 208 | |||
| 209 | return result; | ||
| 210 | } | ||
| 211 | |||
| 212 | |||
| 213 | /* opens a tcp or udp connection to a remote host */ | 158 | /* opens a tcp or udp connection to a remote host */ |
| 214 | static int | 159 | int |
| 215 | my_connect (const char *host_name, int port, int *sd, int proto) | 160 | my_connect (const char *host_name, int port, int *sd, int proto) |
| 216 | { | 161 | { |
| 217 | struct addrinfo hints; | 162 | struct addrinfo hints; |
| @@ -291,20 +236,6 @@ my_connect (const char *host_name, int port, int *sd, int proto) | |||
| 291 | 236 | ||
| 292 | 237 | ||
| 293 | int | 238 | int |
| 294 | send_tcp_request (int sd, const char *send_buffer, char *recv_buffer, int recv_size) | ||
| 295 | { | ||
| 296 | return send_request (sd, IPPROTO_TCP, send_buffer, recv_buffer, recv_size); | ||
| 297 | } | ||
| 298 | |||
| 299 | |||
| 300 | int | ||
| 301 | send_udp_request (int sd, const char *send_buffer, char *recv_buffer, int recv_size) | ||
| 302 | { | ||
| 303 | return send_request (sd, IPPROTO_UDP, send_buffer, recv_buffer, recv_size); | ||
| 304 | } | ||
| 305 | |||
| 306 | |||
| 307 | int | ||
| 308 | send_request (int sd, int proto, const char *send_buffer, char *recv_buffer, int recv_size) | 239 | send_request (int sd, int proto, const char *send_buffer, char *recv_buffer, int recv_size) |
| 309 | { | 240 | { |
| 310 | int result = STATE_OK; | 241 | int result = STATE_OK; |
| @@ -397,28 +328,3 @@ resolve_host_or_addr (const char *address, int family) | |||
| 397 | return TRUE; | 328 | return TRUE; |
| 398 | } | 329 | } |
| 399 | } | 330 | } |
| 400 | |||
| 401 | int | ||
| 402 | is_inet_addr (const char *address) | ||
| 403 | { | ||
| 404 | return resolve_host_or_addr (address, AF_INET); | ||
| 405 | } | ||
| 406 | |||
| 407 | #ifdef USE_IPV6 | ||
| 408 | int | ||
| 409 | is_inet6_addr (const char *address) | ||
| 410 | { | ||
| 411 | return resolve_host_or_addr (address, AF_INET6); | ||
| 412 | } | ||
| 413 | #endif | ||
| 414 | |||
| 415 | int | ||
| 416 | is_hostname (const char *s1) | ||
| 417 | { | ||
| 418 | #ifdef USE_IPV6 | ||
| 419 | return resolve_host_or_addr (s1, address_family); | ||
| 420 | #else | ||
| 421 | return resolve_host_or_addr (s1, AF_INET); | ||
| 422 | #endif | ||
| 423 | } | ||
| 424 | |||
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 @@ | |||
| 38 | 38 | ||
| 39 | RETSIGTYPE socket_timeout_alarm_handler (int) __attribute__((noreturn)); | 39 | RETSIGTYPE socket_timeout_alarm_handler (int) __attribute__((noreturn)); |
| 40 | 40 | ||
| 41 | /* process_request and wrapper macros */ | ||
| 42 | #define process_tcp_request(addr, port, sbuf, rbuf, rsize) \ | ||
| 43 | process_request(addr, port, IPPROTO_TCP, sbuf, rbuf, rsize) | ||
| 44 | #define process_udp_request(addr, port, sbuf, rbuf, rsize) \ | ||
| 45 | process_request(addr, port, IPPROTO_UDP, sbuf, rbuf, rsize) | ||
| 41 | int process_tcp_request2 (const char *address, int port, | 46 | int process_tcp_request2 (const char *address, int port, |
| 42 | const char *sbuffer, char *rbuffer, int rsize); | 47 | const char *sbuffer, char *rbuffer, int rsize); |
| 43 | int process_tcp_request (const char *address, int port, | ||
| 44 | const char *sbuffer, char *rbuffer, int rsize); | ||
| 45 | int process_udp_request (const char *address, int port, | ||
| 46 | const char *sbuffer, char *rbuffer, int rsize); | ||
| 47 | int process_request (const char *address, int port, int proto, | 48 | int process_request (const char *address, int port, int proto, |
| 48 | const char *sbuffer, char *rbuffer, int rsize); | 49 | const char *sbuffer, char *rbuffer, int rsize); |
| 49 | 50 | ||
| 50 | int my_tcp_connect (const char *address, int port, int *sd); | 51 | /* my_connect and wrapper macros */ |
| 51 | int my_udp_connect (const char *address, int port, int *sd); | 52 | #define my_tcp_connect(addr, port, s) my_connect(addr, port, s, IPPROTO_TCP) |
| 53 | #define my_udp_connect(addr, port, s) my_connect(addr, port, s, IPPROTO_UDP) | ||
| 54 | int my_connect(const char *address, int port, int *sd, int proto); | ||
| 52 | 55 | ||
| 53 | int send_tcp_request (int sd, const char *send_buffer, char *recv_buffer, int recv_size); | 56 | /* send_request and wrapper macros */ |
| 54 | int send_udp_request (int sd, const char *send_buffer, char *recv_buffer, int recv_size); | 57 | #define send_tcp_request(s, sbuf, rbuf, rsize) \ |
| 58 | send_request(s, IPPROTO_TCP, sbuf, rbuf, rsize) | ||
| 59 | #define send_udp_request(s, sbuf, rbuf, rsize) \ | ||
| 60 | send_request(s, IPPROTO_UDP, sbuf, rbuf, rsize) | ||
| 55 | int send_request (int sd, int proto, const char *send_buffer, char *recv_buffer, int recv_size); | 61 | int send_request (int sd, int proto, const char *send_buffer, char *recv_buffer, int recv_size); |
| 56 | 62 | ||
| 63 | |||
| 64 | /* "is_*" wrapper macros and functions */ | ||
| 57 | int is_host (const char *); | 65 | int is_host (const char *); |
| 58 | int is_addr (const char *); | 66 | int is_addr (const char *); |
| 59 | int resolve_host_or_addr (const char *, int); | 67 | int resolve_host_or_addr (const char *, int); |
| 60 | int is_inet_addr (const char *); | 68 | #define is_inet_addr(addr) resolve_host_or_addr(addr, AF_INET) |
| 61 | #ifdef USE_IPV6 | 69 | #ifdef USE_IPV6 |
| 62 | int is_inet6_addr (const char *); | 70 | # define is_inet6_addr(addr) resolve_host_or_addr(addr, AF_INET6) |
| 71 | # define is_hostname(addr) resolve_host_or_addr(addr, address_family) | ||
| 72 | #else | ||
| 73 | # define is_hostname(addr) resolve_host_or_addr(addr, AF_INET) | ||
| 63 | #endif | 74 | #endif |
| 64 | int is_hostname (const char *); | ||
| 65 | 75 | ||
| 66 | extern unsigned int socket_timeout; | 76 | extern unsigned int socket_timeout; |
| 67 | extern int econn_refuse_state; | 77 | extern int econn_refuse_state; |
