summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bots.cpp4
-rw-r--r--src/init.cpp21
-rw-r--r--src/messages.cpp14
-rw-r--r--src/misc.cpp8
-rw-r--r--src/nickalias.cpp13
-rw-r--r--src/nickserv.cpp35
-rw-r--r--src/protocol.cpp15
-rw-r--r--src/users.cpp3
8 files changed, 56 insertions, 57 deletions
diff --git a/src/bots.cpp b/src/bots.cpp
index 13b21e1ce..6b7e77377 100644
--- a/src/bots.cpp
+++ b/src/bots.cpp
@@ -51,9 +51,9 @@ BotInfo::BotInfo(const Anope::string &nnick, const Anope::string &nuser, const A
BotListByUID[this->uid] = this;
// If we're synchronised with the uplink already, send the bot.
- if (Me && !Me->GetLinks().empty() && Me->GetLinks().front()->IsSynced())
+ if (Me && Me->IsSynced())
{
- ircdproto->SendClientIntroduction(this->nick, this->GetIdent(), this->host, this->realname, ircd->pseudoclient_mode, this->uid);
+ ircdproto->SendClientIntroduction(this, ircd->pseudoclient_mode);
XLine x(this->nick, "Reserved for services");
ircdproto->SendSQLine(&x);
}
diff --git a/src/init.cpp b/src/init.cpp
index c91cc3b31..df74aecab 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -42,19 +42,24 @@ void introduce_user(const Anope::string &user)
}
/* We make the bots go online */
- for (botinfo_map::const_iterator it = BotListByNick.begin(), it_end = BotListByNick.end(); it != it_end; ++it)
+ for (user_map::const_iterator it = UserListByNick.begin(), it_end = UserListByNick.end(); it != it_end; ++it)
{
- BotInfo *bi = it->second;
+ User *u = it->second;
- if (user.empty() || bi->nick.equals_ci(user))
+ if (user.empty() || u->nick.equals_ci(user))
{
- ircdproto->SendClientIntroduction(bi->nick, bi->GetIdent(), bi->host, bi->realname, ircd->pseudoclient_mode, bi->GetUID());
- XLine x(bi->nick, "Reserved for services");
- ircdproto->SendSQLine(&x);
+ ircdproto->SendClientIntroduction(u, ircd->pseudoclient_mode);
- for (UChannelList::const_iterator cit = bi->chans.begin(), cit_end = bi->chans.end(); cit != cit_end; ++cit)
+ BotInfo *bi = findbot(u->nick);
+ if (bi)
{
- ircdproto->SendJoin(bi, *cit);
+ XLine x(bi->nick, "Reserved for services");
+ ircdproto->SendSQLine(&x);
+
+ for (UChannelList::const_iterator cit = bi->chans.begin(), cit_end = bi->chans.end(); cit != cit_end; ++cit)
+ {
+ ircdproto->SendJoin(bi, *cit);
+ }
}
}
}
diff --git a/src/messages.cpp b/src/messages.cpp
index 72a926618..84365ccea 100644
--- a/src/messages.cpp
+++ b/src/messages.cpp
@@ -281,7 +281,7 @@ int m_whois(const Anope::string &source, const Anope::string &who)
{
if (!source.empty() && !who.empty())
{
- NickAlias *na;
+ User *u;
BotInfo *bi = findbot(who);
if (bi)
{
@@ -291,15 +291,11 @@ int m_whois(const Anope::string &source, const Anope::string &who)
ircdproto->SendNumeric(Config->ServerName, 317, source, "%s %ld %ld :seconds idle, signon time", bi->nick.c_str(), time(NULL) - bi->lastmsg, start_time);
ircdproto->SendNumeric(Config->ServerName, 318, source, "%s :End of /WHOIS list.", who.c_str());
}
- else if (!ircd->svshold && (na = findnick(who)) && na->HasFlag(NS_HELD))
+ else if (!ircd->svshold && (u = finduser(who)) && u->server == Me)
{
- /* We have a nick enforcer client here that we need to respond to.
- * We can't just say it doesn't exist here, even tho it does for
- * other servers :) -GD
- */
- ircdproto->SendNumeric(Config->ServerName, 311, source, "%s %s %s * :Services Enforcer", na->nick.c_str(), Config->NSEnforcerUser.c_str(), Config->NSEnforcerHost.c_str());
- ircdproto->SendNumeric(Config->ServerName, 312, source, "%s %s :%s", na->nick.c_str(), Config->ServerName.c_str(), Config->ServerDesc.c_str());
- ircdproto->SendNumeric(Config->ServerName, 318, source, "%s :End of /WHOIS list.", who.c_str());
+ ircdproto->SendNumeric(Config->ServerName, 311, source, "%s %s %s * :%s", u->nick.c_str(), u->GetIdent().c_str(), u->host.c_str(), u->realname.c_str());
+ ircdproto->SendNumeric(Config->ServerName, 312, source, "%s %s :%s", u->nick.c_str(), Config->ServerName.c_str(), Config->ServerDesc.c_str());
+ ircdproto->SendNumeric(Config->ServerName, 318, source, "%s :End of /WHOIS list.", u->nick.c_str());
}
else
ircdproto->SendNumeric(Config->ServerName, 401, source, "%s :No such service.", who.c_str());
diff --git a/src/misc.cpp b/src/misc.cpp
index 05240b77e..d77ed4d91 100644
--- a/src/misc.cpp
+++ b/src/misc.cpp
@@ -865,14 +865,6 @@ char *str_signed(unsigned char *str)
return nstr;
}
-/* Equivalent to inet_ntoa */
-
-void ntoa(struct in_addr addr, char *ipaddr, int len)
-{
- unsigned char *bytes = reinterpret_cast<unsigned char *>(&addr.s_addr);
- snprintf(ipaddr, len, "%u.%u.%u.%u", bytes[0], bytes[1], bytes[2], bytes[3]);
-}
-
/*
* strlcat and strlcpy were ripped from openssh 2.5.1p2
* They had the following Copyright info:
diff --git a/src/nickalias.cpp b/src/nickalias.cpp
index b02097f19..a67893888 100644
--- a/src/nickalias.cpp
+++ b/src/nickalias.cpp
@@ -112,7 +112,13 @@ void NickAlias::Release()
if (ircd->svshold)
ircdproto->SendSVSHoldDel(this->nick);
else
- ircdproto->SendQuit(this->nick, "");
+ {
+ User *u = finduser(this->nick);
+ if (u && u->server == Me)
+ {
+ delete u;
+ }
+ }
this->UnsetFlag(NS_HELD);
}
@@ -133,10 +139,7 @@ void NickAlias::OnCancel(User *)
ircdproto->SendSVSHold(this->nick);
else
{
- Anope::string uid = ircd->ts6 ? ts6_uid_retrieve() : "";
-
- ircdproto->SendClientIntroduction(this->nick, Config->NSEnforcerUser, Config->NSEnforcerHost, "Services Enforcer", "+", uid);
- new NickServRelease(this->nick, uid, Config->NSReleaseTimeout);
+ new NickServRelease(this, Config->NSReleaseTimeout);
}
}
}
diff --git a/src/nickserv.cpp b/src/nickserv.cpp
index da7b4bc4a..4f3de5d61 100644
--- a/src/nickserv.cpp
+++ b/src/nickserv.cpp
@@ -23,10 +23,10 @@ typedef std::map<Anope::string, NickServRelease *> nickservreleases_map;
static nickservcollides_map NickServCollides;
static nickservreleases_map NickServReleases;
-NickServCollide::NickServCollide(const Anope::string &_nick, time_t delay) : Timer(delay), nick(_nick)
+NickServCollide::NickServCollide(User *user, time_t delay) : Timer(delay), u(user), nick(u->nick)
{
/* Erase the current collide and use the new one */
- nickservcollides_map::iterator nit = NickServCollides.find(this->nick);
+ nickservcollides_map::iterator nit = NickServCollides.find(user->nick);
if (nit != NickServCollides.end())
delete nit->second;
@@ -40,36 +40,43 @@ NickServCollide::~NickServCollide()
void NickServCollide::Tick(time_t ctime)
{
+ if (!u)
+ return;
/* If they identified or don't exist anymore, don't kill them. */
- User *u = finduser(this->nick);
- NickAlias *na = findnick(this->nick);
- if (!u || !na || u->Account() == na->nc || u->my_signon > this->GetSetTime())
+ NickAlias *na = findnick(u->nick);
+ if (!na || u->Account() == na->nc || u->my_signon > this->GetSetTime())
return;
u->Collide(na);
}
-NickServRelease::NickServRelease(const Anope::string &_nick, const Anope::string &_uid, time_t delay) : Timer(delay), nick(_nick), uid(_uid)
+NickServRelease::NickServRelease(NickAlias *na, time_t delay) : User(na->nick, Config->NSEnforcerUser, Config->NSEnforcerHost, ts6_uid_retrieve()), Timer(delay), nick(na->nick)
{
+ this->realname = "Services Enforcer";
+ this->server = Me;
+
/* Erase the current release timer and use the new one */
nickservreleases_map::iterator nit = NickServReleases.find(this->nick);
if (nit != NickServReleases.end())
delete nit->second;
- NickServReleases.insert(std::make_pair(nick, this));
+ NickServReleases.insert(std::make_pair(this->nick, this));
+
+ ircdproto->SendClientIntroduction(this, "+");
}
NickServRelease::~NickServRelease()
{
NickServReleases.erase(this->nick);
+
+ ircdproto->SendQuit(debug_cast<User *>(this), NULL);
}
-void NickServRelease::Tick(time_t ctime)
+void NickServRelease::Tick(time_t)
{
- NickAlias *na = findnick(this->nick);
-
- if (na)
- na->Release();
+ /* Do not do anything here,
+ * The timer manager will delete this timer which will do the necessary cleanup
+ */
}
/*************************************************************************/
@@ -218,12 +225,12 @@ int validate_user(User *u)
else if (na->nc->HasFlag(NI_KILL_QUICK))
{
notice_lang(Config->s_NickServ, u, FORCENICKCHANGE_IN_20_SECONDS);
- new NickServCollide(na->nick, 20);
+ new NickServCollide(u, 20);
}
else
{
notice_lang(Config->s_NickServ, u, FORCENICKCHANGE_IN_1_MINUTE);
- new NickServCollide(na->nick, 60);
+ new NickServCollide(u, 60);
}
}
diff --git a/src/protocol.cpp b/src/protocol.cpp
index dfa7d2b3d..89730f1da 100644
--- a/src/protocol.cpp
+++ b/src/protocol.cpp
@@ -18,12 +18,12 @@ void IRCDProto::SendPrivmsgInternal(const BotInfo *bi, const Anope::string &dest
send_cmd(ircd->ts6 ? bi->GetUID() : bi->nick, "PRIVMSG %s :%s", dest.c_str(), buf.c_str());
}
-void IRCDProto::SendQuitInternal(const BotInfo *bi, const Anope::string &buf)
+void IRCDProto::SendQuitInternal(const User *u, const Anope::string &buf)
{
if (!buf.empty())
- send_cmd(ircd->ts6 ? bi->GetUID() : bi->nick, "QUIT :%s", buf.c_str());
+ send_cmd(ircd->ts6 ? u->GetUID() : u->nick, "QUIT :%s", buf.c_str());
else
- send_cmd(ircd->ts6 ? bi->GetUID() : bi->nick, "QUIT");
+ send_cmd(ircd->ts6 ? u->GetUID() : u->nick, "QUIT");
}
void IRCDProto::SendPartInternal(const BotInfo *bi, const Channel *chan, const Anope::string &buf)
@@ -160,19 +160,14 @@ void IRCDProto::SendGlobalPrivmsg(const BotInfo *bi, const Server *dest, const A
send_cmd(ircd->ts6 ? bi->GetUID() : bi->nick, "PRIVMSG %s%s :%s", ircd->globaltldprefix, dest->GetName().c_str(), msg.c_str());
}
-void IRCDProto::SendQuit(const Anope::string &nick, const Anope::string &)
-{
- send_cmd(nick, "QUIT");
-}
-
-void IRCDProto::SendQuit(const BotInfo *bi, const char *fmt, ...)
+void IRCDProto::SendQuit(const User *u, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
- SendQuitInternal(bi, buf);
+ SendQuitInternal(u, buf);
}
void IRCDProto::SendPing(const Anope::string &servname, const Anope::string &who)
diff --git a/src/users.cpp b/src/users.cpp
index 36b32071b..8c99575b7 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -36,8 +36,9 @@ User::User(const Anope::string &snick, const Anope::string &sident, const Anope:
/* we used to do this by calloc, no more. */
server = NULL;
nc = NULL;
- invalid_pw_count = timestamp = my_signon = invalid_pw_time = lastmemosend = lastnickreg = lastmail = 0;
+ invalid_pw_count = invalid_pw_time = lastmemosend = lastnickreg = lastmail = 0;
OnAccess = false;
+ timestamp = my_signon = time(NULL);
this->nick = snick;
this->ident = sident;