summaryrefslogtreecommitdiffstats
path: root/web/attachments/37325-nagiosplugins-utils-20021210.diff
diff options
context:
space:
mode:
Diffstat (limited to 'web/attachments/37325-nagiosplugins-utils-20021210.diff')
-rw-r--r--web/attachments/37325-nagiosplugins-utils-20021210.diff126
1 files changed, 126 insertions, 0 deletions
diff --git a/web/attachments/37325-nagiosplugins-utils-20021210.diff b/web/attachments/37325-nagiosplugins-utils-20021210.diff
new file mode 100644
index 0000000..3295f2e
--- /dev/null
+++ b/web/attachments/37325-nagiosplugins-utils-20021210.diff
@@ -0,0 +1,126 @@
1Index: utils.c
2===================================================================
3RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/utils.c,v
4retrieving revision 1.13
5diff -u -r1.13 utils.c
6--- utils.c 18 Nov 2002 07:22:28 -0000 1.13
7+++ utils.c 11 Dec 2002 02:39:17 -0000
8@@ -16,6 +16,9 @@
9 #include "version.h"
10 #include <stdarg.h>
11 #include <limits.h>
12+#include <sys/socket.h>
13+#include <arpa/inet.h>
14+#include <netdb.h>
15
16 extern int timeout_interval;
17
18@@ -27,7 +30,9 @@
19 RETSIGTYPE timeout_alarm_handler (int);
20
21 int is_host (char *);
22-int is_dotted_quad (char *);
23+int resolve_host_or_addr (char *, int);
24+int is_ipv4_addr (char *);
25+int is_ipv6_addr (char *);
26 int is_hostname (char *);
27
28 int is_integer (char *);
29@@ -154,53 +159,49 @@
30 int
31 is_host (char *address)
32 {
33- if (is_dotted_quad (address) || is_hostname (address))
34+ if (is_ipv4_addr (address) || is_ipv6_addr (address) ||
35+ is_hostname (address))
36 return (TRUE);
37+
38 return (FALSE);
39 }
40
41 int
42-is_dotted_quad (char *address)
43+resolve_host_or_addr (char *address, int family)
44 {
45- int o1, o2, o3, o4;
46- char c[1];
47+ struct addrinfo hints;
48+ struct addrinfo *res;
49+ int retval;
50
51- if (sscanf (address, "%d.%d.%d.%d%c", &o1, &o2, &o3, &o4, c) != 4)
52- return FALSE;
53- else if (o1 > 255 || o2 > 255 || o3 > 255 || o4 > 255)
54- return FALSE;
55- else if (o1 < 0 || o2 < 0 || o3 < 0 || o4 < 0)
56+ memset (&hints, 0, sizeof (hints));
57+ hints.ai_family = family;
58+ retval = getaddrinfo (address, NULL, &hints, &res);
59+
60+ if (retval != 0)
61 return FALSE;
62 else
63+ {
64+ freeaddrinfo (res);
65 return TRUE;
66+ }
67 }
68
69-/* from RFC-1035
70- *
71- * The labels must follow the rules for ARPANET host names. They must
72- * start with a letter, end with a letter or digit, and have as interior
73- * characters only letters, digits, and hyphen. There are also some
74- * restrictions on the length. Labels must be 63 characters or less. */
75+int
76+is_ipv4_addr (char *address)
77+{
78+ return resolve_host_or_addr (address, AF_INET);
79+}
80+
81+int
82+is_ipv6_addr (char *address)
83+{
84+ return resolve_host_or_addr (address, AF_INET6);
85+}
86
87 int
88 is_hostname (char *s1)
89 {
90- if (strlen (s1) > 63)
91- return FALSE;
92- if (strcspn
93- (s1,
94- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789-.") !=
95- 0) return FALSE;
96- if (strspn (s1, "0123456789-.") == 1)
97- return FALSE;
98- while ((s1 = index (s1, '.'))) {
99- s1++;
100- if (strspn (s1, "0123456789-.") == 1) {
101- printf ("%s\n", s1);
102- return FALSE;
103- }
104- }
105- return TRUE;
106+ return resolve_host_or_addr (s1, AF_UNSPEC);
107 }
108
109 int
110Index: utils.h.in
111===================================================================
112RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/utils.h.in,v
113retrieving revision 1.7
114diff -u -r1.7 utils.h.in
115--- utils.h.in 9 Nov 2002 03:39:35 -0000 1.7
116+++ utils.h.in 11 Dec 2002 02:39:17 -0000
117@@ -28,7 +28,8 @@
118 /* Test input types */
119
120 int is_host (char *);
121-int is_dotted_quad (char *);
122+int is_ipv4_addr (char *);
123+int is_ipv6_addr (char *);
124 int is_hostname (char *);
125
126 int is_integer (char *);