From git at monitoring-plugins.org Sat Oct 5 00:30:11 2024 From: git at monitoring-plugins.org (Sven Nierlein) Date: Sat, 5 Oct 2024 00:30:11 +0200 (CEST) Subject: [monitoring-plugins] add new github test workflow for debian:testing ... Message-ID: <20241004223011.DCF132000A24@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: d7579e42495e2ad83a48d1cea258c6b708aea603 Author: Sven Nierlein Date: Wed Oct 2 11:42:22 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=d7579e4 add new github test workflow for debian:testing and fedora:rawhide this workflow runs scheduled once a week, so it does not prevent PRs from being merged but still allows us to notice if anything will go wrong with the next release. Remove rawhide test from the mandatory tests like we did with debian testing already. --- .github/workflows/test-next.yml | 77 +++++++++++++++++++++++++++++++++++++++++ .github/workflows/test.yml | 1 - 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-next.yml b/.github/workflows/test-next.yml new file mode 100644 index 0000000..083bc1e --- /dev/null +++ b/.github/workflows/test-next.yml @@ -0,0 +1,77 @@ +--- +name: Tests Debian:Testing and Fedora:Rawhide + +on: + push: + branches-ignore: + - '*' + schedule: + # Run every week on Monday at 9:00 AM (UTC) + - cron: '0 9 * * 1' + +jobs: + full-test: + name: Running unit and integrationt tests + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + distro: + - 'debian:testing' + include: + - distro: 'debian:testing' + prepare: .github/prepare_debian.sh + steps: + - name: Git clone repository + uses: actions/checkout at v4 + - name: Run the tests on ${{ matrix.distro }} + run: | + docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=100m,uid=1000 tmp-vol + docker run \ + -e NPTEST_ACCEPTDEFAULT=1 \ + -e NPTEST_CACHE="/src/.github/NPTest.cache" \ + -w /src -v ${PWD}:/src \ + --tmpfs /media/ramdisk1 \ + -v /var/run/utmp:/var/run/utmp \ + --mount source=tmp-vol,destination=/src,target=/media/ramdisk2 \ + ${{ matrix.distro }} \ + /bin/sh -c '${{ matrix.prepare }} && \ + tools/setup && \ + ./configure --enable-libtap --with-ipv6=no && \ + make && \ + make test && \ + make dist && \ + tar zxf monitoring-plugins-*.tar.gz && \ + cd monitoring-plugins-*/ && \ + ./configure && \ + make' + docker container prune -f + docker volume prune -f + + build-test: + name: Running rpm build test on ${{ matrix.distro }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - {"distro": "fedora:rawhide", "build": ".github/mock.sh"} + steps: + - name: Git clone repository + uses: actions/checkout at v4 + - name: Run the tests on ${{ matrix.distro }} + run: | + docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=100m,uid=1000 tmp-vol + docker run \ + --privileged=true \ + -e NPTEST_ACCEPTDEFAULT=1 \ + -e NPTEST_CACHE="/src/.github/NPTest.cache" \ + -w /src -v ${PWD}:/src \ + --tmpfs /media/ramdisk1 \ + -v /var/run/utmp:/var/run/utmp \ + --mount source=tmp-vol,destination=/src,target=/media/ramdisk2 \ + ${{ matrix.distro }} \ + /bin/sh -c '${{ matrix.build }} && \ + ls -la' + docker container prune -f + docker volume prune -f diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 33220d6..77ca658 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -54,7 +54,6 @@ jobs: matrix: include: - {"distro": "fedora:latest", "build": ".github/mock.sh"} - - {"distro": "fedora:rawhide", "build": ".github/mock.sh"} - {"distro": "rockylinux:8", "build": ".github/mock.sh"} - {"distro": "almalinux:9", "build": ".github/mock.sh"} # - {"distro": "oraclelinux:9", "build": ".github/mock.sh"} From git at monitoring-plugins.org Sat Oct 5 00:30:11 2024 From: git at monitoring-plugins.org (Sven Nierlein) Date: Sat, 5 Oct 2024 00:30:11 +0200 (CEST) Subject: [monitoring-plugins] add manual workflow trigger Message-ID: <20241004223011.ED0ED2000A25@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 2558e488f35334d75f662cb94dc2122f68c7740a Author: Sven Nierlein Date: Wed Oct 2 20:59:31 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=2558e48 add manual workflow trigger --- .github/workflows/test-next.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test-next.yml b/.github/workflows/test-next.yml index 083bc1e..8124075 100644 --- a/.github/workflows/test-next.yml +++ b/.github/workflows/test-next.yml @@ -2,6 +2,7 @@ name: Tests Debian:Testing and Fedora:Rawhide on: + workflow_dispatch: {} push: branches-ignore: - '*' From git at monitoring-plugins.org Sat Oct 5 00:30:12 2024 From: git at monitoring-plugins.org (GitHub) Date: Sat, 5 Oct 2024 00:30:12 +0200 (CEST) Subject: [monitoring-plugins] Merge pull request #2023 from ... Message-ID: <20241004223012.0C6AC2000A27@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 78b591d52ac05bdea98e86974411f22c55f43796 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Sat Oct 5 00:20:41 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=78b591d Merge pull request #2023 from sni/make_rawhide_tests_optional add new github test workflow for debian:testing and fedora:rawhide --- From git at monitoring-plugins.org Sun Oct 6 23:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sun, 6 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] check_curl: Fix help for state regex option Message-ID: <20241006213012.79F392000158@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 46efe803cf8e7b769ca112afc158b76510b01e46 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Mon Aug 19 15:23:41 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=46efe80 check_curl: Fix help for state regex option The help output of `check-curl` contained a typo, the real option is `state-regex` and not `regex-state` as the help suggests. Also added the two possible options to avoid confusion. --- plugins/check_curl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/check_curl.c b/plugins/check_curl.c index e9c15e6..bf46b22 100644 --- a/plugins/check_curl.c +++ b/plugins/check_curl.c @@ -2061,8 +2061,8 @@ print_help (void) printf (" %s\n", "--invert-regex"); printf (" %s\n", _("Return STATE if found, OK if not (STATE is CRITICAL, per default)")); printf (" %s\n", _("can be changed with --state--regex)")); - printf (" %s\n", "--regex-state=STATE"); - printf (" %s\n", _("Return STATE if regex is found, OK if not\n")); + printf (" %s\n", "--state-regex=STATE"); + printf (" %s\n", _("Return STATE if regex is found, OK if not\nSTATE can be one of \"critical\",\"warning\"")); printf (" %s\n", "-a, --authorization=AUTH_PAIR"); printf (" %s\n", _("Username:password on sites with basic authentication")); printf (" %s\n", "-b, --proxy-authorization=AUTH_PAIR"); From git at monitoring-plugins.org Sun Oct 6 23:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sun, 6 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] check_curl: Parse state-regex option ignoring case Message-ID: <20241006213012.8B3402000159@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: b6c72064a53da8b173b7406a0a535922dc0cc1b3 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Mon Aug 19 15:26:52 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=b6c7206 check_curl: Parse state-regex option ignoring case Previously the --state-regex option accepted only "critical" and "warning" as values. This commit changes the strcmp there to strcasecmp to be more tolerant regarding the input. --- plugins/check_curl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/check_curl.c b/plugins/check_curl.c index bf46b22..38c9710 100644 --- a/plugins/check_curl.c +++ b/plugins/check_curl.c @@ -1775,9 +1775,9 @@ process_arguments (int argc, char **argv) invert_regex = true; break; case STATE_REGEX: - if (!strcmp (optarg, "critical")) + if (!strcasecmp (optarg, "critical")) state_regex = STATE_CRITICAL; - else if (!strcmp (optarg, "warning")) + else if (!strcasecmp (optarg, "warning")) state_regex = STATE_WARNING; else usage2 (_("Invalid state-regex option"), optarg); break; From git at monitoring-plugins.org Sun Oct 6 23:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sun, 6 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] check_curl: change help for --state-regex again ... Message-ID: <20241006213012.A3046200044F@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: af097aa3642174a2111f0bbcbc8236fff0901e17 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Mon Aug 19 15:33:17 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=af097aa check_curl: change help for --state-regex again to fix formatting --- plugins/check_curl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/check_curl.c b/plugins/check_curl.c index 38c9710..214ba74 100644 --- a/plugins/check_curl.c +++ b/plugins/check_curl.c @@ -2062,7 +2062,7 @@ print_help (void) printf (" %s\n", _("Return STATE if found, OK if not (STATE is CRITICAL, per default)")); printf (" %s\n", _("can be changed with --state--regex)")); printf (" %s\n", "--state-regex=STATE"); - printf (" %s\n", _("Return STATE if regex is found, OK if not\nSTATE can be one of \"critical\",\"warning\"")); + printf (" %s\n", _("Return STATE if regex is found, OK if not. STATE can be one of \"critical\",\"warning\"")); printf (" %s\n", "-a, --authorization=AUTH_PAIR"); printf (" %s\n", _("Username:password on sites with basic authentication")); printf (" %s\n", "-b, --proxy-authorization=AUTH_PAIR"); From git at monitoring-plugins.org Sun Oct 6 23:30:12 2024 From: git at monitoring-plugins.org (GitHub) Date: Sun, 6 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] Merge branch 'master' into check_curl_regex_state Message-ID: <20241006213012.BF2F62000158@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: bc6dda5286cb23a6845d9e4fb492c6bd5212f04c Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Sun Oct 6 17:28:08 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=bc6dda5 Merge branch 'master' into check_curl_regex_state --- From git at monitoring-plugins.org Sun Oct 6 23:30:12 2024 From: git at monitoring-plugins.org (GitHub) Date: Sun, 6 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] Merge pull request #2014 from ... Message-ID: <20241006213012.E734F2000159@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 114e504403d1e06eccac08e7b8d99e0614581515 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Sun Oct 6 23:24:46 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=114e504 Merge pull request #2014 from RincewindsHat/check_curl_regex_state Check curl regex state --- From git at monitoring-plugins.org Thu Oct 10 16:00:12 2024 From: git at monitoring-plugins.org (Sven Nierlein) Date: Thu, 10 Oct 2024 16:00:12 +0200 (CEST) Subject: [monitoring-plugins] fix check_curl: OpenSSL SSL_read: ... Message-ID: <20241010140012.1E8B22000158@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 3b960442485b965d853205bddeaa7f6a6b03253e Author: Sven Nierlein Committer: Sven Nierlein Date: Wed Oct 9 09:50:39 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=3b96044 fix check_curl: OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0 using check_curl on a probably embedded device responding as 'Server: GoAhead-Webs' %> check_curl -H ... -S -vvv > GET / HTTP/1.1 Host: ... User-Agent: check_curl/v2.4.0 (monitoring-plugins 2.4.0, libcurl/7.76.1 OpenSSL/3.0.7 zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.1 (+libidn2/2.3.0) libssh/0.10.4/openssl/zlib nghttp2/1.43.0) Accept: */* Connection: close * Mark bundle as not supporting multiuse * HTTP 1.0, assume close after body < HTTP/1.0 302 Redirect < Server: GoAhead-Webs < Date: Tue Mar 26 17:57:16 2019 < Cache-Control: no-cache, no-store, must-revalidate,private < Pragma: no-cache < Expires: 0 < Content-Type: text/html < X-Frame-Options: sameorigin < X-XSS-Protection: 1; mode=block < X-Content-Type-Options: nosniff < Location: https://... < * OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0 * Closing connection 0 reading the discussion on https://github.com/openssl/openssl/discussions/22690 suggest to set the option SSL_OP_IGNORE_UNEXPECTED_EOF which makes check_curl behave like check_http at this point. Since this is a rather new flag, fencing it in ifdefs. And since there can only be one ssl ctx function, we need to move both tasks into one function. --- plugins/check_curl.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/plugins/check_curl.c b/plugins/check_curl.c index 7f45b5a..d3bddac 100644 --- a/plugins/check_curl.c +++ b/plugins/check_curl.c @@ -214,6 +214,7 @@ char *client_privkey = NULL; char *ca_cert = NULL; bool verify_peer_and_host = false; bool is_openssl_callback = false; +bool add_sslctx_verify_fun = false; #if defined(HAVE_SSL) && defined(USE_OPENSSL) X509 *cert = NULL; #endif /* defined(HAVE_SSL) && defined(USE_OPENSSL) */ @@ -299,7 +300,7 @@ main (int argc, char **argv) int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) { - (void) preverify_ok; + (void) preverify_ok; /* TODO: we get all certificates of the chain, so which ones * should we test? * TODO: is the last certificate always the server certificate? @@ -324,9 +325,18 @@ int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) CURLcode sslctxfun(CURL *curl, SSL_CTX *sslctx, void *parm) { - (void) curl; // ignore unused parameter - (void) parm; // ignore unused parameter - SSL_CTX_set_verify(sslctx, SSL_VERIFY_PEER, verify_callback); + (void) curl; // ignore unused parameter + (void) parm; // ignore unused parameter + if(add_sslctx_verify_fun) { + SSL_CTX_set_verify(sslctx, SSL_VERIFY_PEER, verify_callback); + } + + // workaround for issue: + // OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0 + // see discussion https://github.com/openssl/openssl/discussions/22690 +#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF + SSL_CTX_set_options(sslctx, SSL_OP_IGNORE_UNEXPECTED_EOF); +#endif return CURLE_OK; } @@ -678,9 +688,8 @@ check_http (void) * OpenSSL-style libraries only!) */ #ifdef USE_OPENSSL /* libcurl and monitoring plugins built with OpenSSL, good */ - handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslctxfun), "CURLOPT_SSL_CTX_FUNCTION"); + add_sslctx_verify_fun = true; is_openssl_callback = true; -#else /* USE_OPENSSL */ #endif /* USE_OPENSSL */ /* libcurl is built with OpenSSL, monitoring plugins, so falling * back to manually extracting certificate information */ @@ -713,12 +722,18 @@ check_http (void) #else /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 19, 1) */ /* old libcurl, our only hope is OpenSSL, otherwise we are out of luck */ if (ssl_library == CURLHELP_SSL_LIBRARY_OPENSSL || ssl_library == CURLHELP_SSL_LIBRARY_LIBRESSL) - handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslctxfun), "CURLOPT_SSL_CTX_FUNCTION"); + add_sslctx_verify_fun = true; else die (STATE_CRITICAL, "HTTP CRITICAL - Cannot retrieve certificates (no CURLOPT_SSL_CTX_FUNCTION, no OpenSSL library or libcurl too old and has no CURLOPT_CERTINFO)\n"); #endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 19, 1) */ } +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 10, 6) /* required for CURLOPT_SSL_CTX_FUNCTION */ + // ssl ctx function is not available with all ssl backends + if (curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, NULL) != CURLE_UNKNOWN_OPTION) + handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslctxfun), "CURLOPT_SSL_CTX_FUNCTION"); +#endif + #endif /* LIBCURL_FEATURE_SSL */ /* set default or user-given user agent identification */ From git at monitoring-plugins.org Mon Oct 14 12:00:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Mon, 14 Oct 2024 12:00:12 +0200 (CEST) Subject: [monitoring-plugins] Add clang-format config file Message-ID: <20241014100012.211682000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 0bd0aaa186efeaac815befc4ae32af6b1da74244 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 10 22:06:33 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0bd0aaa Add clang-format config file --- .clang-format | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..c7f0b5e --- /dev/null +++ b/.clang-format @@ -0,0 +1,10 @@ +BasedOnStyle: LLVM +UseTab: ForContinuationAndIndentation +IndentWidth: 4 +TabWidth: 4 +AllowShortIfStatementsOnASingleLine: false +BreakBeforeBraces: Attach +AlignConsecutiveMacros: true +ColumnLimit: 180 +IndentPPDirectives: AfterHash +SortIncludes: Never From git at monitoring-plugins.org Mon Oct 14 12:00:12 2024 From: git at monitoring-plugins.org (GitHub) Date: Mon, 14 Oct 2024 12:00:12 +0200 (CEST) Subject: [monitoring-plugins] Merge pull request #2026 from ... Message-ID: <20241014100012.2D7CB2000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 9a051790ad6089860ec16d82da6004fb89bbe8a7 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Mon Oct 14 11:54:43 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=9a05179 Merge pull request #2026 from RincewindsHat/clang-format-config Add clang-format config file --- From git at monitoring-plugins.org Tue Oct 15 10:50:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Tue, 15 Oct 2024 10:50:12 +0200 (CEST) Subject: [monitoring-plugins] Adapt the hints to coding style in the CODING file Message-ID: <20241015085012.438E42000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 990e48b7119fe547f93a6283db78420dfd30d5bc Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 09:05:00 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=990e48b Adapt the hints to coding style in the CODING file --- CODING | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/CODING b/CODING index 74438e7..d0673e7 100644 --- a/CODING +++ b/CODING @@ -7,33 +7,20 @@ readability in a wide range of environments. 1. C Language Programming -All code should comply with the requirements of the Free Software +All code should comply with most of the requirements of the Free Software Foundation Coding standards (which are currently available at -http://www.gnu.org/prep/standards_toc.html). We also follow most of -the FSF guidelines. Developers may suggest deviations from the FSF +https://www.gnu.org/prep/standards/standards.html ). +We also follow most of the FSF guidelines, with the huge and explicit +exception of the style guidelines. +Developers may suggest deviations from the FSF style recommendations, which will be considered by open discussion on -the Monitoring Plugins devel mailing list. Any such deviations will -apply to the entire code base to ensure consistency. - -Currently, the exceptions to FSF recommendations are roughly equivalent -to GNU indent with invoked as 'indent -ts 2 -br'. Specifically, the -exceptions are as follows: - -a) leading white space for a statement should be formatted as tabs, -with one tab for each code indentation level. - -b) in statement continuation lines, format whitespace up to the column -starting the statement as tabs, format the rest as spaces (this -results in code that is legible regardless of tab-width setting). - -c) with the exception of the above, tabs should generally be avoided - -d) when tab width is 2 spaces, line-length should not exceed 80 -characters - -e) The opening brace of an if or while block is on the same line as -the end of the conditional expression (the '-br' option). +the Monitoring Plugins devel mailing list or the Github Pull Request. +Any such deviations should be +applied to the entire code base to ensure consistency. +The style guideline is the following: +Whatever clang-format does with the configuration file available (.clang-format) +Apart from that, code should naturally be readable and easy to understand. 2. Perl Language Programming From git at monitoring-plugins.org Tue Oct 15 10:50:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Tue, 15 Oct 2024 10:50:12 +0200 (CEST) Subject: [monitoring-plugins] docs: update copyright and remove revision section Message-ID: <20241015085012.506E62000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 0d61e6d126817ee38582eea307c9feecf75330f9 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 09:32:09 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0d61e6d docs: update copyright and remove revision section --- doc/developer-guidelines.sgml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/doc/developer-guidelines.sgml b/doc/developer-guidelines.sgml index 37c963e..edadaad 100644 --- a/doc/developer-guidelines.sgml +++ b/doc/developer-guidelines.sgml @@ -14,15 +14,8 @@ 2013 Monitoring Plugins Development Guidelines - - - 1796 - 2007-09-24 14:51:07 -0400 (Mon, 24 Sep 2007) - - - - 2000 - 2013 + 2000 - 2024 Monitoring Plugins Development Team @@ -34,7 +27,7 @@ the plugin developers and encourage the standardization of the different kind of plugins: C, shell, perl, python, etc. - Monitoring Plugins Development Guidelines Copyright (C) 2000-2013 + Monitoring Plugins Development Guidelines Copyright (C) 2000-2024 (Monitoring Plugins Team) Permission is granted to make and distribute verbatim From git at monitoring-plugins.org Tue Oct 15 10:50:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Tue, 15 Oct 2024 10:50:12 +0200 (CEST) Subject: [monitoring-plugins] Docs: remove sections about translation Message-ID: <20241015085012.65F922000126@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 2b1b5c1ce9c70df9853fa4ac01d740d6a7e45d37 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 09:32:28 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=2b1b5c1 Docs: remove sections about translation This commit removes the sections about translations, because, well, we removed translations a while ago. The documentation should reflect that. --- doc/developer-guidelines.sgml | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/doc/developer-guidelines.sgml b/doc/developer-guidelines.sgml index edadaad..4186ed7 100644 --- a/doc/developer-guidelines.sgml +++ b/doc/developer-guidelines.sgml @@ -376,13 +376,6 @@ It is up to third party programs to convert the Monitoring Plugins performance data into graphs. - -
Translations - If possible, use translation tools for all output to respect the user's language - settings. See for guidelines - for the core plugins. - -
System Commands and Auxiliary Files @@ -749,32 +742,6 @@ setup the tests. Run "make test" to run all the tests. All commits will be written to a ChangeLog at release time.
- -
Translations for developers - To make the job easier for translators, please follow these guidelines: - - - Before creating new strings, check the po/monitoring-plugins.pot file to - see if a similar string - already exists - - - For help texts, break into individual options so that these can be reused - between plugins - - Try to avoid linefeeds unless you are working on a block of text - Short help is not translated - Long help has options in English language, but text translated - "Copyright" kept in English - Copyright holder names kept in original text - Debugging output does not need to be translated - -
- -
Translations for translators - To create an up to date list of translatable strings, run: tools/gen_locale.sh -
-
Submission of new plugins and patches From git at monitoring-plugins.org Tue Oct 15 10:50:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Tue, 15 Oct 2024 10:50:12 +0200 (CEST) Subject: [monitoring-plugins] Adapted the coding guidelines slightly + typo Message-ID: <20241015085012.787A42000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 1b293a4032dfa87b8eeee5695ebe0c74a2b9a413 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 09:33:34 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=1b293a4 Adapted the coding guidelines slightly + typo --- doc/developer-guidelines.sgml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/developer-guidelines.sgml b/doc/developer-guidelines.sgml index 4186ed7..0afa733 100644 --- a/doc/developer-guidelines.sgml +++ b/doc/developer-guidelines.sgml @@ -713,19 +713,18 @@ setup the tests. Run "make test" to run all the tests.
Coding guidelines See GNU - Coding standards for general guidelines. + Coding standards for general guidelines. + Some parts of the guidelines (namely and explicitly the coding style) + are not seen as best practice by us.
C coding - Variables should be declared at the beginning of code blocks and - not inline because of portability with older compilers. - You should use the type "bool" and its values "true" and "false" instead of the "int" type for booleans.
Crediting sources - If you have copied a routine from another source, make sure the licence + If you have copied a routine from another source, make sure the license from your source allows this. Add a comment referencing the ACKNOWLEDGEMENTS file, where you can put more detail about the source. For contributed code, do not add any named credits in the source code From git at monitoring-plugins.org Tue Oct 15 10:50:12 2024 From: git at monitoring-plugins.org (GitHub) Date: Tue, 15 Oct 2024 10:50:12 +0200 (CEST) Subject: [monitoring-plugins] Merge pull request #2027 from ... Message-ID: <20241015085012.8D0F12000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 7fb58ce783285a983964d219fff18eba9b12e1e4 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Tue Oct 15 10:45:12 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=7fb58ce Merge pull request #2027 from RincewindsHat/docs-update Docs update --- From git at monitoring-plugins.org Tue Oct 15 23:30:11 2024 From: git at monitoring-plugins.org (GitHub) Date: Tue, 15 Oct 2024 23:30:11 +0200 (CEST) Subject: [monitoring-plugins] Merge branch 'master' into master Message-ID: <20241015213011.E29DB2000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 5077120a251980b4fafed61b4aa8fa5730a85443 Author: Lorenz <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Fri Mar 10 11:33:25 2023 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=5077120 Merge branch 'master' into master --- From git at monitoring-plugins.org Tue Oct 15 23:30:11 2024 From: git at monitoring-plugins.org (GitHub) Date: Tue, 15 Oct 2024 23:30:11 +0200 (CEST) Subject: [monitoring-plugins] Merge branch 'master' into master Message-ID: <20241015213012.010612000126@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: a99db0243baa5d208c5d500a9bde86b4619cec92 Author: Lorenz <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Sat Mar 11 21:30:47 2023 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=a99db02 Merge branch 'master' into master --- From git at monitoring-plugins.org Tue Oct 15 23:30:12 2024 From: git at monitoring-plugins.org (GitHub) Date: Tue, 15 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] Merge branch 'master' into master Message-ID: <20241015213012.13C5E2000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: a5ba424f85153b1ddaaf5e5269c82f0f049828d0 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Wed Sep 20 08:16:11 2023 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=a5ba424 Merge branch 'master' into master --- From git at monitoring-plugins.org Tue Oct 15 23:30:11 2024 From: git at monitoring-plugins.org (Alexandre Anriot) Date: Tue, 15 Oct 2024 23:30:11 +0200 (CEST) Subject: [monitoring-plugins] Add -d switch to exclude ifs on a per desc basis Message-ID: <20241015213011.D61B82000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: a3de84594104ac87a91e200d569fb57edacca928 Author: Alexandre Anriot Date: Wed Jun 10 20:46:27 2020 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=a3de845 Add -d switch to exclude ifs on a per desc basis --- plugins-scripts/check_ifstatus.pl | 45 ++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/plugins-scripts/check_ifstatus.pl b/plugins-scripts/check_ifstatus.pl index 32984e5..0ae3b4c 100755 --- a/plugins-scripts/check_ifstatus.pl +++ b/plugins-scripts/check_ifstatus.pl @@ -97,11 +97,12 @@ my $opt_V ; my $opt_u; my $opt_n; my $opt_x ; +my $opt_d; my %excluded ; my %unused_names ; my @unused_ports ; my %session_opts; - +my @exclude_descriptions; @@ -134,6 +135,7 @@ if (!defined($session)) { } +push(@snmpoids,$snmpLocIfDescr); push(@snmpoids,$snmpIfOperStatus); push(@snmpoids,$snmpIfAdminStatus); push(@snmpoids,$snmpIfDescr); @@ -180,18 +182,28 @@ foreach $key (keys %ifStatus) { if ($ifStatus{$key}{$snmpIfAdminStatus} == 1 ) { #check only if interface is not excluded if (!defined $unused_names{$ifStatus{$key}{$snmpIfDescr}} ) { - # check only if interface type is not listed in %excluded - if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) { - if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ; } - if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) { - $ifdown++ ; - if (defined $ifXTable) { - $ifmessage .= sprintf("%s: down -> %s
\n", $ifStatus{$key}{$snmpIfName}, $ifStatus{$key}{$snmpIfAlias}); - }else{ - $ifmessage .= sprintf("%s: down
\n",$ifStatus{$key}{$snmpIfDescr}); - } + #check only if interface is not excluded (by description) + #counter for matching descriptions + my $match_descr = 0; + foreach my $description (@exclude_descriptions) { + if ($ifStatus{$key}{$snmpLocIfDescr} =~ /^$description/) { $match_descr = 1; } + } + if ($match_descr == 0) { + # check only if interface type is not listed in %excluded + if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) { + if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ; } + if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) { + $ifdown++ ; + if (defined $ifXTable) { + $ifmessage .= sprintf("%s: down -> %s
\n", $ifStatus{$key}{$snmpIfName}, $ifStatus{$key}{$snmpIfAlias}); + }else{ + $ifmessage .= sprintf("%s: down
\n",$ifStatus{$key}{$snmpIfDescr}); + } + } + if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;} + } else { + $ifexclude++; } - if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;} } else { $ifexclude++; } @@ -264,6 +276,9 @@ sub print_help() { printf " the descriptive name. Do not use if you don't know what this is. \n"; printf " -x (--exclude) A comma separated list of ifType values that should be excluded \n"; printf " from the report (default for an empty list is PPP(23).\n"; + printf " -d (--exclude_ports_by_description) A comma separated list of LocIfDescr values that should be excluded \n"; + printf " from the report (default is an empty exclusion list). Done using regexp '/^arg/', ex:\n"; + printf " '-d connect,test' will match with descriptions like 'testing phase' but not 'in testing'.\n"; printf " -n (--unused_ports_by_name) A comma separated list of ifDescr values that should be excluded \n"; printf " from the report (default is an empty exclusion list).\n"; printf " -u (--unused_ports) A comma separated list of ifIndex values that should be excluded \n"; @@ -306,6 +321,7 @@ sub process_arguments() { "I" => \$ifXTable, "ifmib" => \$ifXTable, "x:s" => \$opt_x, "exclude:s" => \$opt_x, "u=s" => \$opt_u, "unused_ports=s" => \$opt_u, + "d=s" => \$opt_d, "exclude_ports_by_description=s" => \$opt_d, "n=s" => \$opt_n, "unused_ports_by_name=s" => \$opt_n, "M=i" => \$maxmsgsize, "maxmsgsize=i" => \$maxmsgsize, "t=i" => \$timeout, "timeout=i" => \$timeout, @@ -414,6 +430,11 @@ sub process_arguments() { } } + # Exclude interfaces by descriptions + if (defined $opt_d) { + @exclude_descriptions = split(/,/,$opt_d); + } + # Excluded interface descriptors if (defined $opt_n) { my @unused = split(/,/,$opt_n); From git at monitoring-plugins.org Tue Oct 15 23:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Tue, 15 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] check_dhcp: clang-format Message-ID: <20241015213012.280FD2000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 3934457c2a531b86d8dd7ceeebf4e0fbb7c83387 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 16:00:07 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=3934457 check_dhcp: clang-format --- plugins-root/check_dhcp.c | 1149 +++++++++++++++++++++------------------------ 1 file changed, 548 insertions(+), 601 deletions(-) diff --git a/plugins-root/check_dhcp.c b/plugins-root/check_dhcp.c index 4b8f5e2..4f50a5c 100644 --- a/plugins-root/check_dhcp.c +++ b/plugins-root/check_dhcp.c @@ -59,45 +59,45 @@ const char *email = "devel at monitoring-plugins.org"; #include #if HAVE_SYS_SOCKIO_H -#include +# include #endif // HAVE_SYS_SOCKIO_H -#if defined( __linux__ ) +#if defined(__linux__) -#include -#include +# include +# include -#elif defined (__bsd__) +#elif defined(__bsd__) -#include -#include -#include -#include +# include +# include +# include +# include #elif defined(__sun__) || defined(__solaris__) || defined(__hpux__) -#define INSAP 22 -#define OUTSAP 24 +# define INSAP 22 +# define OUTSAP 24 -#include -#include -#include -#include -#include +# include +# include +# include +# include +# include -#define bcopy(source, destination, length) memcpy(destination, source, length) +# define bcopy(source, destination, length) memcpy(destination, source, length) -#define AREA_SZ 5000 /* buffer length in bytes */ +# define AREA_SZ 5000 /* buffer length in bytes */ static u_long ctl_area[AREA_SZ]; static u_long dat_area[AREA_SZ]; static struct strbuf ctl = {AREA_SZ, 0, (char *)ctl_area}; static struct strbuf dat = {AREA_SZ, 0, (char *)dat_area}; -#define GOT_CTRL 1 -#define GOT_DATA 2 -#define GOT_BOTH 3 -#define GOT_INTR 4 -#define GOT_ERR 128 +# define GOT_CTRL 1 +# define GOT_DATA 2 +# define GOT_BOTH 3 +# define GOT_INTR 4 +# define GOT_ERR 128 static int get_msg(int); static int check_ctrl(int); @@ -105,178 +105,168 @@ static int put_ctrl(int, int, int); static int put_both(int, int, int, int); static int dl_open(const char *, int, int *); static int dl_bind(int, int, u_char *); -long mac_addr_dlpi( const char *, int, u_char *); +long mac_addr_dlpi(const char *, int, u_char *); #endif // __sun__ || __solaris__ || __hpux - - /**** Common definitions ****/ -#define OK 0 -#define ERROR -1 - +#define OK 0 +#define ERROR -1 /**** DHCP definitions ****/ -#define MAX_DHCP_CHADDR_LENGTH 16 -#define MAX_DHCP_SNAME_LENGTH 64 -#define MAX_DHCP_FILE_LENGTH 128 -#define MAX_DHCP_OPTIONS_LENGTH 312 - - -typedef struct dhcp_packet_struct{ - uint8_t op; /* packet type */ - uint8_t htype; /* type of hardware address for this machine (Ethernet, etc) */ - uint8_t hlen; /* length of hardware address (of this machine) */ - uint8_t hops; /* hops */ - uint32_t xid; /* random transaction id number - chosen by this machine */ - uint16_t secs; /* seconds used in timing */ - uint16_t flags; /* flags */ - struct in_addr ciaddr; /* IP address of this machine (if we already have one) */ - struct in_addr yiaddr; /* IP address of this machine (offered by the DHCP server) */ - struct in_addr siaddr; /* IP address of next server */ - struct in_addr giaddr; /* IP address of DHCP relay */ - unsigned char chaddr [MAX_DHCP_CHADDR_LENGTH]; /* hardware address of this machine */ - char sname [MAX_DHCP_SNAME_LENGTH]; /* name of DHCP server */ - char file [MAX_DHCP_FILE_LENGTH]; /* boot file name (used for diskless booting?) */ - char options[MAX_DHCP_OPTIONS_LENGTH]; /* options */ -}dhcp_packet; - - -typedef struct dhcp_offer_struct{ - struct in_addr server_address; /* address of DHCP server that sent this offer */ - struct in_addr offered_address; /* the IP address that was offered to us */ +#define MAX_DHCP_CHADDR_LENGTH 16 +#define MAX_DHCP_SNAME_LENGTH 64 +#define MAX_DHCP_FILE_LENGTH 128 +#define MAX_DHCP_OPTIONS_LENGTH 312 + +typedef struct dhcp_packet_struct { + uint8_t op; /* packet type */ + uint8_t htype; /* type of hardware address for this machine (Ethernet, etc) */ + uint8_t hlen; /* length of hardware address (of this machine) */ + uint8_t hops; /* hops */ + uint32_t xid; /* random transaction id number - chosen by this machine */ + uint16_t secs; /* seconds used in timing */ + uint16_t flags; /* flags */ + struct in_addr ciaddr; /* IP address of this machine (if we already have one) */ + struct in_addr yiaddr; /* IP address of this machine (offered by the DHCP server) */ + struct in_addr siaddr; /* IP address of next server */ + struct in_addr giaddr; /* IP address of DHCP relay */ + unsigned char chaddr[MAX_DHCP_CHADDR_LENGTH]; /* hardware address of this machine */ + char sname[MAX_DHCP_SNAME_LENGTH]; /* name of DHCP server */ + char file[MAX_DHCP_FILE_LENGTH]; /* boot file name (used for diskless booting?) */ + char options[MAX_DHCP_OPTIONS_LENGTH]; /* options */ +} dhcp_packet; + +typedef struct dhcp_offer_struct { + struct in_addr server_address; /* address of DHCP server that sent this offer */ + struct in_addr offered_address; /* the IP address that was offered to us */ uint32_t lease_time; /* lease time in seconds */ uint32_t renewal_time; /* renewal time in seconds */ uint32_t rebinding_time; /* rebinding time in seconds */ - bool desired; /* is this offer desired (necessary in exclusive mode) */ + bool desired; /* is this offer desired (necessary in exclusive mode) */ struct dhcp_offer_struct *next; -}dhcp_offer; - +} dhcp_offer; -typedef struct requested_server_struct{ +typedef struct requested_server_struct { struct in_addr server_address; bool answered; struct requested_server_struct *next; -}requested_server; - - -#define BOOTREQUEST 1 -#define BOOTREPLY 2 - -#define DHCPDISCOVER 1 -#define DHCPOFFER 2 -#define DHCPREQUEST 3 -#define DHCPDECLINE 4 -#define DHCPACK 5 -#define DHCPNACK 6 -#define DHCPRELEASE 7 - -#define DHCP_OPTION_MESSAGE_TYPE 53 -#define DHCP_OPTION_HOST_NAME 12 -#define DHCP_OPTION_BROADCAST_ADDRESS 28 -#define DHCP_OPTION_REQUESTED_ADDRESS 50 -#define DHCP_OPTION_LEASE_TIME 51 -#define DHCP_OPTION_SERVER_IDENTIFIER 54 -#define DHCP_OPTION_RENEWAL_TIME 58 -#define DHCP_OPTION_REBINDING_TIME 59 -#define DHCP_OPTION_END 255 - -#define DHCP_INFINITE_TIME 0xFFFFFFFF +} requested_server; + +#define BOOTREQUEST 1 +#define BOOTREPLY 2 + +#define DHCPDISCOVER 1 +#define DHCPOFFER 2 +#define DHCPREQUEST 3 +#define DHCPDECLINE 4 +#define DHCPACK 5 +#define DHCPNACK 6 +#define DHCPRELEASE 7 + +#define DHCP_OPTION_MESSAGE_TYPE 53 +#define DHCP_OPTION_HOST_NAME 12 +#define DHCP_OPTION_BROADCAST_ADDRESS 28 +#define DHCP_OPTION_REQUESTED_ADDRESS 50 +#define DHCP_OPTION_LEASE_TIME 51 +#define DHCP_OPTION_SERVER_IDENTIFIER 54 +#define DHCP_OPTION_RENEWAL_TIME 58 +#define DHCP_OPTION_REBINDING_TIME 59 +#define DHCP_OPTION_END 255 + +#define DHCP_INFINITE_TIME 0xFFFFFFFF #define DHCP_BROADCAST_FLAG 32768 -#define DHCP_SERVER_PORT 67 -#define DHCP_CLIENT_PORT 68 +#define DHCP_SERVER_PORT 67 +#define DHCP_CLIENT_PORT 68 -#define ETHERNET_HARDWARE_ADDRESS 1 /* used in htype field of dhcp packet */ -#define ETHERNET_HARDWARE_ADDRESS_LENGTH 6 /* length of Ethernet hardware addresses */ +#define ETHERNET_HARDWARE_ADDRESS 1 /* used in htype field of dhcp packet */ +#define ETHERNET_HARDWARE_ADDRESS_LENGTH 6 /* length of Ethernet hardware addresses */ -bool unicast = false; /* unicast mode: mimic a DHCP relay */ -bool exclusive = false; /* exclusive mode aka "rogue DHCP server detection" */ -struct in_addr my_ip; /* our address (required for relay) */ -struct in_addr dhcp_ip; /* server to query (if in unicast mode) */ -unsigned char client_hardware_address[MAX_DHCP_CHADDR_LENGTH]=""; -unsigned char *user_specified_mac=NULL; +bool unicast = false; /* unicast mode: mimic a DHCP relay */ +bool exclusive = false; /* exclusive mode aka "rogue DHCP server detection" */ +struct in_addr my_ip; /* our address (required for relay) */ +struct in_addr dhcp_ip; /* server to query (if in unicast mode) */ +unsigned char client_hardware_address[MAX_DHCP_CHADDR_LENGTH] = ""; +unsigned char *user_specified_mac = NULL; -char network_interface_name[IFNAMSIZ]="eth0"; +char network_interface_name[IFNAMSIZ] = "eth0"; -uint32_t packet_xid=0; +uint32_t packet_xid = 0; -uint32_t dhcp_lease_time=0; -uint32_t dhcp_renewal_time=0; -uint32_t dhcp_rebinding_time=0; +uint32_t dhcp_lease_time = 0; +uint32_t dhcp_renewal_time = 0; +uint32_t dhcp_rebinding_time = 0; -int dhcpoffer_timeout=2; +int dhcpoffer_timeout = 2; -dhcp_offer *dhcp_offer_list=NULL; -requested_server *requested_server_list=NULL; +dhcp_offer *dhcp_offer_list = NULL; +requested_server *requested_server_list = NULL; -int valid_responses=0; /* number of valid DHCPOFFERs we received */ -int requested_servers=0; -int requested_responses=0; +int valid_responses = 0; /* number of valid DHCPOFFERs we received */ +int requested_servers = 0; +int requested_responses = 0; -bool request_specific_address=false; -bool received_requested_address=false; -int verbose=0; +bool request_specific_address = false; +bool received_requested_address = false; +int verbose = 0; struct in_addr requested_address; - int process_arguments(int, char **); int call_getopt(int, char **); int validate_arguments(int); void print_usage(void); void print_help(void); -void resolve_host(const char *in,struct in_addr *out); +void resolve_host(const char *in, struct in_addr *out); unsigned char *mac_aton(const char *); void print_hardware_address(const unsigned char *); -int get_hardware_address(int,char *); -int get_ip_address(int,char *); +int get_hardware_address(int, char *); +int get_ip_address(int, char *); int send_dhcp_discover(int); int get_dhcp_offer(int); int get_results(void); -int add_dhcp_offer(struct in_addr,dhcp_packet *); +int add_dhcp_offer(struct in_addr, dhcp_packet *); int free_dhcp_offer_list(void); int free_requested_server_list(void); int create_dhcp_socket(void); int close_dhcp_socket(int); -int send_dhcp_packet(void *,int,int,struct sockaddr_in *); -int receive_dhcp_packet(void *,int,int,int,struct sockaddr_in *); - +int send_dhcp_packet(void *, int, int, struct sockaddr_in *); +int receive_dhcp_packet(void *, int, int, int, struct sockaddr_in *); - -int main(int argc, char **argv){ +int main(int argc, char **argv) { int dhcp_socket; int result = STATE_UNKNOWN; - setlocale (LC_ALL, ""); - bindtextdomain (PACKAGE, LOCALEDIR); - textdomain (PACKAGE); + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); /* Parse extra opts if any */ - argv=np_extra_opts(&argc, argv, progname); + argv = np_extra_opts(&argc, argv, progname); - if(process_arguments(argc,argv)!=OK){ - usage4 (_("Could not parse arguments")); + if (process_arguments(argc, argv) != OK) { + usage4(_("Could not parse arguments")); } /* create socket for DHCP communications */ - dhcp_socket=create_dhcp_socket(); + dhcp_socket = create_dhcp_socket(); /* get hardware address of client machine */ - if(user_specified_mac!=NULL) - memcpy(client_hardware_address,user_specified_mac,6); + if (user_specified_mac != NULL) + memcpy(client_hardware_address, user_specified_mac, 6); else - get_hardware_address(dhcp_socket,network_interface_name); + get_hardware_address(dhcp_socket, network_interface_name); - if(unicast) /* get IP address of client machine */ - get_ip_address(dhcp_socket,network_interface_name); + if (unicast) /* get IP address of client machine */ + get_ip_address(dhcp_socket, network_interface_name); /* send DHCPDISCOVER packet */ send_dhcp_discover(dhcp_socket); @@ -288,7 +278,7 @@ int main(int argc, char **argv){ close_dhcp_socket(dhcp_socket); /* determine state/plugin output to return */ - result=get_results(); + result = get_results(); /* free allocated memory */ free_dhcp_offer_list(); @@ -297,34 +287,32 @@ int main(int argc, char **argv){ return result; } - - /* determines hardware address on client machine */ -int get_hardware_address(int sock,char *interface_name){ +int get_hardware_address(int sock, char *interface_name) { #if defined(__linux__) struct ifreq ifr; - strncpy((char *)&ifr.ifr_name,interface_name,sizeof(ifr.ifr_name)-1); - ifr.ifr_name[sizeof(ifr.ifr_name)-1]='\0'; + strncpy((char *)&ifr.ifr_name, interface_name, sizeof(ifr.ifr_name) - 1); + ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0'; /* try and grab hardware address of requested interface */ - if(ioctl(sock,SIOCGIFHWADDR,&ifr)<0){ - printf(_("Error: Could not get hardware address of interface '%s'\n"),interface_name); + if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) { + printf(_("Error: Could not get hardware address of interface '%s'\n"), interface_name); exit(STATE_UNKNOWN); } - memcpy(&client_hardware_address[0],&ifr.ifr_hwaddr.sa_data,6); + memcpy(&client_hardware_address[0], &ifr.ifr_hwaddr.sa_data, 6); #elif defined(__bsd__) /* King 2004 see ACKNOWLEDGEMENTS */ - size_t len; - int mib[6]; - char *buf; - unsigned char *ptr; - struct if_msghdr *ifm; - struct sockaddr_dl *sdl; + size_t len; + int mib[6]; + char *buf; + unsigned char *ptr; + struct if_msghdr *ifm; + struct sockaddr_dl *sdl; mib[0] = CTL_NET; mib[1] = AF_ROUTE; @@ -332,22 +320,22 @@ int get_hardware_address(int sock,char *interface_name){ mib[3] = AF_LINK; mib[4] = NET_RT_IFLIST; - if((mib[5] = if_nametoindex(interface_name)) == 0){ + if ((mib[5] = if_nametoindex(interface_name)) == 0) { printf(_("Error: if_nametoindex error - %s.\n"), strerror(errno)); exit(STATE_UNKNOWN); } - if(sysctl(mib, 6, NULL, &len, NULL, 0) < 0){ + if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) { printf(_("Error: Couldn't get hardware address from %s. sysctl 1 error - %s.\n"), interface_name, strerror(errno)); exit(STATE_UNKNOWN); } - if((buf = malloc(len)) == NULL){ + if ((buf = malloc(len)) == NULL) { printf(_("Error: Couldn't get hardware address from interface %s. malloc error - %s.\n"), interface_name, strerror(errno)); exit(4); } - if(sysctl(mib, 6, buf, &len, NULL, 0) < 0){ + if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) { printf(_("Error: Couldn't get hardware address from %s. sysctl 2 error - %s.\n"), interface_name, strerror(errno)); exit(STATE_UNKNOWN); } @@ -355,7 +343,7 @@ int get_hardware_address(int sock,char *interface_name){ ifm = (struct if_msghdr *)buf; sdl = (struct sockaddr_dl *)(ifm + 1); ptr = (unsigned char *)LLADDR(sdl); - memcpy(&client_hardware_address[0], ptr, 6) ; + memcpy(&client_hardware_address[0], ptr, 6); /* King 2004 */ #elif defined(__sun__) || defined(__solaris__) @@ -368,22 +356,21 @@ int get_hardware_address(int sock,char *interface_name){ /* get last number from interfacename, eg lnc0, e1000g0*/ int i; - p = interface_name + strlen(interface_name) -1; - for(i = strlen(interface_name) -1; i > 0; p--) { - if(isalpha(*p)) + p = interface_name + strlen(interface_name) - 1; + for (i = strlen(interface_name) - 1; i > 0; p--) { + if (isalpha(*p)) break; } p++; - if( p != interface_name ){ - unit = atoi(p) ; - strncat(dev, interface_name, 6) ; - } - else{ + if (p != interface_name) { + unit = atoi(p); + strncat(dev, interface_name, 6); + } else { printf(_("Error: can't find unit number in interface_name (%s) - expecting TypeNumber eg lnc0.\n"), interface_name); exit(STATE_UNKNOWN); } stat = mac_addr_dlpi(dev, unit, client_hardware_address); - if(stat != 0){ + if (stat != 0) { printf(_("Error: can't read MAC address from DLPI streams interface for device %s unit %d.\n"), dev, unit); exit(STATE_UNKNOWN); } @@ -391,11 +378,11 @@ int get_hardware_address(int sock,char *interface_name){ #elif defined(__hpux__) long stat; - char dev[20] = "/dev/dlpi" ; + char dev[20] = "/dev/dlpi"; int unit = 0; stat = mac_addr_dlpi(dev, unit, client_hardware_address); - if(stat != 0){ + if (stat != 0) { printf(_("Error: can't read MAC address from DLPI streams interface for device %s unit %d.\n"), dev, unit); exit(STATE_UNKNOWN); } @@ -406,68 +393,65 @@ int get_hardware_address(int sock,char *interface_name){ exit(STATE_UNKNOWN); #endif - if(verbose) + if (verbose) print_hardware_address(client_hardware_address); return OK; } /* determines IP address of the client interface */ -int get_ip_address(int sock,char *interface_name){ +int get_ip_address(int sock, char *interface_name) { #if defined(SIOCGIFADDR) struct ifreq ifr; - strncpy((char *)&ifr.ifr_name,interface_name,sizeof(ifr.ifr_name)-1); - ifr.ifr_name[sizeof(ifr.ifr_name)-1]='\0'; + strncpy((char *)&ifr.ifr_name, interface_name, sizeof(ifr.ifr_name) - 1); + ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0'; - if(ioctl(sock,SIOCGIFADDR,&ifr)<0){ - printf(_("Error: Cannot determine IP address of interface %s\n"), - interface_name); + if (ioctl(sock, SIOCGIFADDR, &ifr) < 0) { + printf(_("Error: Cannot determine IP address of interface %s\n"), interface_name); exit(STATE_UNKNOWN); } - my_ip=((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr; + my_ip = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr; #else printf(_("Error: Cannot get interface IP address on this platform.\n")); exit(STATE_UNKNOWN); #endif - if(verbose) - printf(_("Pretending to be relay client %s\n"),inet_ntoa(my_ip)); + if (verbose) + printf(_("Pretending to be relay client %s\n"), inet_ntoa(my_ip)); return OK; } /* sends a DHCPDISCOVER broadcast message in an attempt to find DHCP servers */ -int send_dhcp_discover(int sock){ +int send_dhcp_discover(int sock) { dhcp_packet discover_packet; struct sockaddr_in sockaddr_broadcast; unsigned short opts; - /* clear the packet data structure */ - bzero(&discover_packet,sizeof(discover_packet)); - + bzero(&discover_packet, sizeof(discover_packet)); /* boot request flag (backward compatible with BOOTP servers) */ - discover_packet.op=BOOTREQUEST; + discover_packet.op = BOOTREQUEST; /* hardware address type */ - discover_packet.htype=ETHERNET_HARDWARE_ADDRESS; + discover_packet.htype = ETHERNET_HARDWARE_ADDRESS; /* length of our hardware address */ - discover_packet.hlen=ETHERNET_HARDWARE_ADDRESS_LENGTH; + discover_packet.hlen = ETHERNET_HARDWARE_ADDRESS_LENGTH; /* * transaction ID is supposed to be random. */ - srand(time(NULL)^getpid()); - packet_xid=random(); - discover_packet.xid=htonl(packet_xid); + srand(time(NULL) ^ getpid()); + packet_xid = random(); + discover_packet.xid = htonl(packet_xid); /*discover_packet.secs=htons(65535);*/ - discover_packet.secs=0xFF; + discover_packet.secs = 0xFF; /* * server needs to know if it should broadcast or unicast its response: @@ -476,71 +460,67 @@ int send_dhcp_discover(int sock){ discover_packet.flags = unicast ? 0 : htons(DHCP_BROADCAST_FLAG); /* our hardware address */ - memcpy(discover_packet.chaddr,client_hardware_address,ETHERNET_HARDWARE_ADDRESS_LENGTH); + memcpy(discover_packet.chaddr, client_hardware_address, ETHERNET_HARDWARE_ADDRESS_LENGTH); /* first four bytes of options field is magic cookie (as per RFC 2132) */ - discover_packet.options[0]='\x63'; - discover_packet.options[1]='\x82'; - discover_packet.options[2]='\x53'; - discover_packet.options[3]='\x63'; + discover_packet.options[0] = '\x63'; + discover_packet.options[1] = '\x82'; + discover_packet.options[2] = '\x53'; + discover_packet.options[3] = '\x63'; opts = 4; /* DHCP message type is embedded in options field */ - discover_packet.options[opts++]=DHCP_OPTION_MESSAGE_TYPE; /* DHCP message type option identifier */ - discover_packet.options[opts++]='\x01'; /* DHCP message option length in bytes */ - discover_packet.options[opts++]=DHCPDISCOVER; + discover_packet.options[opts++] = DHCP_OPTION_MESSAGE_TYPE; /* DHCP message type option identifier */ + discover_packet.options[opts++] = '\x01'; /* DHCP message option length in bytes */ + discover_packet.options[opts++] = DHCPDISCOVER; /* the IP address we're requesting */ - if(request_specific_address){ - discover_packet.options[opts++]=DHCP_OPTION_REQUESTED_ADDRESS; - discover_packet.options[opts++]='\x04'; - memcpy(&discover_packet.options[opts],&requested_address,sizeof(requested_address)); + if (request_specific_address) { + discover_packet.options[opts++] = DHCP_OPTION_REQUESTED_ADDRESS; + discover_packet.options[opts++] = '\x04'; + memcpy(&discover_packet.options[opts], &requested_address, sizeof(requested_address)); opts += sizeof(requested_address); } - discover_packet.options[opts++]= (char)DHCP_OPTION_END; + discover_packet.options[opts++] = (char)DHCP_OPTION_END; /* unicast fields */ - if(unicast) + if (unicast) discover_packet.giaddr.s_addr = my_ip.s_addr; /* see RFC 1542, 4.1.1 */ discover_packet.hops = unicast ? 1 : 0; /* send the DHCPDISCOVER packet to broadcast address */ - sockaddr_broadcast.sin_family=AF_INET; - sockaddr_broadcast.sin_port=htons(DHCP_SERVER_PORT); + sockaddr_broadcast.sin_family = AF_INET; + sockaddr_broadcast.sin_port = htons(DHCP_SERVER_PORT); sockaddr_broadcast.sin_addr.s_addr = unicast ? dhcp_ip.s_addr : INADDR_BROADCAST; - bzero(&sockaddr_broadcast.sin_zero,sizeof(sockaddr_broadcast.sin_zero)); - - - if(verbose){ - printf(_("DHCPDISCOVER to %s port %d\n"),inet_ntoa(sockaddr_broadcast.sin_addr),ntohs(sockaddr_broadcast.sin_port)); - printf("DHCPDISCOVER XID: %u (0x%X)\n",ntohl(discover_packet.xid),ntohl(discover_packet.xid)); - printf("DHCDISCOVER ciaddr: %s\n",inet_ntoa(discover_packet.ciaddr)); - printf("DHCDISCOVER yiaddr: %s\n",inet_ntoa(discover_packet.yiaddr)); - printf("DHCDISCOVER siaddr: %s\n",inet_ntoa(discover_packet.siaddr)); - printf("DHCDISCOVER giaddr: %s\n",inet_ntoa(discover_packet.giaddr)); + bzero(&sockaddr_broadcast.sin_zero, sizeof(sockaddr_broadcast.sin_zero)); + + if (verbose) { + printf(_("DHCPDISCOVER to %s port %d\n"), inet_ntoa(sockaddr_broadcast.sin_addr), ntohs(sockaddr_broadcast.sin_port)); + printf("DHCPDISCOVER XID: %u (0x%X)\n", ntohl(discover_packet.xid), ntohl(discover_packet.xid)); + printf("DHCDISCOVER ciaddr: %s\n", inet_ntoa(discover_packet.ciaddr)); + printf("DHCDISCOVER yiaddr: %s\n", inet_ntoa(discover_packet.yiaddr)); + printf("DHCDISCOVER siaddr: %s\n", inet_ntoa(discover_packet.siaddr)); + printf("DHCDISCOVER giaddr: %s\n", inet_ntoa(discover_packet.giaddr)); } /* send the DHCPDISCOVER packet out */ - send_dhcp_packet(&discover_packet,sizeof(discover_packet),sock,&sockaddr_broadcast); + send_dhcp_packet(&discover_packet, sizeof(discover_packet), sock, &sockaddr_broadcast); - if(verbose) + if (verbose) printf("\n\n"); return OK; } - - - /* waits for a DHCPOFFER message from one or more DHCP servers */ -int get_dhcp_offer(int sock){ +int get_dhcp_offer(int sock) { dhcp_packet offer_packet; struct sockaddr_in source; struct sockaddr_in via; - int result=OK; - int responses=0; + int result = OK; + int responses = 0; int x; time_t start_time; time_t current_time; @@ -548,30 +528,29 @@ int get_dhcp_offer(int sock){ time(&start_time); /* receive as many responses as we can */ - for(responses=0,valid_responses=0;;){ + for (responses = 0, valid_responses = 0;;) { time(¤t_time); - if((current_time-start_time)>=dhcpoffer_timeout) + if ((current_time - start_time) >= dhcpoffer_timeout) break; - if(verbose) + if (verbose) printf("\n\n"); - bzero(&source,sizeof(source)); - bzero(&via,sizeof(via)); - bzero(&offer_packet,sizeof(offer_packet)); + bzero(&source, sizeof(source)); + bzero(&via, sizeof(via)); + bzero(&offer_packet, sizeof(offer_packet)); - result=OK; - result=receive_dhcp_packet(&offer_packet,sizeof(offer_packet),sock,dhcpoffer_timeout,&source); + result = OK; + result = receive_dhcp_packet(&offer_packet, sizeof(offer_packet), sock, dhcpoffer_timeout, &source); - if(result!=OK){ - if(verbose) + if (result != OK) { + if (verbose) printf(_("Result=ERROR\n")); continue; - } - else{ - if(verbose) + } else { + if (verbose) printf(_("Result=OK\n")); responses++; @@ -579,85 +558,81 @@ int get_dhcp_offer(int sock){ /* The "source" is either a server or a relay. */ /* Save a copy of "source" into "via" even if it's via itself */ - memcpy(&via,&source,sizeof(source)) ; + memcpy(&via, &source, sizeof(source)); - if(verbose){ - printf(_("DHCPOFFER from IP address %s"),inet_ntoa(source.sin_addr)); - printf(_(" via %s\n"),inet_ntoa(via.sin_addr)); - printf("DHCPOFFER XID: %u (0x%X)\n",ntohl(offer_packet.xid),ntohl(offer_packet.xid)); + if (verbose) { + printf(_("DHCPOFFER from IP address %s"), inet_ntoa(source.sin_addr)); + printf(_(" via %s\n"), inet_ntoa(via.sin_addr)); + printf("DHCPOFFER XID: %u (0x%X)\n", ntohl(offer_packet.xid), ntohl(offer_packet.xid)); } /* check packet xid to see if its the same as the one we used in the discover packet */ - if(ntohl(offer_packet.xid)!=packet_xid){ - if(verbose) - printf(_("DHCPOFFER XID (%u) did not match DHCPDISCOVER XID (%u) - ignoring packet\n"),ntohl(offer_packet.xid),packet_xid); + if (ntohl(offer_packet.xid) != packet_xid) { + if (verbose) + printf(_("DHCPOFFER XID (%u) did not match DHCPDISCOVER XID (%u) - ignoring packet\n"), ntohl(offer_packet.xid), packet_xid); continue; } /* check hardware address */ - result=OK; - if(verbose) + result = OK; + if (verbose) printf("DHCPOFFER chaddr: "); - for(x=0;x %s\n",errno,strerror(errno)); + printf("errno: (%d) -> %s\n", errno, strerror(errno)); } return ERROR; - } - else{ - if(verbose){ - printf(_("receive_dhcp_packet() result: %d\n"),recv_result); - printf(_("receive_dhcp_packet() source: %s\n"),inet_ntoa(source_address.sin_addr)); + } else { + if (verbose) { + printf(_("receive_dhcp_packet() result: %d\n"), recv_result); + printf(_("receive_dhcp_packet() source: %s\n"), inet_ntoa(source_address.sin_addr)); } - memcpy(address,&source_address,sizeof(source_address)); + memcpy(address, &source_address, sizeof(source_address)); return OK; } } @@ -711,172 +684,166 @@ int receive_dhcp_packet(void *buffer, int buffer_size, int sock, int timeout, st return OK; } - /* creates a socket for DHCP communication */ -int create_dhcp_socket(void){ +int create_dhcp_socket(void) { struct sockaddr_in myname; struct ifreq interface; int sock; - int flag=1; + int flag = 1; /* Set up the address we're going to bind to. */ - bzero(&myname,sizeof(myname)); - myname.sin_family=AF_INET; + bzero(&myname, sizeof(myname)); + myname.sin_family = AF_INET; /* listen to DHCP server port if we're in unicast mode */ myname.sin_port = htons(unicast ? DHCP_SERVER_PORT : DHCP_CLIENT_PORT); myname.sin_addr.s_addr = unicast ? my_ip.s_addr : INADDR_ANY; - bzero(&myname.sin_zero,sizeof(myname.sin_zero)); + bzero(&myname.sin_zero, sizeof(myname.sin_zero)); /* create a socket for DHCP communications */ - sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); - if(sock<0){ + sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (sock < 0) { printf(_("Error: Could not create socket!\n")); exit(STATE_UNKNOWN); } - if(verbose) - printf("DHCP socket: %d\n",sock); + if (verbose) + printf("DHCP socket: %d\n", sock); /* set the reuse address flag so we don't get errors when restarting */ - flag=1; - if(setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(char *)&flag,sizeof(flag))<0){ + flag = 1; + if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof(flag)) < 0) { printf(_("Error: Could not set reuse address option on DHCP socket!\n")); exit(STATE_UNKNOWN); } /* set the broadcast option - we need this to listen to DHCP broadcast messages */ - if(!unicast && setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char *)&flag,sizeof flag)<0){ + if (!unicast && setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&flag, sizeof flag) < 0) { printf(_("Error: Could not set broadcast option on DHCP socket!\n")); exit(STATE_UNKNOWN); } /* bind socket to interface */ #if defined(__linux__) - strncpy(interface.ifr_ifrn.ifrn_name,network_interface_name,IFNAMSIZ-1); - interface.ifr_ifrn.ifrn_name[IFNAMSIZ-1]='\0'; - if(setsockopt(sock,SOL_SOCKET,SO_BINDTODEVICE,(char *)&interface,sizeof(interface))<0){ - printf(_("Error: Could not bind socket to interface %s. Check your privileges...\n"),network_interface_name); + strncpy(interface.ifr_ifrn.ifrn_name, network_interface_name, IFNAMSIZ - 1); + interface.ifr_ifrn.ifrn_name[IFNAMSIZ - 1] = '\0'; + if (setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, (char *)&interface, sizeof(interface)) < 0) { + printf(_("Error: Could not bind socket to interface %s. Check your privileges...\n"), network_interface_name); exit(STATE_UNKNOWN); } #else - strncpy(interface.ifr_name,network_interface_name,IFNAMSIZ-1); - interface.ifr_name[IFNAMSIZ-1]='\0'; + strncpy(interface.ifr_name, network_interface_name, IFNAMSIZ - 1); + interface.ifr_name[IFNAMSIZ - 1] = '\0'; #endif /* bind the socket */ - if(bind(sock,(struct sockaddr *)&myname,sizeof(myname))<0){ - printf(_("Error: Could not bind to DHCP socket (port %d)! Check your privileges...\n"),DHCP_CLIENT_PORT); + if (bind(sock, (struct sockaddr *)&myname, sizeof(myname)) < 0) { + printf(_("Error: Could not bind to DHCP socket (port %d)! Check your privileges...\n"), DHCP_CLIENT_PORT); exit(STATE_UNKNOWN); } return sock; } - /* closes DHCP socket */ -int close_dhcp_socket(int sock){ +int close_dhcp_socket(int sock) { close(sock); return OK; } - /* adds a requested server address to list in memory */ -int add_requested_server(struct in_addr server_address){ +int add_requested_server(struct in_addr server_address) { requested_server *new_server; - new_server=(requested_server *)malloc(sizeof(requested_server)); - if(new_server==NULL) + new_server = (requested_server *)malloc(sizeof(requested_server)); + if (new_server == NULL) return ERROR; - new_server->server_address=server_address; - new_server->answered=false; + new_server->server_address = server_address; + new_server->answered = false; - new_server->next=requested_server_list; - requested_server_list=new_server; + new_server->next = requested_server_list; + requested_server_list = new_server; requested_servers++; - if(verbose) - printf(_("Requested server address: %s\n"),inet_ntoa(new_server->server_address)); + if (verbose) + printf(_("Requested server address: %s\n"), inet_ntoa(new_server->server_address)); return OK; } - - - /* adds a DHCP OFFER to list in memory */ -int add_dhcp_offer(struct in_addr source,dhcp_packet *offer_packet){ +int add_dhcp_offer(struct in_addr source, dhcp_packet *offer_packet) { dhcp_offer *new_offer; int x; unsigned option_type; unsigned option_length; struct in_addr serv_ident = {0}; - if(offer_packet==NULL) + if (offer_packet == NULL) return ERROR; /* process all DHCP options present in the packet */ - for(x=4;xoptions[x]==-1) + if ((int)offer_packet->options[x] == -1) break; /* get option type */ - option_type=offer_packet->options[x++]; + option_type = offer_packet->options[x++]; /* get option length */ - option_length=offer_packet->options[x++]; + option_length = offer_packet->options[x++]; - if(verbose) - printf("Option: %d (0x%02X)\n",option_type,option_length); + if (verbose) + printf("Option: %d (0x%02X)\n", option_type, option_length); /* get option data */ - switch(option_type){ - case DHCP_OPTION_LEASE_TIME: - memcpy(&dhcp_lease_time, &offer_packet->options[x],sizeof(dhcp_lease_time)); - dhcp_lease_time = ntohl(dhcp_lease_time); - break; - case DHCP_OPTION_RENEWAL_TIME: - memcpy(&dhcp_renewal_time, &offer_packet->options[x],sizeof(dhcp_renewal_time)); - dhcp_renewal_time = ntohl(dhcp_renewal_time); - break; - case DHCP_OPTION_REBINDING_TIME: - memcpy(&dhcp_rebinding_time, &offer_packet->options[x],sizeof(dhcp_rebinding_time)); - dhcp_rebinding_time = ntohl(dhcp_rebinding_time); - break; - case DHCP_OPTION_SERVER_IDENTIFIER: - memcpy(&serv_ident.s_addr, &offer_packet->options[x],sizeof(serv_ident.s_addr)); - break; + switch (option_type) { + case DHCP_OPTION_LEASE_TIME: + memcpy(&dhcp_lease_time, &offer_packet->options[x], sizeof(dhcp_lease_time)); + dhcp_lease_time = ntohl(dhcp_lease_time); + break; + case DHCP_OPTION_RENEWAL_TIME: + memcpy(&dhcp_renewal_time, &offer_packet->options[x], sizeof(dhcp_renewal_time)); + dhcp_renewal_time = ntohl(dhcp_renewal_time); + break; + case DHCP_OPTION_REBINDING_TIME: + memcpy(&dhcp_rebinding_time, &offer_packet->options[x], sizeof(dhcp_rebinding_time)); + dhcp_rebinding_time = ntohl(dhcp_rebinding_time); + break; + case DHCP_OPTION_SERVER_IDENTIFIER: + memcpy(&serv_ident.s_addr, &offer_packet->options[x], sizeof(serv_ident.s_addr)); + break; } /* skip option data we're ignoring */ - if(option_type==0) /* "pad" option, see RFC 2132 (3.1) */ - x+=1; + if (option_type == 0) /* "pad" option, see RFC 2132 (3.1) */ + x += 1; else - x+=option_length; + x += option_length; } - if(verbose){ - if(dhcp_lease_time==DHCP_INFINITE_TIME) + if (verbose) { + if (dhcp_lease_time == DHCP_INFINITE_TIME) printf(_("Lease Time: Infinite\n")); else - printf(_("Lease Time: %lu seconds\n"),(unsigned long)dhcp_lease_time); - if(dhcp_renewal_time==DHCP_INFINITE_TIME) + printf(_("Lease Time: %lu seconds\n"), (unsigned long)dhcp_lease_time); + if (dhcp_renewal_time == DHCP_INFINITE_TIME) printf(_("Renewal Time: Infinite\n")); else - printf(_("Renewal Time: %lu seconds\n"),(unsigned long)dhcp_renewal_time); - if(dhcp_rebinding_time==DHCP_INFINITE_TIME) + printf(_("Renewal Time: %lu seconds\n"), (unsigned long)dhcp_renewal_time); + if (dhcp_rebinding_time == DHCP_INFINITE_TIME) printf(_("Rebinding Time: Infinite\n")); - printf(_("Rebinding Time: %lu seconds\n"),(unsigned long)dhcp_rebinding_time); + printf(_("Rebinding Time: %lu seconds\n"), (unsigned long)dhcp_rebinding_time); } - new_offer=(dhcp_offer *)malloc(sizeof(dhcp_offer)); + new_offer = (dhcp_offer *)malloc(sizeof(dhcp_offer)); - if(new_offer==NULL) + if (new_offer == NULL) return ERROR; /* @@ -891,298 +858,286 @@ int add_dhcp_offer(struct in_addr source,dhcp_packet *offer_packet){ * DHCPOFFER from. If 'serv_ident' isn't available for some reason, we * use 'source'. */ - new_offer->server_address=serv_ident.s_addr?serv_ident:source; - new_offer->offered_address=offer_packet->yiaddr; - new_offer->lease_time=dhcp_lease_time; - new_offer->renewal_time=dhcp_renewal_time; - new_offer->rebinding_time=dhcp_rebinding_time; - new_offer->desired=false; /* exclusive mode: we'll check that in get_results */ - - - if(verbose){ - printf(_("Added offer from server @ %s"),inet_ntoa(new_offer->server_address)); - printf(_(" of IP address %s\n"),inet_ntoa(new_offer->offered_address)); + new_offer->server_address = serv_ident.s_addr ? serv_ident : source; + new_offer->offered_address = offer_packet->yiaddr; + new_offer->lease_time = dhcp_lease_time; + new_offer->renewal_time = dhcp_renewal_time; + new_offer->rebinding_time = dhcp_rebinding_time; + new_offer->desired = false; /* exclusive mode: we'll check that in get_results */ + + if (verbose) { + printf(_("Added offer from server @ %s"), inet_ntoa(new_offer->server_address)); + printf(_(" of IP address %s\n"), inet_ntoa(new_offer->offered_address)); } /* add new offer to head of list */ - new_offer->next=dhcp_offer_list; - dhcp_offer_list=new_offer; + new_offer->next = dhcp_offer_list; + dhcp_offer_list = new_offer; return OK; } - /* frees memory allocated to DHCP OFFER list */ -int free_dhcp_offer_list(void){ +int free_dhcp_offer_list(void) { dhcp_offer *this_offer; dhcp_offer *next_offer; - for(this_offer=dhcp_offer_list;this_offer!=NULL;this_offer=next_offer){ - next_offer=this_offer->next; + for (this_offer = dhcp_offer_list; this_offer != NULL; this_offer = next_offer) { + next_offer = this_offer->next; free(this_offer); } return OK; } - /* frees memory allocated to requested server list */ -int free_requested_server_list(void){ +int free_requested_server_list(void) { requested_server *this_server; requested_server *next_server; - for(this_server=requested_server_list;this_server!=NULL;this_server=next_server){ - next_server=this_server->next; + for (this_server = requested_server_list; this_server != NULL; this_server = next_server) { + next_server = this_server->next; free(this_server); } return OK; } - /* gets state and plugin output to return */ -int get_results(void){ - dhcp_offer *temp_offer, *undesired_offer=NULL; +int get_results(void) { + dhcp_offer *temp_offer, *undesired_offer = NULL; requested_server *temp_server; int result; - uint32_t max_lease_time=0; + uint32_t max_lease_time = 0; - received_requested_address=false; + received_requested_address = false; /* checks responses from requested servers */ - requested_responses=0; - if(requested_servers>0){ + requested_responses = 0; + if (requested_servers > 0) { - for(temp_server=requested_server_list;temp_server!=NULL;temp_server=temp_server->next){ + for (temp_server = requested_server_list; temp_server != NULL; temp_server = temp_server->next) { - for(temp_offer=dhcp_offer_list;temp_offer!=NULL;temp_offer=temp_offer->next){ + for (temp_offer = dhcp_offer_list; temp_offer != NULL; temp_offer = temp_offer->next) { /* get max lease time we were offered */ - if(temp_offer->lease_time>max_lease_time || temp_offer->lease_time==DHCP_INFINITE_TIME) - max_lease_time=temp_offer->lease_time; + if (temp_offer->lease_time > max_lease_time || temp_offer->lease_time == DHCP_INFINITE_TIME) + max_lease_time = temp_offer->lease_time; /* see if we got the address we requested */ - if(!memcmp(&requested_address,&temp_offer->offered_address,sizeof(requested_address))) - received_requested_address=true; + if (!memcmp(&requested_address, &temp_offer->offered_address, sizeof(requested_address))) + received_requested_address = true; /* see if the servers we wanted a response from talked to us or not */ - if(!memcmp(&temp_offer->server_address,&temp_server->server_address,sizeof(temp_server->server_address))){ - if(verbose){ - printf(_("DHCP Server Match: Offerer=%s"),inet_ntoa(temp_offer->server_address)); - printf(_(" Requested=%s"),inet_ntoa(temp_server->server_address)); - if(temp_server->answered) + if (!memcmp(&temp_offer->server_address, &temp_server->server_address, sizeof(temp_server->server_address))) { + if (verbose) { + printf(_("DHCP Server Match: Offerer=%s"), inet_ntoa(temp_offer->server_address)); + printf(_(" Requested=%s"), inet_ntoa(temp_server->server_address)); + if (temp_server->answered) printf(_(" (duplicate)")); printf(_("\n")); } - if(!temp_server->answered){ + if (!temp_server->answered) { requested_responses++; - temp_server->answered=true; - temp_offer->desired=true; + temp_server->answered = true; + temp_offer->desired = true; } } } } /* exclusive mode: check for undesired offers */ - for(temp_offer=dhcp_offer_list;temp_offer!=NULL;temp_offer=temp_offer->next) { + for (temp_offer = dhcp_offer_list; temp_offer != NULL; temp_offer = temp_offer->next) { if (!temp_offer->desired) { - undesired_offer=temp_offer; /* Checks only for the first undesired offer */ - break; /* no further checks needed */ + undesired_offer = temp_offer; /* Checks only for the first undesired offer */ + break; /* no further checks needed */ } } } /* else check and see if we got our requested address from any server */ - else{ + else { - for(temp_offer=dhcp_offer_list;temp_offer!=NULL;temp_offer=temp_offer->next){ + for (temp_offer = dhcp_offer_list; temp_offer != NULL; temp_offer = temp_offer->next) { /* get max lease time we were offered */ - if(temp_offer->lease_time>max_lease_time || temp_offer->lease_time==DHCP_INFINITE_TIME) - max_lease_time=temp_offer->lease_time; + if (temp_offer->lease_time > max_lease_time || temp_offer->lease_time == DHCP_INFINITE_TIME) + max_lease_time = temp_offer->lease_time; /* see if we got the address we requested */ - if(!memcmp(&requested_address,&temp_offer->offered_address,sizeof(requested_address))) - received_requested_address=true; + if (!memcmp(&requested_address, &temp_offer->offered_address, sizeof(requested_address))) + received_requested_address = true; } } - result=STATE_OK; - if(valid_responses==0) - result=STATE_CRITICAL; - else if(requested_servers>0 && requested_responses==0) - result=STATE_CRITICAL; - else if(requested_responses 0 && requested_responses == 0) + result = STATE_CRITICAL; + else if (requested_responses < requested_servers) + result = STATE_WARNING; + else if (request_specific_address && !received_requested_address) + result = STATE_WARNING; - if(exclusive && undesired_offer) - result=STATE_CRITICAL; + if (exclusive && undesired_offer) + result = STATE_CRITICAL; - if(result==0) /* garrett honeycutt 2005 */ + if (result == 0) /* garrett honeycutt 2005 */ printf("OK: "); - else if(result==1) + else if (result == 1) printf("WARNING: "); - else if(result==2) + else if (result == 2) printf("CRITICAL: "); - else if(result==3) + else if (result == 3) printf("UNKNOWN: "); /* we didn't receive any DHCPOFFERs */ - if(dhcp_offer_list==NULL){ + if (dhcp_offer_list == NULL) { printf(_("No DHCPOFFERs were received.\n")); return result; } - printf(_("Received %d DHCPOFFER(s)"),valid_responses); - + printf(_("Received %d DHCPOFFER(s)"), valid_responses); - if(exclusive && undesired_offer){ - printf(_(", Rogue DHCP Server detected! Server %s"),inet_ntoa(undesired_offer->server_address)); - printf(_(" offered %s \n"),inet_ntoa(undesired_offer->offered_address)); + if (exclusive && undesired_offer) { + printf(_(", Rogue DHCP Server detected! Server %s"), inet_ntoa(undesired_offer->server_address)); + printf(_(" offered %s \n"), inet_ntoa(undesired_offer->offered_address)); return result; } - if(requested_servers>0) - printf(_(", %s%d of %d requested servers responded"),((requested_responses0)?"only ":"",requested_responses,requested_servers); + if (requested_servers > 0) + printf(_(", %s%d of %d requested servers responded"), ((requested_responses < requested_servers) && requested_responses > 0) ? "only " : "", requested_responses, + requested_servers); - if(request_specific_address) - printf(_(", requested address (%s) was %soffered"),inet_ntoa(requested_address),(received_requested_address)?"":_("not ")); + if (request_specific_address) + printf(_(", requested address (%s) was %soffered"), inet_ntoa(requested_address), (received_requested_address) ? "" : _("not ")); printf(_(", max lease time = ")); - if(max_lease_time==DHCP_INFINITE_TIME) + if (max_lease_time == DHCP_INFINITE_TIME) printf(_("Infinity")); else - printf("%lu sec",(unsigned long)max_lease_time); + printf("%lu sec", (unsigned long)max_lease_time); printf(".\n"); return result; } - /* process command-line arguments */ -int process_arguments(int argc, char **argv){ - if(argc<1) +int process_arguments(int argc, char **argv) { + if (argc < 1) return ERROR; - call_getopt(argc,argv); + call_getopt(argc, argv); return validate_arguments(argc); } - - -int call_getopt(int argc, char **argv){ +int call_getopt(int argc, char **argv) { extern int optind; int option_index = 0; - static struct option long_options[] = - { - {"serverip", required_argument,0,'s'}, - {"requestedip", required_argument,0,'r'}, - {"timeout", required_argument,0,'t'}, - {"interface", required_argument,0,'i'}, - {"mac", required_argument,0,'m'}, - {"unicast", no_argument, 0,'u'}, - {"exclusive", no_argument, 0,'x'}, - {"verbose", no_argument, 0,'v'}, - {"version", no_argument, 0,'V'}, - {"help", no_argument, 0,'h'}, - {0,0,0,0} - }; - - int c=0; - while(true){ - c=getopt_long(argc,argv,"+hVvxt:s:r:t:i:m:u",long_options,&option_index); - - if(c==-1||c==EOF||c==1) + static struct option long_options[] = {{"serverip", required_argument, 0, 's'}, + {"requestedip", required_argument, 0, 'r'}, + {"timeout", required_argument, 0, 't'}, + {"interface", required_argument, 0, 'i'}, + {"mac", required_argument, 0, 'm'}, + {"unicast", no_argument, 0, 'u'}, + {"exclusive", no_argument, 0, 'x'}, + {"verbose", no_argument, 0, 'v'}, + {"version", no_argument, 0, 'V'}, + {"help", no_argument, 0, 'h'}, + {0, 0, 0, 0}}; + + int c = 0; + while (true) { + c = getopt_long(argc, argv, "+hVvxt:s:r:t:i:m:u", long_options, &option_index); + + if (c == -1 || c == EOF || c == 1) break; - switch(c){ - - case 's': /* DHCP server address */ - resolve_host(optarg,&dhcp_ip); - add_requested_server(dhcp_ip); - break; + switch (c) { - case 'r': /* address we are requested from DHCP servers */ - resolve_host(optarg,&requested_address); - request_specific_address=true; - break; + case 's': /* DHCP server address */ + resolve_host(optarg, &dhcp_ip); + add_requested_server(dhcp_ip); + break; - case 't': /* timeout */ + case 'r': /* address we are requested from DHCP servers */ + resolve_host(optarg, &requested_address); + request_specific_address = true; + break; - /* - if(is_intnonneg(optarg)) - */ - if(atoi(optarg)>0) - dhcpoffer_timeout=atoi(optarg); - /* - else - usage("Time interval must be a nonnegative integer\n"); - */ - break; + case 't': /* timeout */ + + /* + if(is_intnonneg(optarg)) + */ + if (atoi(optarg) > 0) + dhcpoffer_timeout = atoi(optarg); + /* + else + usage("Time interval must be a nonnegative integer\n"); + */ + break; - case 'm': /* MAC address */ + case 'm': /* MAC address */ - if((user_specified_mac=mac_aton(optarg)) == NULL) - usage("Cannot parse MAC address.\n"); - if(verbose) - print_hardware_address(user_specified_mac); + if ((user_specified_mac = mac_aton(optarg)) == NULL) + usage("Cannot parse MAC address.\n"); + if (verbose) + print_hardware_address(user_specified_mac); - break; + break; - case 'i': /* interface name */ + case 'i': /* interface name */ - strncpy(network_interface_name,optarg,sizeof(network_interface_name)-1); - network_interface_name[sizeof(network_interface_name)-1]='\x0'; + strncpy(network_interface_name, optarg, sizeof(network_interface_name) - 1); + network_interface_name[sizeof(network_interface_name) - 1] = '\x0'; - break; + break; - case 'u': /* unicast testing */ - unicast=true; - break; - case 'x': /* exclusive testing aka "rogue DHCP server detection" */ - exclusive=true; - break; + case 'u': /* unicast testing */ + unicast = true; + break; + case 'x': /* exclusive testing aka "rogue DHCP server detection" */ + exclusive = true; + break; - case 'V': /* version */ - print_revision(progname, NP_VERSION); - exit(STATE_UNKNOWN); + case 'V': /* version */ + print_revision(progname, NP_VERSION); + exit(STATE_UNKNOWN); - case 'h': /* help */ - print_help(); - exit(STATE_UNKNOWN); + case 'h': /* help */ + print_help(); + exit(STATE_UNKNOWN); - case 'v': /* verbose */ - verbose=1; - break; - case '?': /* help */ - usage5 (); - break; + case 'v': /* verbose */ + verbose = 1; + break; + case '?': /* help */ + usage5(); + break; - default: - break; + default: + break; } } return optind; } +int validate_arguments(int argc) { -int validate_arguments(int argc){ - - if(argc - optind > 0) + if (argc - optind > 0) usage(_("Got unexpected non-option argument")); return OK; } - #if defined(__sun__) || defined(__solaris__) || defined(__hpux__) /* Kompf 2000-2003 see ACKNOWLEDGEMENTS */ /* get a message from a stream; return type of message */ -static int get_msg(int fd){ +static int get_msg(int fd) { int flags = 0; int res, ret; ctl_area[0] = 0; @@ -1190,30 +1145,29 @@ static int get_msg(int fd){ ret = 0; res = getmsg(fd, &ctl, &dat, &flags); - if(res < 0){ - if(errno == EINTR){ - return(GOT_INTR); - } - else{ + if (res < 0) { + if (errno == EINTR) { + return (GOT_INTR); + } else { printf("%s\n", "get_msg FAILED."); - return(GOT_ERR); + return (GOT_ERR); } } - if(ctl.len > 0){ + if (ctl.len > 0) { ret |= GOT_CTRL; } - if(dat.len > 0){ + if (dat.len > 0) { ret |= GOT_DATA; } - return(ret); + return (ret); } /* verify that dl_primitive in ctl_area = prim */ -static int check_ctrl(int prim){ +static int check_ctrl(int prim) { dl_error_ack_t *err_ack = (dl_error_ack_t *)ctl_area; - if(err_ack->dl_primitive != prim){ + if (err_ack->dl_primitive != prim) { printf(_("Error: DLPI stream API failed to get MAC in check_ctrl: %s.\n"), strerror(errno)); exit(STATE_UNKNOWN); } @@ -1222,35 +1176,35 @@ static int check_ctrl(int prim){ } /* put a control message on a stream */ -static int put_ctrl(int fd, int len, int pri){ +static int put_ctrl(int fd, int len, int pri) { ctl.len = len; - if(putmsg(fd, &ctl, 0, pri) < 0){ + if (putmsg(fd, &ctl, 0, pri) < 0) { printf(_("Error: DLPI stream API failed to get MAC in put_ctrl/putmsg(): %s.\n"), strerror(errno)); exit(STATE_UNKNOWN); } - return 0; + return 0; } /* put a control + data message on a stream */ -static int put_both(int fd, int clen, int dlen, int pri){ +static int put_both(int fd, int clen, int dlen, int pri) { ctl.len = clen; dat.len = dlen; - if(putmsg(fd, &ctl, &dat, pri) < 0){ + if (putmsg(fd, &ctl, &dat, pri) < 0) { printf(_("Error: DLPI stream API failed to get MAC in put_both/putmsg().\n"), strerror(errno)); exit(STATE_UNKNOWN); } - return 0; + return 0; } /* open file descriptor and attach */ -static int dl_open(const char *dev, int unit, int *fd){ +static int dl_open(const char *dev, int unit, int *fd) { dl_attach_req_t *attach_req = (dl_attach_req_t *)ctl_area; - if((*fd = open(dev, O_RDWR)) == -1){ + if ((*fd = open(dev, O_RDWR)) == -1) { printf(_("Error: DLPI stream API failed to get MAC in dl_attach_req/open(%s..): %s.\n"), dev, strerror(errno)); exit(STATE_UNKNOWN); } @@ -1262,7 +1216,7 @@ static int dl_open(const char *dev, int unit, int *fd){ } /* send DL_BIND_REQ */ -static int dl_bind(int fd, int sap, u_char *addr){ +static int dl_bind(int fd, int sap, u_char *addr) { dl_bind_req_t *bind_req = (dl_bind_req_t *)ctl_area; dl_bind_ack_t *bind_ack = (dl_bind_ack_t *)ctl_area; @@ -1274,12 +1228,11 @@ static int dl_bind(int fd, int sap, u_char *addr){ bind_req->dl_xidtest_flg = 0; put_ctrl(fd, sizeof(dl_bind_req_t), 0); get_msg(fd); - if (GOT_ERR == check_ctrl(DL_BIND_ACK)){ + if (GOT_ERR == check_ctrl(DL_BIND_ACK)) { printf(_("Error: DLPI stream API failed to get MAC in dl_bind/check_ctrl(): %s.\n"), strerror(errno)); exit(STATE_UNKNOWN); } - bcopy((u_char *)bind_ack + bind_ack->dl_addr_offset, addr, - bind_ack->dl_addr_length); + bcopy((u_char *)bind_ack + bind_ack->dl_addr_offset, addr, bind_ack->dl_addr_length); return 0; } @@ -1296,13 +1249,13 @@ static int dl_bind(int fd, int sap, u_char *addr){ * ***********************************************************************/ -long mac_addr_dlpi( const char *dev, int unit, u_char *addr){ +long mac_addr_dlpi(const char *dev, int unit, u_char *addr) { int fd; u_char mac_addr[25]; - if(GOT_ERR != dl_open(dev, unit, &fd)){ - if(GOT_ERR != dl_bind(fd, INSAP, mac_addr)){ - bcopy( mac_addr, addr, 6); + if (GOT_ERR != dl_open(dev, unit, &fd)) { + if (GOT_ERR != dl_bind(fd, INSAP, mac_addr)) { + bcopy(mac_addr, addr, 6); return 0; } } @@ -1314,99 +1267,93 @@ long mac_addr_dlpi( const char *dev, int unit, u_char *addr){ /* Kompf 2000-2003 */ #endif - /* resolve host name or die (TODO: move this to netutils.c!) */ -void resolve_host(const char *in,struct in_addr *out){ +void resolve_host(const char *in, struct in_addr *out) { struct addrinfo hints, *ai; - memset(&hints,0,sizeof(hints)); - hints.ai_family=PF_INET; - if (getaddrinfo(in,NULL,&hints,&ai) != 0) - usage_va(_("Invalid hostname/address - %s"),optarg); + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_INET; + if (getaddrinfo(in, NULL, &hints, &ai) != 0) + usage_va(_("Invalid hostname/address - %s"), optarg); - memcpy(out,&((struct sockaddr_in *)ai->ai_addr)->sin_addr,sizeof(*out)); + memcpy(out, &((struct sockaddr_in *)ai->ai_addr)->sin_addr, sizeof(*out)); freeaddrinfo(ai); } - /* parse MAC address string, return 6 bytes (unterminated) or NULL */ -unsigned char *mac_aton(const char *string){ +unsigned char *mac_aton(const char *string) { static unsigned char result[6]; char tmp[3]; unsigned i, j; - for(i=0, j=0; string[i] != '\0' && j < sizeof(result); i++){ + for (i = 0, j = 0; string[i] != '\0' && j < sizeof(result); i++) { /* ignore ':' and any other non-hex character */ - if(!isxdigit(string[i]) || !isxdigit(string[i+1])) + if (!isxdigit(string[i]) || !isxdigit(string[i + 1])) continue; - tmp[0]=string[i]; - tmp[1]=string[i+1]; - tmp[2]='\0'; - result[j]=strtol(tmp,(char **)NULL,16); + tmp[0] = string[i]; + tmp[1] = string[i + 1]; + tmp[2] = '\0'; + result[j] = strtol(tmp, (char **)NULL, 16); i++; j++; } - return (j==6) ? result : NULL; + return (j == 6) ? result : NULL; } - -void print_hardware_address(const unsigned char *address){ +void print_hardware_address(const unsigned char *address) { int i; printf(_("Hardware address: ")); - for (i=0; i<5; i++) + for (i = 0; i < 5; i++) printf("%2.2x:", address[i]); printf("%2.2x", address[i]); putchar('\n'); } - /* print usage help */ -void print_help(void){ +void print_help(void) { print_revision(progname, NP_VERSION); printf("Copyright (c) 2001-2004 Ethan Galstad (nagios at nagios.org)\n"); - printf (COPYRIGHT, copyright, email); + printf(COPYRIGHT, copyright, email); printf("%s\n", _("This plugin tests the availability of DHCP servers on a network.")); - printf ("\n\n"); + printf("\n\n"); print_usage(); - printf (UT_HELP_VRSN); - printf (UT_EXTRA_OPTS); - - printf (UT_VERBOSE); - - printf (" %s\n", "-s, --serverip=IPADDRESS"); - printf (" %s\n", _("IP address of DHCP server that we must hear from")); - printf (" %s\n", "-r, --requestedip=IPADDRESS"); - printf (" %s\n", _("IP address that should be offered by at least one DHCP server")); - printf (" %s\n", "-t, --timeout=INTEGER"); - printf (" %s\n", _("Seconds to wait for DHCPOFFER before timeout occurs")); - printf (" %s\n", "-i, --interface=STRING"); - printf (" %s\n", _("Interface to to use for listening (i.e. eth0)")); - printf (" %s\n", "-m, --mac=STRING"); - printf (" %s\n", _("MAC address to use in the DHCP request")); - printf (" %s\n", "-u, --unicast"); - printf (" %s\n", _("Unicast testing: mimic a DHCP relay, requires -s")); - printf (" %s\n", "-x, --exclusive"); - printf (" %s\n", _("Only requested DHCP server may response (rogue DHCP server detection), requires -s")); - - printf (UT_SUPPORT); + printf(UT_HELP_VRSN); + printf(UT_EXTRA_OPTS); + + printf(UT_VERBOSE); + + printf(" %s\n", "-s, --serverip=IPADDRESS"); + printf(" %s\n", _("IP address of DHCP server that we must hear from")); + printf(" %s\n", "-r, --requestedip=IPADDRESS"); + printf(" %s\n", _("IP address that should be offered by at least one DHCP server")); + printf(" %s\n", "-t, --timeout=INTEGER"); + printf(" %s\n", _("Seconds to wait for DHCPOFFER before timeout occurs")); + printf(" %s\n", "-i, --interface=STRING"); + printf(" %s\n", _("Interface to to use for listening (i.e. eth0)")); + printf(" %s\n", "-m, --mac=STRING"); + printf(" %s\n", _("MAC address to use in the DHCP request")); + printf(" %s\n", "-u, --unicast"); + printf(" %s\n", _("Unicast testing: mimic a DHCP relay, requires -s")); + printf(" %s\n", "-x, --exclusive"); + printf(" %s\n", _("Only requested DHCP server may response (rogue DHCP server detection), requires -s")); + + printf(UT_SUPPORT); return; } +void print_usage(void) { -void -print_usage(void){ - - printf ("%s\n", _("Usage:")); - printf (" %s [-v] [-u] [-x] [-s serverip] [-r requestedip] [-t timeout]\n",progname); - printf (" [-i interface] [-m mac]\n"); + printf("%s\n", _("Usage:")); + printf(" %s [-v] [-u] [-x] [-s serverip] [-r requestedip] [-t timeout]\n", progname); + printf(" [-i interface] [-m mac]\n"); return; } From git at monitoring-plugins.org Tue Oct 15 23:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Tue, 15 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] check_dhcp: Update copyright Message-ID: <20241015213012.3B985200014F@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: a0e2266c7554fae2ac62f4b57d4b987f339a11cb Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 16:01:27 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=a0e2266 check_dhcp: Update copyright --- plugins-root/check_dhcp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins-root/check_dhcp.c b/plugins-root/check_dhcp.c index 4f50a5c..657ddc1 100644 --- a/plugins-root/check_dhcp.c +++ b/plugins-root/check_dhcp.c @@ -4,7 +4,7 @@ * * License: GPL * Copyright (c) 2001-2004 Ethan Galstad (nagios at nagios.org) - * Copyright (c) 2001-2007 Monitoring Plugins Development Team + * Copyright (c) 2001-2023 Monitoring Plugins Development Team * * Description: * @@ -34,7 +34,7 @@ *****************************************************************************/ const char *progname = "check_dhcp"; -const char *copyright = "2001-2023"; +const char *copyright = "2001-2024"; const char *email = "devel at monitoring-plugins.org"; #include "common.h" From git at monitoring-plugins.org Tue Oct 15 23:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Tue, 15 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] check_dhcp: Declare internal variables static Message-ID: <20241015213012.512222000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: cd4d59fbd4af00fbc95e35b68e47d194978db2ee Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 16:07:58 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=cd4d59f check_dhcp: Declare internal variables static --- plugins-root/check_dhcp.c | 124 +++++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/plugins-root/check_dhcp.c b/plugins-root/check_dhcp.c index 657ddc1..6802232 100644 --- a/plugins-root/check_dhcp.c +++ b/plugins-root/check_dhcp.c @@ -105,7 +105,7 @@ static int put_ctrl(int, int, int); static int put_both(int, int, int, int); static int dl_open(const char *, int, int *); static int dl_bind(int, int, u_char *); -long mac_addr_dlpi(const char *, int, u_char *); +static long mac_addr_dlpi(const char *, int, u_char *); #endif // __sun__ || __solaris__ || __hpux @@ -186,60 +186,60 @@ typedef struct requested_server_struct { #define ETHERNET_HARDWARE_ADDRESS 1 /* used in htype field of dhcp packet */ #define ETHERNET_HARDWARE_ADDRESS_LENGTH 6 /* length of Ethernet hardware addresses */ -bool unicast = false; /* unicast mode: mimic a DHCP relay */ -bool exclusive = false; /* exclusive mode aka "rogue DHCP server detection" */ -struct in_addr my_ip; /* our address (required for relay) */ -struct in_addr dhcp_ip; /* server to query (if in unicast mode) */ -unsigned char client_hardware_address[MAX_DHCP_CHADDR_LENGTH] = ""; -unsigned char *user_specified_mac = NULL; +static bool unicast = false; /* unicast mode: mimic a DHCP relay */ +static bool exclusive = false; /* exclusive mode aka "rogue DHCP server detection" */ +static struct in_addr my_ip; /* our address (required for relay) */ +static struct in_addr dhcp_ip; /* server to query (if in unicast mode) */ +static unsigned char client_hardware_address[MAX_DHCP_CHADDR_LENGTH] = ""; +static unsigned char *user_specified_mac = NULL; -char network_interface_name[IFNAMSIZ] = "eth0"; +static char network_interface_name[IFNAMSIZ] = "eth0"; -uint32_t packet_xid = 0; +static uint32_t packet_xid = 0; -uint32_t dhcp_lease_time = 0; -uint32_t dhcp_renewal_time = 0; -uint32_t dhcp_rebinding_time = 0; +static uint32_t dhcp_lease_time = 0; +static uint32_t dhcp_renewal_time = 0; +static uint32_t dhcp_rebinding_time = 0; -int dhcpoffer_timeout = 2; +static int dhcpoffer_timeout = 2; -dhcp_offer *dhcp_offer_list = NULL; -requested_server *requested_server_list = NULL; +static dhcp_offer *dhcp_offer_list = NULL; +static requested_server *requested_server_list = NULL; -int valid_responses = 0; /* number of valid DHCPOFFERs we received */ -int requested_servers = 0; -int requested_responses = 0; +static int valid_responses = 0; /* number of valid DHCPOFFERs we received */ +static int requested_servers = 0; +static int requested_responses = 0; -bool request_specific_address = false; -bool received_requested_address = false; -int verbose = 0; -struct in_addr requested_address; +static bool request_specific_address = false; +static bool received_requested_address = false; +static int verbose = 0; +static struct in_addr requested_address; -int process_arguments(int, char **); -int call_getopt(int, char **); -int validate_arguments(int); +static int process_arguments(int, char **); +static int call_getopt(int, char **); +static int validate_arguments(int); void print_usage(void); -void print_help(void); +static void print_help(void); -void resolve_host(const char *in, struct in_addr *out); -unsigned char *mac_aton(const char *); -void print_hardware_address(const unsigned char *); -int get_hardware_address(int, char *); -int get_ip_address(int, char *); +static void resolve_host(const char *in, struct in_addr *out); +static unsigned char *mac_aton(const char *); +static void print_hardware_address(const unsigned char *); +static int get_hardware_address(int, char *); +static int get_ip_address(int, char *); -int send_dhcp_discover(int); -int get_dhcp_offer(int); +static int send_dhcp_discover(int); +static int get_dhcp_offer(int); -int get_results(void); +static int get_results(void); -int add_dhcp_offer(struct in_addr, dhcp_packet *); -int free_dhcp_offer_list(void); -int free_requested_server_list(void); +static int add_dhcp_offer(struct in_addr, dhcp_packet *); +static int free_dhcp_offer_list(void); +static int free_requested_server_list(void); -int create_dhcp_socket(void); -int close_dhcp_socket(int); -int send_dhcp_packet(void *, int, int, struct sockaddr_in *); -int receive_dhcp_packet(void *, int, int, int, struct sockaddr_in *); +static int create_dhcp_socket(void); +static int close_dhcp_socket(int); +static int send_dhcp_packet(void *, int, int, struct sockaddr_in *); +static int receive_dhcp_packet(void *, int, int, int, struct sockaddr_in *); int main(int argc, char **argv) { int dhcp_socket; @@ -288,7 +288,7 @@ int main(int argc, char **argv) { } /* determines hardware address on client machine */ -int get_hardware_address(int sock, char *interface_name) { +static int get_hardware_address(int sock, char *interface_name) { #if defined(__linux__) struct ifreq ifr; @@ -400,7 +400,7 @@ int get_hardware_address(int sock, char *interface_name) { } /* determines IP address of the client interface */ -int get_ip_address(int sock, char *interface_name) { +static int get_ip_address(int sock, char *interface_name) { #if defined(SIOCGIFADDR) struct ifreq ifr; @@ -426,7 +426,7 @@ int get_ip_address(int sock, char *interface_name) { } /* sends a DHCPDISCOVER broadcast message in an attempt to find DHCP servers */ -int send_dhcp_discover(int sock) { +static int send_dhcp_discover(int sock) { dhcp_packet discover_packet; struct sockaddr_in sockaddr_broadcast; unsigned short opts; @@ -515,7 +515,7 @@ int send_dhcp_discover(int sock) { } /* waits for a DHCPOFFER message from one or more DHCP servers */ -int get_dhcp_offer(int sock) { +static int get_dhcp_offer(int sock) { dhcp_packet offer_packet; struct sockaddr_in source; struct sockaddr_in via; @@ -617,7 +617,7 @@ int get_dhcp_offer(int sock) { } /* sends a DHCP packet */ -int send_dhcp_packet(void *buffer, int buffer_size, int sock, struct sockaddr_in *dest) { +static int send_dhcp_packet(void *buffer, int buffer_size, int sock, struct sockaddr_in *dest) { int result; result = sendto(sock, (char *)buffer, buffer_size, 0, (struct sockaddr *)dest, sizeof(*dest)); @@ -632,7 +632,7 @@ int send_dhcp_packet(void *buffer, int buffer_size, int sock, struct sockaddr_in } /* receives a DHCP packet */ -int receive_dhcp_packet(void *buffer, int buffer_size, int sock, int timeout, struct sockaddr_in *address) { +static int receive_dhcp_packet(void *buffer, int buffer_size, int sock, int timeout, struct sockaddr_in *address) { struct timeval tv; fd_set readfds; fd_set oobfds; @@ -685,7 +685,7 @@ int receive_dhcp_packet(void *buffer, int buffer_size, int sock, int timeout, st } /* creates a socket for DHCP communication */ -int create_dhcp_socket(void) { +static int create_dhcp_socket(void) { struct sockaddr_in myname; struct ifreq interface; int sock; @@ -746,7 +746,7 @@ int create_dhcp_socket(void) { } /* closes DHCP socket */ -int close_dhcp_socket(int sock) { +static int close_dhcp_socket(int sock) { close(sock); @@ -754,7 +754,7 @@ int close_dhcp_socket(int sock) { } /* adds a requested server address to list in memory */ -int add_requested_server(struct in_addr server_address) { +static int add_requested_server(struct in_addr server_address) { requested_server *new_server; new_server = (requested_server *)malloc(sizeof(requested_server)); @@ -776,7 +776,7 @@ int add_requested_server(struct in_addr server_address) { } /* adds a DHCP OFFER to list in memory */ -int add_dhcp_offer(struct in_addr source, dhcp_packet *offer_packet) { +static int add_dhcp_offer(struct in_addr source, dhcp_packet *offer_packet) { dhcp_offer *new_offer; int x; unsigned option_type; @@ -878,7 +878,7 @@ int add_dhcp_offer(struct in_addr source, dhcp_packet *offer_packet) { } /* frees memory allocated to DHCP OFFER list */ -int free_dhcp_offer_list(void) { +static int free_dhcp_offer_list(void) { dhcp_offer *this_offer; dhcp_offer *next_offer; @@ -891,7 +891,7 @@ int free_dhcp_offer_list(void) { } /* frees memory allocated to requested server list */ -int free_requested_server_list(void) { +static int free_requested_server_list(void) { requested_server *this_server; requested_server *next_server; @@ -904,7 +904,7 @@ int free_requested_server_list(void) { } /* gets state and plugin output to return */ -int get_results(void) { +static int get_results(void) { dhcp_offer *temp_offer, *undesired_offer = NULL; requested_server *temp_server; int result; @@ -1025,7 +1025,7 @@ int get_results(void) { } /* process command-line arguments */ -int process_arguments(int argc, char **argv) { +static int process_arguments(int argc, char **argv) { if (argc < 1) return ERROR; @@ -1033,7 +1033,7 @@ int process_arguments(int argc, char **argv) { return validate_arguments(argc); } -int call_getopt(int argc, char **argv) { +static int call_getopt(int argc, char **argv) { extern int optind; int option_index = 0; static struct option long_options[] = {{"serverip", required_argument, 0, 's'}, @@ -1125,7 +1125,7 @@ int call_getopt(int argc, char **argv) { return optind; } -int validate_arguments(int argc) { +static int validate_arguments(int argc) { if (argc - optind > 0) usage(_("Got unexpected non-option argument")); @@ -1249,7 +1249,7 @@ static int dl_bind(int fd, int sap, u_char *addr) { * ***********************************************************************/ -long mac_addr_dlpi(const char *dev, int unit, u_char *addr) { +static long mac_addr_dlpi(const char *dev, int unit, u_char *addr) { int fd; u_char mac_addr[25]; @@ -1268,7 +1268,7 @@ long mac_addr_dlpi(const char *dev, int unit, u_char *addr) { #endif /* resolve host name or die (TODO: move this to netutils.c!) */ -void resolve_host(const char *in, struct in_addr *out) { +static void resolve_host(const char *in, struct in_addr *out) { struct addrinfo hints, *ai; memset(&hints, 0, sizeof(hints)); @@ -1281,7 +1281,7 @@ void resolve_host(const char *in, struct in_addr *out) { } /* parse MAC address string, return 6 bytes (unterminated) or NULL */ -unsigned char *mac_aton(const char *string) { +static unsigned char *mac_aton(const char *string) { static unsigned char result[6]; char tmp[3]; unsigned i, j; @@ -1301,7 +1301,7 @@ unsigned char *mac_aton(const char *string) { return (j == 6) ? result : NULL; } -void print_hardware_address(const unsigned char *address) { +static void print_hardware_address(const unsigned char *address) { int i; printf(_("Hardware address: ")); @@ -1312,7 +1312,7 @@ void print_hardware_address(const unsigned char *address) { } /* print usage help */ -void print_help(void) { +static void print_help(void) { print_revision(progname, NP_VERSION); From git at monitoring-plugins.org Tue Oct 15 23:30:12 2024 From: git at monitoring-plugins.org (GitHub) Date: Tue, 15 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] Merge pull request #1637 from aanriot/master Message-ID: <20241015213012.65A342000126@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: d6d6d00daf0f35ececb887f8f62f7b6c37376dd0 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Tue Oct 15 23:27:25 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=d6d6d00 Merge pull request #1637 from aanriot/master check_ifstatus: Add -d switch --- From git at monitoring-plugins.org Tue Oct 15 23:30:12 2024 From: git at monitoring-plugins.org (GitHub) Date: Tue, 15 Oct 2024 23:30:12 +0200 (CEST) Subject: [monitoring-plugins] Merge pull request #2029 from ... Message-ID: <20241015213012.772922000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: c7de721c4fb575e4f73e7f6f928dcad81cf269a0 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Tue Oct 15 23:28:13 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=c7de721 Merge pull request #2029 from RincewindsHat/cleanup/check_dhcp Cleanup/check dhcp --- From git at monitoring-plugins.org Sat Oct 26 07:00:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:12 +0200 (CEST) Subject: [monitoring-plugins] check_ups: clang-format Message-ID: <20241026050012.9901E2000122@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: b95e3d7446f33784f0647dc5d60a4b2d0a750a8a Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 16:25:19 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=b95e3d7 check_ups: clang-format --- plugins/check_ups.c | 102 ++++++++++++++++------------------------------------ 1 file changed, 31 insertions(+), 71 deletions(-) diff --git a/plugins/check_ups.c b/plugins/check_ups.c index 380ff3b..1d31329 100644 --- a/plugins/check_ups.c +++ b/plugins/check_ups.c @@ -141,7 +141,6 @@ int main(int argc, char **argv) { return STATE_CRITICAL; } - if (supported_options & UPS_STATUS) { ups_status = strdup(""); @@ -151,8 +150,7 @@ int main(int argc, char **argv) { if (config.status & UPSSTATUS_OFF) { xasprintf(&ups_status, "Off"); result = STATE_CRITICAL; - } else if ((config.status & (UPSSTATUS_OB | UPSSTATUS_LB)) == - (UPSSTATUS_OB | UPSSTATUS_LB)) { + } else if ((config.status & (UPSSTATUS_OB | UPSSTATUS_LB)) == (UPSSTATUS_OB | UPSSTATUS_LB)) { xasprintf(&ups_status, _("On Battery, Low Battery")); result = STATE_CRITICAL; } else { @@ -171,8 +169,7 @@ int main(int argc, char **argv) { xasprintf(&ups_status, "%s%s", ups_status, _(", Calibrating")); } if (config.status & UPSSTATUS_RB) { - xasprintf(&ups_status, "%s%s", ups_status, - _(", Replace Battery")); + xasprintf(&ups_status, "%s%s", ups_status, _(", Replace Battery")); result = max_state(result, STATE_WARNING); } if (config.status & UPSSTATUS_BYPASS) { @@ -233,24 +230,16 @@ int main(int argc, char **argv) { } if (config.check_variable == UPS_UTILITY) { - if (config.check_crit && - ups_utility_deviation >= config.critical_value) { + if (config.check_crit && ups_utility_deviation >= config.critical_value) { result = STATE_CRITICAL; - } else if (config.check_warn && - ups_utility_deviation >= config.warning_value) { + } else if (config.check_warn && ups_utility_deviation >= config.warning_value) { result = max_state(result, STATE_WARNING); } xasprintf(&data, "%s", - perfdata("voltage", (long)(1000 * ups_utility_voltage), - "mV", config.check_warn, - (long)(1000 * config.warning_value), - config.check_crit, - (long)(1000 * config.critical_value), true, 0, - false, 0)); + perfdata("voltage", (long)(1000 * ups_utility_voltage), "mV", config.check_warn, (long)(1000 * config.warning_value), config.check_crit, + (long)(1000 * config.critical_value), true, 0, false, 0)); } else { - xasprintf(&data, "%s", - perfdata("voltage", (long)(1000 * ups_utility_voltage), - "mV", false, 0, false, 0, true, 0, false, 0)); + xasprintf(&data, "%s", perfdata("voltage", (long)(1000 * ups_utility_voltage), "mV", false, 0, false, 0, true, 0, false, 0)); } } @@ -268,22 +257,16 @@ int main(int argc, char **argv) { xasprintf(&message, "%sBatt=%3.1f%% ", message, ups_battery_percent); if (config.check_variable == UPS_BATTPCT) { - if (config.check_crit && - ups_battery_percent <= config.critical_value) { + if (config.check_crit && ups_battery_percent <= config.critical_value) { result = STATE_CRITICAL; - } else if (config.check_warn && - ups_battery_percent <= config.warning_value) { + } else if (config.check_warn && ups_battery_percent <= config.warning_value) { result = max_state(result, STATE_WARNING); } xasprintf(&data, "%s %s", data, - perfdata("battery", (long)ups_battery_percent, "%", - config.check_warn, (long)(config.warning_value), - config.check_crit, (long)(config.critical_value), - true, 0, true, 100)); + perfdata("battery", (long)ups_battery_percent, "%", config.check_warn, (long)(config.warning_value), config.check_crit, (long)(config.critical_value), true, + 0, true, 100)); } else { - xasprintf(&data, "%s %s", data, - perfdata("battery", (long)ups_battery_percent, "%", false, - 0, false, 0, true, 0, true, 100)); + xasprintf(&data, "%s %s", data, perfdata("battery", (long)ups_battery_percent, "%", false, 0, false, 0, true, 0, true, 100)); } } @@ -301,22 +284,16 @@ int main(int argc, char **argv) { xasprintf(&message, "%sLoad=%3.1f%% ", message, ups_load_percent); if (config.check_variable == UPS_LOADPCT) { - if (config.check_crit && - ups_load_percent >= config.critical_value) { + if (config.check_crit && ups_load_percent >= config.critical_value) { result = STATE_CRITICAL; - } else if (config.check_warn && - ups_load_percent >= config.warning_value) { + } else if (config.check_warn && ups_load_percent >= config.warning_value) { result = max_state(result, STATE_WARNING); } xasprintf(&data, "%s %s", data, - perfdata("load", (long)ups_load_percent, "%", - config.check_warn, (long)(config.warning_value), - config.check_crit, (long)(config.critical_value), - true, 0, true, 100)); + perfdata("load", (long)ups_load_percent, "%", config.check_warn, (long)(config.warning_value), config.check_crit, (long)(config.critical_value), true, 0, + true, 100)); } else { - xasprintf(&data, "%s %s", data, - perfdata("load", (long)ups_load_percent, "%", false, 0, - false, 0, true, 0, true, 100)); + xasprintf(&data, "%s %s", data, perfdata("load", (long)ups_load_percent, "%", false, 0, false, 0, true, 0, true, 100)); } } @@ -345,19 +322,14 @@ int main(int argc, char **argv) { if (config.check_variable == UPS_TEMP) { if (config.check_crit && ups_temperature >= config.critical_value) { result = STATE_CRITICAL; - } else if (config.check_warn && - ups_temperature >= config.warning_value) { + } else if (config.check_warn && ups_temperature >= config.warning_value) { result = max_state(result, STATE_WARNING); } xasprintf(&data, "%s %s", data, - perfdata("temp", (long)ups_temperature, tunits, - config.check_warn, (long)(config.warning_value), - config.check_crit, (long)(config.critical_value), - true, 0, false, 0)); + perfdata("temp", (long)ups_temperature, tunits, config.check_warn, (long)(config.warning_value), config.check_crit, (long)(config.critical_value), true, 0, + false, 0)); } else { - xasprintf(&data, "%s %s", data, - perfdata("temp", (long)ups_temperature, tunits, false, 0, - false, 0, true, 0, false, 0)); + xasprintf(&data, "%s %s", data, perfdata("temp", (long)ups_temperature, tunits, false, 0, false, 0, true, 0, false, 0)); } } @@ -376,19 +348,14 @@ int main(int argc, char **argv) { if (config.check_variable == UPS_REALPOWER) { if (config.check_crit && ups_realpower >= config.critical_value) { result = STATE_CRITICAL; - } else if (config.check_warn && - ups_realpower >= config.warning_value) { + } else if (config.check_warn && ups_realpower >= config.warning_value) { result = max_state(result, STATE_WARNING); } xasprintf(&data, "%s %s", data, - perfdata("realpower", (long)ups_realpower, "W", - config.check_warn, (long)(config.warning_value), - config.check_crit, (long)(config.critical_value), - true, 0, false, 0)); + perfdata("realpower", (long)ups_realpower, "W", config.check_warn, (long)(config.warning_value), config.check_crit, (long)(config.critical_value), true, 0, + false, 0)); } else { - xasprintf(&data, "%s %s", data, - perfdata("realpower", (long)ups_realpower, "W", false, 0, - false, 0, true, 0, false, 0)); + xasprintf(&data, "%s %s", data, perfdata("realpower", (long)ups_realpower, "W", false, 0, false, 0, true, 0, false, 0)); } } @@ -425,8 +392,7 @@ int determine_status(ups_config *config, int *supported_options) { char temp_buffer[MAX_INPUT_BUFFER]; strcpy(temp_buffer, recv_buffer); - for (char *ptr = (char *)strtok(temp_buffer, " "); ptr != NULL; - ptr = (char *)strtok(NULL, " ")) { + for (char *ptr = (char *)strtok(temp_buffer, " "); ptr != NULL; ptr = (char *)strtok(NULL, " ")) { if (!strcmp(ptr, "OFF")) { config->status |= UPSSTATUS_OFF; } else if (!strcmp(ptr, "OL")) { @@ -467,8 +433,7 @@ int get_ups_variable(const char *varname, char *buf, const ups_config config) { /* create the command string to send to the UPS daemon */ /* Add LOGOUT to avoid read failure logs */ - int res = snprintf(send_buffer, sizeof(send_buffer), - "GET VAR %s %s\nLOGOUT\n", config.ups_name, varname); + int res = snprintf(send_buffer, sizeof(send_buffer), "GET VAR %s %s\nLOGOUT\n", config.ups_name, varname); if ((res > 0) && ((size_t)res >= sizeof(send_buffer))) { printf("%s\n", _("UPS name to long for buffer")); return ERROR; @@ -477,9 +442,7 @@ int get_ups_variable(const char *varname, char *buf, const ups_config config) { char temp_buffer[MAX_INPUT_BUFFER]; /* send the command to the daemon and get a response back */ - if (process_tcp_request(config.server_address, config.server_port, - send_buffer, temp_buffer, - sizeof(temp_buffer)) != STATE_OK) { + if (process_tcp_request(config.server_address, config.server_port, send_buffer, temp_buffer, sizeof(temp_buffer)) != STATE_OK) { printf("%s\n", _("Invalid response received from host")); return ERROR; } @@ -496,8 +459,7 @@ int get_ups_variable(const char *varname, char *buf, const ups_config config) { ptr[len - 1] = 0; } if (strcmp(ptr, "ERR UNKNOWN-UPS") == 0) { - printf(_("CRITICAL - no such UPS '%s' on that host\n"), - config.ups_name); + printf(_("CRITICAL - no such UPS '%s' on that host\n"), config.ups_name); return ERROR; } @@ -694,8 +656,7 @@ void print_help(void) { printf(" %s\n", "-T, --temperature"); printf(" %s\n", _("Output of temperatures in Celsius")); printf(" %s\n", "-v, --variable=STRING"); - printf(" %s %s\n", _("Valid values for STRING are"), - "LINE, TEMP, BATTPCT, LOADPCT or REALPOWER"); + printf(" %s %s\n", _("Valid values for STRING are"), "LINE, TEMP, BATTPCT, LOADPCT or REALPOWER"); printf(UT_WARN_CRIT); @@ -731,8 +692,7 @@ void print_help(void) { "with Russell Kroll's")); printf(" %s\n", _("Network UPS Tools be installed on the remote host. If " "you do not have the")); - printf(" %s\n", - _("package installed on your system, you can download it from")); + printf(" %s\n", _("package installed on your system, you can download it from")); printf(" %s\n", _("http://www.networkupstools.org")); printf(UT_SUPPORT); From git at monitoring-plugins.org Sat Oct 26 07:00:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:12 +0200 (CEST) Subject: [monitoring-plugins] check_ups: Update copyright Message-ID: <20241026050012.A66552000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 3f7c533ce87c764ff5278e18cec84b06e221b1c5 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 16:26:21 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=3f7c533 check_ups: Update copyright --- plugins/check_ups.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/check_ups.c b/plugins/check_ups.c index 1d31329..e5badc8 100644 --- a/plugins/check_ups.c +++ b/plugins/check_ups.c @@ -6,7 +6,7 @@ * Copyright (c) 2000 Tom Shields * 2004 Alain Richard * 2004 Arnaud Quette - * Copyright (c) 2002-2023 Monitoring Plugins Development Team + * Copyright (c) 2002-2024 Monitoring Plugins Development Team * * Description: * @@ -33,7 +33,7 @@ *****************************************************************************/ const char *progname = "check_ups"; -const char *copyright = "2000-2023"; +const char *copyright = "2000-2024"; const char *email = "devel at monitoring-plugins.org"; #include "common.h" From git at monitoring-plugins.org Sat Oct 26 07:00:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:12 +0200 (CEST) Subject: [monitoring-plugins] clang format config: line lenght 180 -> 140, no ... Message-ID: <20241026050012.BAD742000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: c0a3bd07057f7e6b000d477088424cf71f89e3e7 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Sat Oct 19 01:21:02 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=c0a3bd0 clang format config: line lenght 180 -> 140, no base style --- .clang-format | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.clang-format b/.clang-format index c7f0b5e..a7d1949 100644 --- a/.clang-format +++ b/.clang-format @@ -1,10 +1,10 @@ -BasedOnStyle: LLVM UseTab: ForContinuationAndIndentation IndentWidth: 4 TabWidth: 4 AllowShortIfStatementsOnASingleLine: false BreakBeforeBraces: Attach AlignConsecutiveMacros: true -ColumnLimit: 180 +ColumnLimit: 140 IndentPPDirectives: AfterHash SortIncludes: Never +BinPackArguments: false From git at monitoring-plugins.org Sat Oct 26 07:00:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:12 +0200 (CEST) Subject: [monitoring-plugins] check_ups: clang-format again Message-ID: <20241026050012.D39702000126@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 4541b2b3571fd7806313187aa852bfe7c2ad5235 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Sat Oct 19 01:21:22 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=4541b2b check_ups: clang-format again --- plugins/check_ups.c | 144 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 105 insertions(+), 39 deletions(-) diff --git a/plugins/check_ups.c b/plugins/check_ups.c index e5badc8..c2451ab 100644 --- a/plugins/check_ups.c +++ b/plugins/check_ups.c @@ -235,9 +235,19 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_utility_deviation >= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, "%s", - perfdata("voltage", (long)(1000 * ups_utility_voltage), "mV", config.check_warn, (long)(1000 * config.warning_value), config.check_crit, - (long)(1000 * config.critical_value), true, 0, false, 0)); + xasprintf(&data, + "%s", + perfdata("voltage", + (long)(1000 * ups_utility_voltage), + "mV", + config.check_warn, + (long)(1000 * config.warning_value), + config.check_crit, + (long)(1000 * config.critical_value), + true, + 0, + false, + 0)); } else { xasprintf(&data, "%s", perfdata("voltage", (long)(1000 * ups_utility_voltage), "mV", false, 0, false, 0, true, 0, false, 0)); } @@ -262,9 +272,20 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_battery_percent <= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, "%s %s", data, - perfdata("battery", (long)ups_battery_percent, "%", config.check_warn, (long)(config.warning_value), config.check_crit, (long)(config.critical_value), true, - 0, true, 100)); + xasprintf(&data, + "%s %s", + data, + perfdata("battery", + (long)ups_battery_percent, + "%", + config.check_warn, + (long)(config.warning_value), + config.check_crit, + (long)(config.critical_value), + true, + 0, + true, + 100)); } else { xasprintf(&data, "%s %s", data, perfdata("battery", (long)ups_battery_percent, "%", false, 0, false, 0, true, 0, true, 100)); } @@ -289,9 +310,20 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_load_percent >= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, "%s %s", data, - perfdata("load", (long)ups_load_percent, "%", config.check_warn, (long)(config.warning_value), config.check_crit, (long)(config.critical_value), true, 0, - true, 100)); + xasprintf(&data, + "%s %s", + data, + perfdata("load", + (long)ups_load_percent, + "%", + config.check_warn, + (long)(config.warning_value), + config.check_crit, + (long)(config.critical_value), + true, + 0, + true, + 100)); } else { xasprintf(&data, "%s %s", data, perfdata("load", (long)ups_load_percent, "%", false, 0, false, 0, true, 0, true, 100)); } @@ -325,9 +357,20 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_temperature >= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, "%s %s", data, - perfdata("temp", (long)ups_temperature, tunits, config.check_warn, (long)(config.warning_value), config.check_crit, (long)(config.critical_value), true, 0, - false, 0)); + xasprintf(&data, + "%s %s", + data, + perfdata("temp", + (long)ups_temperature, + tunits, + config.check_warn, + (long)(config.warning_value), + config.check_crit, + (long)(config.critical_value), + true, + 0, + false, + 0)); } else { xasprintf(&data, "%s %s", data, perfdata("temp", (long)ups_temperature, tunits, false, 0, false, 0, true, 0, false, 0)); } @@ -351,9 +394,20 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_realpower >= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, "%s %s", data, - perfdata("realpower", (long)ups_realpower, "W", config.check_warn, (long)(config.warning_value), config.check_crit, (long)(config.critical_value), true, 0, - false, 0)); + xasprintf(&data, + "%s %s", + data, + perfdata("realpower", + (long)ups_realpower, + "W", + config.check_warn, + (long)(config.warning_value), + config.check_crit, + (long)(config.critical_value), + true, + 0, + false, + 0)); } else { xasprintf(&data, "%s %s", data, perfdata("realpower", (long)ups_realpower, "W", false, 0, false, 0, true, 0, false, 0)); } @@ -635,10 +689,12 @@ void print_help(void) { printf("Copyright (c) 2004 Arnaud Quette \n"); printf(COPYRIGHT, copyright, email); - printf("%s\n", _("This plugin tests the UPS service on the specified host. " - "Network UPS Tools")); - printf("%s\n", _("from www.networkupstools.org must be running for this " - "plugin to work.")); + printf("%s\n", + _("This plugin tests the UPS service on the specified host. " + "Network UPS Tools")); + printf("%s\n", + _("from www.networkupstools.org must be running for this " + "plugin to work.")); printf("\n\n"); @@ -667,31 +723,41 @@ void print_help(void) { /* printf (UT_VERBOSE); */ printf("\n"); - printf("%s\n", _("This plugin attempts to determine the status of a UPS " - "(Uninterruptible Power")); - printf("%s\n", _("Supply) on a local or remote host. If the UPS is online " - "or calibrating, the")); - printf("%s\n", _("plugin will return an OK state. If the battery is on it " - "will return a WARNING")); - printf("%s\n", _("state. If the UPS is off or has a low battery the plugin " - "will return a CRITICAL")); + printf("%s\n", + _("This plugin attempts to determine the status of a UPS " + "(Uninterruptible Power")); + printf("%s\n", + _("Supply) on a local or remote host. If the UPS is online " + "or calibrating, the")); + printf("%s\n", + _("plugin will return an OK state. If the battery is on it " + "will return a WARNING")); + printf("%s\n", + _("state. If the UPS is off or has a low battery the plugin " + "will return a CRITICAL")); printf("%s\n", _("state.")); printf("\n"); printf("%s\n", _("Notes:")); - printf(" %s\n", _("You may also specify a variable to check (such as " - "temperature, utility voltage,")); - printf(" %s\n", _("battery load, etc.) as well as warning and critical " - "thresholds for the value")); - printf(" %s\n", _("of that variable. If the remote host has multiple UPS " - "that are being monitored")); - printf(" %s\n", _("you will have to use the --ups option to specify which " - "UPS to check.")); + printf(" %s\n", + _("You may also specify a variable to check (such as " + "temperature, utility voltage,")); + printf(" %s\n", + _("battery load, etc.) as well as warning and critical " + "thresholds for the value")); + printf(" %s\n", + _("of that variable. If the remote host has multiple UPS " + "that are being monitored")); + printf(" %s\n", + _("you will have to use the --ups option to specify which " + "UPS to check.")); printf("\n"); - printf(" %s\n", _("This plugin requires that the UPSD daemon distributed " - "with Russell Kroll's")); - printf(" %s\n", _("Network UPS Tools be installed on the remote host. If " - "you do not have the")); + printf(" %s\n", + _("This plugin requires that the UPSD daemon distributed " + "with Russell Kroll's")); + printf(" %s\n", + _("Network UPS Tools be installed on the remote host. If " + "you do not have the")); printf(" %s\n", _("package installed on your system, you can download it from")); printf(" %s\n", _("http://www.networkupstools.org")); From git at monitoring-plugins.org Sat Oct 26 07:00:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:12 +0200 (CEST) Subject: [monitoring-plugins] clang-format options: set BinPack to true Message-ID: <20241026050012.E6D302000122@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 39705a8c1f7b8ecba29b1e3e5abb906d9c2e6b5b Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Fri Oct 25 11:45:48 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=39705a8 clang-format options: set BinPack to true --- .clang-format | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.clang-format b/.clang-format index a7d1949..f29680a 100644 --- a/.clang-format +++ b/.clang-format @@ -7,4 +7,4 @@ AlignConsecutiveMacros: true ColumnLimit: 140 IndentPPDirectives: AfterHash SortIncludes: Never -BinPackArguments: false +BinPackArguments: true From git at monitoring-plugins.org Sat Oct 26 07:00:13 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:13 +0200 (CEST) Subject: [monitoring-plugins] check_ups: clang-format again Message-ID: <20241026050013.081BD2000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 05ad606c09325ae9ae7d4607a55236245dcad47a Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Fri Oct 25 11:45:58 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=05ad606 check_ups: clang-format again --- plugins/check_ups.c | 144 ++++++++++++++-------------------------------------- 1 file changed, 39 insertions(+), 105 deletions(-) diff --git a/plugins/check_ups.c b/plugins/check_ups.c index c2451ab..f60c0e9 100644 --- a/plugins/check_ups.c +++ b/plugins/check_ups.c @@ -235,19 +235,9 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_utility_deviation >= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, - "%s", - perfdata("voltage", - (long)(1000 * ups_utility_voltage), - "mV", - config.check_warn, - (long)(1000 * config.warning_value), - config.check_crit, - (long)(1000 * config.critical_value), - true, - 0, - false, - 0)); + xasprintf(&data, "%s", + perfdata("voltage", (long)(1000 * ups_utility_voltage), "mV", config.check_warn, (long)(1000 * config.warning_value), + config.check_crit, (long)(1000 * config.critical_value), true, 0, false, 0)); } else { xasprintf(&data, "%s", perfdata("voltage", (long)(1000 * ups_utility_voltage), "mV", false, 0, false, 0, true, 0, false, 0)); } @@ -272,20 +262,9 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_battery_percent <= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, - "%s %s", - data, - perfdata("battery", - (long)ups_battery_percent, - "%", - config.check_warn, - (long)(config.warning_value), - config.check_crit, - (long)(config.critical_value), - true, - 0, - true, - 100)); + xasprintf(&data, "%s %s", data, + perfdata("battery", (long)ups_battery_percent, "%", config.check_warn, (long)(config.warning_value), + config.check_crit, (long)(config.critical_value), true, 0, true, 100)); } else { xasprintf(&data, "%s %s", data, perfdata("battery", (long)ups_battery_percent, "%", false, 0, false, 0, true, 0, true, 100)); } @@ -310,20 +289,9 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_load_percent >= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, - "%s %s", - data, - perfdata("load", - (long)ups_load_percent, - "%", - config.check_warn, - (long)(config.warning_value), - config.check_crit, - (long)(config.critical_value), - true, - 0, - true, - 100)); + xasprintf(&data, "%s %s", data, + perfdata("load", (long)ups_load_percent, "%", config.check_warn, (long)(config.warning_value), config.check_crit, + (long)(config.critical_value), true, 0, true, 100)); } else { xasprintf(&data, "%s %s", data, perfdata("load", (long)ups_load_percent, "%", false, 0, false, 0, true, 0, true, 100)); } @@ -357,20 +325,9 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_temperature >= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, - "%s %s", - data, - perfdata("temp", - (long)ups_temperature, - tunits, - config.check_warn, - (long)(config.warning_value), - config.check_crit, - (long)(config.critical_value), - true, - 0, - false, - 0)); + xasprintf(&data, "%s %s", data, + perfdata("temp", (long)ups_temperature, tunits, config.check_warn, (long)(config.warning_value), config.check_crit, + (long)(config.critical_value), true, 0, false, 0)); } else { xasprintf(&data, "%s %s", data, perfdata("temp", (long)ups_temperature, tunits, false, 0, false, 0, true, 0, false, 0)); } @@ -394,20 +351,9 @@ int main(int argc, char **argv) { } else if (config.check_warn && ups_realpower >= config.warning_value) { result = max_state(result, STATE_WARNING); } - xasprintf(&data, - "%s %s", - data, - perfdata("realpower", - (long)ups_realpower, - "W", - config.check_warn, - (long)(config.warning_value), - config.check_crit, - (long)(config.critical_value), - true, - 0, - false, - 0)); + xasprintf(&data, "%s %s", data, + perfdata("realpower", (long)ups_realpower, "W", config.check_warn, (long)(config.warning_value), config.check_crit, + (long)(config.critical_value), true, 0, false, 0)); } else { xasprintf(&data, "%s %s", data, perfdata("realpower", (long)ups_realpower, "W", false, 0, false, 0, true, 0, false, 0)); } @@ -689,12 +635,10 @@ void print_help(void) { printf("Copyright (c) 2004 Arnaud Quette \n"); printf(COPYRIGHT, copyright, email); - printf("%s\n", - _("This plugin tests the UPS service on the specified host. " - "Network UPS Tools")); - printf("%s\n", - _("from www.networkupstools.org must be running for this " - "plugin to work.")); + printf("%s\n", _("This plugin tests the UPS service on the specified host. " + "Network UPS Tools")); + printf("%s\n", _("from www.networkupstools.org must be running for this " + "plugin to work.")); printf("\n\n"); @@ -723,41 +667,31 @@ void print_help(void) { /* printf (UT_VERBOSE); */ printf("\n"); - printf("%s\n", - _("This plugin attempts to determine the status of a UPS " - "(Uninterruptible Power")); - printf("%s\n", - _("Supply) on a local or remote host. If the UPS is online " - "or calibrating, the")); - printf("%s\n", - _("plugin will return an OK state. If the battery is on it " - "will return a WARNING")); - printf("%s\n", - _("state. If the UPS is off or has a low battery the plugin " - "will return a CRITICAL")); + printf("%s\n", _("This plugin attempts to determine the status of a UPS " + "(Uninterruptible Power")); + printf("%s\n", _("Supply) on a local or remote host. If the UPS is online " + "or calibrating, the")); + printf("%s\n", _("plugin will return an OK state. If the battery is on it " + "will return a WARNING")); + printf("%s\n", _("state. If the UPS is off or has a low battery the plugin " + "will return a CRITICAL")); printf("%s\n", _("state.")); printf("\n"); printf("%s\n", _("Notes:")); - printf(" %s\n", - _("You may also specify a variable to check (such as " - "temperature, utility voltage,")); - printf(" %s\n", - _("battery load, etc.) as well as warning and critical " - "thresholds for the value")); - printf(" %s\n", - _("of that variable. If the remote host has multiple UPS " - "that are being monitored")); - printf(" %s\n", - _("you will have to use the --ups option to specify which " - "UPS to check.")); + printf(" %s\n", _("You may also specify a variable to check (such as " + "temperature, utility voltage,")); + printf(" %s\n", _("battery load, etc.) as well as warning and critical " + "thresholds for the value")); + printf(" %s\n", _("of that variable. If the remote host has multiple UPS " + "that are being monitored")); + printf(" %s\n", _("you will have to use the --ups option to specify which " + "UPS to check.")); printf("\n"); - printf(" %s\n", - _("This plugin requires that the UPSD daemon distributed " - "with Russell Kroll's")); - printf(" %s\n", - _("Network UPS Tools be installed on the remote host. If " - "you do not have the")); + printf(" %s\n", _("This plugin requires that the UPSD daemon distributed " + "with Russell Kroll's")); + printf(" %s\n", _("Network UPS Tools be installed on the remote host. If " + "you do not have the")); printf(" %s\n", _("package installed on your system, you can download it from")); printf(" %s\n", _("http://www.networkupstools.org")); From git at monitoring-plugins.org Sat Oct 26 07:00:13 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:13 +0200 (CEST) Subject: [monitoring-plugins] Add sanity options to test prepare scripts Message-ID: <20241026050013.1BA502000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 903773eb9c3cc2079187dc99c7b48662148ff679 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Fri Oct 25 12:02:14 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=903773e Add sanity options to test prepare scripts --- .github/mock.sh | 2 ++ .github/prepare_debian.sh | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/mock.sh b/.github/mock.sh index 7fbe690..8da147e 100755 --- a/.github/mock.sh +++ b/.github/mock.sh @@ -2,6 +2,8 @@ set -x +set -euo pipefail + export DEBIAN_FRONTEND=noninteractive BASE_PATH="/src" diff --git a/.github/prepare_debian.sh b/.github/prepare_debian.sh index 3f4674a..c38d241 100755 --- a/.github/prepare_debian.sh +++ b/.github/prepare_debian.sh @@ -1,7 +1,7 @@ #!/bin/bash set -x -set -e +set -euo pipefail export DEBIAN_FRONTEND=noninteractive From git at monitoring-plugins.org Sat Oct 26 07:00:13 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:13 +0200 (CEST) Subject: [monitoring-plugins] github/mock.sh: Improve readability and generel ... Message-ID: <20241026050013.2B4832000126@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: d996f6560065950393c186cb6c39d94ea9025ac1 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Fri Oct 25 12:21:16 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=d996f65 github/mock.sh: Improve readability and generel shellcheck stuff --- .github/mock.sh | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/mock.sh b/.github/mock.sh index 8da147e..0b91364 100755 --- a/.github/mock.sh +++ b/.github/mock.sh @@ -20,7 +20,11 @@ SPEC_FILE="${SPEC_DIR}monitoring-plugins.spec" cd ${BASE_PATH} dnf -y --setopt="tsflags=nodocs" update && \ - if [ ${distro_id} != "fedora" ]; then dnf -y --setopt="tsflags=nodocs" install epel-release; else platform_id="$(echo ${platform_id} | sed s/^f/fc/)"; fi && \ + if [ "${distro_id}" != "fedora" ]; then + dnf -y --setopt="tsflags=nodocs" install epel-release; + else + platform_id="$(echo "${platform_id}" | sed s/^f/fc/)"; + fi && \ case ${distro_id} in ol) case ${platform_id} in @@ -34,19 +38,27 @@ dnf -y --setopt="tsflags=nodocs" update && \ ;; esac dnf -y --setopt="tsflags=nodocs" install mock rpm-build git-core && \ - usermod -a -G mock $(whoami) + usermod -a -G mock "$(whoami)" + SRC_RPM="monitoring-plugins-*-1.${platform_id}.src.rpm" + if command -v git > /dev/null 2>&1; then git config --global --add safe.directory ${BASE_PATH} SHA="$(git rev-parse HEAD)" sed "s/^%global commit.*/%global commit ${SHA}/" ${SPEC_FILE} > ${SPEC_DIR}monitoring-plugins-git.spec sed -i "s/^%global fromgit.*/%global fromgit 1/" ${SPEC_DIR}monitoring-plugins-git.spec SPEC_FILE="${SPEC_DIR}monitoring-plugins-git.spec" - SRC_RPM="monitoring-plugins-*git.$(echo ${SHA:0:7})*.${platform_id}.src.rpm" + SRC_RPM="monitoring-plugins-*git.${SHA:0:7}*.${platform_id}.src.rpm" fi + mkdir -p "${SRCRPM_DIR}" "${RPM_DIR}" #rpmbuild --undefine=_disable_source_fetch --define "_sourcedir ${SOURCE_DIR}" -ba ${SPEC_FILE} -dnf -y --setopt="tsflags=nodocs" install rpmdevtools && spectool -g -C ${SOURCE_DIR} ${SPEC_FILE} && \ -mock --dnf --clean --spec ${SPEC_FILE} --sources=${SOURCE_DIR} --result=${SRCRPM_DIR} --build || { cat ${SRCRPM_DIR}/{root,build}.log; exit 1; } -mock --dnf --clean --sources=${SOURCE_DIR} --result=${RPM_DIR} --rebuild ${SRCRPM_DIR}/${SRC_RPM} || { cat ${RPM_DIR}/{root,build}.log; exit 1; } +dnf -y --setopt="tsflags=nodocs" install rpmdevtools && \ + spectool -g -C ${SOURCE_DIR} ${SPEC_FILE} && \ + { mock --dnf --clean --spec ${SPEC_FILE} --sources=${SOURCE_DIR} --result=${SRCRPM_DIR} --build || \ + { cat ${SRCRPM_DIR}/{root,build}.log; exit 1; } } + +mock --dnf --clean --sources=${SOURCE_DIR} --result=${RPM_DIR} --rebuild "${SRCRPM_DIR}/${SRC_RPM}" || \ + { cat ${RPM_DIR}/{root,build}.log; exit 1; } + ls -la ${SOURCE_DIR} ${SRCRPM_DIR} ${RPM_DIR} From git at monitoring-plugins.org Sat Oct 26 07:00:13 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:13 +0200 (CEST) Subject: [monitoring-plugins] prepare_debian.sh: Fix typo Message-ID: <20241026050013.42BE0200014F@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 78246e904ddfc9c0a88e9f47797dc38c1693abbb Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Fri Oct 25 12:30:19 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=78246e9 prepare_debian.sh: Fix typo --- .github/prepare_debian.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/prepare_debian.sh b/.github/prepare_debian.sh index c38d241..3640e50 100755 --- a/.github/prepare_debian.sh +++ b/.github/prepare_debian.sh @@ -127,5 +127,5 @@ sed "/NP_HOST_TLS_CERT/s/.*/'NP_HOST_TLS_CERT' => '$(hostname)',/" -i /src/.gith # create some test files to lower inodes for i in $(seq 10); do - touch /media/ramdisk2/test.$1 + touch /media/ramdisk2/test.$i done From git at monitoring-plugins.org Sat Oct 26 07:00:13 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Sat, 26 Oct 2024 07:00:13 +0200 (CEST) Subject: [monitoring-plugins] mock.sh: remove some quotting to allow pathname ... Message-ID: <20241026050013.554222000122@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 54162dbaf689d560656e3eb6c3313840ebc0513a Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Fri Oct 25 12:52:32 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=54162db mock.sh: remove some quotting to allow pathname expansion again --- .github/mock.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/mock.sh b/.github/mock.sh index 0b91364..87543ce 100755 --- a/.github/mock.sh +++ b/.github/mock.sh @@ -58,7 +58,7 @@ dnf -y --setopt="tsflags=nodocs" install rpmdevtools && \ { mock --dnf --clean --spec ${SPEC_FILE} --sources=${SOURCE_DIR} --result=${SRCRPM_DIR} --build || \ { cat ${SRCRPM_DIR}/{root,build}.log; exit 1; } } -mock --dnf --clean --sources=${SOURCE_DIR} --result=${RPM_DIR} --rebuild "${SRCRPM_DIR}/${SRC_RPM}" || \ +mock --dnf --clean --sources=${SOURCE_DIR} --result=${RPM_DIR} --rebuild "${SRCRPM_DIR}"/${SRC_RPM} || \ { cat ${RPM_DIR}/{root,build}.log; exit 1; } ls -la ${SOURCE_DIR} ${SRCRPM_DIR} ${RPM_DIR} From git at monitoring-plugins.org Sat Oct 26 07:00:13 2024 From: git at monitoring-plugins.org (GitHub) Date: Sat, 26 Oct 2024 07:00:13 +0200 (CEST) Subject: [monitoring-plugins] Merge pull request #2031 from ... Message-ID: <20241026050013.69C562000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 87eb2e1e0c8f39d9525c4823f9528bc6ad018dc6 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Sat Oct 26 06:56:22 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=87eb2e1 Merge pull request #2031 from RincewindsHat/fix/test_improvements Improve readability and reliability of test prepare scripts --- From git at monitoring-plugins.org Sat Oct 26 07:00:13 2024 From: git at monitoring-plugins.org (GitHub) Date: Sat, 26 Oct 2024 07:00:13 +0200 (CEST) Subject: [monitoring-plugins] Merge pull request #2030 from ... Message-ID: <20241026050013.7B6352000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 6b20391ff3cfe0e69539238ade2c62dfce209fc0 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Sat Oct 26 06:56:57 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=6b20391 Merge pull request #2030 from RincewindsHat/cleanup/check_ups Cleanup/check ups --- From git at monitoring-plugins.org Wed Oct 30 17:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Wed, 30 Oct 2024 17:30:12 +0100 (CET) Subject: [monitoring-plugins] check_icmp: clang-format Message-ID: <20241030163012.BCAFF2000122@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 0caa47a50bae586173f40ca7544d4290de0097a5 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 11:44:28 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0caa47a check_icmp: clang-format --- plugins-root/check_icmp.c | 1525 ++++++++++++++++++++++----------------------- 1 file changed, 742 insertions(+), 783 deletions(-) diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index f788d42..5ad1d84 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -1,40 +1,40 @@ /***************************************************************************** -* -* Monitoring check_icmp plugin -* -* License: GPL -* Copyright (c) 2005-2008 Monitoring Plugins Development Team -* Original Author : Andreas Ericsson -* -* Description: -* -* This file contains the check_icmp plugin -* -* Relevant RFC's: 792 (ICMP), 791 (IP) -* -* This program was modeled somewhat after the check_icmp program, -* which was in turn a hack of fping (www.fping.org) but has been -* completely rewritten since to generate higher precision rta values, -* and support several different modes as well as setting ttl to control. -* redundant routes. The only remainders of fping is currently a few -* function names. -* -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -* -* -*****************************************************************************/ + * + * Monitoring check_icmp plugin + * + * License: GPL + * Copyright (c) 2005-2008 Monitoring Plugins Development Team + * Original Author : Andreas Ericsson + * + * Description: + * + * This file contains the check_icmp plugin + * + * Relevant RFC's: 792 (ICMP), 791 (IP) + * + * This program was modeled somewhat after the check_icmp program, + * which was in turn a hack of fping (www.fping.org) but has been + * completely rewritten since to generate higher precision rta values, + * and support several different modes as well as setting ttl to control. + * redundant routes. The only remainders of fping is currently a few + * function names. + * + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + *****************************************************************************/ /* progname may change */ /* char *progname = "check_icmp"; */ @@ -48,7 +48,7 @@ const char *email = "devel at monitoring-plugins.org"; #include "utils.h" #if HAVE_SYS_SOCKIO_H -#include +# include #endif #include @@ -65,84 +65,83 @@ const char *email = "devel at monitoring-plugins.org"; #include #include - /** sometimes undefined system macros (quite a few, actually) **/ #ifndef MAXTTL -# define MAXTTL 255 +# define MAXTTL 255 #endif #ifndef INADDR_NONE -# define INADDR_NONE (in_addr_t)(-1) +# define INADDR_NONE (in_addr_t)(-1) #endif #ifndef SOL_IP -#define SOL_IP 0 +# define SOL_IP 0 #endif /* we bundle these in one #ifndef, since they're all from BSD * Put individual #ifndef's around those that bother you */ #ifndef ICMP_UNREACH_NET_UNKNOWN -# define ICMP_UNREACH_NET_UNKNOWN 6 -# define ICMP_UNREACH_HOST_UNKNOWN 7 -# define ICMP_UNREACH_ISOLATED 8 -# define ICMP_UNREACH_NET_PROHIB 9 -# define ICMP_UNREACH_HOST_PROHIB 10 -# define ICMP_UNREACH_TOSNET 11 -# define ICMP_UNREACH_TOSHOST 12 +# define ICMP_UNREACH_NET_UNKNOWN 6 +# define ICMP_UNREACH_HOST_UNKNOWN 7 +# define ICMP_UNREACH_ISOLATED 8 +# define ICMP_UNREACH_NET_PROHIB 9 +# define ICMP_UNREACH_HOST_PROHIB 10 +# define ICMP_UNREACH_TOSNET 11 +# define ICMP_UNREACH_TOSHOST 12 #endif /* tru64 has the ones above, but not these */ #ifndef ICMP_UNREACH_FILTER_PROHIB -# define ICMP_UNREACH_FILTER_PROHIB 13 -# define ICMP_UNREACH_HOST_PRECEDENCE 14 -# define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 +# define ICMP_UNREACH_FILTER_PROHIB 13 +# define ICMP_UNREACH_HOST_PRECEDENCE 14 +# define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 #endif -typedef unsigned short range_t; /* type for get_range() -- unimplemented */ +typedef unsigned short range_t; /* type for get_range() -- unimplemented */ typedef struct rta_host { - unsigned short id; /* id in **table, and icmp pkts */ - char *name; /* arg used for adding this host */ - char *msg; /* icmp error message, if any */ - struct sockaddr_storage saddr_in; /* the address of this host */ - struct sockaddr_storage error_addr; /* stores address of error replies */ - unsigned long long time_waited; /* total time waited, in usecs */ + unsigned short id; /* id in **table, and icmp pkts */ + char *name; /* arg used for adding this host */ + char *msg; /* icmp error message, if any */ + struct sockaddr_storage saddr_in; /* the address of this host */ + struct sockaddr_storage error_addr; /* stores address of error replies */ + unsigned long long time_waited; /* total time waited, in usecs */ unsigned int icmp_sent, icmp_recv, icmp_lost; /* counters */ - unsigned char icmp_type, icmp_code; /* type and code from errors */ - unsigned short flags; /* control/status flags */ - double rta; /* measured RTA */ - int rta_status; // check result for RTA checks - double rtmax; /* max rtt */ - double rtmin; /* min rtt */ - double jitter; /* measured jitter */ - int jitter_status; // check result for Jitter checks - double jitter_max; /* jitter rtt maximum */ - double jitter_min; /* jitter rtt minimum */ + unsigned char icmp_type, icmp_code; /* type and code from errors */ + unsigned short flags; /* control/status flags */ + double rta; /* measured RTA */ + int rta_status; // check result for RTA checks + double rtmax; /* max rtt */ + double rtmin; /* min rtt */ + double jitter; /* measured jitter */ + int jitter_status; // check result for Jitter checks + double jitter_max; /* jitter rtt maximum */ + double jitter_min; /* jitter rtt minimum */ double EffectiveLatency; - double mos; /* Mean opnion score */ - int mos_status; // check result for MOS checks - double score; /* score */ - int score_status; // check result for score checks + double mos; /* Mean opnion score */ + int mos_status; // check result for MOS checks + double score; /* score */ + int score_status; // check result for score checks u_int last_tdiff; - u_int last_icmp_seq; /* Last ICMP_SEQ to check out of order pkts */ - unsigned char pl; /* measured packet loss */ - int pl_status; // check result for packet loss checks - struct rta_host *next; /* linked list */ - int order_status; // check result for packet order checks + u_int last_icmp_seq; /* Last ICMP_SEQ to check out of order pkts */ + unsigned char pl; /* measured packet loss */ + int pl_status; // check result for packet loss checks + struct rta_host *next; /* linked list */ + int order_status; // check result for packet order checks } rta_host; -#define FLAG_LOST_CAUSE 0x01 /* decidedly dead target. */ +#define FLAG_LOST_CAUSE 0x01 /* decidedly dead target. */ /* threshold structure. all values are maximum allowed, exclusive */ typedef struct threshold { - unsigned char pl; /* max allowed packet loss in percent */ - unsigned int rta; /* roundtrip time average, microseconds */ - double jitter; /* jitter time average, microseconds */ - double mos; /* MOS */ - double score; /* Score */ + unsigned char pl; /* max allowed packet loss in percent */ + unsigned int rta; /* roundtrip time average, microseconds */ + double jitter; /* jitter time average, microseconds */ + double mos; /* MOS */ + double score; /* Score */ } threshold; /* the data structure */ typedef struct icmp_ping_data { - struct timeval stime; /* timestamp (saved in protocol struct as well) */ + struct timeval stime; /* timestamp (saved in protocol struct as well) */ unsigned short ping_id; } icmp_ping_data; @@ -171,48 +170,42 @@ typedef union icmp_packet { * MODE_ICMP: implement something similar to check_icmp (MODE_RTA without * tcp and udp args does this) */ -#define MODE_RTA 0 +#define MODE_RTA 0 #define MODE_HOSTCHECK 1 -#define MODE_ALL 2 -#define MODE_ICMP 3 +#define MODE_ALL 2 +#define MODE_ICMP 3 -enum enum_threshold_mode { - const_rta_mode, - const_packet_loss_mode, - const_jitter_mode, - const_mos_mode, - const_score_mode -}; +enum enum_threshold_mode { const_rta_mode, const_packet_loss_mode, const_jitter_mode, const_mos_mode, const_score_mode }; typedef enum enum_threshold_mode threshold_mode; /* the different ping types we can do * TODO: investigate ARP ping as well */ #define HAVE_ICMP 1 -#define HAVE_UDP 2 -#define HAVE_TCP 4 -#define HAVE_ARP 8 - -#define MIN_PING_DATA_SIZE sizeof(struct icmp_ping_data) -#define MAX_IP_PKT_SIZE 65536 /* (theoretical) max IP packet size */ -#define IP_HDR_SIZE 20 -#define MAX_PING_DATA (MAX_IP_PKT_SIZE - IP_HDR_SIZE - ICMP_MINLEN) +#define HAVE_UDP 2 +#define HAVE_TCP 4 +#define HAVE_ARP 8 + +#define MIN_PING_DATA_SIZE sizeof(struct icmp_ping_data) +#define MAX_IP_PKT_SIZE 65536 /* (theoretical) max IP packet size */ +#define IP_HDR_SIZE 20 +#define MAX_PING_DATA (MAX_IP_PKT_SIZE - IP_HDR_SIZE - ICMP_MINLEN) #define DEFAULT_PING_DATA_SIZE (MIN_PING_DATA_SIZE + 44) /* various target states */ -#define TSTATE_INACTIVE 0x01 /* don't ping this host anymore */ -#define TSTATE_WAITING 0x02 /* unanswered packets on the wire */ -#define TSTATE_ALIVE 0x04 /* target is alive (has answered something) */ -#define TSTATE_UNREACH 0x08 +#define TSTATE_INACTIVE 0x01 /* don't ping this host anymore */ +#define TSTATE_WAITING 0x02 /* unanswered packets on the wire */ +#define TSTATE_ALIVE 0x04 /* target is alive (has answered something) */ +#define TSTATE_UNREACH 0x08 /** prototypes **/ -void print_help (void); -void print_usage (void); +void print_help(void); +void print_usage(void); static u_int get_timevar(const char *); static u_int get_timevaldiff(struct timeval *, struct timeval *); static in_addr_t get_ip_address(const char *); static int wait_for_reply(int, u_int); -static int recvfrom_wto(int, void *, unsigned int, struct sockaddr *, u_int *, struct timeval*); +static int recvfrom_wto(int, void *, unsigned int, struct sockaddr *, u_int *, struct timeval *); static int send_icmp_ping(int, struct rta_host *); static int get_threshold(char *str, threshold *th); static bool get_threshold2(char *str, size_t length, threshold *, threshold *, threshold_mode mode); @@ -235,20 +228,8 @@ extern char **environ; /** global variables **/ static struct rta_host **table, *cursor, *list; -static threshold crit = { - .pl = 80, - .rta = 500000, - .jitter = 0.0, - .mos = 0.0, - .score = 0.0 -}; -static threshold warn = { - .pl = 40, - .rta = 200000, - .jitter = 0.0, - .mos = 0.0, - .score = 0.0 -}; +static threshold crit = {.pl = 80, .rta = 500000, .jitter = 0.0, .mos = 0.0, .score = 0.0}; +static threshold warn = {.pl = 40, .rta = 200000, .jitter = 0.0, .mos = 0.0, .score = 0.0}; static int mode, protocols, sockets, debug = 0, timeout = 10; static unsigned short icmp_data_size = DEFAULT_PING_DATA_SIZE; @@ -268,17 +249,15 @@ static unsigned int warn_down = 1, crit_down = 1; /* host down threshold values static int min_hosts_alive = -1; float pkt_backoff_factor = 1.5; float target_backoff_factor = 1.5; -bool rta_mode=false; -bool pl_mode=false; -bool jitter_mode=false; -bool score_mode=false; -bool mos_mode=false; -bool order_mode=false; +bool rta_mode = false; +bool pl_mode = false; +bool jitter_mode = false; +bool score_mode = false; +bool mos_mode = false; +bool order_mode = false; /** code start **/ -static void -crash(const char *fmt, ...) -{ +static void crash(const char *fmt, ...) { va_list ap; printf("%s: ", progname); @@ -287,55 +266,100 @@ crash(const char *fmt, ...) vprintf(fmt, ap); va_end(ap); - if(errno) printf(": %s", strerror(errno)); + if (errno) + printf(": %s", strerror(errno)); puts(""); exit(3); } - -static const char * -get_icmp_error_msg(unsigned char icmp_type, unsigned char icmp_code) -{ +static const char *get_icmp_error_msg(unsigned char icmp_type, unsigned char icmp_code) { const char *msg = "unreachable"; - if(debug > 1) printf("get_icmp_error_msg(%u, %u)\n", icmp_type, icmp_code); - switch(icmp_type) { + if (debug > 1) + printf("get_icmp_error_msg(%u, %u)\n", icmp_type, icmp_code); + switch (icmp_type) { case ICMP_UNREACH: - switch(icmp_code) { - case ICMP_UNREACH_NET: msg = "Net unreachable"; break; - case ICMP_UNREACH_HOST: msg = "Host unreachable"; break; - case ICMP_UNREACH_PROTOCOL: msg = "Protocol unreachable (firewall?)"; break; - case ICMP_UNREACH_PORT: msg = "Port unreachable (firewall?)"; break; - case ICMP_UNREACH_NEEDFRAG: msg = "Fragmentation needed"; break; - case ICMP_UNREACH_SRCFAIL: msg = "Source route failed"; break; - case ICMP_UNREACH_ISOLATED: msg = "Source host isolated"; break; - case ICMP_UNREACH_NET_UNKNOWN: msg = "Unknown network"; break; - case ICMP_UNREACH_HOST_UNKNOWN: msg = "Unknown host"; break; - case ICMP_UNREACH_NET_PROHIB: msg = "Network denied (firewall?)"; break; - case ICMP_UNREACH_HOST_PROHIB: msg = "Host denied (firewall?)"; break; - case ICMP_UNREACH_TOSNET: msg = "Bad TOS for network (firewall?)"; break; - case ICMP_UNREACH_TOSHOST: msg = "Bad TOS for host (firewall?)"; break; - case ICMP_UNREACH_FILTER_PROHIB: msg = "Prohibited by filter (firewall)"; break; - case ICMP_UNREACH_HOST_PRECEDENCE: msg = "Host precedence violation"; break; - case ICMP_UNREACH_PRECEDENCE_CUTOFF: msg = "Precedence cutoff"; break; - default: msg = "Invalid code"; break; + switch (icmp_code) { + case ICMP_UNREACH_NET: + msg = "Net unreachable"; + break; + case ICMP_UNREACH_HOST: + msg = "Host unreachable"; + break; + case ICMP_UNREACH_PROTOCOL: + msg = "Protocol unreachable (firewall?)"; + break; + case ICMP_UNREACH_PORT: + msg = "Port unreachable (firewall?)"; + break; + case ICMP_UNREACH_NEEDFRAG: + msg = "Fragmentation needed"; + break; + case ICMP_UNREACH_SRCFAIL: + msg = "Source route failed"; + break; + case ICMP_UNREACH_ISOLATED: + msg = "Source host isolated"; + break; + case ICMP_UNREACH_NET_UNKNOWN: + msg = "Unknown network"; + break; + case ICMP_UNREACH_HOST_UNKNOWN: + msg = "Unknown host"; + break; + case ICMP_UNREACH_NET_PROHIB: + msg = "Network denied (firewall?)"; + break; + case ICMP_UNREACH_HOST_PROHIB: + msg = "Host denied (firewall?)"; + break; + case ICMP_UNREACH_TOSNET: + msg = "Bad TOS for network (firewall?)"; + break; + case ICMP_UNREACH_TOSHOST: + msg = "Bad TOS for host (firewall?)"; + break; + case ICMP_UNREACH_FILTER_PROHIB: + msg = "Prohibited by filter (firewall)"; + break; + case ICMP_UNREACH_HOST_PRECEDENCE: + msg = "Host precedence violation"; + break; + case ICMP_UNREACH_PRECEDENCE_CUTOFF: + msg = "Precedence cutoff"; + break; + default: + msg = "Invalid code"; + break; } break; case ICMP_TIMXCEED: /* really 'out of reach', or non-existent host behind a router serving * two different subnets */ - switch(icmp_code) { - case ICMP_TIMXCEED_INTRANS: msg = "Time to live exceeded in transit"; break; - case ICMP_TIMXCEED_REASS: msg = "Fragment reassembly time exceeded"; break; - default: msg = "Invalid code"; break; + switch (icmp_code) { + case ICMP_TIMXCEED_INTRANS: + msg = "Time to live exceeded in transit"; + break; + case ICMP_TIMXCEED_REASS: + msg = "Fragment reassembly time exceeded"; + break; + default: + msg = "Invalid code"; + break; } break; - case ICMP_SOURCEQUENCH: msg = "Transmitting too fast"; break; - case ICMP_REDIRECT: msg = "Redirect (change route)"; break; - case ICMP_PARAMPROB: msg = "Bad IP header (required option absent)"; break; + case ICMP_SOURCEQUENCH: + msg = "Transmitting too fast"; + break; + case ICMP_REDIRECT: + msg = "Redirect (change route)"; + break; + case ICMP_PARAMPROB: + msg = "Bad IP header (required option absent)"; + break; /* the following aren't error messages, so ignore */ case ICMP_TSTAMP: @@ -344,25 +368,26 @@ get_icmp_error_msg(unsigned char icmp_type, unsigned char icmp_code) case ICMP_IREQREPLY: case ICMP_MASKREQ: case ICMP_MASKREPLY: - default: msg = ""; break; + default: + msg = ""; + break; } return msg; } -static int -handle_random_icmp(unsigned char *packet, struct sockaddr_storage *addr) -{ +static int handle_random_icmp(unsigned char *packet, struct sockaddr_storage *addr) { struct icmp p, sent_icmp; struct rta_host *host = NULL; memcpy(&p, packet, sizeof(p)); - if(p.icmp_type == ICMP_ECHO && ntohs(p.icmp_id) == pid) { + if (p.icmp_type == ICMP_ECHO && ntohs(p.icmp_id) == pid) { /* echo request from us to us (pinging localhost) */ return 0; } - if(debug) printf("handle_random_icmp(%p, %p)\n", (void *)&p, (void *)addr); + if (debug) + printf("handle_random_icmp(%p, %p)\n", (void *)&p, (void *)addr); /* only handle a few types, since others can't possibly be replies to * us in a sane network (if it is anyway, it will be counted as lost @@ -374,44 +399,39 @@ handle_random_icmp(unsigned char *packet, struct sockaddr_storage *addr) * TIMXCEED actually sends a proper icmp response we will have passed * too many hops to have a hope of reaching it later, in which case it * indicates overconfidence in the network, poor routing or both. */ - if(p.icmp_type != ICMP_UNREACH && p.icmp_type != ICMP_TIMXCEED && - p.icmp_type != ICMP_SOURCEQUENCH && p.icmp_type != ICMP_PARAMPROB) - { + if (p.icmp_type != ICMP_UNREACH && p.icmp_type != ICMP_TIMXCEED && p.icmp_type != ICMP_SOURCEQUENCH && p.icmp_type != ICMP_PARAMPROB) { return 0; } /* might be for us. At least it holds the original package (according * to RFC 792). If it isn't, just ignore it */ memcpy(&sent_icmp, packet + 28, sizeof(sent_icmp)); - if(sent_icmp.icmp_type != ICMP_ECHO || ntohs(sent_icmp.icmp_id) != pid || - ntohs(sent_icmp.icmp_seq) >= targets*packets) - { - if(debug) printf("Packet is no response to a packet we sent\n"); + if (sent_icmp.icmp_type != ICMP_ECHO || ntohs(sent_icmp.icmp_id) != pid || ntohs(sent_icmp.icmp_seq) >= targets * packets) { + if (debug) + printf("Packet is no response to a packet we sent\n"); return 0; } /* it is indeed a response for us */ - host = table[ntohs(sent_icmp.icmp_seq)/packets]; - if(debug) { + host = table[ntohs(sent_icmp.icmp_seq) / packets]; + if (debug) { char address[INET6_ADDRSTRLEN]; parse_address(addr, address, sizeof(address)); - printf("Received \"%s\" from %s for ICMP ECHO sent to %s.\n", - get_icmp_error_msg(p.icmp_type, p.icmp_code), - address, host->name); + printf("Received \"%s\" from %s for ICMP ECHO sent to %s.\n", get_icmp_error_msg(p.icmp_type, p.icmp_code), address, host->name); } icmp_lost++; host->icmp_lost++; /* don't spend time on lost hosts any more */ - if(host->flags & FLAG_LOST_CAUSE) return 0; + if (host->flags & FLAG_LOST_CAUSE) + return 0; /* source quench means we're sending too fast, so increase the * interval and mark this packet lost */ - if(p.icmp_type == ICMP_SOURCEQUENCH) { + if (p.icmp_type == ICMP_SOURCEQUENCH) { pkt_interval *= pkt_backoff_factor; target_interval *= target_backoff_factor; - } - else { + } else { targets_down++; host->flags |= FLAG_LOST_CAUSE; } @@ -422,21 +442,18 @@ handle_random_icmp(unsigned char *packet, struct sockaddr_storage *addr) return 0; } -void parse_address(struct sockaddr_storage *addr, char *address, int size) -{ +void parse_address(struct sockaddr_storage *addr, char *address, int size) { switch (address_family) { case AF_INET: inet_ntop(address_family, &((struct sockaddr_in *)addr)->sin_addr, address, size); - break; + break; case AF_INET6: inet_ntop(address_family, &((struct sockaddr_in6 *)addr)->sin6_addr, address, size); - break; + break; } } -int -main(int argc, char **argv) -{ +int main(int argc, char **argv) { int i; char *ptr; long int arg; @@ -450,10 +467,10 @@ main(int argc, char **argv) int on = 1; #endif char *source_ip = NULL; - char * opts_str = "vhVw:c:n:p:t:H:s:i:b:I:l:m:P:R:J:S:M:O64"; - setlocale (LC_ALL, ""); - bindtextdomain (PACKAGE, LOCALEDIR); - textdomain (PACKAGE); + char *opts_str = "vhVw:c:n:p:t:H:s:i:b:I:l:m:P:R:J:S:M:O64"; + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); /* we only need to be setsuid when we get the sockets, so do * that before pointer magic (esp. on network data) */ @@ -465,8 +482,10 @@ main(int argc, char **argv) /* get calling name the old-fashioned way for portability instead * of relying on the glibc-ism __progname */ ptr = strrchr(argv[0], '/'); - if(ptr) progname = &ptr[1]; - else progname = argv[0]; + if (ptr) + progname = &ptr[1]; + else + progname = argv[0]; /* now set defaults. Use progname to set them initially (allows for * superfast check_host program when target host is up */ @@ -478,31 +497,29 @@ main(int argc, char **argv) crit.rta = 500000; crit.pl = 80; crit.jitter = 50; - crit.mos= 3; - crit.score=70; + crit.mos = 3; + crit.score = 70; /* Default warning thresholds */ warn.rta = 200000; warn.pl = 40; warn.jitter = 40; - warn.mos= 3.5; - warn.score=80; + warn.mos = 3.5; + warn.score = 80; protocols = HAVE_ICMP | HAVE_UDP | HAVE_TCP; - pkt_interval = 80000; /* 80 msec packet interval by default */ + pkt_interval = 80000; /* 80 msec packet interval by default */ packets = 5; - if(!strcmp(progname, "check_icmp") || !strcmp(progname, "check_ping")) { + if (!strcmp(progname, "check_icmp") || !strcmp(progname, "check_ping")) { mode = MODE_ICMP; protocols = HAVE_ICMP; - } - else if(!strcmp(progname, "check_host")) { + } else if (!strcmp(progname, "check_host")) { mode = MODE_HOSTCHECK; pkt_interval = 1000000; packets = 5; crit.rta = warn.rta = 1000000; crit.pl = warn.pl = 100; - } - else if(!strcmp(progname, "check_rta_multi")) { + } else if (!strcmp(progname, "check_rta_multi")) { mode = MODE_ALL; target_interval = 0; pkt_interval = 50000; @@ -510,17 +527,17 @@ main(int argc, char **argv) } /* support "--help" and "--version" */ - if(argc == 2) { - if(!strcmp(argv[1], "--help")) + if (argc == 2) { + if (!strcmp(argv[1], "--help")) strcpy(argv[1], "-h"); - if(!strcmp(argv[1], "--version")) + if (!strcmp(argv[1], "--version")) strcpy(argv[1], "-V"); } /* Parse protocol arguments first */ - for(i = 1; i < argc; i++) { - while((arg = getopt(argc, argv, opts_str)) != EOF) { - switch(arg) { + for (i = 1; i < argc; i++) { + while ((arg = getopt(argc, argv, opts_str)) != EOF) { + switch (arg) { case '4': if (address_family != -1) crash("Multiple protocol versions not supported"); @@ -532,7 +549,7 @@ main(int argc, char **argv) crash("Multiple protocol versions not supported"); address_family = AF_INET6; #else - usage (_("IPv6 support not available\n")); + usage(_("IPv6 support not available\n")); #endif break; } @@ -545,22 +562,19 @@ main(int argc, char **argv) unsigned long size; bool err; /* parse the arguments */ - for(i = 1; i < argc; i++) { - while((arg = getopt(argc, argv, opts_str)) != EOF) { - switch(arg) { + for (i = 1; i < argc; i++) { + while ((arg = getopt(argc, argv, opts_str)) != EOF) { + switch (arg) { case 'v': debug++; break; case 'b': - size = strtol(optarg,NULL,0); - if (size >= (sizeof(struct icmp) + sizeof(struct icmp_ping_data)) && - size < MAX_PING_DATA) { + size = strtol(optarg, NULL, 0); + if (size >= (sizeof(struct icmp) + sizeof(struct icmp_ping_data)) && size < MAX_PING_DATA) { icmp_data_size = size; icmp_pkt_size = size + ICMP_MINLEN; } else - usage_va("ICMP data length must be between: %lu and %lu", - sizeof(struct icmp) + sizeof(struct icmp_ping_data), - MAX_PING_DATA - 1); + usage_va("ICMP data length must be between: %lu and %lu", sizeof(struct icmp) + sizeof(struct icmp_ping_data), MAX_PING_DATA - 1); break; case 'i': pkt_interval = get_timevar(optarg); @@ -580,7 +594,8 @@ main(int argc, char **argv) break; case 't': timeout = strtoul(optarg, NULL, 0); - if(!timeout) timeout = 10; + if (!timeout) + timeout = 10; break; case 'H': add_target(optarg); @@ -593,7 +608,7 @@ main(int argc, char **argv) break; case 'd': /* implement later, for cluster checks */ warn_down = (unsigned char)strtoul(optarg, &ptr, 0); - if(ptr) { + if (ptr) { crit_down = (unsigned char)strtoul(ptr + 1, NULL, 0); } break; @@ -601,54 +616,54 @@ main(int argc, char **argv) source_ip = optarg; break; case 'V': /* version */ - print_revision (progname, NP_VERSION); - exit (STATE_UNKNOWN); + print_revision(progname, NP_VERSION); + exit(STATE_UNKNOWN); case 'h': /* help */ - print_help (); - exit (STATE_UNKNOWN); + print_help(); + exit(STATE_UNKNOWN); break; case 'R': /* RTA mode */ err = get_threshold2(optarg, strlen(optarg), &warn, &crit, const_rta_mode); if (!err) { - crash("Failed to parse RTA threshold"); + crash("Failed to parse RTA threshold"); } - rta_mode=true; + rta_mode = true; break; case 'P': /* packet loss mode */ err = get_threshold2(optarg, strlen(optarg), &warn, &crit, const_packet_loss_mode); if (!err) { - crash("Failed to parse packet loss threshold"); + crash("Failed to parse packet loss threshold"); } - pl_mode=true; + pl_mode = true; break; case 'J': /* jitter mode */ err = get_threshold2(optarg, strlen(optarg), &warn, &crit, const_jitter_mode); if (!err) { - crash("Failed to parse jitter threshold"); + crash("Failed to parse jitter threshold"); } - jitter_mode=true; + jitter_mode = true; break; case 'M': /* MOS mode */ err = get_threshold2(optarg, strlen(optarg), &warn, &crit, const_mos_mode); if (!err) { - crash("Failed to parse MOS threshold"); + crash("Failed to parse MOS threshold"); } - mos_mode=true; + mos_mode = true; break; case 'S': /* score mode */ err = get_threshold2(optarg, strlen(optarg), &warn, &crit, const_score_mode); if (!err) { - crash("Failed to parse score threshold"); + crash("Failed to parse score threshold"); } - score_mode=true; + score_mode = true; break; case 'O': /* out of order mode */ - order_mode=true; + order_mode = true; break; } } @@ -663,37 +678,42 @@ main(int argc, char **argv) /* printf("pid = %u\n", pid); */ /* Parse extra opts if any */ - argv=np_extra_opts(&argc, argv, progname); + argv = np_extra_opts(&argc, argv, progname); argv = &argv[optind]; - while(*argv) { + while (*argv) { add_target(*argv); argv++; } - if(!targets) { + if (!targets) { errno = 0; crash("No hosts to check"); } // add_target might change address_family - switch ( address_family ){ - case AF_INET: icmp_proto = IPPROTO_ICMP; - break; - case AF_INET6: icmp_proto = IPPROTO_ICMPV6; - break; - default: crash("Address family not supported"); + switch (address_family) { + case AF_INET: + icmp_proto = IPPROTO_ICMP; + break; + case AF_INET6: + icmp_proto = IPPROTO_ICMPV6; + break; + default: + crash("Address family not supported"); } - if((icmp_sock = socket(address_family, SOCK_RAW, icmp_proto)) != -1) + if ((icmp_sock = socket(address_family, SOCK_RAW, icmp_proto)) != -1) sockets |= HAVE_ICMP; - else icmp_sockerrno = errno; + else + icmp_sockerrno = errno; - if( source_ip ) + if (source_ip) set_source_ip(source_ip); #ifdef SO_TIMESTAMP - if(setsockopt(icmp_sock, SOL_SOCKET, SO_TIMESTAMP, &on, sizeof(on))) - if(debug) printf("Warning: no SO_TIMESTAMP support\n"); + if (setsockopt(icmp_sock, SOL_SOCKET, SO_TIMESTAMP, &on, sizeof(on))) + if (debug) + printf("Warning: no SO_TIMESTAMP support\n"); #endif // SO_TIMESTAMP /* now drop privileges (no effect if not setsuid or geteuid() == 0) */ @@ -702,8 +722,8 @@ main(int argc, char **argv) return 1; } - if(!sockets) { - if(icmp_sock == -1) { + if (!sockets) { + if (icmp_sock == -1) { errno = icmp_sockerrno; crash("Failed to obtain ICMP socket"); return -1; @@ -719,13 +739,16 @@ main(int argc, char **argv) /* return -1; */ /* } */ } - if(!ttl) ttl = 64; + if (!ttl) + ttl = 64; - if(icmp_sock) { + if (icmp_sock) { result = setsockopt(icmp_sock, SOL_IP, IP_TTL, &ttl, sizeof(ttl)); - if(debug) { - if(result == -1) printf("setsockopt failed\n"); - else printf("ttl set to %u\n", ttl); + if (debug) { + if (result == -1) + printf("setsockopt failed\n"); + else + printf("ttl set to %u\n", ttl); } } @@ -733,85 +756,82 @@ main(int argc, char **argv) * (nothing will break if they do), but some anal plugin maintainer * will probably add some printf() thing here later, so it might be * best to at least show them where to do it. ;) */ - if(warn.pl > crit.pl) warn.pl = crit.pl; - if(warn.rta > crit.rta) warn.rta = crit.rta; - if(warn_down > crit_down) crit_down = warn_down; - if(warn.jitter > crit.jitter) crit.jitter = warn.jitter; - if(warn.mos < crit.mos) warn.mos = crit.mos; - if(warn.score < crit.score) warn.score = crit.score; + if (warn.pl > crit.pl) + warn.pl = crit.pl; + if (warn.rta > crit.rta) + warn.rta = crit.rta; + if (warn_down > crit_down) + crit_down = warn_down; + if (warn.jitter > crit.jitter) + crit.jitter = warn.jitter; + if (warn.mos < crit.mos) + warn.mos = crit.mos; + if (warn.score < crit.score) + warn.score = crit.score; #ifdef HAVE_SIGACTION sig_action.sa_sigaction = NULL; sig_action.sa_handler = finish; sigfillset(&sig_action.sa_mask); - sig_action.sa_flags = SA_NODEFER|SA_RESTART; + sig_action.sa_flags = SA_NODEFER | SA_RESTART; sigaction(SIGINT, &sig_action, NULL); sigaction(SIGHUP, &sig_action, NULL); sigaction(SIGTERM, &sig_action, NULL); sigaction(SIGALRM, &sig_action, NULL); -#else /* HAVE_SIGACTION */ +#else /* HAVE_SIGACTION */ signal(SIGINT, finish); signal(SIGHUP, finish); signal(SIGTERM, finish); signal(SIGALRM, finish); #endif /* HAVE_SIGACTION */ - if(debug) printf("Setting alarm timeout to %u seconds\n", timeout); + if (debug) + printf("Setting alarm timeout to %u seconds\n", timeout); alarm(timeout); /* make sure we don't wait any longer than necessary */ gettimeofday(&prog_start, &tz); - max_completion_time = - ((targets * packets * pkt_interval) + (targets * target_interval)) + - (targets * packets * crit.rta) + crit.rta; + max_completion_time = ((targets * packets * pkt_interval) + (targets * target_interval)) + (targets * packets * crit.rta) + crit.rta; - if(debug) { + if (debug) { printf("packets: %u, targets: %u\n" "target_interval: %0.3f, pkt_interval %0.3f\n" "crit.rta: %0.3f\n" "max_completion_time: %0.3f\n", - packets, targets, - (float)target_interval / 1000, (float)pkt_interval / 1000, - (float)crit.rta / 1000, - (float)max_completion_time / 1000); + packets, targets, (float)target_interval / 1000, (float)pkt_interval / 1000, (float)crit.rta / 1000, (float)max_completion_time / 1000); } - if(debug) { - if(max_completion_time > (u_int)timeout * 1000000) { - printf("max_completion_time: %llu timeout: %u\n", - max_completion_time, timeout); - printf("Timeout must be at least %llu\n", - max_completion_time / 1000000 + 1); + if (debug) { + if (max_completion_time > (u_int)timeout * 1000000) { + printf("max_completion_time: %llu timeout: %u\n", max_completion_time, timeout); + printf("Timeout must be at least %llu\n", max_completion_time / 1000000 + 1); } } - if(debug) { - printf("crit = {%u, %u%%}, warn = {%u, %u%%}\n", - crit.rta, crit.pl, warn.rta, warn.pl); - printf("pkt_interval: %u target_interval: %u retry_interval: %u\n", - pkt_interval, target_interval, retry_interval); - printf("icmp_pkt_size: %u timeout: %u\n", - icmp_pkt_size, timeout); + if (debug) { + printf("crit = {%u, %u%%}, warn = {%u, %u%%}\n", crit.rta, crit.pl, warn.rta, warn.pl); + printf("pkt_interval: %u target_interval: %u retry_interval: %u\n", pkt_interval, target_interval, retry_interval); + printf("icmp_pkt_size: %u timeout: %u\n", icmp_pkt_size, timeout); } - if(packets > 20) { + if (packets > 20) { errno = 0; crash("packets is > 20 (%d)", packets); } - if(min_hosts_alive < -1) { + if (min_hosts_alive < -1) { errno = 0; crash("minimum alive hosts is negative (%i)", min_hosts_alive); } host = list; table = malloc(sizeof(struct rta_host *) * targets); - if(!table) { + if (!table) { crash("main(): malloc failed for host table"); } i = 0; - while(host) { - host->id = i*packets; + while (host) { + host->id = i * packets; table[i] = host; host = host->next; i++; @@ -822,25 +842,24 @@ main(int argc, char **argv) errno = 0; finish(0); - return(0); + return (0); } -static void -run_checks() -{ +static void run_checks() { u_int i, t; u_int final_wait, time_passed; /* this loop might actually violate the pkt_interval or target_interval * settings, but only if there aren't any packets on the wire which * indicates that the target can handle an increased packet rate */ - for(i = 0; i < packets; i++) { - for(t = 0; t < targets; t++) { + for (i = 0; i < packets; i++) { + for (t = 0; t < targets; t++) { /* don't send useless packets */ - if(!targets_alive) finish(0); - if(table[t]->flags & FLAG_LOST_CAUSE) { - if(debug) printf("%s is a lost cause. not sending any more\n", - table[t]->name); + if (!targets_alive) + finish(0); + if (table[t]->flags & FLAG_LOST_CAUSE) { + if (debug) + printf("%s is a lost cause. not sending any more\n", table[t]->name); continue; } @@ -851,28 +870,27 @@ run_checks() wait_for_reply(icmp_sock, pkt_interval * targets); } - if(icmp_pkts_en_route && targets_alive) { + if (icmp_pkts_en_route && targets_alive) { time_passed = get_timevaldiff(NULL, NULL); final_wait = max_completion_time - time_passed; - if(debug) { - printf("time_passed: %u final_wait: %u max_completion_time: %llu\n", - time_passed, final_wait, max_completion_time); + if (debug) { + printf("time_passed: %u final_wait: %u max_completion_time: %llu\n", time_passed, final_wait, max_completion_time); } - if(time_passed > max_completion_time) { - if(debug) printf("Time passed. Finishing up\n"); + if (time_passed > max_completion_time) { + if (debug) + printf("Time passed. Finishing up\n"); finish(0); } /* catch the packets that might come in within the timeframe, but * haven't yet */ - if(debug) printf("Waiting for %u micro-seconds (%0.3f msecs)\n", - final_wait, (float)final_wait / 1000); + if (debug) + printf("Waiting for %u micro-seconds (%0.3f msecs)\n", final_wait, (float)final_wait / 1000); wait_for_reply(icmp_sock, final_wait); } } - /* response structure: * IPv4: * ip header : 20 bytes @@ -883,9 +901,7 @@ run_checks() * both: * icmp echo reply : the rest */ -static int -wait_for_reply(int sock, u_int t) -{ +static int wait_for_reply(int sock, u_int t) { int n, hlen; static unsigned char buf[65536]; struct sockaddr_storage resp_addr; @@ -898,15 +914,14 @@ wait_for_reply(int sock, u_int t) double jitter_tmp; if (!(packet.buf = malloc(icmp_pkt_size))) { - crash("send_icmp_ping(): failed to malloc %d bytes for send buffer", - icmp_pkt_size); - return -1; /* might be reached if we're in debug mode */ + crash("send_icmp_ping(): failed to malloc %d bytes for send buffer", icmp_pkt_size); + return -1; /* might be reached if we're in debug mode */ } memset(packet.buf, 0, icmp_pkt_size); /* if we can't listen or don't have anything to listen to, just return */ - if(!t || !icmp_pkts_en_route) { + if (!t || !icmp_pkts_en_route) { free(packet.buf); return 0; } @@ -915,29 +930,25 @@ wait_for_reply(int sock, u_int t) i = t; per_pkt_wait = t / icmp_pkts_en_route; - while(icmp_pkts_en_route && get_timevaldiff(&wait_start, NULL) < i) { + while (icmp_pkts_en_route && get_timevaldiff(&wait_start, NULL) < i) { t = per_pkt_wait; /* wrap up if all targets are declared dead */ - if(!targets_alive || - get_timevaldiff(&prog_start, NULL) >= max_completion_time || - (mode == MODE_HOSTCHECK && targets_down)) - { + if (!targets_alive || get_timevaldiff(&prog_start, NULL) >= max_completion_time || (mode == MODE_HOSTCHECK && targets_down)) { finish(0); } /* reap responses until we hit a timeout */ - n = recvfrom_wto(sock, buf, sizeof(buf), - (struct sockaddr *)&resp_addr, &t, &now); - if(!n) { - if(debug > 1) { - printf("recvfrom_wto() timed out during a %u usecs wait\n", - per_pkt_wait); + n = recvfrom_wto(sock, buf, sizeof(buf), (struct sockaddr *)&resp_addr, &t, &now); + if (!n) { + if (debug > 1) { + printf("recvfrom_wto() timed out during a %u usecs wait\n", per_pkt_wait); } - continue; /* timeout for this one, so keep trying */ + continue; /* timeout for this one, so keep trying */ } - if(n < 0) { - if(debug) printf("recvfrom_wto() returned errors\n"); + if (n < 0) { + if (debug) + printf("recvfrom_wto() returned errors\n"); free(packet.buf); return n; } @@ -946,31 +957,27 @@ wait_for_reply(int sock, u_int t) if (address_family != AF_INET6) { ip = (union ip_hdr *)buf; - if(debug > 1) { + if (debug > 1) { char address[INET6_ADDRSTRLEN]; parse_address(&resp_addr, address, sizeof(address)); - printf("received %u bytes from %s\n", - address_family == AF_INET6 ? ntohs(ip->ip6.ip6_plen) - : ntohs(ip->ip.ip_len), - address); + printf("received %u bytes from %s\n", address_family == AF_INET6 ? ntohs(ip->ip6.ip6_plen) : ntohs(ip->ip.ip_len), address); } } -/* obsolete. alpha on tru64 provides the necessary defines, but isn't broken */ -/* #if defined( __alpha__ ) && __STDC__ && !defined( __GLIBC__ ) */ + /* obsolete. alpha on tru64 provides the necessary defines, but isn't broken */ + /* #if defined( __alpha__ ) && __STDC__ && !defined( __GLIBC__ ) */ /* alpha headers are decidedly broken. Using an ansi compiler, * they provide ip_vhl instead of ip_hl and ip_v, so we mask * off the bottom 4 bits */ -/* hlen = (ip->ip_vhl & 0x0f) << 2; */ -/* #else */ + /* hlen = (ip->ip_vhl & 0x0f) << 2; */ + /* #else */ hlen = (address_family == AF_INET6) ? 0 : ip->ip.ip_hl << 2; -/* #endif */ + /* #endif */ - if(n < (hlen + ICMP_MINLEN)) { + if (n < (hlen + ICMP_MINLEN)) { char address[INET6_ADDRSTRLEN]; parse_address(&resp_addr, address, sizeof(address)); - crash("received packet too short for ICMP (%d bytes, expected %d) from %s\n", - n, hlen + icmp_pkt_size, address); + crash("received packet too short for ICMP (%d bytes, expected %d) from %s\n", n, hlen + icmp_pkt_size, address); } /* else if(debug) { */ /* printf("ip header size: %u, packet size: %u (expected %u, %u)\n", */ @@ -981,16 +988,14 @@ wait_for_reply(int sock, u_int t) /* check the response */ memcpy(packet.buf, buf + hlen, icmp_pkt_size); -/* address_family == AF_INET6 ? sizeof(struct icmp6_hdr) - : sizeof(struct icmp));*/ - - if( (address_family == PF_INET && - (ntohs(packet.icp->icmp_id) != pid || packet.icp->icmp_type != ICMP_ECHOREPLY - || ntohs(packet.icp->icmp_seq) >= targets * packets)) - || (address_family == PF_INET6 && - (ntohs(packet.icp6->icmp6_id) != pid || packet.icp6->icmp6_type != ICMP6_ECHO_REPLY - || ntohs(packet.icp6->icmp6_seq) >= targets * packets))) { - if(debug > 2) printf("not a proper ICMP_ECHOREPLY\n"); + /* address_family == AF_INET6 ? sizeof(struct icmp6_hdr) + : sizeof(struct icmp));*/ + + if ((address_family == PF_INET && (ntohs(packet.icp->icmp_id) != pid || packet.icp->icmp_type != ICMP_ECHOREPLY || ntohs(packet.icp->icmp_seq) >= targets * packets)) || + (address_family == PF_INET6 && + (ntohs(packet.icp6->icmp6_id) != pid || packet.icp6->icmp6_type != ICMP6_ECHO_REPLY || ntohs(packet.icp6->icmp6_seq) >= targets * packets))) { + if (debug > 2) + printf("not a proper ICMP_ECHOREPLY\n"); handle_random_icmp(buf + hlen, &resp_addr); continue; } @@ -999,22 +1004,20 @@ wait_for_reply(int sock, u_int t) if (address_family == PF_INET) { memcpy(&data, packet.icp->icmp_data, sizeof(data)); if (debug > 2) - printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", - (unsigned long)sizeof(data), ntohs(packet.icp->icmp_id), - ntohs(packet.icp->icmp_seq), packet.icp->icmp_cksum); - host = table[ntohs(packet.icp->icmp_seq)/packets]; + printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", (unsigned long)sizeof(data), ntohs(packet.icp->icmp_id), ntohs(packet.icp->icmp_seq), + packet.icp->icmp_cksum); + host = table[ntohs(packet.icp->icmp_seq) / packets]; } else { memcpy(&data, &packet.icp6->icmp6_dataun.icmp6_un_data8[4], sizeof(data)); if (debug > 2) - printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", - (unsigned long)sizeof(data), ntohs(packet.icp6->icmp6_id), - ntohs(packet.icp6->icmp6_seq), packet.icp6->icmp6_cksum); - host = table[ntohs(packet.icp6->icmp6_seq)/packets]; + printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", (unsigned long)sizeof(data), ntohs(packet.icp6->icmp6_id), ntohs(packet.icp6->icmp6_seq), + packet.icp6->icmp6_cksum); + host = table[ntohs(packet.icp6->icmp6_seq) / packets]; } tdiff = get_timevaldiff(&data.stime, &now); - if (host->last_tdiff>0) { + if (host->last_tdiff > 0) { /* Calculate jitter */ if (host->last_tdiff > tdiff) { jitter_tmp = host->last_tdiff - tdiff; @@ -1022,29 +1025,29 @@ wait_for_reply(int sock, u_int t) jitter_tmp = tdiff - host->last_tdiff; } - if (host->jitter==0) { - host->jitter=jitter_tmp; - host->jitter_max=jitter_tmp; - host->jitter_min=jitter_tmp; + if (host->jitter == 0) { + host->jitter = jitter_tmp; + host->jitter_max = jitter_tmp; + host->jitter_min = jitter_tmp; } else { - host->jitter+=jitter_tmp; + host->jitter += jitter_tmp; if (jitter_tmp < host->jitter_min) { - host->jitter_min=jitter_tmp; + host->jitter_min = jitter_tmp; } if (jitter_tmp > host->jitter_max) { - host->jitter_max=jitter_tmp; + host->jitter_max = jitter_tmp; } } /* Check if packets in order */ if (host->last_icmp_seq >= packet.icp->icmp_seq) - host->order_status=STATE_CRITICAL; + host->order_status = STATE_CRITICAL; } - host->last_tdiff=tdiff; + host->last_tdiff = tdiff; - host->last_icmp_seq=packet.icp->icmp_seq; + host->last_icmp_seq = packet.icp->icmp_seq; host->time_waited += tdiff; host->icmp_recv++; @@ -1054,39 +1057,27 @@ wait_for_reply(int sock, u_int t) if (tdiff < (unsigned int)host->rtmin) host->rtmin = tdiff; - if(debug) { + if (debug) { char address[INET6_ADDRSTRLEN]; parse_address(&resp_addr, address, sizeof(address)); - switch(address_family) { - case AF_INET: { - printf("%0.3f ms rtt from %s, outgoing ttl: %u, incoming ttl: %u, max: %0.3f, min: %0.3f\n", - (float)tdiff / 1000, - address, - ttl, - ip->ip.ip_ttl, - (float)host->rtmax / 1000, - (float)host->rtmin / 1000); - break; - }; - case AF_INET6: { - printf("%0.3f ms rtt from %s, outgoing ttl: %u, max: %0.3f, min: %0.3f\n", - (float)tdiff / 1000, - address, - ttl, - (float)host->rtmax / 1000, - (float)host->rtmin / 1000); - }; - } + switch (address_family) { + case AF_INET: { + printf("%0.3f ms rtt from %s, outgoing ttl: %u, incoming ttl: %u, max: %0.3f, min: %0.3f\n", (float)tdiff / 1000, address, ttl, ip->ip.ip_ttl, + (float)host->rtmax / 1000, (float)host->rtmin / 1000); + break; + }; + case AF_INET6: { + printf("%0.3f ms rtt from %s, outgoing ttl: %u, max: %0.3f, min: %0.3f\n", (float)tdiff / 1000, address, ttl, (float)host->rtmax / 1000, (float)host->rtmin / 1000); + }; + } } /* if we're in hostcheck mode, exit with limited printouts */ - if(mode == MODE_HOSTCHECK) { + if (mode == MODE_HOSTCHECK) { printf("OK - %s responds to ICMP. Packet %u, rta %0.3fms|" - "pkt=%u;;;0;%u rta=%0.3f;%0.3f;%0.3f;;\n", - host->name, icmp_recv, (float)tdiff / 1000, - icmp_recv, packets, (float)tdiff / 1000, - (float)warn.rta / 1000, (float)crit.rta / 1000); + "pkt=%u;;;0;%u rta=%0.3f;%0.3f;%0.3f;;\n", + host->name, icmp_recv, (float)tdiff / 1000, icmp_recv, packets, (float)tdiff / 1000, (float)warn.rta / 1000, (float)crit.rta / 1000); exit(STATE_OK); } } @@ -1096,9 +1087,7 @@ wait_for_reply(int sock, u_int t) } /* the ping functions */ -static int -send_icmp_ping(int sock, struct rta_host *host) -{ +static int send_icmp_ping(int sock, struct rta_host *host) { long int len; size_t addrlen; struct icmp_ping_data data; @@ -1107,22 +1096,21 @@ send_icmp_ping(int sock, struct rta_host *host) struct timeval tv; void *buf = NULL; - if(sock == -1) { + if (sock == -1) { errno = 0; crash("Attempt to send on bogus socket"); return -1; } - if(!buf) { + if (!buf) { if (!(buf = malloc(icmp_pkt_size))) { - crash("send_icmp_ping(): failed to malloc %d bytes for send buffer", - icmp_pkt_size); - return -1; /* might be reached if we're in debug mode */ + crash("send_icmp_ping(): failed to malloc %d bytes for send buffer", icmp_pkt_size); + return -1; /* might be reached if we're in debug mode */ } } memset(buf, 0, icmp_pkt_size); - if((gettimeofday(&tv, &tz)) == -1) { + if ((gettimeofday(&tv, &tz)) == -1) { free(buf); return -1; } @@ -1131,7 +1119,7 @@ send_icmp_ping(int sock, struct rta_host *host) memcpy(&data.stime, &tv, sizeof(tv)); if (address_family == AF_INET) { - struct icmp *icp = (struct icmp*)buf; + struct icmp *icp = (struct icmp *)buf; addrlen = sizeof(struct sockaddr_in); memcpy(&icp->icmp_data, &data, sizeof(data)); @@ -1141,14 +1129,13 @@ send_icmp_ping(int sock, struct rta_host *host) icp->icmp_cksum = 0; icp->icmp_id = htons(pid); icp->icmp_seq = htons(host->id++); - icp->icmp_cksum = icmp_checksum((uint16_t*)buf, (size_t)icmp_pkt_size); + icp->icmp_cksum = icmp_checksum((uint16_t *)buf, (size_t)icmp_pkt_size); if (debug > 2) - printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", - (unsigned long)sizeof(data), ntohs(icp->icmp_id), ntohs(icp->icmp_seq), icp->icmp_cksum, host->name); - } - else { - struct icmp6_hdr *icp6 = (struct icmp6_hdr*)buf; + printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", (unsigned long)sizeof(data), ntohs(icp->icmp_id), ntohs(icp->icmp_seq), + icp->icmp_cksum, host->name); + } else { + struct icmp6_hdr *icp6 = (struct icmp6_hdr *)buf; addrlen = sizeof(struct sockaddr_in6); memcpy(&icp6->icmp6_dataun.icmp6_un_data8[4], &data, sizeof(data)); @@ -1161,9 +1148,8 @@ send_icmp_ping(int sock, struct rta_host *host) // let checksum be calculated automatically if (debug > 2) { - printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", - (unsigned long)sizeof(data), ntohs(icp6->icmp6_id), - ntohs(icp6->icmp6_seq), icp6->icmp6_cksum, host->name); + printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", (unsigned long)sizeof(data), ntohs(icp6->icmp6_id), ntohs(icp6->icmp6_seq), + icp6->icmp6_cksum, host->name); } } @@ -1188,8 +1174,8 @@ send_icmp_ping(int sock, struct rta_host *host) free(buf); - if(len < 0 || (unsigned int)len != icmp_pkt_size) { - if(debug) { + if (len < 0 || (unsigned int)len != icmp_pkt_size) { + if (debug) { char address[INET6_ADDRSTRLEN]; parse_address((struct sockaddr_storage *)&host->saddr_in, address, sizeof(address)); printf("Failed to send ping to %s: %s\n", address, strerror(errno)); @@ -1204,10 +1190,7 @@ send_icmp_ping(int sock, struct rta_host *host) return 0; } -static int -recvfrom_wto(int sock, void *buf, unsigned int len, struct sockaddr *saddr, - u_int *timo, struct timeval* tv) -{ +static int recvfrom_wto(int sock, void *buf, unsigned int len, struct sockaddr *saddr, u_int *timo, struct timeval *tv) { u_int slen; int n, ret; struct timeval to, then, now; @@ -1218,11 +1201,12 @@ recvfrom_wto(int sock, void *buf, unsigned int len, struct sockaddr *saddr, struct msghdr hdr; struct iovec iov; #ifdef SO_TIMESTAMP - struct cmsghdr* chdr; + struct cmsghdr *chdr; #endif - if(!*timo) { - if(debug) printf("*timo is not\n"); + if (!*timo) { + if (debug) + printf("*timo is not\n"); return 0; } @@ -1235,11 +1219,13 @@ recvfrom_wto(int sock, void *buf, unsigned int len, struct sockaddr *saddr, errno = 0; gettimeofday(&then, &tz); n = select(sock + 1, &rd, &wr, NULL, &to); - if(n < 0) crash("select() in recvfrom_wto"); + if (n < 0) + crash("select() in recvfrom_wto"); gettimeofday(&now, &tz); *timo = get_timevaldiff(&then, &now); - if(!n) return 0; /* timeout */ + if (!n) + return 0; /* timeout */ slen = sizeof(struct sockaddr_storage); @@ -1259,12 +1245,10 @@ recvfrom_wto(int sock, void *buf, unsigned int len, struct sockaddr *saddr, ret = recvmsg(sock, &hdr, 0); #ifdef SO_TIMESTAMP - for(chdr = CMSG_FIRSTHDR(&hdr); chdr; chdr = CMSG_NXTHDR(&hdr, chdr)) { - if(chdr->cmsg_level == SOL_SOCKET - && chdr->cmsg_type == SO_TIMESTAMP - && chdr->cmsg_len >= CMSG_LEN(sizeof(struct timeval))) { + for (chdr = CMSG_FIRSTHDR(&hdr); chdr; chdr = CMSG_NXTHDR(&hdr, chdr)) { + if (chdr->cmsg_level == SOL_SOCKET && chdr->cmsg_type == SO_TIMESTAMP && chdr->cmsg_len >= CMSG_LEN(sizeof(struct timeval))) { memcpy(tv, CMSG_DATA(chdr), sizeof(*tv)); - break ; + break; } } @@ -1274,54 +1258,55 @@ recvfrom_wto(int sock, void *buf, unsigned int len, struct sockaddr *saddr, return (ret); } -static void -finish(int sig) -{ +static void finish(int sig) { u_int i = 0; unsigned char pl; double rta; struct rta_host *host; - const char *status_string[] = - {"OK", "WARNING", "CRITICAL", "UNKNOWN", "DEPENDENT"}; + const char *status_string[] = {"OK", "WARNING", "CRITICAL", "UNKNOWN", "DEPENDENT"}; int hosts_ok = 0; int hosts_warn = 0; int this_status; double R; alarm(0); - if(debug > 1) printf("finish(%d) called\n", sig); - - if(icmp_sock != -1) close(icmp_sock); - if(udp_sock != -1) close(udp_sock); - if(tcp_sock != -1) close(tcp_sock); - - if(debug) { - printf("icmp_sent: %u icmp_recv: %u icmp_lost: %u\n", - icmp_sent, icmp_recv, icmp_lost); + if (debug > 1) + printf("finish(%d) called\n", sig); + + if (icmp_sock != -1) + close(icmp_sock); + if (udp_sock != -1) + close(udp_sock); + if (tcp_sock != -1) + close(tcp_sock); + + if (debug) { + printf("icmp_sent: %u icmp_recv: %u icmp_lost: %u\n", icmp_sent, icmp_recv, icmp_lost); printf("targets: %u targets_alive: %u\n", targets, targets_alive); } /* iterate thrice to calculate values, give output, and print perfparse */ - status=STATE_OK; + status = STATE_OK; host = list; - while(host) { + while (host) { this_status = STATE_OK; - if(!host->icmp_recv) { + if (!host->icmp_recv) { /* rta 0 is ofcourse not entirely correct, but will still show up * conspicuously as missing entries in perfparse and cacti */ pl = 100; rta = 0; status = STATE_CRITICAL; /* up the down counter if not already counted */ - if(!(host->flags & FLAG_LOST_CAUSE) && targets_alive) targets_down++; + if (!(host->flags & FLAG_LOST_CAUSE) && targets_alive) + targets_down++; } else { pl = ((host->icmp_sent - host->icmp_recv) * 100) / host->icmp_sent; rta = (double)host->time_waited / host->icmp_recv; } - if (host->icmp_recv>1) { + if (host->icmp_recv > 1) { /* * This algorithm is probably pretty much blindly copied from * locations like this one: https://www.slac.stanford.edu/comp/net/wan-mon/tutorial.html#mos @@ -1336,19 +1321,19 @@ finish(int sig) * More links: * - https://confluence.slac.stanford.edu/display/IEPM/MOS */ - host->jitter=(host->jitter / (host->icmp_recv - 1)/1000); + host->jitter = (host->jitter / (host->icmp_recv - 1) / 1000); /* * Take the average round trip latency (in milliseconds), add * round trip jitter, but double the impact to latency * then add 10 for protocol latencies (in milliseconds). */ - host->EffectiveLatency = (rta/1000) + host->jitter * 2 + 10; + host->EffectiveLatency = (rta / 1000) + host->jitter * 2 + 10; if (host->EffectiveLatency < 160) { - R = 93.2 - (host->EffectiveLatency / 40); + R = 93.2 - (host->EffectiveLatency / 40); } else { - R = 93.2 - ((host->EffectiveLatency - 120) / 10); + R = 93.2 - ((host->EffectiveLatency - 120) / 10); } // Now, let us deduct 2.5 R values per percentage of packet loss (i.e. a @@ -1360,12 +1345,12 @@ finish(int sig) } host->score = R; - host->mos= 1 + ((0.035) * R) + ((.000007) * R * (R-60) * (100-R)); + host->mos = 1 + ((0.035) * R) + ((.000007) * R * (R - 60) * (100 - R)); } else { - host->jitter=0; - host->jitter_min=0; - host->jitter_max=0; - host->mos=0; + host->jitter = 0; + host->jitter_min = 0; + host->jitter_max = 0; + host->mos = 0; } host->pl = pl; @@ -1379,62 +1364,62 @@ finish(int sig) /* Check which mode is on and do the warn / Crit stuff */ if (rta_mode) { - if(rta >= crit.rta) { + if (rta >= crit.rta) { this_status = STATE_CRITICAL; status = STATE_CRITICAL; - host->rta_status=STATE_CRITICAL; - } else if(status!=STATE_CRITICAL && (rta >= warn.rta)) { + host->rta_status = STATE_CRITICAL; + } else if (status != STATE_CRITICAL && (rta >= warn.rta)) { this_status = (this_status <= STATE_WARNING ? STATE_WARNING : this_status); status = STATE_WARNING; - host->rta_status=STATE_WARNING; + host->rta_status = STATE_WARNING; } } if (pl_mode) { - if(pl >= crit.pl) { + if (pl >= crit.pl) { this_status = STATE_CRITICAL; status = STATE_CRITICAL; - host->pl_status=STATE_CRITICAL; - } else if(status!=STATE_CRITICAL && (pl >= warn.pl)) { + host->pl_status = STATE_CRITICAL; + } else if (status != STATE_CRITICAL && (pl >= warn.pl)) { this_status = (this_status <= STATE_WARNING ? STATE_WARNING : this_status); status = STATE_WARNING; - host->pl_status=STATE_WARNING; + host->pl_status = STATE_WARNING; } } if (jitter_mode) { - if(host->jitter >= crit.jitter) { + if (host->jitter >= crit.jitter) { this_status = STATE_CRITICAL; status = STATE_CRITICAL; - host->jitter_status=STATE_CRITICAL; - } else if(status!=STATE_CRITICAL && (host->jitter >= warn.jitter)) { + host->jitter_status = STATE_CRITICAL; + } else if (status != STATE_CRITICAL && (host->jitter >= warn.jitter)) { this_status = (this_status <= STATE_WARNING ? STATE_WARNING : this_status); status = STATE_WARNING; - host->jitter_status=STATE_WARNING; + host->jitter_status = STATE_WARNING; } } if (mos_mode) { - if(host->mos <= crit.mos) { + if (host->mos <= crit.mos) { this_status = STATE_CRITICAL; status = STATE_CRITICAL; - host->mos_status=STATE_CRITICAL; - } else if(status!=STATE_CRITICAL && (host->mos <= warn.mos)) { + host->mos_status = STATE_CRITICAL; + } else if (status != STATE_CRITICAL && (host->mos <= warn.mos)) { this_status = (this_status <= STATE_WARNING ? STATE_WARNING : this_status); status = STATE_WARNING; - host->mos_status=STATE_WARNING; + host->mos_status = STATE_WARNING; } } if (score_mode) { - if(host->score <= crit.score) { + if (host->score <= crit.score) { this_status = STATE_CRITICAL; status = STATE_CRITICAL; - host->score_status=STATE_CRITICAL; - } else if(status!=STATE_CRITICAL && (host->score <= warn.score)) { + host->score_status = STATE_CRITICAL; + } else if (status != STATE_CRITICAL && (host->score <= warn.score)) { this_status = (this_status <= STATE_WARNING ? STATE_WARNING : this_status); status = STATE_WARNING; - host->score_status=STATE_WARNING; + host->score_status = STATE_WARNING; } } @@ -1447,91 +1432,92 @@ finish(int sig) host = host->next; } - /* this is inevitable */ - if(!targets_alive) status = STATE_CRITICAL; - if(min_hosts_alive > -1) { - if(hosts_ok >= min_hosts_alive) status = STATE_OK; - else if((hosts_ok + hosts_warn) >= min_hosts_alive) status = STATE_WARNING; + if (!targets_alive) + status = STATE_CRITICAL; + if (min_hosts_alive > -1) { + if (hosts_ok >= min_hosts_alive) + status = STATE_OK; + else if ((hosts_ok + hosts_warn) >= min_hosts_alive) + status = STATE_WARNING; } printf("%s - ", status_string[status]); host = list; - while(host) { - - if(debug) puts(""); - if(i) { - if(i < targets) printf(" :: "); - else printf("\n"); + while (host) { + + if (debug) + puts(""); + if (i) { + if (i < targets) + printf(" :: "); + else + printf("\n"); } i++; - if(!host->icmp_recv) { + if (!host->icmp_recv) { status = STATE_CRITICAL; - host->rtmin=0; - host->jitter_min=0; - if(host->flags & FLAG_LOST_CAUSE) { + host->rtmin = 0; + host->jitter_min = 0; + if (host->flags & FLAG_LOST_CAUSE) { char address[INET6_ADDRSTRLEN]; parse_address(&host->error_addr, address, sizeof(address)); - printf("%s: %s @ %s. rta nan, lost %d%%", - host->name, - get_icmp_error_msg(host->icmp_type, host->icmp_code), - address, - 100); + printf("%s: %s @ %s. rta nan, lost %d%%", host->name, get_icmp_error_msg(host->icmp_type, host->icmp_code), address, 100); } else { /* not marked as lost cause, so we have no flags for it */ printf("%s: rta nan, lost 100%%", host->name); } - } else { /* !icmp_recv */ + } else { /* !icmp_recv */ printf("%s", host->name); /* rta text output */ if (rta_mode) { if (status == STATE_OK) printf(" rta %0.3fms", host->rta / 1000); - else if (status==STATE_WARNING && host->rta_status==status) - printf(" rta %0.3fms > %0.3fms", (float)host->rta / 1000, (float)warn.rta/1000); - else if (status==STATE_CRITICAL && host->rta_status==status) - printf(" rta %0.3fms > %0.3fms", (float)host->rta / 1000, (float)crit.rta/1000); + else if (status == STATE_WARNING && host->rta_status == status) + printf(" rta %0.3fms > %0.3fms", (float)host->rta / 1000, (float)warn.rta / 1000); + else if (status == STATE_CRITICAL && host->rta_status == status) + printf(" rta %0.3fms > %0.3fms", (float)host->rta / 1000, (float)crit.rta / 1000); } /* pl text output */ if (pl_mode) { if (status == STATE_OK) printf(" lost %u%%", host->pl); - else if (status==STATE_WARNING && host->pl_status==status) + else if (status == STATE_WARNING && host->pl_status == status) printf(" lost %u%% > %u%%", host->pl, warn.pl); - else if (status==STATE_CRITICAL && host->pl_status==status) + else if (status == STATE_CRITICAL && host->pl_status == status) printf(" lost %u%% > %u%%", host->pl, crit.pl); } /* jitter text output */ if (jitter_mode) { if (status == STATE_OK) printf(" jitter %0.3fms", (float)host->jitter); - else if (status==STATE_WARNING && host->jitter_status==status) + else if (status == STATE_WARNING && host->jitter_status == status) printf(" jitter %0.3fms > %0.3fms", (float)host->jitter, warn.jitter); - else if (status==STATE_CRITICAL && host->jitter_status==status) + else if (status == STATE_CRITICAL && host->jitter_status == status) printf(" jitter %0.3fms > %0.3fms", (float)host->jitter, crit.jitter); } /* mos text output */ if (mos_mode) { if (status == STATE_OK) printf(" MOS %0.1f", (float)host->mos); - else if (status==STATE_WARNING && host->mos_status==status) + else if (status == STATE_WARNING && host->mos_status == status) printf(" MOS %0.1f < %0.1f", (float)host->mos, (float)warn.mos); - else if (status==STATE_CRITICAL && host->mos_status==status) + else if (status == STATE_CRITICAL && host->mos_status == status) printf(" MOS %0.1f < %0.1f", (float)host->mos, (float)crit.mos); } /* score text output */ if (score_mode) { if (status == STATE_OK) printf(" Score %u", (int)host->score); - else if (status==STATE_WARNING && host->score_status==status ) + else if (status == STATE_WARNING && host->score_status == status) printf(" Score %u < %u", (int)host->score, (int)warn.score); - else if (status==STATE_CRITICAL && host->score_status==status ) + else if (status == STATE_CRITICAL && host->score_status == status) printf(" Score %u < %u", (int)host->score, (int)crit.score); } /* order statis text output */ if (order_mode) { if (status == STATE_OK) printf(" Packets in order"); - else if (status==STATE_CRITICAL && host->order_status==status) + else if (status == STATE_CRITICAL && host->order_status == status) printf(" Packets out of order"); } } @@ -1540,25 +1526,21 @@ finish(int sig) /* iterate once more for pretty perfparse output */ if (!(!rta_mode && !pl_mode && !jitter_mode && !score_mode && !mos_mode && order_mode)) { - printf("|"); + printf("|"); } i = 0; host = list; - while(host) { - if(debug) puts(""); + while (host) { + if (debug) + puts(""); if (rta_mode) { - if (host->pl<100) { - printf("%srta=%0.3fms;%0.3f;%0.3f;0; %srtmax=%0.3fms;;;; %srtmin=%0.3fms;;;; ", - (targets > 1) ? host->name : "", - host->rta / 1000, (float)warn.rta / 1000, (float)crit.rta / 1000, - (targets > 1) ? host->name : "", (float)host->rtmax / 1000, - (targets > 1) ? host->name : "", (host->rtmin < INFINITY) ? (float)host->rtmin / 1000 : (float)0); + if (host->pl < 100) { + printf("%srta=%0.3fms;%0.3f;%0.3f;0; %srtmax=%0.3fms;;;; %srtmin=%0.3fms;;;; ", (targets > 1) ? host->name : "", host->rta / 1000, (float)warn.rta / 1000, + (float)crit.rta / 1000, (targets > 1) ? host->name : "", (float)host->rtmax / 1000, (targets > 1) ? host->name : "", + (host->rtmin < INFINITY) ? (float)host->rtmin / 1000 : (float)0); } else { - printf("%srta=U;;;; %srtmax=U;;;; %srtmin=U;;;; ", - (targets > 1) ? host->name : "", - (targets > 1) ? host->name : "", - (targets > 1) ? host->name : ""); + printf("%srta=U;;;; %srtmax=U;;;; %srtmin=U;;;; ", (targets > 1) ? host->name : "", (targets > 1) ? host->name : "", (targets > 1) ? host->name : ""); } } @@ -1567,43 +1549,27 @@ finish(int sig) } if (jitter_mode) { - if (host->pl<100) { - printf("%sjitter_avg=%0.3fms;%0.3f;%0.3f;0; %sjitter_max=%0.3fms;;;; %sjitter_min=%0.3fms;;;; ", - (targets > 1) ? host->name : "", - (float)host->jitter, - (float)warn.jitter, - (float)crit.jitter, - (targets > 1) ? host->name : "", - (float)host->jitter_max / 1000, (targets > 1) ? host->name : "", - (float)host->jitter_min / 1000 - ); + if (host->pl < 100) { + printf("%sjitter_avg=%0.3fms;%0.3f;%0.3f;0; %sjitter_max=%0.3fms;;;; %sjitter_min=%0.3fms;;;; ", (targets > 1) ? host->name : "", (float)host->jitter, + (float)warn.jitter, (float)crit.jitter, (targets > 1) ? host->name : "", (float)host->jitter_max / 1000, (targets > 1) ? host->name : "", + (float)host->jitter_min / 1000); } else { - printf("%sjitter_avg=U;;;; %sjitter_max=U;;;; %sjitter_min=U;;;; ", - (targets > 1) ? host->name : "", - (targets > 1) ? host->name : "", - (targets > 1) ? host->name : ""); + printf("%sjitter_avg=U;;;; %sjitter_max=U;;;; %sjitter_min=U;;;; ", (targets > 1) ? host->name : "", (targets > 1) ? host->name : "", + (targets > 1) ? host->name : ""); } } if (mos_mode) { - if (host->pl<100) { - printf("%smos=%0.1f;%0.1f;%0.1f;0;5 ", - (targets > 1) ? host->name : "", - (float)host->mos, - (float)warn.mos, - (float)crit.mos); + if (host->pl < 100) { + printf("%smos=%0.1f;%0.1f;%0.1f;0;5 ", (targets > 1) ? host->name : "", (float)host->mos, (float)warn.mos, (float)crit.mos); } else { printf("%smos=U;;;; ", (targets > 1) ? host->name : ""); } } if (score_mode) { - if (host->pl<100) { - printf("%sscore=%u;%u;%u;0;100 ", - (targets > 1) ? host->name : "", - (int)host->score, - (int)warn.score, - (int)crit.score); + if (host->pl < 100) { + printf("%sscore=%u;%u;%u;0;100 ", (targets > 1) ? host->name : "", (int)host->score, (int)warn.score, (int)crit.score); } else { printf("%sscore=U;;;; ", (targets > 1) ? host->name : ""); } @@ -1612,35 +1578,34 @@ finish(int sig) host = host->next; } - if(min_hosts_alive > -1) { - if(hosts_ok >= min_hosts_alive) status = STATE_OK; - else if((hosts_ok + hosts_warn) >= min_hosts_alive) status = STATE_WARNING; + if (min_hosts_alive > -1) { + if (hosts_ok >= min_hosts_alive) + status = STATE_OK; + else if ((hosts_ok + hosts_warn) >= min_hosts_alive) + status = STATE_WARNING; } /* finish with an empty line */ puts(""); - if(debug) printf("targets: %u, targets_alive: %u, hosts_ok: %u, hosts_warn: %u, min_hosts_alive: %i\n", - targets, targets_alive, hosts_ok, hosts_warn, min_hosts_alive); + if (debug) + printf("targets: %u, targets_alive: %u, hosts_ok: %u, hosts_warn: %u, min_hosts_alive: %i\n", targets, targets_alive, hosts_ok, hosts_warn, min_hosts_alive); exit(status); } -static u_int -get_timevaldiff(struct timeval *early, struct timeval *later) -{ +static u_int get_timevaldiff(struct timeval *early, struct timeval *later) { u_int ret; struct timeval now; - if(!later) { + if (!later) { gettimeofday(&now, &tz); later = &now; } - if(!early) early = &prog_start; + if (!early) + early = &prog_start; /* if early > later we return 0 so as to indicate a timeout */ - if(early->tv_sec > later->tv_sec || - (early->tv_sec == later->tv_sec && early->tv_usec > later->tv_usec)) - { + if (early->tv_sec > later->tv_sec || (early->tv_sec == later->tv_sec && early->tv_usec > later->tv_usec)) { return 0; } ret = (later->tv_sec - early->tv_sec) * 1000000; @@ -1649,9 +1614,7 @@ get_timevaldiff(struct timeval *early, struct timeval *later) return ret; } -static int -add_target_ip(char *arg, struct sockaddr_storage *in) -{ +static int add_target_ip(char *arg, struct sockaddr_storage *in) { struct rta_host *host; struct sockaddr_in *sin, *host_sin; struct sockaddr_in6 *sin6, *host_sin6; @@ -1661,51 +1624,46 @@ add_target_ip(char *arg, struct sockaddr_storage *in) else sin6 = (struct sockaddr_in6 *)in; - - /* disregard obviously stupid addresses * (I didn't find an ipv6 equivalent to INADDR_NONE) */ - if (((address_family == AF_INET && (sin->sin_addr.s_addr == INADDR_NONE - || sin->sin_addr.s_addr == INADDR_ANY))) - || (address_family == AF_INET6 && (sin6->sin6_addr.s6_addr == in6addr_any.s6_addr))) { + if (((address_family == AF_INET && (sin->sin_addr.s_addr == INADDR_NONE || sin->sin_addr.s_addr == INADDR_ANY))) || + (address_family == AF_INET6 && (sin6->sin6_addr.s6_addr == in6addr_any.s6_addr))) { return -1; } /* no point in adding two identical IP's, so don't. ;) */ host = list; - while(host) { + while (host) { host_sin = (struct sockaddr_in *)&host->saddr_in; host_sin6 = (struct sockaddr_in6 *)&host->saddr_in; - if( (address_family == AF_INET && host_sin->sin_addr.s_addr == sin->sin_addr.s_addr) - || (address_family == AF_INET6 && host_sin6->sin6_addr.s6_addr == sin6->sin6_addr.s6_addr)) { - if(debug) printf("Identical IP already exists. Not adding %s\n", arg); + if ((address_family == AF_INET && host_sin->sin_addr.s_addr == sin->sin_addr.s_addr) || + (address_family == AF_INET6 && host_sin6->sin6_addr.s6_addr == sin6->sin6_addr.s6_addr)) { + if (debug) + printf("Identical IP already exists. Not adding %s\n", arg); return -1; } host = host->next; } /* add the fresh ip */ - host = (struct rta_host*)malloc(sizeof(struct rta_host)); - if(!host) { + host = (struct rta_host *)malloc(sizeof(struct rta_host)); + if (!host) { char straddr[INET6_ADDRSTRLEN]; - parse_address((struct sockaddr_storage*)&in, straddr, sizeof(straddr)); - crash("add_target_ip(%s, %s): malloc(%lu) failed", - arg, straddr, sizeof(struct rta_host)); + parse_address((struct sockaddr_storage *)&in, straddr, sizeof(straddr)); + crash("add_target_ip(%s, %s): malloc(%lu) failed", arg, straddr, sizeof(struct rta_host)); } memset(host, 0, sizeof(struct rta_host)); /* set the values. use calling name for output */ host->name = strdup(arg); - /* fill out the sockaddr_storage struct */ - if(address_family == AF_INET) { + if (address_family == AF_INET) { host_sin = (struct sockaddr_in *)&host->saddr_in; host_sin->sin_family = AF_INET; host_sin->sin_addr.s_addr = sin->sin_addr.s_addr; - } - else { + } else { host_sin6 = (struct sockaddr_in6 *)&host->saddr_in; host_sin6->sin6_family = AF_INET6; memcpy(host_sin6->sin6_addr.s6_addr, sin6->sin6_addr.s6_addr, sizeof host_sin6->sin6_addr.s6_addr); @@ -1714,22 +1672,23 @@ add_target_ip(char *arg, struct sockaddr_storage *in) /* fill out the sockaddr_in struct */ host->rtmin = INFINITY; host->rtmax = 0; - host->jitter=0; - host->jitter_max=0; - host->jitter_min=INFINITY; - host->last_tdiff=0; - host->order_status=STATE_OK; - host->last_icmp_seq=0; - host->rta_status=0; - host->pl_status=0; - host->jitter_status=0; - host->mos_status=0; - host->score_status=0; - host->pl_status=0; - - - if(!list) list = cursor = host; - else cursor->next = host; + host->jitter = 0; + host->jitter_max = 0; + host->jitter_min = INFINITY; + host->last_tdiff = 0; + host->order_status = STATE_OK; + host->last_icmp_seq = 0; + host->rta_status = 0; + host->pl_status = 0; + host->jitter_status = 0; + host->mos_status = 0; + host->score_status = 0; + host->pl_status = 0; + + if (!list) + list = cursor = host; + else + cursor->next = host; cursor = host; targets++; @@ -1738,9 +1697,7 @@ add_target_ip(char *arg, struct sockaddr_storage *in) } /* wrapper for add_target_ip */ -static int -add_target(char *arg) -{ +static int add_target(char *arg) { int error, result = -1; struct sockaddr_storage ip; struct addrinfo hints, *res, *p; @@ -1754,14 +1711,14 @@ add_target(char *arg) sin = (struct sockaddr_in *)&ip; result = inet_pton(address_family, arg, &sin->sin_addr); #ifdef USE_IPV6 - if( result != 1 ){ + if (result != 1) { address_family = AF_INET6; sin6 = (struct sockaddr_in6 *)&ip; result = inet_pton(address_family, arg, &sin6->sin6_addr); } #endif /* If we don't find any valid addresses, we still don't know the address_family */ - if ( result != 1) { + if (result != 1) { address_family = -1; } break; @@ -1773,15 +1730,15 @@ add_target(char *arg) sin6 = (struct sockaddr_in6 *)&ip; result = inet_pton(address_family, arg, &sin6->sin6_addr); break; - default: crash("Address family not supported"); + default: + crash("Address family not supported"); } /* don't resolve if we don't have to */ - if(result == 1) { + if (result == 1) { /* don't add all ip's if we were given a specific one */ return add_target_ip(arg, &ip); - } - else { + } else { errno = 0; memset(&hints, 0, sizeof(hints)); if (address_family == -1) { @@ -1790,7 +1747,7 @@ add_target(char *arg) hints.ai_family = address_family == AF_INET ? PF_INET : PF_INET6; } hints.ai_socktype = SOCK_RAW; - if((error = getaddrinfo(arg, NULL, &hints, &res)) != 0) { + if ((error = getaddrinfo(arg, NULL, &hints, &res)) != 0) { errno = 0; crash("Failed to resolve %s: %s", arg, gai_strerror(error)); return -1; @@ -1799,13 +1756,14 @@ add_target(char *arg) } /* possibly add all the IP's as targets */ - for(p = res; p != NULL; p = p->ai_next) { + for (p = res; p != NULL; p = p->ai_next) { memcpy(&ip, p->ai_addr, p->ai_addrlen); add_target_ip(arg, &ip); /* this is silly, but it works */ - if(mode == MODE_HOSTCHECK || mode == MODE_ALL) { - if(debug > 2) printf("mode: %d\n", mode); + if (mode == MODE_HOSTCHECK || mode == MODE_ALL) { + if (debug > 2) + printf("mode: %d\n", mode); continue; } break; @@ -1815,24 +1773,20 @@ add_target(char *arg) return 0; } -static void -set_source_ip(char *arg) -{ +static void set_source_ip(char *arg) { struct sockaddr_in src; memset(&src, 0, sizeof(src)); src.sin_family = address_family; - if((src.sin_addr.s_addr = inet_addr(arg)) == INADDR_NONE) + if ((src.sin_addr.s_addr = inet_addr(arg)) == INADDR_NONE) src.sin_addr.s_addr = get_ip_address(arg); - if(bind(icmp_sock, (struct sockaddr *)&src, sizeof(src)) == -1) + if (bind(icmp_sock, (struct sockaddr *)&src, sizeof(src)) == -1) crash("Cannot bind to IP address %s", arg); } /* TODO: Move this to netutils.c and also change check_dhcp to use that. */ -static in_addr_t -get_ip_address(const char *ifname) -{ - // TODO: Rewrite this so the function return an error and we exit somewhere else +static in_addr_t get_ip_address(const char *ifname) { + // TODO: Rewrite this so the function return an error and we exit somewhere else struct sockaddr_in ip; ip.sin_addr.s_addr = 0; // Fake initialization to make compiler happy #if defined(SIOCGIFADDR) @@ -1842,12 +1796,12 @@ get_ip_address(const char *ifname) ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0'; - if(ioctl(icmp_sock, SIOCGIFADDR, &ifr) == -1) + if (ioctl(icmp_sock, SIOCGIFADDR, &ifr) == -1) crash("Cannot determine IP address of interface %s", ifname); memcpy(&ip, &ifr.ifr_addr, sizeof(ip)); #else - (void) ifname; + (void)ifname; errno = 0; crash("Cannot get interface IP address on this platform."); #endif @@ -1860,63 +1814,73 @@ get_ip_address(const char *ifname) * s = seconds * return value is in microseconds */ -static u_int -get_timevar(const char *str) -{ +static u_int get_timevar(const char *str) { char p, u, *ptr; size_t len; - u_int i, d; /* integer and decimal, respectively */ - u_int factor = 1000; /* default to milliseconds */ + u_int i, d; /* integer and decimal, respectively */ + u_int factor = 1000; /* default to milliseconds */ - if(!str) return 0; + if (!str) + return 0; len = strlen(str); - if(!len) return 0; + if (!len) + return 0; /* unit might be given as ms|m (millisec), * us|u (microsec) or just plain s, for seconds */ p = '\0'; u = str[len - 1]; - if(len >= 2 && !isdigit((int)str[len - 2])) p = str[len - 2]; - if(p && u == 's') u = p; - else if(!p) p = u; - if(debug > 2) printf("evaluating %s, u: %c, p: %c\n", str, u, p); - - if(u == 'u') factor = 1; /* microseconds */ - else if(u == 'm') factor = 1000; /* milliseconds */ - else if(u == 's') factor = 1000000; /* seconds */ - if(debug > 2) printf("factor is %u\n", factor); + if (len >= 2 && !isdigit((int)str[len - 2])) + p = str[len - 2]; + if (p && u == 's') + u = p; + else if (!p) + p = u; + if (debug > 2) + printf("evaluating %s, u: %c, p: %c\n", str, u, p); + + if (u == 'u') + factor = 1; /* microseconds */ + else if (u == 'm') + factor = 1000; /* milliseconds */ + else if (u == 's') + factor = 1000000; /* seconds */ + if (debug > 2) + printf("factor is %u\n", factor); i = strtoul(str, &ptr, 0); - if(!ptr || *ptr != '.' || strlen(ptr) < 2 || factor == 1) + if (!ptr || *ptr != '.' || strlen(ptr) < 2 || factor == 1) return i * factor; /* time specified in usecs can't have decimal points, so ignore them */ - if(factor == 1) return i; + if (factor == 1) + return i; d = strtoul(ptr + 1, NULL, 0); /* d is decimal, so get rid of excess digits */ - while(d >= factor) d /= 10; + while (d >= factor) + d /= 10; /* the last parenthesis avoids floating point exceptions. */ return ((i * factor) + (d * (factor / 10))); } /* not too good at checking errors, but it'll do (main() should barfe on -1) */ -static int -get_threshold(char *str, threshold *th) -{ +static int get_threshold(char *str, threshold *th) { char *p = NULL, i = 0; - if(!str || !strlen(str) || !th) return -1; + if (!str || !strlen(str) || !th) + return -1; /* pointer magic slims code by 10 lines. i is bof-stop on stupid libc's */ p = &str[strlen(str) - 1]; - while(p != &str[1]) { - if(*p == '%') *p = '\0'; - else if(*p == ',' && i) { - *p = '\0'; /* reset it so get_timevar(str) works nicely later */ - th->pl = (unsigned char)strtoul(p+1, NULL, 0); + while (p != &str[1]) { + if (*p == '%') + *p = '\0'; + else if (*p == ',' && i) { + *p = '\0'; /* reset it so get_timevar(str) works nicely later */ + th->pl = (unsigned char)strtoul(p + 1, NULL, 0); break; } i = 1; @@ -1924,10 +1888,13 @@ get_threshold(char *str, threshold *th) } th->rta = get_timevar(str); - if(!th->rta) return -1; + if (!th->rta) + return -1; - if(th->rta > MAXTTL * 1000000) th->rta = MAXTTL * 1000000; - if(th->pl > 100) th->pl = 100; + if (th->rta > MAXTTL * 1000000) + th->rta = MAXTTL * 1000000; + if (th->pl > 100) + th->pl = 100; return 0; } @@ -1943,8 +1910,8 @@ get_threshold(char *str, threshold *th) * @param[in] mode Determines whether this a threshold for rta, packet_loss, jitter, mos or score (exclusively) */ static bool get_threshold2(char *str, size_t length, threshold *warn, threshold *crit, threshold_mode mode) { - if (!str || !length || !warn || !crit) return false; - + if (!str || !length || !warn || !crit) + return false; // p points to the last char in str char *p = &str[length - 1]; @@ -1952,18 +1919,17 @@ static bool get_threshold2(char *str, size_t length, threshold *warn, threshold // first_iteration is bof-stop on stupid libc's bool first_iteration = true; - while(p != &str[0]) { - if( (*p == 'm') || (*p == '%') ) { + while (p != &str[0]) { + if ((*p == 'm') || (*p == '%')) { *p = '\0'; - } else if(*p == ',' && !first_iteration) { - *p = '\0'; /* reset it so get_timevar(str) works nicely later */ + } else if (*p == ',' && !first_iteration) { + *p = '\0'; /* reset it so get_timevar(str) works nicely later */ char *start_of_value = p + 1; - if (!parse_threshold2_helper(start_of_value, strlen(start_of_value), crit, mode)){ + if (!parse_threshold2_helper(start_of_value, strlen(start_of_value), crit, mode)) { return false; } - } first_iteration = false; p--; @@ -1976,22 +1942,22 @@ static bool parse_threshold2_helper(char *s, size_t length, threshold *thr, thre char *resultChecker = {0}; switch (mode) { - case const_rta_mode: - thr->rta = strtod(s, &resultChecker) * 1000; - break; - case const_packet_loss_mode: - thr->pl = (unsigned char)strtoul(s, &resultChecker, 0); - break; - case const_jitter_mode: - thr->jitter = strtod(s, &resultChecker); + case const_rta_mode: + thr->rta = strtod(s, &resultChecker) * 1000; + break; + case const_packet_loss_mode: + thr->pl = (unsigned char)strtoul(s, &resultChecker, 0); + break; + case const_jitter_mode: + thr->jitter = strtod(s, &resultChecker); - break; - case const_mos_mode: - thr->mos = strtod(s, &resultChecker); - break; - case const_score_mode: - thr->score = strtod(s, &resultChecker); - break; + break; + case const_mos_mode: + thr->mos = strtod(s, &resultChecker); + break; + case const_score_mode: + thr->score = strtod(s, &resultChecker); + break; } if (resultChecker == s) { @@ -2007,123 +1973,116 @@ static bool parse_threshold2_helper(char *s, size_t length, threshold *thr, thre return true; } -unsigned short -icmp_checksum(uint16_t *p, size_t n) -{ +unsigned short icmp_checksum(uint16_t *p, size_t n) { unsigned short cksum; long sum = 0; /* sizeof(uint16_t) == 2 */ - while(n >= 2) { + while (n >= 2) { sum += *(p++); n -= 2; } /* mop up the occasional odd byte */ - if(n == 1) sum += *((uint8_t *)p -1); + if (n == 1) + sum += *((uint8_t *)p - 1); - sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */ - sum += (sum >> 16); /* add carry */ - cksum = ~sum; /* ones-complement, trunc to 16 bits */ + sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */ + sum += (sum >> 16); /* add carry */ + cksum = ~sum; /* ones-complement, trunc to 16 bits */ return cksum; } -void -print_help(void) -{ +void print_help(void) { /*print_revision (progname);*/ /* FIXME: Why? */ - printf ("Copyright (c) 2005 Andreas Ericsson \n"); - - printf (COPYRIGHT, copyright, email); - - printf ("\n\n"); - - print_usage (); - - printf (UT_HELP_VRSN); - printf (UT_EXTRA_OPTS); - - printf (" %s\n", "-H"); - printf (" %s\n", _("specify a target")); - printf (" %s\n", "[-4|-6]"); - printf (" %s\n", _("Use IPv4 (default) or IPv6 to communicate with the targets")); - printf (" %s\n", "-w"); - printf (" %s", _("warning threshold (currently ")); - printf ("%0.3fms,%u%%)\n", (float)warn.rta / 1000, warn.pl); - printf (" %s\n", "-c"); - printf (" %s", _("critical threshold (currently ")); - printf ("%0.3fms,%u%%)\n", (float)crit.rta / 1000, crit.pl); - - printf (" %s\n", "-R"); - printf (" %s\n", _("RTA, round trip average, mode warning,critical, ex. 100ms,200ms unit in ms")); - printf (" %s\n", "-P"); - printf (" %s\n", _("packet loss mode, ex. 40%,50% , unit in %")); - printf (" %s\n", "-J"); - printf (" %s\n", _("jitter mode warning,critical, ex. 40.000ms,50.000ms , unit in ms ")); - printf (" %s\n", "-M"); - printf (" %s\n", _("MOS mode, between 0 and 4.4 warning,critical, ex. 3.5,3.0")); - printf (" %s\n", "-S"); - printf (" %s\n", _("score mode, max value 100 warning,critical, ex. 80,70 ")); - printf (" %s\n", "-O"); - printf (" %s\n", _("detect out of order ICMP packts ")); - printf (" %s\n", "-H"); - printf (" %s\n", _("specify a target")); - printf (" %s\n", "-s"); - printf (" %s\n", _("specify a source IP address or device name")); - printf (" %s\n", "-n"); - printf (" %s", _("number of packets to send (currently ")); - printf ("%u)\n",packets); - printf (" %s\n", "-p"); - printf (" %s", _("number of packets to send (currently ")); - printf ("%u)\n",packets); - printf (" %s\n", "-i"); - printf (" %s", _("max packet interval (currently ")); - printf ("%0.3fms)\n",(float)pkt_interval / 1000); - printf (" %s\n", "-I"); - printf (" %s", _("max target interval (currently ")); - printf ("%0.3fms)\n", (float)target_interval / 1000); - printf (" %s\n", "-m"); - printf (" %s",_("number of alive hosts required for success")); - printf ("\n"); - printf (" %s\n", "-l"); - printf (" %s", _("TTL on outgoing packets (currently ")); - printf ("%u)\n", ttl); - printf (" %s\n", "-t"); - printf (" %s",_("timeout value (seconds, currently ")); - printf ("%u)\n", timeout); - printf (" %s\n", "-b"); - printf (" %s\n", _("Number of icmp data bytes to send")); - printf (" %s %u + %d)\n", _("Packet size will be data bytes + icmp header (currently"),icmp_data_size, ICMP_MINLEN); - printf (" %s\n", "-v"); - printf (" %s\n", _("verbose")); - printf ("\n"); - printf ("%s\n", _("Notes:")); - printf (" %s\n", _("If none of R,P,J,M,S or O is specified, default behavior is -R -P")); - printf (" %s\n", _("The -H switch is optional. Naming a host (or several) to check is not.")); - printf ("\n"); - printf (" %s\n", _("Threshold format for -w and -c is 200.25,60% for 200.25 msec RTA and 60%")); - printf (" %s\n", _("packet loss. The default values should work well for most users.")); - printf (" %s\n", _("You can specify different RTA factors using the standardized abbreviations")); - printf (" %s\n", _("us (microseconds), ms (milliseconds, default) or just plain s for seconds.")); + printf("Copyright (c) 2005 Andreas Ericsson \n"); + + printf(COPYRIGHT, copyright, email); + + printf("\n\n"); + + print_usage(); + + printf(UT_HELP_VRSN); + printf(UT_EXTRA_OPTS); + + printf(" %s\n", "-H"); + printf(" %s\n", _("specify a target")); + printf(" %s\n", "[-4|-6]"); + printf(" %s\n", _("Use IPv4 (default) or IPv6 to communicate with the targets")); + printf(" %s\n", "-w"); + printf(" %s", _("warning threshold (currently ")); + printf("%0.3fms,%u%%)\n", (float)warn.rta / 1000, warn.pl); + printf(" %s\n", "-c"); + printf(" %s", _("critical threshold (currently ")); + printf("%0.3fms,%u%%)\n", (float)crit.rta / 1000, crit.pl); + + printf(" %s\n", "-R"); + printf(" %s\n", _("RTA, round trip average, mode warning,critical, ex. 100ms,200ms unit in ms")); + printf(" %s\n", "-P"); + printf(" %s\n", _("packet loss mode, ex. 40%,50% , unit in %")); + printf(" %s\n", "-J"); + printf(" %s\n", _("jitter mode warning,critical, ex. 40.000ms,50.000ms , unit in ms ")); + printf(" %s\n", "-M"); + printf(" %s\n", _("MOS mode, between 0 and 4.4 warning,critical, ex. 3.5,3.0")); + printf(" %s\n", "-S"); + printf(" %s\n", _("score mode, max value 100 warning,critical, ex. 80,70 ")); + printf(" %s\n", "-O"); + printf(" %s\n", _("detect out of order ICMP packts ")); + printf(" %s\n", "-H"); + printf(" %s\n", _("specify a target")); + printf(" %s\n", "-s"); + printf(" %s\n", _("specify a source IP address or device name")); + printf(" %s\n", "-n"); + printf(" %s", _("number of packets to send (currently ")); + printf("%u)\n", packets); + printf(" %s\n", "-p"); + printf(" %s", _("number of packets to send (currently ")); + printf("%u)\n", packets); + printf(" %s\n", "-i"); + printf(" %s", _("max packet interval (currently ")); + printf("%0.3fms)\n", (float)pkt_interval / 1000); + printf(" %s\n", "-I"); + printf(" %s", _("max target interval (currently ")); + printf("%0.3fms)\n", (float)target_interval / 1000); + printf(" %s\n", "-m"); + printf(" %s", _("number of alive hosts required for success")); + printf("\n"); + printf(" %s\n", "-l"); + printf(" %s", _("TTL on outgoing packets (currently ")); + printf("%u)\n", ttl); + printf(" %s\n", "-t"); + printf(" %s", _("timeout value (seconds, currently ")); + printf("%u)\n", timeout); + printf(" %s\n", "-b"); + printf(" %s\n", _("Number of icmp data bytes to send")); + printf(" %s %u + %d)\n", _("Packet size will be data bytes + icmp header (currently"), icmp_data_size, ICMP_MINLEN); + printf(" %s\n", "-v"); + printf(" %s\n", _("verbose")); + printf("\n"); + printf("%s\n", _("Notes:")); + printf(" %s\n", _("If none of R,P,J,M,S or O is specified, default behavior is -R -P")); + printf(" %s\n", _("The -H switch is optional. Naming a host (or several) to check is not.")); + printf("\n"); + printf(" %s\n", _("Threshold format for -w and -c is 200.25,60% for 200.25 msec RTA and 60%")); + printf(" %s\n", _("packet loss. The default values should work well for most users.")); + printf(" %s\n", _("You can specify different RTA factors using the standardized abbreviations")); + printf(" %s\n", _("us (microseconds), ms (milliseconds, default) or just plain s for seconds.")); /* -d not yet implemented */ /* printf ("%s\n", _("Threshold format for -d is warn,crit. 12,14 means WARNING if >= 12 hops")); printf ("%s\n", _("are spent and CRITICAL if >= 14 hops are spent.")); printf ("%s\n\n", _("NOTE: Some systems decrease TTL when forming ICMP_ECHOREPLY, others do not."));*/ - printf ("\n"); - printf (" %s\n", _("The -v switch can be specified several times for increased verbosity.")); + printf("\n"); + printf(" %s\n", _("The -v switch can be specified several times for increased verbosity.")); /* printf ("%s\n", _("Long options are currently unsupported.")); printf ("%s\n", _("Options marked with * require an argument")); */ - printf (UT_SUPPORT); + printf(UT_SUPPORT); } - - -void -print_usage (void) -{ - printf ("%s\n", _("Usage:")); +void print_usage(void) { + printf("%s\n", _("Usage:")); printf(" %s [options] [-H] host1 host2 hostN\n", progname); } From git at monitoring-plugins.org Wed Oct 30 17:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Wed, 30 Oct 2024 17:30:12 +0100 (CET) Subject: [monitoring-plugins] check_icmp: Declare internal variables static Message-ID: <20241030163012.CA9D02000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 85f2e32e276ff92110f56828ac82b28007c72236 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 11:55:08 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=85f2e32 check_icmp: Declare internal variables static --- plugins-root/check_icmp.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index 5ad1d84..d7e6ca2 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -247,14 +247,14 @@ static struct timeval prog_start; static unsigned long long max_completion_time = 0; static unsigned int warn_down = 1, crit_down = 1; /* host down threshold values */ static int min_hosts_alive = -1; -float pkt_backoff_factor = 1.5; -float target_backoff_factor = 1.5; -bool rta_mode = false; -bool pl_mode = false; -bool jitter_mode = false; -bool score_mode = false; -bool mos_mode = false; -bool order_mode = false; +static float pkt_backoff_factor = 1.5; +static float target_backoff_factor = 1.5; +static bool rta_mode = false; +static bool pl_mode = false; +static bool jitter_mode = false; +static bool score_mode = false; +static bool mos_mode = false; +static bool order_mode = false; /** code start **/ static void crash(const char *fmt, ...) { From git at monitoring-plugins.org Wed Oct 30 17:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Wed, 30 Oct 2024 17:30:12 +0100 (CET) Subject: [monitoring-plugins] check_icmp: Properly mark function with void input Message-ID: <20241030163012.E1D5D2000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 780909f980809a3798343fb8cf82c33ed284885a Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 11:55:27 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=780909f check_icmp: Properly mark function with void input --- plugins-root/check_icmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index d7e6ca2..e6d4316 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -845,7 +845,7 @@ int main(int argc, char **argv) { return (0); } -static void run_checks() { +static void run_checks(void) { u_int i, t; u_int final_wait, time_passed; From git at monitoring-plugins.org Wed Oct 30 17:30:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Wed, 30 Oct 2024 17:30:12 +0100 (CET) Subject: [monitoring-plugins] check_icmp: Update copyright Message-ID: <20241030163013.033102000122@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: c0694cc6b52caf924418b636a290b5674a24311a Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Tue Oct 15 11:56:41 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=c0694cc check_icmp: Update copyright --- plugins-root/check_icmp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index e6d4316..2fd92cd 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -3,7 +3,7 @@ * Monitoring check_icmp plugin * * License: GPL - * Copyright (c) 2005-2008 Monitoring Plugins Development Team + * Copyright (c) 2005-2024 Monitoring Plugins Development Team * Original Author : Andreas Ericsson * * Description: @@ -39,7 +39,7 @@ /* progname may change */ /* char *progname = "check_icmp"; */ char *progname; -const char *copyright = "2005-2008"; +const char *copyright = "2005-2024"; const char *email = "devel at monitoring-plugins.org"; /** Monitoring Plugins basic includes */ From git at monitoring-plugins.org Wed Oct 30 17:30:13 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Wed, 30 Oct 2024 17:30:13 +0100 (CET) Subject: [monitoring-plugins] clang-format: Put all enum values in a single line Message-ID: <20241030163013.1409B2000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: dd649f629e4846313a3dc89fcae72a420f258be4 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Wed Oct 16 00:11:17 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=dd649f6 clang-format: Put all enum values in a single line --- .clang-format | 1 + 1 file changed, 1 insertion(+) diff --git a/.clang-format b/.clang-format index c7f0b5e..e7869da 100644 --- a/.clang-format +++ b/.clang-format @@ -8,3 +8,4 @@ AlignConsecutiveMacros: true ColumnLimit: 180 IndentPPDirectives: AfterHash SortIncludes: Never +AllowShortEnumsOnASingleLine: false From git at monitoring-plugins.org Wed Oct 30 17:30:13 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Wed, 30 Oct 2024 17:30:13 +0100 (CET) Subject: [monitoring-plugins] check_icmp: clang-format Message-ID: <20241030163013.298B72000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: aa1f9c50118d63f7229523655a1fab28fd0eab24 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Wed Oct 16 00:11:39 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=aa1f9c5 check_icmp: clang-format --- plugins-root/check_icmp.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index 2fd92cd..6eefeb0 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -175,7 +175,13 @@ typedef union icmp_packet { #define MODE_ALL 2 #define MODE_ICMP 3 -enum enum_threshold_mode { const_rta_mode, const_packet_loss_mode, const_jitter_mode, const_mos_mode, const_score_mode }; +enum enum_threshold_mode { + const_rta_mode, + const_packet_loss_mode, + const_jitter_mode, + const_mos_mode, + const_score_mode +}; typedef enum enum_threshold_mode threshold_mode; From git at monitoring-plugins.org Wed Oct 30 17:30:13 2024 From: git at monitoring-plugins.org (Lorenz Kästle) Date: Wed, 30 Oct 2024 17:30:13 +0100 (CET) Subject: [monitoring-plugins] Merge branch 'master' into cleanup/check_icmp Message-ID: <20241030163013.3D0CD2000122@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 3f1db8dc3a0a5233d338fd6bd5e80971bfb21545 Author: Lorenz K?stle Date: Wed Oct 30 17:07:04 2024 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=3f1db8d Merge branch 'master' into cleanup/check_icmp --- From git at monitoring-plugins.org Wed Oct 30 17:30:13 2024 From: git at monitoring-plugins.org (Lorenz Kästle) Date: Wed, 30 Oct 2024 17:30:13 +0100 (CET) Subject: [monitoring-plugins] check_icmp: Apply clang-format again Message-ID: <20241030163013.547942000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: de6e3c45f3f0889a5b4aada623cbefbd9fcb434d Author: Lorenz K?stle Date: Wed Oct 30 17:12:19 2024 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=de6e3c4 check_icmp: Apply clang-format again --- plugins-root/check_icmp.c | 59 +++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index 6eefeb0..960ab8f 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -580,7 +580,8 @@ int main(int argc, char **argv) { icmp_data_size = size; icmp_pkt_size = size + ICMP_MINLEN; } else - usage_va("ICMP data length must be between: %lu and %lu", sizeof(struct icmp) + sizeof(struct icmp_ping_data), MAX_PING_DATA - 1); + usage_va("ICMP data length must be between: %lu and %lu", sizeof(struct icmp) + sizeof(struct icmp_ping_data), + MAX_PING_DATA - 1); break; case 'i': pkt_interval = get_timevar(optarg); @@ -803,7 +804,8 @@ int main(int argc, char **argv) { "target_interval: %0.3f, pkt_interval %0.3f\n" "crit.rta: %0.3f\n" "max_completion_time: %0.3f\n", - packets, targets, (float)target_interval / 1000, (float)pkt_interval / 1000, (float)crit.rta / 1000, (float)max_completion_time / 1000); + packets, targets, (float)target_interval / 1000, (float)pkt_interval / 1000, (float)crit.rta / 1000, + (float)max_completion_time / 1000); } if (debug) { @@ -997,9 +999,10 @@ static int wait_for_reply(int sock, u_int t) { /* address_family == AF_INET6 ? sizeof(struct icmp6_hdr) : sizeof(struct icmp));*/ - if ((address_family == PF_INET && (ntohs(packet.icp->icmp_id) != pid || packet.icp->icmp_type != ICMP_ECHOREPLY || ntohs(packet.icp->icmp_seq) >= targets * packets)) || - (address_family == PF_INET6 && - (ntohs(packet.icp6->icmp6_id) != pid || packet.icp6->icmp6_type != ICMP6_ECHO_REPLY || ntohs(packet.icp6->icmp6_seq) >= targets * packets))) { + if ((address_family == PF_INET && (ntohs(packet.icp->icmp_id) != pid || packet.icp->icmp_type != ICMP_ECHOREPLY || + ntohs(packet.icp->icmp_seq) >= targets * packets)) || + (address_family == PF_INET6 && (ntohs(packet.icp6->icmp6_id) != pid || packet.icp6->icmp6_type != ICMP6_ECHO_REPLY || + ntohs(packet.icp6->icmp6_seq) >= targets * packets))) { if (debug > 2) printf("not a proper ICMP_ECHOREPLY\n"); handle_random_icmp(buf + hlen, &resp_addr); @@ -1010,14 +1013,14 @@ static int wait_for_reply(int sock, u_int t) { if (address_family == PF_INET) { memcpy(&data, packet.icp->icmp_data, sizeof(data)); if (debug > 2) - printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", (unsigned long)sizeof(data), ntohs(packet.icp->icmp_id), ntohs(packet.icp->icmp_seq), - packet.icp->icmp_cksum); + printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", (unsigned long)sizeof(data), ntohs(packet.icp->icmp_id), + ntohs(packet.icp->icmp_seq), packet.icp->icmp_cksum); host = table[ntohs(packet.icp->icmp_seq) / packets]; } else { memcpy(&data, &packet.icp6->icmp6_dataun.icmp6_un_data8[4], sizeof(data)); if (debug > 2) - printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", (unsigned long)sizeof(data), ntohs(packet.icp6->icmp6_id), ntohs(packet.icp6->icmp6_seq), - packet.icp6->icmp6_cksum); + printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", (unsigned long)sizeof(data), ntohs(packet.icp6->icmp6_id), + ntohs(packet.icp6->icmp6_seq), packet.icp6->icmp6_cksum); host = table[ntohs(packet.icp6->icmp6_seq) / packets]; } @@ -1069,12 +1072,13 @@ static int wait_for_reply(int sock, u_int t) { switch (address_family) { case AF_INET: { - printf("%0.3f ms rtt from %s, outgoing ttl: %u, incoming ttl: %u, max: %0.3f, min: %0.3f\n", (float)tdiff / 1000, address, ttl, ip->ip.ip_ttl, - (float)host->rtmax / 1000, (float)host->rtmin / 1000); + printf("%0.3f ms rtt from %s, outgoing ttl: %u, incoming ttl: %u, max: %0.3f, min: %0.3f\n", (float)tdiff / 1000, address, + ttl, ip->ip.ip_ttl, (float)host->rtmax / 1000, (float)host->rtmin / 1000); break; }; case AF_INET6: { - printf("%0.3f ms rtt from %s, outgoing ttl: %u, max: %0.3f, min: %0.3f\n", (float)tdiff / 1000, address, ttl, (float)host->rtmax / 1000, (float)host->rtmin / 1000); + printf("%0.3f ms rtt from %s, outgoing ttl: %u, max: %0.3f, min: %0.3f\n", (float)tdiff / 1000, address, ttl, + (float)host->rtmax / 1000, (float)host->rtmin / 1000); }; } } @@ -1083,7 +1087,8 @@ static int wait_for_reply(int sock, u_int t) { if (mode == MODE_HOSTCHECK) { printf("OK - %s responds to ICMP. Packet %u, rta %0.3fms|" "pkt=%u;;;0;%u rta=%0.3f;%0.3f;%0.3f;;\n", - host->name, icmp_recv, (float)tdiff / 1000, icmp_recv, packets, (float)tdiff / 1000, (float)warn.rta / 1000, (float)crit.rta / 1000); + host->name, icmp_recv, (float)tdiff / 1000, icmp_recv, packets, (float)tdiff / 1000, (float)warn.rta / 1000, + (float)crit.rta / 1000); exit(STATE_OK); } } @@ -1138,8 +1143,8 @@ static int send_icmp_ping(int sock, struct rta_host *host) { icp->icmp_cksum = icmp_checksum((uint16_t *)buf, (size_t)icmp_pkt_size); if (debug > 2) - printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", (unsigned long)sizeof(data), ntohs(icp->icmp_id), ntohs(icp->icmp_seq), - icp->icmp_cksum, host->name); + printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", (unsigned long)sizeof(data), + ntohs(icp->icmp_id), ntohs(icp->icmp_seq), icp->icmp_cksum, host->name); } else { struct icmp6_hdr *icp6 = (struct icmp6_hdr *)buf; addrlen = sizeof(struct sockaddr_in6); @@ -1154,8 +1159,8 @@ static int send_icmp_ping(int sock, struct rta_host *host) { // let checksum be calculated automatically if (debug > 2) { - printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", (unsigned long)sizeof(data), ntohs(icp6->icmp6_id), ntohs(icp6->icmp6_seq), - icp6->icmp6_cksum, host->name); + printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", (unsigned long)sizeof(data), + ntohs(icp6->icmp6_id), ntohs(icp6->icmp6_seq), icp6->icmp6_cksum, host->name); } } @@ -1542,11 +1547,13 @@ static void finish(int sig) { if (rta_mode) { if (host->pl < 100) { - printf("%srta=%0.3fms;%0.3f;%0.3f;0; %srtmax=%0.3fms;;;; %srtmin=%0.3fms;;;; ", (targets > 1) ? host->name : "", host->rta / 1000, (float)warn.rta / 1000, - (float)crit.rta / 1000, (targets > 1) ? host->name : "", (float)host->rtmax / 1000, (targets > 1) ? host->name : "", + printf("%srta=%0.3fms;%0.3f;%0.3f;0; %srtmax=%0.3fms;;;; %srtmin=%0.3fms;;;; ", (targets > 1) ? host->name : "", + host->rta / 1000, (float)warn.rta / 1000, (float)crit.rta / 1000, (targets > 1) ? host->name : "", + (float)host->rtmax / 1000, (targets > 1) ? host->name : "", (host->rtmin < INFINITY) ? (float)host->rtmin / 1000 : (float)0); } else { - printf("%srta=U;;;; %srtmax=U;;;; %srtmin=U;;;; ", (targets > 1) ? host->name : "", (targets > 1) ? host->name : "", (targets > 1) ? host->name : ""); + printf("%srta=U;;;; %srtmax=U;;;; %srtmin=U;;;; ", (targets > 1) ? host->name : "", (targets > 1) ? host->name : "", + (targets > 1) ? host->name : ""); } } @@ -1556,12 +1563,13 @@ static void finish(int sig) { if (jitter_mode) { if (host->pl < 100) { - printf("%sjitter_avg=%0.3fms;%0.3f;%0.3f;0; %sjitter_max=%0.3fms;;;; %sjitter_min=%0.3fms;;;; ", (targets > 1) ? host->name : "", (float)host->jitter, - (float)warn.jitter, (float)crit.jitter, (targets > 1) ? host->name : "", (float)host->jitter_max / 1000, (targets > 1) ? host->name : "", + printf("%sjitter_avg=%0.3fms;%0.3f;%0.3f;0; %sjitter_max=%0.3fms;;;; %sjitter_min=%0.3fms;;;; ", + (targets > 1) ? host->name : "", (float)host->jitter, (float)warn.jitter, (float)crit.jitter, + (targets > 1) ? host->name : "", (float)host->jitter_max / 1000, (targets > 1) ? host->name : "", (float)host->jitter_min / 1000); } else { - printf("%sjitter_avg=U;;;; %sjitter_max=U;;;; %sjitter_min=U;;;; ", (targets > 1) ? host->name : "", (targets > 1) ? host->name : "", - (targets > 1) ? host->name : ""); + printf("%sjitter_avg=U;;;; %sjitter_max=U;;;; %sjitter_min=U;;;; ", (targets > 1) ? host->name : "", + (targets > 1) ? host->name : "", (targets > 1) ? host->name : ""); } } @@ -1594,7 +1602,8 @@ static void finish(int sig) { /* finish with an empty line */ puts(""); if (debug) - printf("targets: %u, targets_alive: %u, hosts_ok: %u, hosts_warn: %u, min_hosts_alive: %i\n", targets, targets_alive, hosts_ok, hosts_warn, min_hosts_alive); + printf("targets: %u, targets_alive: %u, hosts_ok: %u, hosts_warn: %u, min_hosts_alive: %i\n", targets, targets_alive, hosts_ok, + hosts_warn, min_hosts_alive); exit(status); } From git at monitoring-plugins.org Wed Oct 30 17:30:13 2024 From: git at monitoring-plugins.org (GitHub) Date: Wed, 30 Oct 2024 17:30:13 +0100 (CET) Subject: [monitoring-plugins] Merge pull request #2028 from ... Message-ID: <20241030163013.6DDE12000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: b4c5956591e9741ce9b190210e7b10940a6adbdd Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Wed Oct 30 17:24:16 2024 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=b4c5956 Merge pull request #2028 from RincewindsHat/cleanup/check_icmp Cleanup check icmp --- From git at monitoring-plugins.org Thu Oct 31 15:00:12 2024 From: git at monitoring-plugins.org (Git Repository) Date: Thu, 31 Oct 2024 15:00:12 +0100 (CET) Subject: [monitoring-plugins] New commits on branch master Message-ID: <20241031140012.19DD72000124@orwell.monitoring-plugins.org> URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ee1ba3209993b72e90f5fe30a16ad951f1e2402d Author: Lorenz K??stle Date: Thu Oct 17 17:57:50 2024 +0200 lib: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=9462819774ed2e3f51c75fffda59724428205c0e Author: Lorenz K??stle Date: Thu Oct 17 18:01:49 2024 +0200 lib: Update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e480c2bf48e1e905310f10ffbf1ddb190bf2e107 Merge: 9462819 b4c5956 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 01:27:55 2024 +0100 Merge branch 'master' into cleanup/lib URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=880e57271d66b34240b58bdbeaf9d53a08958eb2 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 01:30:50 2024 +0100 lib: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=7d90b8200f709d125df19fa6aedf633c64b88ad4 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 01:31:59 2024 +0100 lib: clang-format for headers too URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=9f1ec43ce1637b41117d03b8456af8c0829a54f2 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:43:12 2024 +0100 check_by_ssh: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=744568f1f804f6676358a4ad654e4319598cebdf Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:44:09 2024 +0100 check_by_ssh: Copyright update URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ba47cca3ef026209868da044741554cbb6c2bb3b Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:45:58 2024 +0100 check_by_ssh: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=060bd01d89a6da0a5a7c3c1779c98a2b2c8c0c53 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:50:34 2024 +0100 check_by_ssh: linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=80ec3f0f046384399d4850b06806815cbc5cc7c9 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:51:49 2024 +0100 check_cluster: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=a30f0c6c08f90de8abe6ca277e98102aa4d6950c Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:53:01 2024 +0100 check_cluster: Copyright update URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ebb453f55ef6e64033ac50341963eb49cf457796 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:54:48 2024 +0100 check_cluster: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=289f07d754554191d202684b7664f9012c662f10 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:57:07 2024 +0100 check_cluster: linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=80f07ff92b73d24614c0d3d15021f115bf85b152 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:58:41 2024 +0100 check_curl: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=367c4f89c1417aba29d2421e157817994a049f87 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 02:59:49 2024 +0100 check_curl: Update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=7334812a929768aa310557ae823b91df79b32f51 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:05:43 2024 +0100 check_curl: do not export local variables and remove unused ones URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=fde8e9c77b094ccec536d05c634d9d8f1f0e3abc Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:10:57 2024 +0100 check_curl: Linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=c413037aa8041daccb61d4bef77e34553e3c5fb7 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:11:54 2024 +0100 check_dbi: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=267c6689813d6acac60a8cb4dce1e58055f8471d Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:13:07 2024 +0100 check_dbi: Update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=981f1d562990d96001a88ea1227bc047561879c7 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:15:12 2024 +0100 check_dbi: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=79d7f401612d390d3a4975139da524043bdc43a7 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:17:20 2024 +0100 check_dbi: linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=904d1ef78dabae2e9fb1f57dfb7d43ecdf294fd3 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:19:50 2024 +0100 check_dig: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=f0d780384219dabb5b7ad569a7dfb3576b199230 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:21:37 2024 +0100 check_dig: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=acb19fe8f7acaeccb3fe0c1cb11e8ab5fd5e8a1b Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:22:43 2024 +0100 check_dig: Linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=25e0c67b0972b9bef426ebf6ca11ee191df74cff Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:24:02 2024 +0100 check_disk: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=78aa69150556f83d335ec417c290c617b6f6b5df Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:25:04 2024 +0100 check_disk: Update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e57e86aedb91ea8c973b1e751cf233dc1aa0465b Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:26:07 2024 +0100 check_dig: Update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=08526fd07f99895f198db1e58ad92e52b9b809bb Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:28:27 2024 +0100 check_disk: Linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=499c0a07ae42ef48b3a1f25031fb933c3c59e327 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:29:32 2024 +0100 check_dns: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=702dc596a4a6ed124751c55cbd5c62f96ae8a157 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:30:42 2024 +0100 check_dns: do not export local variables URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=4f34506c81484673bf3623d1c3a8100dc1761e8c Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:33:10 2024 +0100 check_dns: Linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=078e9b96adce9a9ae10535e496a743288eb8c9f2 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:33:51 2024 +0100 check_dns: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=31133c789c609f510a8490032633b4be822060fc Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:34:46 2024 +0100 check_dummy: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=1633fd73bde6f2a2899b2f20d2e07683d5ea13ce Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:35:18 2024 +0100 check_dummy: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=5f2ae6d5e5240570de28a344fea2e822e1fa0bf4 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:36:00 2024 +0100 check_dummy: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=82975ac988cad3f555fb381da98fc3b018a5769f Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:36:59 2024 +0100 check_fping: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=5490729f1ff8fd65ba408906cf1552331938424b Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:37:38 2024 +0100 check_fping: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=f3ed9c6038eb960efcdaff7f58cae7934dd20a3e Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:38:44 2024 +0100 check_fping: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=1d0f532750f24b2208846c139927fb8ed50ff1d3 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:39:38 2024 +0100 check_fping: Linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=11a5ab2b8d1ae2c21e2831dd8f6fc4097775dbf7 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:40:12 2024 +0100 check_game: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=aa143390f5ee7ca43958312e3142b25df6653e9a Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:41:06 2024 +0100 check_game: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=8355b9db407f2ca763467efb509de7564f8016a4 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:42:06 2024 +0100 check_game: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0e0c517b19c7a97cb4efec0731c40caf57d1a340 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:44:06 2024 +0100 check_game: linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=80fcc8dfacba565881bc552f1f5515d7ea5ffbed Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:45:03 2024 +0100 check_hpjd: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=a4b3386657625fa8d24ca25993560895694ad9c8 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:45:50 2024 +0100 check_hpjd: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=f33412e50acbb57c3c02a412a3e9574639576f83 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:47:03 2024 +0100 check_hpjd: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e03fb9904ba91e44023ea56758f438b0005f8972 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:47:51 2024 +0100 check_hpjd: linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=536d8e700267432dc7b3ab0504d80a9071972a22 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:48:28 2024 +0100 check_ide_smart: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=c16bc4024caed74a3ceb9168c7e50ce3ad09dacb Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:49:17 2024 +0100 check_ide_smart: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=5c6d79dac31b55d78fcbb10c48ab357574307bc0 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:51:37 2024 +0100 check_ide_smart: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=4db8808a5120778004b8ade834f30d0f4b3db914 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 03:52:36 2024 +0100 check_ide_smart: linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=cc45c9772b4a7df9cd2231fa8f36c33ca09495a7 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:15:15 2024 +0100 check_mrtg: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=fc6363879157a3e70f5d56357bda1ab7ff083ba4 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:15:57 2024 +0100 check_mrtg: Update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e170dbef11954d1590c0c077688494bf0bc4d110 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:21:40 2024 +0100 check_mrtg: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0062a32af18914ff26ca1714388734c66848663a Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:26:54 2024 +0100 check_mrtg: cosmetic fixes, linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=476038f0d10a4f418c64d67b2a77959ca6c6c76b Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:29:39 2024 +0100 check_mrtgtraf: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=88584ddabc2f65b449088ea4ae1b0faf596821aa Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:30:26 2024 +0100 check_mrtgtraf: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=07490350ca9b7ff2a4710c955b281f4ea99ded56 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:31:13 2024 +0100 check_mrtgtraf: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=a9f0c74b10717ad733ab14f28deae98222badeac Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:38:21 2024 +0100 check_mrtgtraf: linter and style fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=13880ab5dc33d897501a18e22d97b7a41c828137 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:45:26 2024 +0100 check_mysql_query: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=f9fd727323e67821360ceae3ad2c8e5bb9cb71e2 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:47:01 2024 +0100 check_mysql_query: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=30bd6716fb9a7c672651d6272140d844d5bea464 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:52:33 2024 +0100 check_mysql_query: linter fixes, more moden C style URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=290025f8a983baf5b227e50f318a2a16f2e741a8 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:53:14 2024 +0100 check_mysql_query: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=eb6632f57d1c6799f5eea36881e782d627080efd Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:53:50 2024 +0100 check_nagios: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ecbc67ec663a3b759369dc612db4ae2f8d84d177 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:54:23 2024 +0100 check_nagios: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ce538b0dd9140fee6a961f35b5b6e2576304bad4 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:55:05 2024 +0100 check_nagios: do not export local variables URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=1868ea77253c7379e46b50d0f4513d86435bc737 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:56:02 2024 +0100 check_nagios: linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=5763575ff5c1c2b1c158bd113cdefdf0d0095497 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:57:17 2024 +0100 check_ntp_peer: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=623fed10cce7615528038992ed6d65165234cb9c Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:58:07 2024 +0100 check_ntp_peer: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=4f74229bb3dd9d43dd80a8f396f0905a674c4746 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 12:59:28 2024 +0100 check_ntp_peer: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=d0ea64439b73b415c206a23e7498364cd58b3c71 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:09:24 2024 +0100 check_ntp_peer: more local variables, linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=395ab8f58bbc802e56fc854540bde8694175a3f6 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:09:57 2024 +0100 check_ntp_time: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=d078e8037f00d400e6fcf6c6e3341769840610e9 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:11:10 2024 +0100 check_ntp_time: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=7d706b15d0f4257cac341aad6f167ae7398e04a8 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:11:27 2024 +0100 check_ntp_time: do not export local variables URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0700aacf7c50d1da086cd0a77b13fe1afd99b709 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:23:31 2024 +0100 check_ntp_time: more local variables, style fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=835be77d74f0d418022a07e9a5d7c0f05e06fcc7 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:24:56 2024 +0100 check_pgsql: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=cc63bc669977ed29fe2c457218ac51cdd3e121dd Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:25:30 2024 +0100 check_pgsql: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=daf37fbd6700cb67cb15ce5267d370423d3815ea Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:26:56 2024 +0100 check_pgsql: do not export local variables URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0a3fcf0d97896b66a0263daa6d96bf2a87511611 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:33:31 2024 +0100 check_pgsql: diverse style fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=8eb68605783b2d651c94c133d84faacefee83a99 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:34:11 2024 +0100 check_ping: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=f60f83a522a7d1552d787630455c1b30ce31764a Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:35:48 2024 +0100 check_pgsql: print_usage must be exported URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=bf53f05ebfa10641a70e85a998928aad8ce8c4b7 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:39:22 2024 +0100 check_ping: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=6d4e76680c96d21b00d565fa0128e6956d0be8a3 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:39:35 2024 +0100 check_ping: do not export local symbols URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=b227a9f85498e724bd82b4d6bd9fccc02f64763a Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:42:06 2024 +0100 check_ping: linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=5b3c12025bf7a2eee43301a634a63dfac6507a7e Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:43:05 2024 +0100 check_real: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=5dcd63f11019d55f0de58ead32cbc01741dd2f1c Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:47:20 2024 +0100 check_real: style and linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=b033e670c6adf4073428f644e76e8d1c77fe0198 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:47:49 2024 +0100 check_real: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=50f6ae2c6433d954027e7102f4f3982ba1cf048d Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:56:00 2024 +0100 check_snmp: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=04471ba48d5cf2bb422b8bc1fec9cfdac2fbad5f Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 13:56:28 2024 +0100 check_snmp: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=b6d920da5576b712fe998abc04dbf4cb23245106 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:01:12 2024 +0100 check_snmp: style + linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0be4dede6e546234684b807618d930c1aa50fe31 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:02:13 2024 +0100 check_tcp: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ec70b396727570c21465f8d94fb64105a80ae958 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:02:57 2024 +0100 check_tcp: update_copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=c1f337c6537110d87b4cf2e63454889f910c3fa2 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:07:54 2024 +0100 check_tcp: style + linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e4e7c00647c44901eca531f0209d7211725f8b86 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:09:45 2024 +0100 check_time: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=a54dd508958449d4205a2ae6b1033ce44d7507e3 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:10:27 2024 +0100 check_time: do not export local variables URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=eca51d0787c073900efe723a7ad03467a057197e Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:12:27 2024 +0100 check_time: style + linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=6dd03aff71357712c2ff09667da7b7506d9b7e7a Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:13:00 2024 +0100 check_time: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=35723950547b06a359bac9a767d2a6f1520926b7 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:13:43 2024 +0100 check_ups: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=92d18a18d1250f74505790639ddcde6ff9b212cc Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:14:31 2024 +0100 check_users: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=61f569e6d3493e2cd648c3c17f4eb7c82f1070f0 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:16:13 2024 +0100 check_users: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=7185547291299ce9d32dc95054c35dcabf184e3f Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:16:34 2024 +0100 check_users: do not export local variables + style fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e191544a17e1758d5bd256df5b0f3785fb105e1b Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:17:46 2024 +0100 negate: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=733d7257191cfe5b77d6374257a1435ec14fd625 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:18:24 2024 +0100 negate: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ab5a037d66b970fd4c7d7bb67495c38e38664da0 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:19:05 2024 +0100 negate: do not export local variables URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=c6e09500c82fccec09527ec375f314cf24fdef8b Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:21:55 2024 +0100 negate: style + linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=f0f767f8caf481ab575ed089b715c3963b0e6e12 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:22:25 2024 +0100 popen.c: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=baa2208a1daa3bf12c6bd7f9bc3646fcff36121f Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:23:05 2024 +0100 popen.c: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=fc90673afcdc6e4107161391d9ad62d40d4b558f Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:27:16 2024 +0100 popen.c: style + linter fixes URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=c7691ddf4be137e262521f83f9efb4888190c623 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:28:12 2024 +0100 picohttpparser: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=629571aac3a8f5953fa52403516d16bd73069f87 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:28:36 2024 +0100 runcmd.c: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=4ca5696a19df55962fd55e223dea9fd4e801f0e0 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:29:13 2024 +0100 runcmd.c: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=daecd2f6f845336a65a8ad479ff4c0fe3e8558ee Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:30:10 2024 +0100 netuils.c: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e353337d08b7cc778f01ef94301af73539e8266c Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:30:43 2024 +0100 netutils.c: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=8c937fbfac89e632d86dcde9c6b8e5f7d6790902 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:32:03 2024 +0100 sslutils.c: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=d32adb6697a8c8c8b9df235a382316f8302df87a Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:32:43 2024 +0100 sslutils.c: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=cadc94074bba0c181ddda678e989ca3b8be8dce5 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:33:04 2024 +0100 urlize.c: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=9c9d7a0d43e4271ad701f080bb4e25a38d6556d1 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:33:47 2024 +0100 urlize.c: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=dde0e519ff69a4c6b17c17d62df8f90be70b86ba Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:34:06 2024 +0100 plugins/utils.c: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=08d9932c137301aa2bdb6f6f30ff7cbeacaccbb3 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:35:09 2024 +0100 plugins/utils.c: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=bb6e5dac7bccc1ff6b40fdcaf9dea4f11fe4b797 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:35:42 2024 +0100 check_ide_smart: clang-format again URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e3348570d177e333f79e6dc56389ec4871f95cba Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:38:33 2024 +0100 check_nwstat: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ac3cb0b7025b5661ffc385df5999b3c908797922 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:39:05 2024 +0100 check_nwstat: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=3b1ffd9264b232438be6965c398ecf3a6651b52c Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:39:19 2024 +0100 check_overcr: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=d08ac703906fb2508540b7a3ea00ab881599a494 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:40:13 2024 +0100 check_overcr: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=520617e398682322f0e79e932101d7235e41aeb9 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:41:42 2024 +0100 check_nt: clang-format URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=fcfa439ff85fab3d3d0046aff9f1e5ad4cb263c0 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:42:19 2024 +0100 check_nt: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=66655d5d7a3467d997dab1bd122eeffa9b9b9cc5 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:43:27 2024 +0100 check_radius: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=86f170336964f20bbfeb9f088e738336a708e736 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:44:11 2024 +0100 check_ldap: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=2ceeada4347de40be211b5e2b386e524b287cc0c Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:44:59 2024 +0100 check_apt: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=de5709bd7c0a15475daaf131491d3aa76ff464aa Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:45:24 2024 +0100 check_mysql: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=3962ab996e0d891fb20815efc66674898b71bddc Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:46:03 2024 +0100 check_procs: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=41b0b959d8bac7ae359f63d101d404dfd5dd4591 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:46:36 2024 +0100 check_smtp: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ffa1d68a3442dea9499fedd754ac1d02f5641c54 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:47:16 2024 +0100 check_ntp: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=611b33a30e0369168a0cddfa1a8b5f9479f52056 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:47:49 2024 +0100 check_ssh: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=f0c6157cecdd8d2df832a649fe4ff35f8883b168 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:48:19 2024 +0100 urlize: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=8955f56de355403941bc8f02a4edb2bc72d1397a Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:48:54 2024 +0100 check_http: update copyright URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=b1d260a821b7d4916d6bf1a026fbc9b4f2b268ae Merge: b4c5956 8955f56 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:57:43 2024 +0100 Merge pull request #2035 from RincewindsHat/cleanup/rest-of-plugins Cleanup for some more plugins URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=87eb2bef1ee2a6a42793437b2f5d63f41b1e1806 Merge: b1d260a 7d90b82 Author: Lorenz K??stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 14:58:50 2024 +0100 Merge pull request #2034 from RincewindsHat/cleanup/lib Cleanup/lib From git at monitoring-plugins.org Thu Oct 31 16:20:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Thu, 31 Oct 2024 16:20:12 +0100 (CET) Subject: [monitoring-plugins] check_ssh: Always initialize elapsed_time Message-ID: <20241031152012.D17F72000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 04115904adc237dbb2a4224728b0f5a49d617703 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Wed Aug 28 23:39:57 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0411590 check_ssh: Always initialize elapsed_time --- plugins/check_ssh.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/check_ssh.c b/plugins/check_ssh.c index 34ef37b..3c1a594 100644 --- a/plugins/check_ssh.c +++ b/plugins/check_ssh.c @@ -222,7 +222,7 @@ ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol char *ssh_server = NULL; static char *rev_no = VERSION; struct timeval tv; - double elapsed_time; + double elapsed_time = 0; gettimeofday(&tv, NULL); From git at monitoring-plugins.org Thu Oct 31 16:20:12 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Thu, 31 Oct 2024 16:20:12 +0100 (CET) Subject: [monitoring-plugins] check_ssh: Remove unused variable iteration Message-ID: <20241031152012.E13DE2000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 829ec76f00f33f7015936dcccca60661ca459252 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Wed Aug 28 23:40:22 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=829ec76 check_ssh: Remove unused variable iteration --- plugins/check_ssh.c | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/check_ssh.c b/plugins/check_ssh.c index 3c1a594..a3b5358 100644 --- a/plugins/check_ssh.c +++ b/plugins/check_ssh.c @@ -233,7 +233,6 @@ ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol char *output = (char *) calloc (BUFF_SZ + 1, sizeof(char)); - unsigned int iteration = 0; ssize_t byte_offset = 0; while ((version_control_string == NULL) && (recv_ret = recv(sd, output+byte_offset, BUFF_SZ - byte_offset, 0) > 0)) { From git at monitoring-plugins.org Thu Oct 31 16:20:13 2024 From: git at monitoring-plugins.org (RincewindsHat) Date: Thu, 31 Oct 2024 16:20:13 +0100 (CET) Subject: [monitoring-plugins] check_ssh: set elapsed time properly Message-ID: <20241031152013.123192000126@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 0fd0421052fed1972ecbdfdabecba5a616eaa109 Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com> Date: Fri Sep 6 01:53:47 2024 +0200 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0fd0421 check_ssh: set elapsed time properly Previous to this commit, `elapsed_time` was only set after being read, which was quite likely wrong and a bug. This commit actually set the value before it is being read again. --- plugins/check_ssh.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/check_ssh.c b/plugins/check_ssh.c index a3b5358..d162e42 100644 --- a/plugins/check_ssh.c +++ b/plugins/check_ssh.c @@ -222,7 +222,6 @@ ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol char *ssh_server = NULL; static char *rev_no = VERSION; struct timeval tv; - double elapsed_time = 0; gettimeofday(&tv, NULL); @@ -334,6 +333,7 @@ ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol exit (STATE_CRITICAL); } + double elapsed_time = (double)deltime(tv) / 1.0e6; if (remote_protocol && strcmp(remote_protocol, ssh_proto)) { printf (_("SSH CRITICAL - %s (protocol %s) protocol version mismatch, expected '%s' | %s\n"), @@ -342,7 +342,6 @@ ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol close(sd); exit (STATE_CRITICAL); } - elapsed_time = (double)deltime(tv) / 1.0e6; printf (_("SSH OK - %s (protocol %s) | %s\n"), From git at monitoring-plugins.org Thu Oct 31 16:20:13 2024 From: git at monitoring-plugins.org (Lorenz Kästle) Date: Thu, 31 Oct 2024 16:20:13 +0100 (CET) Subject: [monitoring-plugins] Merge branch 'master' into ... Message-ID: <20241031152013.354BE2000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: fa15fdcf5dc2d40aba2f8520108e552b73b1df2b Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 15:27:01 2024 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=fa15fdc Merge branch 'master' into fix/check_ssh-variable-stuff --- From git at monitoring-plugins.org Thu Oct 31 16:20:13 2024 From: git at monitoring-plugins.org (Lorenz Kästle) Date: Thu, 31 Oct 2024 16:20:13 +0100 (CET) Subject: [monitoring-plugins] check_ssh: clang-format Message-ID: <20241031152013.45DE72000125@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 6410ef8acbc1445fd49da5c199febb5c2930ad65 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 15:55:04 2024 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=6410ef8 check_ssh: clang-format --- plugins/check_ssh.c | 330 ++++++++++++++++++++++++---------------------------- 1 file changed, 149 insertions(+), 181 deletions(-) diff --git a/plugins/check_ssh.c b/plugins/check_ssh.c index 8e29fa9..9f805db 100644 --- a/plugins/check_ssh.c +++ b/plugins/check_ssh.c @@ -1,32 +1,32 @@ /***************************************************************************** -* -* Monitoring check_ssh plugin -* -* License: GPL -* Copyright (c) 2000-2024 Monitoring Plugins Development Team -* -* Description: -* -* This file contains the check_ssh plugin -* -* Try to connect to an SSH server at specified server and port -* -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -* -* -*****************************************************************************/ + * + * Monitoring check_ssh plugin + * + * License: GPL + * Copyright (c) 2000-2024 Monitoring Plugins Development Team + * + * Description: + * + * This file contains the check_ssh plugin + * + * Try to connect to an SSH server at specified server and port + * + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + *****************************************************************************/ const char *progname = "check_ssh"; const char *copyright = "2000-2024"; @@ -37,11 +37,11 @@ const char *email = "devel at monitoring-plugins.org"; #include "utils.h" #ifndef MSG_DONTWAIT -#define MSG_DONTWAIT 0 +# define MSG_DONTWAIT 0 #endif -#define SSH_DFL_PORT 22 -#define BUFF_SZ 256 +#define SSH_DFL_PORT 22 +#define BUFF_SZ 256 int port = -1; char *server_name = NULL; @@ -49,96 +49,87 @@ char *remote_version = NULL; char *remote_protocol = NULL; bool verbose = false; -int process_arguments (int, char **); -int validate_arguments (void); -void print_help (void); -void print_usage (void); +int process_arguments(int, char **); +int validate_arguments(void); +void print_help(void); +void print_usage(void); -int ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol); +int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_protocol); - -int -main (int argc, char **argv) -{ +int main(int argc, char **argv) { int result = STATE_UNKNOWN; - setlocale (LC_ALL, ""); - bindtextdomain (PACKAGE, LOCALEDIR); - textdomain (PACKAGE); + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); /* Parse extra opts if any */ - argv=np_extra_opts (&argc, argv, progname); + argv = np_extra_opts(&argc, argv, progname); - if (process_arguments (argc, argv) == ERROR) - usage4 (_("Could not parse arguments")); + if (process_arguments(argc, argv) == ERROR) + usage4(_("Could not parse arguments")); /* initialize alarm signal handling */ - signal (SIGALRM, socket_timeout_alarm_handler); + signal(SIGALRM, socket_timeout_alarm_handler); - alarm (socket_timeout); + alarm(socket_timeout); /* ssh_connect exits if error is found */ - result = ssh_connect (server_name, port, remote_version, remote_protocol); + result = ssh_connect(server_name, port, remote_version, remote_protocol); - alarm (0); + alarm(0); return (result); } - - /* process command-line arguments */ -int -process_arguments (int argc, char **argv) -{ +int process_arguments(int argc, char **argv) { int c; int option = 0; - static struct option longopts[] = { - {"help", no_argument, 0, 'h'}, - {"version", no_argument, 0, 'V'}, - {"host", required_argument, 0, 'H'}, /* backward compatibility */ - {"hostname", required_argument, 0, 'H'}, - {"port", required_argument, 0, 'p'}, - {"use-ipv4", no_argument, 0, '4'}, - {"use-ipv6", no_argument, 0, '6'}, - {"timeout", required_argument, 0, 't'}, - {"verbose", no_argument, 0, 'v'}, - {"remote-version", required_argument, 0, 'r'}, - {"remote-protocol", required_argument, 0, 'P'}, - {0, 0, 0, 0} - }; + static struct option longopts[] = {{"help", no_argument, 0, 'h'}, + {"version", no_argument, 0, 'V'}, + {"host", required_argument, 0, 'H'}, /* backward compatibility */ + {"hostname", required_argument, 0, 'H'}, + {"port", required_argument, 0, 'p'}, + {"use-ipv4", no_argument, 0, '4'}, + {"use-ipv6", no_argument, 0, '6'}, + {"timeout", required_argument, 0, 't'}, + {"verbose", no_argument, 0, 'v'}, + {"remote-version", required_argument, 0, 'r'}, + {"remote-protocol", required_argument, 0, 'P'}, + {0, 0, 0, 0}}; if (argc < 2) return ERROR; for (c = 1; c < argc; c++) - if (strcmp ("-to", argv[c]) == 0) - strcpy (argv[c], "-t"); + if (strcmp("-to", argv[c]) == 0) + strcpy(argv[c], "-t"); while (1) { - c = getopt_long (argc, argv, "+Vhv46t:r:H:p:P:", longopts, &option); + c = getopt_long(argc, argv, "+Vhv46t:r:H:p:P:", longopts, &option); if (c == -1 || c == EOF) break; switch (c) { - case '?': /* help */ - usage5 (); - case 'V': /* version */ - print_revision (progname, NP_VERSION); - exit (STATE_UNKNOWN); - case 'h': /* help */ - print_help (); - exit (STATE_UNKNOWN); - case 'v': /* verbose */ + case '?': /* help */ + usage5(); + case 'V': /* version */ + print_revision(progname, NP_VERSION); + exit(STATE_UNKNOWN); + case 'h': /* help */ + print_help(); + exit(STATE_UNKNOWN); + case 'v': /* verbose */ verbose = true; break; - case 't': /* timeout period */ - if (!is_integer (optarg)) - usage2 (_("Timeout interval must be a positive integer"), optarg); + case 't': /* timeout period */ + if (!is_integer(optarg)) + usage2(_("Timeout interval must be a positive integer"), optarg); else - socket_timeout = atoi (optarg); + socket_timeout = atoi(optarg); break; case '4': address_family = AF_INET; @@ -147,71 +138,63 @@ process_arguments (int argc, char **argv) #ifdef USE_IPV6 address_family = AF_INET6; #else - usage4 (_("IPv6 support not available")); + usage4(_("IPv6 support not available")); #endif break; - case 'r': /* remote version */ + case 'r': /* remote version */ remote_version = optarg; break; - case 'P': /* remote version */ + case 'P': /* remote version */ remote_protocol = optarg; break; - case 'H': /* host */ - if (!is_host (optarg)) - usage2 (_("Invalid hostname/address"), optarg); + case 'H': /* host */ + if (!is_host(optarg)) + usage2(_("Invalid hostname/address"), optarg); server_name = optarg; break; - case 'p': /* port */ - if (is_intpos (optarg)) { - port = atoi (optarg); - } - else { - usage2 (_("Port number must be a positive integer"), optarg); + case 'p': /* port */ + if (is_intpos(optarg)) { + port = atoi(optarg); + } else { + usage2(_("Port number must be a positive integer"), optarg); } } } c = optind; if (server_name == NULL && c < argc) { - if (is_host (argv[c])) { + if (is_host(argv[c])) { server_name = argv[c++]; } } if (port == -1 && c < argc) { - if (is_intpos (argv[c])) { - port = atoi (argv[c++]); - } - else { - print_usage (); - exit (STATE_UNKNOWN); + if (is_intpos(argv[c])) { + port = atoi(argv[c++]); + } else { + print_usage(); + exit(STATE_UNKNOWN); } } - return validate_arguments (); + return validate_arguments(); } -int -validate_arguments (void) -{ +int validate_arguments(void) { if (server_name == NULL) return ERROR; - if (port == -1) /* funky, but allows -p to override stray integer in args */ + if (port == -1) /* funky, but allows -p to override stray integer in args */ port = SSH_DFL_PORT; return OK; } - /************************************************************************ -* -* Try to connect to SSH server at specified server and port -* -*-----------------------------------------------------------------------*/ - + * + * Try to connect to SSH server at specified server and port + * + *-----------------------------------------------------------------------*/ -int -ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol) -{ +int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_protocol) { int sd; int result; int len = 0; @@ -225,41 +208,41 @@ ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol gettimeofday(&tv, NULL); - result = my_tcp_connect (haddr, hport, &sd); + result = my_tcp_connect(haddr, hport, &sd); if (result != STATE_OK) return result; - char *output = (char *) calloc (BUFF_SZ + 1, sizeof(char)); + char *output = (char *)calloc(BUFF_SZ + 1, sizeof(char)); ssize_t byte_offset = 0; - while ((version_control_string == NULL) && (recv_ret = recv(sd, output+byte_offset, BUFF_SZ - byte_offset, 0) > 0)) { + while ((version_control_string == NULL) && (recv_ret = recv(sd, output + byte_offset, BUFF_SZ - byte_offset, 0) > 0)) { if (strchr(output, '\n')) { /* we've got at least one full line, start parsing*/ byte_offset = 0; char *index = NULL; - while ((index = strchr(output+byte_offset, '\n')) != NULL) { + while ((index = strchr(output + byte_offset, '\n')) != NULL) { /*Partition the buffer so that this line is a separate string, * by replacing the newline with NUL*/ output[(index - output)] = '\0'; len = strlen(output + byte_offset); - if ((len >= 4) && (strncmp (output+byte_offset, "SSH-", 4) == 0)) { + if ((len >= 4) && (strncmp(output + byte_offset, "SSH-", 4) == 0)) { /*if the string starts with SSH-, this _should_ be a valid version control string*/ - version_control_string = output+byte_offset; - break; + version_control_string = output + byte_offset; + break; } /*the start of the next line (if one exists) will be after the current one (+ NUL)*/ byte_offset += (len + 1); } - if(version_control_string == NULL) { + if (version_control_string == NULL) { /* move unconsumed data to beginning of buffer, null rest */ - memmove((void *)output, (void *)output+byte_offset+1, BUFF_SZ - len+1); - memset(output+byte_offset+1, 0, BUFF_SZ-byte_offset+1); + memmove((void *)output, (void *)output + byte_offset + 1, BUFF_SZ - len + 1); + memset(output + byte_offset + 1, 0, BUFF_SZ - byte_offset + 1); /*start reading from end of current line chunk on next recv*/ byte_offset = strlen(output); @@ -285,9 +268,9 @@ ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol * SSH-protoversion-softwareversion SP comments CR LF" * - RFC 4253:4.2 */ - strip (version_control_string); + strip(version_control_string); if (verbose) - printf ("%s\n", version_control_string); + printf("%s\n", version_control_string); ssh_proto = version_control_string + 4; /* @@ -306,7 +289,7 @@ ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol * "1.x" (e.g., "1.5" or "1.3")." * - RFC 4253:5 */ - ssh_server = ssh_proto + strspn (ssh_proto, "0123456789.") + 1; /* (+1 for the '-' separating protoversion from softwareversion) */ + ssh_server = ssh_proto + strspn(ssh_proto, "0123456789.") + 1; /* (+1 for the '-' separating protoversion from softwareversion) */ /* If there's a space in the version string, whatever's after the space is a comment * (which is NOT part of the server name/version)*/ @@ -316,86 +299,71 @@ ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol } if (strlen(ssh_proto) == 0 || strlen(ssh_server) == 0) { printf(_("SSH CRITICAL - Invalid protocol version control string %s\n"), version_control_string); - exit (STATE_CRITICAL); + exit(STATE_CRITICAL); } - ssh_proto[strspn (ssh_proto, "0123456789. ")] = 0; + ssh_proto[strspn(ssh_proto, "0123456789. ")] = 0; - xasprintf (&buffer, "SSH-%s-check_ssh_%s\r\n", ssh_proto, rev_no); - send (sd, buffer, strlen (buffer), MSG_DONTWAIT); + xasprintf(&buffer, "SSH-%s-check_ssh_%s\r\n", ssh_proto, rev_no); + send(sd, buffer, strlen(buffer), MSG_DONTWAIT); if (verbose) - printf ("%s\n", buffer); + printf("%s\n", buffer); if (remote_version && strcmp(remote_version, ssh_server)) { - printf - (_("SSH CRITICAL - %s (protocol %s) version mismatch, expected '%s'\n"), - ssh_server, ssh_proto, remote_version); + printf(_("SSH CRITICAL - %s (protocol %s) version mismatch, expected '%s'\n"), ssh_server, ssh_proto, remote_version); close(sd); - exit (STATE_CRITICAL); + exit(STATE_CRITICAL); } double elapsed_time = (double)deltime(tv) / 1.0e6; if (remote_protocol && strcmp(remote_protocol, ssh_proto)) { - printf - (_("SSH CRITICAL - %s (protocol %s) protocol version mismatch, expected '%s' | %s\n"), - ssh_server, ssh_proto, remote_protocol, fperfdata("time", elapsed_time, "s", - false, 0, false, 0, true, 0, true, (int)socket_timeout)); + printf(_("SSH CRITICAL - %s (protocol %s) protocol version mismatch, expected '%s' | %s\n"), ssh_server, ssh_proto, remote_protocol, + fperfdata("time", elapsed_time, "s", false, 0, false, 0, true, 0, true, (int)socket_timeout)); close(sd); - exit (STATE_CRITICAL); + exit(STATE_CRITICAL); } - printf - (_("SSH OK - %s (protocol %s) | %s\n"), - ssh_server, ssh_proto, fperfdata("time", elapsed_time, "s", - false, 0, false, 0, true, 0, true, (int)socket_timeout)); + printf(_("SSH OK - %s (protocol %s) | %s\n"), ssh_server, ssh_proto, + fperfdata("time", elapsed_time, "s", false, 0, false, 0, true, 0, true, (int)socket_timeout)); close(sd); - exit (STATE_OK); + exit(STATE_OK); } - - -void -print_help (void) -{ +void print_help(void) { char *myport; - xasprintf (&myport, "%d", SSH_DFL_PORT); + xasprintf(&myport, "%d", SSH_DFL_PORT); - print_revision (progname, NP_VERSION); + print_revision(progname, NP_VERSION); - printf ("Copyright (c) 1999 Remi Paulmier \n"); - printf (COPYRIGHT, copyright, email); + printf("Copyright (c) 1999 Remi Paulmier \n"); + printf(COPYRIGHT, copyright, email); - printf ("%s\n", _("Try to connect to an SSH server at specified server and port")); + printf("%s\n", _("Try to connect to an SSH server at specified server and port")); - printf ("\n\n"); + printf("\n\n"); - print_usage (); + print_usage(); - printf (UT_HELP_VRSN); - printf (UT_EXTRA_OPTS); + printf(UT_HELP_VRSN); + printf(UT_EXTRA_OPTS); - printf (UT_HOST_PORT, 'p', myport); + printf(UT_HOST_PORT, 'p', myport); - printf (UT_IPv46); + printf(UT_IPv46); - printf (UT_CONN_TIMEOUT, DEFAULT_SOCKET_TIMEOUT); + printf(UT_CONN_TIMEOUT, DEFAULT_SOCKET_TIMEOUT); - printf (" %s\n", "-r, --remote-version=STRING"); - printf (" %s\n", _("Alert if string doesn't match expected server version (ex: OpenSSH_3.9p1)")); + printf(" %s\n", "-r, --remote-version=STRING"); + printf(" %s\n", _("Alert if string doesn't match expected server version (ex: OpenSSH_3.9p1)")); - printf (" %s\n", "-P, --remote-protocol=STRING"); - printf (" %s\n", _("Alert if protocol doesn't match expected protocol version (ex: 2.0)")); + printf(" %s\n", "-P, --remote-protocol=STRING"); + printf(" %s\n", _("Alert if protocol doesn't match expected protocol version (ex: 2.0)")); - printf (UT_VERBOSE); + printf(UT_VERBOSE); - printf (UT_SUPPORT); + printf(UT_SUPPORT); } - - -void -print_usage (void) -{ - printf ("%s\n", _("Usage:")); - printf ("%s [-4|-6] [-t ] [-r ] [-p ] \n", progname); +void print_usage(void) { + printf("%s\n", _("Usage:")); + printf("%s [-4|-6] [-t ] [-r ] [-p ] \n", progname); } - From git at monitoring-plugins.org Thu Oct 31 16:20:13 2024 From: git at monitoring-plugins.org (Lorenz Kästle) Date: Thu, 31 Oct 2024 16:20:13 +0100 (CET) Subject: [monitoring-plugins] check_ssh: do not export local variables Message-ID: <20241031152013.57A88200014F@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 78258c4cd0dff4197e0642e6eb39a15c97c88807 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 15:55:40 2024 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=78258c4 check_ssh: do not export local variables --- plugins/check_ssh.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/plugins/check_ssh.c b/plugins/check_ssh.c index 9f805db..b12cda1 100644 --- a/plugins/check_ssh.c +++ b/plugins/check_ssh.c @@ -43,18 +43,18 @@ const char *email = "devel at monitoring-plugins.org"; #define SSH_DFL_PORT 22 #define BUFF_SZ 256 -int port = -1; -char *server_name = NULL; -char *remote_version = NULL; -char *remote_protocol = NULL; -bool verbose = false; - -int process_arguments(int, char **); -int validate_arguments(void); -void print_help(void); +static int port = -1; +static char *server_name = NULL; +static char *remote_version = NULL; +static char *remote_protocol = NULL; +static bool verbose = false; + +static int process_arguments(int, char **); +static int validate_arguments(void); +static void print_help(void); void print_usage(void); -int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_protocol); +static int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_protocol); int main(int argc, char **argv) { int result = STATE_UNKNOWN; From git at monitoring-plugins.org Thu Oct 31 16:20:13 2024 From: git at monitoring-plugins.org (Lorenz Kästle) Date: Thu, 31 Oct 2024 16:20:13 +0100 (CET) Subject: [monitoring-plugins] check_ssh: linter + style fixes Message-ID: <20241031152013.671482000126@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 42ef1fa2fa37d7d684b624a4559c479e763457d0 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Date: Thu Oct 31 16:00:41 2024 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=42ef1fa check_ssh: linter + style fixes --- plugins/check_ssh.c | 76 ++++++++++++++++++++++++----------------------------- 1 file changed, 34 insertions(+), 42 deletions(-) diff --git a/plugins/check_ssh.c b/plugins/check_ssh.c index b12cda1..42a88cf 100644 --- a/plugins/check_ssh.c +++ b/plugins/check_ssh.c @@ -49,7 +49,7 @@ static char *remote_version = NULL; static char *remote_protocol = NULL; static bool verbose = false; -static int process_arguments(int, char **); +static int process_arguments(int /*argc*/, char ** /*argv*/); static int validate_arguments(void); static void print_help(void); void print_usage(void); @@ -57,8 +57,6 @@ void print_usage(void); static int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_protocol); int main(int argc, char **argv) { - int result = STATE_UNKNOWN; - setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); @@ -75,7 +73,7 @@ int main(int argc, char **argv) { alarm(socket_timeout); /* ssh_connect exits if error is found */ - result = ssh_connect(server_name, port, remote_version, remote_protocol); + int result = ssh_connect(server_name, port, remote_version, remote_protocol); alarm(0); @@ -84,9 +82,6 @@ int main(int argc, char **argv) { /* process command-line arguments */ int process_arguments(int argc, char **argv) { - int c; - - int option = 0; static struct option longopts[] = {{"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, {"host", required_argument, 0, 'H'}, /* backward compatibility */ @@ -103,17 +98,19 @@ int process_arguments(int argc, char **argv) { if (argc < 2) return ERROR; - for (c = 1; c < argc; c++) - if (strcmp("-to", argv[c]) == 0) - strcpy(argv[c], "-t"); + for (int i = 1; i < argc; i++) + if (strcmp("-to", argv[i]) == 0) + strcpy(argv[i], "-t"); - while (1) { - c = getopt_long(argc, argv, "+Vhv46t:r:H:p:P:", longopts, &option); + int option_char; + while (true) { + int option = 0; + option_char = getopt_long(argc, argv, "+Vhv46t:r:H:p:P:", longopts, &option); - if (c == -1 || c == EOF) + if (option_char == -1 || option_char == EOF) break; - switch (c) { + switch (option_char) { case '?': /* help */ usage5(); case 'V': /* version */ @@ -161,16 +158,16 @@ int process_arguments(int argc, char **argv) { } } - c = optind; - if (server_name == NULL && c < argc) { - if (is_host(argv[c])) { - server_name = argv[c++]; + option_char = optind; + if (server_name == NULL && option_char < argc) { + if (is_host(argv[option_char])) { + server_name = argv[option_char++]; } } - if (port == -1 && c < argc) { - if (is_intpos(argv[c])) { - port = atoi(argv[c++]); + if (port == -1 && option_char < argc) { + if (is_intpos(argv[option_char])) { + port = atoi(argv[option_char++]); } else { print_usage(); exit(STATE_UNKNOWN); @@ -195,34 +192,27 @@ int validate_arguments(void) { *-----------------------------------------------------------------------*/ int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_protocol) { - int sd; - int result; - int len = 0; - ssize_t recv_ret = 0; - char *version_control_string = NULL; - char *buffer = NULL; - char *ssh_proto = NULL; - char *ssh_server = NULL; - static char *rev_no = VERSION; struct timeval tv; - gettimeofday(&tv, NULL); - result = my_tcp_connect(haddr, hport, &sd); + int socket; + int result = my_tcp_connect(haddr, hport, &socket); if (result != STATE_OK) return result; char *output = (char *)calloc(BUFF_SZ + 1, sizeof(char)); - + char *buffer = NULL; + ssize_t recv_ret = 0; + char *version_control_string = NULL; ssize_t byte_offset = 0; - - while ((version_control_string == NULL) && (recv_ret = recv(sd, output + byte_offset, BUFF_SZ - byte_offset, 0) > 0)) { + while ((version_control_string == NULL) && (recv_ret = recv(socket, output + byte_offset, BUFF_SZ - byte_offset, 0) > 0)) { if (strchr(output, '\n')) { /* we've got at least one full line, start parsing*/ byte_offset = 0; char *index = NULL; + int len = 0; while ((index = strchr(output + byte_offset, '\n')) != NULL) { /*Partition the buffer so that this line is a separate string, * by replacing the newline with NUL*/ @@ -241,7 +231,7 @@ int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_proto if (version_control_string == NULL) { /* move unconsumed data to beginning of buffer, null rest */ - memmove((void *)output, (void *)output + byte_offset + 1, BUFF_SZ - len + 1); + memmove((void *)output, (void *)(output + byte_offset + 1), BUFF_SZ - len + 1); memset(output + byte_offset + 1, 0, BUFF_SZ - byte_offset + 1); /*start reading from end of current line chunk on next recv*/ @@ -271,7 +261,8 @@ int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_proto strip(version_control_string); if (verbose) printf("%s\n", version_control_string); - ssh_proto = version_control_string + 4; + + char *ssh_proto = version_control_string + 4; /* * We assume the protoversion is of the form Major.Minor, although @@ -289,7 +280,7 @@ int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_proto * "1.x" (e.g., "1.5" or "1.3")." * - RFC 4253:5 */ - ssh_server = ssh_proto + strspn(ssh_proto, "0123456789.") + 1; /* (+1 for the '-' separating protoversion from softwareversion) */ + char *ssh_server = ssh_proto + strspn(ssh_proto, "0123456789.") + 1; /* (+1 for the '-' separating protoversion from softwareversion) */ /* If there's a space in the version string, whatever's after the space is a comment * (which is NOT part of the server name/version)*/ @@ -303,14 +294,15 @@ int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_proto } ssh_proto[strspn(ssh_proto, "0123456789. ")] = 0; + static char *rev_no = VERSION; xasprintf(&buffer, "SSH-%s-check_ssh_%s\r\n", ssh_proto, rev_no); - send(sd, buffer, strlen(buffer), MSG_DONTWAIT); + send(socket, buffer, strlen(buffer), MSG_DONTWAIT); if (verbose) printf("%s\n", buffer); if (remote_version && strcmp(remote_version, ssh_server)) { printf(_("SSH CRITICAL - %s (protocol %s) version mismatch, expected '%s'\n"), ssh_server, ssh_proto, remote_version); - close(sd); + close(socket); exit(STATE_CRITICAL); } @@ -318,13 +310,13 @@ int ssh_connect(char *haddr, int hport, char *remote_version, char *remote_proto if (remote_protocol && strcmp(remote_protocol, ssh_proto)) { printf(_("SSH CRITICAL - %s (protocol %s) protocol version mismatch, expected '%s' | %s\n"), ssh_server, ssh_proto, remote_protocol, fperfdata("time", elapsed_time, "s", false, 0, false, 0, true, 0, true, (int)socket_timeout)); - close(sd); + close(socket); exit(STATE_CRITICAL); } printf(_("SSH OK - %s (protocol %s) | %s\n"), ssh_server, ssh_proto, fperfdata("time", elapsed_time, "s", false, 0, false, 0, true, 0, true, (int)socket_timeout)); - close(sd); + close(socket); exit(STATE_OK); } From git at monitoring-plugins.org Thu Oct 31 16:20:13 2024 From: git at monitoring-plugins.org (GitHub) Date: Thu, 31 Oct 2024 16:20:13 +0100 (CET) Subject: [monitoring-plugins] Merge pull request #2016 from ... Message-ID: <20241031152013.7EBC12000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: 6d1d1dac32841d5ca6ee51bb09b30a6c604b17e2 Author: Lorenz K?stle <12514511+RincewindsHat at users.noreply.github.com> Committer: GitHub Date: Thu Oct 31 16:11:44 2024 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=6d1d1da Merge pull request #2016 from RincewindsHat/fix/check_ssh-variable-stuff * fix a bug in check_ssh where a variable was used before being set * clang-format on check_ssh * do not export local variables from check_ssh * several style and linter fixes in check_ssh --- From git at monitoring-plugins.org Thu Oct 31 22:40:11 2024 From: git at monitoring-plugins.org (Sven Nierlein) Date: Thu, 31 Oct 2024 22:40:11 +0100 (CET) Subject: [monitoring-plugins] check_rpc: recognize capitalized "Program" in ... Message-ID: <20241031214011.D92072000124@orwell.monitoring-plugins.org> Module: monitoring-plugins Branch: master Commit: ad99acbb8b51835fddbbe67838a6ca7c5f114b18 Author: Sven Nierlein Date: Thu Oct 31 22:33:07 2024 +0100 URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=ad99acb check_rpc: recognize capitalized "Program" in rpcinfo output (fixes #1488) Signed-off-by: Sven Nierlein --- plugins-scripts/check_rpc.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins-scripts/check_rpc.pl b/plugins-scripts/check_rpc.pl index 8a56b9f..0968982 100755 --- a/plugins-scripts/check_rpc.pl +++ b/plugins-scripts/check_rpc.pl @@ -311,18 +311,18 @@ sub get_rpcinfo { printf "$line " if $verbose; chomp $line; - if ( $line =~ /program $prognum version ([0-9]*) ready and waiting/ ) { + if ( $line =~ /[Pp]rogram $prognum version ([0-9]*) ready and waiting/ ) { $response .= " version $1"; $state = 'OK' unless $state ne 'UNKNOWN'; print "1:$response \n" if $verbose; } - if ( $line =~ /program $prognum version ([0-9]*) is not available/ ) { + if ( $line =~ /[Pp]rogram $prognum version ([0-9]*) is not available/ ) { $response2 .= " version $1"; $state = 'CRITICAL'; print "2:$response2 \n" if $verbose; } - if ( $line =~ /program $prognum is not available/ ) { + if ( $line =~ /[Pp]rogram $prognum is not available/ ) { $response3 = ""; $response3 = "tcp" if $opt_t; $response3 = "udp" if $opt_u;