aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-12-07 13:02:10 +0100
committerShauren <shauren.trinity@gmail.com>2019-12-07 13:14:16 +0100
commitb990a79fd8643159ebe5c302c564c9ef52b2b5c6 (patch)
treec9c0ccbe1111f8180f12b4f8d23f550404253a9f
parent60763fc5e2d7bb32150d8e03bfd0fb3e7cb890f3 (diff)
Core/Realms: Move build info (and auth seeds) to database
(cherry picked from commit 61f2eed3531ebfd2585ab05add31ae9e97598233)
-rw-r--r--sql/base/auth_database.sql119
-rw-r--r--sql/updates/auth/3.3.5/2019_12_07_00_auth.sql106
-rw-r--r--src/server/authserver/Authentication/AuthCodes.cpp61
-rw-r--r--src/server/authserver/Authentication/AuthCodes.h12
-rw-r--r--src/server/authserver/Server/AuthSession.cpp65
-rw-r--r--src/server/shared/Realm/RealmList.cpp42
-rw-r--r--src/server/shared/Realm/RealmList.h16
7 files changed, 321 insertions, 100 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index 6c710464b68..25b16ce36e7 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -164,6 +164,122 @@ LOCK TABLES `autobroadcast` WRITE;
UNLOCK TABLES;
--
+-- Table structure for table `build_info`
+--
+
+DROP TABLE IF EXISTS `build_info`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8mb4 */;
+CREATE TABLE `build_info` (
+ `build` int(11) NOT NULL,
+ `majorVersion` int(11) DEFAULT NULL,
+ `minorVersion` int(11) DEFAULT NULL,
+ `bugfixVersion` int(11) DEFAULT NULL,
+ `hotfixVersion` char(3) DEFAULT NULL,
+ `winAuthSeed` varchar(32) DEFAULT NULL,
+ `win64AuthSeed` varchar(32) DEFAULT NULL,
+ `mac64AuthSeed` varchar(32) DEFAULT NULL,
+ `winChecksumSeed` varchar(40) DEFAULT NULL,
+ `macChecksumSeed` varchar(40) DEFAULT NULL,
+ PRIMARY KEY (`build`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `build_info`
+--
+
+LOCK TABLES `build_info` WRITE;
+/*!40000 ALTER TABLE `build_info` DISABLE KEYS */;
+INSERT INTO `build_info` VALUES
+(5875,1,12,1,NULL,NULL,NULL,NULL,'95EDB27C7823B363CBDDAB56A392E7CB73FCCA20','8D173CC381961EEBABF336F5E6675B101BB513E5'),
+(6005,1,12,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(6141,1,12,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(8606,2,4,3,NULL,NULL,NULL,NULL,'319AFAA3F2559682F9FF658BE01456255F456FB1','D8B0ECFE534BC1131E19BAD1D4C0E813EEE4994F'),
+(9947,3,1,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(10505,3,2,2,'a',NULL,NULL,NULL,NULL,NULL),
+(11159,3,3,0,'a',NULL,NULL,NULL,NULL,NULL),
+(11403,3,3,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(11723,3,3,3,'a',NULL,NULL,NULL,NULL,NULL),
+(12340,3,3,5,'a',NULL,NULL,NULL,'CDCBBD5188315E6B4D19449D492DBCFAF156A347','B706D13FF2F4018839729461E3F8A0E2B5FDC034'),
+(13623,4,0,6,'a',NULL,NULL,NULL,NULL,NULL),
+(13930,3,3,5,'a',NULL,NULL,NULL,NULL,NULL),
+(14545,4,2,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(15595,4,3,4,NULL,NULL,NULL,NULL,NULL,NULL),
+(19116,6,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(19243,6,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(19342,6,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(19702,6,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(19802,6,1,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(19831,6,1,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(19865,6,1,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(20182,6,2,0,'a',NULL,NULL,NULL,NULL,NULL),
+(20201,6,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(20216,6,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(20253,6,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(20338,6,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(20444,6,2,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(20490,6,2,2,'a',NULL,NULL,NULL,NULL,NULL),
+(20574,6,2,2,'a',NULL,NULL,NULL,NULL,NULL),
+(20726,6,2,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(20779,6,2,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(20886,6,2,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(21355,6,2,4,NULL,NULL,NULL,NULL,NULL,NULL),
+(21463,6,2,4,NULL,NULL,NULL,NULL,NULL,NULL),
+(21742,6,2,4,NULL,NULL,NULL,NULL,NULL,NULL),
+(22248,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22293,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22345,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22410,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22423,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22498,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22522,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22566,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22594,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22624,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22747,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22810,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22900,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(22908,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(22950,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(22995,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(22996,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(23171,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(23222,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(23360,7,1,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(23420,7,1,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(23911,7,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(23937,7,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(24015,7,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(24330,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24367,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24415,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24430,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24461,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24742,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(25549,7,3,2,NULL,'FE594FC35E7F9AFF86D99D8A364AB297','1252624ED8CBD6FAC7D33F5D67A535F3','66FC5E09B8706126795F140308C8C1D8',NULL,NULL),
+(25996,7,3,5,NULL,'23C59C5963CBEF5B728D13A50878DFCB','C7FF932D6A2174A3D538CA7212136D2B','210B970149D6F56CAC9BADF2AAC91E8E',NULL,NULL),
+(26124,7,3,5,NULL,'F8C05AE372DECA1D6C81DA7A8D1C5C39','46DF06D0147BA67BA49AF553435E093F','C9CA997AB8EDE1C65465CB2920869C4E',NULL,NULL),
+(26365,7,3,5,NULL,'2AAC82C80E829E2CA902D70CFA1A833A','59A53F307288454B419B13E694DF503C','DBE7F860276D6B400AAA86B35D51A417',NULL,NULL),
+(26654,7,3,5,NULL,'FAC2D693E702B9EC9F750F17245696D8','A752640E8B99FE5B57C1320BC492895A','9234C1BD5E9687ADBD19F764F2E0E811',NULL,NULL),
+(26822,7,3,5,NULL,'283E8D77ECF7060BE6347BE4EB99C7C7','2B05F6D746C0C6CC7EF79450B309E595','91003668C245D14ECD8DF094E065E06B',NULL,NULL),
+(26899,7,3,5,NULL,'F462CD2FE4EA3EADF875308FDBB18C99','3551EF0028B51E92170559BD25644B03','8368EFC2021329110A16339D298200D4',NULL,NULL),
+(26972,7,3,5,NULL,'797ECC19662DCBD5090A4481173F1D26','6E212DEF6A0124A3D9AD07F5E322F7AE','341CFEFE3D72ACA9A4407DC535DED66A',NULL,NULL),
+(28153,8,0,1,NULL,NULL,'DD626517CC6D31932B479934CCDC0ABF',NULL,NULL,NULL),
+(30706,8,1,5,NULL,NULL,'BB6D9866FE4A19A568015198783003FC',NULL,NULL,NULL),
+(30993,8,2,0,NULL,NULL,'2BAD61655ABC2FC3D04893B536403A91',NULL,NULL,NULL),
+(31229,8,2,0,NULL,NULL,'8A46F23670309F2AAE85C9A47276382B',NULL,NULL,NULL),
+(31429,8,2,0,NULL,NULL,'7795A507AF9DC3525EFF724FEE17E70C',NULL,NULL,NULL),
+(31478,8,2,0,NULL,NULL,'7973A8D54BDB8B798D9297B096E771EF',NULL,NULL,NULL),
+(32305,8,2,5,NULL,NULL,'21F5A6FC7AD89FBF411FDA8B8738186A',NULL,NULL,NULL),
+(32494,8,2,5,NULL,NULL,'58984ACE04919401835C61309A848F8A',NULL,NULL,NULL),
+(32580,8,2,5,NULL,NULL,'87C2FAA0D7931BF016299025C0DDCA14',NULL,NULL,NULL),
+(32638,8,2,5,NULL,NULL,'5D07ECE7D4A867DDDE615DAD22B76D4E',NULL,NULL,NULL),
+(32722,8,2,5,NULL,NULL,'1A09BE1D38A122586B4931BECCEAD4AA',NULL,NULL,NULL);
+/*!40000 ALTER TABLE `build_info` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
-- Table structure for table `ip_banned`
--
@@ -1836,7 +1952,8 @@ INSERT INTO `updates` VALUES
('2019_08_16_00_auth.sql','99CF9C250EFBBD703DF0A2D1BDEB1E46D1063EE9','ARCHIVED','2019-08-16 06:25:07',0),
('2019_09_15_00_auth.sql','2EEE632B5A365D45747B7BB25DE5239FB5B1A1BD','ARCHIVED','2019-09-15 09:21:36',0),
('2019_10_18_00_auth.sql','DFEDA33D7B9A108773B6AD8DE3016C6B12BD3832','ARCHIVED','2019-10-18 08:37:37',0),
-('2019_11_16_00_auth.sql','A7CC55B9329F0DDFE91ADC31BFABD0D934ED0A5E','ARCHIVED','2019-11-16 12:06:06',0);
+('2019_11_16_00_auth.sql','A7CC55B9329F0DDFE91ADC31BFABD0D934ED0A5E','ARCHIVED','2019-11-16 12:06:06',0),
+('2019_12_07_00_auth.sql','F354DA31D5B300609C6AE8A25667CA4DE0A7349F','RELEASED','2019-12-07 12:57:23',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/auth/3.3.5/2019_12_07_00_auth.sql b/sql/updates/auth/3.3.5/2019_12_07_00_auth.sql
new file mode 100644
index 00000000000..1cbe9f22482
--- /dev/null
+++ b/sql/updates/auth/3.3.5/2019_12_07_00_auth.sql
@@ -0,0 +1,106 @@
+--
+-- Table structure for table `build_info`
+--
+DROP TABLE IF EXISTS `build_info`;
+CREATE TABLE `build_info` (
+ `build` int(11) NOT NULL,
+ `majorVersion` int(11) DEFAULT NULL,
+ `minorVersion` int(11) DEFAULT NULL,
+ `bugfixVersion` int(11) DEFAULT NULL,
+ `hotfixVersion` char(3) DEFAULT NULL,
+ `winAuthSeed` varchar(32) DEFAULT NULL,
+ `win64AuthSeed` varchar(32) DEFAULT NULL,
+ `mac64AuthSeed` varchar(32) DEFAULT NULL,
+ `winChecksumSeed` varchar(40) DEFAULT NULL,
+ `macChecksumSeed` varchar(40) DEFAULT NULL,
+ PRIMARY KEY (`build`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+--
+-- Dumping data for table `build_info`
+--
+INSERT INTO `build_info` VALUES
+(5875,1,12,1,NULL,NULL,NULL,NULL,'95EDB27C7823B363CBDDAB56A392E7CB73FCCA20','8D173CC381961EEBABF336F5E6675B101BB513E5'),
+(6005,1,12,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(6141,1,12,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(8606,2,4,3,NULL,NULL,NULL,NULL,'319AFAA3F2559682F9FF658BE01456255F456FB1','D8B0ECFE534BC1131E19BAD1D4C0E813EEE4994F'),
+(9947,3,1,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(10505,3,2,2,'a',NULL,NULL,NULL,NULL,NULL),
+(11159,3,3,0,'a',NULL,NULL,NULL,NULL,NULL),
+(11403,3,3,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(11723,3,3,3,'a',NULL,NULL,NULL,NULL,NULL),
+(12340,3,3,5,'a',NULL,NULL,NULL,'CDCBBD5188315E6B4D19449D492DBCFAF156A347','B706D13FF2F4018839729461E3F8A0E2B5FDC034'),
+(13623,4,0,6,'a',NULL,NULL,NULL,NULL,NULL),
+(13930,3,3,5,'a',NULL,NULL,NULL,NULL,NULL),
+(14545,4,2,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(15595,4,3,4,NULL,NULL,NULL,NULL,NULL,NULL),
+(19116,6,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(19243,6,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(19342,6,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(19702,6,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(19802,6,1,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(19831,6,1,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(19865,6,1,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(20182,6,2,0,'a',NULL,NULL,NULL,NULL,NULL),
+(20201,6,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(20216,6,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(20253,6,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(20338,6,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(20444,6,2,2,NULL,NULL,NULL,NULL,NULL,NULL),
+(20490,6,2,2,'a',NULL,NULL,NULL,NULL,NULL),
+(20574,6,2,2,'a',NULL,NULL,NULL,NULL,NULL),
+(20726,6,2,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(20779,6,2,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(20886,6,2,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(21355,6,2,4,NULL,NULL,NULL,NULL,NULL,NULL),
+(21463,6,2,4,NULL,NULL,NULL,NULL,NULL,NULL),
+(21742,6,2,4,NULL,NULL,NULL,NULL,NULL,NULL),
+(22248,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22293,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22345,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22410,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22423,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22498,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22522,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22566,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22594,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22624,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22747,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22810,7,0,3,NULL,NULL,NULL,NULL,NULL,NULL),
+(22900,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(22908,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(22950,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(22995,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(22996,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(23171,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(23222,7,1,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(23360,7,1,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(23420,7,1,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(23911,7,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(23937,7,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(24015,7,2,0,NULL,NULL,NULL,NULL,NULL,NULL),
+(24330,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24367,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24415,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24430,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24461,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(24742,7,2,5,NULL,NULL,NULL,NULL,NULL,NULL),
+(25549,7,3,2,NULL,'FE594FC35E7F9AFF86D99D8A364AB297','1252624ED8CBD6FAC7D33F5D67A535F3','66FC5E09B8706126795F140308C8C1D8',NULL,NULL),
+(25996,7,3,5,NULL,'23C59C5963CBEF5B728D13A50878DFCB','C7FF932D6A2174A3D538CA7212136D2B','210B970149D6F56CAC9BADF2AAC91E8E',NULL,NULL),
+(26124,7,3,5,NULL,'F8C05AE372DECA1D6C81DA7A8D1C5C39','46DF06D0147BA67BA49AF553435E093F','C9CA997AB8EDE1C65465CB2920869C4E',NULL,NULL),
+(26365,7,3,5,NULL,'2AAC82C80E829E2CA902D70CFA1A833A','59A53F307288454B419B13E694DF503C','DBE7F860276D6B400AAA86B35D51A417',NULL,NULL),
+(26654,7,3,5,NULL,'FAC2D693E702B9EC9F750F17245696D8','A752640E8B99FE5B57C1320BC492895A','9234C1BD5E9687ADBD19F764F2E0E811',NULL,NULL),
+(26822,7,3,5,NULL,'283E8D77ECF7060BE6347BE4EB99C7C7','2B05F6D746C0C6CC7EF79450B309E595','91003668C245D14ECD8DF094E065E06B',NULL,NULL),
+(26899,7,3,5,NULL,'F462CD2FE4EA3EADF875308FDBB18C99','3551EF0028B51E92170559BD25644B03','8368EFC2021329110A16339D298200D4',NULL,NULL),
+(26972,7,3,5,NULL,'797ECC19662DCBD5090A4481173F1D26','6E212DEF6A0124A3D9AD07F5E322F7AE','341CFEFE3D72ACA9A4407DC535DED66A',NULL,NULL),
+(28153,8,0,1,NULL,NULL,'DD626517CC6D31932B479934CCDC0ABF',NULL,NULL,NULL),
+(30706,8,1,5,NULL,NULL,'BB6D9866FE4A19A568015198783003FC',NULL,NULL,NULL),
+(30993,8,2,0,NULL,NULL,'2BAD61655ABC2FC3D04893B536403A91',NULL,NULL,NULL),
+(31229,8,2,0,NULL,NULL,'8A46F23670309F2AAE85C9A47276382B',NULL,NULL,NULL),
+(31429,8,2,0,NULL,NULL,'7795A507AF9DC3525EFF724FEE17E70C',NULL,NULL,NULL),
+(31478,8,2,0,NULL,NULL,'7973A8D54BDB8B798D9297B096E771EF',NULL,NULL,NULL),
+(32305,8,2,5,NULL,NULL,'21F5A6FC7AD89FBF411FDA8B8738186A',NULL,NULL,NULL),
+(32494,8,2,5,NULL,NULL,'58984ACE04919401835C61309A848F8A',NULL,NULL,NULL),
+(32580,8,2,5,NULL,NULL,'87C2FAA0D7931BF016299025C0DDCA14',NULL,NULL,NULL),
+(32638,8,2,5,NULL,NULL,'5D07ECE7D4A867DDDE615DAD22B76D4E',NULL,NULL,NULL),
+(32722,8,2,5,NULL,NULL,'1A09BE1D38A122586B4931BECCEAD4AA',NULL,NULL,NULL);
diff --git a/src/server/authserver/Authentication/AuthCodes.cpp b/src/server/authserver/Authentication/AuthCodes.cpp
index 982cf1cb465..a3877c26ce2 100644
--- a/src/server/authserver/Authentication/AuthCodes.cpp
+++ b/src/server/authserver/Authentication/AuthCodes.cpp
@@ -16,75 +16,24 @@
*/
#include "AuthCodes.h"
+#include "RealmList.h"
namespace AuthHelper
{
- static RealmBuildInfo const PostBcAcceptedClientBuilds[] =
- {
- {15595, 4, 3, 4, ' ', {{}}, {{}}},
- {14545, 4, 2, 2, ' ', {{}}, {{}}},
- {13623, 4, 0, 6, 'a', {{}}, {{}}},
- {13930, 3, 3, 5, 'a', {{}}, {{}}}, // 3.3.5a China Mainland build
- {12340, 3, 3, 5, 'a',
- {{ 0xCD, 0xCB, 0xBD, 0x51, 0x88, 0x31, 0x5E, 0x6B, 0x4D, 0x19, 0x44, 0x9D, 0x49, 0x2D, 0xBC, 0xFA, 0xF1, 0x56, 0xA3, 0x47 }},
- {{ 0xB7, 0x06, 0xD1, 0x3F, 0xF2, 0xF4, 0x01, 0x88, 0x39, 0x72, 0x94, 0x61, 0xE3, 0xF8, 0xA0, 0xE2, 0xB5, 0xFD, 0xC0, 0x34 }},
- },
- {11723, 3, 3, 3, 'a', {{}}, {{}}},
- {11403, 3, 3, 2, ' ', {{}}, {{}}},
- {11159, 3, 3, 0, 'a', {{}}, {{}}},
- {10505, 3, 2, 2, 'a', {{}}, {{}}},
- {9947, 3, 1, 3, ' ', {{}}, {{}}},
- {8606, 2, 4, 3, ' ',
- {{ 0x31, 0x9A, 0xFA, 0xA3, 0xF2, 0x55, 0x96, 0x82, 0xF9, 0xFF, 0x65, 0x8B, 0xE0, 0x14, 0x56, 0x25, 0x5F, 0x45, 0x6F, 0xB1 }},
- {{}},
- },
- {0, 0, 0, 0, ' ', {{}}, {{}}} // terminator
- };
-
- static RealmBuildInfo const PreBcAcceptedClientBuilds[] =
- {
- {6141, 1, 12, 3, ' ', {{}}, {{}}},
- {6005, 1, 12, 2, ' ', {{}}, {{}}},
- {5875, 1, 12, 1, ' ',
- {{}},
- {{ 0x8D, 0x17, 0x3C, 0xC3, 0x81, 0x96, 0x1E, 0xEB, 0xAB, 0xF3, 0x36, 0xF5, 0xE6, 0x67, 0x5B, 0x10, 0x1B, 0xB5, 0x13, 0xE5 }},
- },
- {0, 0, 0, 0, ' ', {{}}, {{}}} // terminator
- };
+ constexpr static uint32 MAX_PRE_BC_CLIENT_BUILD = 6141;
bool IsPreBCAcceptedClientBuild(int build)
{
- for (int i = 0; PreBcAcceptedClientBuilds[i].Build; ++i)
- if (PreBcAcceptedClientBuilds[i].Build == build)
- return true;
-
- return false;
+ return build <= MAX_PRE_BC_CLIENT_BUILD && sRealmList->GetBuildInfo(build);
}
bool IsPostBCAcceptedClientBuild(int build)
{
- for (int i = 0; PostBcAcceptedClientBuilds[i].Build; ++i)
- if (PostBcAcceptedClientBuilds[i].Build == build)
- return true;
-
- return false;
+ return build > MAX_PRE_BC_CLIENT_BUILD && sRealmList->GetBuildInfo(build);
}
bool IsAcceptedClientBuild(int build)
{
- return (IsPostBCAcceptedClientBuild(build) || IsPreBCAcceptedClientBuild(build));
- }
-
- RealmBuildInfo const* GetBuildInfo(int build)
- {
- for (int i = 0; PostBcAcceptedClientBuilds[i].Build; ++i)
- if (PostBcAcceptedClientBuilds[i].Build == build)
- return &PostBcAcceptedClientBuilds[i];
-
- for (int i = 0; PreBcAcceptedClientBuilds[i].Build; ++i)
- if (PreBcAcceptedClientBuilds[i].Build == build)
- return &PreBcAcceptedClientBuilds[i];
-
- return nullptr;
+ return sRealmList->GetBuildInfo(build) != nullptr;
}
}
diff --git a/src/server/authserver/Authentication/AuthCodes.h b/src/server/authserver/Authentication/AuthCodes.h
index c734a87968f..1441e0e16f3 100644
--- a/src/server/authserver/Authentication/AuthCodes.h
+++ b/src/server/authserver/Authentication/AuthCodes.h
@@ -80,20 +80,10 @@ enum ExpansionFlags
NO_VALID_EXP_FLAG = 0x0
};
-struct RealmBuildInfo
-{
- int Build;
- int MajorVersion;
- int MinorVersion;
- int BugfixVersion;
- int HotfixVersion;
- std::array<uint8, 20> WindowsHash;
- std::array<uint8, 20> MacHash;
-};
+struct RealmBuildInfo;
namespace AuthHelper
{
- RealmBuildInfo const* GetBuildInfo(int build);
bool IsAcceptedClientBuild(int build);
bool IsPostBCAcceptedClientBuild(int build);
bool IsPreBCAcceptedClientBuild(int build);
diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp
index 5c0628334fd..3dd5bd11e30 100644
--- a/src/server/authserver/Server/AuthSession.cpp
+++ b/src/server/authserver/Server/AuthSession.cpp
@@ -430,41 +430,42 @@ void AuthSession::LogonChallengeCallback(PreparedQueryResult result)
if (AuthHelper::IsAcceptedClientBuild(_build))
{
pkt << uint8(WOW_SUCCESS);
- _status = STATUS_LOGON_PROOF;
- }
- else
- pkt << uint8(WOW_FAIL_VERSION_INVALID);
- // B may be calculated < 32B so we force minimal length to 32B
- pkt.append(B.AsByteArray(32).get(), 32); // 32 bytes
- pkt << uint8(1);
- pkt.append(g.AsByteArray(1).get(), 1);
- pkt << uint8(32);
- pkt.append(N.AsByteArray(32).get(), 32);
- pkt.append(s.AsByteArray(int32(BufferSizes::SRP_6_S)).get(), size_t(BufferSizes::SRP_6_S)); // 32 bytes
- pkt.append(VersionChallenge.data(), VersionChallenge.size());
- pkt << uint8(securityFlags); // security flags (0x0...0x04)
+ // B may be calculated < 32B so we force minimal length to 32B
+ pkt.append(B.AsByteArray(32).get(), 32); // 32 bytes
+ pkt << uint8(1);
+ pkt.append(g.AsByteArray(1).get(), 1);
+ pkt << uint8(32);
+ pkt.append(N.AsByteArray(32).get(), 32);
+ pkt.append(s.AsByteArray(int32(BufferSizes::SRP_6_S)).get(), size_t(BufferSizes::SRP_6_S)); // 32 bytes
+ pkt.append(VersionChallenge.data(), VersionChallenge.size());
+ pkt << uint8(securityFlags); // security flags (0x0...0x04)
+
+ if (securityFlags & 0x01) // PIN input
+ {
+ pkt << uint32(0);
+ pkt << uint64(0) << uint64(0); // 16 bytes hash?
+ }
- if (securityFlags & 0x01) // PIN input
- {
- pkt << uint32(0);
- pkt << uint64(0) << uint64(0); // 16 bytes hash?
- }
+ if (securityFlags & 0x02) // Matrix input
+ {
+ pkt << uint8(0);
+ pkt << uint8(0);
+ pkt << uint8(0);
+ pkt << uint8(0);
+ pkt << uint64(0);
+ }
- if (securityFlags & 0x02) // Matrix input
- {
- pkt << uint8(0);
- pkt << uint8(0);
- pkt << uint8(0);
- pkt << uint8(0);
- pkt << uint64(0);
- }
+ if (securityFlags & 0x04) // Security token input
+ pkt << uint8(1);
- if (securityFlags & 0x04) // Security token input
- pkt << uint8(1);
+ TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] account %s is using '%s' locale (%u)",
+ ipAddress.c_str(), port, _accountInfo.Login.c_str(), _localizationName.c_str(), GetLocaleByName(_localizationName));
- TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] account %s is using '%s' locale (%u)",
- ipAddress.c_str(), port, _accountInfo.Login.c_str(), _localizationName.c_str(), GetLocaleByName(_localizationName));
+ _status = STATUS_LOGON_PROOF;
+ }
+ else
+ pkt << uint8(WOW_FAIL_VERSION_INVALID);
SendPacket(pkt);
}
@@ -849,7 +850,7 @@ void AuthSession::RealmListCallback(PreparedQueryResult result)
// No SQL injection. id of realm is controlled by the database.
uint32 flag = realm.Flags;
- RealmBuildInfo const* buildInfo = AuthHelper::GetBuildInfo(realm.Build);
+ RealmBuildInfo const* buildInfo = sRealmList->GetBuildInfo(realm.Build);
if (!okBuild)
{
if (!buildInfo)
@@ -964,7 +965,7 @@ bool AuthSession::VerifyVersion(uint8 const* a, int32 aLength, uint8 const* vers
std::array<uint8, 20> const* versionHash = nullptr;
if (!isReconnect)
{
- RealmBuildInfo const* buildInfo = AuthHelper::GetBuildInfo(_build);
+ RealmBuildInfo const* buildInfo = sRealmList->GetBuildInfo(_build);
if (!buildInfo)
return false;
diff --git a/src/server/shared/Realm/RealmList.cpp b/src/server/shared/Realm/RealmList.cpp
index ec0a707eb61..a8d7dab9337 100644
--- a/src/server/shared/Realm/RealmList.cpp
+++ b/src/server/shared/Realm/RealmList.cpp
@@ -46,6 +46,7 @@ void RealmList::Initialize(Trinity::Asio::IoContext& ioContext, uint32 updateInt
_updateTimer = Trinity::make_unique<Trinity::Asio::DeadlineTimer>(ioContext);
_resolver = Trinity::make_unique<boost::asio::ip::tcp::resolver>(ioContext);
+ LoadBuildInfo();
// Get the content of the realmlist table in the database
UpdateRealms(boost::system::error_code());
}
@@ -55,6 +56,38 @@ void RealmList::Close()
_updateTimer->cancel();
}
+void RealmList::LoadBuildInfo()
+{
+ // 0 1 2 3 4 5 6
+ if (QueryResult result = LoginDatabase.Query("SELECT majorVersion, minorVersion, bugfixVersion, hotfixVersion, build, winChecksumSeed, macChecksumSeed FROM build_info ORDER BY build ASC"))
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ _builds.emplace_back();
+ RealmBuildInfo& build = _builds.back();
+ build.MajorVersion = fields[0].GetUInt32();
+ build.MinorVersion = fields[1].GetUInt32();
+ build.BugfixVersion = fields[2].GetUInt32();
+ std::string hotfixVersion = fields[3].GetString();
+ if (hotfixVersion.length() < build.HotfixVersion.size())
+ std::copy(hotfixVersion.begin(), hotfixVersion.end(), build.HotfixVersion.begin());
+ else
+ std::fill(hotfixVersion.begin(), hotfixVersion.end(), '\0');
+
+ build.Build = fields[4].GetUInt32();
+ std::string windowsHash = fields[5].GetString();
+ if (windowsHash.length() == build.WindowsHash.size() * 2)
+ HexStrToByteArray(windowsHash, build.WindowsHash.data());
+
+ std::string macHash = fields[6].GetString();
+ if (macHash.length() == build.MacHash.size() * 2)
+ HexStrToByteArray(macHash, build.MacHash.data());
+
+ } while (result->NextRow());
+ }
+}
+
void RealmList::UpdateRealm(RealmHandle const& id, uint32 build, std::string const& name,
boost::asio::ip::address&& address, boost::asio::ip::address&& localAddr, boost::asio::ip::address&& localSubmask,
uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population)
@@ -181,3 +214,12 @@ Realm const* RealmList::GetRealm(RealmHandle const& id) const
return nullptr;
}
+
+RealmBuildInfo const* RealmList::GetBuildInfo(uint32 build) const
+{
+ for (RealmBuildInfo const& clientBuild : _builds)
+ if (clientBuild.Build == build)
+ return &clientBuild;
+
+ return nullptr;
+}
diff --git a/src/server/shared/Realm/RealmList.h b/src/server/shared/Realm/RealmList.h
index 62f615c0cae..b7358afa35a 100644
--- a/src/server/shared/Realm/RealmList.h
+++ b/src/server/shared/Realm/RealmList.h
@@ -21,10 +21,22 @@
#include "Define.h"
#include "Realm.h"
+#include <array>
#include <map>
#include <vector>
#include <unordered_set>
+struct RealmBuildInfo
+{
+ uint32 Build;
+ uint32 MajorVersion;
+ uint32 MinorVersion;
+ uint32 BugfixVersion;
+ std::array<char, 4> HotfixVersion;
+ std::array<uint8, 20> WindowsHash;
+ std::array<uint8, 20> MacHash;
+};
+
namespace boost
{
namespace system
@@ -58,14 +70,18 @@ public:
RealmMap const& GetRealms() const { return _realms; }
Realm const* GetRealm(RealmHandle const& id) const;
+ RealmBuildInfo const* GetBuildInfo(uint32 build) const;
+
private:
RealmList();
+ void LoadBuildInfo();
void UpdateRealms(boost::system::error_code const& error);
void UpdateRealm(RealmHandle const& id, uint32 build, std::string const& name,
boost::asio::ip::address&& address, boost::asio::ip::address&& localAddr, boost::asio::ip::address&& localSubmask,
uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population);
+ std::vector<RealmBuildInfo> _builds;
RealmMap _realms;
uint32 _updateInterval;
std::unique_ptr<Trinity::Asio::DeadlineTimer> _updateTimer;