summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorenz Kästle <12514511+RincewindsHat@users.noreply.github.com>2025-03-12 16:29:53 +0100
committerLorenz Kästle <12514511+RincewindsHat@users.noreply.github.com>2025-03-12 16:29:53 +0100
commit0728456d73d4b3c62a2f26f4c918de571b4fbc3d (patch)
treeecca2757c8be8046bb293ba3e07ef6363384d495
parent6fcc97400a8e6926e6700a050e33cd767d6e67f3 (diff)
downloadmonitoring-plugins-0728456d73d4b3c62a2f26f4c918de571b4fbc3d.tar.gz
check_radius: general refactoring
-rw-r--r--plugins/check_radius.c44
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
151int main(int argc, char **argv) { 152int 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 */
240int process_arguments(int argc, char **argv) { 240int 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 */