1.1 --- a/core/smn_admin.cpp Fri Mar 28 06:21:34 2008 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,572 +0,0 @@
1.4 -/**
1.5 - * vim: set ts=4 :
1.6 - * =============================================================================
1.7 - * SourceMod
1.8 - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
1.9 - * =============================================================================
1.10 - *
1.11 - * This program is free software; you can redistribute it and/or modify it under
1.12 - * the terms of the GNU General Public License, version 3.0, as published by the
1.13 - * Free Software Foundation.
1.14 - *
1.15 - * This program is distributed in the hope that it will be useful, but WITHOUT
1.16 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1.17 - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
1.18 - * details.
1.19 - *
1.20 - * You should have received a copy of the GNU General Public License along with
1.21 - * this program. If not, see <http://www.gnu.org/licenses/>.
1.22 - *
1.23 - * As a special exception, AlliedModders LLC gives you permission to link the
1.24 - * code of this program (as well as its derivative works) to "Half-Life 2," the
1.25 - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
1.26 - * by the Valve Corporation. You must obey the GNU General Public License in
1.27 - * all respects for all other code used. Additionally, AlliedModders LLC grants
1.28 - * this exception to all derivative works. AlliedModders LLC defines further
1.29 - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
1.30 - * or <http://www.sourcemod.net/license.php>.
1.31 - *
1.32 - * Version: $Id$
1.33 - */
1.34 -
1.35 -#include "sm_globals.h"
1.36 -#include "AdminCache.h"
1.37 -#include "ForwardSys.h"
1.38 -
1.39 -static cell_t DumpAdminCache(IPluginContext *pContext, const cell_t *params)
1.40 -{
1.41 - g_Admins.DumpAdminCache((AdminCachePart)params[1], (params[2] == 1) ? true : false);
1.42 - return 1;
1.43 -}
1.44 -
1.45 -static cell_t AddCommandOverride(IPluginContext *pContext, const cell_t *params)
1.46 -{
1.47 - char *str;
1.48 -
1.49 - pContext->LocalToString(params[1], &str);
1.50 - g_Admins.AddCommandOverride(str, (OverrideType)params[2], (AdminFlag)params[3]);
1.51 -
1.52 - return 1;
1.53 -}
1.54 -
1.55 -static cell_t GetCommandOverride(IPluginContext *pContext, const cell_t *params)
1.56 -{
1.57 - char *cmd;
1.58 - FlagBits flags;
1.59 -
1.60 - pContext->LocalToString(params[1], &cmd);
1.61 -
1.62 - if (!g_Admins.GetCommandOverride(cmd, (OverrideType)params[2], &flags))
1.63 - {
1.64 - return 0;
1.65 - }
1.66 -
1.67 - cell_t *addr;
1.68 - pContext->LocalToPhysAddr(params[3], &addr);
1.69 -
1.70 - *addr = (cell_t)flags;
1.71 -
1.72 - return 1;
1.73 -}
1.74 -
1.75 -static cell_t UnsetCommandOverride(IPluginContext *pContext, const cell_t *params)
1.76 -{
1.77 - char *cmd;
1.78 -
1.79 - pContext->LocalToString(params[1], &cmd);
1.80 -
1.81 - g_Admins.UnsetCommandOverride(cmd, (OverrideType)params[2]);
1.82 -
1.83 - return 1;
1.84 -}
1.85 -
1.86 -static cell_t CreateAdmGroup(IPluginContext *pContext, const cell_t *params)
1.87 -{
1.88 - char *str;
1.89 -
1.90 - pContext->LocalToString(params[1], &str);
1.91 -
1.92 - return g_Admins.AddGroup(str);
1.93 -}
1.94 -
1.95 -static cell_t FindAdmGroup(IPluginContext *pContext, const cell_t *params)
1.96 -{
1.97 - char *str;
1.98 -
1.99 - pContext->LocalToString(params[1], &str);
1.100 -
1.101 - return g_Admins.FindGroupByName(str);
1.102 -}
1.103 -
1.104 -static cell_t SetAdmGroupAddFlag(IPluginContext *pContext, const cell_t *params)
1.105 -{
1.106 - GroupId id = (GroupId)params[1];
1.107 - AdminFlag flag = (AdminFlag)params[2];
1.108 - bool enabled = params[3] ? 1 : 0;
1.109 -
1.110 - g_Admins.SetGroupAddFlag(id, flag, enabled);
1.111 -
1.112 - return 1;
1.113 -}
1.114 -
1.115 -static cell_t GetAdmGroupAddFlag(IPluginContext *pContext, const cell_t *params)
1.116 -{
1.117 - GroupId id = (GroupId)params[1];
1.118 - AdminFlag flag = (AdminFlag)params[2];
1.119 -
1.120 - return g_Admins.GetGroupAddFlag(id, flag) ? 1 : 0;
1.121 -}
1.122 -
1.123 -static cell_t SetAdmGroupImmunity(IPluginContext *pContext, const cell_t *params)
1.124 -{
1.125 - GroupId id = (GroupId)params[1];
1.126 - ImmunityType type = (ImmunityType)params[2];
1.127 - bool enabled = params[3] ? 1 : 0;
1.128 -
1.129 - g_Admins.SetGroupGenericImmunity(id, type, enabled);
1.130 -
1.131 - return 1;
1.132 -}
1.133 -
1.134 -static cell_t GetAdmGroupImmunity(IPluginContext *pContext, const cell_t *params)
1.135 -{
1.136 - GroupId id = (GroupId)params[1];
1.137 - ImmunityType type = (ImmunityType)params[2];
1.138 -
1.139 - return g_Admins.GetGroupGenericImmunity(id, type) ? 1 : 0;
1.140 -}
1.141 -
1.142 -static cell_t SetAdmGroupImmuneFrom(IPluginContext *pContext, const cell_t *params)
1.143 -{
1.144 - GroupId id = (GroupId)params[1];
1.145 - GroupId other_id = (GroupId)params[2];
1.146 -
1.147 - g_Admins.AddGroupImmunity(id, other_id);
1.148 -
1.149 - return 1;
1.150 -}
1.151 -
1.152 -static cell_t GetAdmGroupImmuneCount(IPluginContext *pContext, const cell_t *params)
1.153 -{
1.154 - GroupId id = (GroupId)params[1];
1.155 -
1.156 - return g_Admins.GetGroupImmunityCount(id);
1.157 -}
1.158 -
1.159 -static cell_t GetAdmGroupImmuneFrom(IPluginContext *pContext, const cell_t *params)
1.160 -{
1.161 - GroupId id = (GroupId)params[1];
1.162 -
1.163 - return g_Admins.GetGroupImmunity(id, params[2]);
1.164 -}
1.165 -
1.166 -static cell_t AddAdmGroupCmdOverride(IPluginContext *pContext, const cell_t *params)
1.167 -{
1.168 - GroupId id = (GroupId)params[1];
1.169 - OverrideType type = (OverrideType)params[3];
1.170 - OverrideRule rule = (OverrideRule)params[4];
1.171 - char *cmd;
1.172 -
1.173 - pContext->LocalToString(params[2], &cmd);
1.174 -
1.175 - g_Admins.AddGroupCommandOverride(id, cmd, type, rule);
1.176 -
1.177 - return 1;
1.178 -}
1.179 -
1.180 -static cell_t GetAdmGroupCmdOverride(IPluginContext *pContext, const cell_t *params)
1.181 -{
1.182 - GroupId id = (GroupId)params[1];
1.183 - OverrideType type = (OverrideType)params[3];
1.184 - OverrideRule rule;
1.185 - char *cmd;
1.186 -
1.187 - pContext->LocalToString(params[2], &cmd);
1.188 -
1.189 - if (!g_Admins.GetGroupCommandOverride(id, cmd, type, &rule))
1.190 - {
1.191 - return 0;
1.192 - }
1.193 -
1.194 - cell_t *addr;
1.195 - pContext->LocalToPhysAddr(params[4], &addr);
1.196 - *addr = (cell_t)rule;
1.197 -
1.198 - return 1;
1.199 -}
1.200 -
1.201 -static cell_t GetAdmGroupAddFlags(IPluginContext *pContext, const cell_t *params)
1.202 -{
1.203 - GroupId id = (GroupId)params[1];
1.204 - return g_Admins.GetGroupAddFlags(id);
1.205 -}
1.206 -
1.207 -static cell_t RegisterAuthIdentType(IPluginContext *pContext, const cell_t *params)
1.208 -{
1.209 - char *type;
1.210 - pContext->LocalToString(params[1], &type);
1.211 -
1.212 - g_Admins.RegisterAuthIdentType(type);
1.213 -
1.214 - return 1;
1.215 -}
1.216 -
1.217 -static cell_t CreateAdmin(IPluginContext *pContext, const cell_t *params)
1.218 -{
1.219 - char *admin;
1.220 - pContext->LocalToString(params[1], &admin);
1.221 -
1.222 - if (admin[0] == '\0')
1.223 - {
1.224 - admin = NULL;
1.225 - }
1.226 -
1.227 - return g_Admins.CreateAdmin(admin);
1.228 -}
1.229 -
1.230 -static cell_t GetAdminUsername(IPluginContext *pContext, const cell_t *params)
1.231 -{
1.232 - AdminId id = params[1];
1.233 - size_t written;
1.234 - const char *name = g_Admins.GetAdminName(id);
1.235 -
1.236 - if (!name)
1.237 - {
1.238 - return 0;
1.239 - }
1.240 -
1.241 - pContext->StringToLocalUTF8(params[2], params[3], name, &written);
1.242 -
1.243 - return written;
1.244 -}
1.245 -
1.246 -static cell_t BindAdminIdentity(IPluginContext *pContext, const cell_t *params)
1.247 -{
1.248 - AdminId id = params[1];
1.249 - char *auth, *ident;
1.250 -
1.251 - pContext->LocalToString(params[2], &auth);
1.252 - pContext->LocalToString(params[3], &ident);
1.253 -
1.254 - return g_Admins.BindAdminIdentity(id, auth, ident);
1.255 -}
1.256 -
1.257 -static cell_t SetAdminFlag(IPluginContext *pContext, const cell_t *params)
1.258 -{
1.259 - AdminId id = params[1];
1.260 - AdminFlag flag = (AdminFlag)params[2];
1.261 - bool enabled = params[3] ? true : false;
1.262 -
1.263 - g_Admins.SetAdminFlag(id, flag, enabled);
1.264 -
1.265 - return 1;
1.266 -}
1.267 -
1.268 -static cell_t GetAdminFlag(IPluginContext *pContext, const cell_t *params)
1.269 -{
1.270 - AdminId id = params[1];
1.271 - AdminFlag flag = (AdminFlag)params[2];
1.272 - AccessMode mode = (AccessMode)params[3];
1.273 -
1.274 - return g_Admins.GetAdminFlag(id, flag, mode);
1.275 -}
1.276 -
1.277 -static cell_t GetAdminFlags(IPluginContext *pContext, const cell_t *params)
1.278 -{
1.279 - AdminId id = params[1];
1.280 - AccessMode mode = (AccessMode)params[2];
1.281 -
1.282 - return g_Admins.GetAdminFlags(id, mode);
1.283 -}
1.284 -
1.285 -static cell_t AdminInheritGroup(IPluginContext *pContext, const cell_t *params)
1.286 -{
1.287 - AdminId id = params[1];
1.288 - GroupId gid = params[2];
1.289 -
1.290 - return g_Admins.AdminInheritGroup(id, gid);
1.291 -}
1.292 -
1.293 -static cell_t GetAdminGroupCount(IPluginContext *pContext, const cell_t *params)
1.294 -{
1.295 - AdminId id = params[1];
1.296 -
1.297 - return g_Admins.GetAdminGroupCount(id);
1.298 -}
1.299 -
1.300 -static cell_t GetAdminGroup(IPluginContext *pContext, const cell_t *params)
1.301 -{
1.302 - AdminId id = params[1];
1.303 - unsigned int index = params[2];
1.304 - const char *name;
1.305 - GroupId gid;
1.306 -
1.307 - if ((gid=g_Admins.GetAdminGroup(id, index, &name)) == INVALID_GROUP_ID)
1.308 - {
1.309 - return gid;
1.310 - }
1.311 -
1.312 - if (name == NULL)
1.313 - {
1.314 - name = "";
1.315 - }
1.316 -
1.317 - pContext->StringToLocalUTF8(params[3], params[4], name, NULL);
1.318 -
1.319 - return gid;
1.320 -}
1.321 -
1.322 -static cell_t SetAdminPassword(IPluginContext *pContext, const cell_t *params)
1.323 -{
1.324 - AdminId id = params[1];
1.325 - char *password;
1.326 -
1.327 - pContext->LocalToString(params[2], &password);
1.328 -
1.329 - g_Admins.SetAdminPassword(id, password);
1.330 -
1.331 - return 1;
1.332 -}
1.333 -
1.334 -static cell_t GetAdminPassword(IPluginContext *pContext, const cell_t *params)
1.335 -{
1.336 - AdminId id = params[1];
1.337 - const char *password = g_Admins.GetAdminPassword(id);
1.338 -
1.339 - if (!password)
1.340 - {
1.341 - return 0;
1.342 - }
1.343 -
1.344 - pContext->StringToLocalUTF8(params[2], params[3], password, NULL);
1.345 -
1.346 - return 1;
1.347 -}
1.348 -
1.349 -static cell_t FindAdminByIdentity(IPluginContext *pContext, const cell_t *params)
1.350 -{
1.351 - char *auth, *ident;
1.352 -
1.353 - pContext->LocalToString(params[1], &auth);
1.354 - pContext->LocalToString(params[2], &ident);
1.355 -
1.356 - return g_Admins.FindAdminByIdentity(auth, ident);
1.357 -}
1.358 -
1.359 -static cell_t RemoveAdmin(IPluginContext *pContext, const cell_t *params)
1.360 -{
1.361 - AdminId id = params[1];
1.362 -
1.363 - return g_Admins.InvalidateAdmin(id);
1.364 -}
1.365 -
1.366 -static cell_t FlagBitsToBitArray(IPluginContext *pContext, const cell_t *params)
1.367 -{
1.368 - FlagBits bits = (FlagBits)params[1];
1.369 - bool array[AdminFlags_TOTAL];
1.370 - cell_t *addr;
1.371 - unsigned int numWr = g_Admins.FlagBitsToBitArray(bits, array, AdminFlags_TOTAL);
1.372 -
1.373 - pContext->LocalToPhysAddr(params[2], &addr);
1.374 -
1.375 - unsigned int i;
1.376 - for (i=0; i<numWr && i<(unsigned int)params[3]; i++)
1.377 - {
1.378 - addr[i] = array[i] ? 1 : 0;
1.379 - }
1.380 -
1.381 - return i;
1.382 -}
1.383 -
1.384 -static cell_t FlagBitArrayToBits(IPluginContext *pContext, const cell_t *params)
1.385 -{
1.386 - bool array[AdminFlags_TOTAL];
1.387 - unsigned int num = ((unsigned int)params[2] > AdminFlags_TOTAL ? params[2] : AdminFlags_TOTAL);
1.388 - cell_t *addr;
1.389 -
1.390 - pContext->LocalToPhysAddr(params[1], &addr);
1.391 -
1.392 - for (unsigned int i=0; i<num; i++)
1.393 - {
1.394 - array[i] = addr[i] ? true : false;
1.395 - }
1.396 -
1.397 - return g_Admins.FlagBitArrayToBits(array, num);
1.398 -}
1.399 -
1.400 -static cell_t FlagArrayToBits(IPluginContext *pContext, const cell_t *params)
1.401 -{
1.402 - cell_t *addr;
1.403 - pContext->LocalToPhysAddr(params[1], &addr);
1.404 -
1.405 - if (sizeof(AdminFlag) == sizeof(cell_t))
1.406 - {
1.407 - return g_Admins.FlagArrayToBits((const AdminFlag *)addr, params[2]);
1.408 - } else {
1.409 - AdminFlag flags[AdminFlags_TOTAL];
1.410 - unsigned int num = ((unsigned)params[2] > AdminFlags_TOTAL ? AdminFlags_TOTAL : params[2]);
1.411 -
1.412 - for (unsigned int i=0; i<num; i++)
1.413 - {
1.414 - flags[i] = (AdminFlag)addr[i];
1.415 - }
1.416 - return g_Admins.FlagArrayToBits(flags, num);
1.417 - }
1.418 -}
1.419 -
1.420 -static cell_t FlagBitsToArray(IPluginContext *pContext, const cell_t *params)
1.421 -{
1.422 - cell_t *addr;
1.423 - pContext->LocalToPhysAddr(params[2], &addr);
1.424 -
1.425 - if (sizeof(AdminFlag) == sizeof(cell_t))
1.426 - {
1.427 - return g_Admins.FlagBitsToArray(params[1], (AdminFlag *)addr, params[3]);
1.428 - } else {
1.429 - AdminFlag flags[AdminFlags_TOTAL];
1.430 - unsigned int num = ((unsigned)params[2] > AdminFlags_TOTAL ? AdminFlags_TOTAL : params[2]);
1.431 - num = g_Admins.FlagBitsToArray(params[1], flags, num);
1.432 -
1.433 - for (unsigned int i=0; i<num; i++)
1.434 - {
1.435 - addr[i] = flags[i];
1.436 - }
1.437 -
1.438 - return num;
1.439 - }
1.440 -}
1.441 -
1.442 -static cell_t CanAdminTarget(IPluginContext *pContext, const cell_t *params)
1.443 -{
1.444 - return g_Admins.CanAdminTarget(params[1], params[2]) ? 1 : 0;
1.445 -}
1.446 -
1.447 -static cell_t CreateAuthMethod(IPluginContext *pContext, const cell_t *params)
1.448 -{
1.449 - char *name;
1.450 - pContext->LocalToString(params[1], &name);
1.451 - g_Admins.RegisterAuthIdentType(name);
1.452 -
1.453 - return 1;
1.454 -}
1.455 -
1.456 -static cell_t SetAdmGroupImmunityLevel(IPluginContext *pContext, const cell_t *params)
1.457 -{
1.458 - return g_Admins.SetGroupImmunityLevel(params[1], params[2]);
1.459 -}
1.460 -
1.461 -static cell_t GetAdmGroupImmunityLevel(IPluginContext *pContext, const cell_t *params)
1.462 -{
1.463 - return g_Admins.GetGroupImmunityLevel(params[1]);
1.464 -}
1.465 -
1.466 -static cell_t SetAdminImmunityLevel(IPluginContext *pContext, const cell_t *params)
1.467 -{
1.468 - return g_Admins.SetAdminImmunityLevel(params[1], params[2]);
1.469 -}
1.470 -
1.471 -static cell_t GetAdminImmunityLevel(IPluginContext *pContext, const cell_t *params)
1.472 -{
1.473 - return g_Admins.GetAdminImmunityLevel(params[1]);
1.474 -}
1.475 -
1.476 -static cell_t FindFlagByName(IPluginContext *pContext, const cell_t *params)
1.477 -{
1.478 - char *flag;
1.479 - pContext->LocalToString(params[1], &flag);
1.480 -
1.481 - cell_t *addr;
1.482 - pContext->LocalToPhysAddr(params[2], &addr);
1.483 -
1.484 - AdminFlag admflag;
1.485 - if (!g_Admins.FindFlag(flag, &admflag))
1.486 - {
1.487 - return 0;
1.488 - }
1.489 -
1.490 - *addr = (cell_t)admflag;
1.491 -
1.492 - return 1;
1.493 -}
1.494 -
1.495 -static cell_t FindFlagByChar(IPluginContext *pContext, const cell_t *params)
1.496 -{
1.497 - cell_t *addr;
1.498 - pContext->LocalToPhysAddr(params[2], &addr);
1.499 -
1.500 - AdminFlag admflag;
1.501 - if (!g_Admins.FindFlag((char)params[1], &admflag))
1.502 - {
1.503 - return 0;
1.504 - }
1.505 -
1.506 - *addr = (cell_t)admflag;
1.507 -
1.508 - return 1;
1.509 -}
1.510 -
1.511 -static cell_t ReadFlagString(IPluginContext *pContext, const cell_t *params)
1.512 -{
1.513 - char *flag;
1.514 - pContext->LocalToString(params[1], &flag);
1.515 -
1.516 - cell_t *addr;
1.517 - pContext->LocalToPhysAddr(params[2], &addr);
1.518 -
1.519 - const char *end = flag;
1.520 - FlagBits bits = g_Admins.ReadFlagString(flag, &end);
1.521 -
1.522 - *addr = end - flag;
1.523 -
1.524 - return bits;
1.525 -}
1.526 -
1.527 -REGISTER_NATIVES(adminNatives)
1.528 -{
1.529 - {"DumpAdminCache", DumpAdminCache},
1.530 - {"AddCommandOverride", AddCommandOverride},
1.531 - {"GetCommandOverride", GetCommandOverride},
1.532 - {"UnsetCommandOverride", UnsetCommandOverride},
1.533 - {"CreateAdmGroup", CreateAdmGroup},
1.534 - {"FindAdmGroup", FindAdmGroup},
1.535 - {"SetAdmGroupAddFlag", SetAdmGroupAddFlag},
1.536 - {"GetAdmGroupAddFlag", GetAdmGroupAddFlag},
1.537 - {"SetAdmGroupImmunity", SetAdmGroupImmunity},
1.538 - {"GetAdmGroupImmunity", GetAdmGroupImmunity},
1.539 - {"SetAdmGroupImmuneFrom", SetAdmGroupImmuneFrom},
1.540 - {"GetAdmGroupImmuneFrom", GetAdmGroupImmuneFrom},
1.541 - {"GetAdmGroupImmuneCount", GetAdmGroupImmuneCount},
1.542 - {"AddAdmGroupCmdOverride", AddAdmGroupCmdOverride},
1.543 - {"GetAdmGroupCmdOverride", GetAdmGroupCmdOverride},
1.544 - {"GetAdmGroupAddFlags", GetAdmGroupAddFlags},
1.545 - {"RegisterAuthIdentType", RegisterAuthIdentType},
1.546 - {"CreateAdmin", CreateAdmin},
1.547 - {"GetAdminUsername", GetAdminUsername},
1.548 - {"BindAdminIdentity", BindAdminIdentity},
1.549 - {"SetAdminFlag", SetAdminFlag},
1.550 - {"GetAdminFlag", GetAdminFlag},
1.551 - {"GetAdminFlags", GetAdminFlags},
1.552 - {"AdminInheritGroup", AdminInheritGroup},
1.553 - {"GetAdminGroupCount", GetAdminGroupCount},
1.554 - {"GetAdminGroup", GetAdminGroup},
1.555 - {"SetAdminPassword", SetAdminPassword},
1.556 - {"GetAdminPassword", GetAdminPassword},
1.557 - {"FindAdminByIdentity", FindAdminByIdentity},
1.558 - {"RemoveAdmin", RemoveAdmin},
1.559 - {"FlagBitsToBitArray", FlagBitsToBitArray},
1.560 - {"FlagBitArrayToBits", FlagBitArrayToBits},
1.561 - {"FlagArrayToBits", FlagArrayToBits},
1.562 - {"FlagBitsToArray", FlagBitsToArray},
1.563 - {"CanAdminTarget", CanAdminTarget},
1.564 - {"CreateAuthMethod", CreateAuthMethod},
1.565 - {"FindFlagByName", FindFlagByName},
1.566 - {"FindFlagByChar", FindFlagByChar},
1.567 - {"ReadFlagString", ReadFlagString},
1.568 - {"GetAdmGroupImmunityLevel",GetAdmGroupImmunityLevel},
1.569 - {"SetAdmGroupImmunityLevel",SetAdmGroupImmunityLevel},
1.570 - {"GetAdminImmunityLevel", GetAdminImmunityLevel},
1.571 - {"SetAdminImmunityLevel", SetAdminImmunityLevel},
1.572 - /* -------------------------------------------------- */
1.573 - {NULL, NULL},
1.574 -};
1.575 -