Module: monitoring-plugins
 Branch: master
 Commit: 47b484eb454b0a487f7d32406ee93f85c94f5895
 Author: Lorenz Kästle <12514511+rincewinds...@users.noreply.github.com>
   Date: Wed Mar 12 00:36:53 2025 +0100
    URL: 
https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=47b484eb

Refactor check_nt

---

 plugins/Makefile.am         |   1 +
 plugins/check_nt.c          | 254 +++++++++++++++++++++-----------------------
 plugins/check_nt.d/config.h |  53 +++++++++
 3 files changed, 178 insertions(+), 130 deletions(-)

diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 5d4449bf..097763fc 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -56,6 +56,7 @@ EXTRA_DIST = t \
                         check_nagios.d \
                         check_dbi.d \
                         check_ssh.d \
+                        check_nt.d \
                         check_dns.d \
                         check_mrtgtraf.d \
                         check_mysql_query.d \
diff --git a/plugins/check_nt.c b/plugins/check_nt.c
index 7897558b..7dd23e5c 100644
--- a/plugins/check_nt.c
+++ b/plugins/check_nt.c
@@ -39,42 +39,22 @@ const char *email = "devel@monitoring-plugins.org";
 #include "common.h"
 #include "netutils.h"
 #include "utils.h"
-
-enum checkvars {
-       CHECK_NONE,
-       CHECK_CLIENTVERSION,
-       CHECK_CPULOAD,
-       CHECK_UPTIME,
-       CHECK_USEDDISKSPACE,
-       CHECK_SERVICESTATE,
-       CHECK_PROCSTATE,
-       CHECK_MEMUSE,
-       CHECK_COUNTER,
-       CHECK_FILEAGE,
-       CHECK_INSTANCES
-};
+#include "check_nt.d/config.h"
 
 enum {
        MAX_VALUE_LIST = 30,
-       PORT = 1248
 };
 
-static char *server_address = NULL;
-static int server_port = PORT;
-static char *value_list = NULL;
-static char *req_password = NULL;
-static unsigned long lvalue_list[MAX_VALUE_LIST];
-static unsigned long warning_value = 0L;
-static unsigned long critical_value = 0L;
-static bool check_warning_value = false;
-static bool check_critical_value = false;
-static enum checkvars vars_to_check = CHECK_NONE;
-static bool show_all = false;
-
 static char recv_buffer[MAX_INPUT_BUFFER];
 
 static void fetch_data(const char *address, int port, const char *sendb);
-static int process_arguments(int /*argc*/, char ** /*argv*/);
+
+typedef struct {
+       int errorcode;
+       check_nt_config config;
+} check_nt_config_wrapper;
+static check_nt_config_wrapper process_arguments(int /*argc*/, char ** 
/*argv*/);
+
 static void preparelist(char *string);
 static bool strtoularray(unsigned long *array, char *string, const char 
*delim);
 static void print_help(void);
@@ -88,10 +68,13 @@ int main(int argc, char **argv) {
        /* Parse extra opts if any */
        argv = np_extra_opts(&argc, argv, progname);
 
-       if (process_arguments(argc, argv) == ERROR) {
+       check_nt_config_wrapper tmp_config = process_arguments(argc, argv);
+       if (tmp_config.errorcode == ERROR) {
                usage4(_("Could not parse arguments"));
        }
 
+       const check_nt_config config = tmp_config.config;
+
        /* initialize alarm signal handling */
        signal(SIGALRM, socket_timeout_alarm_handler);
 
@@ -107,12 +90,13 @@ int main(int argc, char **argv) {
        char *description = NULL;
        char *counter_unit = NULL;
        char *errcvt = NULL;
-       switch (vars_to_check) {
+       unsigned long lvalue_list[MAX_VALUE_LIST];
+       switch (config.vars_to_check) {
        case CHECK_CLIENTVERSION:
-               xasprintf(&send_buffer, "%s&1", req_password);
-               fetch_data(server_address, server_port, send_buffer);
-               if (value_list != NULL && strcmp(recv_buffer, value_list) != 0) 
{
-                       xasprintf(&output_message, _("Wrong client version - 
running: %s, required: %s"), recv_buffer, value_list);
+               xasprintf(&send_buffer, "%s&1", config.req_password);
+               fetch_data(config.server_address, config.server_port, 
send_buffer);
+               if (config.value_list != NULL && strcmp(recv_buffer, 
config.value_list) != 0) {
+                       xasprintf(&output_message, _("Wrong client version - 
running: %s, required: %s"), recv_buffer, config.value_list);
                        return_code = STATE_WARNING;
                } else {
                        xasprintf(&output_message, "%s", recv_buffer);
@@ -120,9 +104,9 @@ int main(int argc, char **argv) {
                }
                break;
        case CHECK_CPULOAD:
-               if (value_list == NULL) {
+               if (config.value_list == NULL) {
                        output_message = strdup(_("missing -l parameters"));
-               } else if (!strtoularray(lvalue_list, value_list, ",")) {
+               } else if (!strtoularray(lvalue_list, config.value_list, ",")) {
                        output_message = strdup(_("wrong -l parameter."));
                } else {
                        /* -l parameters is present with only integers */
@@ -137,8 +121,8 @@ int main(int argc, char **argv) {
                                   lvalue_list[2 + offset] > (unsigned long)0 
&& lvalue_list[2 + offset] <= (unsigned long)100) {
 
                                /* Send request and retrieve data */
-                               xasprintf(&send_buffer, "%s&2&%lu", 
req_password, lvalue_list[0 + offset]);
-                               fetch_data(server_address, server_port, 
send_buffer);
+                               xasprintf(&send_buffer, "%s&2&%lu", 
config.req_password, lvalue_list[0 + offset]);
+                               fetch_data(config.server_address, 
config.server_port, send_buffer);
 
                                unsigned long utilization = 
strtoul(recv_buffer, NULL, 10);
 
@@ -165,27 +149,28 @@ int main(int argc, char **argv) {
                        }
                }
                break;
-       case CHECK_UPTIME:
-               if (value_list == NULL) {
-                       value_list = "minutes";
+       case CHECK_UPTIME: {
+               char *tmp_value_list = config.value_list;
+               if (config.value_list == NULL) {
+                       tmp_value_list = "minutes";
                }
-               if (strncmp(value_list, "seconds", strlen("seconds") + 1) && 
strncmp(value_list, "minutes", strlen("minutes") + 1) &&
-                       strncmp(value_list, "hours", strlen("hours") + 1) && 
strncmp(value_list, "days", strlen("days") + 1)) {
+               if (strncmp(tmp_value_list, "seconds", strlen("seconds") + 1) 
&& strncmp(tmp_value_list, "minutes", strlen("minutes") + 1) &&
+                       strncmp(config.value_list, "hours", strlen("hours") + 
1) && strncmp(tmp_value_list, "days", strlen("days") + 1)) {
 
                        output_message = strdup(_("wrong -l argument"));
                } else {
-                       xasprintf(&send_buffer, "%s&3", req_password);
-                       fetch_data(server_address, server_port, send_buffer);
+                       xasprintf(&send_buffer, "%s&3", config.req_password);
+                       fetch_data(config.server_address, config.server_port, 
send_buffer);
                        unsigned long uptime = strtoul(recv_buffer, NULL, 10);
                        int updays = uptime / 86400;
                        int uphours = (uptime % 86400) / 3600;
                        int upminutes = ((uptime % 86400) % 3600) / 60;
 
-                       if (!strncmp(value_list, "minutes", strlen("minutes"))) 
{
+                       if (!strncmp(tmp_value_list, "minutes", 
strlen("minutes"))) {
                                uptime = uptime / 60;
-                       } else if (!strncmp(value_list, "hours", 
strlen("hours"))) {
+                       } else if (!strncmp(tmp_value_list, "hours", 
strlen("hours"))) {
                                uptime = uptime / 3600;
-                       } else if (!strncmp(value_list, "days", 
strlen("days"))) {
+                       } else if (!strncmp(tmp_value_list, "days", 
strlen("days"))) {
                                uptime = uptime / 86400;
                        }
                        /* else uptime in seconds, nothing to do */
@@ -193,23 +178,23 @@ int main(int argc, char **argv) {
                        xasprintf(&output_message, _("System Uptime - %u day(s) 
%u hour(s) %u minute(s) |uptime=%lu"), updays, uphours, upminutes,
                                          uptime);
 
-                       if (check_critical_value && uptime <= critical_value) {
+                       if (config.check_critical_value && uptime <= 
config.critical_value) {
                                return_code = STATE_CRITICAL;
-                       } else if (check_warning_value && uptime <= 
warning_value) {
+                       } else if (config.check_warning_value && uptime <= 
config.warning_value) {
                                return_code = STATE_WARNING;
                        } else {
                                return_code = STATE_OK;
                        }
                }
-               break;
+       } break;
        case CHECK_USEDDISKSPACE:
-               if (value_list == NULL) {
+               if (config.value_list == NULL) {
                        output_message = strdup(_("missing -l parameters"));
-               } else if (strlen(value_list) != 1) {
+               } else if (strlen(config.value_list) != 1) {
                        output_message = strdup(_("wrong -l argument"));
                } else {
-                       xasprintf(&send_buffer, "%s&4&%s", req_password, 
value_list);
-                       fetch_data(server_address, server_port, send_buffer);
+                       xasprintf(&send_buffer, "%s&4&%s", config.req_password, 
config.value_list);
+                       fetch_data(config.server_address, config.server_port, 
send_buffer);
                        char *fds = strtok(recv_buffer, "&");
                        char *tds = strtok(NULL, "&");
                        double total_disk_space = 0;
@@ -223,19 +208,19 @@ int main(int argc, char **argv) {
 
                        if (total_disk_space > 0 && free_disk_space >= 0) {
                                double percent_used_space = ((total_disk_space 
- free_disk_space) / total_disk_space) * 100;
-                               double warning_used_space = 
((float)warning_value / 100) * total_disk_space;
-                               double critical_used_space = 
((float)critical_value / 100) * total_disk_space;
+                               double warning_used_space = 
((float)config.warning_value / 100) * total_disk_space;
+                               double critical_used_space = 
((float)config.critical_value / 100) * total_disk_space;
 
-                               xasprintf(&temp_string, _("%s:\\ - total: %.2f 
Gb - used: %.2f Gb (%.0f%%) - free %.2f Gb (%.0f%%)"), value_list,
+                               xasprintf(&temp_string, _("%s:\\ - total: %.2f 
Gb - used: %.2f Gb (%.0f%%) - free %.2f Gb (%.0f%%)"), config.value_list,
                                                  total_disk_space / 
1073741824, (total_disk_space - free_disk_space) / 1073741824, 
percent_used_space,
                                                  free_disk_space / 1073741824, 
(free_disk_space / total_disk_space) * 100);
-                               xasprintf(&temp_string_perf, _("'%s:\\ Used 
Space'=%.2fGb;%.2f;%.2f;0.00;%.2f"), value_list,
+                               xasprintf(&temp_string_perf, _("'%s:\\ Used 
Space'=%.2fGb;%.2f;%.2f;0.00;%.2f"), config.value_list,
                                                  (total_disk_space - 
free_disk_space) / 1073741824, warning_used_space / 1073741824,
                                                  critical_used_space / 
1073741824, total_disk_space / 1073741824);
 
-                               if (check_critical_value && percent_used_space 
>= critical_value) {
+                               if (config.check_critical_value && 
percent_used_space >= config.critical_value) {
                                        return_code = STATE_CRITICAL;
-                               } else if (check_warning_value && 
percent_used_space >= warning_value) {
+                               } else if (config.check_warning_value && 
percent_used_space >= config.warning_value) {
                                        return_code = STATE_WARNING;
                                } else {
                                        return_code = STATE_OK;
@@ -251,13 +236,13 @@ int main(int argc, char **argv) {
                break;
        case CHECK_SERVICESTATE:
        case CHECK_PROCSTATE:
-               if (value_list == NULL) {
+               if (config.value_list == NULL) {
                        output_message = strdup(_("No service/process 
specified"));
                } else {
-                       preparelist(value_list); /* replace , between services 
with & to send the request */
-                       xasprintf(&send_buffer, "%s&%u&%s&%s", req_password, 
(vars_to_check == CHECK_SERVICESTATE) ? 5 : 6,
-                                         (show_all) ? "ShowAll" : "ShowFail", 
value_list);
-                       fetch_data(server_address, server_port, send_buffer);
+                       preparelist(config.value_list); /* replace , between 
services with & to send the request */
+                       xasprintf(&send_buffer, "%s&%u&%s&%s", 
config.req_password, (config.vars_to_check == CHECK_SERVICESTATE) ? 5 : 6,
+                                         (config.show_all) ? "ShowAll" : 
"ShowFail", config.value_list);
+                       fetch_data(config.server_address, config.server_port, 
send_buffer);
                        char *numstr = strtok(recv_buffer, "&");
                        if (numstr == NULL) {
                                die(STATE_UNKNOWN, _("could not fetch 
information from server\n"));
@@ -268,8 +253,8 @@ int main(int argc, char **argv) {
                }
                break;
        case CHECK_MEMUSE:
-               xasprintf(&send_buffer, "%s&7", req_password);
-               fetch_data(server_address, server_port, send_buffer);
+               xasprintf(&send_buffer, "%s&7", config.req_password);
+               fetch_data(config.server_address, config.server_port, 
send_buffer);
                char *numstr = strtok(recv_buffer, "&");
                if (numstr == NULL) {
                        die(STATE_UNKNOWN, _("could not fetch information from 
server\n"));
@@ -281,8 +266,8 @@ int main(int argc, char **argv) {
                }
                double mem_commitByte = atof(numstr);
                double percent_used_space = (mem_commitByte / mem_commitLimit) 
* 100;
-               double warning_used_space = ((float)warning_value / 100) * 
mem_commitLimit;
-               double critical_used_space = ((float)critical_value / 100) * 
mem_commitLimit;
+               double warning_used_space = ((float)config.warning_value / 100) 
* mem_commitLimit;
+               double critical_used_space = ((float)config.critical_value / 
100) * mem_commitLimit;
 
                /* Divisor should be 1048567, not 3044515, as we are measuring 
"Commit Charge" here,
                which equals RAM + Pagefiles. */
@@ -293,14 +278,14 @@ int main(int argc, char **argv) {
                                  critical_used_space / 1048567, 
mem_commitLimit / 1048567);
 
                return_code = STATE_OK;
-               if (check_critical_value && percent_used_space >= 
critical_value) {
+               if (config.check_critical_value && percent_used_space >= 
config.critical_value) {
                        return_code = STATE_CRITICAL;
-               } else if (check_warning_value && percent_used_space >= 
warning_value) {
+               } else if (config.check_warning_value && percent_used_space >= 
config.warning_value) {
                        return_code = STATE_WARNING;
                }
 
                break;
-       case CHECK_COUNTER:
+       case CHECK_COUNTER: {
                /*
                CHECK_COUNTER has been modified to provide extensive perfdata 
information.
                In order to do this, some modifications have been done to the 
code
@@ -323,17 +308,17 @@ int main(int argc, char **argv) {
                */
 
                double counter_value = 0.0;
-               if (value_list == NULL) {
+               if (config.value_list == NULL) {
                        output_message = strdup(_("No counter specified"));
                } else {
-                       preparelist(value_list); /* replace , between services 
with & to send the request */
-                       bool isPercent = (strchr(value_list, '%') != NULL);
+                       preparelist(config.value_list); /* replace , between 
services with & to send the request */
+                       bool isPercent = (strchr(config.value_list, '%') != 
NULL);
 
-                       strtok(value_list, "&"); /* burn the first parameters */
+                       strtok(config.value_list, "&"); /* burn the first 
parameters */
                        description = strtok(NULL, "&");
                        counter_unit = strtok(NULL, "&");
-                       xasprintf(&send_buffer, "%s&8&%s", req_password, 
value_list);
-                       fetch_data(server_address, server_port, send_buffer);
+                       xasprintf(&send_buffer, "%s&8&%s", config.req_password, 
config.value_list);
+                       fetch_data(config.server_address, config.server_port, 
send_buffer);
                        counter_value = atof(recv_buffer);
 
                        bool allRight = false;
@@ -380,52 +365,51 @@ int main(int argc, char **argv) {
                                }
                                xasprintf(&output_message, "%s |", 
output_message);
                                xasprintf(&output_message, "%s %s", 
output_message,
-                                                 fperfdata(description, 
counter_value, counter_unit, 1, warning_value, 1, critical_value,
+                                                 fperfdata(description, 
counter_value, counter_unit, 1, config.warning_value, 1, config.critical_value,
                                                                        
(!(isPercent) && (minval != NULL)), fminval, (!(isPercent) && (minval != 
NULL)), fmaxval));
                        }
                }
 
-               if (critical_value > warning_value) { /* Normal thresholds */
-                       if (check_critical_value && counter_value >= 
critical_value) {
+               if (config.critical_value > config.warning_value) { /* Normal 
thresholds */
+                       if (config.check_critical_value && counter_value >= 
config.critical_value) {
                                return_code = STATE_CRITICAL;
-                       } else if (check_warning_value && counter_value >= 
warning_value) {
+                       } else if (config.check_warning_value && counter_value 
>= config.warning_value) {
                                return_code = STATE_WARNING;
                        } else {
                                return_code = STATE_OK;
                        }
                } else { /* inverse thresholds */
                        return_code = STATE_OK;
-                       if (check_critical_value && counter_value <= 
critical_value) {
+                       if (config.check_critical_value && counter_value <= 
config.critical_value) {
                                return_code = STATE_CRITICAL;
-                       } else if (check_warning_value && counter_value <= 
warning_value) {
+                       } else if (config.check_warning_value && counter_value 
<= config.warning_value) {
                                return_code = STATE_WARNING;
                        }
                }
-               break;
-
+       } break;
        case CHECK_FILEAGE:
-               if (value_list == NULL) {
+               if (config.value_list == NULL) {
                        output_message = strdup(_("No counter specified"));
                } else {
-                       preparelist(value_list); /* replace , between services 
with & to send the request */
-                       xasprintf(&send_buffer, "%s&9&%s", req_password, 
value_list);
-                       fetch_data(server_address, server_port, send_buffer);
+                       preparelist(config.value_list); /* replace , between 
services with & to send the request */
+                       xasprintf(&send_buffer, "%s&9&%s", config.req_password, 
config.value_list);
+                       fetch_data(config.server_address, config.server_port, 
send_buffer);
                        unsigned long age_in_minutes = atoi(strtok(recv_buffer, 
"&"));
                        description = strtok(NULL, "&");
                        output_message = strdup(description);
 
-                       if (critical_value > warning_value) { /* Normal 
thresholds */
-                               if (check_critical_value && age_in_minutes >= 
critical_value) {
+                       if (config.critical_value > config.warning_value) { /* 
Normal thresholds */
+                               if (config.check_critical_value && 
age_in_minutes >= config.critical_value) {
                                        return_code = STATE_CRITICAL;
-                               } else if (check_warning_value && 
age_in_minutes >= warning_value) {
+                               } else if (config.check_warning_value && 
age_in_minutes >= config.warning_value) {
                                        return_code = STATE_WARNING;
                                } else {
                                        return_code = STATE_OK;
                                }
                        } else { /* inverse thresholds */
-                               if (check_critical_value && age_in_minutes <= 
critical_value) {
+                               if (config.check_critical_value && 
age_in_minutes <= config.critical_value) {
                                        return_code = STATE_CRITICAL;
-                               } else if (check_warning_value && 
age_in_minutes <= warning_value) {
+                               } else if (config.check_warning_value && 
age_in_minutes <= config.warning_value) {
                                        return_code = STATE_WARNING;
                                } else {
                                        return_code = STATE_OK;
@@ -435,11 +419,11 @@ int main(int argc, char **argv) {
                break;
 
        case CHECK_INSTANCES:
-               if (value_list == NULL) {
+               if (config.value_list == NULL) {
                        output_message = strdup(_("No counter specified"));
                } else {
-                       xasprintf(&send_buffer, "%s&10&%s", req_password, 
value_list);
-                       fetch_data(server_address, server_port, send_buffer);
+                       xasprintf(&send_buffer, "%s&10&%s", 
config.req_password, config.value_list);
+                       fetch_data(config.server_address, config.server_port, 
send_buffer);
                        if (!strncmp(recv_buffer, "ERROR", 5)) {
                                printf("NSClient - %s\n", recv_buffer);
                                exit(STATE_UNKNOWN);
@@ -467,7 +451,7 @@ int main(int argc, char **argv) {
 }
 
 /* process command-line arguments */
-int process_arguments(int argc, char **argv) {
+check_nt_config_wrapper process_arguments(int argc, char **argv) {
        static struct option longopts[] = {{"port", required_argument, 0, 'p'},
                                                                           
{"timeout", required_argument, 0, 't'},
                                                                           
{"critical", required_argument, 0, 'c'},
@@ -482,14 +466,20 @@ int process_arguments(int argc, char **argv) {
                                                                           
{"help", no_argument, 0, 'h'},
                                                                           {0, 
0, 0, 0}};
 
+       check_nt_config_wrapper result = {
+               .errorcode = OK,
+               .config = check_nt_config_init(),
+       };
+
        /* no options were supplied */
        if (argc < 2) {
-               return ERROR;
+               result.errorcode = ERROR;
+               return result;
        }
 
        /* backwards compatibility */
        if (!is_option(argv[1])) {
-               server_address = strdup(argv[1]);
+               result.config.server_address = strdup(argv[1]);
                argv[1] = argv[0];
                argv = &argv[1];
                argc--;
@@ -523,60 +513,62 @@ int process_arguments(int argc, char **argv) {
                        print_revision(progname, NP_VERSION);
                        exit(STATE_UNKNOWN);
                case 'H': /* hostname */
-                       server_address = optarg;
+                       result.config.server_address = optarg;
                        break;
                case 's': /* password */
-                       req_password = optarg;
+                       result.config.req_password = optarg;
                        break;
                case 'p': /* port */
                        if (is_intnonneg(optarg)) {
-                               server_port = atoi(optarg);
+                               result.config.server_port = atoi(optarg);
                        } else {
                                die(STATE_UNKNOWN, _("Server port must be an 
integer\n"));
                        }
                        break;
                case 'v':
                        if (strlen(optarg) < 4) {
-                               return ERROR;
+                               result.errorcode = ERROR;
+                               return result;
                        }
                        if (!strcmp(optarg, "CLIENTVERSION")) {
-                               vars_to_check = CHECK_CLIENTVERSION;
+                               result.config.vars_to_check = 
CHECK_CLIENTVERSION;
                        } else if (!strcmp(optarg, "CPULOAD")) {
-                               vars_to_check = CHECK_CPULOAD;
+                               result.config.vars_to_check = CHECK_CPULOAD;
                        } else if (!strcmp(optarg, "UPTIME")) {
-                               vars_to_check = CHECK_UPTIME;
+                               result.config.vars_to_check = CHECK_UPTIME;
                        } else if (!strcmp(optarg, "USEDDISKSPACE")) {
-                               vars_to_check = CHECK_USEDDISKSPACE;
+                               result.config.vars_to_check = 
CHECK_USEDDISKSPACE;
                        } else if (!strcmp(optarg, "SERVICESTATE")) {
-                               vars_to_check = CHECK_SERVICESTATE;
+                               result.config.vars_to_check = 
CHECK_SERVICESTATE;
                        } else if (!strcmp(optarg, "PROCSTATE")) {
-                               vars_to_check = CHECK_PROCSTATE;
+                               result.config.vars_to_check = CHECK_PROCSTATE;
                        } else if (!strcmp(optarg, "MEMUSE")) {
-                               vars_to_check = CHECK_MEMUSE;
+                               result.config.vars_to_check = CHECK_MEMUSE;
                        } else if (!strcmp(optarg, "COUNTER")) {
-                               vars_to_check = CHECK_COUNTER;
+                               result.config.vars_to_check = CHECK_COUNTER;
                        } else if (!strcmp(optarg, "FILEAGE")) {
-                               vars_to_check = CHECK_FILEAGE;
+                               result.config.vars_to_check = CHECK_FILEAGE;
                        } else if (!strcmp(optarg, "INSTANCES")) {
-                               vars_to_check = CHECK_INSTANCES;
+                               result.config.vars_to_check = CHECK_INSTANCES;
                        } else {
-                               return ERROR;
+                               result.errorcode = ERROR;
+                               return result;
                        }
                        break;
                case 'l': /* value list */
-                       value_list = optarg;
+                       result.config.value_list = optarg;
                        break;
                case 'w': /* warning threshold */
-                       warning_value = strtoul(optarg, NULL, 10);
-                       check_warning_value = true;
+                       result.config.warning_value = strtoul(optarg, NULL, 10);
+                       result.config.check_warning_value = true;
                        break;
                case 'c': /* critical threshold */
-                       critical_value = strtoul(optarg, NULL, 10);
-                       check_critical_value = true;
+                       result.config.critical_value = strtoul(optarg, NULL, 
10);
+                       result.config.check_critical_value = true;
                        break;
                case 'd': /* Display select for services */
                        if (!strcmp(optarg, "SHOWALL")) {
-                               show_all = true;
+                               result.config.show_all = true;
                        }
                        break;
                case 'u':
@@ -585,23 +577,25 @@ int process_arguments(int argc, char **argv) {
                case 't': /* timeout */
                        socket_timeout = atoi(optarg);
                        if (socket_timeout <= 0) {
-                               return ERROR;
+                               result.errorcode = ERROR;
+                               return result;
                        }
                }
        }
-       if (server_address == NULL) {
+       if (result.config.server_address == NULL) {
                usage4(_("You must provide a server address or host name"));
        }
 
-       if (vars_to_check == CHECK_NONE) {
-               return ERROR;
+       if (result.config.vars_to_check == CHECK_NONE) {
+               result.errorcode = ERROR;
+               return result;
        }
 
-       if (req_password == NULL) {
-               req_password = strdup(_("None"));
+       if (result.config.req_password == NULL) {
+               result.config.req_password = strdup(_("None"));
        }
 
-       return OK;
+       return result;
 }
 
 void fetch_data(const char *address, int port, const char *sendb) {
diff --git a/plugins/check_nt.d/config.h b/plugins/check_nt.d/config.h
new file mode 100644
index 00000000..431889cb
--- /dev/null
+++ b/plugins/check_nt.d/config.h
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "../../config.h"
+#include <stddef.h>
+
+enum {
+       PORT = 1248,
+};
+
+enum checkvars {
+       CHECK_NONE,
+       CHECK_CLIENTVERSION,
+       CHECK_CPULOAD,
+       CHECK_UPTIME,
+       CHECK_USEDDISKSPACE,
+       CHECK_SERVICESTATE,
+       CHECK_PROCSTATE,
+       CHECK_MEMUSE,
+       CHECK_COUNTER,
+       CHECK_FILEAGE,
+       CHECK_INSTANCES
+};
+
+typedef struct {
+       char *server_address;
+       int server_port;
+       char *req_password;
+       enum checkvars vars_to_check;
+       bool show_all;
+       char *value_list;
+       bool check_warning_value;
+       unsigned long warning_value;
+       bool check_critical_value;
+       unsigned long critical_value;
+} check_nt_config;
+
+check_nt_config check_nt_config_init() {
+       check_nt_config tmp = {
+               .server_address = NULL,
+               .server_port = PORT,
+               .req_password = NULL,
+
+               .vars_to_check = CHECK_NONE,
+               .show_all = false,
+               .value_list = NULL,
+
+               .check_warning_value = false,
+               .warning_value = 0,
+               .check_critical_value = false,
+               .critical_value = 0,
+       };
+       return tmp;
+}

Reply via email to