MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / send_client_reply_packet

Function send_client_reply_packet

sql-common/client.c:2574–2783  ·  view source on GitHub ↗

sends a client authentication packet (second packet in the 3-way handshake) Packet format (when the server is 4.0 or earlier): Bytes Content ----- ---- 2 client capabilities 3 max packet size n user name, \0-terminated 9 scramble_323, \0-terminated Packet format (when the server is 4.1 or newer): Bytes

Source from the content-addressed store, hash-verified

2572 @retval 1 error
2573*/
2574static int send_client_reply_packet(MCPVIO_EXT *mpvio,
2575 const uchar *data, int data_len)
2576{
2577 MYSQL *mysql= mpvio->mysql;
2578 NET *net= &mysql->net;
2579 char *buff, *end;
2580 size_t buff_size;
2581 size_t connect_attrs_len=
2582 (mysql->server_capabilities & CLIENT_CONNECT_ATTRS &&
2583 mysql->options.extension) ?
2584 mysql->options.extension->connection_attributes_length : 0;
2585
2586 DBUG_ASSERT(connect_attrs_len < MAX_CONNECTION_ATTR_STORAGE_LENGTH);
2587
2588
2589 /*
2590 see end= buff+32 below, fixed size of the packet is 32 bytes.
2591 +9 because data is a length encoded binary where meta data size is max 9.
2592 */
2593 buff_size= 33 + USERNAME_LENGTH + data_len + 9 + NAME_LEN + NAME_LEN + connect_attrs_len + 9;
2594 buff= my_alloca(buff_size);
2595
2596 mysql->client_flag|= mysql->options.client_flag;
2597 mysql->client_flag|= CLIENT_CAPABILITIES;
2598
2599 if (mysql->client_flag & CLIENT_MULTI_STATEMENTS)
2600 mysql->client_flag|= CLIENT_MULTI_RESULTS;
2601
2602#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
2603 if (mysql->options.ssl_key || mysql->options.ssl_cert ||
2604 mysql->options.ssl_ca || mysql->options.ssl_capath ||
2605 mysql->options.ssl_cipher ||
2606 (mysql->options.extension && mysql->options.extension->ssl_crl) ||
2607 (mysql->options.extension && mysql->options.extension->ssl_crlpath))
2608 mysql->options.use_ssl= 1;
2609 if (mysql->options.use_ssl)
2610 mysql->client_flag|= CLIENT_SSL;
2611#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY*/
2612 if (mpvio->db)
2613 mysql->client_flag|= CLIENT_CONNECT_WITH_DB;
2614 else
2615 mysql->client_flag&= ~CLIENT_CONNECT_WITH_DB;
2616
2617 /* Remove options that server doesn't support */
2618 mysql->client_flag= mysql->client_flag &
2619 (~(CLIENT_COMPRESS | CLIENT_SSL | CLIENT_PROTOCOL_41)
2620 | mysql->server_capabilities);
2621
2622#ifndef HAVE_COMPRESS
2623 mysql->client_flag&= ~CLIENT_COMPRESS;
2624#endif
2625
2626 if (mysql->client_flag & CLIENT_PROTOCOL_41)
2627 {
2628 /* 4.1 server and 4.1 client has a 32 byte option flag */
2629 int4store(buff,mysql->client_flag);
2630 int4store(buff+4, net->max_packet_size);
2631 buff[8]= (char) mysql->charset->number;

Callers 1

Calls 9

set_mysql_extended_errorFunction · 0.85
ERR_error_string_nFunction · 0.85
ssl_verify_server_certFunction · 0.85
strmakeFunction · 0.85
strendFunction · 0.85
write_stringFunction · 0.85
my_strdupFunction · 0.85

Tested by

no test coverage detected