From a6daebe7d485622de6943818eabb8b9d03579b7c Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sun, 11 Sep 2005 18:37:55 +0000 Subject: [PATCH] Made SQL changes by Lazarus Long --- plugins/admin.sma | 170 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 146 insertions(+), 24 deletions(-) diff --git a/plugins/admin.sma b/plugins/admin.sma index 74e0bfd1..2660bc99 100755 --- a/plugins/admin.sma +++ b/plugins/admin.sma @@ -33,7 +33,7 @@ */ // Uncomment for SQL version -//#define USING_SQL +#define USING_SQL #include #include @@ -44,6 +44,12 @@ #define MAX_ADMINS 64 #define PLUGINNAME "AMX Mod X" +#define ADMIN_LOOKUP (1<<0) +#define ADMIN_NORMAL (1<<1) +#define ADMIN_STEAM (1<<2) +#define ADMIN_IPADDR (1<<3) +#define ADMIN_NAME (1<<4) + new g_aPassword[MAX_ADMINS][32] new g_aName[MAX_ADMINS][32] new g_aFlags[MAX_ADMINS] @@ -51,7 +57,8 @@ new g_aAccess[MAX_ADMINS] new g_aNum = 0 new g_cmdLoopback[16] -public plugin_init() { +public plugin_init() +{ #if defined USING_SQL register_plugin("Admin Base (SQL)",AMXX_VERSION_STR,"AMXX Dev Team") #else @@ -85,7 +92,7 @@ public plugin_init() { register_cvar("amx_sql_db","amx") register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG) - register_concmd("amx_addadmin", "addadminfn", ADMIN_CFG, " [password] - automatically add specified player as an admin to users.ini") + register_concmd("amx_addadmin", "addadminfn", ADMIN_CFG, " [password] [authtype] - automatically add specified player as an admin to users.ini") format( g_cmdLoopback, 15, "amxauth%c%c%c%c" , random_num('A','Z') , random_num('A','Z') ,random_num('A','Z'),random_num('A','Z') ) @@ -97,8 +104,8 @@ public plugin_init() { new configsDir[64] get_configsdir(configsDir, 63) server_cmd("exec %s/amxx.cfg", configsDir) // Execute main configuration file - server_cmd("exec %s/sql.cfg", configsDir) #if defined USING_SQL + server_cmd("exec %s/sql.cfg", configsDir) server_cmd("amx_sqladmins") #else format(configsDir, 63, "%s/users.ini", configsDir) @@ -106,16 +113,74 @@ public plugin_init() { #endif } -public addadminfn(id, level, cid) { +public addadminfn(id, level, cid) +{ if (!cmd_access(id, level, cid, 3)) return PLUGIN_HANDLED + + new idtype = ADMIN_STEAM | ADMIN_LOOKUP + + if (read_argc() > 4) + { + new t_arg[16] + read_argv(4, t_arg, 15) + if (equali(t_arg,"steam") || equali(t_arg,"steamid") || equali(t_arg,"auth")) + { + idtype = ADMIN_STEAM + } else if (equali(t_arg,"ip")) { + idtype = ADMIN_IPADDR + } else if (equali(t_arg,"name") || equali(t_arg,"nick")) { + idtype = ADMIN_NAME + } else { + console_print(id, "[%s] Unknown idtype ^"%s^", use one of: steamid,ip,name", PLUGINNAME, t_arg) + return PLUGIN_HANDLED + } + } new arg[33] read_argv(1, arg, 32) - new player = cmd_target(id, arg, 10) // 2 = allow yourself (remove later?) 8 = no bots - if (!player) + + new player = -1 + if (idtype & ADMIN_STEAM) + { + if (containi(arg, "STEAM_0:") == -1) + { + idtype |= ADMIN_LOOKUP + player = cmd_target(id, arg, 10) + } + } else if (idtype & ADMIN_NAME) { + player = cmd_target(id, arg, 10) + if (player) + idtype |= ADMIN_LOOKUP + } else if (idtype & ADMIN_IPADDR) { + new len = strlen(arg) + new dots, chars + for (new i=0; i 3) + break + if (++dots > 3) + break + chars = 0 + } else { + chars++ + } + if (dots != 3 || !chars || chars > 3) + { + idtype |= ADMIN_LOOKUP + player = find_player("dh", arg) + } + } + } + + if (idtype & ADMIN_LOOKUP && !player) + { + console_print(id, "%L", id, "CL_NOT_FOUND") return PLUGIN_HANDLED - + } + new flags[64] read_argv(2, flags, 63) @@ -123,20 +188,60 @@ public addadminfn(id, level, cid) { if (read_argc() == 4) read_argv(3, password, 63) - new steamid[64] - get_user_authid(player, steamid, 63) - - AddAdmin(id, steamid, flags, password) + new auth[33] + if (idtype & ADMIN_LOOKUP) + { + if (idtype & ADMIN_STEAM) + { + get_user_authid(player, auth, 32) + } else if (idtype & ADMIN_IPADDR) { + get_user_ip(player, auth, 32) + } else if (idtype & ADMIN_NAME) { + get_user_name(player, auth, 32) + } + } else { + copy(auth, 32, arg) + } + + new type[16], len + if (idtype & ADMIN_STEAM) + len += format(type[len], 15-len, "c") + else if (idtype & ADMIN_IPADDR) + len += format(type[len], 15-len, "d") + if (strlen(password) > 0) + len += format(type[len], 15-len, "a") + else + len += format(type[len], 15-len, "e") + + AddAdmin(id, auth, flags, password, type) cmdReload(id, ADMIN_CFG, 0) - new name[32] - get_user_info(player, "name", name, 31) - accessUser(player, name) + if (player > 0) + { + new name[32] + get_user_info(player, "name", name, 31) + accessUser(player, name) + } return PLUGIN_HANDLED } -AddAdmin(id, steamid[], accessflags[], password[]) { +AddAdmin(id, auth[], accessflags[], password[], flags[]) +{ +#if defined USING_SQL + new host[64], user[32], pass[32], db[128], table[32], error[128], dbType[7] + dbi_type(dbType, 6) + get_cvar_string("amx_sql_host", host, 63) + get_cvar_string("amx_sql_user", user, 31) + get_cvar_string("amx_sql_pass", pass, 31) + get_cvar_string("amx_sql_db", db, 127) + get_cvar_string("amx_sql_table", table, 31) + + new Sql:sql = dbi_connect(host, user, pass, db, error, 127) + if (sql <= SQL_FAILED) { + server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_CON", error) + //backup to users.ini +#endif // Make sure that the users.ini file exists. new configsDir[64] get_configsdir(configsDir, 63) @@ -159,24 +264,41 @@ AddAdmin(id, steamid[], accessflags[], password[]) { parsedParams = parse(textline, line_steamid, SIZE, line_password, SIZE, line_accessflags, SIZE, line_flags, SIZE) if (parsedParams != 4) continue // Send warning/error? - if (containi(line_flags, "c") != -1 && equal(line_steamid, steamid)) { - console_print(id, "[%s] %s already exists!", PLUGINNAME, steamid) + if (containi(line_flags, flags) != -1 && equal(line_steamid, auth)) { + console_print(id, "[%s] %s already exists!", PLUGINNAME, auth) return } } // If we came here, steamid doesn't exist in users.ini. Add it. - // Find out what flags we need. - new flags[64] = "c" // Always use steamid - new flagslen = strlen(flags) - if (strlen(password) == 0) - flagslen += format(flags[flagslen], 63 - flagslen, "e") // add flag to not check password if password wasn't supplied new linetoadd[512] - format(linetoadd, 511, "^"%s^" ^"%s^" ^"%s^" ^"%s^"", steamid, password, accessflags, flags) + format(linetoadd, 511, "^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, password, accessflags, flags) console_print(id, "Adding:^n%s", linetoadd) if (!write_file(configsDir, linetoadd)) console_print(id, "[%s] Failed writing to %s!", PLUGINNAME, configsDir) +#if defined USING_SQL + } + new Result:Res = dbi_query(sql, "SELECT * FROM `%s` WHERE (`auth` = '%s')", table, auth) + + if (Res == RESULT_FAILED) { + dbi_error(sql,error,127) + server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error) + console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error) + dbi_close(sql) + return + } + else if (Res > RESULT_NONE) { + console_print(id, "[%s] %s already exists!", PLUGINNAME, auth) + dbi_free_result(Res) + dbi_close(sql) + return + } + + console_print(id, "Adding to database:^n^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, password, accessflags, flags) + dbi_query(sql, "REPLACE INTO `%s` (`auth`, `password`, `access`, `flags`) VALUES ('%s', '%s', '%s', '%s')", table, auth, password, accessflags, flags) + dbi_close(sql) +#endif } public plugin_cfg() {