def build_response_from_query(self, query): """ Do the actual query on the target MySQL host. Returns a packet type of either OK, ERR, or a ResultSetText """ cursor = self.client_conn.cursor() num_rows = cursor.execute(query) results = cursor.fetchall() if not results or len(results) == 0: cursor.close() return OKPacket(self.session.client_capabilities, affected_rows=num_rows, last_insert_id=cursor.lastrowid, seq_id=1) col_types = cursor.description cursor.close() response = ResultSetText(self.session.client_capabilities, flags=self.session.server_status) for colname, coltype, col_max_len, \ field_len, field_max_len, _, _ in col_types: response.add_column(unicode(colname), coltype, field_len) for row in results: lvals = list(row) response.add_row(lvals) return response
def build_response_from_query(self, query): """ Do the actual query on the target MySQL host. Returns a packet type of either OK, ERR, or a ResultSetText """ cursor = self.client_conn.cursor() num_rows = cursor.execute(query) results = cursor.fetchall() if not results or len(results) == 0: cursor.close() return OKPacket(self.session.client_capabilities, affected_rows=num_rows, last_insert_id=cursor.lastrowid, seq_id=1 ) col_types = cursor.description cursor.close() response = ResultSetText(self.session.client_capabilities, flags=self.session.server_status) for colname, coltype, col_max_len, \ field_len, field_max_len, _, _ in col_types: response.add_column(unicode(colname), coltype, field_len) for row in results: lvals = list(row) response.add_row(lvals) return response
def cli_command_query(session_obj, pkt_data, code): query = pkt_data _LOG.debug('Got query command: %s' % query) if query.lower() == 'select @@version_comment limit 1': # intercept the MySQL client getting version info, replace with our own response = ResultSetText(session_obj.client_capabilities, flags=session_obj.server_status) col_name = u'@@version_comment' row_val = u'mysqlproxy-0.1' response.add_column(col_name, column_types.VAR_STRING, len(row_val)) response.add_row([row_val]) else: proxy = session_obj.proxy_obj plugin_continue, plugin_ret = proxy.plugins.call_hooks('com_query', query, session_obj) if plugin_continue: response = proxy.build_response_from_query(query) else: response = plugin_ret session_obj.send_payload(response) return True
def cli_command_query(session_obj, pkt_data, code): query = pkt_data _LOG.debug('Got query command: %s' % query) if query.lower() == 'select @@version_comment limit 1': # intercept the MySQL client getting version info, replace with our own response = ResultSetText(session_obj.client_capabilities, flags=session_obj.server_status) col_name = u'@@version_comment' row_val = u'mysqlproxy-0.1' response.add_column(col_name, column_types.VAR_STRING, len(row_val)) response.add_row([row_val]) else: proxy = session_obj.proxy_obj plugin_continue, plugin_ret = proxy.plugins.call_hooks( 'com_query', query, session_obj) if plugin_continue: response = proxy.build_response_from_query(query) else: response = plugin_ret session_obj.send_payload(response) return True