summaryrefslogtreecommitdiff
path: root/src/users.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/users.cpp')
-rw-r--r--src/users.cpp111
1 files changed, 47 insertions, 64 deletions
diff --git a/src/users.cpp b/src/users.cpp
index 327d0b5bb..61600bd04 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -962,43 +962,42 @@ long FindMatchingLocal(userrec* user)
return x;
}
-void FullConnectUser(userrec* user, CullList* Goners)
+void userrec::FullConnect(CullList* Goners)
{
ServerInstance->stats->statsConnects++;
- user->idle_lastmsg = TIME;
- log(DEBUG,"ConnectUser: %s",user->nick);
+ this->idle_lastmsg = TIME;
+
+ ConnectClass a = GetClass(this);
- ConnectClass a = GetClass(user);
-
if (a.type == CC_DENY)
{
- Goners->AddItem(user,"Unauthorised connection");
+ Goners->AddItem(this,"Unauthorised connection");
return;
}
- if ((*(a.pass.c_str())) && (!user->haspassed))
+ if ((*(a.pass.c_str())) && (!this->haspassed))
{
- Goners->AddItem(user,"Invalid password");
+ Goners->AddItem(this,"Invalid password");
return;
}
- if (FindMatchingLocal(user) > a.maxlocal)
+ if (FindMatchingLocal(this) > a.maxlocal)
{
- Goners->AddItem(user,"No more connections allowed from your host via this connect class (local)");
- WriteOpers("*** WARNING: maximum LOCAL connections (%ld) exceeded for IP %s",a.maxlocal,user->GetIPString());
+ Goners->AddItem(this, "No more connections allowed from your host via this connect class (local)");
+ WriteOpers("*** WARNING: maximum LOCAL connections (%ld) exceeded for IP %s", a.maxlocal, this->GetIPString());
return;
}
- else if (FindMatchingGlobal(user) > a.maxglobal)
+ else if (FindMatchingGlobal(this) > a.maxglobal)
{
- Goners->AddItem(user,"No more connections allowed from your host via this connect class (global)");
- WriteOpers("*** WARNING: maximum GLOBAL connections (%ld) exceeded for IP %s",a.maxglobal,user->GetIPString());
+ Goners->AddItem(this, "No more connections allowed from your host via this connect class (global)");
+ WriteOpers("*** WARNING: maximum GLOBAL connections (%ld) exceeded for IP %s",a.maxglobal, this->GetIPString());
return;
}
char match_against[MAXBUF];
- snprintf(match_against,MAXBUF,"%s@%s",user->ident,user->host);
+ snprintf(match_against,MAXBUF,"%s@%s", this->ident, this->host);
char* e = matches_exception(match_against);
-
+
if (!e)
{
char* r = matches_gline(match_against);
@@ -1007,7 +1006,7 @@ void FullConnectUser(userrec* user, CullList* Goners)
{
char reason[MAXBUF];
snprintf(reason,MAXBUF,"G-Lined: %s",r);
- Goners->AddItem(user,reason);
+ Goners->AddItem(this, reason);
return;
}
@@ -1017,18 +1016,18 @@ void FullConnectUser(userrec* user, CullList* Goners)
{
char reason[MAXBUF];
snprintf(reason,MAXBUF,"K-Lined: %s",r);
- Goners->AddItem(user,reason);
+ Goners->AddItem(this, reason);
return;
}
}
- WriteServ(user->fd,"NOTICE Auth :Welcome to \002%s\002!",Config->Network);
- WriteServ(user->fd,"001 %s :Welcome to the %s IRC Network %s!%s@%s",user->nick,Config->Network,user->nick,user->ident,user->host);
- WriteServ(user->fd,"002 %s :Your host is %s, running version %s",user->nick,Config->ServerName,VERSION);
- WriteServ(user->fd,"003 %s :This server was created %s %s",user->nick,__TIME__,__DATE__);
- WriteServ(user->fd,"004 %s %s %s %s %s %s",user->nick,Config->ServerName,VERSION,ServerInstance->ModeGrok->UserModeList().c_str(),ServerInstance->ModeGrok->ChannelModeList().c_str(),+ServerInstance->ModeGrok->ParaModeList().c_str());
-
+ WriteServ(this->fd,"NOTICE Auth :Welcome to \002%s\002!",Config->Network);
+ WriteServ(this->fd,"001 %s :Welcome to the %s IRC Network %s!%s@%s",this->nick, Config->Network, this->nick, this->ident, this->host);
+ WriteServ(this->fd,"002 %s :Your host is %s, running version %s",this->nick,Config->ServerName,VERSION);
+ WriteServ(this->fd,"003 %s :This server was created %s %s", this->nick, __TIME__, __DATE__);
+ WriteServ(this->fd,"004 %s %s %s %s %s %s", this->nick, Config->ServerName, VERSION, ServerInstance->ModeGrok->UserModeList().c_str(), ServerInstance->ModeGrok->ChannelModeList().c_str(), ServerInstance->ModeGrok->ParaModeList().c_str());
+
// anfl @ #ratbox, efnet reminded me that according to the RFC this cant contain more than 13 tokens per line...
// so i'd better split it :)
std::stringstream out(Config->data005);
@@ -1044,94 +1043,78 @@ void FullConnectUser(userrec* user, CullList* Goners)
if ((token_counter >= 13) || (out.eof() == true))
{
- WriteServ(user->fd,"005 %s %s:are supported by this server",user->nick,line5.c_str());
+ WriteServ(this->fd,"005 %s %s:are supported by this server", this->nick, line5.c_str());
line5 = "";
token_counter = 0;
}
}
- ShowMOTD(user);
+ ShowMOTD(this);
/*
* fix 3 by brain, move registered = 7 below these so that spurious modes and host
* changes dont go out onto the network and produce 'fake direction'.
*/
- FOREACH_MOD(I_OnUserConnect,OnUserConnect(user));
- FOREACH_MOD(I_OnGlobalConnect,OnGlobalConnect(user));
- user->registered = REG_ALL;
- WriteOpers("*** Client connecting on port %d: %s!%s@%s [%s]",user->GetPort(),user->nick,user->ident,user->host,user->GetIPString());
+ FOREACH_MOD(I_OnUserConnect,OnUserConnect(this));
+ FOREACH_MOD(I_OnGlobalConnect,OnGlobalConnect(this));
+ this->registered = REG_ALL;
+ WriteOpers("*** Client connecting on port %d: %s!%s@%s [%s]", this->GetPort(), this->nick, this->ident, this->host, this->GetIPString());
}
-/** ReHashNick()
+/** userrec::UpdateNick()
* re-allocates a nick in the user_hash after they change nicknames,
* returns a pointer to the new user as it may have moved
*/
-userrec* ReHashNick(const char* Old, const char* New)
+userrec* userrec::UpdateNickHash(const char* New)
{
//user_hash::iterator newnick;
- user_hash::iterator oldnick = clientlist.find(Old);
-
- log(DEBUG,"ReHashNick: %s %s",Old,New);
+ user_hash::iterator oldnick = clientlist.find(this->nick);
- if (!strcasecmp(Old,New))
- {
- log(DEBUG,"old nick is new nick, skipping");
+ if (!strcasecmp(this->nick,New))
return oldnick->second;
- }
if (oldnick == clientlist.end())
return NULL; /* doesnt exist */
- log(DEBUG,"ReHashNick: Found hashed nick %s",Old);
-
userrec* olduser = oldnick->second;
clientlist[New] = olduser;
clientlist.erase(oldnick);
-
- log(DEBUG,"ReHashNick: Nick rehashed as %s",New);
-
return clientlist[New];
}
-void force_nickchange(userrec* user,const char* newnick)
+bool userrec::ForceNickChange(const char* newnick)
{
char nick[MAXBUF];
int MOD_RESULT = 0;
*nick = 0;
- FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(user,newnick));
+ FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(this, newnick));
if (MOD_RESULT)
{
ServerInstance->stats->statsCollisions++;
- userrec::QuitUser(user,"Nickname collision");
- return;
+ return false;
}
if (matches_qline(newnick))
{
ServerInstance->stats->statsCollisions++;
- userrec::QuitUser(user,"Nickname collision");
- return;
+ return false;
}
- if (user)
+ if (newnick)
{
- if (newnick)
- {
- strlcpy(nick,newnick,MAXBUF-1);
- }
-
- if (user->registered == REG_ALL)
- {
- const char* pars[1];
- pars[0] = nick;
- std::string cmd = "NICK";
-
- ServerInstance->Parser->CallHandler(cmd,pars,1,user);
- }
+ strlcpy(this->nick, newnick, NICKMAX - 1);
}
+ if (this->registered == REG_ALL)
+ {
+ const char* pars[1];
+ pars[0] = nick;
+ std::string cmd = "NICK";
+ ServerInstance->Parser->CallHandler(cmd, pars, 1, this);
+ }
+ return true;
}
void userrec::SetSockAddr(int protocol_family, const char* ip, int port)