diff --git a/debian/patches/33_check_procs_exclude-process b/debian/patches/33_check_procs_exclude-process new file mode 100644 index 0000000..84db491 --- /dev/null +++ b/debian/patches/33_check_procs_exclude-process @@ -0,0 +1,168 @@ +From 691376d3a16da06e34740593d9a1de0e00cbffb8 Mon Sep 17 00:00:00 2001 +From: Christian Kujau +Date: Mon, 20 Mar 2023 11:35:01 +0100 +Subject: [PATCH 1/2] check_procs: Implement --exclude-process to exclude + specific processes. + +Signed-off-by: Christian Kujau +--- + plugins/check_procs.c | 47 +++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 45 insertions(+), 2 deletions(-) + +diff --git a/plugins/check_procs.c b/plugins/check_procs.c +index a025ee891..d672dd44e 100644 +--- a/plugins/check_procs.c ++++ b/plugins/check_procs.c +@@ -70,6 +70,7 @@ int options = 0; /* bitmask of filter criteria to test against */ + #define PCPU 256 + #define ELAPSED 512 + #define EREG_ARGS 1024 ++#define EXCLUDE_PROGS 2048 + + #define KTHREAD_PARENT "kthreadd" /* the parent process of kernel threads: + ppid of procs are compared to pid of this proc*/ +@@ -93,6 +94,9 @@ int rss; + float pcpu; + char *statopts; + char *prog; ++char *exclude_progs; ++char **exclude_progs_arr = NULL; ++char exclude_progs_counter = 0; + char *args; + char *input_filename = NULL; + regex_t re_args; +@@ -250,6 +254,25 @@ main (int argc, char **argv) + continue; + } + ++ /* Ignore excluded processes by name */ ++ if(options & EXCLUDE_PROGS) { ++ int found = 0; ++ int i = 0; ++ ++ for(i=0; i < (exclude_progs_counter); i++) { ++ if(!strcmp(procprog, exclude_progs_arr[i])) { ++ found = 1; ++ } ++ } ++ if(found == 0) { ++ resultsum |= EXCLUDE_PROGS; ++ } else ++ { ++ if(verbose >= 3) ++ printf("excluding - by ignorelist\n"); ++ } ++ } ++ + /* filter kernel threads (childs of KTHREAD_PARENT)*/ + /* TODO adapt for other OSes than GNU/Linux + sorry for not doing that, but I've no other OSes to test :-( */ +@@ -409,6 +432,7 @@ process_arguments (int argc, char **argv) + {"input-file", required_argument, 0, CHAR_MAX+2}, + {"no-kthreads", required_argument, 0, 'k'}, + {"traditional-filter", no_argument, 0, 'T'}, ++ {"exclude-process", required_argument, 0, 'X'}, + {0, 0, 0, 0} + }; + +@@ -417,7 +441,7 @@ process_arguments (int argc, char **argv) + strcpy (argv[c], "-t"); + + while (1) { +- c = getopt_long (argc, argv, "Vvhkt:c:w:p:s:u:C:a:z:r:m:P:T", ++ c = getopt_long (argc, argv, "Vvhkt:c:w:p:s:u:C:a:z:r:m:P:T:X:", + longopts, &option); + + if (c == -1 || c == EOF) +@@ -490,6 +514,23 @@ process_arguments (int argc, char **argv) + prog); + options |= PROG; + break; ++ case 'X': ++ if(exclude_progs) ++ break; ++ else ++ exclude_progs = optarg; ++ xasprintf (&fmt, _("%s%sexclude progs '%s'"), (fmt ? fmt : ""), (options ? ", " : ""), ++ exclude_progs); ++ char *p = strtok(exclude_progs, ","); ++ ++ while(p){ ++ exclude_progs_arr = realloc(exclude_progs_arr, sizeof(char*) * ++exclude_progs_counter); ++ exclude_progs_arr[exclude_progs_counter-1] = p; ++ p = strtok(NULL, ","); ++ } ++ ++ options |= EXCLUDE_PROGS; ++ break; + case 'a': /* args (full path name with args) */ + /* TODO: allow this to be passed in with --metric */ + if (args) +@@ -745,6 +786,8 @@ print_help (void) + printf (" %s\n", _("Only scan for processes with args that contain the regex STRING.")); + printf (" %s\n", "-C, --command=COMMAND"); + printf (" %s\n", _("Only scan for exact matches of COMMAND (without path).")); ++ printf (" %s\n", "-X, --exclude-process"); ++ printf (" %s\n", _("Exclude processes which match this comma seperated list")); + printf (" %s\n", "-k, --no-kthreads"); + printf (" %s\n", _("Only scan for non kernel threads (works on Linux only).")); + +@@ -786,5 +829,5 @@ print_usage (void) + printf ("%s\n", _("Usage:")); + printf ("%s -w -c [-m metric] [-s state] [-p ppid]\n", progname); + printf (" [-u user] [-r rss] [-z vsz] [-P %%cpu] [-a argument-array]\n"); +- printf (" [-C command] [-k] [-t timeout] [-v]\n"); ++ printf (" [-C command] [-X process_to_exclude] [-k] [-t timeout] [-v]\n"); + } + +From 7b7037280c36279ea51de07f9a4efea10bcfa24c Mon Sep 17 00:00:00 2001 +From: Christian Kujau +Date: Tue, 21 Mar 2023 11:26:03 +0100 +Subject: [PATCH 2/2] check_procs: add a test for the newly added -X option. + +$ make test +[...] +perl -I .. -I .. ../test.pl +No application (check_curl) found for test harness (check_curl.t) +No application (check_snmp) found for test harness (check_snmp.t) +./t/check_procs.t ...... ok +./tests/check_nt.t ..... ok +./tests/check_procs.t .. ok +All tests successful. +Files=4, Tests=73, 8 wallclock secs ( 0.05 usr 0.02 sys + 0.38 cusr +0.22 csys = 0.67 CPU) +Result: PASS + +Signed-off-by: Christian Kujau +--- + plugins/tests/check_procs.t | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/plugins/tests/check_procs.t b/plugins/tests/check_procs.t +index 3af218f50..b3a0a3015 100755 +--- a/plugins/tests/check_procs.t ++++ b/plugins/tests/check_procs.t +@@ -8,7 +8,7 @@ use Test::More; + use NPTest; + + if (-x "./check_procs") { +- plan tests => 52; ++ plan tests => 54; + } else { + plan skip_all => "No check_procs compiled"; + } +@@ -34,9 +34,13 @@ is( $result->return_code, 0, "Checking no threshold breeched" ); + is( $result->output, "PROCS OK: 95 processes | procs=95;100;200;0;", "Output correct" ); + + $result = NPTest->testCmd( "$command -C launchd -c 5" ); +-is( $result->return_code, 2, "Checking processes filtered by command name" ); ++is( $result->return_code, 2, "Checking processes matched by command name" ); + is( $result->output, "PROCS CRITICAL: 6 processes with command name 'launchd' | procs=6;;5;0;", "Output correct" ); + ++$result = NPTest->testCmd( "$command -X bash -c 5" ); ++is( $result->return_code, 2, "Checking processes excluded by command name" ); ++is( $result->output, "PROCS CRITICAL: 95 processes with exclude progs 'bash' | procs=95;;5;0;", "Output correct" ); ++ + SKIP: { + skip 'user with uid 501 required', 4 unless getpwuid(501); + diff --git a/debian/patches/series b/debian/patches/series index ba85676..04d0430 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -11,3 +11,4 @@ 30_check_radius_radcli_1.3.1_support 31_checl_mailq_separate_submission_queue 32_check_disk_add_ignore_missing +33_check_procs_exclude-process