[Pkg-nagios-devel] nagios-plugins/debian/patches 00list, 1.4, 1.5 12_check_mysql.c_mysql_options.dpatch, NONE, 1.1

seanius at haydn.debian.org seanius at haydn.debian.org
Fri Oct 7 20:25:38 UTC 2005


Update of /cvsroot/pkg-nagios/nagios-plugins/debian/patches
In directory haydn:/org/alioth.debian.org/chroot/home/users/seanius/tmp/cvs-serv8947/debian/patches

Modified Files:
	00list 
Added Files:
	12_check_mysql.c_mysql_options.dpatch 
Log Message:
see changelog


Index: 00list
===================================================================
RCS file: /cvsroot/pkg-nagios/nagios-plugins/debian/patches/00list,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- 00list	6 Oct 2005 12:48:37 -0000	1.4
+++ 00list	7 Oct 2005 20:25:36 -0000	1.5
@@ -1,4 +1,4 @@
-02_utilspm
 06_checkircd
 10_config.h_debiandefaults.dpatch
 11_check_ups.c_perfdata_fix.dpatch
+12_check_mysql.c_mysql_options.dpatch

--- NEW FILE: 12_check_mysql.c_mysql_options.dpatch ---
#! /bin/sh /usr/share/dpatch/dpatch-run
## 12_check_mysql.c_mysql_options.dpatch by  <seanius at localhost.localdomain>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: No description.

@DPATCH@
diff -urNad sid2~/plugins/check_mysql.c sid2/plugins/check_mysql.c
--- sid2~/plugins/check_mysql.c	2005-05-26 04:13:19.000000000 +0200
+++ sid2/plugins/check_mysql.c	2005-10-07 22:23:07.000000000 +0200
@@ -65,6 +65,8 @@
 	/* initialize mysql  */
 	mysql_init (&mysql);
 
+	mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"client");
+
 	/* establish a connection to the server and error checking */
 	if (!mysql_real_connect(&mysql,db_host,db_user,db_pass,db,db_port,NULL,0)) {
 		if (mysql_errno (&mysql) == CR_UNKNOWN_HOST)
diff -urNad sid2~/plugins/check_mysql.c.orig sid2/plugins/check_mysql.c.orig
--- sid2~/plugins/check_mysql.c.orig	1970-01-01 01:00:00.000000000 +0100
+++ sid2/plugins/check_mysql.c.orig	2005-05-26 04:13:19.000000000 +0200
@@ -0,0 +1,333 @@
+/******************************************************************************
+*
+* CHECK_MYSQL.C
+*
+* Program: Mysql plugin for Nagios
+* License: GPL
+* Copyright (c) 1999 Didi Rieder (adrieder at sbox.tu-graz.ac.at)
+*  portions (c) 2000 Karl DeBisschop (kdebisschop at users.sourceforge.net)
+* 
+* $Id: 12_check_mysql.c_mysql_options.dpatch,v 1.1 2005/10/07 20:25:36 seanius Exp $
+*
+* Description:
+*
+* This plugin is for testing a mysql server.
+******************************************************************************/
+
+const char *progname = "check_mysql";
+const char *revision = "$Revision: 1.1 $";
+const char *copyright = "1999-2004";
+const char *email = "nagiosplug-devel at lists.sourceforge.net";
+
+#define SLAVERESULTSIZE 40
+
+#include "common.h"
+#include "utils.h"
+#include "netutils.h"
+
+#include <mysql/mysql.h>
+#include <mysql/errmsg.h>
+
+char *db_user = NULL;
+char *db_host = NULL;
+char *db_pass = NULL;
+char *db = NULL;
+unsigned int db_port = MYSQL_PORT;
+int check_slave = 0;
+
+int process_arguments (int, char **);
+int validate_arguments (void);
+void print_help (void);
+void print_usage (void);
+
+
+
+int
+main (int argc, char **argv)
+{
+
+	MYSQL mysql;
+	MYSQL_RES *res;
+	MYSQL_ROW row;
+	
+	/* should be status */
+	
+	char *result = NULL;
+	char slaveresult[SLAVERESULTSIZE];
+
+	setlocale (LC_ALL, "");
+	bindtextdomain (PACKAGE, LOCALEDIR);
+	textdomain (PACKAGE);
+
+	if (process_arguments (argc, argv) == ERROR)
+		usage4 (_("Could not parse arguments"));
+
+	/* initialize mysql  */
+	mysql_init (&mysql);
+
+	/* establish a connection to the server and error checking */
+	if (!mysql_real_connect(&mysql,db_host,db_user,db_pass,db,db_port,NULL,0)) {
+		if (mysql_errno (&mysql) == CR_UNKNOWN_HOST)
+			die (STATE_WARNING, "%s\n", mysql_error (&mysql));
+		else if (mysql_errno (&mysql) == CR_VERSION_ERROR)
+			die (STATE_WARNING, "%s\n", mysql_error (&mysql));
+		else if (mysql_errno (&mysql) == CR_OUT_OF_MEMORY)
+			die (STATE_WARNING, "%s\n", mysql_error (&mysql));
+		else if (mysql_errno (&mysql) == CR_IPSOCK_ERROR)
+			die (STATE_WARNING, "%s\n", mysql_error (&mysql));
+		else if (mysql_errno (&mysql) == CR_SOCKET_CREATE_ERROR)
+			die (STATE_WARNING, "%s\n", mysql_error (&mysql));
+		else
+			die (STATE_CRITICAL, "%s\n", mysql_error (&mysql));
+	}
+
+	/* get the server stats */
+	result = strdup (mysql_stat (&mysql));
+
+	/* error checking once more */
+	if (mysql_error (&mysql)) {
+		if (mysql_errno (&mysql) == CR_SERVER_GONE_ERROR)
+			die (STATE_CRITICAL, "%s\n", mysql_error (&mysql));
+		else if (mysql_errno (&mysql) == CR_SERVER_LOST)
+			die (STATE_CRITICAL, "%s\n", mysql_error (&mysql));
+		else if (mysql_errno (&mysql) == CR_UNKNOWN_ERROR)
+			die (STATE_CRITICAL, "%s\n", mysql_error (&mysql));
+	}
+
+	if(check_slave) {
+		/* check the slave status */
+		if (mysql_query (&mysql, "show slave status") != 0) {
+			mysql_close (&mysql);
+			die (STATE_CRITICAL, _("slave query error: %s\n"), mysql_error (&mysql));
+		}
+
+		/* store the result */
+		if ( (res = mysql_store_result (&mysql)) == NULL) {
+			mysql_close (&mysql);
+			die (STATE_CRITICAL, _("slave store_result error: %s\n"), mysql_error (&mysql));
+		}
+
+		/* fetch the first row */
+		if ( (row = mysql_fetch_row (res)) == NULL) {
+			mysql_free_result (res);
+			mysql_close (&mysql);
+			die (STATE_CRITICAL, _("slave fetch row error: %s\n"), mysql_error (&mysql));
+		}
+
+		if (mysql_field_count (&mysql) == 12) {
+			/* mysql 3.23.x */
+			snprintf (slaveresult, SLAVERESULTSIZE, _("Slave running: %s"), row[6]);
+			if (strcmp (row[6], "Yes") != 0) {
+				mysql_free_result (res);
+				mysql_close (&mysql);
+				die (STATE_CRITICAL, "%s\n", slaveresult);
+			}
+
+		} else {
+			/* mysql 4.x.x */
+			int slave_io_field = -1 , slave_sql_field = -1, i, num_fields;
+			MYSQL_FIELD* fields;
+
+			num_fields = mysql_num_fields(res);
+			fields = mysql_fetch_fields(res);
+			for(i = 0; i < num_fields; i++)
+			{
+				if (0 == strcmp(fields[i].name, "Slave_IO_Running"))
+				{
+					slave_io_field = i;
+					continue;
+				}
+				if (0 == strcmp(fields[i].name, "Slave_SQL_Running"))
+				{
+					slave_sql_field = i;
+					continue;
+				}
+			}
+			if ((slave_io_field < 0) || (slave_sql_field < 0) || (num_fields == 0))
+			{
+				mysql_free_result (res);
+				mysql_close (&mysql);
+				die (STATE_CRITICAL, "Slave status unavailable\n");
+			}
+			 
+			snprintf (slaveresult, SLAVERESULTSIZE, "Slave IO: %s Slave SQL: %s", row[slave_io_field], row[slave_sql_field]);
+			if (strcmp (row[slave_io_field], "Yes") != 0 || strcmp (row[slave_sql_field], "Yes") != 0) {
+				mysql_free_result (res);
+				mysql_close (&mysql);
+				die (STATE_CRITICAL, "%s\n", slaveresult);
+			}
+		}
+
+		/* free the result */
+		mysql_free_result (res);
+	}
+
+	/* close the connection */
+	mysql_close (&mysql);
+
+	/* print out the result of stats */
+	if (check_slave) {
+		printf ("%s %s\n", result, slaveresult);
+	} else {
+		printf ("%s\n", result);
+	}
+
+	return STATE_OK;
+}
+
+
+/* process command-line arguments */
+int
+process_arguments (int argc, char **argv)
+{
+	int c;
+
+	int option = 0;
+	static struct option longopts[] = {
+		{"hostname", required_argument, 0, 'H'},
+		{"database", required_argument, 0, 'd'},
+		{"username", required_argument, 0, 'u'},
+		{"password", required_argument, 0, 'p'},
+		{"port", required_argument, 0, 'P'},
+		{"check-slave", no_argument, 0, 'S'},
+		{"verbose", no_argument, 0, 'v'},
+		{"version", no_argument, 0, 'V'},
+		{"help", no_argument, 0, 'h'},
+		{0, 0, 0, 0}
+	};
+
+	if (argc < 1)
+		return ERROR;
+
+	while (1) {
+		c = getopt_long (argc, argv, "hVSP:p:u:d:H:", longopts, &option);
+
+		if (c == -1 || c == EOF)
+			break;
+
+		switch (c) {
+		case 'H':									/* hostname */
+			if (is_host (optarg)) {
+				db_host = optarg;
+			}
+			else {
+				usage2 (_("Invalid hostname/address"), optarg);
+			}
+			break;
+		case 'd':									/* hostname */
+			db = optarg;
+			break;
+		case 'u':									/* username */
+			db_user = optarg;
+			break;
+		case 'p':									/* authentication information: password */
+			db_pass = optarg;
+			break;
+		case 'P':									/* critical time threshold */
+			db_port = atoi (optarg);
+			break;
+		case 'S':
+			check_slave = 1;							/* check-slave */
+			break;
+		case 'V':									/* version */
+			print_revision (progname, revision);
+			exit (STATE_OK);
+		case 'h':									/* help */
+			print_help ();
+			exit (STATE_OK);
+		case '?':									/* help */
+			usage2 (_("Unknown argument"), optarg);
+		}
+	}
+
+	c = optind;
+
+	while ( argc > c ) {
+
+		if (strlen(db_host) == 0)
+			if (is_host (argv[c])) {
+				db_host = argv[c++];
+			}
+			else {
+				usage2 (_("Invalid hostname/address"), optarg);
+			}
+		else if (strlen(db_user) == 0)
+			db_user = argv[c++];
+		else if (strlen(db_pass) == 0)
+			db_pass = argv[c++];
+		else if (strlen(db) == 0)
+			db = argv[c++];
+		else if (is_intnonneg (argv[c]))
+			db_port = atoi (argv[c++]);
+		else
+			break;
+	}
+
+	return validate_arguments ();
+}
+
+
+int
+validate_arguments (void)
+{
+	if (db_user == NULL)
+		db_user = strdup("");
+
+	if (db_host == NULL)
+		db_host = strdup("");
+
+	if (db_pass == NULL)
+		db_pass == strdup("");
+
+	if (db == NULL)
+		db = strdup("");
+
+	return OK;
+}
+
+
+void
+print_help (void)
+{
+	char *myport;
+	asprintf (&myport, "%d", MYSQL_PORT);
+
+	print_revision (progname, revision);
+
+	printf (_(COPYRIGHT), copyright, email);
+
+	printf (_("This program tests connections to a mysql server\n"));
+
+	print_usage ();
+
+	printf (_(UT_HELP_VRSN));
+
+	printf (_(UT_HOST_PORT), 'P', myport);
+
+	printf (_("\
+ -d, --database=STRING\n\
+   Check database with indicated name\n\
+ -u, --username=STRING\n\
+   Connect using the indicated username\n\
+ -p, --password=STRING\n\
+   Use the indicated password to authenticate the connection\n\
+   ==> IMPORTANT: THIS FORM OF AUTHENTICATION IS NOT SECURE!!! <==\n\
+   Your clear-text password will be visible as a process table entry\n\
+ -S, --check-slave\n\
+   Check if the slave thread is running properly.\n"));
+
+	printf (_("\n\
+There are no required arguments. By default, the local database with\n\
+a server listening on MySQL standard port %d will be checked\n"), MYSQL_PORT);
+
+	printf (_(UT_SUPPORT));
+}
+
+
+void
+print_usage (void)
+{
+	printf ("\
+Usage: %s [-d database] [-H host] [-P port] [-u user] [-p password] [-S]\n",
+	        progname);
+}




More information about the Pkg-nagios-devel mailing list