diff options
Diffstat (limited to 'plugins/netutils.c')
-rw-r--r-- | plugins/netutils.c | 83 |
1 files changed, 68 insertions, 15 deletions
diff --git a/plugins/netutils.c b/plugins/netutils.c index c0e82da..4234c43 100644 --- a/plugins/netutils.c +++ b/plugins/netutils.c | |||
@@ -29,22 +29,9 @@ | |||
29 | * | 29 | * |
30 | ****************************************************************************/ | 30 | ****************************************************************************/ |
31 | 31 | ||
32 | #include "config.h" | 32 | #include "netutils.h" |
33 | #include "common.h" | ||
34 | #include <netinet/in.h> | ||
35 | #include <arpa/inet.h> | ||
36 | 33 | ||
37 | extern int socket_timeout; | 34 | int socket_timeout = DEFAULT_SOCKET_TIMEOUT; |
38 | RETSIGTYPE socket_timeout_alarm_handler (int); | ||
39 | |||
40 | int process_tcp_request2 (char *, int, char *, char *, int); | ||
41 | int process_tcp_request (char *, int, char *, char *, int); | ||
42 | int process_udp_request (char *, int, char *, char *, int); | ||
43 | int process_request (char *, int, int, char *, char *, int); | ||
44 | |||
45 | int my_tcp_connect (char *, int, int *); | ||
46 | int my_udp_connect (char *, int, int *); | ||
47 | int my_connect (char *, int, int *, int); | ||
48 | 35 | ||
49 | /* handles socket timeouts */ | 36 | /* handles socket timeouts */ |
50 | void | 37 | void |
@@ -304,3 +291,69 @@ my_connect (char *host_name, int port, int *sd, int proto) | |||
304 | return STATE_CRITICAL; | 291 | return STATE_CRITICAL; |
305 | } | 292 | } |
306 | } | 293 | } |
294 | |||
295 | int | ||
296 | is_host (char *address) | ||
297 | { | ||
298 | if (is_addr (address) || is_hostname (address)) | ||
299 | return (TRUE); | ||
300 | |||
301 | return (FALSE); | ||
302 | } | ||
303 | |||
304 | int | ||
305 | is_addr (char *address) | ||
306 | { | ||
307 | #ifdef USE_IPV6 | ||
308 | if (is_inet_addr (address) || is_inet6_addr (address)) | ||
309 | #else | ||
310 | if (is_inet_addr (address)) | ||
311 | #endif | ||
312 | return (TRUE); | ||
313 | |||
314 | return (FALSE); | ||
315 | } | ||
316 | |||
317 | int | ||
318 | resolve_host_or_addr (char *address, int family) | ||
319 | { | ||
320 | struct addrinfo hints; | ||
321 | struct addrinfo *res; | ||
322 | int retval; | ||
323 | |||
324 | memset (&hints, 0, sizeof (hints)); | ||
325 | hints.ai_family = family; | ||
326 | retval = getaddrinfo (address, NULL, &hints, &res); | ||
327 | |||
328 | if (retval != 0) | ||
329 | return FALSE; | ||
330 | else { | ||
331 | freeaddrinfo (res); | ||
332 | return TRUE; | ||
333 | } | ||
334 | } | ||
335 | |||
336 | int | ||
337 | is_inet_addr (char *address) | ||
338 | { | ||
339 | return resolve_host_or_addr (address, AF_INET); | ||
340 | } | ||
341 | |||
342 | #ifdef USE_IPV6 | ||
343 | int | ||
344 | is_inet6_addr (char *address) | ||
345 | { | ||
346 | return resolve_host_or_addr (address, AF_INET6); | ||
347 | } | ||
348 | #endif | ||
349 | |||
350 | int | ||
351 | is_hostname (char *s1) | ||
352 | { | ||
353 | #ifdef USE_IPV6 | ||
354 | return resolve_host_or_addr (s1, AF_UNSPEC); | ||
355 | #else | ||
356 | return resolve_host_or_addr (s1, AF_INET); | ||
357 | #endif | ||
358 | } | ||
359 | |||