From 0409230be0aba22360ce23cab1d9d070fe15c838 Mon Sep 17 00:00:00 2001 From: attilamolnar Date: Tue, 29 May 2012 15:13:42 +0200 Subject: Silence the MODE too if a join was silenced by a module not just the JOIN This leaked information when a module gave privs to the joining user in OnUserPreJoin Fix CycleHostsFromUser having the opposite effect --- src/channels.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/channels.cpp b/src/channels.cpp index 5539f4bfe..6419d3b9a 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -400,11 +400,15 @@ Channel* Channel::ForceChan(Channel* Ptr, User* user, const std::string &privs, Ptr->WriteAllExcept(user, false, 0, except_list, "JOIN :%s", Ptr->name.c_str()); /* Theyre not the first ones in here, make sure everyone else sees the modes we gave the user */ - std::string ms = memb->modes; - for(unsigned int i=0; i < memb->modes.length(); i++) - ms.append(" ").append(user->nick); - if ((Ptr->GetUserCounter() > 1) && (ms.length())) - Ptr->WriteAllExceptSender(user, ServerInstance->Config->CycleHostsFromUser, 0, "MODE %s +%s", Ptr->name.c_str(), ms.c_str()); + if ((Ptr->GetUserCounter() > 1) && (!memb->modes.empty())) + { + std::string ms = memb->modes; + for(unsigned int i=0; i < memb->modes.length(); i++) + ms.append(" ").append(user->nick); + + except_list.insert(user); + Ptr->WriteAllExcept(user, !ServerInstance->Config->CycleHostsFromUser, 0, except_list, "MODE %s +%s", Ptr->name.c_str(), ms.c_str()); + } if (IS_LOCAL(user)) { -- cgit v1.2.3 From 7d41ace956e2b35cb9fe89cb43865bb3ed38523e Mon Sep 17 00:00:00 2001 From: attilamolnar Date: Tue, 29 May 2012 15:13:55 +0200 Subject: Fix printf-style WriteAllExcept not obeying serversource parameter --- src/channels.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/channels.cpp b/src/channels.cpp index 6419d3b9a..51fa74064 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -659,7 +659,7 @@ void Channel::WriteAllExcept(User* user, bool serversource, char status, CUList if (!text) return; - int offset = snprintf(textbuffer,MAXBUF,":%s ", user->GetFullHost().c_str()); + int offset = snprintf(textbuffer,MAXBUF,":%s ", serversource ? ServerInstance->Config->ServerName.c_str() : user->GetFullHost().c_str()); va_start(argsPtr, text); vsnprintf(textbuffer + offset, MAXBUF - offset, text, argsPtr); -- cgit v1.2.3