Quellcode durchsuchen

Add an option to specify character set in check_mysql_query

madlohe vor 6 Jahren
Ursprung
Commit
52c55bfda0
1 geänderte Dateien mit 15 neuen und 2 gelöschten Zeilen
  1. 15 2
      plugins/check_mysql_query.c

+ 15 - 2
plugins/check_mysql_query.c

@@ -45,6 +45,7 @@ char *db_user = NULL;
 char *db_host = NULL;
 char *db_socket = NULL;
 char *db_pass = NULL;
+char *db_char_set = NULL;
 char *db = NULL;
 char *opt_file = NULL;
 char *opt_group = NULL;
@@ -109,6 +110,12 @@ main (int argc, char **argv)
 			die (STATE_CRITICAL, "QUERY %s: %s\n", _("CRITICAL"), mysql_error (&mysql));
 	}
 
+	if (db_char_set != NULL && mysql_set_character_set(&mysql, db_char_set)) { // mysql_set_character_set() returns nonzero on error
+		error = strdup(mysql_error(&mysql));
+		mysql_close(&mysql);
+		die (STATE_CRITICAL, "QUERY %s: %s - %s\n", _("CRITICAL"), _("Could not set character set"), error);
+	}
+
 	if (mysql_query (&mysql, sql_query) != 0) {
 		error = strdup(mysql_error(&mysql));
 		mysql_close (&mysql);
@@ -189,6 +196,7 @@ process_arguments (int argc, char **argv)
 		{"database", required_argument, 0, 'd'},
 		{"username", required_argument, 0, 'u'},
 		{"password", required_argument, 0, 'p'},
+		{"character-set", required_argument, 0, 'a'},
 		{"file", required_argument, 0, 'f'},
 		{"group", required_argument, 0, 'g'},
 		{"port", required_argument, 0, 'P'},
@@ -205,12 +213,15 @@ process_arguments (int argc, char **argv)
 		return ERROR;
 
 	while (1) {
-		c = getopt_long (argc, argv, "hvVP:p:u:d:H:s:q:w:c:f:g:", longopts, &option);
+		c = getopt_long (argc, argv, "hvVP:p:u:d:H:s:q:w:c:f:g:a:", longopts, &option);
 
 		if (c == -1 || c == EOF)
 			break;
 
 		switch (c) {
+		case 'a':                                   /* character-set */
+			db_char_set = optarg;
+			break;
 		case 'H':									/* hostname */
 			if (is_host (optarg)) {
 				db_host = optarg;
@@ -322,6 +333,8 @@ print_help (void)
 	printf ("    %s\n", _("Use the specified socket (has no effect if -H is used)"));
 	printf (" -d, --database=STRING\n");
 	printf ("    %s\n", _("Database to check"));
+	printf (" -a, --character-set=STRING\n");
+	printf ("    %s\n", _("Use a specific character set when querying, e.g. latin1 or utf8"));
 	printf (" %s\n", "-f, --file=STRING");
 	printf ("    %s\n", _("Read from the specified client options file"));
 	printf (" %s\n", "-g, --group=STRING");
@@ -351,5 +364,5 @@ print_usage (void)
 {
   printf ("%s\n", _("Usage:"));
   printf (" %s -q SQL_query [-w warn] [-c crit] [-H host] [-P port] [-s socket]\n",progname);
-  printf ("       [-d database] [-u user] [-p password] [-f optfile] [-g group]\n");
+  printf ("       [-d database] [-u user] [-p password] [-f optfile] [-g group] [-a character-set]\n");
 }