diff options
| author | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-02-24 20:32:37 +0100 |
|---|---|---|
| committer | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-02-24 20:32:37 +0100 |
| commit | 1c0b72e3ff198e94a2704be4b1ed5f38732d5462 (patch) | |
| tree | f19a4e3208a5a2e3ab49d39a515fcd7c5d035ec5 | |
| parent | 02adcbfa896eb726c59ca647eb4cf6909c690f37 (diff) | |
| download | monitoring-plugins-1c0b72e3ff198e94a2704be4b1ed5f38732d5462.tar.gz | |
check_by_ssh: clang-format
| -rw-r--r-- | plugins/check_by_ssh.c | 98 |
1 files changed, 63 insertions, 35 deletions
diff --git a/plugins/check_by_ssh.c b/plugins/check_by_ssh.c index 2c19fd06..2ac7805d 100644 --- a/plugins/check_by_ssh.c +++ b/plugins/check_by_ssh.c | |||
| @@ -82,8 +82,9 @@ int main(int argc, char **argv) { | |||
| 82 | argv = np_extra_opts(&argc, argv, progname); | 82 | argv = np_extra_opts(&argc, argv, progname); |
| 83 | 83 | ||
| 84 | /* process arguments */ | 84 | /* process arguments */ |
| 85 | if (process_arguments(argc, argv) == ERROR) | 85 | if (process_arguments(argc, argv) == ERROR) { |
| 86 | usage_va(_("Could not parse arguments")); | 86 | usage_va(_("Could not parse arguments")); |
| 87 | } | ||
| 87 | 88 | ||
| 88 | /* Set signal handling and alarm timeout */ | 89 | /* Set signal handling and alarm timeout */ |
| 89 | if (signal(SIGALRM, timeout_alarm_handler) == SIG_ERR) { | 90 | if (signal(SIGALRM, timeout_alarm_handler) == SIG_ERR) { |
| @@ -94,8 +95,9 @@ int main(int argc, char **argv) { | |||
| 94 | /* run the command */ | 95 | /* run the command */ |
| 95 | if (verbose) { | 96 | if (verbose) { |
| 96 | printf("Command: %s\n", commargv[0]); | 97 | printf("Command: %s\n", commargv[0]); |
| 97 | for (int i = 1; i < commargc; i++) | 98 | for (int i = 1; i < commargc; i++) { |
| 98 | printf("Argument %i: %s\n", i, commargv[i]); | 99 | printf("Argument %i: %s\n", i, commargv[i]); |
| 100 | } | ||
| 99 | } | 101 | } |
| 100 | 102 | ||
| 101 | result = cmd_run_array(commargv, &chld_out, &chld_err, 0); | 103 | result = cmd_run_array(commargv, &chld_out, &chld_err, 0); |
| @@ -107,33 +109,40 @@ int main(int argc, char **argv) { | |||
| 107 | } | 109 | } |
| 108 | 110 | ||
| 109 | if (verbose) { | 111 | if (verbose) { |
| 110 | for (size_t i = 0; i < chld_out.lines; i++) | 112 | for (size_t i = 0; i < chld_out.lines; i++) { |
| 111 | printf("stdout: %s\n", chld_out.line[i]); | 113 | printf("stdout: %s\n", chld_out.line[i]); |
| 112 | for (size_t i = 0; i < chld_err.lines; i++) | 114 | } |
| 115 | for (size_t i = 0; i < chld_err.lines; i++) { | ||
| 113 | printf("stderr: %s\n", chld_err.line[i]); | 116 | printf("stderr: %s\n", chld_err.line[i]); |
| 117 | } | ||
| 114 | } | 118 | } |
| 115 | 119 | ||
| 116 | if (skip_stdout == -1) /* --skip-stdout specified without argument */ | 120 | if (skip_stdout == -1) { /* --skip-stdout specified without argument */ |
| 117 | skip_stdout = chld_out.lines; | 121 | skip_stdout = chld_out.lines; |
| 118 | if (skip_stderr == -1) /* --skip-stderr specified without argument */ | 122 | } |
| 123 | if (skip_stderr == -1) { /* --skip-stderr specified without argument */ | ||
| 119 | skip_stderr = chld_err.lines; | 124 | skip_stderr = chld_err.lines; |
| 125 | } | ||
| 120 | 126 | ||
| 121 | /* UNKNOWN or worse if (non-skipped) output found on stderr */ | 127 | /* UNKNOWN or worse if (non-skipped) output found on stderr */ |
| 122 | if (chld_err.lines > (size_t)skip_stderr) { | 128 | if (chld_err.lines > (size_t)skip_stderr) { |
| 123 | printf(_("Remote command execution failed: %s\n"), chld_err.line[skip_stderr]); | 129 | printf(_("Remote command execution failed: %s\n"), chld_err.line[skip_stderr]); |
| 124 | if (warn_on_stderr) | 130 | if (warn_on_stderr) { |
| 125 | return max_state_alt(result, STATE_WARNING); | 131 | return max_state_alt(result, STATE_WARNING); |
| 132 | } | ||
| 126 | return max_state_alt(result, STATE_UNKNOWN); | 133 | return max_state_alt(result, STATE_UNKNOWN); |
| 127 | } | 134 | } |
| 128 | 135 | ||
| 129 | /* this is simple if we're not supposed to be passive. | 136 | /* this is simple if we're not supposed to be passive. |
| 130 | * Wrap up quickly and keep the tricks below */ | 137 | * Wrap up quickly and keep the tricks below */ |
| 131 | if (!passive) { | 138 | if (!passive) { |
| 132 | if (chld_out.lines > (size_t)skip_stdout) | 139 | if (chld_out.lines > (size_t)skip_stdout) { |
| 133 | for (size_t i = skip_stdout; i < chld_out.lines; i++) | 140 | for (size_t i = skip_stdout; i < chld_out.lines; i++) { |
| 134 | puts(chld_out.line[i]); | 141 | puts(chld_out.line[i]); |
| 135 | else | 142 | } |
| 143 | } else { | ||
| 136 | printf(_("%s - check_by_ssh: Remote command '%s' returned status %d\n"), state_text(result), remotecmd, result); | 144 | printf(_("%s - check_by_ssh: Remote command '%s' returned status %d\n"), state_text(result), remotecmd, result); |
| 145 | } | ||
| 137 | return result; /* return error status from remote command */ | 146 | return result; /* return error status from remote command */ |
| 138 | } | 147 | } |
| 139 | 148 | ||
| @@ -151,8 +160,9 @@ int main(int argc, char **argv) { | |||
| 151 | commands = 0; | 160 | commands = 0; |
| 152 | for (size_t i = skip_stdout; i < chld_out.lines; i++) { | 161 | for (size_t i = skip_stdout; i < chld_out.lines; i++) { |
| 153 | status_text = chld_out.line[i++]; | 162 | status_text = chld_out.line[i++]; |
| 154 | if (i == chld_out.lines || strstr(chld_out.line[i], "STATUS CODE: ") == NULL) | 163 | if (i == chld_out.lines || strstr(chld_out.line[i], "STATUS CODE: ") == NULL) { |
| 155 | die(STATE_UNKNOWN, _("%s: Error parsing output\n"), progname); | 164 | die(STATE_UNKNOWN, _("%s: Error parsing output\n"), progname); |
| 165 | } | ||
| 156 | 166 | ||
| 157 | if (service[commands] && status_text && sscanf(chld_out.line[i], "STATUS CODE: %d", &cresult) == 1) { | 167 | if (service[commands] && status_text && sscanf(chld_out.line[i], "STATUS CODE: %d", &cresult) == 1) { |
| 158 | fprintf(file_pointer, "[%d] PROCESS_SERVICE_CHECK_RESULT;%s;%s;%d;%s\n", (int)local_time, host_shortname, service[commands++], | 168 | fprintf(file_pointer, "[%d] PROCESS_SERVICE_CHECK_RESULT;%s;%s;%d;%s\n", (int)local_time, host_shortname, service[commands++], |
| @@ -200,18 +210,22 @@ int process_arguments(int argc, char **argv) { | |||
| 200 | {"configfile", optional_argument, 0, 'F'}, | 210 | {"configfile", optional_argument, 0, 'F'}, |
| 201 | {0, 0, 0, 0}}; | 211 | {0, 0, 0, 0}}; |
| 202 | 212 | ||
| 203 | if (argc < 2) | 213 | if (argc < 2) { |
| 204 | return ERROR; | 214 | return ERROR; |
| 215 | } | ||
| 205 | 216 | ||
| 206 | for (c = 1; c < argc; c++) | 217 | for (c = 1; c < argc; c++) { |
| 207 | if (strcmp("-to", argv[c]) == 0) | 218 | if (strcmp("-to", argv[c]) == 0) { |
| 208 | strcpy(argv[c], "-t"); | 219 | strcpy(argv[c], "-t"); |
| 220 | } | ||
| 221 | } | ||
| 209 | 222 | ||
| 210 | while (1) { | 223 | while (1) { |
| 211 | c = getopt_long(argc, argv, "Vvh1246fqt:UH:O:p:i:u:l:C:S::E::n:s:o:F:", longopts, &option); | 224 | c = getopt_long(argc, argv, "Vvh1246fqt:UH:O:p:i:u:l:C:S::E::n:s:o:F:", longopts, &option); |
| 212 | 225 | ||
| 213 | if (c == -1 || c == EOF) | 226 | if (c == -1 || c == EOF) { |
| 214 | break; | 227 | break; |
| 228 | } | ||
| 215 | 229 | ||
| 216 | switch (c) { | 230 | switch (c) { |
| 217 | case 'V': /* version */ | 231 | case 'V': /* version */ |
| @@ -224,10 +238,11 @@ int process_arguments(int argc, char **argv) { | |||
| 224 | verbose = true; | 238 | verbose = true; |
| 225 | break; | 239 | break; |
| 226 | case 't': /* timeout period */ | 240 | case 't': /* timeout period */ |
| 227 | if (!is_integer(optarg)) | 241 | if (!is_integer(optarg)) { |
| 228 | usage_va(_("Timeout interval must be a positive integer")); | 242 | usage_va(_("Timeout interval must be a positive integer")); |
| 229 | else | 243 | } else { |
| 230 | timeout_interval = atoi(optarg); | 244 | timeout_interval = atoi(optarg); |
| 245 | } | ||
| 231 | break; | 246 | break; |
| 232 | case 'U': | 247 | case 'U': |
| 233 | unknown_timeout = true; | 248 | unknown_timeout = true; |
| @@ -236,8 +251,9 @@ int process_arguments(int argc, char **argv) { | |||
| 236 | hostname = optarg; | 251 | hostname = optarg; |
| 237 | break; | 252 | break; |
| 238 | case 'p': /* port number */ | 253 | case 'p': /* port number */ |
| 239 | if (!is_integer(optarg)) | 254 | if (!is_integer(optarg)) { |
| 240 | usage_va(_("Port must be a positive integer")); | 255 | usage_va(_("Port must be a positive integer")); |
| 256 | } | ||
| 241 | comm_append("-p"); | 257 | comm_append("-p"); |
| 242 | comm_append(optarg); | 258 | comm_append(optarg); |
| 243 | break; | 259 | break; |
| @@ -290,25 +306,28 @@ int process_arguments(int argc, char **argv) { | |||
| 290 | break; | 306 | break; |
| 291 | case 'C': /* Command for remote machine */ | 307 | case 'C': /* Command for remote machine */ |
| 292 | commands++; | 308 | commands++; |
| 293 | if (commands > 1) | 309 | if (commands > 1) { |
| 294 | xasprintf(&remotecmd, "%s;echo STATUS CODE: $?;", remotecmd); | 310 | xasprintf(&remotecmd, "%s;echo STATUS CODE: $?;", remotecmd); |
| 311 | } | ||
| 295 | xasprintf(&remotecmd, "%s%s", remotecmd, optarg); | 312 | xasprintf(&remotecmd, "%s%s", remotecmd, optarg); |
| 296 | break; | 313 | break; |
| 297 | case 'S': /* skip n (or all) lines on stdout */ | 314 | case 'S': /* skip n (or all) lines on stdout */ |
| 298 | if (optarg == NULL) | 315 | if (optarg == NULL) { |
| 299 | skip_stdout = -1; /* skip all output on stdout */ | 316 | skip_stdout = -1; /* skip all output on stdout */ |
| 300 | else if (!is_integer(optarg)) | 317 | } else if (!is_integer(optarg)) { |
| 301 | usage_va(_("skip-stdout argument must be an integer")); | 318 | usage_va(_("skip-stdout argument must be an integer")); |
| 302 | else | 319 | } else { |
| 303 | skip_stdout = atoi(optarg); | 320 | skip_stdout = atoi(optarg); |
| 321 | } | ||
| 304 | break; | 322 | break; |
| 305 | case 'E': /* skip n (or all) lines on stderr */ | 323 | case 'E': /* skip n (or all) lines on stderr */ |
| 306 | if (optarg == NULL) | 324 | if (optarg == NULL) { |
| 307 | skip_stderr = -1; /* skip all output on stderr */ | 325 | skip_stderr = -1; /* skip all output on stderr */ |
| 308 | else if (!is_integer(optarg)) | 326 | } else if (!is_integer(optarg)) { |
| 309 | usage_va(_("skip-stderr argument must be an integer")); | 327 | usage_va(_("skip-stderr argument must be an integer")); |
| 310 | else | 328 | } else { |
| 311 | skip_stderr = atoi(optarg); | 329 | skip_stderr = atoi(optarg); |
| 330 | } | ||
| 312 | break; | 331 | break; |
| 313 | case 'W': /* exit with warning if there is an output on stderr */ | 332 | case 'W': /* exit with warning if there is an output on stderr */ |
| 314 | warn_on_stderr = 1; | 333 | warn_on_stderr = 1; |
| @@ -338,18 +357,22 @@ int process_arguments(int argc, char **argv) { | |||
| 338 | } | 357 | } |
| 339 | 358 | ||
| 340 | if (strlen(remotecmd) == 0) { | 359 | if (strlen(remotecmd) == 0) { |
| 341 | for (; c < argc; c++) | 360 | for (; c < argc; c++) { |
| 342 | if (strlen(remotecmd) > 0) | 361 | if (strlen(remotecmd) > 0) { |
| 343 | xasprintf(&remotecmd, "%s %s", remotecmd, argv[c]); | 362 | xasprintf(&remotecmd, "%s %s", remotecmd, argv[c]); |
| 344 | else | 363 | } else { |
| 345 | xasprintf(&remotecmd, "%s", argv[c]); | 364 | xasprintf(&remotecmd, "%s", argv[c]); |
| 365 | } | ||
| 366 | } | ||
| 346 | } | 367 | } |
| 347 | 368 | ||
| 348 | if (commands > 1 || passive) | 369 | if (commands > 1 || passive) { |
| 349 | xasprintf(&remotecmd, "%s;echo STATUS CODE: $?;", remotecmd); | 370 | xasprintf(&remotecmd, "%s;echo STATUS CODE: $?;", remotecmd); |
| 371 | } | ||
| 350 | 372 | ||
| 351 | if (remotecmd == NULL || strlen(remotecmd) <= 1) | 373 | if (remotecmd == NULL || strlen(remotecmd) <= 1) { |
| 352 | usage_va(_("No remotecmd")); | 374 | usage_va(_("No remotecmd")); |
| 375 | } | ||
| 353 | 376 | ||
| 354 | comm_append(hostname); | 377 | comm_append(hostname); |
| 355 | comm_append(remotecmd); | 378 | comm_append(remotecmd); |
| @@ -359,25 +382,30 @@ int process_arguments(int argc, char **argv) { | |||
| 359 | 382 | ||
| 360 | void comm_append(const char *str) { | 383 | void comm_append(const char *str) { |
| 361 | 384 | ||
| 362 | if (++commargc > NP_MAXARGS) | 385 | if (++commargc > NP_MAXARGS) { |
| 363 | die(STATE_UNKNOWN, _("%s: Argument limit of %d exceeded\n"), progname, NP_MAXARGS); | 386 | die(STATE_UNKNOWN, _("%s: Argument limit of %d exceeded\n"), progname, NP_MAXARGS); |
| 387 | } | ||
| 364 | 388 | ||
| 365 | if ((commargv = (char **)realloc(commargv, (commargc + 1) * sizeof(char *))) == NULL) | 389 | if ((commargv = (char **)realloc(commargv, (commargc + 1) * sizeof(char *))) == NULL) { |
| 366 | die(STATE_UNKNOWN, _("Can not (re)allocate 'commargv' buffer\n")); | 390 | die(STATE_UNKNOWN, _("Can not (re)allocate 'commargv' buffer\n")); |
| 391 | } | ||
| 367 | 392 | ||
| 368 | commargv[commargc - 1] = strdup(str); | 393 | commargv[commargc - 1] = strdup(str); |
| 369 | commargv[commargc] = NULL; | 394 | commargv[commargc] = NULL; |
| 370 | } | 395 | } |
| 371 | 396 | ||
| 372 | int validate_arguments(void) { | 397 | int validate_arguments(void) { |
| 373 | if (remotecmd == NULL || hostname == NULL) | 398 | if (remotecmd == NULL || hostname == NULL) { |
| 374 | return ERROR; | 399 | return ERROR; |
| 400 | } | ||
| 375 | 401 | ||
| 376 | if (passive && commands != services) | 402 | if (passive && commands != services) { |
| 377 | die(STATE_UNKNOWN, _("%s: In passive mode, you must provide a service name for each command.\n"), progname); | 403 | die(STATE_UNKNOWN, _("%s: In passive mode, you must provide a service name for each command.\n"), progname); |
| 404 | } | ||
| 378 | 405 | ||
| 379 | if (passive && host_shortname == NULL) | 406 | if (passive && host_shortname == NULL) { |
| 380 | die(STATE_UNKNOWN, _("%s: In passive mode, you must provide the host short name from the monitoring configs.\n"), progname); | 407 | die(STATE_UNKNOWN, _("%s: In passive mode, you must provide the host short name from the monitoring configs.\n"), progname); |
| 408 | } | ||
| 381 | 409 | ||
| 382 | return OK; | 410 | return OK; |
| 383 | } | 411 | } |
