Merge lp:~sergei.glushchenko/percona-server/5.6-ps-bug1313696 into lp:percona-server/5.6

Proposed by Sergei Glushchenko
Status: Merged
Approved by: Alexey Kopytov
Approved revision: no longer in the source branch.
Merged at revision: 592
Proposed branch: lp:~sergei.glushchenko/percona-server/5.6-ps-bug1313696
Merge into: lp:percona-server/5.6
Diff against target: 204 lines (+47/-109)
3 files modified
mysql-test/include/audit_log_events.inc (+1/-0)
mysql-test/r/audit_log.result (+6/-0)
plugin/audit_log/audit_log.c (+40/-109)
To merge this branch: bzr merge lp:~sergei.glushchenko/percona-server/5.6-ps-bug1313696
Reviewer Review Type Date Requested Status
Alexey Kopytov (community) Approve
Review via email: mp+217635@code.launchpad.net

Description of the change

To post a comment you must log in.
Revision history for this message
Sergei Glushchenko (sergei.glushchenko) wrote :

repushed. 5.6 GCA contains audit log plugin. no conflicts

Revision history for this message
Alexey Kopytov (akopytov) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'mysql-test/include/audit_log_events.inc'
--- mysql-test/include/audit_log_events.inc 2014-04-21 12:07:45 +0000
+++ mysql-test/include/audit_log_events.inc 2014-05-14 14:46:36 +0000
@@ -50,4 +50,5 @@
50connection default;50connection default;
51create user 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';51create user 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
52drop user 'jeffrey'@'localhost';52drop user 'jeffrey'@'localhost';
53select '&;&&&""""<><<>>>>';
53disconnect con1;54disconnect con1;
5455
=== modified file 'mysql-test/r/audit_log.result'
--- mysql-test/r/audit_log.result 2014-04-21 12:07:45 +0000
+++ mysql-test/r/audit_log.result 2014-05-14 14:46:36 +0000
@@ -68,6 +68,9 @@
68drop database sa_db;68drop database sa_db;
69create user 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';69create user 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
70drop user 'jeffrey'@'localhost';70drop user 'jeffrey'@'localhost';
71select '&;&&&""""<><<>>>>';
72&;&&&""""<><<>>>>
73&;&&&""""<><<>>>>
71CREATE TABLE t1 (c1 INT, c2 CHAR(20));74CREATE TABLE t1 (c1 INT, c2 CHAR(20));
72CREATE TABLE t1 (c1 INT, c2 CHAR(20));75CREATE TABLE t1 (c1 INT, c2 CHAR(20));
73ERROR 42S01: Table 't1' already exists76ERROR 42S01: Table 't1' already exists
@@ -138,3 +141,6 @@
138drop database sa_db;141drop database sa_db;
139create user 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';142create user 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
140drop user 'jeffrey'@'localhost';143drop user 'jeffrey'@'localhost';
144select '&;&&&""""<><<>>>>';
145&;&&&""""<><<>>>>
146&;&&&""""<><<>>>>
141147
=== modified file 'plugin/audit_log/audit_log.c'
--- plugin/audit_log/audit_log.c 2014-04-21 12:07:45 +0000
+++ plugin/audit_log/audit_log.c 2014-05-14 14:46:36 +0000
@@ -120,85 +120,43 @@
120 const char* base = in;120 const char* base = in;
121 char* outend = out + *outlen;121 char* outend = out + *outlen;
122 const char* inend;122 const char* inend;
123123 size_t i;
124 inend = in + (*inlen);124 my_bool replaced;
125125
126 while ((in < inend) && (out < outend))126 const struct {
127 {127 char symbol;
128 if (*in == '<')128 size_t length;
129 {129 const char *replace;
130 if (outend - out < 4)130 } escape[] = {
131 break;131 { '<', 4, "&lt;" },
132 *out++ = '&';132 { '>', 4, "&gt;" },
133 *out++ = 'l';133 { '&', 5, "&amp;" },
134 *out++ = 't';134 { '\r', 5, "&#13;" },
135 *out++ = ';';135 { '"', 6, "&quot;" },
136 }136 };
137 else if (*in == '>')137
138 {138 inend = in + (*inlen);
139 if (outend - out < 4)139
140 break;140 while ((in < inend) && (out < outend))
141 *out++ = '&';141 {
142 *out++ = 'g';142 replaced= FALSE;
143 *out++ = 't';143 for (i= 0; i < array_elements(escape); i++)
144 *out++ = ';';144 {
145 }145 if (*in == escape[i].symbol)
146 else if (*in == '&')146 {
147 {147 if ((outend - out) < (int) escape[i].length)
148 if (outend - out < 5)148 goto end_of_buffer;
149 break;149 memcpy(out, escape[i].replace, escape[i].length);
150 *out++ = '&';150 out += escape[i].length;
151 *out++ = 'a';151 replaced= TRUE;
152 *out++ = 'm';152 break;
153 *out++ = 'p';153 }
154 *out++ = ';';154 }
155 }155 if (!replaced)
156 else if (*in == '\r')156 *out++ = *in;
157 {157 ++in;
158 if (outend - out < 5)158 }
159 break;159end_of_buffer:
160 *out++ = '&';
161 *out++ = '#';
162 *out++ = '1';
163 *out++ = '3';
164 *out++ = ';';
165 }
166 else
167 {
168 *out++ = *in;
169 }
170 ++in;
171 }
172 *outlen = out - outstart;
173 *inlen = in - base;
174}
175
176
177static
178void attr_escape(const char *in, size_t *inlen, char* out, size_t *outlen)
179{
180 char* outstart = out;
181 const char* base = in;
182 char* outend = out + *outlen;
183 const char* inend;
184
185 inend = in + (*inlen);
186
187 while ((in < inend) && (out < outend))
188 {
189 if (*in == '"')
190 {
191 if (outend - out < 2)
192 break;
193 *out++ = '\\';
194 *out++ = '"';
195 }
196 else
197 {
198 *out++ = *in;
199 }
200 ++in;
201 }
202 *outlen = out - outstart;160 *outlen = out - outstart;
203 *inlen = in - base;161 *inlen = in - base;
204}162}
@@ -222,33 +180,6 @@
222}180}
223181
224static182static
225char *attr_escape_string(const char *in, size_t inlen,
226 char *out, size_t outlen)
227{
228 if (in != NULL)
229 {
230 --outlen;
231 attr_escape(in, &inlen, out, &outlen);
232 out[outlen]= 0;
233 }
234 else
235 {
236 out= 0;
237 }
238 return out;
239}
240
241static
242char *escape_string(const char *in, size_t inlen,
243 char *out, size_t outlen)
244{
245 typedef char *(*escape_func_t)(const char *, size_t, char *, size_t);
246 const escape_func_t escape_func[] = { attr_escape_string, xml_escape_string };
247
248 return escape_func[audit_log_format](in, inlen, out, outlen);
249}
250
251static
252void logger_write_safe(LOGGER_HANDLE *log, const char *buffer, size_t size)183void logger_write_safe(LOGGER_HANDLE *log, const char *buffer, size_t size)
253{184{
254 static int write_error= 0;185 static int write_error= 0;
@@ -412,9 +343,9 @@
412 make_timestamp(timestamp, sizeof(timestamp), t),343 make_timestamp(timestamp, sizeof(timestamp), t),
413 event->general_sql_command.str,344 event->general_sql_command.str,
414 event->general_thread_id, status,345 event->general_thread_id, status,
415 escape_string(event->general_query,346 xml_escape_string(event->general_query,
416 event->general_query_length,347 event->general_query_length,
417 query, sizeof(query)),348 query, sizeof(query)),
418 event->general_user,349 event->general_user,
419 event->general_host.str,350 event->general_host.str,
420 event->general_external_user.str,351 event->general_external_user.str,

Subscribers

People subscribed via source and target branches