diff options
author | Jan Wagner <waja@cyconet.org> | 2013-10-01 00:47:08 +0200 |
---|---|---|
committer | Jan Wagner <waja@cyconet.org> | 2014-07-28 22:13:02 +0200 |
commit | 2e8d440e73ac2b1875db5ecaf6df510fdcf6eb7a (patch) | |
tree | e6dc017c83e20719b740064aa7aebf49c75dee0b | |
parent | 98a670bf773b28868ff2d1c41daee4e7d497db4b (diff) | |
download | monitoring-plugins-2e8d440.tar.gz |
check_mysql: ignore authentication failure
This patch allows checking if MySQL server is running without providing valid
username and password. Similar to check_ssh plugin it returns MySQL server
version string and protocol number.
Example:
check_mysql -n -H aaa.bbb.ccc.ddd
MySQL OK - Version: 5.0.51a-24+lenny5 (protocol 10)
This is useful for monitoring servers where one does not have administrator
privileges or does not want to grant any privileges for the monitoring station.
To enable this functionality new option --ignore-auth (-n) is added to
check_mysql plugin.
Thanks to Julius Kriukas
Closes #1020
Closes #1178
-rw-r--r-- | THANKS.in | 1 | ||||
-rw-r--r-- | plugins/check_mysql.c | 22 |
2 files changed, 21 insertions, 2 deletions
@@ -325,3 +325,4 @@ Andy Brist | |||
325 | Mikael Falkvidd | 325 | Mikael Falkvidd |
326 | Patric Wust | 326 | Patric Wust |
327 | Neil Prockter | 327 | Neil Prockter |
328 | Julius Kriukas | ||
diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c index 4f09e5f8..216626bc 100644 --- a/plugins/check_mysql.c +++ b/plugins/check_mysql.c | |||
@@ -42,6 +42,7 @@ const char *email = "devel@monitoring-plugins.org"; | |||
42 | #include "netutils.h" | 42 | #include "netutils.h" |
43 | 43 | ||
44 | #include <mysql.h> | 44 | #include <mysql.h> |
45 | #include <mysqld_error.h> | ||
45 | #include <errmsg.h> | 46 | #include <errmsg.h> |
46 | 47 | ||
47 | char *db_user = NULL; | 48 | char *db_user = NULL; |
@@ -59,6 +60,7 @@ char *opt_file = NULL; | |||
59 | char *opt_group = NULL; | 60 | char *opt_group = NULL; |
60 | unsigned int db_port = MYSQL_PORT; | 61 | unsigned int db_port = MYSQL_PORT; |
61 | int check_slave = 0, warn_sec = 0, crit_sec = 0; | 62 | int check_slave = 0, warn_sec = 0, crit_sec = 0; |
63 | int ignore_auth = 0; | ||
62 | int verbose = 0; | 64 | int verbose = 0; |
63 | 65 | ||
64 | static double warning_time = 0; | 66 | static double warning_time = 0; |
@@ -136,7 +138,16 @@ main (int argc, char **argv) | |||
136 | mysql_ssl_set(&mysql,key,cert,ca_cert,ca_dir,ciphers); | 138 | mysql_ssl_set(&mysql,key,cert,ca_cert,ca_dir,ciphers); |
137 | /* establish a connection to the server and error checking */ | 139 | /* establish a connection to the server and error checking */ |
138 | if (!mysql_real_connect(&mysql,db_host,db_user,db_pass,db,db_port,db_socket,0)) { | 140 | if (!mysql_real_connect(&mysql,db_host,db_user,db_pass,db,db_port,db_socket,0)) { |
139 | if (mysql_errno (&mysql) == CR_UNKNOWN_HOST) | 141 | if (ignore_auth && mysql_errno (&mysql) == ER_ACCESS_DENIED_ERROR) |
142 | { | ||
143 | printf("MySQL OK - Version: %s (protocol %d)\n", | ||
144 | mysql_get_server_info(&mysql), | ||
145 | mysql_get_proto_info(&mysql) | ||
146 | ); | ||
147 | mysql_close (&mysql); | ||
148 | return STATE_OK; | ||
149 | } | ||
150 | else if (mysql_errno (&mysql) == CR_UNKNOWN_HOST) | ||
140 | die (STATE_WARNING, "%s\n", mysql_error (&mysql)); | 151 | die (STATE_WARNING, "%s\n", mysql_error (&mysql)); |
141 | else if (mysql_errno (&mysql) == CR_VERSION_ERROR) | 152 | else if (mysql_errno (&mysql) == CR_VERSION_ERROR) |
142 | die (STATE_WARNING, "%s\n", mysql_error (&mysql)); | 153 | die (STATE_WARNING, "%s\n", mysql_error (&mysql)); |
@@ -341,6 +352,7 @@ process_arguments (int argc, char **argv) | |||
341 | {"critical", required_argument, 0, 'c'}, | 352 | {"critical", required_argument, 0, 'c'}, |
342 | {"warning", required_argument, 0, 'w'}, | 353 | {"warning", required_argument, 0, 'w'}, |
343 | {"check-slave", no_argument, 0, 'S'}, | 354 | {"check-slave", no_argument, 0, 'S'}, |
355 | {"ignore-auth", no_argument, 0, 'n'}, | ||
344 | {"verbose", no_argument, 0, 'v'}, | 356 | {"verbose", no_argument, 0, 'v'}, |
345 | {"version", no_argument, 0, 'V'}, | 357 | {"version", no_argument, 0, 'V'}, |
346 | {"help", no_argument, 0, 'h'}, | 358 | {"help", no_argument, 0, 'h'}, |
@@ -357,7 +369,7 @@ process_arguments (int argc, char **argv) | |||
357 | return ERROR; | 369 | return ERROR; |
358 | 370 | ||
359 | while (1) { | 371 | while (1) { |
360 | c = getopt_long (argc, argv, "hlvVSP:p:u:d:H:s:c:w:a:k:C:D:L:f:g:", longopts, &option); | 372 | c = getopt_long (argc, argv, "hlvVnSP:p:u:d:H:s:c:w:a:k:C:D:L:f:g:", longopts, &option); |
361 | 373 | ||
362 | if (c == -1 || c == EOF) | 374 | if (c == -1 || c == EOF) |
363 | break; | 375 | break; |
@@ -419,6 +431,9 @@ process_arguments (int argc, char **argv) | |||
419 | case 'S': | 431 | case 'S': |
420 | check_slave = 1; /* check-slave */ | 432 | check_slave = 1; /* check-slave */ |
421 | break; | 433 | break; |
434 | case 'n': | ||
435 | ignore_auth = 1; /* ignore-auth */ | ||
436 | break; | ||
422 | case 'w': | 437 | case 'w': |
423 | warning = optarg; | 438 | warning = optarg; |
424 | warning_time = strtod (warning, NULL); | 439 | warning_time = strtod (warning, NULL); |
@@ -506,6 +521,9 @@ print_help (void) | |||
506 | printf (UT_EXTRA_OPTS); | 521 | printf (UT_EXTRA_OPTS); |
507 | 522 | ||
508 | printf (UT_HOST_PORT, 'P', myport); | 523 | printf (UT_HOST_PORT, 'P', myport); |
524 | printf (" %s\n", "-n, --ignore-auth"); | ||
525 | printf (" %s\n", _("Ignore authentication failure and check for mysql connectivity only")); | ||
526 | |||
509 | printf (" %s\n", "-s, --socket=STRING"); | 527 | printf (" %s\n", "-s, --socket=STRING"); |
510 | printf (" %s\n", _("Use the specified socket (has no effect if -H is used)")); | 528 | printf (" %s\n", _("Use the specified socket (has no effect if -H is used)")); |
511 | 529 | ||