summaryrefslogtreecommitdiff
path: root/src/config.c
diff options
context:
space:
mode:
authorAdam <Adam@drink-coca-cola.info>2010-05-07 15:29:41 -0400
committerAdam <Adam@anope.org>2010-06-18 20:58:55 -0400
commitebfff71599fbedb72009d71cd40c264713b43b5a (patch)
treedd687cc4fd7e77866c91fc7f48646762dee3983d /src/config.c
parent9439cac6b126254bc488c2375b9e7ff5fd4fce74 (diff)
Made opertypes inheritable
Diffstat (limited to 'src/config.c')
-rw-r--r--src/config.c28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/config.c b/src/config.c
index 9c486b7e3..82a2fcac6 100644
--- a/src/config.c
+++ b/src/config.c
@@ -425,8 +425,9 @@ static bool InitOperTypes(ServerConfig *, const char *, bool)
static bool DoOperType(ServerConfig *conf, const char *, const char **, ValueList &values, int *, bool)
{
const char *name = values[0].GetString();
- const char *commands = values[1].GetString();
- const char *privs = values[2].GetString();
+ const char *inherits = values[1].GetString();
+ const char *commands = values[2].GetString();
+ const char *privs = values[3].GetString();
ValueItem vi(name);
if (!ValidateNotEmpty(conf, "opertype", "name", vi))
@@ -442,6 +443,23 @@ static bool DoOperType(ServerConfig *conf, const char *, const char **, ValueLis
spacesepstream privstr(privs);
while (privstr.GetToken(tok))
ot->AddPriv(tok);
+
+ commasepstream inheritstr(inherits);
+ while (inheritstr.GetToken(tok))
+ {
+ /* Strip leading ' ' after , */
+ if (tok.size() > 1 && tok[0] == ' ')
+ tok.erase(tok.begin());
+ for (std::list<OperType *>::iterator it = Config.MyOperTypes.begin(); it != Config.MyOperTypes.end(); ++it)
+ {
+ if ((*it)->GetName() == tok)
+ {
+ Alog() << "Inheriting commands and privs from " << (*it)->GetName() << " to " << ot->GetName();
+ ot->Inherits(*it);
+ break;
+ }
+ }
+ }
Config.MyOperTypes.push_back(ot);
return true;
@@ -772,9 +790,9 @@ int ServerConfig::Read(bool bail)
{DT_CHARPTR},
InitModules, DoModule, DoneModules},
{"opertype",
- {"name", "commands", "privs", NULL},
- {"", "", "", NULL},
- {DT_CHARPTR, DT_CHARPTR, DT_CHARPTR},
+ {"name", "inherits", "commands", "privs", NULL},
+ {"", "", "", "", NULL},
+ {DT_CHARPTR, DT_CHARPTR, DT_CHARPTR, DT_CHARPTR},
InitOperTypes, DoOperType, DoneOperTypes},
{"oper",
{"name", "type", NULL},