diff options
author | Adam <Adam@anope.org> | 2014-02-14 11:10:20 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2014-02-14 11:10:20 -0500 |
commit | ca85df2d7475d42579c29d822f424d2c9713774b (patch) | |
tree | 9ac4c52c1951761e656f87b0d761988e4b19a61b /modules/database/db_old.cpp | |
parent | 5dfa6598c2aaf0e1b64315b7869a2e7d5e357fe1 (diff) |
Don't convert XOP access entries to levels in db_old
Diffstat (limited to 'modules/database/db_old.cpp')
-rw-r--r-- | modules/database/db_old.cpp | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/modules/database/db_old.cpp b/modules/database/db_old.cpp index 55926c77b..d6acc2093 100644 --- a/modules/database/db_old.cpp +++ b/modules/database/db_old.cpp @@ -805,7 +805,8 @@ static void LoadChannels() ci->SetLevel(GetLevelName(j), level); } - ServiceReference<AccessProvider> provider("AccessProvider", "access/access"); + bool xop = tmpu32 & OLD_CI_XOP; + ServiceReference<AccessProvider> provider_access("AccessProvider", "access/access"), provider_xop("AccessProvider", "access/xop"); uint16_t tmpu16; READ(read_uint16(&tmpu16, f)); for (uint16_t j = 0; j < tmpu16; ++j) @@ -814,14 +815,45 @@ static void LoadChannels() READ(read_uint16(&in_use, f)); if (in_use) { - ChanAccess *access = provider ? provider->Create() : NULL; + ChanAccess *access = NULL; + + if (xop) + { + if (provider_xop) + access = provider_xop->Create(); + } + else + if (provider_access) + access = provider_access->Create(); + if (access) access->ci = ci; int16_t level; READ(read_int16(&level, f)); if (access) - access->AccessUnserialize(stringify(level)); + { + if (xop) + { + switch (level) + { + case 3: + access->AccessUnserialize("VOP"); + break; + case 4: + access->AccessUnserialize("HOP"); + break; + case 5: + access->AccessUnserialize("AOP"); + break; + case 10: + access->AccessUnserialize("SOP"); + break; + } + } + else + access->AccessUnserialize(stringify(level)); + } Anope::string mask; READ(read_string(mask, f)); |