diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/check_dig.c | 97 | ||||
-rw-r--r-- | plugins/check_tcp.c | 132 | ||||
-rw-r--r-- | plugins/netutils.c | 80 |
3 files changed, 158 insertions, 151 deletions
diff --git a/plugins/check_dig.c b/plugins/check_dig.c index 8eb2b9b3..f80a9dc2 100644 --- a/plugins/check_dig.c +++ b/plugins/check_dig.c | |||
@@ -1,37 +1,49 @@ | |||
1 | /****************************************************************************** | 1 | /***************************************************************************** |
2 | * | 2 | * |
3 | * Program: SNMP plugin for Nagios | 3 | * This program is free software; you can redistribute it and/or modify |
4 | * License: GPL | 4 | * it under the terms of the GNU General Public License as published by |
5 | * | 5 | * the Free Software Foundation; either version 2 of the License, or |
6 | * License Information: | 6 | * (at your option) any later version. |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is distributed in the hope that it will be useful, |
9 | * it under the terms of the GNU General Public License as published by | 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | * the Free Software Foundation; either version 2 of the License, or | 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 | * (at your option) any later version. | 11 | * GNU General Public License for more details. |
12 | * | 12 | * |
13 | * This program is distributed in the hope that it will be useful, | 13 | * You should have received a copy of the GNU General Public License |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 | * along with this program; if not, write to the Free Software |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 15 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
16 | * GNU General Public License for more details. | 16 | * |
17 | * | 17 | *****************************************************************************/ |
18 | * You should have received a copy of the GNU General Public License | 18 | |
19 | * along with this program; if not, write to the Free Software | 19 | const char *progname = "check_dig"; |
20 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 20 | const char *revision = "$Revision$"; |
21 | *****************************************************************************/ | 21 | const char *copyright = "2002-2003"; |
22 | const char *authors = "Nagios Plugin Development Team"; | ||
23 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; | ||
24 | const char *summary = "Test the DNS service on the specified host using dig\n"; | ||
25 | |||
26 | const char *option_summary = "-H host -l lookup [-t timeout] [-v]"; | ||
27 | |||
28 | const char *options = "\ | ||
29 | -H, --hostname=STRING or IPADDRESS\n\ | ||
30 | Check server on the indicated host\n\ | ||
31 | -l, --lookup=STRING\n\ | ||
32 | machine name to lookup\n\ | ||
33 | -t, --timeout=INTEGER\n\ | ||
34 | Seconds before connection attempt times out (default: %d)\n\ | ||
35 | -v, --verbose\n\ | ||
36 | Print extra information (command-line use only)\n\ | ||
37 | -h, --help\n\ | ||
38 | Print detailed help screen\n\ | ||
39 | -V, --version\n\ | ||
40 | Print version information\n\n"; | ||
22 | 41 | ||
23 | #include "config.h" | 42 | #include "config.h" |
24 | #include "common.h" | 43 | #include "common.h" |
25 | #include "utils.h" | 44 | #include "utils.h" |
26 | #include "popen.h" | 45 | #include "popen.h" |
27 | 46 | ||
28 | const char *progname = "check_dig"; | ||
29 | #define REVISION "$Revision$" | ||
30 | #define COPYRIGHT "2000-2002" | ||
31 | #define AUTHOR "Karl DeBisschop" | ||
32 | #define EMAIL "karl@debisschop.net" | ||
33 | #define SUMMARY "Test the DNS service on the specified host using dig\n" | ||
34 | |||
35 | int process_arguments (int, char **); | 47 | int process_arguments (int, char **); |
36 | int validate_arguments (void); | 48 | int validate_arguments (void); |
37 | void print_help (void); | 49 | void print_help (void); |
@@ -210,7 +222,7 @@ process_arguments (int argc, char **argv) | |||
210 | } | 222 | } |
211 | } | 223 | } |
212 | else { | 224 | else { |
213 | asprintf (&dns_server, "127.0.0.1"); | 225 | dns_server = strdup ("127.0.0.1"); |
214 | } | 226 | } |
215 | } | 227 | } |
216 | 228 | ||
@@ -234,25 +246,13 @@ validate_arguments (void) | |||
234 | void | 246 | void |
235 | print_help (void) | 247 | print_help (void) |
236 | { | 248 | { |
237 | print_revision (progname, "$Revision$"); | 249 | print_revision (progname, revision); |
238 | printf | 250 | printf |
239 | ("Copyright (c) %s %s <%s>\n\n%s\n", | 251 | ("Copyright (c) %s %s <%s>\n\n%s\n", |
240 | COPYRIGHT, AUTHOR, EMAIL, SUMMARY); | 252 | copyright, authors, email, summary); |
241 | print_usage (); | 253 | print_usage (); |
242 | printf | 254 | printf ("\nOptions:\n"); |
243 | ("\nOptions:\n" | 255 | printf (options, DEFAULT_SOCKET_TIMEOUT); |
244 | " -H, --hostname=STRING or IPADDRESS\n" | ||
245 | " Check server on the indicated host\n" | ||
246 | " -l, --lookup=STRING\n" | ||
247 | " machine name to lookup\n" | ||
248 | " -t, --timeout=INTEGER\n" | ||
249 | " Seconds before connection attempt times out (default: %d)\n" | ||
250 | " -v, --verbose\n" | ||
251 | " Print extra information (command-line use only)\n" | ||
252 | " -h, --help\n" | ||
253 | " Print detailed help screen\n" | ||
254 | " -V, --version\n" | ||
255 | " Print version information\n\n", DEFAULT_SOCKET_TIMEOUT); | ||
256 | support (); | 256 | support (); |
257 | } | 257 | } |
258 | 258 | ||
@@ -263,8 +263,7 @@ print_help (void) | |||
263 | void | 263 | void |
264 | print_usage (void) | 264 | print_usage (void) |
265 | { | 265 | { |
266 | printf | 266 | printf ("Usage: %s %s\n", progname, option_summary); |
267 | ("Usage: %s -H host -l lookup [-t timeout] [-v]\n" | 267 | printf (" %s (-h|--help)\n", progname); |
268 | " %s --help\n" | 268 | printf (" %s (-V|--version)\n", progname); |
269 | " %s --version\n", progname, progname, progname); | ||
270 | } | 269 | } |
diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c index 5bec2915..62efc8c7 100644 --- a/plugins/check_tcp.c +++ b/plugins/check_tcp.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /****************************************************************************** | 1 | /***************************************************************************** |
2 | * | 2 | * |
3 | * This program is free software; you can redistribute it and/or modify | 3 | * This program is free software; you can redistribute it and/or modify |
4 | * it under the terms of the GNU General Public License as published by | 4 | * it under the terms of the GNU General Public License as published by |
@@ -51,7 +51,9 @@ const char *options = "\ | |||
51 | -r, --refuse=ok|warn|crit\n\ | 51 | -r, --refuse=ok|warn|crit\n\ |
52 | Accept tcp refusals with states ok, warn, crit (default: crit)\n\ | 52 | Accept tcp refusals with states ok, warn, crit (default: crit)\n\ |
53 | -v\n\ | 53 | -v\n\ |
54 | Show details for command-line debugging (do not use with nagios server)\n\ | 54 | Show details for command-line debugging (do not use with nagios server)\n"; |
55 | |||
56 | const char *standard_options = "\ | ||
55 | -h, --help\n\ | 57 | -h, --help\n\ |
56 | Print detailed help screen\n\ | 58 | Print detailed help screen\n\ |
57 | -V, --version\n\ | 59 | -V, --version\n\ |
@@ -63,21 +65,21 @@ const char *options = "\ | |||
63 | #include "utils.h" | 65 | #include "utils.h" |
64 | 66 | ||
65 | #ifdef HAVE_SSL_H | 67 | #ifdef HAVE_SSL_H |
66 | #include <rsa.h> | 68 | # include <rsa.h> |
67 | #include <crypto.h> | 69 | # include <crypto.h> |
68 | #include <x509.h> | 70 | # include <x509.h> |
69 | #include <pem.h> | 71 | # include <pem.h> |
70 | #include <ssl.h> | 72 | # include <ssl.h> |
71 | #include <err.h> | 73 | # include <err.h> |
72 | #endif | 74 | #else |
73 | 75 | # ifdef HAVE_OPENSSL_SSL_H | |
74 | #ifdef HAVE_OPENSSL_SSL_H | 76 | # include <openssl/rsa.h> |
75 | #include <openssl/rsa.h> | 77 | # include <openssl/crypto.h> |
76 | #include <openssl/crypto.h> | 78 | # include <openssl/x509.h> |
77 | #include <openssl/x509.h> | 79 | # include <openssl/pem.h> |
78 | #include <openssl/pem.h> | 80 | # include <openssl/ssl.h> |
79 | #include <openssl/ssl.h> | 81 | # include <openssl/err.h> |
80 | #include <openssl/err.h> | 82 | # endif |
81 | #endif | 83 | #endif |
82 | 84 | ||
83 | #ifdef HAVE_SSL | 85 | #ifdef HAVE_SSL |
@@ -134,8 +136,8 @@ main (int argc, char **argv) | |||
134 | struct timeval tv; | 136 | struct timeval tv; |
135 | 137 | ||
136 | if (strstr (argv[0], "check_udp")) { | 138 | if (strstr (argv[0], "check_udp")) { |
137 | asprintf (&progname, "check_udp"); | 139 | progname = strdup ("check_udp"); |
138 | asprintf (&SERVICE, "UDP"); | 140 | SERVICE = strdup ("UDP"); |
139 | SEND = NULL; | 141 | SEND = NULL; |
140 | EXPECT = NULL; | 142 | EXPECT = NULL; |
141 | QUIT = NULL; | 143 | QUIT = NULL; |
@@ -143,8 +145,8 @@ main (int argc, char **argv) | |||
143 | PORT = 0; | 145 | PORT = 0; |
144 | } | 146 | } |
145 | else if (strstr (argv[0], "check_tcp")) { | 147 | else if (strstr (argv[0], "check_tcp")) { |
146 | asprintf (&progname, "check_tcp"); | 148 | progname = strdup ("check_tcp"); |
147 | asprintf (&SERVICE, "TCP"); | 149 | SERVICE = strdup ("TCP"); |
148 | SEND = NULL; | 150 | SEND = NULL; |
149 | EXPECT = NULL; | 151 | EXPECT = NULL; |
150 | QUIT = NULL; | 152 | QUIT = NULL; |
@@ -152,66 +154,66 @@ main (int argc, char **argv) | |||
152 | PORT = 0; | 154 | PORT = 0; |
153 | } | 155 | } |
154 | else if (strstr (argv[0], "check_ftp")) { | 156 | else if (strstr (argv[0], "check_ftp")) { |
155 | asprintf (&progname, "check_ftp"); | 157 | progname = strdup ("check_ftp"); |
156 | asprintf (&SERVICE, "FTP"); | 158 | SERVICE = strdup ("FTP"); |
157 | SEND = NULL; | 159 | SEND = NULL; |
158 | asprintf (&EXPECT, "220"); | 160 | EXPECT = strdup ("220"); |
159 | asprintf (&QUIT, "QUIT\r\n"); | 161 | QUIT = strdup ("QUIT\r\n"); |
160 | PROTOCOL = TCP_PROTOCOL; | 162 | PROTOCOL = TCP_PROTOCOL; |
161 | PORT = 21; | 163 | PORT = 21; |
162 | } | 164 | } |
163 | else if (strstr (argv[0], "check_smtp")) { | 165 | else if (strstr (argv[0], "check_smtp")) { |
164 | asprintf (&progname, "check_smtp"); | 166 | progname = strdup ("check_smtp"); |
165 | asprintf (&SERVICE, "SMTP"); | 167 | SERVICE = strdup ("SMTP"); |
166 | SEND = NULL; | 168 | SEND = NULL; |
167 | asprintf (&EXPECT, "220"); | 169 | EXPECT = strdup ("220"); |
168 | asprintf (&QUIT, "QUIT\r\n"); | 170 | QUIT = strdup ("QUIT\r\n"); |
169 | PROTOCOL = TCP_PROTOCOL; | 171 | PROTOCOL = TCP_PROTOCOL; |
170 | PORT = 25; | 172 | PORT = 25; |
171 | } | 173 | } |
172 | else if (strstr (argv[0], "check_pop")) { | 174 | else if (strstr (argv[0], "check_pop")) { |
173 | asprintf (&progname, "check_pop"); | 175 | progname = strdup ("check_pop"); |
174 | asprintf (&SERVICE, "POP"); | 176 | SERVICE = strdup ("POP"); |
175 | SEND = NULL; | 177 | SEND = NULL; |
176 | asprintf (&EXPECT, "+OK"); | 178 | EXPECT = strdup ("+OK"); |
177 | asprintf (&QUIT, "QUIT\r\n"); | 179 | QUIT = strdup ("QUIT\r\n"); |
178 | PROTOCOL = TCP_PROTOCOL; | 180 | PROTOCOL = TCP_PROTOCOL; |
179 | PORT = 110; | 181 | PORT = 110; |
180 | } | 182 | } |
181 | else if (strstr (argv[0], "check_imap")) { | 183 | else if (strstr (argv[0], "check_imap")) { |
182 | asprintf (&progname, "check_imap"); | 184 | progname = strdup ("check_imap"); |
183 | asprintf (&SERVICE, "IMAP"); | 185 | SERVICE = strdup ("IMAP"); |
184 | SEND = NULL; | 186 | SEND = NULL; |
185 | asprintf (&EXPECT, "* OK"); | 187 | EXPECT = strdup ("* OK"); |
186 | asprintf (&QUIT, "a1 LOGOUT\r\n"); | 188 | QUIT = strdup ("a1 LOGOUT\r\n"); |
187 | PROTOCOL = TCP_PROTOCOL; | 189 | PROTOCOL = TCP_PROTOCOL; |
188 | PORT = 143; | 190 | PORT = 143; |
189 | } | 191 | } |
190 | #ifdef HAVE_SSL | 192 | #ifdef HAVE_SSL |
191 | else if (strstr(argv[0],"check_simap")) { | 193 | else if (strstr(argv[0],"check_simap")) { |
192 | asprintf (&progname, "check_simap"); | 194 | progname = strdup ("check_simap"); |
193 | asprintf (&SERVICE, "SIMAP"); | 195 | SERVICE = strdup ("SIMAP"); |
194 | SEND=NULL; | 196 | SEND=NULL; |
195 | asprintf (&EXPECT, "* OK"); | 197 | EXPECT = strdup ("* OK"); |
196 | asprintf (&QUIT, "a1 LOGOUT\r\n"); | 198 | QUIT = strdup ("a1 LOGOUT\r\n"); |
197 | PROTOCOL=TCP_PROTOCOL; | 199 | PROTOCOL=TCP_PROTOCOL; |
198 | use_ssl=TRUE; | 200 | use_ssl=TRUE; |
199 | PORT=993; | 201 | PORT=993; |
200 | } | 202 | } |
201 | else if (strstr(argv[0],"check_spop")) { | 203 | else if (strstr(argv[0],"check_spop")) { |
202 | asprintf (&progname, "check_spop"); | 204 | progname = strdup ("check_spop"); |
203 | asprintf (&SERVICE, "SPOP"); | 205 | SERVICE = strdup ("SPOP"); |
204 | SEND=NULL; | 206 | SEND=NULL; |
205 | asprintf (&EXPECT, "+OK"); | 207 | EXPECT = strdup ("+OK"); |
206 | asprintf (&QUIT, "QUIT\r\n"); | 208 | QUIT = strdup ("QUIT\r\n"); |
207 | PROTOCOL=TCP_PROTOCOL; | 209 | PROTOCOL=TCP_PROTOCOL; |
208 | use_ssl=TRUE; | 210 | use_ssl=TRUE; |
209 | PORT=995; | 211 | PORT=995; |
210 | } | 212 | } |
211 | #endif | 213 | #endif |
212 | else if (strstr (argv[0], "check_nntp")) { | 214 | else if (strstr (argv[0], "check_nntp")) { |
213 | asprintf (&progname, "check_nntp"); | 215 | progname = strdup ("check_nntp"); |
214 | asprintf (&SERVICE, "NNTP"); | 216 | SERVICE = strdup ("NNTP"); |
215 | SEND = NULL; | 217 | SEND = NULL; |
216 | EXPECT = NULL; | 218 | EXPECT = NULL; |
217 | server_expect = realloc (server_expect, ++server_expect_count); | 219 | server_expect = realloc (server_expect, ++server_expect_count); |
@@ -226,7 +228,7 @@ main (int argc, char **argv) | |||
226 | usage ("ERROR: Generic check_tcp called with unknown service\n"); | 228 | usage ("ERROR: Generic check_tcp called with unknown service\n"); |
227 | } | 229 | } |
228 | 230 | ||
229 | asprintf (&server_address, "127.0.0.1"); | 231 | server_address = strdup ("127.0.0.1"); |
230 | server_port = PORT; | 232 | server_port = PORT; |
231 | server_send = SEND; | 233 | server_send = SEND; |
232 | server_quit = QUIT; | 234 | server_quit = QUIT; |
@@ -312,17 +314,21 @@ main (int argc, char **argv) | |||
312 | } | 314 | } |
313 | } | 315 | } |
314 | 316 | ||
315 | if (server_quit != NULL) | 317 | if (server_quit != NULL) { |
316 | #ifdef HAVE_SSL | 318 | #ifdef HAVE_SSL |
317 | if (use_ssl) { | 319 | if (use_ssl) { |
318 | SSL_write (ssl, QUIT, strlen (QUIT)); | 320 | SSL_write (ssl, server_quit, strlen (server_quit)); |
319 | SSL_shutdown (ssl); | 321 | SSL_shutdown (ssl); |
320 | SSL_free (ssl); | 322 | SSL_free (ssl); |
321 | SSL_CTX_free (ctx); | 323 | SSL_CTX_free (ctx); |
322 | } | 324 | } |
323 | else | 325 | else { |
326 | #endif | ||
327 | send (sd, server_quit, strlen (server_quit), 0); | ||
328 | #ifdef HAVE_SSL | ||
329 | } | ||
324 | #endif | 330 | #endif |
325 | send (sd, server_quit, strlen (server_quit), 0); | 331 | } |
326 | 332 | ||
327 | /* close the connection */ | 333 | /* close the connection */ |
328 | if (sd) | 334 | if (sd) |
@@ -511,23 +517,23 @@ process_arguments (int argc, char **argv) | |||
511 | void | 517 | void |
512 | print_help (void) | 518 | print_help (void) |
513 | { | 519 | { |
514 | print_revision (progname, revision); | 520 | print_revision (progname, revision); |
515 | printf ("Copyright (c) %s %s\n\t<%s>\n\n", | 521 | printf ("Copyright (c) %s %s\n\t<%s>\n\n", |
516 | copyright, authors, email); | 522 | copyright, authors, email); |
517 | printf (summary, SERVICE); | 523 | printf (summary, SERVICE); |
518 | print_usage (); | 524 | print_usage (); |
519 | printf ("\nOptions:\n"); | 525 | printf ("\nOptions:\n"); |
520 | printf (options, DEFAULT_SOCKET_TIMEOUT); | 526 | printf (options, DEFAULT_SOCKET_TIMEOUT); |
521 | support (); | 527 | printf (standard_options); |
528 | support (); | ||
522 | } | 529 | } |
523 | 530 | ||
524 | void | 531 | void |
525 | print_usage (void) | 532 | print_usage (void) |
526 | { | 533 | { |
527 | printf | 534 | printf ("Usage: %s %s\n", progname, option_summary); |
528 | ("Usage: %s %s\n" | 535 | printf (" %s (-h|--help)\n", progname); |
529 | " %s (-h|--help)\n" | 536 | printf (" %s (-V|--version)\n", progname); |
530 | " %s (-V|--version)\n", progname, option_summary, progname, progname); | ||
531 | } | 537 | } |
532 | 538 | ||
533 | #ifdef HAVE_SSL | 539 | #ifdef HAVE_SSL |
diff --git a/plugins/netutils.c b/plugins/netutils.c index ce8b428b..926547e4 100644 --- a/plugins/netutils.c +++ b/plugins/netutils.c | |||
@@ -40,8 +40,10 @@ int was_refused = FALSE; | |||
40 | void | 40 | void |
41 | socket_timeout_alarm_handler (int sig) | 41 | socket_timeout_alarm_handler (int sig) |
42 | { | 42 | { |
43 | 43 | if (sig == SIGALRM) | |
44 | printf ("CRITICAL - Socket timeout after %d seconds\n", socket_timeout); | 44 | printf ("CRITICAL - Socket timeout after %d seconds\n", socket_timeout); |
45 | else | ||
46 | printf ("CRITICAL - Abnormal timeout after %d seconds\n", socket_timeout); | ||
45 | 47 | ||
46 | exit (STATE_CRITICAL); | 48 | exit (STATE_CRITICAL); |
47 | } | 49 | } |
@@ -99,7 +101,7 @@ process_tcp_request2 (char *server_address, int server_port, | |||
99 | return STATE_CRITICAL; | 101 | return STATE_CRITICAL; |
100 | 102 | ||
101 | send_result = send (sd, send_buffer, strlen (send_buffer), 0); | 103 | send_result = send (sd, send_buffer, strlen (send_buffer), 0); |
102 | if (send_result != strlen (send_buffer)) { | 104 | if (send_result<0 || (size_t)send_result!=strlen(send_buffer)) { |
103 | printf ("send() failed\n"); | 105 | printf ("send() failed\n"); |
104 | result = STATE_WARNING; | 106 | result = STATE_WARNING; |
105 | } | 107 | } |
@@ -177,7 +179,7 @@ process_request (char *server_address, int server_port, int proto, | |||
177 | return STATE_CRITICAL; | 179 | return STATE_CRITICAL; |
178 | 180 | ||
179 | send_result = send (sd, send_buffer, strlen (send_buffer), 0); | 181 | send_result = send (sd, send_buffer, strlen (send_buffer), 0); |
180 | if (send_result != strlen (send_buffer)) { | 182 | if (send_result<0 || (size_t)send_result!=strlen(send_buffer)) { |
181 | printf ("send() failed\n"); | 183 | printf ("send() failed\n"); |
182 | result = STATE_WARNING; | 184 | result = STATE_WARNING; |
183 | } | 185 | } |
@@ -248,7 +250,6 @@ my_connect (char *host_name, int port, int *sd, int proto) | |||
248 | { | 250 | { |
249 | struct addrinfo hints; | 251 | struct addrinfo hints; |
250 | struct addrinfo *res; | 252 | struct addrinfo *res; |
251 | struct addrinfo *ptrp; | ||
252 | char port_str[6]; | 253 | char port_str[6]; |
253 | int result; | 254 | int result; |
254 | 255 | ||
@@ -267,7 +268,7 @@ my_connect (char *host_name, int port, int *sd, int proto) | |||
267 | while (res) { | 268 | while (res) { |
268 | /* attempt to create a socket */ | 269 | /* attempt to create a socket */ |
269 | *sd = socket (res->ai_family, (proto == IPPROTO_UDP) ? | 270 | *sd = socket (res->ai_family, (proto == IPPROTO_UDP) ? |
270 | SOCK_DGRAM : SOCK_STREAM, res->ai_protocol); | 271 | SOCK_DGRAM : SOCK_STREAM, res->ai_protocol); |
271 | 272 | ||
272 | if (*sd < 0) { | 273 | if (*sd < 0) { |
273 | printf ("Socket creation failed\n"); | 274 | printf ("Socket creation failed\n"); |
@@ -285,13 +286,13 @@ my_connect (char *host_name, int port, int *sd, int proto) | |||
285 | 286 | ||
286 | if (result < 0) { | 287 | if (result < 0) { |
287 | switch (errno) { | 288 | switch (errno) { |
288 | case ECONNREFUSED: | 289 | case ECONNREFUSED: |
289 | switch (econn_refuse_state) { | 290 | switch (econn_refuse_state) { |
290 | case STATE_OK: | 291 | case STATE_OK: |
291 | case STATE_WARNING: | 292 | case STATE_WARNING: |
292 | was_refused = TRUE; | 293 | was_refused = TRUE; |
293 | } | 294 | } |
294 | break; | 295 | break; |
295 | } | 296 | } |
296 | } | 297 | } |
297 | 298 | ||
@@ -314,55 +315,56 @@ my_connect (char *host_name, int port, int *sd, int proto) | |||
314 | int | 315 | int |
315 | is_host (char *address) | 316 | is_host (char *address) |
316 | { | 317 | { |
317 | if (is_addr (address) || is_hostname (address)) | 318 | if (is_addr (address) || is_hostname (address)) |
318 | return (TRUE); | 319 | return (TRUE); |
319 | 320 | ||
320 | return (FALSE); | 321 | return (FALSE); |
321 | } | 322 | } |
322 | 323 | ||
323 | int | 324 | int |
324 | is_addr (char *address) | 325 | is_addr (char *address) |
325 | { | 326 | { |
327 | if (is_inet_addr (address)) | ||
328 | return (TRUE); | ||
329 | |||
326 | #ifdef USE_IPV6 | 330 | #ifdef USE_IPV6 |
327 | if (is_inet_addr (address) || is_inet6_addr (address)) | 331 | if (is_inet6_addr (address)) |
328 | #else | 332 | return (TRUE); |
329 | if (is_inet_addr (address)) | ||
330 | #endif | 333 | #endif |
331 | return (TRUE); | ||
332 | 334 | ||
333 | return (FALSE); | 335 | return (FALSE); |
334 | } | 336 | } |
335 | 337 | ||
336 | int | 338 | int |
337 | resolve_host_or_addr (char *address, int family) | 339 | resolve_host_or_addr (char *address, int family) |
338 | { | 340 | { |
339 | struct addrinfo hints; | 341 | struct addrinfo hints; |
340 | struct addrinfo *res; | 342 | struct addrinfo *res; |
341 | int retval; | 343 | int retval; |
342 | 344 | ||
343 | memset (&hints, 0, sizeof (hints)); | 345 | memset (&hints, 0, sizeof (hints)); |
344 | hints.ai_family = family; | 346 | hints.ai_family = family; |
345 | retval = getaddrinfo (address, NULL, &hints, &res); | 347 | retval = getaddrinfo (address, NULL, &hints, &res); |
346 | 348 | ||
347 | if (retval != 0) | 349 | if (retval != 0) |
348 | return FALSE; | 350 | return FALSE; |
349 | else { | 351 | else { |
350 | freeaddrinfo (res); | 352 | freeaddrinfo (res); |
351 | return TRUE; | 353 | return TRUE; |
352 | } | 354 | } |
353 | } | 355 | } |
354 | 356 | ||
355 | int | 357 | int |
356 | is_inet_addr (char *address) | 358 | is_inet_addr (char *address) |
357 | { | 359 | { |
358 | return resolve_host_or_addr (address, AF_INET); | 360 | return resolve_host_or_addr (address, AF_INET); |
359 | } | 361 | } |
360 | 362 | ||
361 | #ifdef USE_IPV6 | 363 | #ifdef USE_IPV6 |
362 | int | 364 | int |
363 | is_inet6_addr (char *address) | 365 | is_inet6_addr (char *address) |
364 | { | 366 | { |
365 | return resolve_host_or_addr (address, AF_INET6); | 367 | return resolve_host_or_addr (address, AF_INET6); |
366 | } | 368 | } |
367 | #endif | 369 | #endif |
368 | 370 | ||
@@ -370,9 +372,9 @@ int | |||
370 | is_hostname (char *s1) | 372 | is_hostname (char *s1) |
371 | { | 373 | { |
372 | #ifdef USE_IPV6 | 374 | #ifdef USE_IPV6 |
373 | return resolve_host_or_addr (s1, AF_UNSPEC); | 375 | return resolve_host_or_addr (s1, AF_UNSPEC); |
374 | #else | 376 | #else |
375 | return resolve_host_or_addr (s1, AF_INET); | 377 | return resolve_host_or_addr (s1, AF_INET); |
376 | #endif | 378 | #endif |
377 | } | 379 | } |
378 | 380 | ||