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 c0e82dad..4234c436 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 | |||
