Monitoring Plugins standards
Find a file
Richard Laager 661ecff45c check_ssh: Fix buffer overflow
A buffer overflow was occurring when the server responded with:
Exceeded MaxStartups\r\n

glibc would then abort() with the following output:
*** buffer overflow detected ***: terminated

It was the memset() that was overflowing the buffer.  But the memmove()
needed fixing too.

First off, there was an off-by-one error in both the memmove() and
memset().  byte_offset was already set to the start of the data _past_
the newline (i.e. len + 1).  For the memmove(), incrementing that by 1
again lost the first character of the additional output.  For the
memset(), this causes a buffer overflow.

Second, the memset() has multiple issues.  The comment claims that it
was NULing (sic "null") the "rest".  However, it has no idea how long
the "rest" is, at this point.  It was NULing BUFF_SZ - byte_offset + 1.
After fixing the off-by-one / buffer overflow, it would be NULing
BUFF_SZ - byte_offset.  But that doesn't make any sense.  The length of
the first line has no relation to the length of the second line.

For a quick-and-dirty test, add something like this just inside the
while loop:
memcpy(output,
  "Exceeded MaxStartups\r\nnext blah1 blah2 blah3 blah4\0",
  sizeof("Exceeded MaxStartups\r\nnext blah1 blah2 blah3 blah4\0"));

And, after the memmove(), add:
  printf("output='%s'\n", output);

If you fix the memset() buffer overflow, it will output:
output='ext blah1 blah2 blah3 '

As you can see, the first character is lost.

If you then fix the memmove(), it will output:
output='next blah1 blah2 blah3'

Note that this is still losing the "blah4".

After moving the memset() after byte_offset is set to the new strlen()
of output, then it works correctly:
output='next blah1 blah2 blah3 blah4'

Signed-off-by: Richard Laager <rlaager@wiktel.com>
2025-07-11 18:43:59 -05:00
.github Do not explicitely disable IPv6 in the CI 2025-05-08 09:04:20 +02:00
build-aux Fix a lot of typos reported by codespell 2023-04-14 18:35:00 +00:00
config_test Fix a lot of typos reported by codespell 2023-04-14 18:35:00 +00:00
doc Adapted the coding guidelines slightly + typo 2024-10-15 09:33:34 +02:00
gl Sync with the latest Gnulib code (d4ec02b3cc) 2024-10-31 16:27:12 +01:00
lib Merge branch 'master' into refactor/check_load 2025-07-06 22:49:04 +02:00
m4 Fix some more typos 2023-10-03 22:22:51 +02:00
perlmods update perl module to 0.39 2015-04-11 13:08:45 +02:00
pkg Replace egrep with grep -E (#1791) 2022-10-07 11:44:47 +02:00
plugins check_ssh: Fix buffer overflow 2025-07-11 18:43:59 -05:00
plugins-root Reapply "check_dhcp: reduce number of tests for weird reasons" 2025-06-23 13:21:25 +02:00
plugins-scripts Fix wrong exit codes 2025-02-19 19:44:17 +01:00
tap tap: clang-format 2024-10-31 15:24:53 +01:00
tools Remove tinderbox related stuff 2025-02-25 18:01:51 +01:00
.clang-format clang-format: reduce line lenght to 100 char, it's easier to read 2025-04-27 17:50:59 +02:00
.gitignore Migrate disk tests from lib, tool 2025-03-18 15:57:44 +01:00
ABOUT-NLS Updating gettext files from coreutils-6.9. mkinstalldirs needs to be in 2007-05-12 00:49:26 +00:00
acinclude.m4 Removing CVS/SVN tags and replacing with git-based versioning 2008-11-23 05:38:47 +00:00
ACKNOWLEDGEMENTS Fix a lot of typos reported by codespell 2023-04-14 18:35:00 +00:00
AUTHORS release v2.3.2 2022-10-19 14:47:57 +02:00
autogen.sh Removing CVS/SVN tags and replacing with git-based versioning 2008-11-23 05:38:47 +00:00
CODING Adapt the hints to coding style in the CODING file 2024-10-15 09:05:00 +02:00
config.rpath make dist failing without config.rpath in top level. File copied 2007-01-30 09:56:47 +00:00
configure.ac Merge branch 'master' into refactor/check_procs 2025-06-28 09:53:59 +02:00
COPYING Update the COPYING file to the GPLv3 2010-07-27 23:06:23 +02:00
FAQ FAQ: Remove outdated (RPM/DEB-related) questions 2014-10-15 13:56:13 +02:00
Makefile.am Remove tinderbox related stuff 2025-02-25 18:01:51 +01:00
mkinstalldirs Adding more required files from gettext 2006-05-19 21:30:59 +00:00
NEWS Fix double lines in NEWS 2024-07-24 23:14:03 +02:00
NP-VERSION-GEN Update version to new git version 2024-07-24 22:25:37 +02:00
NPTest.pm Just use eval instead of Try::Tiny in tests 2025-03-07 19:29:24 +01:00
README Update README 2020-10-02 01:48:46 +05:30
README.md Add symlink: README.md -> README 2013-09-20 17:00:40 +02:00
REQUIREMENTS Remove check_nwstat 2025-03-12 13:50:39 +01:00
SUPPORT fix typo in SUPPORT 2024-11-28 22:52:41 +01:00
test.pl.in Use "C" locale when running test suite 2014-07-21 22:20:57 +02:00
THANKS.in Adding new contributors to THANKS.in 2024-07-23 19:26:58 +00:00

Monitoring Plugins

  • For instructions on installing these plugins for use with your monitoring system, see below. In addition, generic instructions for the GNU toolchain can be found in the INSTALL file.

  • For major changes between releases, read the NEWS file.

  • For information on detailed changes that have been made or plugins that have been added, read the ChangeLog file.

  • Some plugins require that you have additional programs or libraries installed on your system before they can be used. Plugins that are dependent on other programs/libraries that are missing are usually not compiled. Read the REQUIREMENTS file for more information.

  • Individual plugins are self-documenting. All plugins that comply with the basic guidelines for development will provide detailed help when invoked with the -h or --help options.

You can check the latest plugins at:

Send an email to help@monitoring-plugins.org for assistance. Please include the OS type and version that you are using. Also, run the plugin with the -vvv option and provide the resulting version information. Of course, there may be additional diagnostic information required as well. Use good judgment.

Send an email to devel@monitoring-plugins.org for developer discussions.

For patch submissions and bug reports, please use the appropriate resources at:

Installation Instructions

  1. If you are using the Git tree, you will need m4, gettext, automake, and autoconf. To start out, run:

    ./tools/setup
    

    For more detail, see the developer guidelines at https://www.monitoring-plugins.org/doc/guidelines.html.

  2. Run the configure script to initialize variables and create a Makefile, etc.

    ./configure --prefix=BASEDIRECTORY --with-cgiurl=SOMEURL
    

    Replace BASEDIRECTORY with the path of the directory under which your monitoring system is installed (default is /usr/local), and replace SOMEURL with the path used to access the monitoring system CGIs with a web browser (default is /nagios/cgi-bin).

  3. Compile the plugins with the following command:

    make
    
  4. Install the compiled plugins and plugin scripts with the following command:

    make install
    

    The installation procedure will attempt to place the plugins in a libexec/ subdirectory in the base directory you specified with the --prefix argument to the configure script.

  5. There are some plugins that require setuid. If you run make install as a non-root user, they will not be installed. To install, switch to root and run:

    make install-root
    

That's it! If you have any problems or questions, feel free to send an email to help@monitoring-plugins.org.

License Notice

You can redistribute and/or modify this software 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; with the additional exemption that compiling, linking, and/or using OpenSSL is allowed.

This software 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 COPYING file for the complete text of the GNU General Public License, version 3.