X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fchannels.cpp;h=c0055bf1d015a37f0b2b54a2dad78b3cf5d767d3;hb=d49e33b22c2cbb22bad71fb07ce8003dec8270cf;hp=a111512bc79ebb0e6d2a7eb5f1dfd27e4e9f27aa;hpb=5aaa38bea4ff3556dc3bff8c09c72a8067368c17;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/channels.cpp b/src/channels.cpp index a111512bc..c0055bf1d 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -288,18 +288,13 @@ chanrec* chanrec::JoinUser(InspIRCd* Instance, userrec *user, const char* cn, bo } } } - if (Ptr->modes[CM_INVITEONLY]) + if (Ptr->IsModeSet('i')) { MOD_RESULT = 0; FOREACH_RESULT_I(Instance,I_OnCheckInvite,OnCheckInvite(user, Ptr)); if (!MOD_RESULT) { - if (user->IsInvited(Ptr->name)) - { - /* user was invited to channel */ - /* there may be an optional channel NOTICE here */ - } - else + if (!user->IsInvited(Ptr->name)) { user->WriteServ("473 %s %s :Cannot join channel (Invite only)",user->nick, Ptr->name); return NULL; @@ -336,23 +331,29 @@ chanrec* chanrec::JoinUser(InspIRCd* Instance, userrec *user, const char* cn, bo * OperMaxchans. For remote users which are not bound by the channel limits, * we can extend infinitely. Otherwise, nope, youre restricted to MaxChans. */ - if (!IS_LOCAL(user) || override == true) + + + + /* + * We place no restrictions on remote users, users that are override-joining, or users that are + * currently in under MaxChans channels. For all others, they won't get in here. -- w00t + */ + if (!IS_LOCAL(user) || override == true || user->chans.size() < Instance->Config->MaxChans) { return chanrec::ForceChan(Instance, Ptr, user, privs); } - else if (IS_OPER(user)) + + /* + * If the above fails, and the user is an oper -- we let them in if they are under OperMaxChans. + * Otherwise, they're stuck, and need to override to get in, etc. -- w00t + */ + if (IS_OPER(user)) { - /* Oper allows extension up to the OperMaxchans value */ if (user->chans.size() < Instance->Config->OperMaxChans) { return chanrec::ForceChan(Instance, Ptr, user, privs); } } - else if (user->chans.size() < Instance->Config->MaxChans) - { - return chanrec::ForceChan(Instance, Ptr, user, privs); - } - user->WriteServ("405 %s %s :You are on too many channels",user->nick, cname); @@ -864,7 +865,7 @@ void chanrec::UserList(userrec *user, CUList *ulist) for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++) { - if ((!has_user) && (i->first->modes[UM_INVISIBLE])) + if ((!has_user) && (i->first->IsModeSet('i'))) { /* * user is +i, and source not on the channel, does not show