diff options
author | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-03-12 16:29:53 +0100 |
---|---|---|
committer | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-03-12 16:29:53 +0100 |
commit | 0728456d73d4b3c62a2f26f4c918de571b4fbc3d (patch) | |
tree | ecca2757c8be8046bb293ba3e07ef6363384d495 | |
parent | 6fcc97400a8e6926e6700a050e33cd767d6e67f3 (diff) | |
download | monitoring-plugins-0728456d73d4b3c62a2f26f4c918de571b4fbc3d.tar.gz |
check_radius: general refactoring
-rw-r--r-- | plugins/check_radius.c | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/plugins/check_radius.c b/plugins/check_radius.c index 646ffcbe..ab7c6519 100644 --- a/plugins/check_radius.c +++ b/plugins/check_radius.c | |||
@@ -35,6 +35,7 @@ const char *email = "devel@monitoring-plugins.org"; | |||
35 | #include "common.h" | 35 | #include "common.h" |
36 | #include "utils.h" | 36 | #include "utils.h" |
37 | #include "netutils.h" | 37 | #include "netutils.h" |
38 | #include "states.h" | ||
38 | 39 | ||
39 | #if defined(HAVE_LIBRADCLI) | 40 | #if defined(HAVE_LIBRADCLI) |
40 | # include <radcli/radcli.h> | 41 | # include <radcli/radcli.h> |
@@ -149,18 +150,6 @@ Please note that all tags must be lowercase to use the DocBook XML DTD. | |||
149 | ******************************************************************************/ | 150 | ******************************************************************************/ |
150 | 151 | ||
151 | int main(int argc, char **argv) { | 152 | int main(int argc, char **argv) { |
152 | struct sockaddr_storage ss; | ||
153 | char name[HOST_NAME_MAX]; | ||
154 | #ifdef RC_BUFFER_LEN | ||
155 | char msg[RC_BUFFER_LEN]; | ||
156 | #else | ||
157 | char msg[BUFFER_LEN]; | ||
158 | #endif | ||
159 | SEND_DATA data; | ||
160 | int result = STATE_UNKNOWN; | ||
161 | uint32_t client_id, service; | ||
162 | char *str; | ||
163 | |||
164 | setlocale(LC_ALL, ""); | 153 | setlocale(LC_ALL, ""); |
165 | bindtextdomain(PACKAGE, LOCALEDIR); | 154 | bindtextdomain(PACKAGE, LOCALEDIR); |
166 | textdomain(PACKAGE); | 155 | textdomain(PACKAGE); |
@@ -172,13 +161,14 @@ int main(int argc, char **argv) { | |||
172 | usage4(_("Could not parse arguments")); | 161 | usage4(_("Could not parse arguments")); |
173 | } | 162 | } |
174 | 163 | ||
175 | str = strdup("dictionary"); | 164 | char *str = strdup("dictionary"); |
176 | if ((config_file && my_rc_read_config(config_file)) || my_rc_read_dictionary(my_rc_conf_str(str))) { | 165 | if ((config_file && my_rc_read_config(config_file)) || my_rc_read_dictionary(my_rc_conf_str(str))) { |
177 | die(STATE_UNKNOWN, _("Config file error\n")); | 166 | die(STATE_UNKNOWN, _("Config file error\n")); |
178 | } | 167 | } |
179 | 168 | ||
180 | service = PW_AUTHENTICATE_ONLY; | 169 | uint32_t service = PW_AUTHENTICATE_ONLY; |
181 | 170 | ||
171 | SEND_DATA data; | ||
182 | memset(&data, 0, sizeof(data)); | 172 | memset(&data, 0, sizeof(data)); |
183 | if (!(my_rc_avpair_add(&data.send_pairs, PW_SERVICE_TYPE, &service, 0) && | 173 | if (!(my_rc_avpair_add(&data.send_pairs, PW_SERVICE_TYPE, &service, 0) && |
184 | my_rc_avpair_add(&data.send_pairs, PW_USER_NAME, username, 0) && | 174 | my_rc_avpair_add(&data.send_pairs, PW_USER_NAME, username, 0) && |
@@ -192,23 +182,33 @@ int main(int argc, char **argv) { | |||
192 | } | 182 | } |
193 | } | 183 | } |
194 | 184 | ||
185 | char name[HOST_NAME_MAX]; | ||
195 | if (nasipaddress == NULL) { | 186 | if (nasipaddress == NULL) { |
196 | if (gethostname(name, sizeof(name)) != 0) { | 187 | if (gethostname(name, sizeof(name)) != 0) { |
197 | die(STATE_UNKNOWN, _("gethostname() failed!\n")); | 188 | die(STATE_UNKNOWN, _("gethostname() failed!\n")); |
198 | } | 189 | } |
199 | nasipaddress = name; | 190 | nasipaddress = name; |
200 | } | 191 | } |
192 | |||
193 | struct sockaddr_storage ss; | ||
201 | if (!dns_lookup(nasipaddress, &ss, AF_INET)) { /* TODO: Support IPv6. */ | 194 | if (!dns_lookup(nasipaddress, &ss, AF_INET)) { /* TODO: Support IPv6. */ |
202 | die(STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); | 195 | die(STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); |
203 | } | 196 | } |
204 | client_id = ntohl(((struct sockaddr_in *)&ss)->sin_addr.s_addr); | 197 | |
198 | uint32_t client_id = ntohl(((struct sockaddr_in *)&ss)->sin_addr.s_addr); | ||
205 | if (my_rc_avpair_add(&(data.send_pairs), PW_NAS_IP_ADDRESS, &client_id, 0) == NULL) { | 199 | if (my_rc_avpair_add(&(data.send_pairs), PW_NAS_IP_ADDRESS, &client_id, 0) == NULL) { |
206 | die(STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); | 200 | die(STATE_UNKNOWN, _("Invalid NAS-IP-Address\n")); |
207 | } | 201 | } |
208 | 202 | ||
209 | my_rc_buildreq(&data, PW_ACCESS_REQUEST, server, port, (int)timeout_interval, retries); | 203 | my_rc_buildreq(&data, PW_ACCESS_REQUEST, server, port, (int)timeout_interval, retries); |
210 | 204 | ||
211 | result = my_rc_send_server(&data, msg); | 205 | #ifdef RC_BUFFER_LEN |
206 | char msg[RC_BUFFER_LEN]; | ||
207 | #else | ||
208 | char msg[BUFFER_LEN]; | ||
209 | #endif | ||
210 | |||
211 | mp_state_enum result = my_rc_send_server(&data, msg); | ||
212 | rc_avpair_free(data.send_pairs); | 212 | rc_avpair_free(data.send_pairs); |
213 | if (data.receive_pairs) { | 213 | if (data.receive_pairs) { |
214 | rc_avpair_free(data.receive_pairs); | 214 | rc_avpair_free(data.receive_pairs); |
@@ -238,9 +238,6 @@ int main(int argc, char **argv) { | |||
238 | 238 | ||
239 | /* process command-line arguments */ | 239 | /* process command-line arguments */ |
240 | int process_arguments(int argc, char **argv) { | 240 | int process_arguments(int argc, char **argv) { |
241 | int c; | ||
242 | |||
243 | int option = 0; | ||
244 | static struct option longopts[] = {{"hostname", required_argument, 0, 'H'}, {"port", required_argument, 0, 'P'}, | 241 | static struct option longopts[] = {{"hostname", required_argument, 0, 'H'}, {"port", required_argument, 0, 'P'}, |
245 | {"username", required_argument, 0, 'u'}, {"password", required_argument, 0, 'p'}, | 242 | {"username", required_argument, 0, 'u'}, {"password", required_argument, 0, 'p'}, |
246 | {"nas-id", required_argument, 0, 'n'}, {"nas-ip-address", required_argument, 0, 'N'}, | 243 | {"nas-id", required_argument, 0, 'n'}, {"nas-ip-address", required_argument, 0, 'N'}, |
@@ -249,14 +246,15 @@ int process_arguments(int argc, char **argv) { | |||
249 | {"verbose", no_argument, 0, 'v'}, {"version", no_argument, 0, 'V'}, | 246 | {"verbose", no_argument, 0, 'v'}, {"version", no_argument, 0, 'V'}, |
250 | {"help", no_argument, 0, 'h'}, {0, 0, 0, 0}}; | 247 | {"help", no_argument, 0, 'h'}, {0, 0, 0, 0}}; |
251 | 248 | ||
252 | while (1) { | 249 | while (true) { |
253 | c = getopt_long(argc, argv, "+hVvH:P:F:u:p:n:N:t:r:e:", longopts, &option); | 250 | int option = 0; |
251 | int option_index = getopt_long(argc, argv, "+hVvH:P:F:u:p:n:N:t:r:e:", longopts, &option); | ||
254 | 252 | ||
255 | if (c == -1 || c == EOF || c == 1) { | 253 | if (option_index == -1 || option_index == EOF || option_index == 1) { |
256 | break; | 254 | break; |
257 | } | 255 | } |
258 | 256 | ||
259 | switch (c) { | 257 | switch (option_index) { |
260 | case '?': /* print short usage statement if args not parsable */ | 258 | case '?': /* print short usage statement if args not parsable */ |
261 | usage5(); | 259 | usage5(); |
262 | case 'h': /* help */ | 260 | case 'h': /* help */ |