diff options
-rw-r--r-- | include/configreader.h | 6 | ||||
-rw-r--r-- | src/configreader.cpp | 26 |
2 files changed, 23 insertions, 9 deletions
diff --git a/include/configreader.h b/include/configreader.h index 94302f25c..7c5592432 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -182,11 +182,11 @@ struct MultiConfig /** Tag name */ const char* tag; /** One or more items within tag */ - char* items[13]; + char* items[15]; /** One or more defaults for items within tags */ - char* items_default[13]; + char* items_default[15]; /** One or more data types */ - int datatype[13]; + int datatype[15]; /** Initialization function */ MultiNotify init_function; /** Validation function */ diff --git a/src/configreader.cpp b/src/configreader.cpp index ccf88ea0d..ac483229a 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -404,16 +404,27 @@ bool DoConnect(ServerConfig* conf, const char* tag, char** entries, ValueList &v int recvq = values[8].GetInteger(); int localmax = values[9].GetInteger(); int globalmax = values[10].GetInteger(); + const char* name = values[11].GetString(); + const char* parent = values[12].GetString(); - if (*allow) + if (*parent) { - ConnectClass c(timeout, flood, allow, pingfreq, password, threshold, sendq, recvq, localmax, globalmax); - conf->Classes.push_back(c); + /* Find 'parent' and inherit a new class from it, + * then overwrite any values that are set here + */ } else { - ConnectClass c(deny); - conf->Classes.push_back(c); + if (*allow) + { + ConnectClass c(name, timeout, flood, allow, pingfreq, password, threshold, sendq, recvq, localmax, globalmax); + conf->Classes.push_back(c); + } + else + { + ConnectClass c(name, deny); + conf->Classes.push_back(c); + } } return true; @@ -647,12 +658,15 @@ void ServerConfig::Read(bool bail, userrec* user) {"connect", {"allow", "deny", "password", "timeout", "pingfreq", "flood", "threshold", "sendq", "recvq", "localmax", "globalmax", "port", + "name", "parent", NULL}, {"", "", "", "", "120", "", "", "", "", "3", "3", "0", + "", "", NULL}, {DT_CHARPTR, DT_CHARPTR, DT_CHARPTR, DT_INTEGER, DT_INTEGER, DT_INTEGER, - DT_INTEGER, DT_INTEGER, DT_INTEGER, DT_INTEGER, DT_INTEGER, DT_INTEGER}, + DT_INTEGER, DT_INTEGER, DT_INTEGER, DT_INTEGER, DT_INTEGER, DT_INTEGER, + DT_CHARPTR, DT_CHARPTR}, InitConnect, DoConnect, DoneConnect}, {"uline", |