X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_sslmodes.cpp;h=d2a8f6fb14a33142cd13ddd93f2dd20f8e5ccbcd;hb=1484a054870bdfe94346057053d5c8e48a708232;hp=b97f099b9d39147526a96d6c9d88c8d377472d95;hpb=7aaae3c8425cbe963947f12092742d9044a36dac;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_sslmodes.cpp b/src/modules/m_sslmodes.cpp index b97f099b9..d2a8f6fb1 100644 --- a/src/modules/m_sslmodes.cpp +++ b/src/modules/m_sslmodes.cpp @@ -5,10 +5,13 @@ /* $ModDesc: Provides support for unreal-style channel mode +z */ +static char* dummy; + class SSLMode : public ModeHandler { + Server* Srv; public: - SSLMode() : ModeHandler('z', 0, 0, false, MODETYPE_CHANNEL, false) { } + SSLMode(Server* s) : ModeHandler('z', 0, 0, false, MODETYPE_CHANNEL, false), Srv(s) { } ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding) { @@ -19,12 +22,13 @@ class SSLMode : public ModeHandler chanuserlist userlist = Srv->GetUsers(channel); for(unsigned int i = 0; i < userlist.size(); i++) { - if(!userlist[i]->GetExt("ssl")) + if(!userlist[i]->GetExt("ssl", dummy)) { WriteServ(source->fd, "490 %s %s :all members of the channel must be connected via SSL", source->nick, channel->name); return MODEACTION_DENY; } } + channel->SetMode('z',true); return MODEACTION_ALLOW; } else @@ -34,7 +38,13 @@ class SSLMode : public ModeHandler } else { - (channel->IsModeSet('z')) ? return MODEACTION_DENY : return MODEACTION_ALLOW; + if (channel->IsModeSet('z')) + { + channel->SetMode('z',false); + return MODEACTION_ALLOW; + } + + return MODEACTION_DENY; } } }; @@ -50,7 +60,7 @@ class ModuleSSLModes : public Module { Srv = Me; - sslm = new SSLMode(); + sslm = new SSLMode(Me); Srv->AddMode(sslm, 'z'); } @@ -68,7 +78,7 @@ class ModuleSSLModes : public Module { if(chan && chan->IsModeSet('z')) { - if(user->GetExt("ssl")) + if(user->GetExt("ssl", dummy)) { // Let them in return 0;