From ea71277094c1862438b0224482dc63282f48d7ea Mon Sep 17 00:00:00 2001 From: worker24h Date: Fri, 21 Jun 2019 19:15:34 +0800 Subject: [PATCH] Support mysql client 8.0 connection fe (#1349) for example: mysql --default-auth=mysql_native_password -P9030 -utest -ptest123456 -hA.B.C.D --- fe/src/main/java/org/apache/doris/mysql/MysqlCapability.java | 3 ++- .../java/org/apache/doris/mysql/MysqlHandshakePacket.java | 4 ++-- .../java/org/apache/doris/mysql/MysqlHandshakePacketTest.java | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/fe/src/main/java/org/apache/doris/mysql/MysqlCapability.java b/fe/src/main/java/org/apache/doris/mysql/MysqlCapability.java index 55f950a521..3b4cb409e7 100644 --- a/fe/src/main/java/org/apache/doris/mysql/MysqlCapability.java +++ b/fe/src/main/java/org/apache/doris/mysql/MysqlCapability.java @@ -73,7 +73,8 @@ public class MysqlCapability { private static final EnumSet FLAG_SET = EnumSet.allOf(Flag.class); private static final int DEFAULT_FLAGS = Flag.CLIENT_PROTOCOL_41.getFlagBit() - | Flag.CLIENT_CONNECT_WITH_DB.getFlagBit() | Flag.CLIENT_SECURE_CONNECTION.getFlagBit(); + | Flag.CLIENT_CONNECT_WITH_DB.getFlagBit() | Flag.CLIENT_SECURE_CONNECTION.getFlagBit() + | Flag.CLIENT_PLUGIN_AUTH.getFlagBit(); public static final MysqlCapability DEFAULT_CAPABILITY = new MysqlCapability(DEFAULT_FLAGS); private int flags; diff --git a/fe/src/main/java/org/apache/doris/mysql/MysqlHandshakePacket.java b/fe/src/main/java/org/apache/doris/mysql/MysqlHandshakePacket.java index d92a8a59d2..8c04a24144 100644 --- a/fe/src/main/java/org/apache/doris/mysql/MysqlHandshakePacket.java +++ b/fe/src/main/java/org/apache/doris/mysql/MysqlHandshakePacket.java @@ -30,7 +30,7 @@ public class MysqlHandshakePacket extends MysqlPacket { private static final MysqlCapability CAPABILITY = MysqlCapability.DEFAULT_CAPABILITY; // status flags not supported in palo private static final int STATUS_FLAGS = 0; - private static final String AUTH_PLUGIN_NAME = ""; + private static final String AUTH_PLUGIN_NAME = "mysql_native_password"; // connection id used in KILL statement. private int connectionId; @@ -63,7 +63,7 @@ public class MysqlHandshakePacket extends MysqlPacket { // upper 2 byte of capability flags serializer.writeInt2(capability.getFlags() >> 16); if (capability.isPluginAuth()) { - serializer.writeInt1(authPluginData.length); + serializer.writeInt1(authPluginData.length + 1); // 1 byte is '\0' } else { serializer.writeInt1(0); } diff --git a/fe/src/test/java/org/apache/doris/mysql/MysqlHandshakePacketTest.java b/fe/src/test/java/org/apache/doris/mysql/MysqlHandshakePacketTest.java index d503fbae57..034734c459 100644 --- a/fe/src/test/java/org/apache/doris/mysql/MysqlHandshakePacketTest.java +++ b/fe/src/test/java/org/apache/doris/mysql/MysqlHandshakePacketTest.java @@ -77,7 +77,7 @@ public class MysqlHandshakePacketTest { flags |= MysqlProto.readInt2(buffer) << 16; Assert.assertEquals(MysqlCapability.DEFAULT_CAPABILITY.getFlags(), flags); // length of plugin data - Assert.assertEquals(0, MysqlProto.readInt1(buffer)); + Assert.assertEquals(21, MysqlProto.readInt1(buffer)); // length of plugin data byte[] toCheck = new byte[10]; byte[] reserved = MysqlProto.readFixedString(buffer, 10); @@ -92,7 +92,7 @@ public class MysqlHandshakePacketTest { // one byte Assert.assertEquals(0, MysqlProto.readInt1(buffer)); - Assert.assertEquals(0, buffer.remaining()); + Assert.assertEquals(22, buffer.remaining()); } }