]> git.pld-linux.org Git - packages/mysql.git/blobdiff - mysql_syslog.patch
- rel 0.5 (consider this to be test before rel 1); update percona patches; drop obsol...
[packages/mysql.git] / mysql_syslog.patch
diff --git a/mysql_syslog.patch b/mysql_syslog.patch
new file mode 100644 (file)
index 0000000..6ed843a
--- /dev/null
@@ -0,0 +1,128 @@
+# name       : mysql-syslog.patch
+# introduced : 12
+# maintainer : Oleg
+#
+#!!! notice !!!
+# Any small change to this file in the main branch
+# should be done or reviewed by the maintainer!
+diff -ruN a/client/client_priv.h b/client/client_priv.h
+--- a/client/client_priv.h     2011-01-13 18:35:59.000000000 +0300
++++ b/client/client_priv.h     2011-01-13 18:38:21.000000000 +0300
+@@ -85,6 +85,9 @@
+   OPT_DEBUG_INFO, OPT_DEBUG_CHECK, OPT_COLUMN_TYPES, OPT_ERROR_LOG_FILE,
+   OPT_WRITE_BINLOG, OPT_DUMP_DATE,
+   OPT_INIT_COMMAND,
++#ifndef __WIN__
++  OPT_SYSLOG,
++#endif
+   OPT_PLUGIN_DIR,
+   OPT_DEFAULT_PLUGIN,
+   OPT_MAX_CLIENT_OPTION
+diff -ruN a/client/mysql.cc b/client/mysql.cc
+--- a/client/mysql.cc  2010-12-03 20:58:26.000000000 +0300
++++ b/client/mysql.cc  2011-01-13 18:38:21.000000000 +0300
+@@ -38,6 +38,11 @@
+ #include "my_readline.h"
+ #include <signal.h>
+ #include <violite.h>
++#ifndef __WIN__
++#include "syslog.h"
++#endif
++
++#define MAX_SYSLOG_MESSAGE 900
+ #if defined(USE_LIBEDIT_INTERFACE) && defined(HAVE_LOCALE_H)
+ #include <locale.h>
+@@ -140,7 +145,7 @@
+                default_pager_set= 0, opt_sigint_ignore= 0,
+                auto_vertical_output= 0,
+                show_warnings= 0, executing_query= 0, interrupted_query= 0,
+-               ignore_spaces= 0;
++               ignore_spaces= 0, opt_syslog= 0;
+ static my_bool debug_info_flag, debug_check_flag;
+ static my_bool column_types_flag;
+ static my_bool preserve_comments= 0;
+@@ -198,6 +203,7 @@
+ void tee_fputs(const char *s, FILE *file);
+ void tee_puts(const char *s, FILE *file);
+ void tee_putc(int c, FILE *file);
++void write_syslog(String *buffer);
+ static void tee_print_sized_data(const char *, unsigned int, unsigned int, bool);
+ /* The names of functions that actually do the manipulation. */
+ static int get_options(int argc,char **argv);
+@@ -1561,6 +1567,10 @@
+   {"show-warnings", OPT_SHOW_WARNINGS, "Show warnings after every statement.",
+     &show_warnings, &show_warnings, 0, GET_BOOL, NO_ARG,
+     0, 0, 0, 0, 0, 0},
++#ifndef __WIN__
++  {"syslog", OPT_SYSLOG, "Logs all queries to syslog", 0, 0, 0, GET_NO_ARG,
++   NO_ARG, 0, 0, 0, 0, 0, 0},
++#endif
+   {"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
+    (uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
+    GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+@@ -1665,6 +1675,11 @@
+                                     opt->name);
+ #endif
+     break;
++#ifndef __WIN__
++  case OPT_SYSLOG:
++    opt_syslog = 1;
++    break;
++#endif
+   case OPT_SERVER_ARG:
+ #ifdef EMBEDDED_LIBRARY
+     /*
+@@ -2014,6 +2029,40 @@
+   DBUG_RETURN((COMMANDS *) 0);
+ }
++void write_syslog(String *line){
++#ifndef __WIN__
++  uint length= line->length();
++  uint chunk_len= min(MAX_SYSLOG_MESSAGE, length);
++  char *ptr= line->c_ptr_safe();
++  char buff[MAX_SYSLOG_MESSAGE + 1];
++
++  for (;
++       length;
++       length-= chunk_len, ptr+= chunk_len, chunk_len= min(MAX_SYSLOG_MESSAGE,
++                                                           length))
++  {
++    char *str;
++    if (length == chunk_len)
++      str= ptr;                                 // last chunk => skip copy
++    else
++    {
++      memcpy(buff, ptr, chunk_len);
++      buff[chunk_len]= '\0';
++      str= buff;
++    }
++    syslog(LOG_INFO,
++           "SYSTEM_USER:'%s', MYSQL_USER:'%s', CONNECTION_ID:%lu, "
++           "DB_SERVER:'%s', DB:'%s', QUERY:'%s'",
++           getenv("SUDO_USER") ? getenv("SUDO_USER") : 
++           getenv("USER") ? getenv("USER") : "--",
++           current_user ? current_user : "--",
++           mysql_thread_id(&mysql),
++           current_host ? current_host : "--",
++           current_db ? current_db : "--",
++           str);
++  }
++#endif
++}
+ static bool add_line(String &buffer,char *line,char *in_string,
+                      bool *ml_comment, bool truncated)
+@@ -2986,6 +3035,11 @@
+     fix_history(buffer);
+   }
+ #endif
++#ifndef __WIN__
++  if (opt_syslog && buffer->length() && connect_flag == CLIENT_INTERACTIVE){
++    write_syslog(buffer);
++  }
++#endif
+   buffer->length(0);
This page took 0.040411 seconds and 4 git commands to generate.