Update SQL plugins for transitional syntax.
This commit is contained in:
		
							parent
							
								
									b1cb06c5ce
								
							
						
					
					
						commit
						b60ef1669c
					
				| @ -48,8 +48,8 @@ public Plugin:myinfo = | ||||
| public OnRebuildAdminCache(AdminCachePart:part) | ||||
| { | ||||
| 	/* First try to get a database connection */ | ||||
| 	decl String:error[255]; | ||||
| 	new Handle:db; | ||||
| 	char error[255]; | ||||
| 	Database db; | ||||
| 	 | ||||
| 	if (SQL_CheckConfig("admins")) | ||||
| 	{ | ||||
| @ -76,13 +76,13 @@ public OnRebuildAdminCache(AdminCachePart:part) | ||||
| 	delete db; | ||||
| } | ||||
| 
 | ||||
| FetchUsers(Handle:db) | ||||
| void FetchUsers(Database db) | ||||
| { | ||||
| 	decl String:query[255], String:error[255]; | ||||
| 	new Handle:hQuery; | ||||
| 	char query[255], error[255]; | ||||
| 	DBResultSet rs; | ||||
| 
 | ||||
| 	Format(query, sizeof(query), "SELECT id, authtype, identity, password, flags, name, immunity FROM sm_admins"); | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		SQL_GetError(db, error, sizeof(error)); | ||||
| 		LogError("FetchUsers() query failed: %s", query); | ||||
| @ -90,30 +90,31 @@ FetchUsers(Handle:db) | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	decl String:authtype[16]; | ||||
| 	decl String:identity[80]; | ||||
| 	decl String:password[80]; | ||||
| 	decl String:flags[32]; | ||||
| 	decl String:name[80]; | ||||
| 	new immunity; | ||||
| 	new AdminId:adm, id; | ||||
| 	new GroupId:gid; | ||||
| 	char authtype[16]; | ||||
| 	char identity[80]; | ||||
| 	char password[80]; | ||||
| 	char flags[32]; | ||||
| 	char name[80]; | ||||
| 	int immunity; | ||||
| 	AdminId adm; | ||||
| 	GroupId gid; | ||||
| 	int id; | ||||
| 
 | ||||
| 	/* Keep track of a mapping from admin DB IDs to internal AdminIds to | ||||
| 	 * enable group lookups en masse */ | ||||
| 	new Handle:htAdmins = CreateTrie(); | ||||
| 	decl String:key[16]; | ||||
| 	StringMap htAdmins = new StringMap(); | ||||
| 	char key[16]; | ||||
| 	 | ||||
| 	while (SQL_FetchRow(hQuery)) | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		id = SQL_FetchInt(hQuery, 0); | ||||
| 		id = rs.FetchInt(0); | ||||
| 		IntToString(id, key, sizeof(key)); | ||||
| 		SQL_FetchString(hQuery, 1, authtype, sizeof(authtype)); | ||||
| 		SQL_FetchString(hQuery, 2, identity, sizeof(identity)); | ||||
| 		SQL_FetchString(hQuery, 3, password, sizeof(password)); | ||||
| 		SQL_FetchString(hQuery, 4, flags, sizeof(flags)); | ||||
| 		SQL_FetchString(hQuery, 5, name, sizeof(name)); | ||||
| 		immunity = SQL_FetchInt(hQuery, 6); | ||||
| 		rs.FetchString(1, authtype, sizeof(authtype)); | ||||
| 		rs.FetchString(2, identity, sizeof(identity)); | ||||
| 		rs.FetchString(3, password, sizeof(password)); | ||||
| 		rs.FetchString(4, flags, sizeof(flags)); | ||||
| 		rs.FetchString(5, name, sizeof(name)); | ||||
| 		immunity = rs.FetchInt(6); | ||||
| 		 | ||||
| 		/* Use a pre-existing admin if we can */ | ||||
| 		if ((adm = FindAdminByIdentity(authtype, identity)) == INVALID_ADMIN_ID) | ||||
| @ -126,11 +127,11 @@ FetchUsers(Handle:db) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		SetTrieValue(htAdmins, key, adm); | ||||
| 		htAdmins.SetValue(key, adm); | ||||
| 		 | ||||
| 		#if defined _DEBUG | ||||
| #if defined _DEBUG | ||||
| 		PrintToServer("Found SQL admin (%d,%s,%s,%s,%s,%s,%d):%d", id, authtype, identity, password, flags, name, immunity, adm); | ||||
| 		#endif | ||||
| #endif | ||||
| 		 | ||||
| 		/* See if this admin wants a password */ | ||||
| 		if (password[0] != '\0') | ||||
| @ -139,8 +140,8 @@ FetchUsers(Handle:db) | ||||
| 		} | ||||
| 		 | ||||
| 		/* Apply each flag */ | ||||
| 		new len = strlen(flags); | ||||
| 		new AdminFlag:flag; | ||||
| 		int len = strlen(flags); | ||||
| 		AdminFlag flag; | ||||
| 		for (new i=0; i<len; i++) | ||||
| 		{ | ||||
| 			if (!FindFlagByChar(flags[i], flag)) | ||||
| @ -153,9 +154,10 @@ FetchUsers(Handle:db) | ||||
| 		SetAdminImmunityLevel(adm, immunity); | ||||
| 	} | ||||
| 
 | ||||
| 	new Handle:hGroupQuery; | ||||
| 	delete rs; | ||||
| 
 | ||||
| 	Format(query, sizeof(query), "SELECT ag.admin_id AS id, g.name FROM sm_admins_groups ag JOIN sm_groups g ON ag.group_id = g.id  ORDER BY id, inherit_order ASC"); | ||||
| 	if ((hGroupQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		SQL_GetError(db, error, sizeof(error)); | ||||
| 		LogError("FetchUsers() query failed: %s", query); | ||||
| @ -163,13 +165,13 @@ FetchUsers(Handle:db) | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	decl String:group[80]; | ||||
| 	while (SQL_FetchRow(hGroupQuery)) | ||||
| 	char group[80]; | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		IntToString(SQL_FetchInt(hGroupQuery, 0), key, sizeof(key)); | ||||
| 		SQL_FetchString(hGroupQuery, 1, group, sizeof(group)); | ||||
| 		IntToString(rs.FetchInt(0), key, sizeof(key)); | ||||
| 		rs.FetchString(1, group, sizeof(group)); | ||||
| 
 | ||||
| 		if (GetTrieValue(htAdmins, key, adm)) | ||||
| 		if (htAdmins.GetValue(key, adm)) | ||||
| 		{ | ||||
| 			if ((gid = FindAdmGroup(group)) == INVALID_GROUP_ID) | ||||
| 			{ | ||||
| @ -181,21 +183,20 @@ FetchUsers(Handle:db) | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete hGroupQuery; | ||||
| 	delete rs; | ||||
| 	delete htAdmins; | ||||
| } | ||||
| 
 | ||||
| FetchGroups(Handle:db) | ||||
| FetchGroups(Database db) | ||||
| { | ||||
| 	decl String:query[255]; | ||||
| 	new Handle:hQuery; | ||||
| 	char query[255]; | ||||
| 	DBResultSet rs; | ||||
| 	 | ||||
| 	Format(query, sizeof(query), "SELECT flags, name, immunity_level FROM sm_groups"); | ||||
| 
 | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		decl String:error[255]; | ||||
| 		char error[255]; | ||||
| 		SQL_GetError(db, error, sizeof(error)); | ||||
| 		LogError("FetchGroups() query failed: %s", query); | ||||
| 		LogError("Query error: %s", error); | ||||
| @ -203,28 +204,28 @@ FetchGroups(Handle:db) | ||||
| 	} | ||||
| 	 | ||||
| 	/* Now start fetching groups */ | ||||
| 	decl String:flags[32]; | ||||
| 	decl String:name[128]; | ||||
| 	new immunity; | ||||
| 	while (SQL_FetchRow(hQuery)) | ||||
| 	char flags[32]; | ||||
| 	char name[128]; | ||||
| 	int immunity; | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		SQL_FetchString(hQuery, 0, flags, sizeof(flags)); | ||||
| 		SQL_FetchString(hQuery, 1, name, sizeof(name)); | ||||
| 		immunity = SQL_FetchInt(hQuery, 2); | ||||
| 		rs.FetchString(0, flags, sizeof(flags)); | ||||
| 		rs.FetchString(1, name, sizeof(name)); | ||||
| 		immunity = rs.FetchInt(2); | ||||
| 		 | ||||
| #if defined _DEBUG | ||||
| 		PrintToServer("Adding group (%d, %s, %s)", immunity, flags, name); | ||||
| #endif | ||||
| 		 | ||||
| 		/* Find or create the group */ | ||||
| 		new GroupId:gid; | ||||
| 		GroupId gid; | ||||
| 		if ((gid = FindAdmGroup(name)) == INVALID_GROUP_ID) | ||||
| 		{ | ||||
| 			gid = CreateAdmGroup(name); | ||||
| 		} | ||||
| 		 | ||||
| 		/* Add flags from the database to the group */ | ||||
| 		new num_flag_chars = strlen(flags); | ||||
| 		int num_flag_chars = strlen(flags); | ||||
| 		for (new i=0; i<num_flag_chars; i++) | ||||
| 		{ | ||||
| 			decl AdminFlag:flag; | ||||
| @ -239,7 +240,7 @@ FetchGroups(Handle:db) | ||||
| 		SetAdmGroupImmunityLevel(gid, immunity); | ||||
| 	} | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 	 | ||||
| 	/**  | ||||
| 	 * Get immunity in a big lump.  This is a nasty query but it gets the job done. | ||||
| @ -249,23 +250,23 @@ FetchGroups(Handle:db) | ||||
| 	len += Format(query[len], sizeof(query)-len, " LEFT JOIN sm_groups g1 ON g1.id = gi.group_id "); | ||||
| 	len += Format(query[len], sizeof(query)-len, " LEFT JOIN sm_groups g2 ON g2.id = gi.other_id"); | ||||
| 	 | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		decl String:error[255]; | ||||
| 		char error[255]; | ||||
| 		SQL_GetError(db, error, sizeof(error)); | ||||
| 		LogError("FetchGroups() query failed: %s", query); | ||||
| 		LogError("Query error: %s", error); | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	while (SQL_FetchRow(hQuery)) | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		decl String:group1[80]; | ||||
| 		decl String:group2[80]; | ||||
| 		new GroupId:gid1, GroupId:gid2; | ||||
| 		char group1[80]; | ||||
| 		char group2[80]; | ||||
| 		GroupId gid1, gid2; | ||||
| 		 | ||||
| 		SQL_FetchString(hQuery, 0, group1, sizeof(group1)); | ||||
| 		SQL_FetchString(hQuery, 1, group2, sizeof(group2)); | ||||
| 		rs.FetchString(0, group1, sizeof(group1)); | ||||
| 		rs.FetchString(1, group2, sizeof(group2)); | ||||
| 		 | ||||
| 		if (((gid1 = FindAdmGroup(group1)) == INVALID_GROUP_ID) | ||||
| 			|| (gid2 = FindAdmGroup(group2)) == INVALID_GROUP_ID) | ||||
| @ -279,85 +280,85 @@ FetchGroups(Handle:db) | ||||
| #endif | ||||
| 	} | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Fetch overrides in a lump query. | ||||
| 	 */ | ||||
| 	Format(query, sizeof(query), "SELECT g.name, go.type, go.name, go.access FROM sm_group_overrides go LEFT JOIN sm_groups g ON go.group_id = g.id"); | ||||
| 	 | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		decl String:error[255]; | ||||
| 		char error[255]; | ||||
| 		SQL_GetError(db, error, sizeof(error)); | ||||
| 		LogError("FetchGroups() query failed: %s", query); | ||||
| 		LogError("Query error: %s", error); | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:type[16]; | ||||
| 	decl String:cmd[64]; | ||||
| 	decl String:access[16]; | ||||
| 	while (SQL_FetchRow(hQuery)) | ||||
| 	char type[16]; | ||||
| 	char cmd[64]; | ||||
| 	char access[16]; | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		SQL_FetchString(hQuery, 0, name, sizeof(name)); | ||||
| 		SQL_FetchString(hQuery, 1, type, sizeof(type)); | ||||
| 		SQL_FetchString(hQuery, 2, cmd, sizeof(cmd)); | ||||
| 		SQL_FetchString(hQuery, 3, access, sizeof(access)); | ||||
| 		rs.FetchString(0, name, sizeof(name)); | ||||
| 		rs.FetchString(1, type, sizeof(type)); | ||||
| 		rs.FetchString(2, cmd, sizeof(cmd)); | ||||
| 		rs.FetchString(3, access, sizeof(access)); | ||||
| 		 | ||||
| 		new GroupId:gid; | ||||
| 		GroupId gid; | ||||
| 		if ((gid = FindAdmGroup(name)) == INVALID_GROUP_ID) | ||||
| 		{ | ||||
| 			continue; | ||||
| 		} | ||||
| 				 | ||||
| 		new OverrideType:o_type = Override_Command; | ||||
| 		OverrideType o_type = Override_Command; | ||||
| 		if (StrEqual(type, "group")) | ||||
| 		{ | ||||
| 			o_type = Override_CommandGroup; | ||||
| 		} | ||||
| 		 | ||||
| 		new OverrideRule:o_rule = Command_Deny; | ||||
| 		OverrideRule o_rule = Command_Deny; | ||||
| 		if (StrEqual(access, "allow")) | ||||
| 		{ | ||||
| 			o_rule = Command_Allow; | ||||
| 		} | ||||
| 				 | ||||
| 		#if defined _DEBUG | ||||
| #if defined _DEBUG | ||||
| 		PrintToServer("AddAdmGroupCmdOverride(%d, %s, %d, %d)", gid, cmd, o_type, o_rule); | ||||
| 		#endif | ||||
| #endif | ||||
| 		 | ||||
| 		AddAdmGroupCmdOverride(gid, cmd, o_type, o_rule); | ||||
| 	} | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| } | ||||
| 
 | ||||
| FetchOverrides(Handle:db) | ||||
| FetchOverrides(Database db) | ||||
| { | ||||
| 	decl String:query[255]; | ||||
| 	new Handle:hQuery; | ||||
| 	char query[255]; | ||||
| 	DBResultSet rs; | ||||
| 	 | ||||
| 	Format(query, sizeof(query), "SELECT type, name, flags FROM sm_overrides"); | ||||
| 
 | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		decl String:error[255]; | ||||
| 		char error[255]; | ||||
| 		SQL_GetError(db, error, sizeof(error)); | ||||
| 		LogError("FetchOverrides() query failed: %s", query); | ||||
| 		LogError("Query error: %s", error); | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:type[64]; | ||||
| 	decl String:name[64]; | ||||
| 	decl String:flags[32]; | ||||
| 	new flag_bits; | ||||
| 	while (SQL_FetchRow(hQuery)) | ||||
| 	char type[64]; | ||||
| 	char name[64]; | ||||
| 	char flags[32]; | ||||
| 	int flag_bits; | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		SQL_FetchString(hQuery, 0, type, sizeof(type)); | ||||
| 		SQL_FetchString(hQuery, 1, name, sizeof(name)); | ||||
| 		SQL_FetchString(hQuery, 2, flags, sizeof(flags)); | ||||
| 		rs.FetchString(0, type, sizeof(type)); | ||||
| 		rs.FetchString(1, name, sizeof(name)); | ||||
| 		rs.FetchString(2, flags, sizeof(flags)); | ||||
| 		 | ||||
| #if defined _DEBUG | ||||
| 		PrintToServer("Adding override (%s, %s, %s)", type, name, flags); | ||||
| @ -372,6 +373,6 @@ FetchOverrides(Handle:db) | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -67,7 +67,7 @@ public Plugin:myinfo = | ||||
|  *    powers. | ||||
|  */ | ||||
| 
 | ||||
| new Handle:hDatabase = null;			/** Database connection */ | ||||
| Database hDatabase = null;						/** Database connection */ | ||||
| new g_sequence = 0;								/** Global unique sequence number */ | ||||
| new ConnectLock = 0;							/** Connect sequence number */ | ||||
| new RebuildCachePart[3] = {0};					/** Cache part sequence numbers */ | ||||
| @ -81,11 +81,7 @@ public OnMapEnd() | ||||
| 	/** | ||||
| 	 * Clean up on map end just so we can start a fresh connection when we need it later. | ||||
| 	 */ | ||||
| 	if (hDatabase != null) | ||||
| 	{ | ||||
| 		delete hDatabase; | ||||
| 		hDatabase = null; | ||||
| 	} | ||||
| 	delete hDatabase; | ||||
| } | ||||
| 
 | ||||
| public bool:OnClientConnect(client, String:rejectmsg[], maxlen) | ||||
| @ -101,10 +97,10 @@ public OnClientDisconnect(client) | ||||
| 	PlayerAuth[client] = false; | ||||
| } | ||||
| 
 | ||||
| public OnDatabaseConnect(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| public void OnDatabaseConnect(Database db, const char[] error, any data) | ||||
| { | ||||
| #if defined _DEBUG | ||||
| 	PrintToServer("OnDatabaseConnect(%x,%x,%d) ConnectLock=%d", owner, hndl, data, ConnectLock); | ||||
| 	PrintToServer("OnDatabaseConnect(%x, %d) ConnectLock=%d", db, data, ConnectLock); | ||||
| #endif | ||||
| 
 | ||||
| 	/** | ||||
| @ -112,15 +108,12 @@ public OnDatabaseConnect(Handle:owner, Handle:hndl, const String:error[], any:da | ||||
| 	 */ | ||||
| 	if (data != ConnectLock || hDatabase != null) | ||||
| 	{ | ||||
| 		if (hndl != null) | ||||
| 		{ | ||||
| 			delete hndl; | ||||
| 		} | ||||
| 		delete db; | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	ConnectLock = 0; | ||||
| 	hDatabase = hndl; | ||||
| 	hDatabase = db; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * See if the connection is valid.  If not, don't un-mark the caches | ||||
| @ -155,20 +148,20 @@ RequestDatabaseConnection() | ||||
| 	ConnectLock = ++g_sequence; | ||||
| 	if (SQL_CheckConfig("admins")) | ||||
| 	{ | ||||
| 		SQL_TConnect(OnDatabaseConnect, "admins", ConnectLock); | ||||
| 		Database.Connect(OnDatabaseConnect, "admins", ConnectLock); | ||||
| 	} else { | ||||
| 		SQL_TConnect(OnDatabaseConnect, "default", ConnectLock); | ||||
| 		Database.Connect(OnDatabaseConnect, "default", ConnectLock); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| public OnRebuildAdminCache(AdminCachePart:part) | ||||
| public OnRebuildAdminCache(AdminCachePart part) | ||||
| { | ||||
| 	/** | ||||
| 	 * Mark this part of the cache as being rebuilt.  This is used by the  | ||||
| 	 * callback system to determine whether the results should still be  | ||||
| 	 * used. | ||||
| 	 */ | ||||
| 	new sequence = ++g_sequence; | ||||
| 	int sequence = ++g_sequence; | ||||
| 	RebuildCachePart[_:part] = sequence; | ||||
| 	 | ||||
| 	/** | ||||
| @ -196,7 +189,7 @@ public OnRebuildAdminCache(AdminCachePart:part) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| public Action:OnClientPreAdminCheck(client) | ||||
| public Action OnClientPreAdminCheck(client) | ||||
| { | ||||
| 	PlayerAuth[client] = true; | ||||
| 	 | ||||
| @ -235,13 +228,13 @@ public Action:OnClientPreAdminCheck(client) | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
| 
 | ||||
| public OnReceiveUserGroups(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| public void OnReceiveUserGroups(Database db, DBResultSet rs, const char[] error, any data) | ||||
| { | ||||
| 	new Handle:pk = Handle:data; | ||||
| 	ResetPack(pk); | ||||
| 	DataPack pk = view_as<DataPack>(data); | ||||
| 	pk.Reset(); | ||||
| 	 | ||||
| 	new client = ReadPackCell(pk); | ||||
| 	new sequence = ReadPackCell(pk); | ||||
| 	int client = pk.ReadCell(); | ||||
| 	int sequence = pk.ReadCell(); | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Make sure it's the same client. | ||||
| @ -252,7 +245,7 @@ public OnReceiveUserGroups(Handle:owner, Handle:hndl, const String:error[], any: | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	new AdminId:adm = AdminId:ReadPackCell(pk); | ||||
| 	AdminId adm = view_as<AdminId>(pk.ReadCell()); | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Someone could have sneakily changed the admin id while we waited. | ||||
| @ -267,10 +260,10 @@ public OnReceiveUserGroups(Handle:owner, Handle:hndl, const String:error[], any: | ||||
| 	/** | ||||
| 	 * See if we got results. | ||||
| 	 */ | ||||
| 	if (hndl == null) | ||||
| 	if (rs == null) | ||||
| 	{ | ||||
| 		decl String:query[255]; | ||||
| 		ReadPackString(pk, query, sizeof(query)); | ||||
| 		char query[255]; | ||||
| 		pk.ReadString(query, sizeof(query)); | ||||
| 		LogError("SQL error receiving user: %s", error); | ||||
| 		LogError("Query dump: %s", query); | ||||
| 		NotifyPostAdminCheck(client); | ||||
| @ -278,12 +271,12 @@ public OnReceiveUserGroups(Handle:owner, Handle:hndl, const String:error[], any: | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:name[80]; | ||||
| 	new GroupId:gid; | ||||
| 	char name[80]; | ||||
| 	GroupId gid; | ||||
| 	 | ||||
| 	while (SQL_FetchRow(hndl)) | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		SQL_FetchString(hndl, 0, name, sizeof(name)); | ||||
| 		rs.FetchString(0, name, sizeof(name)); | ||||
| 		 | ||||
| 		if ((gid = FindAdmGroup(name)) == INVALID_GROUP_ID) | ||||
| 		{ | ||||
| @ -304,17 +297,17 @@ public OnReceiveUserGroups(Handle:owner, Handle:hndl, const String:error[], any: | ||||
| 	delete pk; | ||||
| } | ||||
| 
 | ||||
| public OnReceiveUser(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| public void OnReceiveUser(Database db, DBResultSet rs, const char[] error, any data) | ||||
| { | ||||
| 	new Handle:pk = Handle:data; | ||||
| 	ResetPack(pk); | ||||
| 	 | ||||
| 	new client = ReadPackCell(pk); | ||||
| 	DataPack pk = view_as<DataPack>(data); | ||||
| 	pk.Reset(); | ||||
| 
 | ||||
| 	int client = pk.ReadCell(); | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Check if this is the latest result request. | ||||
| 	 */ | ||||
| 	new sequence = ReadPackCell(pk); | ||||
| 	int sequence = pk.ReadCell(); | ||||
| 	if (PlayerSeq[client] != sequence) | ||||
| 	{ | ||||
| 		/* Discard everything, since we're out of sequence. */ | ||||
| @ -325,10 +318,10 @@ public OnReceiveUser(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| 	/** | ||||
| 	 * If we need to use the results, make sure they succeeded. | ||||
| 	 */ | ||||
| 	if (hndl == null) | ||||
| 	if (rs == null) | ||||
| 	{ | ||||
| 		decl String:query[255]; | ||||
| 		ReadPackString(pk, query, sizeof(query)); | ||||
| 		char query[255]; | ||||
| 		pk.ReadString(query, sizeof(query)); | ||||
| 		LogError("SQL error receiving user: %s", error); | ||||
| 		LogError("Query dump: %s", query); | ||||
| 		RunAdminCacheChecks(client); | ||||
| @ -337,7 +330,7 @@ public OnReceiveUser(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	new num_accounts = SQL_GetRowCount(hndl); | ||||
| 	int num_accounts = rs.RowCount; | ||||
| 	if (num_accounts == 0) | ||||
| 	{ | ||||
| 		RunAdminCacheChecks(client); | ||||
| @ -346,29 +339,29 @@ public OnReceiveUser(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:authtype[16]; | ||||
| 	decl String:identity[80]; | ||||
| 	decl String:password[80]; | ||||
| 	decl String:flags[32]; | ||||
| 	decl String:name[80]; | ||||
| 	new AdminId:adm, id; | ||||
| 	new immunity; | ||||
| 	char authtype[16]; | ||||
| 	char identity[80]; | ||||
| 	char password[80]; | ||||
| 	char flags[32]; | ||||
| 	char name[80]; | ||||
| 	int immunity, id; | ||||
| 	AdminId adm; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Cache user info -- [0] = db id, [1] = cache id, [2] = groups | ||||
| 	 */ | ||||
| 	decl user_lookup[num_accounts][3]; | ||||
| 	new total_users = 0; | ||||
| 	char[][] user_lookup = new char[num_accounts][3]; | ||||
| 	int total_users = 0; | ||||
| 	 | ||||
| 	while (SQL_FetchRow(hndl)) | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		id = SQL_FetchInt(hndl, 0); | ||||
| 		SQL_FetchString(hndl, 1, authtype, sizeof(authtype)); | ||||
| 		SQL_FetchString(hndl, 2, identity, sizeof(identity)); | ||||
| 		SQL_FetchString(hndl, 3, password, sizeof(password)); | ||||
| 		SQL_FetchString(hndl, 4, flags, sizeof(flags)); | ||||
| 		SQL_FetchString(hndl, 5, name, sizeof(name)); | ||||
| 		immunity = SQL_FetchInt(hndl, 7); | ||||
| 		id = rs.FetchInt(0); | ||||
| 		rs.FetchString(1, authtype, sizeof(authtype)); | ||||
| 		rs.FetchString(2, identity, sizeof(identity)); | ||||
| 		rs.FetchString(3, password, sizeof(password)); | ||||
| 		rs.FetchString(4, flags, sizeof(flags)); | ||||
| 		rs.FetchString(5, name, sizeof(name)); | ||||
| 		immunity = rs.FetchInt(7); | ||||
| 		 | ||||
| 		/* For dynamic admins we clear anything already in the cache. */ | ||||
| 		if ((adm = FindAdminByIdentity(authtype, identity)) != INVALID_ADMIN_ID) | ||||
| @ -385,7 +378,7 @@ public OnReceiveUser(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| 		 | ||||
| 		user_lookup[total_users][0] = id; | ||||
| 		user_lookup[total_users][1] = _:adm; | ||||
| 		user_lookup[total_users][2] = SQL_FetchInt(hndl, 6); | ||||
| 		user_lookup[total_users][2] = rs.FetchInt(6); | ||||
| 		total_users++; | ||||
| 		 | ||||
| #if defined _DEBUG | ||||
| @ -401,8 +394,8 @@ public OnReceiveUser(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| 		SetAdminImmunityLevel(adm, immunity); | ||||
| 		 | ||||
| 		/* Apply each flag */ | ||||
| 		new len = strlen(flags); | ||||
| 		new AdminFlag:flag; | ||||
| 		int len = strlen(flags); | ||||
| 		AdminFlag flag; | ||||
| 		for (new i=0; i<len; i++) | ||||
| 		{ | ||||
| 			if (!FindFlagByChar(flags[i], flag)) | ||||
| @ -416,7 +409,7 @@ public OnReceiveUser(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| 	/** | ||||
| 	 * Try binding the user. | ||||
| 	 */	 | ||||
| 	new group_count = 0; | ||||
| 	int group_count = 0; | ||||
| 	RunAdminCacheChecks(client); | ||||
| 	adm = GetUserAdmin(client); | ||||
| 	id = 0; | ||||
| @ -450,25 +443,25 @@ public OnReceiveUser(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| 	/** | ||||
| 	 * The user has groups -- we need to fetch them! | ||||
| 	 */ | ||||
| 	decl String:query[255]; | ||||
| 	char query[255]; | ||||
| 	Format(query, sizeof(query), "SELECT g.name FROM sm_admins_groups ag JOIN sm_groups g ON ag.group_id = g.id WHERE ag.admin_id = %d", id); | ||||
| 	  | ||||
| 	ResetPack(pk); | ||||
| 	WritePackCell(pk, client); | ||||
| 	WritePackCell(pk, sequence); | ||||
| 	WritePackCell(pk, _:adm); | ||||
| 	WritePackString(pk, query); | ||||
| 	pk.Reset(); | ||||
| 	pk.WriteCell(client); | ||||
| 	pk.WriteCell(sequence); | ||||
| 	pk.WriteCell(_:adm); | ||||
| 	pk.WriteString(query); | ||||
| 	 | ||||
| 	SQL_TQuery(owner, OnReceiveUserGroups, query, pk, DBPrio_High); | ||||
| 	db.Query(OnReceiveUserGroups, query, pk, DBPrio_High); | ||||
| } | ||||
| 
 | ||||
| FetchUser(Handle:db, client) | ||||
| FetchUser(Database db, client) | ||||
| { | ||||
| 	decl String:name[65]; | ||||
| 	decl String:safe_name[140]; | ||||
| 	decl String:steamid[32]; | ||||
| 	decl String:steamidalt[32]; | ||||
| 	decl String:ipaddr[24]; | ||||
| 	char name[65]; | ||||
| 	char safe_name[140]; | ||||
| 	char steamid[32]; | ||||
| 	char steamidalt[32]; | ||||
| 	char ipaddr[24]; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Get authentication information from the client. | ||||
| @ -485,12 +478,12 @@ FetchUser(Handle:db, client) | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	SQL_EscapeString(db, name, safe_name, sizeof(safe_name)); | ||||
| 	db.Escape(name, safe_name, sizeof(safe_name)); | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Construct the query using the information the user gave us. | ||||
| 	 */ | ||||
| 	decl String:query[512]; | ||||
| 	char query[512]; | ||||
| 	new len = 0; | ||||
| 	 | ||||
| 	len += Format(query[len], sizeof(query)-len, "SELECT a.id, a.authtype, a.identity, a.password, a.flags, a.name, COUNT(ag.group_id), immunity"); | ||||
| @ -511,22 +504,21 @@ FetchUser(Handle:db, client) | ||||
| 	 */	 | ||||
| 	PlayerSeq[client] = ++g_sequence; | ||||
| 	 | ||||
| 	new Handle:pk; | ||||
| 	pk = CreateDataPack(); | ||||
| 	WritePackCell(pk, client); | ||||
| 	WritePackCell(pk, PlayerSeq[client]); | ||||
| 	WritePackString(pk, query); | ||||
| 	DataPack pk = new DataPack(); | ||||
| 	pk.WriteCell(client); | ||||
| 	pk.WriteCell(PlayerSeq[client]); | ||||
| 	pk.WriteString(query); | ||||
| 	 | ||||
| #if defined _DEBUG | ||||
| 	PrintToServer("Sending user query: %s", query); | ||||
| #endif | ||||
| 	 | ||||
| 	SQL_TQuery(db, OnReceiveUser, query, pk, DBPrio_High); | ||||
| 	db.Query(OnReceiveUser, query, pk, DBPrio_High); | ||||
| } | ||||
| 
 | ||||
| FetchUsersWeCan(Handle:db) | ||||
| FetchUsersWeCan(Database db) | ||||
| { | ||||
| 	for (new i=1; i<=MaxClients; i++) | ||||
| 	for (int i=1; i<=MaxClients; i++) | ||||
| 	{ | ||||
| 		if (PlayerAuth[i] && GetUserAdmin(i) == INVALID_ADMIN_ID) | ||||
| 		{ | ||||
| @ -541,15 +533,15 @@ FetchUsersWeCan(Handle:db) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| public OnReceiveGroupImmunity(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| public void OnReceiveGroupImmunity(Database db, DBResultSet rs, const char[] error, any data) | ||||
| { | ||||
| 	new Handle:pk = Handle:data; | ||||
| 	ResetPack(pk); | ||||
| 	DataPack pk = view_as<DataPack>(data); | ||||
| 	pk.Reset(); | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Check if this is the latest result request. | ||||
| 	 */ | ||||
| 	new sequence = ReadPackCell(pk); | ||||
| 	int sequence = pk.ReadCell(); | ||||
| 	if (RebuildCachePart[_:AdminCache_Groups] != sequence) | ||||
| 	{ | ||||
| 		/* Discard everything, since we're out of sequence. */ | ||||
| @ -560,10 +552,10 @@ public OnReceiveGroupImmunity(Handle:owner, Handle:hndl, const String:error[], a | ||||
| 	/** | ||||
| 	 * If we need to use the results, make sure they succeeded. | ||||
| 	 */ | ||||
| 	if (hndl == null) | ||||
| 	if (rs == null) | ||||
| 	{ | ||||
| 		decl String:query[255]; | ||||
| 		ReadPackString(pk, query, sizeof(query));		 | ||||
| 		char query[255]; | ||||
| 		pk.ReadString(query, sizeof(query));		 | ||||
| 		LogError("SQL error receiving group immunity: %s", error); | ||||
| 		LogError("Query dump: %s", query); | ||||
| 		delete pk;	 | ||||
| @ -573,14 +565,14 @@ public OnReceiveGroupImmunity(Handle:owner, Handle:hndl, const String:error[], a | ||||
| 	/* We're done with the pack forever. */ | ||||
| 	delete pk; | ||||
| 	 | ||||
| 	while (SQL_FetchRow(hndl)) | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		decl String:group1[80]; | ||||
| 		decl String:group2[80]; | ||||
| 		new GroupId:gid1, GroupId:gid2; | ||||
| 		char group1[80]; | ||||
| 		char group2[80]; | ||||
| 		GroupId gid1, gid2; | ||||
| 		 | ||||
| 		SQL_FetchString(hndl, 0, group1, sizeof(group1)); | ||||
| 		SQL_FetchString(hndl, 1, group2, sizeof(group2)); | ||||
| 		rs.FetchString(0, group1, sizeof(group1)); | ||||
| 		rs.FetchString(1, group2, sizeof(group2)); | ||||
| 		 | ||||
| 		if (((gid1 = FindAdmGroup(group1)) == INVALID_GROUP_ID) | ||||
| 			|| (gid2 = FindAdmGroup(group2)) == INVALID_GROUP_ID) | ||||
| @ -598,15 +590,15 @@ public OnReceiveGroupImmunity(Handle:owner, Handle:hndl, const String:error[], a | ||||
| 	RebuildCachePart[_:AdminCache_Groups] = 0; | ||||
| } | ||||
| 
 | ||||
| public OnReceiveGroupOverrides(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| public OnReceiveGroupOverrides(Database db, DBResultSet rs, const char[] error, any data) | ||||
| { | ||||
| 	new Handle:pk = Handle:data; | ||||
| 	ResetPack(pk); | ||||
| 	DataPack pk = view_as<DataPack>(data); | ||||
| 	pk.Reset(); | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Check if this is the latest result request. | ||||
| 	 */ | ||||
| 	new sequence = ReadPackCell(pk); | ||||
| 	int sequence = pk.ReadCell(); | ||||
| 	if (RebuildCachePart[_:AdminCache_Groups] != sequence) | ||||
| 	{ | ||||
| 		/* Discard everything, since we're out of sequence. */ | ||||
| @ -617,10 +609,10 @@ public OnReceiveGroupOverrides(Handle:owner, Handle:hndl, const String:error[], | ||||
| 	/** | ||||
| 	 * If we need to use the results, make sure they succeeded. | ||||
| 	 */ | ||||
| 	if (hndl == null) | ||||
| 	if (rs == null) | ||||
| 	{ | ||||
| 		decl String:query[255]; | ||||
| 		ReadPackString(pk, query, sizeof(query));		 | ||||
| 		char query[255]; | ||||
| 		pk.ReadString(query, sizeof(query));		 | ||||
| 		LogError("SQL error receiving group overrides: %s", error); | ||||
| 		LogError("Query dump: %s", query); | ||||
| 		delete pk;	 | ||||
| @ -630,17 +622,17 @@ public OnReceiveGroupOverrides(Handle:owner, Handle:hndl, const String:error[], | ||||
| 	/** | ||||
| 	 * Fetch the overrides. | ||||
| 	 */ | ||||
| 	decl String:name[80]; | ||||
| 	decl String:type[16]; | ||||
| 	decl String:command[64]; | ||||
| 	decl String:access[16]; | ||||
| 	new GroupId:gid; | ||||
| 	while (SQL_FetchRow(hndl)) | ||||
| 	char name[80]; | ||||
| 	char type[16]; | ||||
| 	char command[64]; | ||||
| 	char access[16]; | ||||
| 	GroupId gid; | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		SQL_FetchString(hndl, 0, name, sizeof(name)); | ||||
| 		SQL_FetchString(hndl, 1, type, sizeof(type)); | ||||
| 		SQL_FetchString(hndl, 2, command, sizeof(command)); | ||||
| 		SQL_FetchString(hndl, 3, access, sizeof(access)); | ||||
| 		rs.FetchString(0, name, sizeof(name)); | ||||
| 		rs.FetchString(1, type, sizeof(type)); | ||||
| 		rs.FetchString(2, command, sizeof(command)); | ||||
| 		rs.FetchString(3, access, sizeof(access)); | ||||
| 		 | ||||
| 		/* Find the group.  This is actually faster than doing the ID lookup. */ | ||||
| 		if ((gid = FindAdmGroup(name)) == INVALID_GROUP_ID) | ||||
| @ -649,13 +641,13 @@ public OnReceiveGroupOverrides(Handle:owner, Handle:hndl, const String:error[], | ||||
| 			continue; | ||||
| 		} | ||||
| 		 | ||||
| 		new OverrideType:o_type = Override_Command; | ||||
| 		OverrideType o_type = Override_Command; | ||||
| 		if (StrEqual(type, "group")) | ||||
| 		{ | ||||
| 			o_type = Override_CommandGroup; | ||||
| 		} | ||||
| 				 | ||||
| 		new OverrideRule:o_rule = Command_Deny; | ||||
| 		OverrideRule o_rule = Command_Deny; | ||||
| 		if (StrEqual(access, "allow")) | ||||
| 		{ | ||||
| 			o_rule = Command_Allow; | ||||
| @ -671,28 +663,28 @@ public OnReceiveGroupOverrides(Handle:owner, Handle:hndl, const String:error[], | ||||
| 	/** | ||||
| 	 * It's time to get the group immunity list. | ||||
| 	 */ | ||||
| 	new len = 0; | ||||
| 	decl String:query[256]; | ||||
| 	int len = 0; | ||||
| 	char query[256]; | ||||
| 	len += Format(query[len], sizeof(query)-len, "SELECT g1.name, g2.name FROM sm_group_immunity gi"); | ||||
| 	len += Format(query[len], sizeof(query)-len, " LEFT JOIN sm_groups g1 ON g1.id = gi.group_id "); | ||||
| 	len += Format(query[len], sizeof(query)-len, " LEFT JOIN sm_groups g2 ON g2.id = gi.other_id"); | ||||
| 
 | ||||
| 	ResetPack(pk); | ||||
| 	WritePackCell(pk, sequence); | ||||
| 	WritePackString(pk, query); | ||||
| 	pk.Reset(); | ||||
| 	pk.WriteCell(sequence); | ||||
| 	pk.WriteString(query); | ||||
| 	 | ||||
| 	SQL_TQuery(owner, OnReceiveGroupImmunity, query, pk, DBPrio_High); | ||||
| 	db.Query(OnReceiveGroupImmunity, query, pk, DBPrio_High); | ||||
| } | ||||
| 
 | ||||
| public OnReceiveGroups(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| public OnReceiveGroups(Database db, DBResultSet rs, const char[] error, any data) | ||||
| { | ||||
| 	new Handle:pk = Handle:data; | ||||
| 	ResetPack(pk); | ||||
| 	DataPack pk = view_as<DataPack>(data); | ||||
| 	pk.Reset(); | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Check if this is the latest result request. | ||||
| 	 */ | ||||
| 	new sequence = ReadPackCell(pk); | ||||
| 	int sequence = pk.ReadCell(); | ||||
| 	if (RebuildCachePart[_:AdminCache_Groups] != sequence) | ||||
| 	{ | ||||
| 		/* Discard everything, since we're out of sequence. */ | ||||
| @ -703,10 +695,10 @@ public OnReceiveGroups(Handle:owner, Handle:hndl, const String:error[], any:data | ||||
| 	/** | ||||
| 	 * If we need to use the results, make sure they succeeded. | ||||
| 	 */ | ||||
| 	if (hndl == null) | ||||
| 	if (rs == null) | ||||
| 	{ | ||||
| 		decl String:query[255]; | ||||
| 		ReadPackString(pk, query, sizeof(query)); | ||||
| 		char query[255]; | ||||
| 		pk.ReadString(query, sizeof(query)); | ||||
| 		LogError("SQL error receiving groups: %s", error); | ||||
| 		LogError("Query dump: %s", query); | ||||
| 		delete pk; | ||||
| @ -716,29 +708,29 @@ public OnReceiveGroups(Handle:owner, Handle:hndl, const String:error[], any:data | ||||
| 	/** | ||||
| 	 * Now start fetching groups. | ||||
| 	 */ | ||||
| 	decl String:flags[32]; | ||||
| 	decl String:name[128]; | ||||
| 	new immunity; | ||||
| 	while (SQL_FetchRow(hndl)) | ||||
| 	char flags[32]; | ||||
| 	char name[128]; | ||||
| 	int immunity; | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		SQL_FetchString(hndl, 0, flags, sizeof(flags)); | ||||
| 		SQL_FetchString(hndl, 1, name, sizeof(name)); | ||||
| 		immunity = SQL_FetchInt(hndl, 2); | ||||
| 		rs.FetchString(0, flags, sizeof(flags)); | ||||
| 		rs.FetchString(1, name, sizeof(name)); | ||||
| 		immunity = rs.FetchInt(2); | ||||
| 		 | ||||
| #if defined _DEBUG | ||||
| 		PrintToServer("Adding group (%d, %s, %s)", immunity, flags, name); | ||||
| #endif | ||||
| 		 | ||||
| 		/* Find or create the group */ | ||||
| 		new GroupId:gid; | ||||
| 		GroupId gid; | ||||
| 		if ((gid = FindAdmGroup(name)) == INVALID_GROUP_ID) | ||||
| 		{ | ||||
| 			gid = CreateAdmGroup(name); | ||||
| 		} | ||||
| 
 | ||||
| 		/* Add flags from the database to the group */ | ||||
| 		new num_flag_chars = strlen(flags); | ||||
| 		for (new i=0; i<num_flag_chars; i++) | ||||
| 		int num_flag_chars = strlen(flags); | ||||
| 		for (int i=0; i<num_flag_chars; i++) | ||||
| 		{ | ||||
| 			decl AdminFlag:flag; | ||||
| 			if (!FindFlagByChar(flags[i], flag)) | ||||
| @ -754,41 +746,40 @@ public OnReceiveGroups(Handle:owner, Handle:hndl, const String:error[], any:data | ||||
| 	/** | ||||
| 	 * It's time to get the group override list. | ||||
| 	 */ | ||||
| 	decl String:query[255]; | ||||
| 	char query[255]; | ||||
| 	Format(query,  | ||||
| 		sizeof(query),  | ||||
| 		"SELECT g.name, og.type, og.name, og.access FROM sm_group_overrides og JOIN sm_groups g ON og.group_id = g.id ORDER BY g.id DESC"); | ||||
| 
 | ||||
| 	ResetPack(pk); | ||||
| 	WritePackCell(pk, sequence); | ||||
| 	WritePackString(pk, query); | ||||
| 	pk.Reset(); | ||||
| 	pk.WriteCell(sequence); | ||||
| 	pk.WriteString(query); | ||||
| 	 | ||||
| 	SQL_TQuery(owner, OnReceiveGroupOverrides, query, pk, DBPrio_High); | ||||
| 	db.Query(OnReceiveGroupOverrides, query, pk, DBPrio_High); | ||||
| } | ||||
| 
 | ||||
| FetchGroups(Handle:db, sequence) | ||||
| void FetchGroups(Database db, sequence) | ||||
| { | ||||
| 	decl String:query[255]; | ||||
| 	new Handle:pk; | ||||
| 	char query[255]; | ||||
| 	 | ||||
| 	Format(query, sizeof(query), "SELECT flags, name, immunity_level FROM sm_groups"); | ||||
| 
 | ||||
| 	pk = CreateDataPack(); | ||||
| 	WritePackCell(pk, sequence); | ||||
| 	WritePackString(pk, query); | ||||
| 	DataPack pk = new DataPack(); | ||||
| 	pk.WriteCell(sequence); | ||||
| 	pk.WriteString(query); | ||||
| 	 | ||||
| 	SQL_TQuery(db, OnReceiveGroups, query, pk, DBPrio_High); | ||||
| 	db.Query(OnReceiveGroups, query, pk, DBPrio_High); | ||||
| } | ||||
| 
 | ||||
| public OnReceiveOverrides(Handle:owner, Handle:hndl, const String:error[], any:data) | ||||
| public void OnReceiveOverrides(Database db, DBResultSet rs, const char[] error, any data) | ||||
| { | ||||
| 	new Handle:pk = Handle:data; | ||||
| 	ResetPack(pk); | ||||
| 	DataPack pk = view_as<DataPack>(data); | ||||
| 	pk.Reset(); | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Check if this is the latest result request. | ||||
| 	 */ | ||||
| 	new sequence = ReadPackCell(pk); | ||||
| 	int sequence = pk.ReadCell(); | ||||
| 	if (RebuildCachePart[_:AdminCache_Overrides] != sequence) | ||||
| 	{ | ||||
| 		/* Discard everything, since we're out of sequence. */ | ||||
| @ -799,10 +790,10 @@ public OnReceiveOverrides(Handle:owner, Handle:hndl, const String:error[], any:d | ||||
| 	/** | ||||
| 	 * If we need to use the results, make sure they succeeded. | ||||
| 	 */ | ||||
| 	if (hndl == null) | ||||
| 	if (rs == null) | ||||
| 	{ | ||||
| 		decl String:query[255]; | ||||
| 		ReadPackString(pk, query, sizeof(query)); | ||||
| 		char query[255]; | ||||
| 		pk.ReadString(query, sizeof(query)); | ||||
| 		LogError("SQL error receiving overrides: %s", error); | ||||
| 		LogError("Query dump: %s", query); | ||||
| 		delete pk; | ||||
| @ -814,15 +805,15 @@ public OnReceiveOverrides(Handle:owner, Handle:hndl, const String:error[], any:d | ||||
| 	 */ | ||||
| 	delete pk; | ||||
| 	 | ||||
| 	decl String:type[64]; | ||||
| 	decl String:name[64]; | ||||
| 	decl String:flags[32]; | ||||
| 	new flag_bits; | ||||
| 	while (SQL_FetchRow(hndl)) | ||||
| 	char type[64]; | ||||
| 	char name[64]; | ||||
| 	char flags[32]; | ||||
| 	int flag_bits; | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		SQL_FetchString(hndl, 0, type, sizeof(type)); | ||||
| 		SQL_FetchString(hndl, 1, name, sizeof(name)); | ||||
| 		SQL_FetchString(hndl, 2, flags, sizeof(flags)); | ||||
| 		rs.FetchString(0, type, sizeof(type)); | ||||
| 		rs.FetchString(1, name, sizeof(name)); | ||||
| 		rs.FetchString(2, flags, sizeof(flags)); | ||||
| 		 | ||||
| #if defined _DEBUG | ||||
| 		PrintToServer("Adding override (%s, %s, %s)", type, name, flags); | ||||
| @ -841,17 +832,16 @@ public OnReceiveOverrides(Handle:owner, Handle:hndl, const String:error[], any:d | ||||
| 	RebuildCachePart[_:AdminCache_Overrides] = 0; | ||||
| } | ||||
| 
 | ||||
| FetchOverrides(Handle:db, sequence) | ||||
| void FetchOverrides(Database db, sequence) | ||||
| { | ||||
| 	decl String:query[255]; | ||||
| 	new Handle:pk; | ||||
| 	char query[255]; | ||||
| 	 | ||||
| 	Format(query, sizeof(query), "SELECT type, name, flags FROM sm_overrides"); | ||||
| 
 | ||||
| 	pk = CreateDataPack(); | ||||
| 	WritePackCell(pk, sequence); | ||||
| 	WritePackString(pk, query); | ||||
| 	DataPack pk = new DataPack(); | ||||
| 	pk.WriteCell(sequence); | ||||
| 	pk.WriteString(query); | ||||
| 	 | ||||
| 	SQL_TQuery(db, OnReceiveOverrides, query, pk, DBPrio_High); | ||||
| 	db.Query(OnReceiveOverrides, query, pk, DBPrio_High); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -64,10 +64,10 @@ public OnPluginStart() | ||||
| 	RegServerCmd("sm_update_adm_tables", Command_UpdateTables); | ||||
| } | ||||
| 
 | ||||
| Handle:Connect() | ||||
| Database Connect() | ||||
| { | ||||
| 	decl String:error[255]; | ||||
| 	new Handle:db; | ||||
| 	char error[255]; | ||||
| 	Database db; | ||||
| 	 | ||||
| 	if (SQL_CheckConfig("admins")) | ||||
| 	{ | ||||
| @ -157,16 +157,16 @@ CreateSQLite(client, Handle:db) | ||||
| 
 | ||||
| public Action:Command_CreateTables(args) | ||||
| { | ||||
| 	new client = 0; | ||||
| 	new Handle:db = Connect(); | ||||
| 	int client = 0; | ||||
| 	Database db = Connect(); | ||||
| 	if (db == null) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "Could not connect to database"); | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 
 | ||||
| 	new String:ident[16]; | ||||
| 	SQL_ReadDriver(db, ident, sizeof(ident)); | ||||
| 	char ident[16]; | ||||
| 	db.Driver.GetIdentifier(ident, sizeof(ident)); | ||||
| 
 | ||||
| 	if (strcmp(ident, "mysql") == 0) | ||||
| 	{ | ||||
| @ -184,21 +184,21 @@ public Action:Command_CreateTables(args) | ||||
| 
 | ||||
| bool:GetUpdateVersion(client, Handle:db, versions[4]) | ||||
| { | ||||
| 	decl String:query[256]; | ||||
| 	new Handle:hQuery; | ||||
| 	char query[256]; | ||||
| 	DBResultSet rs; | ||||
| 
 | ||||
| 	Format(query, sizeof(query), "SELECT cfg_value FROM sm_config WHERE cfg_key = 'admin_version'"); | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		DoError(client, db, query, "Version lookup query failed"); | ||||
| 		return false; | ||||
| 	} | ||||
| 	if (SQL_FetchRow(hQuery)) | ||||
| 	if (rs.FetchRow()) | ||||
| 	{ | ||||
| 		decl String:version_string[255]; | ||||
| 		SQL_FetchString(hQuery, 0, version_string, sizeof(version_string)); | ||||
| 		char version_string[255]; | ||||
| 		rs.FetchString(0, version_string, sizeof(version_string)); | ||||
| 
 | ||||
| 		decl String:version_numbers[4][12]; | ||||
| 		char version_numbers[4][12]; | ||||
| 		if (ExplodeString(version_string, ".", version_numbers, 4, 12) == 4) | ||||
| 		{ | ||||
| 			for (new i = 0; i < 4; i++) | ||||
| @ -208,7 +208,7 @@ bool:GetUpdateVersion(client, Handle:db, versions[4]) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 
 | ||||
| 	if (current_version[3] < versions[3]) | ||||
| 	{ | ||||
| @ -226,21 +226,21 @@ bool:GetUpdateVersion(client, Handle:db, versions[4]) | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| UpdateSQLite(client, Handle:db) | ||||
| UpdateSQLite(client, Database db) | ||||
| { | ||||
| 	decl String:query[512]; | ||||
| 	new Handle:hQuery; | ||||
| 	char query[512]; | ||||
| 	DBResultSet rs; | ||||
| 
 | ||||
| 	Format(query, sizeof(query), "SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'sm_config'"); | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		DoError(client, db, query, "Table lookup query failed"); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	new bool:found = SQL_FetchRow(hQuery); | ||||
| 	bool found = rs.FetchRow(); | ||||
| 
 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 
 | ||||
| 	new versions[4]; | ||||
| 	if (found) | ||||
| @ -256,7 +256,7 @@ UpdateSQLite(client, Handle:db) | ||||
| 	 */ | ||||
| 	if (versions[3] < SCHEMA_UPGRADE_1) | ||||
| 	{ | ||||
| 		new String:queries[8][] =  | ||||
| 		char queries[8][] =  | ||||
| 		{ | ||||
| 			"ALTER TABLE sm_admins ADD immunity INTEGER DEFAULT 0 NOT NULL", | ||||
| 			"CREATE TABLE _sm_groups_temp (id INTEGER PRIMARY KEY AUTOINCREMENT, flags varchar(30) NOT NULL, name varchar(120) NOT NULL, immunity_level INTEGER DEFAULT 0 NOT NULL)", | ||||
| @ -292,29 +292,29 @@ UpdateSQLite(client, Handle:db) | ||||
| 	ReplyToCommand(client, "[SM] Your tables are now up to date."); | ||||
| } | ||||
| 
 | ||||
| UpdateMySQL(client, Handle:db) | ||||
| UpdateMySQL(client, Database db) | ||||
| { | ||||
| 	decl String:query[512]; | ||||
| 	new Handle:hQuery; | ||||
| 	char query[512]; | ||||
| 	DBResultSet rs; | ||||
| 	 | ||||
| 	Format(query, sizeof(query), "SHOW TABLES"); | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		DoError(client, db, query, "Table lookup query failed"); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	decl String:table[64]; | ||||
| 	new bool:found = false; | ||||
| 	while (SQL_FetchRow(hQuery)) | ||||
| 	char table[64]; | ||||
| 	bool found = false; | ||||
| 	while (rs.FetchRow()) | ||||
| 	{ | ||||
| 		SQL_FetchString(hQuery, 0, table, sizeof(table)); | ||||
| 		rs.FetchString(0, table, sizeof(table)); | ||||
| 		if (strcmp(table, "sm_config") == 0) | ||||
| 		{ | ||||
| 			found = true; | ||||
| 		} | ||||
| 	} | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 
 | ||||
| 	new versions[4]; | ||||
| 
 | ||||
| @ -328,7 +328,7 @@ UpdateMySQL(client, Handle:db) | ||||
| 	 */ | ||||
| 	if (versions[3] < SCHEMA_UPGRADE_1) | ||||
| 	{ | ||||
| 		new String:queries[6][] =  | ||||
| 		char queries[6][] =  | ||||
| 		{ | ||||
| 			"CREATE TABLE IF NOT EXISTS sm_config (cfg_key varchar(32) NOT NULL, cfg_value varchar(255) NOT NULL, PRIMARY KEY (cfg_key))", | ||||
| 			"ALTER TABLE sm_admins ADD immunity INT UNSIGNED NOT NULL", | ||||
| @ -346,7 +346,7 @@ UpdateMySQL(client, Handle:db) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		decl String:upgr[48]; | ||||
| 		char upgr[48]; | ||||
| 		Format(upgr, sizeof(upgr), "1.0.0.%d", SCHEMA_UPGRADE_1); | ||||
| 
 | ||||
| 		Format(query, sizeof(query), "INSERT INTO sm_config (cfg_key, cfg_value) VALUES ('admin_version', '%s') ON DUPLICATE KEY UPDATE cfg_value = '%s'", upgr, upgr); | ||||
| @ -364,15 +364,15 @@ UpdateMySQL(client, Handle:db) | ||||
| public Action:Command_UpdateTables(args) | ||||
| { | ||||
| 	new client = 0; | ||||
| 	new Handle:db = Connect(); | ||||
| 	Database db = Connect(); | ||||
| 	if (db == null) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "Could not connect to database"); | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 
 | ||||
| 	new String:ident[16]; | ||||
| 	SQL_ReadDriver(db, ident, sizeof(ident)); | ||||
| 	char ident[16]; | ||||
| 	db.Driver.GetIdentifier(ident, sizeof(ident)); | ||||
| 
 | ||||
| 	if (strcmp(ident, "mysql") == 0) | ||||
| 	{ | ||||
| @ -396,7 +396,7 @@ public Action:Command_SetAdminGroups(client, args) | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:authtype[16]; | ||||
| 	char authtype[16]; | ||||
| 	GetCmdArg(1, authtype, sizeof(authtype)); | ||||
| 	 | ||||
| 	if (!StrEqual(authtype, "steam") | ||||
| @ -407,42 +407,42 @@ public Action:Command_SetAdminGroups(client, args) | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	new Handle:db = Connect(); | ||||
| 	Database db = Connect(); | ||||
| 	if (db == null) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "Could not connect to database"); | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:identity[65]; | ||||
| 	decl String:safe_identity[140]; | ||||
| 	char identity[65]; | ||||
| 	char safe_identity[140]; | ||||
| 	GetCmdArg(2, identity, sizeof(identity)); | ||||
| 	SQL_EscapeString(db, identity, safe_identity, sizeof(safe_identity)); | ||||
| 	db.Escape(identity, safe_identity, sizeof(safe_identity)); | ||||
| 	 | ||||
| 	decl String:query[255]; | ||||
| 	char query[255]; | ||||
| 	Format(query,  | ||||
| 		sizeof(query), | ||||
| 		"SELECT id FROM sm_admins WHERE authtype = '%s' AND identity = '%s'", | ||||
| 		authtype, | ||||
| 		safe_identity); | ||||
| 		 | ||||
| 	new Handle:hQuery; | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	DBResultSet rs; | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		return DoError(client, db, query, "Admin lookup query failed"); | ||||
| 	} | ||||
| 	 | ||||
| 	if (!SQL_FetchRow(hQuery)) | ||||
| 	if (!rs.FetchRow()) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "SQL Admin not found"); | ||||
| 		delete hQuery; | ||||
| 		delete rs; | ||||
| 		delete db; | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	new id = SQL_FetchInt(hQuery, 0); | ||||
| 	int id = rs.FetchInt(0); | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * First delete all of the user's existing groups. | ||||
| @ -455,13 +455,13 @@ public Action:Command_SetAdminGroups(client, args) | ||||
| 	 | ||||
| 	if (args < 3) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "SQL Admin groups reset"); | ||||
| 		delete db; | ||||
| 		ReplyToCommand(client, "[SM] %t", "SQL Admin groups reset"); | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:error[256]; | ||||
| 	new Handle:hAddQuery, Handle:hFindQuery; | ||||
| 	char error[256]; | ||||
| 	DBStatement hAddQuery, hFindQuery; | ||||
| 	 | ||||
| 	Format(query, sizeof(query), "SELECT id FROM sm_groups WHERE name = ?"); | ||||
| 	if ((hFindQuery = SQL_PrepareQuery(db, query, error, sizeof(error))) == null) | ||||
| @ -479,21 +479,21 @@ public Action:Command_SetAdminGroups(client, args) | ||||
| 		return DoStmtError(client, db, query, error, "Add admin group prepare failed"); | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:name[80]; | ||||
| 	new inherit_order = 0; | ||||
| 	char name[80]; | ||||
| 	int inherit_order = 0; | ||||
| 	for (new i=3; i<=args; i++) | ||||
| 	{ | ||||
| 		GetCmdArg(i, name, sizeof(name)); | ||||
| 		 | ||||
| 		SQL_BindParamString(hFindQuery, 0, name, false); | ||||
| 		hFindQuery.BindString(0, name, false); | ||||
| 		if (!SQL_Execute(hFindQuery) || !SQL_FetchRow(hFindQuery)) | ||||
| 		{ | ||||
| 			ReplyToCommand(client, "[SM] %t", "SQL Group X not found", name); | ||||
| 		} else { | ||||
| 			new gid = SQL_FetchInt(hFindQuery, 0); | ||||
| 			 | ||||
| 			SQL_BindParamInt(hAddQuery, 0, gid); | ||||
| 			SQL_BindParamInt(hAddQuery, 1, ++inherit_order); | ||||
| 			hAddQuery.BindInt(0, gid); | ||||
| 			hAddQuery.BindInt(1, ++inherit_order); | ||||
| 			if (!SQL_Execute(hAddQuery)) | ||||
| 			{ | ||||
| 				ReplyToCommand(client, "[SM] %t", "SQL Group X failed to bind", name); | ||||
| @ -524,48 +524,47 @@ public Action:Command_DelGroup(client, args) | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 
 | ||||
| 	new Handle:db = Connect(); | ||||
| 	Database db = Connect(); | ||||
| 	if (db == null) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "Could not connect to database"); | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	new len; | ||||
| 	decl String:name[80]; | ||||
| 	decl String:safe_name[180]; | ||||
| 	char name[80]; | ||||
| 	char safe_name[180]; | ||||
| 	GetCmdArgString(name, sizeof(name)); | ||||
| 	 | ||||
| 	/* Strip quotes in case the user tries to use them */ | ||||
| 	len = strlen(name); | ||||
| 	int len = strlen(name); | ||||
| 	if (len > 1 && (name[0] == '"' && name[len-1] == '"')) | ||||
| 	{ | ||||
| 		name[--len] = '\0'; | ||||
| 		SQL_EscapeString(db, name[1], safe_name, sizeof(safe_name)); | ||||
| 		db.Escape(name[1], safe_name, sizeof(safe_name)); | ||||
| 	} else { | ||||
| 		SQL_EscapeString(db, name, safe_name, sizeof(safe_name)); | ||||
| 		db.Escape(name, safe_name, sizeof(safe_name)); | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:query[256]; | ||||
| 	char query[256]; | ||||
| 	 | ||||
| 	new Handle:hQuery; | ||||
| 	DBResultSet rs; | ||||
| 	Format(query, sizeof(query), "SELECT id FROM sm_groups WHERE name = '%s'", safe_name); | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		return DoError(client, db, query, "Group retrieval query failed"); | ||||
| 	} | ||||
| 	 | ||||
| 	if (!SQL_FetchRow(hQuery)) | ||||
| 	if (!rs.FetchRow()) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "SQL Group not found"); | ||||
| 		delete hQuery; | ||||
| 		delete rs; | ||||
| 		delete db; | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	new id = SQL_FetchInt(hQuery, 0); | ||||
| 	int id = rs.FetchInt(0); | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 	 | ||||
| 	/* Delete admin inheritance for this group */ | ||||
| 	Format(query, sizeof(query), "DELETE FROM sm_admins_groups WHERE group_id = %d", id); | ||||
| @ -598,7 +597,6 @@ public Action:Command_DelGroup(client, args) | ||||
| 	ReplyToCommand(client, "[SM] %t", "SQL Group deleted"); | ||||
| 	 | ||||
| 	delete db; | ||||
| 	 | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
| 
 | ||||
| @ -622,40 +620,40 @@ public Action:Command_AddGroup(client, args) | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	new Handle:db = Connect(); | ||||
| 	Database db = Connect(); | ||||
| 	if (db == null) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "Could not connect to database"); | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:name[64]; | ||||
| 	decl String:safe_name[64]; | ||||
| 	char name[64]; | ||||
| 	char safe_name[64]; | ||||
| 	GetCmdArg(1, name, sizeof(name)); | ||||
| 	SQL_EscapeString(db, name, safe_name, sizeof(safe_name)); | ||||
| 	db.Escape(name, safe_name, sizeof(safe_name)); | ||||
| 	 | ||||
| 	new Handle:hQuery; | ||||
| 	decl String:query[256]; | ||||
| 	DBResultSet rs; | ||||
| 	char query[256]; | ||||
| 	Format(query, sizeof(query), "SELECT id FROM sm_groups WHERE name = '%s'", safe_name); | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		return DoError(client, db, query, "Group retrieval query failed"); | ||||
| 	} | ||||
| 	 | ||||
| 	if (SQL_GetRowCount(hQuery) > 0) | ||||
| 	if (rs.RowCount > 0) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "SQL Group already exists"); | ||||
| 		delete hQuery; | ||||
| 		delete rs; | ||||
| 		delete db; | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 	 | ||||
| 	decl String:flags[30]; | ||||
| 	decl String:safe_flags[64]; | ||||
| 	char flags[30]; | ||||
| 	char safe_flags[64]; | ||||
| 	GetCmdArg(2, flags, sizeof(safe_flags)); | ||||
| 	SQL_EscapeString(db, flags, safe_flags, sizeof(safe_flags)); | ||||
| 	db.Escape(flags, safe_flags, sizeof(safe_flags)); | ||||
| 	 | ||||
| 	Format(query,  | ||||
| 		sizeof(query), | ||||
| @ -672,7 +670,6 @@ public Action:Command_AddGroup(client, args) | ||||
| 	ReplyToCommand(client, "[SM] %t", "SQL Group added"); | ||||
| 	 | ||||
| 	delete db; | ||||
| 		 | ||||
| 	return Plugin_Handled; | ||||
| }	 | ||||
| 
 | ||||
| @ -685,7 +682,7 @@ public Action:Command_DelAdmin(client, args) | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:authtype[16]; | ||||
| 	char authtype[16]; | ||||
| 	GetCmdArg(1, authtype, sizeof(authtype)); | ||||
| 	 | ||||
| 	if (!StrEqual(authtype, "steam") | ||||
| @ -696,42 +693,43 @@ public Action:Command_DelAdmin(client, args) | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	new Handle:db = Connect(); | ||||
| 	Database db = Connect(); | ||||
| 	if (db == null) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "Could not connect to database"); | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:identity[65]; | ||||
| 	decl String:safe_identity[140]; | ||||
| 	char identity[65]; | ||||
| 	char safe_identity[140]; | ||||
| 	GetCmdArg(2, identity, sizeof(identity)); | ||||
| 	SQL_EscapeString(db, identity, safe_identity, sizeof(safe_identity)); | ||||
| 	db.Escape(identity, safe_identity, sizeof(safe_identity)); | ||||
| 	 | ||||
| 	decl String:query[255]; | ||||
| 	char query[255]; | ||||
| 	Format(query,  | ||||
| 		sizeof(query), | ||||
| 		"SELECT id FROM sm_admins WHERE authtype = '%s' AND identity = '%s'", | ||||
| 		authtype, | ||||
| 		safe_identity); | ||||
| 		 | ||||
| 	new Handle:hQuery; | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	DBResultSet rs; | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		delete db; | ||||
| 		return DoError(client, db, query, "Admin lookup query failed"); | ||||
| 	} | ||||
| 	 | ||||
| 	if (!SQL_FetchRow(hQuery)) | ||||
| 	if (!rs.FetchRow()) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "SQL Admin not found"); | ||||
| 		delete hQuery; | ||||
| 		delete rs; | ||||
| 		delete db; | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	new id = SQL_FetchInt(hQuery, 0); | ||||
| 	int id = rs.FetchInt(0); | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 	 | ||||
| 	/* Delete group bindings */ | ||||
| 	Format(query, sizeof(query), "DELETE FROM sm_admins_groups WHERE admin_id = %d", id); | ||||
| @ -762,7 +760,7 @@ public Action:Command_AddAdmin(client, args) | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:authtype[16]; | ||||
| 	char authtype[16]; | ||||
| 	GetCmdArg(2, authtype, sizeof(authtype)); | ||||
| 	 | ||||
| 	if (!StrEqual(authtype, "steam") | ||||
| @ -773,10 +771,10 @@ public Action:Command_AddAdmin(client, args) | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 
 | ||||
| 	new immunity; | ||||
| 	int immunity; | ||||
| 	if (args >= 5) | ||||
| 	{ | ||||
| 		new String:arg5[32]; | ||||
| 		char arg5[32]; | ||||
| 		GetCmdArg(5, arg5, sizeof(arg5)); | ||||
| 		if (!StringToIntEx(arg5, immunity)) | ||||
| 		{ | ||||
| @ -785,59 +783,59 @@ public Action:Command_AddAdmin(client, args) | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	decl String:identity[65]; | ||||
| 	decl String:safe_identity[140]; | ||||
| 	char identity[65]; | ||||
| 	char safe_identity[140]; | ||||
| 	GetCmdArg(3, identity, sizeof(identity)); | ||||
| 	 | ||||
| 	decl String:query[256]; | ||||
| 	new Handle:hQuery; | ||||
| 	new Handle:db = Connect(); | ||||
| 	char query[256]; | ||||
| 	Database db = Connect(); | ||||
| 	if (db == null) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "Could not connect to database"); | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	SQL_EscapeString(db, identity, safe_identity, sizeof(safe_identity)); | ||||
| 	db.Escape(identity, safe_identity, sizeof(safe_identity)); | ||||
| 
 | ||||
| 	DBResultSet rs; | ||||
| 	 | ||||
| 	Format(query, sizeof(query), "SELECT id FROM sm_admins WHERE authtype = '%s' AND identity = '%s'", authtype, identity); | ||||
| 	if ((hQuery = SQL_Query(db, query)) == null) | ||||
| 	if ((rs = SQL_Query(db, query)) == null) | ||||
| 	{ | ||||
| 		return DoError(client, db, query, "Admin retrieval query failed"); | ||||
| 	} | ||||
| 	 | ||||
| 	if (SQL_GetRowCount(hQuery) > 0) | ||||
| 	if (rs.RowCount > 0) | ||||
| 	{ | ||||
| 		ReplyToCommand(client, "[SM] %t", "SQL Admin already exists"); | ||||
| 		delete hQuery; | ||||
| 		delete rs; | ||||
| 		delete db; | ||||
| 		return Plugin_Handled; | ||||
| 	} | ||||
| 	 | ||||
| 	delete hQuery; | ||||
| 	delete rs; | ||||
| 	 | ||||
| 	decl String:alias[64]; | ||||
| 	decl String:safe_alias[140]; | ||||
| 	char alias[64]; | ||||
| 	char safe_alias[140]; | ||||
| 	GetCmdArg(1, alias, sizeof(alias)); | ||||
| 	SQL_EscapeString(db, alias, safe_alias, sizeof(safe_alias)); | ||||
| 	db.Escape(alias, safe_alias, sizeof(safe_alias)); | ||||
| 	 | ||||
| 	decl String:flags[30]; | ||||
| 	decl String:safe_flags[64]; | ||||
| 	char flags[30]; | ||||
| 	char safe_flags[64]; | ||||
| 	GetCmdArg(4, flags, sizeof(flags)); | ||||
| 	SQL_EscapeString(db, flags, safe_flags, sizeof(safe_flags)); | ||||
| 	db.Escape(flags, safe_flags, sizeof(safe_flags)); | ||||
| 	 | ||||
| 	decl String:password[32]; | ||||
| 	decl String:safe_password[80]; | ||||
| 	char password[32]; | ||||
| 	char safe_password[80]; | ||||
| 	if (args >= 6) | ||||
| 	{ | ||||
| 		GetCmdArg(6, password, sizeof(password)); | ||||
| 		SQL_EscapeString(db, password, safe_password, sizeof(safe_password)); | ||||
| 		db.Escape(password, safe_password, sizeof(safe_password)); | ||||
| 	} else { | ||||
| 		safe_password[0] = '\0'; | ||||
| 	} | ||||
| 	 | ||||
| 	new len = 0; | ||||
| 	len += Format(query[len], sizeof(query)-len, "INSERT INTO sm_admins (authtype, identity, password, flags, name, immunity) VALUES"); | ||||
| 	int len = Format(query, sizeof(query), "INSERT INTO sm_admins (authtype, identity, password, flags, name, immunity) VALUES"); | ||||
| 	if (safe_password[0] == '\0') | ||||
| 	{ | ||||
| 		len += Format(query[len], sizeof(query)-len, " ('%s', '%s', NULL, '%s', '%s', %d)", authtype, safe_identity, safe_flags, safe_alias, immunity); | ||||
| @ -853,7 +851,6 @@ public Action:Command_AddAdmin(client, args) | ||||
| 	ReplyToCommand(client, "[SM] %t", "SQL Admin added"); | ||||
| 	 | ||||
| 	delete db; | ||||
| 		 | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user