1.1 --- a/core/AdminCache.cpp Sun Aug 25 14:04:01 2013 -0700
1.2 +++ b/core/AdminCache.cpp Sun Aug 25 21:39:07 2013 -0700
1.3 @@ -218,19 +218,14 @@
1.4
1.5 AdminCache::AdminCache()
1.6 {
1.7 - m_pCmdOverrides = sm_trie_create();
1.8 - m_pCmdGrpOverrides = sm_trie_create();
1.9 m_pStrings = new BaseStringTable(1024);
1.10 m_pMemory = m_pStrings->GetMemTable();
1.11 m_FreeGroupList = m_FirstGroup = m_LastGroup = INVALID_GROUP_ID;
1.12 m_FreeUserList = m_FirstUser = m_LastUser = INVALID_ADMIN_ID;
1.13 - m_pGroups = sm_trie_create();
1.14 m_pCacheFwd = NULL;
1.15 m_FirstGroup = -1;
1.16 - m_pAuthTables = sm_trie_create();
1.17 m_InvalidatingAdmins = false;
1.18 m_destroying = false;
1.19 - m_pLevelNames = sm_trie_create();
1.20 }
1.21
1.22 AdminCache::~AdminCache()
1.23 @@ -239,27 +234,15 @@
1.24 DumpAdminCache(AdminCache_Overrides, false);
1.25 DumpAdminCache(AdminCache_Groups, false);
1.26
1.27 - sm_trie_destroy(m_pCmdGrpOverrides);
1.28 - sm_trie_destroy(m_pCmdOverrides);
1.29 -
1.30 - if (m_pGroups)
1.31 - {
1.32 - sm_trie_destroy(m_pGroups);
1.33 - }
1.34 -
1.35 - List<AuthMethod>::iterator iter;
1.36 + List<AuthMethod *>::iterator iter;
1.37 for (iter=m_AuthMethods.begin();
1.38 iter!=m_AuthMethods.end();
1.39 iter++)
1.40 {
1.41 - sm_trie_destroy((*iter).table);
1.42 + delete *iter;
1.43 }
1.44
1.45 - sm_trie_destroy(m_pAuthTables);
1.46 -
1.47 delete m_pStrings;
1.48 -
1.49 - sm_trie_destroy(m_pLevelNames);
1.50 }
1.51
1.52 void AdminCache::OnSourceModStartup(bool late)
1.53 @@ -332,66 +315,39 @@
1.54
1.55 void AdminCache::NameFlag(const char *str, AdminFlag flag)
1.56 {
1.57 - sm_trie_insert(m_pLevelNames, str, (void *)flag);
1.58 + m_LevelNames.insert(str, flag);
1.59 }
1.60
1.61 bool AdminCache::FindFlag(const char *str, AdminFlag *pFlag)
1.62 {
1.63 - void *obj;
1.64 - if (!sm_trie_retrieve(m_pLevelNames, str, &obj))
1.65 - {
1.66 - return false;
1.67 - }
1.68 -
1.69 - if (pFlag)
1.70 - {
1.71 - *pFlag = (AdminFlag)(int)obj;
1.72 - }
1.73 -
1.74 - return true;
1.75 + return m_LevelNames.retrieve(str, pFlag);
1.76 }
1.77
1.78 void AdminCache::AddCommandOverride(const char *cmd, OverrideType type, FlagBits flags)
1.79 {
1.80 - Trie *pTrie = NULL;
1.81 + FlagMap *map;
1.82 if (type == Override_Command)
1.83 - {
1.84 - pTrie = m_pCmdOverrides;
1.85 - } else if (type == Override_CommandGroup) {
1.86 - pTrie = m_pCmdGrpOverrides;
1.87 - } else {
1.88 + map = &m_CmdOverrides;
1.89 + else if (type == Override_CommandGroup)
1.90 + map = &m_CmdGrpOverrides;
1.91 + else
1.92 return;
1.93 - }
1.94
1.95 - sm_trie_insert(pTrie, cmd, (void *)(unsigned int)flags);
1.96 -
1.97 + map->insert(cmd, flags);
1.98 g_ConCmds.UpdateAdminCmdFlags(cmd, type, flags, false);
1.99 }
1.100
1.101 bool AdminCache::GetCommandOverride(const char *cmd, OverrideType type, FlagBits *pFlags)
1.102 {
1.103 - Trie *pTrie = NULL;
1.104 -
1.105 + FlagMap *map;
1.106 if (type == Override_Command)
1.107 - {
1.108 - pTrie = m_pCmdOverrides;
1.109 - } else if (type == Override_CommandGroup) {
1.110 - pTrie = m_pCmdGrpOverrides;
1.111 - } else {
1.112 + map = &m_CmdOverrides;
1.113 + else if (type == Override_CommandGroup)
1.114 + map = &m_CmdGrpOverrides;
1.115 + else
1.116 return false;
1.117 - }
1.118
1.119 - void *object;
1.120 - if (sm_trie_retrieve(pTrie, cmd, &object))
1.121 - {
1.122 - if (pFlags)
1.123 - {
1.124 - *pFlags = (FlagBits)object;
1.125 - }
1.126 - return true;
1.127 - }
1.128 -
1.129 - return false;
1.130 + return map->retrieve(cmd, pFlags);
1.131 }
1.132
1.133 void AdminCache::UnsetCommandOverride(const char *cmd, OverrideType type)
1.134 @@ -406,36 +362,22 @@
1.135
1.136 void AdminCache::_UnsetCommandGroupOverride(const char *group)
1.137 {
1.138 - if (!m_pCmdGrpOverrides)
1.139 - {
1.140 - return;
1.141 - }
1.142 -
1.143 - sm_trie_delete(m_pCmdGrpOverrides, group);
1.144 -
1.145 + m_CmdGrpOverrides.remove(group);
1.146 g_ConCmds.UpdateAdminCmdFlags(group, Override_CommandGroup, 0, true);
1.147 }
1.148
1.149 void AdminCache::_UnsetCommandOverride(const char *cmd)
1.150 {
1.151 - if (!m_pCmdOverrides)
1.152 - {
1.153 - return;
1.154 - }
1.155 -
1.156 - sm_trie_delete(m_pCmdOverrides, cmd);
1.157 -
1.158 + m_CmdOverrides.remove(cmd);
1.159 g_ConCmds.UpdateAdminCmdFlags(cmd, Override_Command, 0, true);
1.160 }
1.161
1.162 void AdminCache::DumpCommandOverrideCache(OverrideType type)
1.163 {
1.164 - if (type == Override_Command && m_pCmdOverrides)
1.165 - {
1.166 - sm_trie_clear(m_pCmdOverrides);
1.167 - } else if (type == Override_CommandGroup && m_pCmdGrpOverrides) {
1.168 - sm_trie_clear(m_pCmdGrpOverrides);
1.169 - }
1.170 + if (type == Override_Command)
1.171 + m_CmdOverrides.clear();
1.172 + else if (type == Override_CommandGroup)
1.173 + m_CmdGrpOverrides.clear();
1.174 }
1.175
1.176 AdminId AdminCache::CreateAdmin(const char *name)
1.177 @@ -499,10 +441,8 @@
1.178
1.179 GroupId AdminCache::AddGroup(const char *group_name)
1.180 {
1.181 - if (sm_trie_retrieve(m_pGroups, group_name, NULL))
1.182 - {
1.183 + if (m_Groups.contains(group_name))
1.184 return INVALID_GROUP_ID;
1.185 - }
1.186
1.187 GroupId id;
1.188 AdminGroup *pGroup;
1.189 @@ -541,27 +481,19 @@
1.190 pGroup = (AdminGroup *)m_pMemory->GetAddress(id);
1.191 pGroup->nameidx = nameidx;
1.192
1.193 - sm_trie_insert(m_pGroups, group_name, (void *)id);
1.194 -
1.195 + m_Groups.insert(group_name, id);
1.196 return id;
1.197 }
1.198
1.199 GroupId AdminCache::FindGroupByName(const char *group_name)
1.200 {
1.201 - void *object;
1.202 -
1.203 - if (!sm_trie_retrieve(m_pGroups, group_name, &object))
1.204 - {
1.205 + GroupId id;
1.206 + if (!m_Groups.retrieve(group_name, &id))
1.207 return INVALID_GROUP_ID;
1.208 - }
1.209
1.210 - GroupId id = (GroupId)object;
1.211 AdminGroup *pGroup = (AdminGroup *)m_pMemory->GetAddress(id);
1.212 -
1.213 if (!pGroup || pGroup->magic != GRP_MAGIC_SET)
1.214 - {
1.215 return INVALID_GROUP_ID;
1.216 - }
1.217
1.218 return id;
1.219 }
1.220 @@ -771,25 +703,21 @@
1.221 return;
1.222 }
1.223
1.224 - Trie *pTrie = NULL;
1.225 + OverrideMap *map;
1.226 if (type == Override_Command)
1.227 {
1.228 if (pGroup->pCmdTable == NULL)
1.229 - {
1.230 - pGroup->pCmdTable = sm_trie_create();
1.231 - }
1.232 - pTrie = pGroup->pCmdTable;
1.233 + pGroup->pCmdTable = new OverrideMap();
1.234 + map = pGroup->pCmdTable;
1.235 } else if (type == Override_CommandGroup) {
1.236 if (pGroup->pCmdGrpTable == NULL)
1.237 - {
1.238 - pGroup->pCmdGrpTable = sm_trie_create();
1.239 - }
1.240 - pTrie = pGroup->pCmdGrpTable;
1.241 + pGroup->pCmdGrpTable = new OverrideMap();
1.242 + map = pGroup->pCmdGrpTable;
1.243 } else {
1.244 return;
1.245 }
1.246
1.247 - sm_trie_insert(pTrie, name, (void *)(int)rule);
1.248 + map->insert(name, rule);
1.249 }
1.250
1.251 bool AdminCache::GetGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule *pRule)
1.252 @@ -800,48 +728,33 @@
1.253 return false;
1.254 }
1.255
1.256 - Trie *pTrie = NULL;
1.257 + OverrideMap *map;
1.258 if (type == Override_Command)
1.259 {
1.260 if (pGroup->pCmdTable == NULL)
1.261 - {
1.262 return false;
1.263 - }
1.264 - pTrie = pGroup->pCmdTable;
1.265 + map = pGroup->pCmdTable;
1.266 } else if (type == Override_CommandGroup) {
1.267 if (pGroup->pCmdGrpTable == NULL)
1.268 - {
1.269 return false;
1.270 - }
1.271 - pTrie = pGroup->pCmdGrpTable;
1.272 + map = pGroup->pCmdGrpTable;
1.273 } else {
1.274 return false;
1.275 }
1.276
1.277 - void *object;
1.278 - if (!sm_trie_retrieve(pTrie, name, &object))
1.279 - {
1.280 - return false;
1.281 - }
1.282 -
1.283 - if (pRule)
1.284 - {
1.285 - *pRule = (OverrideRule)(int)object;
1.286 - }
1.287 -
1.288 - return true;
1.289 + return map->retrieve(name, pRule);
1.290 }
1.291
1.292 -Trie *AdminCache::GetMethodByIndex(unsigned int index)
1.293 +AuthMethod *AdminCache::GetMethodByIndex(unsigned int index)
1.294 {
1.295 - List<AuthMethod>::iterator iter;
1.296 + List<AuthMethod *>::iterator iter;
1.297 for (iter=m_AuthMethods.begin();
1.298 iter!=m_AuthMethods.end();
1.299 iter++)
1.300 {
1.301 if (index-- == 0)
1.302 {
1.303 - return (*iter).table;
1.304 + return *iter;
1.305 }
1.306 }
1.307
1.308 @@ -885,11 +798,9 @@
1.309 /* Unlink from auth tables */
1.310 if (pUser->auth.identidx != -1)
1.311 {
1.312 - Trie *pTrie = GetMethodByIndex(pUser->auth.index);
1.313 - if (pTrie)
1.314 - {
1.315 - sm_trie_delete(pTrie, m_pStrings->GetString(pUser->auth.identidx));
1.316 - }
1.317 + AuthMethod *method = GetMethodByIndex(pUser->auth.index);
1.318 + if (method)
1.319 + method->identities.remove(m_pStrings->GetString(pUser->auth.identidx));
1.320 }
1.321
1.322 /* Clear table counts */
1.323 @@ -918,7 +829,7 @@
1.324 }
1.325
1.326 const char *str = m_pStrings->GetString(pGroup->nameidx);
1.327 - sm_trie_delete(m_pGroups, str);
1.328 + m_Groups.remove(str);
1.329
1.330 /* Unlink from the live dbllink list */
1.331 if (id == m_FirstGroup && id == m_LastGroup)
1.332 @@ -940,17 +851,11 @@
1.333 pOther->prev_grp = pGroup->prev_grp;
1.334 }
1.335
1.336 - /* Free any used memory to be safe */
1.337 - if (pGroup->pCmdGrpTable)
1.338 - {
1.339 - sm_trie_destroy(pGroup->pCmdGrpTable);
1.340 - pGroup->pCmdGrpTable = NULL;
1.341 - }
1.342 - if (pGroup->pCmdTable)
1.343 - {
1.344 - sm_trie_destroy(pGroup->pCmdTable);
1.345 - pGroup->pCmdTable = NULL;
1.346 - }
1.347 + /* Free any used memory */
1.348 + delete pGroup->pCmdGrpTable;
1.349 + pGroup->pCmdGrpTable = NULL;
1.350 + delete pGroup->pCmdTable;
1.351 + pGroup->pCmdTable = NULL;
1.352
1.353 /* Link into the free list */
1.354 pGroup->magic = GRP_MAGIC_UNSET;
1.355 @@ -1002,7 +907,7 @@
1.356 m_FreeGroupList = -1;
1.357
1.358 /* Nuke reverse lookups */
1.359 - sm_trie_clear(m_pGroups);
1.360 + m_Groups.clear();
1.361
1.362 /* Free memory on groups */
1.363 GroupId cur = m_FirstGroup;
1.364 @@ -1011,14 +916,8 @@
1.365 {
1.366 pGroup = (AdminGroup *)m_pMemory->GetAddress(cur);
1.367 assert(pGroup->magic == GRP_MAGIC_SET);
1.368 - if (pGroup->pCmdGrpTable)
1.369 - {
1.370 - sm_trie_destroy(pGroup->pCmdGrpTable);
1.371 - }
1.372 - if (pGroup->pCmdTable)
1.373 - {
1.374 - sm_trie_destroy(pGroup->pCmdTable);
1.375 - }
1.376 + delete pGroup->pCmdGrpTable;
1.377 + delete pGroup->pCmdTable;
1.378 cur = pGroup->next_grp;
1.379 }
1.380
1.381 @@ -1043,20 +942,12 @@
1.382
1.383 void AdminCache::RegisterAuthIdentType(const char *name)
1.384 {
1.385 - if (sm_trie_retrieve(m_pAuthTables, name, NULL))
1.386 - {
1.387 + if (m_AuthTables.contains(name))
1.388 return;
1.389 - }
1.390 -
1.391 - Trie *pAuth = sm_trie_create();
1.392
1.393 - AuthMethod method;
1.394 - method.name.assign(name);
1.395 - method.table = pAuth;
1.396 -
1.397 + AuthMethod *method = new AuthMethod(name);
1.398 m_AuthMethods.push_back(method);
1.399 -
1.400 - sm_trie_insert(m_pAuthTables, name, pAuth);
1.401 + m_AuthTables.insert(name, method);
1.402 }
1.403
1.404 void AdminCache::InvalidateAdminCache(bool unlink_admins)
1.405 @@ -1067,12 +958,12 @@
1.406 g_Players.ClearAllAdmins();
1.407 }
1.408 /* Wipe the identity cache first */
1.409 - List<AuthMethod>::iterator iter;
1.410 + List<AuthMethod *>::iterator iter;
1.411 for (iter=m_AuthMethods.begin();
1.412 iter!=m_AuthMethods.end();
1.413 iter++)
1.414 {
1.415 - sm_trie_clear((*iter).table);
1.416 + (*iter)->identities.clear();
1.417 }
1.418
1.419 if (unlink_admins)
1.420 @@ -1152,13 +1043,13 @@
1.421
1.422 bool AdminCache::GetMethodIndex(const char *name, unsigned int *_index)
1.423 {
1.424 - List<AuthMethod>::iterator iter;
1.425 + List<AuthMethod *>::iterator iter;
1.426 unsigned int index = 0;
1.427 for (iter=m_AuthMethods.begin();
1.428 iter!=m_AuthMethods.end();
1.429 iter++,index++)
1.430 {
1.431 - if ((*iter).name.compare(name) == 0)
1.432 + if ((*iter)->name.compare(name) == 0)
1.433 {
1.434 *_index = index;
1.435 return true;
1.436 @@ -1181,11 +1072,9 @@
1.437 return false;
1.438 }
1.439
1.440 - Trie *pTable;
1.441 - if (!sm_trie_retrieve(m_pAuthTables, auth, (void **)&pTable))
1.442 - {
1.443 + AuthMethod *method;
1.444 + if (!m_AuthTables.retrieve(auth, &method))
1.445 return false;
1.446 - }
1.447
1.448 /* If the id was a steam id strip off the STEAM_*: part */
1.449 if (strcmp(auth, "steam") == 0 && strncmp(ident, "STEAM_", 6) == 0)
1.450 @@ -1193,10 +1082,8 @@
1.451 ident += 8;
1.452 }
1.453
1.454 - if (sm_trie_retrieve(pTable, ident, NULL))
1.455 - {
1.456 + if (method->identities.contains(ident))
1.457 return false;
1.458 - }
1.459
1.460 int i_ident = m_pStrings->AddString(ident);
1.461
1.462 @@ -1204,16 +1091,14 @@
1.463 pUser->auth.identidx = i_ident;
1.464 GetMethodIndex(auth, &pUser->auth.index);
1.465
1.466 - return sm_trie_insert(pTable, ident, (void **)id);
1.467 + return method->identities.insert(ident, id);
1.468 }
1.469
1.470 AdminId AdminCache::FindAdminByIdentity(const char *auth, const char *identity)
1.471 {
1.472 - Trie *pTable;
1.473 - if (!sm_trie_retrieve(m_pAuthTables, auth, (void **)&pTable))
1.474 - {
1.475 + AuthMethod *method;
1.476 + if (!m_AuthTables.retrieve(auth, &method))
1.477 return INVALID_ADMIN_ID;
1.478 - }
1.479
1.480 /* If the id was a steam id strip off the STEAM_*: part */
1.481 if (strcmp(auth, "steam") == 0 && strncmp(identity, "STEAM_", 6) == 0)
1.482 @@ -1221,13 +1106,10 @@
1.483 identity += 8;
1.484 }
1.485
1.486 - void *object;
1.487 - if (!sm_trie_retrieve(pTable, identity, &object))
1.488 - {
1.489 + AdminId id;
1.490 + if (!method->identities.retrieve(identity, &id))
1.491 return INVALID_ADMIN_ID;
1.492 - }
1.493 -
1.494 - return (AdminId)object;
1.495 + return id;
1.496 }
1.497
1.498 void AdminCache::SetAdminFlag(AdminId id, AdminFlag flag, bool enabled)
1.499 @@ -1797,56 +1679,30 @@
1.500 return g_ConCmds.CheckClientCommandAccess(client, cmd, bits) ? 1 : 0;
1.501 }
1.502
1.503 -void iterator_glob_basic_override(Trie *pTrie, const char *key, void **value, void *data)
1.504 +void iterator_glob_basic_override(FILE *fp, const char *key, FlagBits flags)
1.505 {
1.506 - FILE *fp;
1.507 - int flags;
1.508 char flagstr[64];
1.509 -
1.510 - fp = (FILE *)data;
1.511 - flags = (int)*value;
1.512 g_Admins.FillFlagString(flags, flagstr, sizeof(flagstr));
1.513 -
1.514 fprintf(fp, "\t\"%s\"\t\t\"%s\"\n", key, flagstr);
1.515 }
1.516
1.517 -void iterator_glob_grp_override(Trie *pTrie, const char *key, void **value, void *data)
1.518 +void iterator_glob_grp_override(FILE *fp, const char *key, FlagBits flags)
1.519 {
1.520 - FILE *fp;
1.521 - int flags;
1.522 char flagstr[64];
1.523 -
1.524 - fp = (FILE *)data;
1.525 - flags = (int)*value;
1.526 g_Admins.FillFlagString(flags, flagstr, sizeof(flagstr));
1.527 -
1.528 fprintf(fp, "\t\"@%s\"\t\t\"%s\"\n", key, flagstr);
1.529 }
1.530
1.531 -void iterator_group_basic_override(Trie *pTrie, const char *key, void **value, void *data)
1.532 +void iterator_group_basic_override(FILE *fp, const char *key, OverrideRule rule)
1.533 {
1.534 - FILE *fp;
1.535 - int flags;
1.536 - char flagstr[64];
1.537 -
1.538 - fp = (FILE *)data;
1.539 - flags = (int)*value;
1.540 - g_Admins.FillFlagString(flags, flagstr, sizeof(flagstr));
1.541 -
1.542 - fprintf(fp, "\t\t\t\"%s\"\t\t\"%s\"\n", key, flagstr);
1.543 + const char *str = (rule == Command_Allow) ? "allow" : "deny";
1.544 + fprintf(fp, "\t\t\t\"%s\"\t\t\"%s\"\n", key, str);
1.545 }
1.546
1.547 -void iterator_group_grp_override(Trie *pTrie, const char *key, void **value, void *data)
1.548 +void iterator_group_grp_override(FILE *fp, const char *key, OverrideRule rule)
1.549 {
1.550 - FILE *fp;
1.551 - int flags;
1.552 - char flagstr[64];
1.553 -
1.554 - fp = (FILE *)data;
1.555 - flags = (int)*value;
1.556 - g_Admins.FillFlagString(flags, flagstr, sizeof(flagstr));
1.557 -
1.558 - fprintf(fp, "\t\t\t\"@%s\"\t\t\"%s\"\n", key, flagstr);
1.559 + const char *str = (rule == Command_Allow) ? "allow" : "deny";
1.560 + fprintf(fp, "\t\t\t\"@%s\"\t\t\"%s\"\n", key, str);
1.561 }
1.562
1.563 void AdminCache::DumpCache(FILE *fp)
1.564 @@ -1904,19 +1760,13 @@
1.565 fprintf(fp, "\n\t\t\"Overrides\"\n\t\t{\n");
1.566 if (pGroup->pCmdGrpTable != NULL)
1.567 {
1.568 - sm_trie_bad_iterator(pGroup->pCmdGrpTable,
1.569 - name_buffer,
1.570 - sizeof(name_buffer),
1.571 - iterator_group_grp_override,
1.572 - fp);
1.573 + for (OverrideMap::iterator iter = pGroup->pCmdTable->iter(); !iter.empty(); iter.next())
1.574 + iterator_group_grp_override(fp, iter->key.chars(), iter->value);
1.575 }
1.576 if (pGroup->pCmdTable != NULL)
1.577 {
1.578 - sm_trie_bad_iterator(pGroup->pCmdTable,
1.579 - name_buffer,
1.580 - sizeof(name_buffer),
1.581 - iterator_group_basic_override,
1.582 - fp);
1.583 + for (OverrideMap::iterator iter = pGroup->pCmdTable->iter(); !iter.empty(); iter.next())
1.584 + iterator_group_basic_override(fp, iter->key.chars(), iter->value);
1.585 }
1.586 fprintf(fp, "\t\t}\n");
1.587
1.588 @@ -1990,22 +1840,10 @@
1.589 fprintf(fp, "}\n\n");
1.590
1.591 fprintf(fp, "\"Overrides\"\n{\n");
1.592 - if (m_pCmdGrpOverrides != NULL)
1.593 - {
1.594 - sm_trie_bad_iterator(m_pCmdGrpOverrides,
1.595 - name_buffer,
1.596 - sizeof(name_buffer),
1.597 - iterator_glob_grp_override,
1.598 - fp);
1.599 - }
1.600 - if (m_pCmdOverrides != NULL)
1.601 - {
1.602 - sm_trie_bad_iterator(m_pCmdOverrides,
1.603 - name_buffer,
1.604 - sizeof(name_buffer),
1.605 - iterator_glob_basic_override,
1.606 - fp);
1.607 - }
1.608 + for (FlagMap::iterator iter = m_CmdGrpOverrides.iter(); !iter.empty(); iter.next())
1.609 + iterator_glob_grp_override(fp, iter->key.chars(), iter->value);
1.610 + for (FlagMap::iterator iter = m_CmdOverrides.iter(); !iter.empty(); iter.next())
1.611 + iterator_glob_basic_override(fp, iter->key.chars(), iter->value);
1.612 fprintf(fp, "}\n");
1.613 }
1.614
1.615 @@ -2037,14 +1875,14 @@
1.616
1.617 const char *AdminCache::GetMethodName(unsigned int index)
1.618 {
1.619 - List<AuthMethod>::iterator iter;
1.620 + List<AuthMethod *>::iterator iter;
1.621 for (iter=m_AuthMethods.begin();
1.622 iter!=m_AuthMethods.end();
1.623 iter++)
1.624 {
1.625 if (index-- == 0)
1.626 {
1.627 - return (*iter).name.c_str();
1.628 + return (*iter)->name.c_str();
1.629 }
1.630 }
1.631