Skip to content
This repository was archived by the owner on Oct 14, 2021. It is now read-only.

Commit a16cd09

Browse files
author
captain1242
committed
Bugfixes
- Fixed bug with module tables not being created - Fixed injection possibility at the rank name - Added settings saving when Shutting down the server - MRSync is now BETA 1.6 - MBSync is now A 1.2 - DBVersion is now 1.5 --MSync.RDBVersion = 1.4 --MSync.BDBVersion = 1.4 - MSync version is now 1.5
1 parent 9744cd2 commit a16cd09

File tree

2 files changed

+164
-133
lines changed

2 files changed

+164
-133
lines changed

lua/msync/mrsync_sql.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ if(table.HasValue(MSync.Settings.EnabledModules, "MRSync")) then
5656

5757
local InsertQ = MSync.DB:query([[INSERT into `]]..MSync.TableNameRanks..[[`
5858
(`steamid`, `groups`, `servergroup`)
59-
VALUES (']]..plyTable.steamid..[[', ']]..plyTable.rank..[[',']]..serverGroup..[[')
59+
VALUES (']]..plyTable.steamid..[[', ']]..MSync.DB:escape(plyTable.rank)..[[',']]..MSync.DB:escape(serverGroup)..[[')
6060
ON DUPLICATE KEY UPDATE groups=VALUES(groups)]]
6161
)
6262
transaction:addQuery(InsertQ)
@@ -97,7 +97,7 @@ if(table.HasValue(MSync.Settings.EnabledModules, "MRSync")) then
9797

9898
local InsertQ = MSync.DB:query([[INSERT into `]]..MSync.TableNameRanks..[[`
9999
(`steamid`, `groups`, `servergroup`)
100-
VALUES (']]..v:SteamID64()..[[', ']]..v:GetUserGroup()..[[',']]..serverGroup..[[')
100+
VALUES (']]..v:SteamID64()..[[', ']]..MSync.DB:escape(v:GetUserGroup())..[[',']]..MSync.DB:escape(serverGroup)..[[')
101101
ON DUPLICATE KEY UPDATE groups=VALUES(groups)]]
102102
)
103103
transaction:addQuery(InsertQ)

lua/msync/mysql_main.lua

Lines changed: 162 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -32,141 +32,172 @@ if(file.Exists( "bin/gmsv_mysqloo_linux.dll", "LUA" ) or file.Exists( "bin/gmsv_
3232
print("[MSync] Connected to database")
3333
print("[MSync] Checking database")
3434

35-
36-
local MSync_Version_Table = server:query([[
37-
CREATE TABLE IF NOT EXISTS `msync_db_version` (
38-
`version` float NOT NULL
39-
);
40-
SELECT * FROM `msync_db_version`
41-
]])
42-
MSync_Version_Table.onError = function(Q,E) print("Q1") print(E) end
43-
MSync_Version_Table:start()
44-
--MSync_Version_Table:wait()
45-
46-
if MSync_Version_Table:getData() then
47-
MSync.Settings.DBVersion = MSync_Version_Table:getData()[1]
48-
end
49-
50-
51-
local transaction = server:createTransaction()
52-
53-
if(table.HasValue(MSync.Settings.EnabledModules, "MRSync")) then
54-
if (MSync.Settings.DBVersion < 1.0) then
55-
local MRSyncCT = server:query([[
56-
CREATE TABLE IF NOT EXISTS `]] .. MSync.TableNameRanks .. [[` (
57-
`steamid` varchar(20) NOT NULL,
58-
`groups` varchar(30) NOT NULL,
59-
`servergroup` varchar(30) NOT NULL
60-
)
61-
]])
62-
transaction:addQuery(MRSyncCT)
63-
end
35+
--Create Version Table if not Exists
36+
local MSync_Version_Table_create = server:query([[CREATE TABLE IF NOT EXISTS `msync_db_version` (`version` float NOT NULL)]])
37+
MSync_Version_Table_create.onError = function(Q,E) print("Q1") print(E) end
38+
--If query was successfull we call the rest
39+
MSync_Version_Table_create.onSuccess = function(data)
6440

65-
if(MSync.Settings.DBVersion < 1.1)then
66-
local MRSyncUpdateDB = server:query([[
67-
ALTER TABLE `]]..MSync.TableNameRanks..[[`
68-
ADD UNIQUE INDEX `unq_user` (`steamid` ASC, `servergroup` ASC)
41+
--Get the Version Table
42+
local MSync_Version_Table = server:query([[
43+
SELECT * FROM `msync_db_version`
44+
]])
45+
MSync_Version_Table.onError = function(Q,E) print("Q1") print(E) end
46+
MSync_Version_Table.onSuccess = function(data)
47+
48+
--Alter MSync DBVersion
49+
if(MSync.Settings.DBVersion<1.5)then
50+
local MSync_Version_Table = server:query([[
51+
DELETE FROM `msync_db_version`;
52+
ALTER TABLE `msync_db_version`
53+
ADD version_index varchar(30) NOT NULL,
54+
ADD UNIQUE INDEX `unq_index` (`version_index` ASC);
55+
]])
56+
MSync_Version_Table.onError = function(Q,E) print("Q1") print(E) end
57+
MSync_Version_Table:start()
58+
59+
MSync.Settings.RDBVersion = MSync.Settings.RDBVersion or 0
60+
MSync.Settings.BDBVersion = MSync.Settings.BDBVersion or 0
61+
end
62+
63+
--Check if the query returned data and if so we set our local variables
64+
if MSync_Version_Table:getData()~=nil then
65+
local version_tbl = MSync_Version_Table:getData()
66+
67+
for k,v in pairs(version_tbl) do
68+
MSync.Settings[(v.version_index)] = v.version
69+
print("[MSync] Version "..v.version_index..": "..v.version)
70+
end
71+
end
72+
73+
74+
local transaction = server:createTransaction()
75+
76+
if(table.HasValue(MSync.Settings.EnabledModules, "MRSync")) then
77+
if (MSync.Settings.RDBVersion < 1.0) then
78+
local MRSyncCT = server:query([[
79+
CREATE TABLE IF NOT EXISTS `]] .. MSync.TableNameRanks .. [[` (
80+
`steamid` varchar(20) NOT NULL,
81+
`groups` varchar(30) NOT NULL,
82+
`servergroup` varchar(30) NOT NULL
83+
)
84+
]])
85+
transaction:addQuery(MRSyncCT)
86+
end
87+
88+
if(MSync.Settings.RDBVersion < 1.1)then
89+
local MRSyncUpdateDB = server:query([[
90+
ALTER TABLE `]]..MSync.TableNameRanks..[[`
91+
ADD UNIQUE INDEX `unq_user` (`steamid` ASC, `servergroup` ASC)
92+
]])
93+
transaction:addQuery(MRSyncUpdateDB)
94+
print("[MRSync] Going to update DB structure to v1.1")
95+
end
96+
end
97+
98+
99+
if(table.HasValue(MSync.Settings.EnabledModules, "MBSync")) then
100+
101+
if (MSync.Settings.BDBVersion < 1.0) then
102+
local MBSyncCT = server:query([[
103+
CREATE TABLE IF NOT EXISTS `]] .. MSync.TableNameBans .. [[` (
104+
`steamid` varchar(20) NOT NULL,
105+
`nickname` varchar(30) NOT NULL,
106+
`admin` varchar(30) NOT NULL,
107+
`reason` varchar(30) NOT NULL,
108+
`ban_date` INT NOT NULL,
109+
`duration` INT NOT NULL,
110+
UNIQUE KEY `steamid_UNIQUE` (`steamid`)
111+
)
112+
]])
113+
transaction:addQuery(MBSyncCT)
114+
--print("[MBSync] Going to update DB structure to v1.0")
115+
end
116+
117+
118+
if (MSync.Settings.BDBVersion < 1.1) then
119+
-- Add `admin_sid` column if it doesn't already exist.
120+
local column = 'admin_sid'
121+
local updateQuery = server:query([[
122+
SET @preparedStatement = IF(
123+
(SELECT COUNT(*)
124+
FROM INFORMATION_SCHEMA.COLUMNS
125+
WHERE table_name = ']] .. MSync.TableNameBans .. [['
126+
AND table_schema = DATABASE()
127+
AND column_name = ']] .. column .. [['
128+
) > 0,
129+
'SELECT 1;',
130+
'ALTER TABLE `]] .. MSync.TableNameBans .. [[` ADD `]] .. column .. [[` VARCHAR(20) AFTER `nickname`;'
131+
);
132+
PREPARE alterIfNotExists FROM @preparedStatement;
133+
EXECUTE alterIfNotExists;
134+
DEALLOCATE PREPARE alterIfNotExists;
135+
]])
136+
transaction:addQuery(updateQuery)
137+
print("[MBSync] Going to update DB structure to v1.1")
138+
end
139+
140+
if (MSync.Settings.BDBVersion < 1.2) then
141+
-- Rename some columns, allow NULLs, increase VARCHAR sizes and change INTs to unsigned
142+
local updateQuery = server:query([[
143+
ALTER TABLE `]] .. MSync.TableNameBans .. [[`
144+
CHANGE COLUMN `nickname` `name` VARCHAR(32),
145+
CHANGE COLUMN `admin` `staff_name` VARCHAR(32) NOT NULL,
146+
CHANGE COLUMN `admin_sid` `staff_steamid` VARCHAR(20),
147+
MODIFY `reason` VARCHAR(255) NOT NULL,
148+
MODIFY `ban_date` INT UNSIGNED NOT NULL,
149+
MODIFY `duration` INT UNSIGNED NOT NULL;
150+
]])
151+
transaction:addQuery(updateQuery)
152+
print("[MBSync] Going to update DB structure to v1.2")
153+
end
154+
155+
if (MSync.Settings.BDBVersion < 1.3) then
156+
-- Drop the unique on `steamid`, add auto-incrementing `id` and set it as new PK
157+
local updateQuery = server:query([[
158+
ALTER TABLE `]] .. MSync.TableNameBans .. [[`
159+
DROP INDEX steamid_UNIQUE,
160+
ADD `id` INT PRIMARY KEY AUTO_INCREMENT FIRST,
161+
ADD INDEX steamid_INDEX (`steamid`);
162+
]])
163+
transaction:addQuery(updateQuery)
164+
print("[MBSync] Going to update DB structure to v1.3")
165+
end
166+
167+
end
168+
--[[if(table.HasValue(MSync.Settings.EnabledModules, "MPSync")) then
169+
//Ranks
170+
//Permissions
171+
//Rank ID and Permission ID
172+
//Servers
173+
//Server id and Permission ID
174+
end]]--
175+
176+
-- Start the transaction, if any queries were added to it
177+
if transaction:getQueries() ~= nil then
178+
transaction.onError = function (tr, err) print("[MSync] Database creation/update failed: " .. err) end
179+
transaction.onSuccess = function ()
180+
MSync.Settings.DBVersion = MSync.DBVersion
181+
MSync.Settings.RDBVersion = MSync.RDBVersion
182+
MSync.Settings.BDBVersion = MSync.BDBVersion
183+
MSync.SaveSettings()
184+
print("[MSync] Database upgrade successful, current DB schema version " .. MSync.DBVersion)
185+
end
186+
transaction:start()
187+
end
188+
189+
local MSync_Version_Table = server:query([[
190+
INSERT into `msync_db_version` (`version`,`version_index`) VALUES (']]..MSync.DBVersion..[[','DBVersion') ON DUPLICATE KEY UPDATE version=VALUES(version);
191+
INSERT into `msync_db_version` (`version`,`version_index`) VALUES (']]..MSync.RDBVersion..[[','RDBVersion') ON DUPLICATE KEY UPDATE version=VALUES(version);
192+
INSERT into `msync_db_version` (`version`,`version_index`) VALUES (']]..MSync.BDBVersion..[[','BDBVersion') ON DUPLICATE KEY UPDATE version=VALUES(version)
69193
]])
70-
transaction:addQuery(MRSyncUpdateDB)
71-
print("[MRSync] Going to update DB structure to v1.1")
194+
MSync_Version_Table.onError = function(Q,E) print("Q1") print(E) end
195+
MSync_Version_Table:start()
196+
--MSync_Version_Table:wait()
72197
end
198+
MSync_Version_Table:start()
73199
end
74-
75-
76-
if(table.HasValue(MSync.Settings.EnabledModules, "MBSync")) then
77-
78-
if (MSync.Settings.DBVersion < 1.0) then
79-
local MBSyncCT = server:query([[
80-
CREATE TABLE IF NOT EXISTS `]] .. MSync.TableNameBans .. [[` (
81-
`steamid` varchar(20) NOT NULL,
82-
`nickname` varchar(30) NOT NULL,
83-
`admin` varchar(30) NOT NULL,
84-
`reason` varchar(30) NOT NULL,
85-
`ban_date` INT NOT NULL,
86-
`duration` INT NOT NULL,
87-
UNIQUE KEY `steamid_UNIQUE` (`steamid`)
88-
)
89-
]])
90-
transaction:addQuery(MBSyncCT)
91-
print("[MBSync] Going to update DB structure to v1.0")
92-
end
93-
94-
95-
if (MSync.Settings.DBVersion < 1.1) then
96-
-- Add `admin_sid` column if it doesn't already exist.
97-
local column = 'admin_sid'
98-
local updateQuery = server:query([[
99-
SET @preparedStatement = IF(
100-
(SELECT COUNT(*)
101-
FROM INFORMATION_SCHEMA.COLUMNS
102-
WHERE table_name = ']] .. MSync.TableNameBans .. [['
103-
AND table_schema = DATABASE()
104-
AND column_name = ']] .. column .. [['
105-
) > 0,
106-
'SELECT 1;',
107-
'ALTER TABLE `]] .. MSync.TableNameBans .. [[` ADD `]] .. column .. [[` VARCHAR(20) AFTER `nickname`;'
108-
);
109-
PREPARE alterIfNotExists FROM @preparedStatement;
110-
EXECUTE alterIfNotExists;
111-
DEALLOCATE PREPARE alterIfNotExists;
112-
]])
113-
transaction:addQuery(updateQuery)
114-
print("[MBSync] Going to update DB structure to v1.1")
115-
end
116-
117-
if (MSync.Settings.DBVersion < 1.2) then
118-
-- Rename some columns, allow NULLs, increase VARCHAR sizes and change INTs to unsigned
119-
local updateQuery = server:query([[
120-
ALTER TABLE `]] .. MSync.TableNameBans .. [[`
121-
CHANGE COLUMN `nickname` `name` VARCHAR(32),
122-
CHANGE COLUMN `admin` `staff_name` VARCHAR(32) NOT NULL,
123-
CHANGE COLUMN `admin_sid` `staff_steamid` VARCHAR(20),
124-
MODIFY `reason` VARCHAR(255) NOT NULL,
125-
MODIFY `ban_date` INT UNSIGNED NOT NULL,
126-
MODIFY `duration` INT UNSIGNED NOT NULL;
127-
]])
128-
transaction:addQuery(updateQuery)
129-
print("[MBSync] Going to update DB structure to v1.2")
130-
end
131-
132-
if (MSync.Settings.DBVersion < 1.3) then
133-
-- Drop the unique on `steamid`, add auto-incrementing `id` and set it as new PK
134-
local updateQuery = server:query([[
135-
ALTER TABLE `]] .. MSync.TableNameBans .. [[`
136-
DROP INDEX steamid_UNIQUE,
137-
ADD `id` INT PRIMARY KEY AUTO_INCREMENT FIRST,
138-
ADD INDEX steamid_INDEX (`steamid`);
139-
]])
140-
transaction:addQuery(updateQuery)
141-
print("[MBSync] Going to update DB structure to v1.3")
142-
end
143-
144-
end
145-
--[[if(table.HasValue(MSync.Settings.EnabledModules, "MPSync")) then
146-
//Ranks
147-
//Permissions
148-
//Rank ID and Permission ID
149-
//Servers
150-
//Server id and Permission ID
151-
end]]--
152-
153-
-- Start the transaction, if any queries were added to it
154-
if transaction:getQueries() ~= nil then
155-
transaction.onError = function (tr, err) print("[MSync] Database creation/update failed: " .. err) end
156-
transaction.onSuccess = function ()
157-
MSync.Settings.DBVersion = MSync.DBVersion
158-
MSync.SaveSettings()
159-
print("[MSync] Database upgrade successful, current DB schema version " .. MSync.DBVersion)
160-
end
161-
transaction:start()
162-
end
163-
164-
local MSync_Version_Table = server:query([[
165-
REPLACE INTO `msync_db_version` (version) VALUES(]]..MSync.DBVersion..[[);
166-
]])
167-
MSync_Version_Table.onError = function(Q,E) print("Q1") print(E) end
168-
MSync_Version_Table:start()
169-
--MSync_Version_Table:wait()
200+
MSync_Version_Table_create:start()
170201
end
171202

172203
MSync.Connect()

0 commit comments

Comments
 (0)