From a7cc2609e1fc91273bdf074015caa289d79d612a Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 14 May 2008 05:31:14 +0000 Subject: [PATCH] added amb1448 - duplicate admins are now combined rather than excluded --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%402145 --- plugins/admin-flatfile/admin-simple.sp | 62 +++++++++++--- plugins/admin-flatfile/admin-users.sp | 109 +++++++++++++++++-------- 2 files changed, 124 insertions(+), 47 deletions(-) diff --git a/plugins/admin-flatfile/admin-simple.sp b/plugins/admin-flatfile/admin-simple.sp index 9e8c8500..c615ac8e 100644 --- a/plugins/admin-flatfile/admin-simple.sp +++ b/plugins/admin-flatfile/admin-simple.sp @@ -92,20 +92,57 @@ public ReadSimpleUsers() CloseHandle(file); } + + +DecodeAuthMethod(const String:auth[], String:method[32], &offset) +{ + if (StrContains(auth, "STEAM_") == 0) + { + strcopy(method, sizeof(method), AUTHMETHOD_STEAM); + offset = 0; + } + else + { + if (auth[0] == '!') + { + strcopy(method, sizeof(method), AUTHMETHOD_IP); + offset = 1; + } + else + { + strcopy(method, sizeof(method), AUTHMETHOD_NAME); + offset = 0; + } + } +} + ReadAdminLine(const String:line[]) { + new bool:is_bound; + new AdminId:admin; new String:auth[64]; - new cur_idx = BreakString(line, auth, sizeof(auth)); - new idx = cur_idx; + decl String:auth_method[32]; + new idx, cur_idx, auth_offset; - if (cur_idx == -1) + if ((cur_idx = BreakString(line, auth, sizeof(auth))) == -1) { /* This line is bad... we need at least two parameters */ return; } - /* Create the admin */ - new AdminId:admin = CreateAdmin(); + idx = cur_idx; + + /* Check if we can bind beforehand */ + DecodeAuthMethod(auth, auth_method, auth_offset); + if ((admin = FindAdminByIdentity(auth_method, auth[auth_offset])) == INVALID_ADMIN_ID) + { + /* There is no binding, create the admin */ + admin = CreateAdmin(); + } + else + { + is_bound = true; + } /* Read flags */ new String:flags[64]; @@ -133,7 +170,9 @@ ReadAdminLine(const String:line[]) return; } AdminInheritGroup(admin, gid); - } else { + } + else + { new len = strlen(flags[flag_idx]); new bool:is_default = false; for (new i=0; i