diff options
| author | RincewindsHat <12514511+RincewindsHat@users.noreply.github.com> | 2024-10-26 23:18:26 +0200 |
|---|---|---|
| committer | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2024-11-08 10:49:07 +0100 |
| commit | 75ff5b3b51a76081196f41c4b428dc3db50f2664 (patch) | |
| tree | 62290ae9eab8d029220325e04ebd4c6ed67ee110 | |
| parent | ebb4bf4bb4c14807878dab488a66868f7f5751e3 (diff) | |
| download | monitoring-plugins-75ff5b3b51a76081196f41c4b428dc3db50f2664.tar.gz | |
check_apt: localize variables
| -rw-r--r-- | plugins/check_apt.c | 65 |
1 files changed, 28 insertions, 37 deletions
diff --git a/plugins/check_apt.c b/plugins/check_apt.c index eb08a061..c2c693eb 100644 --- a/plugins/check_apt.c +++ b/plugins/check_apt.c | |||
| @@ -94,12 +94,6 @@ static int stderr_warning = 0; /* if a cmd issued output on stderr */ | |||
| 94 | static int exec_warning = 0; /* if a cmd exited non-zero */ | 94 | static int exec_warning = 0; /* if a cmd exited non-zero */ |
| 95 | 95 | ||
| 96 | int main(int argc, char **argv) { | 96 | int main(int argc, char **argv) { |
| 97 | int result = STATE_UNKNOWN; | ||
| 98 | int packages_available = 0; | ||
| 99 | int sec_count = 0; | ||
| 100 | char **packages_list = NULL; | ||
| 101 | char **secpackages_list = NULL; | ||
| 102 | |||
| 103 | /* Parse extra opts if any */ | 97 | /* Parse extra opts if any */ |
| 104 | argv = np_extra_opts(&argc, argv, progname); | 98 | argv = np_extra_opts(&argc, argv, progname); |
| 105 | 99 | ||
| @@ -115,11 +109,16 @@ int main(int argc, char **argv) { | |||
| 115 | /* handle timeouts gracefully... */ | 109 | /* handle timeouts gracefully... */ |
| 116 | alarm(timeout_interval); | 110 | alarm(timeout_interval); |
| 117 | 111 | ||
| 112 | int result = STATE_UNKNOWN; | ||
| 118 | /* if they want to run apt-get update first... */ | 113 | /* if they want to run apt-get update first... */ |
| 119 | if (do_update) { | 114 | if (do_update) { |
| 120 | result = run_update(); | 115 | result = run_update(); |
| 121 | } | 116 | } |
| 122 | 117 | ||
| 118 | int packages_available = 0; | ||
| 119 | int sec_count = 0; | ||
| 120 | char **packages_list = NULL; | ||
| 121 | char **secpackages_list = NULL; | ||
| 123 | /* apt-get upgrade */ | 122 | /* apt-get upgrade */ |
| 124 | result = max_state(result, run_upgrade(&packages_available, &sec_count, &packages_list, &secpackages_list)); | 123 | result = max_state(result, run_upgrade(&packages_available, &sec_count, &packages_list, &secpackages_list)); |
| 125 | 124 | ||
| @@ -156,8 +155,6 @@ int main(int argc, char **argv) { | |||
| 156 | 155 | ||
| 157 | /* process command-line arguments */ | 156 | /* process command-line arguments */ |
| 158 | int process_arguments(int argc, char **argv) { | 157 | int process_arguments(int argc, char **argv) { |
| 159 | int c; | ||
| 160 | |||
| 161 | static struct option longopts[] = {{"version", no_argument, 0, 'V'}, | 158 | static struct option longopts[] = {{"version", no_argument, 0, 'V'}, |
| 162 | {"help", no_argument, 0, 'h'}, | 159 | {"help", no_argument, 0, 'h'}, |
| 163 | {"verbose", no_argument, 0, 'v'}, | 160 | {"verbose", no_argument, 0, 'v'}, |
| @@ -175,14 +172,14 @@ int process_arguments(int argc, char **argv) { | |||
| 175 | {"packages-warning", required_argument, 0, 'w'}, | 172 | {"packages-warning", required_argument, 0, 'w'}, |
| 176 | {0, 0, 0, 0}}; | 173 | {0, 0, 0, 0}}; |
| 177 | 174 | ||
| 178 | while (1) { | 175 | while (true) { |
| 179 | c = getopt_long(argc, argv, "hVvt:u::U::d::nli:e:c:ow:", longopts, NULL); | 176 | int option_char = getopt_long(argc, argv, "hVvt:u::U::d::nli:e:c:ow:", longopts, NULL); |
| 180 | 177 | ||
| 181 | if (c == -1 || c == EOF || c == 1) { | 178 | if (option_char == -1 || option_char == EOF || option_char == 1) { |
| 182 | break; | 179 | break; |
| 183 | } | 180 | } |
| 184 | 181 | ||
| 185 | switch (c) { | 182 | switch (option_char) { |
| 186 | case 'h': | 183 | case 'h': |
| 187 | print_help(); | 184 | print_help(); |
| 188 | exit(STATE_UNKNOWN); | 185 | exit(STATE_UNKNOWN); |
| @@ -257,18 +254,7 @@ int process_arguments(int argc, char **argv) { | |||
| 257 | 254 | ||
| 258 | /* run an apt-get upgrade */ | 255 | /* run an apt-get upgrade */ |
| 259 | int run_upgrade(int *pkgcount, int *secpkgcount, char ***pkglist, char ***secpkglist) { | 256 | int run_upgrade(int *pkgcount, int *secpkgcount, char ***pkglist, char ***secpkglist) { |
| 260 | int result = STATE_UNKNOWN; | ||
| 261 | int regres = 0; | ||
| 262 | int pc = 0; | ||
| 263 | int spc = 0; | ||
| 264 | struct output chld_out; | ||
| 265 | struct output chld_err; | ||
| 266 | regex_t ireg; | ||
| 267 | regex_t ereg; | 257 | regex_t ereg; |
| 268 | regex_t sreg; | ||
| 269 | char *cmdline = NULL; | ||
| 270 | char rerrbuf[64]; | ||
| 271 | |||
| 272 | /* initialize ereg as it is possible it is printed while uninitialized */ | 258 | /* initialize ereg as it is possible it is printed while uninitialized */ |
| 273 | memset(&ereg, '\0', sizeof(ereg.buffer)); | 259 | memset(&ereg, '\0', sizeof(ereg.buffer)); |
| 274 | 260 | ||
| @@ -276,6 +262,9 @@ int run_upgrade(int *pkgcount, int *secpkgcount, char ***pkglist, char ***secpkg | |||
| 276 | return STATE_OK; | 262 | return STATE_OK; |
| 277 | } | 263 | } |
| 278 | 264 | ||
| 265 | int regres = 0; | ||
| 266 | regex_t ireg; | ||
| 267 | char rerrbuf[64]; | ||
| 279 | /* compile the regexps */ | 268 | /* compile the regexps */ |
| 280 | if (do_include != NULL) { | 269 | if (do_include != NULL) { |
| 281 | regres = regcomp(&ireg, do_include, REG_EXTENDED); | 270 | regres = regcomp(&ireg, do_include, REG_EXTENDED); |
| @@ -293,6 +282,7 @@ int run_upgrade(int *pkgcount, int *secpkgcount, char ***pkglist, char ***secpkg | |||
| 293 | } | 282 | } |
| 294 | } | 283 | } |
| 295 | 284 | ||
| 285 | regex_t sreg; | ||
| 296 | const char *crit_ptr = (do_critical != NULL) ? do_critical : SECURITY_RE; | 286 | const char *crit_ptr = (do_critical != NULL) ? do_critical : SECURITY_RE; |
| 297 | regres = regcomp(&sreg, crit_ptr, REG_EXTENDED); | 287 | regres = regcomp(&sreg, crit_ptr, REG_EXTENDED); |
| 298 | if (regres != 0) { | 288 | if (regres != 0) { |
| @@ -300,6 +290,10 @@ int run_upgrade(int *pkgcount, int *secpkgcount, char ***pkglist, char ***secpkg | |||
| 300 | die(STATE_UNKNOWN, _("%s: Error compiling regexp: %s"), progname, rerrbuf); | 290 | die(STATE_UNKNOWN, _("%s: Error compiling regexp: %s"), progname, rerrbuf); |
| 301 | } | 291 | } |
| 302 | 292 | ||
| 293 | int result = STATE_UNKNOWN; | ||
| 294 | struct output chld_out; | ||
| 295 | struct output chld_err; | ||
| 296 | char *cmdline = NULL; | ||
| 303 | cmdline = construct_cmdline(upgrade, upgrade_opts); | 297 | cmdline = construct_cmdline(upgrade, upgrade_opts); |
| 304 | if (input_filename != NULL) { | 298 | if (input_filename != NULL) { |
| 305 | /* read input from a file for testing */ | 299 | /* read input from a file for testing */ |
| @@ -336,6 +330,8 @@ int run_upgrade(int *pkgcount, int *secpkgcount, char ***pkglist, char ***secpkg | |||
| 336 | * we may need to switch to the --print-uris output format, | 330 | * we may need to switch to the --print-uris output format, |
| 337 | * in which case the logic here will slightly change. | 331 | * in which case the logic here will slightly change. |
| 338 | */ | 332 | */ |
| 333 | int pc = 0; | ||
| 334 | int spc = 0; | ||
| 339 | for (size_t i = 0; i < chld_out.lines; i++) { | 335 | for (size_t i = 0; i < chld_out.lines; i++) { |
| 340 | if (verbose) { | 336 | if (verbose) { |
| 341 | printf("%s\n", chld_out.line[i]); | 337 | printf("%s\n", chld_out.line[i]); |
| @@ -389,12 +385,12 @@ int run_upgrade(int *pkgcount, int *secpkgcount, char ***pkglist, char ***secpkg | |||
| 389 | /* run an apt-get update (needs root) */ | 385 | /* run an apt-get update (needs root) */ |
| 390 | int run_update(void) { | 386 | int run_update(void) { |
| 391 | int result = STATE_UNKNOWN; | 387 | int result = STATE_UNKNOWN; |
| 392 | struct output chld_out; | ||
| 393 | struct output chld_err; | ||
| 394 | char *cmdline; | 388 | char *cmdline; |
| 395 | |||
| 396 | /* run the update */ | 389 | /* run the update */ |
| 397 | cmdline = construct_cmdline(NO_UPGRADE, update_opts); | 390 | cmdline = construct_cmdline(NO_UPGRADE, update_opts); |
| 391 | |||
| 392 | struct output chld_out; | ||
| 393 | struct output chld_err; | ||
| 398 | result = np_runcmd(cmdline, &chld_out, &chld_err, 0); | 394 | result = np_runcmd(cmdline, &chld_out, &chld_err, 0); |
| 399 | /* apt-get update changes exit status if it can't fetch packages. | 395 | /* apt-get update changes exit status if it can't fetch packages. |
| 400 | * since we were explicitly asked to do so, this is treated as | 396 | * since we were explicitly asked to do so, this is treated as |
| @@ -426,20 +422,16 @@ int run_update(void) { | |||
| 426 | } | 422 | } |
| 427 | 423 | ||
| 428 | char *pkg_name(char *line) { | 424 | char *pkg_name(char *line) { |
| 429 | char *start = NULL; | 425 | char *start = line + strlen(PKGINST_PREFIX); |
| 430 | char *space = NULL; | ||
| 431 | char *pkg = NULL; | ||
| 432 | int len = 0; | ||
| 433 | 426 | ||
| 434 | start = line + strlen(PKGINST_PREFIX); | 427 | int len = strlen(start); |
| 435 | len = strlen(start); | ||
| 436 | 428 | ||
| 437 | space = index(start, ' '); | 429 | char *space = index(start, ' '); |
| 438 | if (space != NULL) { | 430 | if (space != NULL) { |
| 439 | len = space - start; | 431 | len = space - start; |
| 440 | } | 432 | } |
| 441 | 433 | ||
| 442 | pkg = malloc(sizeof(char) * (len + 1)); | 434 | char *pkg = malloc(sizeof(char) * (len + 1)); |
| 443 | if (!pkg) { | 435 | if (!pkg) { |
| 444 | die(STATE_UNKNOWN, "malloc failed!\n"); | 436 | die(STATE_UNKNOWN, "malloc failed!\n"); |
| 445 | } | 437 | } |
| @@ -475,10 +467,8 @@ char *add_to_regexp(char *expr, const char *next) { | |||
| 475 | } | 467 | } |
| 476 | 468 | ||
| 477 | char *construct_cmdline(upgrade_type u, const char *opts) { | 469 | char *construct_cmdline(upgrade_type u, const char *opts) { |
| 478 | int len = 0; | ||
| 479 | const char *opts_ptr = NULL; | 470 | const char *opts_ptr = NULL; |
| 480 | const char *aptcmd = NULL; | 471 | const char *aptcmd = NULL; |
| 481 | char *cmd = NULL; | ||
| 482 | 472 | ||
| 483 | switch (u) { | 473 | switch (u) { |
| 484 | case UPGRADE: | 474 | case UPGRADE: |
| @@ -507,11 +497,12 @@ char *construct_cmdline(upgrade_type u, const char *opts) { | |||
| 507 | break; | 497 | break; |
| 508 | } | 498 | } |
| 509 | 499 | ||
| 500 | int len = 0; | ||
| 510 | len += strlen(PATH_TO_APTGET) + 1; /* "/usr/bin/apt-get " */ | 501 | len += strlen(PATH_TO_APTGET) + 1; /* "/usr/bin/apt-get " */ |
| 511 | len += strlen(opts_ptr) + 1; /* "opts " */ | 502 | len += strlen(opts_ptr) + 1; /* "opts " */ |
| 512 | len += strlen(aptcmd) + 1; /* "upgrade\0" */ | 503 | len += strlen(aptcmd) + 1; /* "upgrade\0" */ |
| 513 | 504 | ||
| 514 | cmd = (char *)malloc(sizeof(char) * len); | 505 | char *cmd = (char *)malloc(sizeof(char) * len); |
| 515 | if (cmd == NULL) { | 506 | if (cmd == NULL) { |
| 516 | die(STATE_UNKNOWN, "malloc failed"); | 507 | die(STATE_UNKNOWN, "malloc failed"); |
| 517 | } | 508 | } |
