diff options
Diffstat (limited to 'plugins/check_radius.c')
-rw-r--r-- | plugins/check_radius.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/plugins/check_radius.c b/plugins/check_radius.c index b2943475..be1001b4 100644 --- a/plugins/check_radius.c +++ b/plugins/check_radius.c | |||
@@ -36,7 +36,9 @@ const char *email = "devel@monitoring-plugins.org"; | |||
36 | #include "utils.h" | 36 | #include "utils.h" |
37 | #include "netutils.h" | 37 | #include "netutils.h" |
38 | 38 | ||
39 | #if defined(HAVE_LIBFREERADIUS_CLIENT) | 39 | #if defined(HAVE_LIBRADCLI) |
40 | #include <radcli/radcli.h> | ||
41 | #elif defined(HAVE_LIBFREERADIUS_CLIENT) | ||
40 | #include <freeradius-client.h> | 42 | #include <freeradius-client.h> |
41 | #elif defined(HAVE_LIBRADIUSCLIENT_NG) | 43 | #elif defined(HAVE_LIBRADIUSCLIENT_NG) |
42 | #include <radiusclient-ng.h> | 44 | #include <radiusclient-ng.h> |
@@ -48,22 +50,24 @@ int process_arguments (int, char **); | |||
48 | void print_help (void); | 50 | void print_help (void); |
49 | void print_usage (void); | 51 | void print_usage (void); |
50 | 52 | ||
51 | #if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADIUSCLIENT_NG) | 53 | #if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADIUSCLIENT_NG) || defined(HAVE_LIBRADCLI) |
52 | #define my_rc_conf_str(a) rc_conf_str(rch,a) | 54 | #define my_rc_conf_str(a) rc_conf_str(rch,a) |
55 | #if defined(HAVE_LIBRADCLI) | ||
56 | #define my_rc_send_server(a,b) rc_send_server(rch,a,b,AUTH) | ||
57 | #else | ||
53 | #define my_rc_send_server(a,b) rc_send_server(rch,a,b) | 58 | #define my_rc_send_server(a,b) rc_send_server(rch,a,b) |
54 | #ifdef HAVE_LIBFREERADIUS_CLIENT | 59 | #endif |
60 | #if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADCLI) | ||
55 | #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(rch,a,b,c,d,(a)->secret,e,f) | 61 | #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(rch,a,b,c,d,(a)->secret,e,f) |
56 | #else | 62 | #else |
57 | #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(rch,a,b,c,d,e,f) | 63 | #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(rch,a,b,c,d,e,f) |
58 | #endif | 64 | #endif |
59 | #define my_rc_own_ipaddress() rc_own_ipaddress(rch) | ||
60 | #define my_rc_avpair_add(a,b,c,d) rc_avpair_add(rch,a,b,c,-1,d) | 65 | #define my_rc_avpair_add(a,b,c,d) rc_avpair_add(rch,a,b,c,-1,d) |
61 | #define my_rc_read_dictionary(a) rc_read_dictionary(rch, a) | 66 | #define my_rc_read_dictionary(a) rc_read_dictionary(rch, a) |
62 | #else | 67 | #else |
63 | #define my_rc_conf_str(a) rc_conf_str(a) | 68 | #define my_rc_conf_str(a) rc_conf_str(a) |
64 | #define my_rc_send_server(a,b) rc_send_server(a, b) | 69 | #define my_rc_send_server(a,b) rc_send_server(a, b) |
65 | #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(a,b,c,d,e,f) | 70 | #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(a,b,c,d,e,f) |
66 | #define my_rc_own_ipaddress() rc_own_ipaddress() | ||
67 | #define my_rc_avpair_add(a,b,c,d) rc_avpair_add(a, b, c, d) | 71 | #define my_rc_avpair_add(a,b,c,d) rc_avpair_add(a, b, c, d) |
68 | #define my_rc_read_dictionary(a) rc_read_dictionary(a) | 72 | #define my_rc_read_dictionary(a) rc_read_dictionary(a) |
69 | #endif | 73 | #endif |
@@ -76,7 +80,7 @@ void print_usage (void); | |||
76 | 80 | ||
77 | int my_rc_read_config(char *); | 81 | int my_rc_read_config(char *); |
78 | 82 | ||
79 | #if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADIUSCLIENT_NG) | 83 | #if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADIUSCLIENT_NG) || defined(HAVE_LIBRADCLI) |
80 | rc_handle *rch = NULL; | 84 | rc_handle *rch = NULL; |
81 | #endif | 85 | #endif |
82 | 86 | ||
@@ -90,7 +94,6 @@ char *config_file = NULL; | |||
90 | unsigned short port = PW_AUTH_UDP_PORT; | 94 | unsigned short port = PW_AUTH_UDP_PORT; |
91 | int retries = 1; | 95 | int retries = 1; |
92 | int verbose = FALSE; | 96 | int verbose = FALSE; |
93 | ENV *env = NULL; | ||
94 | 97 | ||
95 | /****************************************************************************** | 98 | /****************************************************************************** |
96 | 99 | ||
@@ -150,6 +153,8 @@ Please note that all tags must be lowercase to use the DocBook XML DTD. | |||
150 | int | 153 | int |
151 | main (int argc, char **argv) | 154 | main (int argc, char **argv) |
152 | { | 155 | { |
156 | struct sockaddr_storage ss; | ||
157 | char name[HOST_NAME_MAX]; | ||
153 | char msg[BUFFER_LEN]; | 158 | char msg[BUFFER_LEN]; |
154 | SEND_DATA data; | 159 | SEND_DATA data; |
155 | int result = STATE_UNKNOWN; | 160 | int result = STATE_UNKNOWN; |
@@ -185,15 +190,14 @@ main (int argc, char **argv) | |||
185 | die (STATE_UNKNOWN, _("Invalid NAS-Identifier\n")); | 190 | die (STATE_UNKNOWN, _("Invalid NAS-Identifier\n")); |
186 | } | 191 | } |
187 | 192 | ||
188 | if (nasipaddress != NULL) { | 193 | if (nasipaddress == NULL) { |
189 | if (rc_good_ipaddr (nasipaddress)) | 194 | if (gethostname (name, sizeof(name)) != 0) |
190 | die (STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); | 195 | die (STATE_UNKNOWN, _("gethostname() failed!\n")); |
191 | if ((client_id = rc_get_ipaddr(nasipaddress)) == 0) | 196 | nasipaddress = name; |
192 | die (STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); | ||
193 | } else { | ||
194 | if ((client_id = my_rc_own_ipaddress ()) == 0) | ||
195 | die (STATE_UNKNOWN, _("Can't find local IP for NAS-IP-Address\n")); | ||
196 | } | 197 | } |
198 | if (!dns_lookup (nasipaddress, &ss, AF_INET)) /* TODO: Support IPv6. */ | ||
199 | die (STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); | ||
200 | client_id = ntohl (((struct sockaddr_in *)&ss)->sin_addr.s_addr); | ||
197 | if (my_rc_avpair_add (&(data.send_pairs), PW_NAS_IP_ADDRESS, &client_id, 0) == NULL) | 201 | if (my_rc_avpair_add (&(data.send_pairs), PW_NAS_IP_ADDRESS, &client_id, 0) == NULL) |
198 | die (STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); | 202 | die (STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); |
199 | 203 | ||
@@ -259,10 +263,10 @@ process_arguments (int argc, char **argv) | |||
259 | usage5 (); | 263 | usage5 (); |
260 | case 'h': /* help */ | 264 | case 'h': /* help */ |
261 | print_help (); | 265 | print_help (); |
262 | exit (OK); | 266 | exit (STATE_UNKNOWN); |
263 | case 'V': /* version */ | 267 | case 'V': /* version */ |
264 | print_revision (progname, NP_VERSION); | 268 | print_revision (progname, NP_VERSION); |
265 | exit (OK); | 269 | exit (STATE_UNKNOWN); |
266 | case 'v': /* verbose mode */ | 270 | case 'v': /* verbose mode */ |
267 | verbose = TRUE; | 271 | verbose = TRUE; |
268 | break; | 272 | break; |
@@ -274,7 +278,7 @@ process_arguments (int argc, char **argv) | |||
274 | break; | 278 | break; |
275 | case 'P': /* port */ | 279 | case 'P': /* port */ |
276 | if (is_intnonneg (optarg)) | 280 | if (is_intnonneg (optarg)) |
277 | port = atoi (optarg); | 281 | port = (unsigned short)atoi (optarg); |
278 | else | 282 | else |
279 | usage4 (_("Port must be a positive integer")); | 283 | usage4 (_("Port must be a positive integer")); |
280 | break; | 284 | break; |
@@ -310,7 +314,7 @@ process_arguments (int argc, char **argv) | |||
310 | break; | 314 | break; |
311 | case 't': /* timeout */ | 315 | case 't': /* timeout */ |
312 | if (is_intpos (optarg)) | 316 | if (is_intpos (optarg)) |
313 | timeout_interval = atoi (optarg); | 317 | timeout_interval = (unsigned)atoi (optarg); |
314 | else | 318 | else |
315 | usage2 (_("Timeout interval must be a positive integer"), optarg); | 319 | usage2 (_("Timeout interval must be a positive integer"), optarg); |
316 | break; | 320 | break; |
@@ -356,7 +360,7 @@ print_help (void) | |||
356 | printf (" %s\n", "-u, --username=STRING"); | 360 | printf (" %s\n", "-u, --username=STRING"); |
357 | printf (" %s\n", _("The user to authenticate")); | 361 | printf (" %s\n", _("The user to authenticate")); |
358 | printf (" %s\n", "-p, --password=STRING"); | 362 | printf (" %s\n", "-p, --password=STRING"); |
359 | printf (" %s\n", _("Password for autentication (SECURITY RISK)")); | 363 | printf (" %s\n", _("Password for authentication (SECURITY RISK)")); |
360 | printf (" %s\n", "-n, --nas-id=STRING"); | 364 | printf (" %s\n", "-n, --nas-id=STRING"); |
361 | printf (" %s\n", _("NAS identifier")); | 365 | printf (" %s\n", _("NAS identifier")); |
362 | printf (" %s\n", "-N, --nas-ip-address=STRING"); | 366 | printf (" %s\n", "-N, --nas-ip-address=STRING"); |
@@ -399,7 +403,7 @@ print_usage (void) | |||
399 | 403 | ||
400 | int my_rc_read_config(char * a) | 404 | int my_rc_read_config(char * a) |
401 | { | 405 | { |
402 | #if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADIUSCLIENT_NG) | 406 | #if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADIUSCLIENT_NG) || defined(HAVE_LIBRADCLI) |
403 | rch = rc_read_config(a); | 407 | rch = rc_read_config(a); |
404 | return (rch == NULL) ? 1 : 0; | 408 | return (rch == NULL) ? 1 : 0; |
405 | #else | 409 | #else |