X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fchannels.cpp;h=7e6555ae80b94d666f22ae46aa60a1d10ae816df;hb=c8f515121fbdf3e4de693712ef2311cece45477d;hp=bc23c680a07b309a83de482bc29ef7c1ed18dd93;hpb=ae2748c16b6f6feb64d769fe6cef5ea069dbef37;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/channels.cpp b/src/channels.cpp index bc23c680a..7e6555ae8 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -267,7 +267,7 @@ Channel* Channel::JoinUser(LocalUser* user, std::string cname, bool override, co if (!limit.empty()) { FIRST_MOD_RESULT(OnCheckLimit, MOD_RESULT, (user, chan)); - if (!MOD_RESULT.check((chan->GetUserCounter() < atol(limit.c_str())))) + if (!MOD_RESULT.check(chan->GetUserCounter() < ConvToNum(limit))) { user->WriteNumeric(ERR_CHANNELISFULL, chan->name, "Cannot join channel (Channel is full)"); return NULL; @@ -349,6 +349,9 @@ bool Channel::IsBanned(User* user) return (result == MOD_RES_DENY); ListModeBase* banlm = static_cast(*ban); + if (!banlm) + return false; + const ListModeBase::ModeList* bans = banlm->GetList(this); if (bans) { @@ -381,8 +384,8 @@ bool Channel::CheckBan(User* user, const std::string& mask) if (InspIRCd::Match(nickIdent, prefix, NULL)) { std::string suffix(mask, at + 1); - if (InspIRCd::Match(user->host, suffix, NULL) || - InspIRCd::Match(user->dhost, suffix, NULL) || + if (InspIRCd::Match(user->GetRealHost(), suffix, NULL) || + InspIRCd::Match(user->GetDisplayedHost(), suffix, NULL) || InspIRCd::MatchCIDR(user->GetIPString(), suffix, NULL)) return true; } @@ -397,12 +400,18 @@ ModResult Channel::GetExtBanStatus(User *user, char type) return rv; ListModeBase* banlm = static_cast(*ban); + if (!banlm) + return MOD_RES_PASSTHRU; + const ListModeBase::ModeList* bans = banlm->GetList(this); if (bans) { for (ListModeBase::ModeList::const_iterator it = bans->begin(); it != bans->end(); ++it) { - if (CheckBan(user, it->mask)) + if (it->mask.length() <= 2 || it->mask[0] != type || it->mask[1] != ':') + continue; + + if (CheckBan(user, it->mask.substr(2))) return MOD_RES_DENY; } }