X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fchannels.cpp;h=9ed0f8ee400ead02f0390535d9991bc1afad65a8;hb=35d20fbabe8babe761e938e4c9a65c47f303f81d;hp=2884b2d3b659afdc052e6d7e421bf396655427b6;hpb=8d7e3fab28008e6353c7520c711aefc4a10e282d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/channels.cpp b/src/channels.cpp index 2884b2d3b..9ed0f8ee4 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team + * InspIRCd: (C) 2002-2009 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see @@ -25,8 +25,7 @@ Channel::Channel(InspIRCd* Instance, const std::string &cname, time_t ts) : Serv (*(ServerInstance->chanlist))[cname.c_str()] = this; this->name.assign(cname, 0, ServerInstance->Config->Limits.ChanMax); - this->created = ts ? ts : ServerInstance->Time(); - this->age = this->created; + this->age = ts ? ts : ServerInstance->Time(); maxbans = topicset = 0; modes.reset(); @@ -276,7 +275,7 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool } else { - if (IS_OPER(user)) + if (user->HasPrivPermission("channels/high-join-limit")) { if (user->chans.size() >= Instance->Config->OperMaxChans) { @@ -297,6 +296,7 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool strlcpy(cname, cn, Instance->Config->Limits.ChanMax); Ptr = Instance->FindChan(cname); + bool created_by_local = false; if (!Ptr) { @@ -311,6 +311,7 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool else { privs = "@"; + created_by_local = true; } if (IS_LOCAL(user) && override == false) @@ -413,15 +414,17 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool } } - /* As spotted by jilles, dont bother to set this on remote users */ - if (IS_LOCAL(user) && Ptr->GetUserCounter() == 0) + if (created_by_local) + { + /* As spotted by jilles, dont bother to set this on remote users */ Ptr->SetDefaultModes(); + } return Channel::ForceChan(Instance, Ptr, user, privs, bursting); } Channel* Channel::ForceChan(InspIRCd* Instance, Channel* Ptr, User* user, const std::string &privs, bool bursting) -{ +{ std::string nick = user->nick; bool silent = false; @@ -563,8 +566,6 @@ bool Channel::IsExtBanned(User *user, char type) /* Channel::PartUser * remove a channel from a users record, and return the number of users left. * Therefore, if this function returns 0 the caller should delete the Channel. - * - * XXX: bleh, string copy of reason, fixme! -- w00t */ long Channel::PartUser(User *user, std::string &reason) { @@ -1200,4 +1201,3 @@ void Channel::RemoveAllPrefixes(User* user) prefixes.erase(n); } } -