virtual void OnConnected()
{
- ServerInstance->Logs->Log("m_ident",DEBUG,"OnConnected()");
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"OnConnected()");
ServerInstance->SE->ChangeEventMask(this, FD_WANT_POLL_READ | FD_WANT_NO_WRITE);
char req[32];
break;
case EVENT_ERROR:
/* fd error event, ohshi- */
- ServerInstance->Logs->Log("m_ident",DEBUG,"EVENT_ERROR");
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"EVENT_ERROR");
/* We *must* Close() here immediately or we get a
* huge storm of EVENT_ERROR events!
*/
*/
if (GetFd() > -1)
{
- ServerInstance->Logs->Log("m_ident",DEBUG,"Close ident socket %d", GetFd());
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"Close ident socket %d", GetFd());
ServerInstance->SE->DelFd(this);
ServerInstance->SE->Close(GetFd());
this->SetFd(-1);
if (recvresult < 3)
return;
- ServerInstance->Logs->Log("m_ident",DEBUG,"ReadResponse()");
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"ReadResponse()");
/* Truncate at the first null character, but first make sure
* there is at least one null char (at the end of the buffer).
*/
ibuf[recvresult] = '\0';
std::string buf(ibuf);
- std::string::size_type lastcolon = buf.rfind(':');
- if (lastcolon == std::string::npos)
+
+ /* <2 colons: invalid
+ * 2 colons: reply is an error
+ * >3 colons: there is a colon in the ident
+ */
+ if (std::count(buf.begin(), buf.end(), ':') != 3)
return;
+ std::string::size_type lastcolon = buf.rfind(':');
+
/* Truncate the ident at any characters we don't like, skip leading spaces */
for (std::string::const_iterator i = buf.begin()+lastcolon+1; i != buf.end(); ++i)
{
- if (result.size()+1 == ServerInstance->Config->Limits.IdentMax)
+ if (result.size() == ServerInstance->Config->Limits.IdentMax)
/* Ident is getting too long */
break;
public:
ModuleIdent() : ext("ident_socket", this)
{
+ }
+
+ void init()
+ {
+ ServerInstance->Modules->AddService(ext);
OnRehash(NULL);
Implementation eventlist[] = {
I_OnRehash, I_OnUserInit, I_OnCheckReady,
I_OnUserDisconnect, I_OnSetConnectClass
};
- ServerInstance->Modules->Attach(eventlist, this, 5);
- }
-
- ~ModuleIdent()
- {
+ ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
}
virtual Version GetVersion()
}
catch (ModuleException &e)
{
- ServerInstance->Logs->Log("m_ident",DEBUG,"Ident exception: %s", e.GetReason());
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG,"Ident exception: %s", e.GetReason());
}
}
IdentRequestSocket *isock = ext.get(user);
if (!isock)
{
- ServerInstance->Logs->Log("m_ident",DEBUG, "No ident socket :(");
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "No ident socket :(");
return MOD_RES_PASSTHRU;
}
- ServerInstance->Logs->Log("m_ident",DEBUG, "Has ident_socket");
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "Has ident_socket");
time_t compare = isock->age;
compare += RequestTimeout;
{
/* Ident timeout */
user->WriteServ("NOTICE Auth :*** Ident request timed out.");
- ServerInstance->Logs->Log("m_ident",DEBUG, "Timeout");
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "Timeout");
}
else if (!isock->HasResult())
{
// time still good, no result yet... hold the registration
- ServerInstance->Logs->Log("m_ident",DEBUG, "No result yet");
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "No result yet");
return MOD_RES_DENY;
}
- ServerInstance->Logs->Log("m_ident",DEBUG, "Yay, result!");
+ ServerInstance->Logs->Log("m_ident",LOG_DEBUG, "Yay, result!");
/* wooo, got a result (it will be good, or bad) */
if (isock->result.empty())
};
MODULE_INIT(ModuleIdent)
-