summaryrefslogtreecommitdiffstats
path: root/web/attachments/37323-nagiosplugins-cvs-20021210-ipv6.diff
diff options
context:
space:
mode:
Diffstat (limited to 'web/attachments/37323-nagiosplugins-cvs-20021210-ipv6.diff')
-rw-r--r--web/attachments/37323-nagiosplugins-cvs-20021210-ipv6.diff740
1 files changed, 740 insertions, 0 deletions
diff --git a/web/attachments/37323-nagiosplugins-cvs-20021210-ipv6.diff b/web/attachments/37323-nagiosplugins-cvs-20021210-ipv6.diff
new file mode 100644
index 0000000..da47ec3
--- /dev/null
+++ b/web/attachments/37323-nagiosplugins-cvs-20021210-ipv6.diff
@@ -0,0 +1,740 @@
1Index: check_dig.c
2===================================================================
3RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_dig.c,v
4retrieving revision 1.7
5diff -u -r1.7 check_dig.c
6--- check_dig.c 21 Nov 2002 12:40:58 -0000 1.7
7+++ check_dig.c 11 Dec 2002 02:39:50 -0000
8@@ -57,7 +57,7 @@
9 usage ("Could not parse arguments\n");
10
11 /* get the command to run */
12- asprintf (&command_line, "%s @%s %s", PATH_TO_DIG, dns_server, query_address);
13+ asprintf (&command_line, "%s -t any @%s %s", PATH_TO_DIG, dns_server, query_address);
14
15 alarm (timeout_interval);
16 time (&start_time);
17Index: check_dns.c
18===================================================================
19RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_dns.c,v
20retrieving revision 1.5
21diff -u -r1.5 check_dns.c
22--- check_dns.c 14 Nov 2002 02:26:34 -0000 1.5
23+++ check_dns.c 11 Dec 2002 02:39:50 -0000
24@@ -308,7 +308,7 @@
25 timeout_interval = atoi (optarg);
26 break;
27 case 'H': /* hostname */
28- if (is_host (optarg) == FALSE) {
29+ if ((is_host (optarg)) == FALSE) {
30 printf ("Invalid host name/address\n\n");
31 print_usage ();
32 exit (STATE_UNKNOWN);
33@@ -318,7 +318,7 @@
34 strcpy (query_address, optarg);
35 break;
36 case 's': /* server name */
37- if (is_host (optarg) == FALSE) {
38+ if ((is_host (optarg)) == FALSE) {
39 printf ("Invalid server name/address\n\n");
40 print_usage ();
41 exit (STATE_UNKNOWN);
42@@ -328,7 +328,7 @@
43 strcpy (dns_server, optarg);
44 break;
45 case 'r': /* reverse server name */
46- if (is_host (optarg) == FALSE) {
47+ if ((is_host (optarg)) == FALSE) {
48 printf ("Invalid host name/address\n\n");
49 print_usage ();
50 exit (STATE_UNKNOWN);
51@@ -338,7 +338,7 @@
52 strcpy (ptr_server, optarg);
53 break;
54 case 'a': /* expected address */
55- if (is_dotted_quad (optarg) == FALSE) {
56+ if ((is_ipv4_addr (optarg)) == FALSE) {
57 printf ("Invalid expected address\n\n");
58 print_usage ();
59 exit (STATE_UNKNOWN);
60@@ -352,8 +352,8 @@
61 }
62
63 c = optind;
64- if (query_address[0] == 0) {
65- if (is_host (argv[c]) == FALSE) {
66+ if (query_address == NULL) {
67+ if ((is_host (argv[c])) == FALSE) {
68 printf ("Invalid name/address: %s\n\n", argv[c]);
69 return ERROR;
70 }
71@@ -362,8 +362,8 @@
72 strcpy (query_address, argv[c++]);
73 }
74
75- if (dns_server[0] == 0) {
76- if (is_host (argv[c]) == FALSE) {
77+ if (dns_server == NULL) {
78+ if ((is_host (argv[c])) == FALSE) {
79 printf ("Invalid name/address: %s\n\n", argv[c]);
80 return ERROR;
81 }
82Index: check_ldap.c
83===================================================================
84RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_ldap.c,v
85retrieving revision 1.2
86diff -u -r1.2 check_ldap.c
87--- check_ldap.c 14 Nov 2002 02:26:34 -0000 1.2
88+++ check_ldap.c 11 Dec 2002 02:39:50 -0000
89@@ -7,7 +7,7 @@
90 *
91 * Last Modified: $Date: 2002/11/14 02:26:34 $
92 *
93- * Command line: check_ldap -h <host> -b <base_dn> -p <port> -w <warn_time> -w <crit_time>
94+ * Command line: check_ldap -H <host> -b <base_dn> -p <port> -w <warn_time> -w <crit_time>
95 *
96 * Description:
97 *
98@@ -197,7 +197,7 @@
99 crit_time = atoi (optarg);
100 break;
101 default:
102- usage ("check_ldap: could not parse arguments\n");
103+ usage ("check_ldap: could not parse unknown arguments\n");
104 break;
105 }
106 }
107@@ -253,6 +253,6 @@
108 {
109 printf
110 ("Usage: %s -H <host> -b <base_dn> -p <port> [-a <attr>] [-D <binddn>]\n"
111- " [-P <password>] [-w <warn_time>] [-c <crit_time>] [-t timeout]\n"
112+ " [-P <password>] -w <warn_time> -c <crit_time> [-t timeout]\n"
113 "(Note: all times are in seconds.)\n", PROGNAME);
114 }
115Index: check_ping.c
116===================================================================
117RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_ping.c,v
118retrieving revision 1.10
119diff -u -r1.10 check_ping.c
120--- check_ping.c 13 Nov 2002 11:50:54 -0000 1.10
121+++ check_ping.c 11 Dec 2002 02:39:50 -0000
122@@ -88,9 +88,15 @@
123
124 /* does the host address of number of packets argument come first? */
125 #ifdef PING_PACKETS_FIRST
126- asprintf (&command_line, PING_COMMAND, max_packets, server_address);
127+ if (is_ipv6_addr (server_address))
128+ asprintf (&command_line, PING6_COMMAND, max_packets, server_address);
129+ else
130+ asprintf (&command_line, PING_COMMAND, max_packets, server_address);
131 #else
132- asprintf (&command_line, PING_COMMAND, server_address, max_packets);
133+ if (is_ipv6_addr (server_address))
134+ asprintf (&command_line, PING6_COMMAND, server_address, max_packets);
135+ else
136+ asprintf (&command_line, PING_COMMAND, server_address, max_packets);
137 #endif
138
139 /* Set signal handling and alarm */
140Index: check_tcp.c
141===================================================================
142RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_tcp.c,v
143retrieving revision 1.8
144diff -u -r1.8 check_tcp.c
145--- check_tcp.c 25 Nov 2002 12:00:17 -0000 1.8
146+++ check_tcp.c 11 Dec 2002 02:39:50 -0000
147@@ -225,8 +225,12 @@
148 {
149 if (PROTOCOL == UDP_PROTOCOL)
150 result = my_udp_connect (server_address, server_port, &sd);
151- else /* default is TCP */
152- result = my_tcp_connect (server_address, server_port, &sd);
153+ else
154+ /* default is TCP */
155+ // result = my_tcp_connect (server_address, server_port, &sd);
156+ result = my_connect (server_address, server_port, &sd, IPPROTO_TCP);
157+printf ("Catch value: %d\n", result);
158+printf ("XXX: Check valve\n");
159 }
160
161 if (result == STATE_CRITICAL)
162Index: check_udp.c
163===================================================================
164RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_udp.c,v
165retrieving revision 1.2
166diff -u -r1.2 check_udp.c
167--- check_udp.c 30 Oct 2002 18:46:01 -0000 1.2
168+++ check_udp.c 11 Dec 2002 02:39:50 -0000
169@@ -74,9 +74,8 @@
170 alarm (socket_timeout);
171
172 time (&start_time);
173- result =
174- process_udp_request (server_address, server_port, server_send,
175- recv_buffer, MAX_INPUT_BUFFER - 1);
176+ result = process_udp_request (server_address, server_port, server_send,
177+ recv_buffer, MAX_INPUT_BUFFER - 1);
178 time (&end_time);
179
180 if (result != STATE_OK) {
181Index: netutils.c
182===================================================================
183RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/netutils.c,v
184retrieving revision 1.1.1.1
185diff -u -r1.1.1.1 netutils.c
186--- netutils.c 28 Feb 2002 06:42:59 -0000 1.1.1.1
187+++ netutils.c 11 Dec 2002 02:39:50 -0000
188@@ -42,13 +42,11 @@
189 int process_tcp_request2 (char *, int, char *, char *, int);
190 int process_tcp_request (char *, int, char *, char *, int);
191 int process_udp_request (char *, int, char *, char *, int);
192-int process_request (char *, int, char *, char *, char *, int);
193+int process_request (char *, int, int, char *, char *, int);
194
195 int my_tcp_connect (char *, int, int *);
196 int my_udp_connect (char *, int, int *);
197-int my_connect (char *, int, int *, char *);
198-
199-int my_inet_aton (register const char *, struct in_addr *);
200+int my_connect (char *, int, int *, int);
201
202 /* handles socket timeouts */
203 void
204@@ -64,47 +62,29 @@
205 /* connects to a host on a specified TCP port, sends a string,
206 and gets a response */
207 int
208-process_tcp_request (char *server_address,
209- int server_port,
210- char *send_buffer, char *recv_buffer, int recv_size)
211+process_tcp_request (char *server_address, int server_port,
212+ char *send_buffer, char *recv_buffer, int recv_size)
213 {
214- int result;
215- char proto[4] = "tcp";
216-
217- result = process_request (server_address,
218- server_port,
219- proto, send_buffer, recv_buffer, recv_size);
220-
221- return result;
222+ return process_request (server_address, server_port, IPPROTO_TCP,
223+ send_buffer, recv_buffer, recv_size);
224 }
225
226-
227 /* connects to a host on a specified UDP port, sends a string, and gets a
228 response */
229 int
230-process_udp_request (char *server_address,
231- int server_port,
232- char *send_buffer, char *recv_buffer, int recv_size)
233+process_udp_request (char *server_address, int server_port,
234+ char *send_buffer, char *recv_buffer, int recv_size)
235 {
236- int result;
237- char proto[4] = "udp";
238-
239- result = process_request (server_address,
240- server_port,
241- proto, send_buffer, recv_buffer, recv_size);
242-
243- return result;
244+ return process_request (server_address, server_port, IPPROTO_UDP,
245+ send_buffer, recv_buffer, recv_size);
246 }
247
248-
249-
250 /* connects to a host on a specified tcp port, sends a string, and gets a
251 response. loops on select-recv until timeout or eof to get all of a
252 multi-packet answer */
253 int
254-process_tcp_request2 (char *server_address,
255- int server_port,
256- char *send_buffer, char *recv_buffer, int recv_size)
257+process_tcp_request2 (char *server_address, int server_port,
258+ char *send_buffer, char *recv_buffer, int recv_size)
259 {
260
261 int result;
262@@ -115,7 +95,7 @@
263 fd_set readfds;
264 int recv_length = 0;
265
266- result = my_connect (server_address, server_port, &sd, "tcp");
267+ result = my_connect (server_address, server_port, &sd, IPPROTO_TCP);
268 if (result != STATE_OK)
269 return STATE_CRITICAL;
270
271@@ -149,24 +129,30 @@
272 else { /* it has */
273 recv_result =
274 recv (sd, recv_buffer + recv_length, recv_size - recv_length - 1, 0);
275- if (recv_result == -1) { /* recv failed, bail out */
276+ if (recv_result == -1) {
277+ /* recv failed, bail out */
278 strcpy (recv_buffer + recv_length, "");
279 result = STATE_WARNING;
280 break;
281 }
282- else if (recv_result == 0) { /* end of file ? */
283+ else if (recv_result == 0) {
284+ /* end of file ? */
285 recv_buffer[recv_length] = 0;
286 break;
287 }
288- else { /* we got data! */
289+ else {
290+ /* we got data! */
291 recv_length += recv_result;
292- if (recv_length >= recv_size - 1) { /* buffer full, we're done */
293+ if (recv_length >= recv_size - 1) {
294+ /* buffer full, we're done */
295 recv_buffer[recv_size - 1] = 0;
296 break;
297 }
298 }
299- } /* end if(!FD_ISSET(sd,&readfds)) */
300- } /* end while(1) */
301+ }
302+ /* end if(!FD_ISSET(sd,&readfds)) */
303+ }
304+ /* end while(1) */
305
306 close (sd);
307 return result;
308@@ -175,10 +161,8 @@
309 /* connects to a host on a specified port, sends a string, and gets a
310 response */
311 int
312-process_request (char *server_address,
313- int server_port,
314- char *proto,
315- char *send_buffer, char *recv_buffer, int recv_size)
316+process_request (char *server_address, int server_port, int proto,
317+ char *send_buffer, char *recv_buffer, int recv_size)
318 {
319 int result;
320 int send_result;
321@@ -218,7 +202,7 @@
322 recv_result = recv (sd, recv_buffer, recv_size - 1, 0);
323 if (recv_result == -1) {
324 strcpy (recv_buffer, "");
325- if (!strcmp (proto, "tcp"))
326+ if (proto != IPPROTO_TCP)
327 printf ("recv() failed\n");
328 result = STATE_WARNING;
329 }
330@@ -236,196 +220,74 @@
331
332
333 /* opens a connection to a remote host/tcp port */
334+
335 int
336 my_tcp_connect (char *host_name, int port, int *sd)
337 {
338- int result;
339- char proto[4] = "tcp";
340-
341- result = my_connect (host_name, port, sd, proto);
342-
343- return result;
344+ return my_connect (host_name, port, sd, IPPROTO_TCP);
345 }
346
347-
348 /* opens a connection to a remote host/udp port */
349 int
350 my_udp_connect (char *host_name, int port, int *sd)
351 {
352- int result;
353- char proto[4] = "udp";
354-
355- result = my_connect (host_name, port, sd, proto);
356-
357- return result;
358+ return my_connect (host_name, port, sd, IPPROTO_UDP);
359 }
360
361
362 /* opens a tcp or udp connection to a remote host */
363 int
364-my_connect (char *host_name, int port, int *sd, char *proto)
365-{
366- struct sockaddr_in servaddr;
367- struct hostent *hp;
368- struct protoent *ptrp;
369- int result;
370-
371- bzero ((char *) &servaddr, sizeof (servaddr));
372- servaddr.sin_family = AF_INET;
373- servaddr.sin_port = htons (port);
374-
375- /* try to bypass using a DNS lookup if this is just an IP address */
376- if (!my_inet_aton (host_name, &servaddr.sin_addr)) {
377-
378- /* else do a DNS lookup */
379- hp = gethostbyname ((const char *) host_name);
380- if (hp == NULL) {
381- printf ("Invalid host name '%s'\n", host_name);
382- return STATE_UNKNOWN;
383- }
384-
385- memcpy (&servaddr.sin_addr, hp->h_addr, hp->h_length);
386- }
387-
388- /* map transport protocol name to protocol number */
389- if ((ptrp = getprotobyname (proto)) == NULL) {
390- printf ("Cannot map \"%s\" to protocol number\n", proto);
391- return STATE_UNKNOWN;
392- }
393-
394- /* create a socket */
395- *sd =
396- socket (PF_INET, (!strcmp (proto, "udp")) ? SOCK_DGRAM : SOCK_STREAM,
397- ptrp->p_proto);
398- if (*sd < 0) {
399- printf ("Socket creation failed\n");
400- return STATE_UNKNOWN;
401- }
402-
403- /* open a connection */
404- result = connect (*sd, (struct sockaddr *) &servaddr, sizeof (servaddr));
405- if (result < 0) {
406- switch (errno) {
407- case ECONNREFUSED:
408- printf ("Connection refused by host\n");
409- break;
410- case ETIMEDOUT:
411- printf ("Timeout while attempting connection\n");
412- break;
413- case ENETUNREACH:
414- printf ("Network is unreachable\n");
415- break;
416- default:
417- printf ("Connection refused or timed out\n");
418- }
419-
420- return STATE_CRITICAL;
421- }
422-
423- return STATE_OK;
424-}
425-
426-
427-
428-/* This code was taken from Fyodor's nmap utility, which was originally
429- taken from the GLIBC 2.0.6 libraries because Solaris doesn't contain
430- the inet_aton() funtion. */
431-int
432-my_inet_aton (register const char *cp, struct in_addr *addr)
433+my_connect (char *host_name, int port, int *sd, int proto)
434 {
435- register unsigned int val; /* changed from u_long --david */
436- register int base, n;
437- register char c;
438- u_int parts[4];
439- register u_int *pp = parts;
440-
441- c = *cp;
442-
443- for (;;) {
444-
445- /*
446- * Collect number up to ``.''.
447- * Values are specified as for C:
448- * 0x=hex, 0=octal, isdigit=decimal.
449- */
450- if (!isdigit ((int) c))
451- return (0);
452- val = 0;
453- base = 10;
454-
455- if (c == '0') {
456- c = *++cp;
457- if (c == 'x' || c == 'X')
458- base = 16, c = *++cp;
459- else
460- base = 8;
461- }
462-
463- for (;;) {
464- if (isascii ((int) c) && isdigit ((int) c)) {
465- val = (val * base) + (c - '0');
466- c = *++cp;
467- }
468- else if (base == 16 && isascii ((int) c) && isxdigit ((int) c)) {
469- val = (val << 4) | (c + 10 - (islower ((int) c) ? 'a' : 'A'));
470- c = *++cp;
471- }
472- else
473- break;
474- }
475-
476- if (c == '.') {
477-
478- /*
479- * Internet format:
480- * a.b.c.d
481- * a.b.c (with c treated as 16 bits)
482- * a.b (with b treated as 24 bits)
483- */
484- if (pp >= parts + 3)
485- return (0);
486- *pp++ = val;
487- c = *++cp;
488- }
489- else
490- break;
491- }
492-
493- /* Check for trailing characters */
494- if (c != '\0' && (!isascii ((int) c) || !isspace ((int) c)))
495- return (0);
496-
497- /* Concoct the address according to the number of parts specified */
498- n = pp - parts + 1;
499- switch (n) {
500-
501- case 0:
502- return (0); /* initial nondigit */
503-
504- case 1: /* a -- 32 bits */
505- break;
506-
507- case 2: /* a.b -- 8.24 bits */
508- if (val > 0xffffff)
509- return (0);
510- val |= parts[0] << 24;
511- break;
512-
513- case 3: /* a.b.c -- 8.8.16 bits */
514- if (val > 0xffff)
515- return (0);
516- val |= (parts[0] << 24) | (parts[1] << 16);
517- break;
518-
519- case 4: /* a.b.c.d -- 8.8.8.8 bits */
520- if (val > 0xff)
521- return (0);
522- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
523- break;
524- }
525-
526- if (addr)
527- addr->s_addr = htonl (val);
528-
529- return (1);
530+ struct addrinfo hints;
531+ struct addrinfo *res;
532+ struct protoent *ptrp;
533+ char port_str[6];
534+ int result;
535+
536+ memset (&hints, 0, sizeof (hints));
537+ hints.ai_family = PF_UNSPEC;
538+ hints.ai_protocol = proto;
539+
540+ snprintf(port_str, sizeof(port_str), "%d", port);
541+ /* nice clean AF-independent code doesn't matter if passed hostname or IP address */
542+ result = getaddrinfo (host_name, port_str, &hints, &res);
543+
544+ if (result != 0)
545+ {
546+ printf ("%s\n", gai_strerror (result));
547+ return STATE_UNKNOWN;
548+ }
549+ else
550+ {
551+ while (res)
552+ {
553+ /* attempt to create a socket */
554+ *sd = socket (res->ai_family, (proto == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM, res->ai_protocol);
555+
556+ if (*sd < 0) {
557+ printf ("Socket creation failed\n");
558+ freeaddrinfo (res);
559+ return STATE_UNKNOWN;
560+ }
561+
562+ /* attempt to open a connection */
563+ result = connect (*sd, res->ai_addr, res->ai_addrlen);
564+
565+ if (result == 0)
566+ break;
567+
568+ close(*sd);
569+ res = res->ai_next;
570+ }
571+ freeaddrinfo (res);
572+ }
573+
574+ if (result == 0)
575+ return STATE_OK;
576+ else
577+ {
578+ printf ("%s\n", strerror(errno));
579+ return STATE_CRITICAL;
580+ }
581 }
582Index: netutils.h.in
583===================================================================
584RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/netutils.h.in,v
585retrieving revision 1.1.1.1
586diff -u -r1.1.1.1 netutils.h.in
587--- netutils.h.in 28 Feb 2002 06:42:59 -0000 1.1.1.1
588+++ netutils.h.in 11 Dec 2002 02:39:50 -0000
589@@ -42,19 +42,17 @@
590 void socket_timeout_alarm_handler (int);
591
592 int process_tcp_request2 (char *address, int port, char *sbuffer,
593- char *rbuffer, int rsize);
594+ char *rbuffer, int rsize);
595 int process_tcp_request (char *address, int port, char *sbuffer,
596- char *rbuffer, int rsize);
597+ char *rbuffer, int rsize);
598 int process_udp_request (char *address, int port, char *sbuffer,
599- char *rbuffer, int rsize);
600-int process_request (char *address, int port, char *proto, char *sbuffer,
601- char *rbuffer, int rsize);
602+ char *rbuffer, int rsize);
603+int process_request (char *address, int port, int proto, char *sbuffer,
604+ char *rbuffer, int rsize);
605
606 int my_tcp_connect (char *address, int port, int *sd);
607 int my_udp_connect (char *address, int port, int *sd);
608-int my_connect (char *address, int port, int *sd, char *proto);
609-
610-int my_inet_aton (register const char *cp, struct in_addr *addr);
611+int my_connect (char *address, int port, int *sd, int proto);
612
613 #ifndef DEFAULT_SOCKET_TIMEOUT
614 #include "config.h"
615Index: utils.c
616===================================================================
617RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/utils.c,v
618retrieving revision 1.13
619diff -u -r1.13 utils.c
620--- utils.c 18 Nov 2002 07:22:28 -0000 1.13
621+++ utils.c 11 Dec 2002 02:39:50 -0000
622@@ -16,6 +16,9 @@
623 #include "version.h"
624 #include <stdarg.h>
625 #include <limits.h>
626+#include <sys/socket.h>
627+#include <arpa/inet.h>
628+#include <netdb.h>
629
630 extern int timeout_interval;
631
632@@ -27,7 +30,9 @@
633 RETSIGTYPE timeout_alarm_handler (int);
634
635 int is_host (char *);
636-int is_dotted_quad (char *);
637+int resolve_host_or_addr (char *, int);
638+int is_ipv4_addr (char *);
639+int is_ipv6_addr (char *);
640 int is_hostname (char *);
641
642 int is_integer (char *);
643@@ -154,53 +159,49 @@
644 int
645 is_host (char *address)
646 {
647- if (is_dotted_quad (address) || is_hostname (address))
648+ if (is_ipv4_addr (address) || is_ipv6_addr (address) ||
649+ is_hostname (address))
650 return (TRUE);
651+
652 return (FALSE);
653 }
654
655 int
656-is_dotted_quad (char *address)
657+resolve_host_or_addr (char *address, int family)
658 {
659- int o1, o2, o3, o4;
660- char c[1];
661+ struct addrinfo hints;
662+ struct addrinfo *res;
663+ int retval;
664
665- if (sscanf (address, "%d.%d.%d.%d%c", &o1, &o2, &o3, &o4, c) != 4)
666- return FALSE;
667- else if (o1 > 255 || o2 > 255 || o3 > 255 || o4 > 255)
668- return FALSE;
669- else if (o1 < 0 || o2 < 0 || o3 < 0 || o4 < 0)
670+ memset (&hints, 0, sizeof (hints));
671+ hints.ai_family = family;
672+ retval = getaddrinfo (address, NULL, &hints, &res);
673+
674+ if (retval != 0)
675 return FALSE;
676 else
677+ {
678+ freeaddrinfo (res);
679 return TRUE;
680+ }
681 }
682
683-/* from RFC-1035
684- *
685- * The labels must follow the rules for ARPANET host names. They must
686- * start with a letter, end with a letter or digit, and have as interior
687- * characters only letters, digits, and hyphen. There are also some
688- * restrictions on the length. Labels must be 63 characters or less. */
689+int
690+is_ipv4_addr (char *address)
691+{
692+ return resolve_host_or_addr (address, AF_INET);
693+}
694+
695+int
696+is_ipv6_addr (char *address)
697+{
698+ return resolve_host_or_addr (address, AF_INET6);
699+}
700
701 int
702 is_hostname (char *s1)
703 {
704- if (strlen (s1) > 63)
705- return FALSE;
706- if (strcspn
707- (s1,
708- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789-.") !=
709- 0) return FALSE;
710- if (strspn (s1, "0123456789-.") == 1)
711- return FALSE;
712- while ((s1 = index (s1, '.'))) {
713- s1++;
714- if (strspn (s1, "0123456789-.") == 1) {
715- printf ("%s\n", s1);
716- return FALSE;
717- }
718- }
719- return TRUE;
720+ return resolve_host_or_addr (s1, AF_UNSPEC);
721 }
722
723 int
724Index: utils.h.in
725===================================================================
726RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/utils.h.in,v
727retrieving revision 1.7
728diff -u -r1.7 utils.h.in
729--- utils.h.in 9 Nov 2002 03:39:35 -0000 1.7
730+++ utils.h.in 11 Dec 2002 02:39:50 -0000
731@@ -28,7 +28,8 @@
732 /* Test input types */
733
734 int is_host (char *);
735-int is_dotted_quad (char *);
736+int is_ipv4_addr (char *);
737+int is_ipv6_addr (char *);
738 int is_hostname (char *);
739
740 int is_integer (char *);