mirror of
https://github.com/anope/anope.git
synced 2026-06-29 00:26:39 +02:00
Added a new logging system
This commit is contained in:
+8
-7
@@ -20,16 +20,15 @@ BotInfo *MemoServ = NULL;
|
||||
BotInfo *NickServ = NULL;
|
||||
BotInfo *OperServ = NULL;
|
||||
|
||||
BotInfo::BotInfo(const Anope::string &nnick, const Anope::string &nuser, const Anope::string &nhost, const Anope::string &nreal) : User(nnick, ts6_uid_retrieve())
|
||||
BotInfo::BotInfo(const Anope::string &nnick, const Anope::string &nuser, const Anope::string &nhost, const Anope::string &nreal) : User(nnick, nuser, nhost, ts6_uid_retrieve())
|
||||
{
|
||||
this->ident = nuser;
|
||||
this->host = nhost;
|
||||
this->realname = nreal;
|
||||
this->server = Me;
|
||||
|
||||
this->chancount = 0;
|
||||
this->lastmsg = this->created = time(NULL);
|
||||
|
||||
this->SetFlag(BI_CORE);
|
||||
if (!Config->s_ChanServ.empty() && nnick.equals_ci(Config->s_ChanServ))
|
||||
ChanServ = this;
|
||||
else if (!Config->s_BotServ.empty() && nnick.equals_ci(Config->s_BotServ))
|
||||
@@ -44,6 +43,8 @@ BotInfo::BotInfo(const Anope::string &nnick, const Anope::string &nuser, const A
|
||||
NickServ = this;
|
||||
else if (!Config->s_GlobalNoticer.empty() && nnick.equals_ci(Config->s_GlobalNoticer))
|
||||
Global = this;
|
||||
else
|
||||
this->UnsetFlag(BI_CORE);
|
||||
|
||||
BotListByNick[this->nick] = this;
|
||||
if (!this->uid.empty())
|
||||
@@ -168,16 +169,16 @@ void BotInfo::Join(Channel *c, bool update_ts)
|
||||
|
||||
c->JoinUser(this);
|
||||
ChannelContainer *cc = this->FindChannel(c);
|
||||
for (std::list<ChannelModeStatus *>::iterator it = BotModes.begin(), it_end = BotModes.end(); it != it_end; ++it)
|
||||
for (int i = 0; i < Config->BotModeList.size(); ++i)
|
||||
{
|
||||
if (!update_ts)
|
||||
{
|
||||
c->SetMode(this, *it, this->nick, false);
|
||||
c->SetMode(this, Config->BotModeList[i], this->nick, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
cc->Status->SetFlag((*it)->Name);
|
||||
c->SetModeInternal(*it, this->nick, false);
|
||||
cc->Status->SetFlag(Config->BotModeList[i]->Name);
|
||||
c->SetModeInternal(Config->BotModeList[i], this->nick, false);
|
||||
}
|
||||
}
|
||||
if (!update_ts)
|
||||
|
||||
+39
-33
@@ -37,6 +37,8 @@ Channel::Channel(const Anope::string &name, time_t ts)
|
||||
this->ci = cs_findchan(this->name);
|
||||
if (this->ci)
|
||||
this->ci->c = this;
|
||||
|
||||
Log(NULL, this, "create");
|
||||
|
||||
FOREACH_MOD(I_OnChannelCreate, OnChannelCreate(this));
|
||||
}
|
||||
@@ -49,7 +51,7 @@ Channel::~Channel()
|
||||
|
||||
FOREACH_MOD(I_OnChannelDelete, OnChannelDelete(this));
|
||||
|
||||
Alog(LOG_DEBUG) << "Deleting channel " << this->name;
|
||||
Log(NULL, this, "destroy");
|
||||
|
||||
for (bd = this->bd; bd; bd = next)
|
||||
{
|
||||
@@ -114,7 +116,7 @@ void Channel::Sync()
|
||||
|
||||
void Channel::JoinUser(User *user)
|
||||
{
|
||||
Alog(LOG_DEBUG) << user->nick << " joins " << this->name;
|
||||
Log(user, this, "join");
|
||||
|
||||
ChannelStatus *Status = new ChannelStatus();
|
||||
ChannelContainer *cc = new ChannelContainer(this);
|
||||
@@ -128,7 +130,7 @@ void Channel::JoinUser(User *user)
|
||||
bool update_ts = false;
|
||||
if (this->ci && this->ci->HasFlag(CI_PERSIST) && this->creation_time > this->ci->time_registered)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Changing TS of " << this->name << " from " << this->creation_time << " to " << this->ci->time_registered;
|
||||
Log(LOG_DEBUG) << "Changing TS of " << this->name << " from " << this->creation_time << " to " << this->ci->time_registered;
|
||||
this->creation_time = this->ci->time_registered;
|
||||
update_ts = true;
|
||||
}
|
||||
@@ -188,13 +190,13 @@ void Channel::DeleteUser(User *user)
|
||||
if (this->ci)
|
||||
update_cs_lastseen(user, this->ci);
|
||||
|
||||
Alog(LOG_DEBUG) << user->nick << " leaves " << this->name;
|
||||
Log(user, this, "leaves");
|
||||
|
||||
CUserList::iterator cit, cit_end = this->users.end();
|
||||
for (cit = this->users.begin(); (*cit)->user != user && cit != cit_end; ++cit);
|
||||
if (cit == cit_end)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Channel::DeleteUser() tried to delete nonexistant user " << user->nick << " from channel " << this->name;
|
||||
Log(LOG_DEBUG) << "Channel::DeleteUser() tried to delete nonexistant user " << user->nick << " from channel " << this->name;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -206,7 +208,7 @@ void Channel::DeleteUser(User *user)
|
||||
for (uit = user->chans.begin(); (*uit)->chan != this && uit != uit_end; ++uit);
|
||||
if (uit == uit_end)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Channel::DeleteUser() tried to delete nonexistant channel " << this->name << " from " << user->nick << "'s channel list";
|
||||
Log(LOG_DEBUG) << "Channel::DeleteUser() tried to delete nonexistant channel " << this->name << " from " << user->nick << "'s channel list";
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -310,7 +312,7 @@ void Channel::SetModeInternal(ChannelMode *cm, const Anope::string ¶m, bool
|
||||
{
|
||||
if (param.empty())
|
||||
{
|
||||
Alog() << "Channel::SetModeInternal() mode " << cm->ModeChar << " with no parameter for channel " << this->name;
|
||||
Log() << "Channel::SetModeInternal() mode " << cm->ModeChar << " with no parameter for channel " << this->name;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -321,11 +323,11 @@ void Channel::SetModeInternal(ChannelMode *cm, const Anope::string ¶m, bool
|
||||
|
||||
if (!u)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "MODE " << this->name << " +" << cm->ModeChar << " for nonexistant user " << param;
|
||||
Log() << "MODE " << this->name << " +" << cm->ModeChar << " for nonexistant user " << param;
|
||||
return;
|
||||
}
|
||||
|
||||
Alog(LOG_DEBUG) << "Setting +" << cm->ModeChar << " on " << this->name << " for " << u->nick;
|
||||
Log(LOG_DEBUG) << "Setting +" << cm->ModeChar << " on " << this->name << " for " << u->nick;
|
||||
|
||||
/* Set the status on the user */
|
||||
ChannelContainer *cc = u->FindChannel(this);
|
||||
@@ -342,7 +344,7 @@ void Channel::SetModeInternal(ChannelMode *cm, const Anope::string ¶m, bool
|
||||
{
|
||||
if (param.empty())
|
||||
{
|
||||
Alog() << "Channel::SetModeInternal() mode " << cm->ModeChar << " with no parameter for channel " << this->name;
|
||||
Log() << "Channel::SetModeInternal() mode " << cm->ModeChar << " with no parameter for channel " << this->name;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -357,7 +359,7 @@ void Channel::SetModeInternal(ChannelMode *cm, const Anope::string ¶m, bool
|
||||
{
|
||||
if (cm->Type != MODE_PARAM)
|
||||
{
|
||||
Alog() << "Channel::SetModeInternal() mode " << cm->ModeChar << " for " << this->name << " with a paramater, but its not a param mode";
|
||||
Log() << "Channel::SetModeInternal() mode " << cm->ModeChar << " for " << this->name << " with a paramater, but its not a param mode";
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -437,7 +439,7 @@ void Channel::RemoveModeInternal(ChannelMode *cm, const Anope::string ¶m, bo
|
||||
{
|
||||
if (param.empty())
|
||||
{
|
||||
Alog() << "Channel::RemoveModeInternal() mode " << cm->ModeChar << " with no parameter for channel " << this->name;
|
||||
Log() << "Channel::RemoveModeInternal() mode " << cm->ModeChar << " with no parameter for channel " << this->name;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -449,17 +451,17 @@ void Channel::RemoveModeInternal(ChannelMode *cm, const Anope::string ¶m, bo
|
||||
/* Reset modes on bots if we're supposed to */
|
||||
if (bi)
|
||||
{
|
||||
if (std::find(BotModes.begin(), BotModes.end(), cm) != BotModes.end())
|
||||
if (std::find(Config->BotModeList.begin(), Config->BotModeList.end(), cm) != Config->BotModeList.end())
|
||||
this->SetMode(bi, cm, bi->nick);
|
||||
}
|
||||
|
||||
if (!u)
|
||||
{
|
||||
Alog() << "Channel::RemoveModeInternal() MODE " << this->name << "-" << cm->ModeChar << " for nonexistant user " << param;
|
||||
Log() << "Channel::RemoveModeInternal() MODE " << this->name << "-" << cm->ModeChar << " for nonexistant user " << param;
|
||||
return;
|
||||
}
|
||||
|
||||
Alog(LOG_DEBUG) << "Setting -" << cm->ModeChar << " on " << this->name << " for " << u->nick;
|
||||
Log(LOG_DEBUG) << "Setting -" << cm->ModeChar << " on " << this->name << " for " << u->nick;
|
||||
|
||||
/* Remove the status on the user */
|
||||
ChannelContainer *cc = u->FindChannel(this);
|
||||
@@ -473,7 +475,7 @@ void Channel::RemoveModeInternal(ChannelMode *cm, const Anope::string ¶m, bo
|
||||
{
|
||||
if (param.empty())
|
||||
{
|
||||
Alog() << "Channel::RemoveModeInternal() mode " << cm->ModeChar << " with no parameter for channel " << this->name;
|
||||
Log() << "Channel::RemoveModeInternal() mode " << cm->ModeChar << " with no parameter for channel " << this->name;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -904,11 +906,11 @@ void ChanSetInternalModes(Channel *c, int ac, const char **av)
|
||||
c->RemoveModeInternal(cm, av[j]);
|
||||
}
|
||||
else
|
||||
Alog() << "warning: ChanSetInternalModes() recieved more modes requiring params than params, modes: " << merge_args(ac, av) << ", ac: " << ac << ", j: " << j;
|
||||
Log() << "warning: ChanSetInternalModes() recieved more modes requiring params than params, modes: " << merge_args(ac, av) << ", ac: " << ac << ", j: " << j;
|
||||
}
|
||||
|
||||
if (j + k + 1 < ac)
|
||||
Alog() << "warning: ChanSetInternalModes() recieved more params than modes requiring them, modes: " << merge_args(ac, av) << ", ac: " << ac << ", j: " << j << " k: " << k;
|
||||
Log() << "warning: ChanSetInternalModes() recieved more params than modes requiring them, modes: " << merge_args(ac, av) << ", ac: " << ac << ", j: " << j << " k: " << k;
|
||||
}
|
||||
|
||||
/** Kick a user from a channel internally
|
||||
@@ -924,11 +926,11 @@ void Channel::KickInternal(const Anope::string &source, const Anope::string &nic
|
||||
User *user = bi ? bi : finduser(nick);
|
||||
if (!user)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Channel::KickInternal got a nonexistent user " << nick << " on " << this->name << ": " << reason;
|
||||
Log() << "Channel::KickInternal got a nonexistent user " << nick << " on " << this->name << ": " << reason;
|
||||
return;
|
||||
}
|
||||
|
||||
Alog(LOG_DEBUG) << "Channel::KickInternal kicking " << user->nick << " from " << this->name;
|
||||
Log(user, this, "kick") << "by " << source << " (" << reason << ")";
|
||||
|
||||
Anope::string chname = this->name;
|
||||
|
||||
@@ -938,7 +940,7 @@ void Channel::KickInternal(const Anope::string &source, const Anope::string &nic
|
||||
this->DeleteUser(user);
|
||||
}
|
||||
else
|
||||
Alog(LOG_DEBUG) << "Channel::KickInternal got kick for user " << user->nick << " who isn't on channel " << this->name << " ?";
|
||||
Log() << "Channel::KickInternal got kick for user " << user->nick << " who isn't on channel " << this->name << " ?";
|
||||
|
||||
/* Bots get rejoined */
|
||||
if (bi)
|
||||
@@ -1113,7 +1115,7 @@ void do_join(const Anope::string &source, int ac, const char **av)
|
||||
user = finduser(source);
|
||||
if (!user)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "JOIN from nonexistent user " << source << ": " << merge_args(ac, av);
|
||||
Log() << "JOIN from nonexistent user " << source << ": " << merge_args(ac, av);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1150,7 +1152,7 @@ void do_join(const Anope::string &source, int ac, const char **av)
|
||||
/* Their time is older, we lose */
|
||||
if (chan->creation_time > ts)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Recieved an older TS " << chan->name << " in JOIN, changing from " << chan->creation_time << " to " << ts;
|
||||
Log(LOG_DEBUG) << "Recieved an older TS " << chan->name << " in JOIN, changing from " << chan->creation_time << " to " << ts;
|
||||
chan->creation_time = ts;
|
||||
|
||||
chan->Reset();
|
||||
@@ -1188,7 +1190,7 @@ void do_kick(const Anope::string &source, int ac, const char **av)
|
||||
Channel *c = findchan(av[0]);
|
||||
if (!c)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Recieved kick for nonexistant channel " << av[0];
|
||||
Log() << "Recieved kick for nonexistant channel " << av[0];
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1210,7 +1212,7 @@ void do_part(const Anope::string &source, int ac, const char **av)
|
||||
User *user = finduser(source);
|
||||
if (!user)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "PART from nonexistent user " << source << ": " << merge_args(ac, av);
|
||||
Log() << "PART from nonexistent user " << source << ": " << merge_args(ac, av);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1221,17 +1223,17 @@ void do_part(const Anope::string &source, int ac, const char **av)
|
||||
Channel *c = findchan(buf);
|
||||
|
||||
if (!c)
|
||||
Alog(LOG_DEBUG) << "Recieved PART from " << user->nick << " for nonexistant channel " << buf;
|
||||
|
||||
if (user->FindChannel(c))
|
||||
Log() << "Recieved PART from " << user->nick << " for nonexistant channel " << buf;
|
||||
else if (user->FindChannel(c))
|
||||
{
|
||||
Log(user, c, "part") << "Reason: " << (av[1] ? av[1] : "No reason");
|
||||
FOREACH_MOD(I_OnPrePartChannel, OnPrePartChannel(user, c));
|
||||
Anope::string ChannelName = c->name;
|
||||
c->DeleteUser(user);
|
||||
FOREACH_MOD(I_OnPartChannel, OnPartChannel(user, findchan(ChannelName), ChannelName, av[1] ? av[1] : ""));
|
||||
}
|
||||
else
|
||||
Alog(LOG_DEBUG) << "Recieved PART from " << user->nick << " for " << c->name << ", but " << user->nick << " isn't in " << c->name << "?";
|
||||
Log() << "Recieved PART from " << user->nick << " for " << c->name << ", but " << user->nick << " isn't in " << c->name << "?";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1264,7 +1266,7 @@ void do_cmode(const Anope::string &source, int ac, const char **av)
|
||||
++av;
|
||||
}
|
||||
else
|
||||
Alog() << "TSMODE enabled but MODE has no valid TS";
|
||||
Log() << "TSMODE enabled but MODE has no valid TS";
|
||||
}
|
||||
|
||||
/* :42XAAAAAO TMODE 1106409026 #ircops +b *!*@*.aol.com */
|
||||
@@ -1281,7 +1283,7 @@ void do_cmode(const Anope::string &source, int ac, const char **av)
|
||||
{
|
||||
ci = cs_findchan(av[0]);
|
||||
if (!ci || ci->HasFlag(CI_FORBIDDEN))
|
||||
Alog(LOG_DEBUG) << "MODE " << merge_args(ac - 1, av + 1) << " for nonexistant channel " << av[0];
|
||||
Log(LOG_DEBUG) << "MODE " << merge_args(ac - 1, av + 1) << " for nonexistant channel " << av[0];
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1298,6 +1300,10 @@ void do_cmode(const Anope::string &source, int ac, const char **av)
|
||||
|
||||
--ac;
|
||||
++av;
|
||||
|
||||
User *u = finduser(source);
|
||||
if (u)
|
||||
Log(u, c, "mode") << merge_args(ac, av);
|
||||
ChanSetInternalModes(c, ac, av);
|
||||
}
|
||||
|
||||
@@ -1313,7 +1319,7 @@ void do_topic(const Anope::string &source, int ac, const char **av)
|
||||
|
||||
if (!c)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "TOPIC " << merge_args(ac - 1, av + 1) << " for nonexistent channel " << av[0];
|
||||
Log() << "TOPIC " << merge_args(ac - 1, av + 1) << " for nonexistent channel " << av[0];
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1380,7 +1386,7 @@ void chan_set_correct_modes(User *user, Channel *c, int give_modes)
|
||||
if (ci->HasFlag(CI_FORBIDDEN) || c->name[0] == '+')
|
||||
return;
|
||||
|
||||
Alog(LOG_DEBUG) << "Setting correct user modes for " << user->nick << " on " << c->name << " (" << (give_modes ? "" : "not ") << "giving modes)";
|
||||
Log(LOG_DEBUG) << "Setting correct user modes for " << user->nick << " on " << c->name << " (" << (give_modes ? "" : "not ") << "giving modes)";
|
||||
|
||||
if (give_modes && !get_ignore(user->nick) && (!user->Account() || user->Account()->HasFlag(NI_AUTOOP)))
|
||||
{
|
||||
|
||||
+8
-8
@@ -252,7 +252,7 @@ void check_modes(Channel *c)
|
||||
|
||||
if (!c)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "check_modes called with NULL values";
|
||||
Log() << "check_modes called with NULL values";
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -263,7 +263,7 @@ void check_modes(Channel *c)
|
||||
if (c->server_modecount >= 3 && c->chanserv_modecount >= 3)
|
||||
{
|
||||
ircdproto->SendGlobops(NULL, "Warning: unable to set modes on channel %s. Are your servers' U:lines configured correctly?", c->name.c_str());
|
||||
Alog() << Config->s_ChanServ << ": Bouncy modes on channel " << c->name;
|
||||
Log() << "Bouncy modes on channel " << c->name;
|
||||
c->bouncy_modes = 1;
|
||||
return;
|
||||
}
|
||||
@@ -497,7 +497,7 @@ int check_topiclock(Channel *c, time_t topic_time)
|
||||
|
||||
if (!c)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "check_topiclock called with NULL values";
|
||||
Log() << "check_topiclock called with NULL values";
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -572,7 +572,7 @@ void expire_chans()
|
||||
continue;
|
||||
|
||||
Anope::string chname = ci->name;
|
||||
Alog() << "Expiring channel " << ci->name << " (founder: " << (ci->founder ? ci->founder->display : "(none)") << " )";
|
||||
Log(LOG_NORMAL, "chanserv/expire") << "Expiring channel " << ci->name << " (founder: " << (ci->founder ? ci->founder->display : "(none)") << " )";
|
||||
delete ci;
|
||||
FOREACH_MOD(I_OnChanExpire, OnChanExpire(chname));
|
||||
}
|
||||
@@ -599,13 +599,13 @@ void cs_remove_nick(const NickCore *nc)
|
||||
NickCore *nc2 = ci->successor;
|
||||
if (!nc2->IsServicesOper() && Config->CSMaxReg && nc2->channelcount >= Config->CSMaxReg)
|
||||
{
|
||||
Alog() << Config->s_ChanServ << ": Successor (" << nc2->display << " ) of " << ci->name << " owns too many channels, deleting channel",
|
||||
Log(LOG_NORMAL, "chanserv/expire") << "Successor (" << nc2->display << " ) of " << ci->name << " owns too many channels, deleting channel",
|
||||
delete ci;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
Alog() << Config->s_ChanServ << ": Transferring foundership of " << ci->name << " from deleted nick " << nc->display << " to successor " << nc2->display;
|
||||
Log(LOG_NORMAL, "chanserv/expire") << "Transferring foundership of " << ci->name << " from deleted nick " << nc->display << " to successor " << nc2->display;
|
||||
ci->founder = nc2;
|
||||
ci->successor = NULL;
|
||||
++nc2->channelcount;
|
||||
@@ -613,7 +613,7 @@ void cs_remove_nick(const NickCore *nc)
|
||||
}
|
||||
else
|
||||
{
|
||||
Alog() << Config->s_ChanServ << ": Deleting channel " << ci->name << "owned by deleted nick " << nc->display;
|
||||
Log(LOG_NORMAL, "chanserv/expire") << "Deleting channel " << ci->name << "owned by deleted nick " << nc->display;
|
||||
|
||||
if (ModeManager::FindChannelModeByName(CMODE_REGISTERED))
|
||||
{
|
||||
@@ -712,7 +712,7 @@ void reset_levels(ChannelInfo *ci)
|
||||
|
||||
if (!ci)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "reset_levels() called with NULL values";
|
||||
Log() << "reset_levels() called with NULL values";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -58,7 +58,7 @@ void mod_run_cmd(BotInfo *bi, User *u, Command *c, const Anope::string &command,
|
||||
if (!c->HasFlag(CFLAG_ALLOW_UNREGISTERED) && !u->IsIdentified())
|
||||
{
|
||||
notice_lang(bi->nick, u, NICK_IDENTIFY_REQUIRED, Config->s_NickServ.c_str());
|
||||
Alog() << "Access denied for unregistered user " << u->nick << " with service " << bi->nick << " and command " << command;
|
||||
Log(LOG_COMMAND, "denied", bi) << "Access denied for unregistered user " << u->GetMask() << " with command " << command;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -103,13 +103,13 @@ void mod_run_cmd(BotInfo *bi, User *u, Command *c, const Anope::string &command,
|
||||
if (ci->HasFlag(CI_FORBIDDEN) && !c->HasFlag(CFLAG_ALLOW_FORBIDDEN))
|
||||
{
|
||||
notice_lang(bi->nick, u, CHAN_X_FORBIDDEN, ci->name.c_str());
|
||||
Alog() << "Access denied for user " << u->nick << " with service " << bi->nick << " and command " << command << " because of FORBIDDEN channel " << ci->name;
|
||||
Log(LOG_COMMAND, "denied", bi) << "Access denied for user " << u->GetMask() << " with command " << command << " because of FORBIDDEN channel " << ci->name;
|
||||
return;
|
||||
}
|
||||
else if (ci->HasFlag(CI_SUSPENDED) && !c->HasFlag(CFLAG_ALLOW_SUSPENDED))
|
||||
{
|
||||
notice_lang(bi->nick, u, CHAN_X_FORBIDDEN, ci->name.c_str());
|
||||
Alog() << "Access denied for user " << u->nick << " with service " << bi->nick <<" and command " << command << " because of SUSPENDED channel " << ci->name;
|
||||
Log(LOG_COMMAND, "denied", bi) << "Access denied for user " << u->GetMask() << " with command " << command << " because of SUSPENDED channel " << ci->name;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -131,7 +131,7 @@ void mod_run_cmd(BotInfo *bi, User *u, Command *c, const Anope::string &command,
|
||||
if (!c->permission.empty() && !u->Account()->HasCommand(c->permission))
|
||||
{
|
||||
notice_lang(bi->nick, u, ACCESS_DENIED);
|
||||
Alog() << "Access denied for user " << u->nick << " with service " << bi->nick << " and command " << command;
|
||||
Log(LOG_COMMAND, "denied", bi) << "Access denied for user " << u->GetMask() << " with command " << command;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+104
-23
@@ -82,7 +82,7 @@ ServerConfig::ServerConfig() : errstr(""), config_data()
|
||||
else if (option.equals_ci("msg"))
|
||||
{
|
||||
if (!this->UsePrivmsg)
|
||||
Alog() << "msg in <nickserv:defaults> can only be used when UsePrivmsg is set";
|
||||
Log() << "msg in <nickserv:defaults> can only be used when UsePrivmsg is set";
|
||||
else
|
||||
this->NSDefFlags.SetFlag(NI_MSG);
|
||||
}
|
||||
@@ -262,7 +262,7 @@ ServerConfig::ServerConfig() : errstr(""), config_data()
|
||||
|
||||
/* Check the user keys */
|
||||
if (this->UserKey1 == this->UserKey2 || this->UserKey1 == this->UserKey3 || this->UserKey3 == this->UserKey2)
|
||||
Alog() << "Every UserKey must be different. It's for YOUR safety! Remember that!";
|
||||
Log() << "Every UserKey must be different. It's for YOUR safety! Remember that!";
|
||||
|
||||
/**
|
||||
* Check all DEFCON dependiencies...
|
||||
@@ -349,10 +349,6 @@ ServerConfig::ServerConfig() : errstr(""), config_data()
|
||||
}
|
||||
|
||||
SetDefaultMLock(this);
|
||||
|
||||
/* Disable the log channel if its defined in the conf, but not enabled */
|
||||
if (this->LogChannel.empty() && LogChan)
|
||||
LogChan = false;
|
||||
}
|
||||
|
||||
bool ServerConfig::CheckOnce(const Anope::string &tag)
|
||||
@@ -614,13 +610,13 @@ bool ValidateNickLen(ServerConfig *, const Anope::string &, const Anope::string
|
||||
int nicklen = data.GetInteger();
|
||||
if (!nicklen)
|
||||
{
|
||||
Alog() << "You have not defined the <networkinfo:nicklen> directive. It is strongly";
|
||||
Alog() << "adviced that you do configure this correctly in your services.conf";
|
||||
Log() << "You have not defined the <networkinfo:nicklen> directive. It is strongly";
|
||||
Log() << "adviced that you do configure this correctly in your services.conf";
|
||||
data.Set(31);
|
||||
}
|
||||
else if (nicklen < 1)
|
||||
{
|
||||
Alog() << "<networkinfo:nicklen> has an invalid value; setting to 31";
|
||||
Log() << "<networkinfo:nicklen> has an invalid value; setting to 31";
|
||||
data.Set(31);
|
||||
}
|
||||
return true;
|
||||
@@ -645,7 +641,7 @@ bool ValidateGlobalOnCycle(ServerConfig *config, const Anope::string &tag, const
|
||||
{
|
||||
if (data.GetValue().empty())
|
||||
{
|
||||
Alog() << "<" << tag << ":" << value << "> was undefined, disabling <options:globaloncycle>";
|
||||
Log() << "<" << tag << ":" << value << "> was undefined, disabling <options:globaloncycle>";
|
||||
config->GlobalOnCycle = false;
|
||||
}
|
||||
}
|
||||
@@ -733,7 +729,7 @@ static bool DoOperType(ServerConfig *config, const Anope::string &, const Anope:
|
||||
{
|
||||
if ((*it)->GetName().equals_ci(tok))
|
||||
{
|
||||
Alog() << "Inheriting commands and privs from " << (*it)->GetName() << " to " << ot->GetName();
|
||||
Log() << "Inheriting commands and privs from " << (*it)->GetName() << " to " << ot->GetName();
|
||||
ot->Inherits(*it);
|
||||
break;
|
||||
}
|
||||
@@ -797,7 +793,7 @@ static bool DoneOpers(ServerConfig *config, const Anope::string &)
|
||||
OperType *ot = *tit;
|
||||
if (ot->GetName().equals_ci(type))
|
||||
{
|
||||
Alog() << "Tied oper " << na->nc->display << " to type " << type;
|
||||
Log() << "Tied oper " << na->nc->display << " to type " << type;
|
||||
na->nc->ot = ot;
|
||||
}
|
||||
}
|
||||
@@ -833,6 +829,91 @@ bool DoneModules(ServerConfig *, const Anope::string &)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool InitLogs(ServerConfig *config, const Anope::string &)
|
||||
{
|
||||
for (unsigned i = 0; i < config->LogInfos.size(); ++i)
|
||||
{
|
||||
LogInfo *l = config->LogInfos[i];
|
||||
|
||||
for (std::list<Anope::string>::const_iterator sit = l->Targets.begin(), sit_end = l->Targets.end(); sit != sit_end; ++sit)
|
||||
{
|
||||
const Anope::string &target = *sit;
|
||||
|
||||
if (target[0] == '#')
|
||||
{
|
||||
Channel *c = findchan(target);
|
||||
if (c && c->HasFlag(CH_LOGCHAN))
|
||||
{
|
||||
for (CUserList::const_iterator cit = c->users.begin(), cit_end = c->users.end(); cit != cit_end; ++cit)
|
||||
{
|
||||
UserContainer *uc = *cit;
|
||||
BotInfo *bi = findbot(uc->user->nick);
|
||||
|
||||
if (bi && bi->HasFlag(BI_CORE))
|
||||
{
|
||||
bi->Part(c, "Reloading");
|
||||
}
|
||||
}
|
||||
|
||||
c->UnsetFlag(CH_PERSIST);
|
||||
c->UnsetFlag(CH_LOGCHAN);
|
||||
if (c->users.empty())
|
||||
delete c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete config->LogInfos[i];
|
||||
}
|
||||
config->LogInfos.clear();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DoLogs(ServerConfig *config, const Anope::string &, const Anope::string *, ValueList &values, int *)
|
||||
{
|
||||
//{"target", "source", "logage", "admin", "override", "commands", "servers", "channels", "users", "normal", "rawio", "debug"},
|
||||
Anope::string targets = values[0].GetValue();
|
||||
ValueItem vi(targets);
|
||||
if (!ValidateNotEmpty(config, "log", "target", vi))
|
||||
throw ConfigException("One or more values in your configuration file failed to validate. Please see your log for more information.");
|
||||
|
||||
Anope::string source = values[1].GetValue();
|
||||
int logage = values[2].GetInteger();
|
||||
Anope::string admin = values[3].GetValue();
|
||||
Anope::string override = values[4].GetValue();
|
||||
Anope::string commands = values[5].GetValue();
|
||||
Anope::string servers = values[6].GetValue();
|
||||
Anope::string channels = values[7].GetValue();
|
||||
Anope::string users = values[8].GetValue();
|
||||
bool normal = values[9].GetBool();
|
||||
bool rawio = values[10].GetBool();
|
||||
bool ldebug = values[11].GetBool();
|
||||
|
||||
LogInfo *l = new LogInfo(logage, normal, rawio, ldebug);
|
||||
l->Targets = BuildStringList(targets);
|
||||
l->Sources = BuildStringList(source);
|
||||
l->Admin = BuildStringList(admin);
|
||||
l->Override = BuildStringList(override);
|
||||
l->Commands = BuildStringList(commands);
|
||||
l->Servers = BuildStringList(servers);
|
||||
l->Channels = BuildStringList(channels);
|
||||
l->Users = BuildStringList(users);
|
||||
|
||||
config->LogInfos.push_back(l);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DoneLogs(ServerConfig *config, const Anope::string &)
|
||||
{
|
||||
InitLogChannels(config);
|
||||
|
||||
Log() << "Loaded " << config->LogInfos.size() << " log blocks";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ServerConfig::Read()
|
||||
{
|
||||
errstr.clear();
|
||||
@@ -902,8 +983,6 @@ void ServerConfig::Read()
|
||||
{"serverinfo", "hostname", "", new ValueContainerString(&this->ServiceHost), DT_STRING | DT_NORELOAD, ValidateNotEmpty},
|
||||
{"serverinfo", "pid", "services.pid", new ValueContainerString(&this->PIDFilename), DT_STRING | DT_NORELOAD, ValidateNotEmpty},
|
||||
{"serverinfo", "motd", "services.motd", new ValueContainerString(&this->MOTDFilename), DT_STRING, ValidateNotEmpty},
|
||||
{"networkinfo", "logchannel", "", new ValueContainerString(&this->LogChannel), DT_STRING, NoValidation},
|
||||
{"networkinfo", "logbot", "no", new ValueContainerBool(&this->LogBot), DT_BOOLEAN, NoValidation},
|
||||
{"networkinfo", "networkname", "", new ValueContainerString(&this->NetworkName), DT_STRING, ValidateNotEmpty},
|
||||
{"networkinfo", "nicklen", "0", new ValueContainerUInt(&this->NickLen), DT_UINTEGER | DT_NORELOAD, ValidateNickLen},
|
||||
{"networkinfo", "userlen", "10", new ValueContainerUInt(&this->UserLen), DT_UINTEGER | DT_NORELOAD, NoValidation},
|
||||
@@ -930,7 +1009,6 @@ void ServerConfig::Read()
|
||||
{"options", "useprivmsg", "no", new ValueContainerBool(&this->UsePrivmsg), DT_BOOLEAN, NoValidation},
|
||||
{"options", "usestrictprivmsg", "no", new ValueContainerBool(&this->UseStrictPrivMsg), DT_BOOLEAN, NoValidation},
|
||||
{"options", "dumpcore", "yes", new ValueContainerBool(&this->DumpCore), DT_BOOLEAN | DT_NORELOAD, NoValidation},
|
||||
{"options", "logusers", "no", new ValueContainerBool(&this->LogUsers), DT_BOOLEAN, NoValidation},
|
||||
{"options", "hidestatso", "no", new ValueContainerBool(&this->HideStatsO), DT_BOOLEAN, NoValidation},
|
||||
{"options", "globaloncycle", "no", new ValueContainerBool(&this->GlobalOnCycle), DT_BOOLEAN, NoValidation},
|
||||
{"options", "globaloncycledown", "", new ValueContainerString(&this->GlobalOnCycleMessage), DT_STRING, ValidateGlobalOnCycle},
|
||||
@@ -940,7 +1018,6 @@ void ServerConfig::Read()
|
||||
{"options", "restrictopernicks", "no", new ValueContainerBool(&this->RestrictOperNicks), DT_BOOLEAN, NoValidation},
|
||||
{"options", "newscount", "3", new ValueContainerUInt(&this->NewsCount), DT_UINTEGER, NoValidation},
|
||||
{"options", "ulineservers", "", new ValueContainerString(&UlineServers), DT_STRING, NoValidation},
|
||||
{"options", "enablelogchannel", "no", new ValueContainerBool(&LogChan), DT_BOOLEAN, NoValidation},
|
||||
{"options", "mlock", "+nrt", new ValueContainerString(&this->MLock), DT_STRING, NoValidation},
|
||||
{"options", "botmodes", "", new ValueContainerString(&this->BotModes), DT_STRING, NoValidation},
|
||||
{"options", "maxretries", "10", new ValueContainerUInt(&this->MaxRetries), DT_UINTEGER, NoValidation},
|
||||
@@ -1017,7 +1094,6 @@ void ServerConfig::Read()
|
||||
{"operserv", "globaldescription", "Global Noticer", new ValueContainerString(&this->desc_GlobalNoticer), DT_STRING | DT_NORELOAD, ValidateNotEmpty},
|
||||
{"operserv", "modules", "", new ValueContainerString(&OperCoreModules), DT_STRING, NoValidation},
|
||||
{"operserv", "superadmin", "no", new ValueContainerBool(&this->SuperAdmin), DT_BOOLEAN, NoValidation},
|
||||
{"operserv", "logmaxusers", "no", new ValueContainerBool(&this->LogMaxUsers), DT_BOOLEAN, NoValidation},
|
||||
{"operserv", "autokillexpiry", "0", new ValueContainerTime(&this->AutokillExpiry), DT_TIME, ValidateNotZero},
|
||||
{"operserv", "chankillexpiry", "0", new ValueContainerTime(&this->ChankillExpiry), DT_TIME, ValidateNotZero},
|
||||
{"operserv", "snlineexpiry", "0", new ValueContainerTime(&this->SNLineExpiry), DT_TIME, ValidateNotZero},
|
||||
@@ -1067,6 +1143,11 @@ void ServerConfig::Read()
|
||||
{"", ""},
|
||||
{DT_CHARPTR},
|
||||
InitModules, DoModule, DoneModules},
|
||||
{"log",
|
||||
{"target", "source", "logage", "admin", "override", "commands", "servers", "channels", "users", "normal", "rawio", "debug", ""},
|
||||
{"", "", "7", "", "", "", "", "", "", "", "no", "no", ""},
|
||||
{DT_STRING, DT_STRING, DT_INTEGER, DT_STRING, DT_STRING, DT_STRING, DT_STRING, DT_STRING, DT_STRING, DT_BOOLEAN, DT_BOOLEAN, DT_BOOLEAN},
|
||||
InitLogs, DoLogs, DoneLogs},
|
||||
{"opertype",
|
||||
{"name", "inherits", "commands", "privs", ""},
|
||||
{"", "", "", "", ""},
|
||||
@@ -1339,10 +1420,10 @@ void ServerConfig::Read()
|
||||
}
|
||||
throw ConfigException(ce);
|
||||
}
|
||||
Alog(LOG_DEBUG) << "End config";
|
||||
Log(LOG_DEBUG) << "End config";
|
||||
for (int Index = 0; !Once[Index].empty(); ++Index)
|
||||
CheckOnce(Once[Index]);
|
||||
Alog() << "Done reading configuration file.";
|
||||
Log() << "Done reading configuration file.";
|
||||
}
|
||||
|
||||
bool ServerConfig::LoadConf(ConfigDataHash &target, const Anope::string &filename)
|
||||
@@ -1358,7 +1439,7 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const Anope::string &filenam
|
||||
errstr << "File " << filename << " could not be opened." << std::endl;
|
||||
return false;
|
||||
}
|
||||
Alog(LOG_DEBUG) << "Start to read conf " << filename;
|
||||
Log(LOG_DEBUG) << "Start to read conf " << filename;
|
||||
// Start reading characters...
|
||||
while (getline(conf, line.str()))
|
||||
{
|
||||
@@ -1462,7 +1543,7 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const Anope::string &filenam
|
||||
return false;
|
||||
}
|
||||
// this is the same as the below section for testing if itemname is non-empty after the loop, but done inside it to allow the above construct
|
||||
Alog(LOG_DEBUG) << "ln "<< linenumber << " EOL: s='" << section << "' '" << itemname << "' set to '" << wordbuffer << "'";
|
||||
Log(LOG_DEBUG) << "ln "<< linenumber << " EOL: s='" << section << "' '" << itemname << "' set to '" << wordbuffer << "'";
|
||||
sectiondata.push_back(KeyVal(itemname, wordbuffer));
|
||||
wordbuffer.clear();
|
||||
itemname.clear();
|
||||
@@ -1504,7 +1585,7 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const Anope::string &filenam
|
||||
errstr << "Item without value: " << filename << ":" << linenumber << std::endl;
|
||||
return false;
|
||||
}
|
||||
Alog(LOG_DEBUG) << "ln " << linenumber << " EOL: s='" << section << "' '" << itemname << "' set to '" << wordbuffer << "'";
|
||||
Log(LOG_DEBUG) << "ln " << linenumber << " EOL: s='" << section << "' '" << itemname << "' set to '" << wordbuffer << "'";
|
||||
sectiondata.push_back(KeyVal(itemname, wordbuffer));
|
||||
wordbuffer.clear();
|
||||
itemname.clear();
|
||||
@@ -1555,7 +1636,7 @@ bool ServerConfig::ConfValue(ConfigDataHash &target, const Anope::string &tag, c
|
||||
{
|
||||
if (!allow_linefeeds && j->second.find('\n') != Anope::string::npos)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Value of <" << tag << ":" << var << "> contains a linefeed, and linefeeds in this value are not permitted -- stripped to spaces.";
|
||||
Log(LOG_DEBUG) << "Value of <" << tag << ":" << var << "> contains a linefeed, and linefeeds in this value are not permitted -- stripped to spaces.";
|
||||
j->second.replace_all_cs("\n", " ");
|
||||
}
|
||||
else
|
||||
|
||||
+2
-2
@@ -38,7 +38,7 @@ int enc_decrypt(const Anope::string &src, Anope::string &dest)
|
||||
size_t pos = src.find(':');
|
||||
if (pos == Anope::string::npos)
|
||||
{
|
||||
Alog() << "Error: enc_decrypt() called with invalid password string (" << src << ")";
|
||||
Log() << "Error: enc_decrypt() called with invalid password string (" << src << ")";
|
||||
return -1;
|
||||
}
|
||||
Anope::string hashm(src.begin(), src.begin() + pos);
|
||||
@@ -62,7 +62,7 @@ int enc_check_password(Anope::string &plaintext, Anope::string &password)
|
||||
size_t pos = password.find(':');
|
||||
if (pos == Anope::string::npos)
|
||||
{
|
||||
Alog() << "Error: enc_check_password() called with invalid password string (" << password << ")";
|
||||
Log() << "Error: enc_check_password() called with invalid password string (" << password << ")";
|
||||
return 0;
|
||||
}
|
||||
Anope::string hashm(password.begin(), password.begin() + pos);
|
||||
|
||||
+58
-99
@@ -25,7 +25,7 @@ void introduce_user(const Anope::string &user)
|
||||
time_t now = time(NULL);
|
||||
static time_t lasttime = now - 4;
|
||||
if (lasttime >= now - 3)
|
||||
fatal("introduce_user loop detected");
|
||||
throw FatalException("introduce_user loop detected");
|
||||
lasttime = now;
|
||||
|
||||
if (user.empty())
|
||||
@@ -54,6 +54,8 @@ void introduce_user(const Anope::string &user)
|
||||
/* Load MLock from the database now that we know what modes exist */
|
||||
for (registered_channel_map::iterator it = RegisteredChannelList.begin(), it_end = RegisteredChannelList.end(); it != it_end; ++it)
|
||||
it->second->LoadMLock();
|
||||
/* Setup log chanels */
|
||||
InitLogChannels(Config);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,7 +83,7 @@ static int set_group()
|
||||
}
|
||||
else
|
||||
{
|
||||
Alog() << "Unknown run group '" << RUNGROUP << "'";
|
||||
Log() << "Unknown run group '" << RUNGROUP << "'";
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
@@ -182,7 +184,7 @@ static void write_pidfile()
|
||||
atexit(remove_pidfile);
|
||||
}
|
||||
else
|
||||
log_perror("Warning: cannot write to PID file %s", Config->PIDFilename.c_str());
|
||||
throw FatalException("Can not write to PID file " + Config->PIDFilename);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -191,7 +193,7 @@ static void write_pidfile()
|
||||
|
||||
int openlog_failed = 0, openlog_errno = 0;
|
||||
|
||||
int init_primary(int ac, char **av)
|
||||
void Init(int ac, char **av)
|
||||
{
|
||||
int started_from_term = isatty(0) && isatty(1) && isatty(2);
|
||||
|
||||
@@ -200,38 +202,38 @@ int init_primary(int ac, char **av)
|
||||
umask(DEFUMASK);
|
||||
#endif
|
||||
if (set_group() < 0)
|
||||
return -1;
|
||||
throw FatalException("set_group() fail");
|
||||
|
||||
/* Parse command line arguments */
|
||||
ParseCommandLineArguments(ac, av);
|
||||
|
||||
if (GetCommandLineArgument("version", 'v'))
|
||||
{
|
||||
Alog(LOG_TERMINAL) << "Anope-" << Anope::Version() << " -- " << Anope::Build();
|
||||
return -1;
|
||||
Log(LOG_TERMINAL) << "Anope-" << Anope::Version() << " -- " << Anope::Build();
|
||||
throw FatalException();
|
||||
}
|
||||
|
||||
if (GetCommandLineArgument("help", 'h'))
|
||||
{
|
||||
Alog(LOG_TERMINAL) << "Anope-" << Anope::Version() << " -- " << Anope::Build();
|
||||
Alog(LOG_TERMINAL) << "Anope IRC Services (http://www.anope.org)";
|
||||
Alog(LOG_TERMINAL) << "Usage ./" << SERVICES_BIN << " [options] ...";
|
||||
Alog(LOG_TERMINAL) << "-c, --config=filename.conf";
|
||||
Alog(LOG_TERMINAL) << "-d, --debug[=level]";
|
||||
Alog(LOG_TERMINAL) << " --dir=services_directory";
|
||||
Alog(LOG_TERMINAL) << "-h, --help";
|
||||
Alog(LOG_TERMINAL) << " --log=log_filename";
|
||||
Alog(LOG_TERMINAL) << "-e, --noexpire";
|
||||
Alog(LOG_TERMINAL) << "-n, --nofork";
|
||||
Alog(LOG_TERMINAL) << " --nothird";
|
||||
Alog(LOG_TERMINAL) << " --protocoldebug";
|
||||
Alog(LOG_TERMINAL) << "-r, --readonly";
|
||||
Alog(LOG_TERMINAL) << "-s, --support";
|
||||
Alog(LOG_TERMINAL) << "-v, --version";
|
||||
Alog(LOG_TERMINAL) << "";
|
||||
Alog(LOG_TERMINAL) << "Further support is available from http://www.anope.org";
|
||||
Alog(LOG_TERMINAL) << "Or visit us on IRC at irc.anope.org #anope";
|
||||
return -1;
|
||||
Log(LOG_TERMINAL) << "Anope-" << Anope::Version() << " -- " << Anope::Build();
|
||||
Log(LOG_TERMINAL) << "Anope IRC Services (http://www.anope.org)";
|
||||
Log(LOG_TERMINAL) << "Usage ./" << SERVICES_BIN << " [options] ...";
|
||||
Log(LOG_TERMINAL) << "-c, --config=filename.conf";
|
||||
Log(LOG_TERMINAL) << "-d, --debug[=level]";
|
||||
Log(LOG_TERMINAL) << " --dir=services_directory";
|
||||
Log(LOG_TERMINAL) << "-h, --help";
|
||||
Log(LOG_TERMINAL) << " --log=log_filename";
|
||||
Log(LOG_TERMINAL) << "-e, --noexpire";
|
||||
Log(LOG_TERMINAL) << "-n, --nofork";
|
||||
Log(LOG_TERMINAL) << " --nothird";
|
||||
Log(LOG_TERMINAL) << " --protocoldebug";
|
||||
Log(LOG_TERMINAL) << "-r, --readonly";
|
||||
Log(LOG_TERMINAL) << "-s, --support";
|
||||
Log(LOG_TERMINAL) << "-v, --version";
|
||||
Log(LOG_TERMINAL) << "";
|
||||
Log(LOG_TERMINAL) << "Further support is available from http://www.anope.org";
|
||||
Log(LOG_TERMINAL) << "Or visit us on IRC at irc.anope.org #anope";
|
||||
throw FatalException();
|
||||
}
|
||||
|
||||
if (GetCommandLineArgument("nofork", 'n'))
|
||||
@@ -264,10 +266,7 @@ int init_primary(int ac, char **av)
|
||||
if (level > 0)
|
||||
debug = level;
|
||||
else
|
||||
{
|
||||
Alog(LOG_TERMINAL) << "Invalid option given to --debug";
|
||||
return -1;
|
||||
}
|
||||
throw FatalException("Invalid option given to --debug");
|
||||
}
|
||||
else
|
||||
++debug;
|
||||
@@ -276,49 +275,36 @@ int init_primary(int ac, char **av)
|
||||
if (GetCommandLineArgument("config", 'c', Arg))
|
||||
{
|
||||
if (Arg.empty())
|
||||
{
|
||||
Alog(LOG_TERMINAL) << "The --config option requires a file name";
|
||||
return -1;
|
||||
}
|
||||
throw FatalException("The --config option requires a file name");
|
||||
services_conf = Arg;
|
||||
}
|
||||
|
||||
if (GetCommandLineArgument("dir", 0, Arg))
|
||||
{
|
||||
if (Arg.empty())
|
||||
{
|
||||
Alog(LOG_TERMINAL) << "The --dir option requires a directory name";
|
||||
return -1;
|
||||
}
|
||||
throw FatalException("The --dir option requires a directory name");
|
||||
services_dir = Arg;
|
||||
}
|
||||
|
||||
if (GetCommandLineArgument("log", 0, Arg))
|
||||
{
|
||||
if (Arg.empty())
|
||||
{
|
||||
Alog(LOG_TERMINAL) << "The --log option requires a file name";
|
||||
return -1;
|
||||
}
|
||||
throw FatalException("The --log option requires a file name");
|
||||
log_filename = Arg;
|
||||
}
|
||||
|
||||
/* Chdir to Services data directory. */
|
||||
if (chdir(services_dir.c_str()) < 0)
|
||||
{
|
||||
fprintf(stderr, "chdir(%s): %s\n", services_dir.c_str(), strerror(errno));
|
||||
return -1;
|
||||
throw FatalException("Unable to chdir to " + services_dir + ": " + Anope::string(strerror(errno)));
|
||||
}
|
||||
|
||||
/* Open logfile, and complain if we didn't. */
|
||||
if (open_log() < 0)
|
||||
{
|
||||
openlog_errno = errno;
|
||||
if (started_from_term)
|
||||
fprintf(stderr, "Warning: unable to open log file %s: %s\n", log_filename.c_str(), strerror(errno));
|
||||
else
|
||||
openlog_failed = 1;
|
||||
}
|
||||
Log(LOG_TERMINAL) << "Anope " << Anope::Version() << ", " << Anope::Build();
|
||||
#ifdef _WIN32
|
||||
Log(LOG_TERMINAL) << "Using configuration file " << services_dir << "\\" << services_conf;
|
||||
#else
|
||||
Log(LOG_TERMINAL) << "Using configuration file " << services_dir << "/" << services_conf;
|
||||
#endif
|
||||
|
||||
/* Read configuration file; exit if there are problems. */
|
||||
try
|
||||
@@ -327,17 +313,17 @@ int init_primary(int ac, char **av)
|
||||
}
|
||||
catch (const ConfigException &ex)
|
||||
{
|
||||
Alog(LOG_TERMINAL) << ex.GetReason();
|
||||
Alog(LOG_TERMINAL) << "*** Support resources: Read through the services.conf self-contained";
|
||||
Alog(LOG_TERMINAL) << "*** documentation. Read the documentation files found in the 'docs'";
|
||||
Alog(LOG_TERMINAL) << "*** folder. Visit our portal located at http://www.anope.org/. Join";
|
||||
Alog(LOG_TERMINAL) << "*** our support channel on /server irc.anope.org channel #anope.";
|
||||
return -1;
|
||||
Log(LOG_TERMINAL) << ex.GetReason();
|
||||
Log(LOG_TERMINAL) << "*** Support resources: Read through the services.conf self-contained";
|
||||
Log(LOG_TERMINAL) << "*** documentation. Read the documentation files found in the 'docs'";
|
||||
Log(LOG_TERMINAL) << "*** folder. Visit our portal located at http://www.anope.org/. Join";
|
||||
Log(LOG_TERMINAL) << "*** our support channel on /server irc.anope.org channel #anope.";
|
||||
throw FatalException("Configuration file failed to validate");
|
||||
}
|
||||
|
||||
/* Add IRCD Protocol Module; exit if there are errors */
|
||||
if (protocol_module_init())
|
||||
return -1;
|
||||
throw FatalException("Unable to load protocol module");
|
||||
|
||||
/* Create me */
|
||||
Me = new Server(NULL, Config->ServerName, 0, Config->ServerDesc, Config->Numeric);
|
||||
@@ -377,19 +363,7 @@ int init_primary(int ac, char **av)
|
||||
|
||||
/* Load the socket engine */
|
||||
if (ModuleManager::LoadModule(Config->SocketEngine, NULL))
|
||||
{
|
||||
Alog(LOG_TERMINAL) << "Unable to load socket engine " << Config->SocketEngine;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int init_secondary(int ac, char **av)
|
||||
{
|
||||
#ifndef _WIN32
|
||||
int started_from_term = isatty(0) && isatty(1) && isatty(2);
|
||||
#endif
|
||||
throw FatalException("Unable to load socket engine " + Config->SocketEngine);
|
||||
|
||||
/* Add Core MSG handles */
|
||||
moduleAddMsgs();
|
||||
@@ -399,15 +373,13 @@ int init_secondary(int ac, char **av)
|
||||
{
|
||||
int i;
|
||||
if ((i = fork()) < 0)
|
||||
{
|
||||
perror("fork()");
|
||||
return -1;
|
||||
}
|
||||
throw FatalException("Unable to fork");
|
||||
else if (i != 0)
|
||||
{
|
||||
Alog(LOG_TERMINAL) << "PID " << i;
|
||||
Log(LOG_TERMINAL) << "PID " << i;
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (started_from_term)
|
||||
{
|
||||
close(0);
|
||||
@@ -415,22 +387,15 @@ int init_secondary(int ac, char **av)
|
||||
close(2);
|
||||
}
|
||||
if (setpgid(0, 0) < 0)
|
||||
{
|
||||
perror("setpgid()");
|
||||
return -1;
|
||||
}
|
||||
throw FatalException("Unable to setpgid()");
|
||||
}
|
||||
#else
|
||||
if (!SupportedWindowsVersion())
|
||||
{
|
||||
Alog() << GetWindowsVersion() << " is not a supported version of Windows";
|
||||
|
||||
return -1;
|
||||
}
|
||||
throw FatalException(GetWindowsVersion() + " is not a supported version of Windows");
|
||||
if (!nofork)
|
||||
{
|
||||
Alog(LOG_TERMINAL) << "PID " << GetCurrentProcessId();
|
||||
Alog() << "Launching Anope into the background";
|
||||
Log(LOG_TERMINAL) << "PID " << GetCurrentProcessId();
|
||||
Log() << "Launching Anope into the background";
|
||||
FreeConsole();
|
||||
}
|
||||
#endif
|
||||
@@ -439,13 +404,9 @@ int init_secondary(int ac, char **av)
|
||||
write_pidfile();
|
||||
|
||||
/* Announce ourselves to the logfile. */
|
||||
Alog() << "Anope " << Anope::Version() << " (ircd protocol: " << version_protocol << ") starting up" << (debug || readonly ? " (options:" : "") << (debug ? " debug" : "") << (readonly ? " readonly" : "") << (debug || readonly ? ")" : "");
|
||||
Log() << "Anope " << Anope::Version() << " (ircd protocol: " << version_protocol << ") starting up" << (debug || readonly ? " (options:" : "") << (debug ? " debug" : "") << (readonly ? " readonly" : "") << (debug || readonly ? ")" : "");
|
||||
start_time = time(NULL);
|
||||
|
||||
/* If in read-only mode, close the logfile again. */
|
||||
if (readonly)
|
||||
close_log();
|
||||
|
||||
/* Set signal handlers. Catch certain signals to let us do things or
|
||||
* panic as necessary, and ignore all others.
|
||||
*/
|
||||
@@ -457,7 +418,7 @@ int init_secondary(int ac, char **av)
|
||||
|
||||
/* Initialize multi-language support */
|
||||
lang_init();
|
||||
Alog(LOG_DEBUG) << "Loaded languages";
|
||||
Log(LOG_DEBUG) << "Loaded languages";
|
||||
|
||||
/* Initialize subservices */
|
||||
ns_init();
|
||||
@@ -476,14 +437,12 @@ int init_secondary(int ac, char **av)
|
||||
add_entropy_userkeys();
|
||||
|
||||
/* Load up databases */
|
||||
Alog() << "Loading databases...";
|
||||
Log() << "Loading databases...";
|
||||
EventReturn MOD_RESULT;
|
||||
FOREACH_RESULT(I_OnLoadDatabase, OnLoadDatabase());
|
||||
Alog() << "Databases loaded";
|
||||
Log() << "Databases loaded";
|
||||
|
||||
FOREACH_MOD(I_OnPostLoadDatabases, OnPostLoadDatabases());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
+9
-10
@@ -65,7 +65,7 @@ static void load_lang(int index, const char *filename)
|
||||
FILE *f;
|
||||
int32 num, i;
|
||||
|
||||
Alog(LOG_DEBUG) << "Loading language " << index << " from file `languages/" << filename << "'";
|
||||
Log(LOG_DEBUG) << "Loading language " << index << " from file `languages/" << filename << "'";
|
||||
snprintf(buf, sizeof(buf), "languages/%s", filename);
|
||||
#ifndef _WIN32
|
||||
const char *mode = "r";
|
||||
@@ -74,16 +74,15 @@ static void load_lang(int index, const char *filename)
|
||||
#endif
|
||||
if (!(f = fopen(buf, mode)))
|
||||
{
|
||||
log_perror("Failed to load language %d (%s)", index, filename);
|
||||
return;
|
||||
throw CoreException("Failed to load language " + stringify(index) + " (" + stringify(filename) + ")");
|
||||
}
|
||||
else if (read_int32(&num, f) < 0)
|
||||
{
|
||||
Alog() << "Failed to read number of strings for language " << index << "(" << filename << ")";
|
||||
Log() << "Failed to read number of strings for language " << index << "(" << filename << ")";
|
||||
return;
|
||||
}
|
||||
else if (num != NUM_STRINGS)
|
||||
Alog() << "Warning: Bad number of strings (" << num << " , wanted " << NUM_STRINGS << ") for language " << index << " (" << filename << ")";
|
||||
Log() << "Warning: Bad number of strings (" << num << " , wanted " << NUM_STRINGS << ") for language " << index << " (" << filename << ")";
|
||||
langtexts[index] = static_cast<char **>(scalloc(sizeof(char *), NUM_STRINGS));
|
||||
if (num > NUM_STRINGS)
|
||||
num = NUM_STRINGS;
|
||||
@@ -93,7 +92,7 @@ static void load_lang(int index, const char *filename)
|
||||
fseek(f, i * 8 + 4, SEEK_SET);
|
||||
if (read_int32(&pos, f) < 0 || read_int32(&len, f) < 0)
|
||||
{
|
||||
Alog() << "Failed to read entry " << i << " in language " << index << " (" << filename << ") TOC";
|
||||
Log() << "Failed to read entry " << i << " in language " << index << " (" << filename << ") TOC";
|
||||
while (--i >= 0)
|
||||
{
|
||||
if (langtexts[index][i])
|
||||
@@ -107,7 +106,7 @@ static void load_lang(int index, const char *filename)
|
||||
langtexts[index][i] = NULL;
|
||||
else if (len >= 65536)
|
||||
{
|
||||
Alog() << "Entry " << i << " in language " << index << " (" << filename << ") is too long (over 64k) -- corrupt TOC?";
|
||||
Log() << "Entry " << i << " in language " << index << " (" << filename << ") is too long (over 64k) -- corrupt TOC?";
|
||||
while (--i >= 0)
|
||||
{
|
||||
if (langtexts[index][i])
|
||||
@@ -119,7 +118,7 @@ static void load_lang(int index, const char *filename)
|
||||
}
|
||||
else if (len < 0)
|
||||
{
|
||||
Alog() << "Entry " << i << " in language " << index << " (" << filename << ") has negative length -- corrupt TOC?";
|
||||
Log() << "Entry " << i << " in language " << index << " (" << filename << ") has negative length -- corrupt TOC?";
|
||||
while (--i >= 0)
|
||||
{
|
||||
if (langtexts[index][i])
|
||||
@@ -135,7 +134,7 @@ static void load_lang(int index, const char *filename)
|
||||
fseek(f, pos, SEEK_SET);
|
||||
if (fread(langtexts[index][i], 1, len, f) != len)
|
||||
{
|
||||
Alog() << "Failed to read string " << i << " in language " << index << "(" << filename << ")";
|
||||
Log() << "Failed to read string " << i << " in language " << index << "(" << filename << ")";
|
||||
while (--i >= 0)
|
||||
{
|
||||
if (langtexts[index][i])
|
||||
@@ -225,7 +224,7 @@ void lang_init()
|
||||
Config->NSDefLanguage = DEF_LANGUAGE;
|
||||
|
||||
if (!langtexts[DEF_LANGUAGE])
|
||||
fatal("Unable to load default language");
|
||||
throw CoreException("Unable to load default language");
|
||||
for (i = 0; i < NUM_LANGS; ++i)
|
||||
{
|
||||
if (!langtexts[i])
|
||||
|
||||
-264
@@ -1,264 +0,0 @@
|
||||
/* Logging routines.
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
*/
|
||||
|
||||
#include "services.h"
|
||||
|
||||
static FILE *logfile;
|
||||
|
||||
static int curday = 0;
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static int get_logname(Anope::string &name, struct tm *tm)
|
||||
{
|
||||
char timestamp[32];
|
||||
time_t t;
|
||||
|
||||
if (!tm)
|
||||
{
|
||||
time(&t);
|
||||
tm = localtime(&t);
|
||||
}
|
||||
|
||||
/* fix bug 577 */
|
||||
strftime(timestamp, sizeof(timestamp), "%Y%m%d", tm);
|
||||
name = Anope::string("logs/") + timestamp + "." + log_filename;
|
||||
curday = tm->tm_yday;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static void remove_log()
|
||||
{
|
||||
time_t t;
|
||||
struct tm tm;
|
||||
|
||||
Anope::string name;
|
||||
|
||||
if (!Config->KeepLogs)
|
||||
return;
|
||||
|
||||
time(&t);
|
||||
t -= (60 * 60 * 24 * Config->KeepLogs);
|
||||
tm = *localtime(&t);
|
||||
|
||||
/* removed if from here cause get_logchan is always 1 */
|
||||
get_logname(name, &tm);
|
||||
DeleteFile(name.c_str());
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static void checkday()
|
||||
{
|
||||
time_t t;
|
||||
struct tm tm;
|
||||
|
||||
time(&t);
|
||||
tm = *localtime(&t);
|
||||
|
||||
if (curday != tm.tm_yday)
|
||||
{
|
||||
close_log();
|
||||
remove_log();
|
||||
open_log();
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Open the log file. Return -1 if the log file could not be opened, else
|
||||
* return 0. */
|
||||
|
||||
int open_log()
|
||||
{
|
||||
Anope::string name;
|
||||
|
||||
if (logfile)
|
||||
return 0;
|
||||
|
||||
/* if removed again.. get_logname is always 1 */
|
||||
get_logname(name, NULL);
|
||||
logfile = fopen(name.c_str(), "a");
|
||||
|
||||
if (logfile)
|
||||
setbuf(logfile, NULL);
|
||||
return logfile ? 0 : -1;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Close the log file. */
|
||||
|
||||
void close_log()
|
||||
{
|
||||
if (!logfile)
|
||||
return;
|
||||
fclose(logfile);
|
||||
logfile = NULL;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* added cause this is used over and over in the code */
|
||||
Anope::string log_gettimestamp()
|
||||
{
|
||||
time_t t;
|
||||
struct tm tm;
|
||||
char tbuf[256];
|
||||
|
||||
time(&t);
|
||||
tm = *localtime(&t);
|
||||
#if HAVE_GETTIMEOFDAY
|
||||
if (debug)
|
||||
{
|
||||
char *s;
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
strftime(tbuf, sizeof(tbuf) - 1, "[%b %d %H:%M:%S", &tm);
|
||||
s = tbuf + strlen(tbuf);
|
||||
s += snprintf(s, sizeof(tbuf) - (s - tbuf), ".%06d", static_cast<int>(tv.tv_usec));
|
||||
strftime(s, sizeof(tbuf) - (s - tbuf) - 1, " %Y]", &tm);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
strftime(tbuf, sizeof(tbuf) - 1, "[%b %d %H:%M:%S %Y]", &tm);
|
||||
return tbuf;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Like alog(), but tack a ": " and a system error message (as returned by
|
||||
* strerror()) onto the end.
|
||||
*/
|
||||
|
||||
void log_perror(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
int errno_save = errno;
|
||||
char str[BUFSIZE];
|
||||
|
||||
checkday();
|
||||
|
||||
if (!fmt)
|
||||
return;
|
||||
|
||||
va_start(args, fmt);
|
||||
vsnprintf(str, sizeof(str), fmt, args);
|
||||
va_end(args);
|
||||
|
||||
Anope::string buf = log_gettimestamp();
|
||||
|
||||
if (logfile)
|
||||
fprintf(logfile, "%s %s : %s\n", buf.c_str(), str, strerror(errno_save));
|
||||
if (nofork)
|
||||
fprintf(stderr, "%s %s : %s\n", buf.c_str(), str, strerror(errno_save));
|
||||
errno = errno_save;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* We've hit something we can't recover from. Let people know what
|
||||
* happened, then go down.
|
||||
*/
|
||||
|
||||
void fatal(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buf2[4096];
|
||||
|
||||
checkday();
|
||||
|
||||
if (!fmt)
|
||||
return;
|
||||
|
||||
va_start(args, fmt);
|
||||
vsnprintf(buf2, sizeof(buf2), fmt, args);
|
||||
va_end(args);
|
||||
|
||||
Anope::string buf = log_gettimestamp();
|
||||
|
||||
if (logfile)
|
||||
fprintf(logfile, "%s FATAL: %s\n", buf.c_str(), buf2);
|
||||
if (nofork)
|
||||
fprintf(stderr, "%s FATAL: %s\n", buf.c_str(), buf2);
|
||||
if (UplinkSock)
|
||||
ircdproto->SendGlobops(NULL, "FATAL ERROR! %s", buf2);
|
||||
|
||||
/* one of the many places this needs to be called from */
|
||||
ModuleRunTimeDirCleanUp();
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Same thing, but do it like perror(). */
|
||||
|
||||
void fatal_perror(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buf2[4096];
|
||||
int errno_save = errno;
|
||||
|
||||
checkday();
|
||||
|
||||
if (!fmt)
|
||||
return;
|
||||
|
||||
va_start(args, fmt);
|
||||
vsnprintf(buf2, sizeof(buf2), fmt, args);
|
||||
va_end(args);
|
||||
|
||||
Anope::string buf = log_gettimestamp();
|
||||
|
||||
if (logfile)
|
||||
fprintf(logfile, "%s FATAL: %s: %s\n", buf.c_str(), buf2, strerror(errno_save));
|
||||
if (nofork)
|
||||
fprintf(stderr, "%s FATAL: %s: %s\n", buf.c_str(), buf2, strerror(errno_save));
|
||||
if (UplinkSock)
|
||||
ircdproto->SendGlobops(NULL, "FATAL ERROR! %s: %s", buf2, strerror(errno_save));
|
||||
|
||||
/* one of the many places this needs to be called from */
|
||||
ModuleRunTimeDirCleanUp();
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Alog::Alog(LogLevel val) : Level(val)
|
||||
{
|
||||
if (Level >= LOG_DEBUG)
|
||||
buf << "Debug: ";
|
||||
}
|
||||
|
||||
Alog::~Alog()
|
||||
{
|
||||
if (Level >= LOG_DEBUG && (Level - LOG_DEBUG + 1) > debug)
|
||||
return;
|
||||
|
||||
int errno_save = errno;
|
||||
|
||||
checkday();
|
||||
|
||||
Anope::string tbuf = log_gettimestamp();
|
||||
|
||||
if (logfile)
|
||||
fprintf(logfile, "%s %s\n", tbuf.c_str(), buf.str().c_str());
|
||||
if (nofork)
|
||||
std::cout << tbuf << " " << buf.str() << std::endl;
|
||||
else if (Level == LOG_TERMINAL) // XXX dont use this yet unless you know we're at terminal and not daemonized
|
||||
std::cout << buf.str() << std::endl;
|
||||
if (Config && !Config->LogChannel.empty() && LogChan && !debug && findchan(Config->LogChannel))
|
||||
ircdproto->SendPrivmsg(Global, Config->LogChannel, "%s", buf.str().c_str());
|
||||
errno = errno_save;
|
||||
}
|
||||
+399
@@ -0,0 +1,399 @@
|
||||
/* Logging routines.
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
*/
|
||||
|
||||
#include "services.h"
|
||||
|
||||
void InitLogChannels(ServerConfig *config)
|
||||
{
|
||||
for (unsigned i = 0; i < config->LogInfos.size(); ++i)
|
||||
{
|
||||
LogInfo *l = config->LogInfos[i];
|
||||
|
||||
for (std::list<Anope::string>::const_iterator sit = l->Targets.begin(), sit_end = l->Targets.end(); sit != sit_end; ++sit)
|
||||
{
|
||||
const Anope::string &target = *sit;
|
||||
|
||||
if (target[0] == '#')
|
||||
{
|
||||
Channel *c = findchan(target);
|
||||
if (!c)
|
||||
c = new Channel(target);
|
||||
c->SetFlag(CH_LOGCHAN);
|
||||
c->SetFlag(CH_PERSIST);
|
||||
|
||||
for (botinfo_map::const_iterator bit = BotListByNick.begin(), bit_end = BotListByNick.end(); bit != bit_end; ++bit)
|
||||
{
|
||||
BotInfo *bi = bit->second;
|
||||
|
||||
if (bi->HasFlag(BI_CORE) && !c->FindUser(bi))
|
||||
{
|
||||
bi->Join(c);
|
||||
for (unsigned j = 0; j < config->BotModeList.size(); ++j)
|
||||
c->SetMode(OperServ, config->BotModeList[j], bi->nick, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Anope::string GetTimeStamp()
|
||||
{
|
||||
char tbuf[256];
|
||||
time_t t;
|
||||
|
||||
if (time(&t) < 0)
|
||||
throw CoreException("time() failed");
|
||||
tm tm = *localtime(&t);
|
||||
#if HAVE_GETTIMEOFDAY
|
||||
if (debug)
|
||||
{
|
||||
char *s;
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
strftime(tbuf, sizeof(tbuf) - 1, "[%b %d %H:%M:%S", &tm);
|
||||
s = tbuf + strlen(tbuf);
|
||||
s += snprintf(s, sizeof(tbuf) - (s - tbuf), ".%06d", static_cast<int>(tv.tv_usec));
|
||||
strftime(s, sizeof(tbuf) - (s - tbuf) - 1, " %Y]", &tm);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
strftime(tbuf, sizeof(tbuf) - 1, "[%b %d %H:%M:%S %Y]", &tm);
|
||||
|
||||
return tbuf;
|
||||
}
|
||||
|
||||
static Anope::string GetLogDate(time_t t = time(NULL))
|
||||
{
|
||||
char timestamp[32];
|
||||
|
||||
time(&t);
|
||||
tm *tm = localtime(&t);
|
||||
|
||||
strftime(timestamp, sizeof(timestamp), "%Y%m%d", tm);
|
||||
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
static inline Anope::string CreateLogName(const Anope::string &file, time_t time = time(NULL))
|
||||
{
|
||||
return "logs/" + file + "." + GetLogDate(time);
|
||||
}
|
||||
|
||||
LogFile::LogFile(const Anope::string &name) : filename(name), stream(name.c_str(), std::ios_base::out)
|
||||
{
|
||||
}
|
||||
|
||||
Anope::string LogFile::GetName() const
|
||||
{
|
||||
return this->filename;
|
||||
}
|
||||
|
||||
Log::Log(LogType type, const Anope::string &category, BotInfo *b) : bi(b), Type(type), Category(category)
|
||||
{
|
||||
if (b)
|
||||
this->Sources.push_back(b->nick);
|
||||
}
|
||||
|
||||
Log::Log(LogType type, User *u, Command *c, ChannelInfo *ci) : Type(type)
|
||||
{
|
||||
if (!u || !c)
|
||||
throw CoreException("Invalid pointers passed to Log::Log");
|
||||
|
||||
if (type != LOG_COMMAND && type != LOG_OVERRIDE && type != LOG_ADMIN)
|
||||
throw CoreException("This constructor does not support this log type");
|
||||
|
||||
this->bi = c->service ? c->service : Global;
|
||||
this->Category = (c->service ? c->service->nick + "/" : "") + c->name;
|
||||
this->Sources.push_back(this->bi->nick);
|
||||
this->Sources.push_back(u->nick);
|
||||
this->Sources.push_back(c->name);
|
||||
if (ci)
|
||||
this->Sources.push_back(ci->name);
|
||||
|
||||
if (type == LOG_ADMIN)
|
||||
buf << "ADMIN: ";
|
||||
else if (type == LOG_OVERRIDE)
|
||||
buf << "OVERRIDE: ";
|
||||
else
|
||||
buf << "COMMAND: ";
|
||||
buf << u->GetMask() << " used " << c->name << " ";
|
||||
if (ci)
|
||||
buf << "on " << ci->name << " ";
|
||||
}
|
||||
|
||||
Log::Log(User *u, Channel *c, const Anope::string &category) : Type(LOG_CHANNEL)
|
||||
{
|
||||
if (!c)
|
||||
throw CoreException("Invalid pointers passed to Log::Log");
|
||||
|
||||
this->bi = whosends(c->ci);
|
||||
this->Category = category;
|
||||
if (this->bi)
|
||||
this->Sources.push_back(this->bi->nick);
|
||||
if (u)
|
||||
this->Sources.push_back(u->nick);
|
||||
this->Sources.push_back(c->name);
|
||||
|
||||
buf << "CHANNEL: ";
|
||||
if (u)
|
||||
buf << u->GetMask() << " " << this->Category << " " << c->name << " ";
|
||||
else
|
||||
buf << this->Category << " " << c->name << " ";
|
||||
}
|
||||
|
||||
Log::Log(User *u, const Anope::string &category) : bi(Global), Type(LOG_USER), Category(category)
|
||||
{
|
||||
if (!u)
|
||||
throw CoreException("Invalid pointers passed to Log::Log");
|
||||
|
||||
if (this->bi)
|
||||
this->Sources.push_back(this->bi->nick);
|
||||
this->Sources.push_back(u->nick);
|
||||
|
||||
buf << "USERS: " << u->GetMask() << " ";
|
||||
}
|
||||
|
||||
Log::Log(Server *s, const Anope::string &category) : bi(OperServ), Type(LOG_SERVER), Category(category)
|
||||
{
|
||||
if (!s)
|
||||
throw CoreException("Invalid pointer passed to Log::Log");
|
||||
|
||||
if (this->bi)
|
||||
this->Sources.push_back(this->bi->nick);
|
||||
this->Sources.push_back(s->GetName());
|
||||
|
||||
buf << "SERVER: " << s->GetName() << " (" << s->GetDescription() << ") ";
|
||||
}
|
||||
|
||||
Log::Log(BotInfo *b, const Anope::string &category) : bi(b), Type(LOG_USER), Category(category)
|
||||
{
|
||||
if (!b)
|
||||
throw CoreException("Invalid opinter passed to Log::Log");
|
||||
|
||||
this->Sources.push_back(bi->nick);
|
||||
}
|
||||
|
||||
Log::~Log()
|
||||
{
|
||||
if (nofork && debug && this->Type >= LOG_NORMAL && this->Type <= LOG_DEBUG + debug - 1)
|
||||
std::cout << GetTimeStamp() << " Debug: " << this->buf.str() << std::endl;
|
||||
else if (this->Type == LOG_TERMINAL)
|
||||
std::cout << this->buf.str() << std::endl;
|
||||
for (unsigned i = 0; Config && i < Config->LogInfos.size(); ++i)
|
||||
{
|
||||
LogInfo *l = Config->LogInfos[i];
|
||||
l->ProcessMessage(this);
|
||||
}
|
||||
}
|
||||
|
||||
LogInfo::LogInfo(int logage, bool normal, bool rawio, bool ldebug) : LogAge(logage), Normal(normal), RawIO(rawio), Debug(ldebug)
|
||||
{
|
||||
}
|
||||
|
||||
LogInfo::~LogInfo()
|
||||
{
|
||||
for (std::map<Anope::string, LogFile *>::iterator it = this->Logfiles.begin(), it_end = this->Logfiles.end(); it != it_end; ++it)
|
||||
{
|
||||
LogFile *f = it->second;
|
||||
|
||||
if (f && f->stream.is_open())
|
||||
f->stream.close();
|
||||
delete f;
|
||||
}
|
||||
this->Logfiles.clear();
|
||||
}
|
||||
|
||||
void LogInfo::AddType(std::list<Anope::string> &list, const Anope::string &type)
|
||||
{
|
||||
for (std::list<Anope::string>::iterator it = list.begin(), it_end = list.end(); it != it_end; ++it)
|
||||
{
|
||||
if (Anope::Match(type, *it))
|
||||
{
|
||||
Log() << "Log: Type " << type << " is already covered by " << *it;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
list.push_back(type);
|
||||
}
|
||||
|
||||
bool LogInfo::HasType(std::list<Anope::string> &list, const Anope::string &type) const
|
||||
{
|
||||
for (std::list<Anope::string>::iterator it = list.begin(), it_end = list.end(); it != it_end; ++it)
|
||||
{
|
||||
Anope::string cat = *it;
|
||||
bool inverse = false;
|
||||
if (cat[0] == '~')
|
||||
{
|
||||
cat.erase(cat.begin());
|
||||
inverse = true;
|
||||
}
|
||||
if (Anope::Match(type, cat))
|
||||
{
|
||||
return !inverse;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
std::list<Anope::string> &LogInfo::GetList(LogType type)
|
||||
{
|
||||
static std::list<Anope::string> empty;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case LOG_ADMIN:
|
||||
case LOG_OVERRIDE:
|
||||
case LOG_COMMAND:
|
||||
return this->Commands;
|
||||
case LOG_SERVER:
|
||||
return this->Servers;
|
||||
case LOG_CHANNEL:
|
||||
return this->Channels;
|
||||
case LOG_USER:
|
||||
return this->Users;
|
||||
default:
|
||||
return empty;
|
||||
}
|
||||
}
|
||||
|
||||
bool LogInfo::HasType(LogType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case LOG_ADMIN:
|
||||
case LOG_OVERRIDE:
|
||||
case LOG_COMMAND:
|
||||
case LOG_SERVER:
|
||||
case LOG_CHANNEL:
|
||||
case LOG_USER:
|
||||
return !this->GetList(type).empty();
|
||||
case LOG_NORMAL:
|
||||
return this->Normal;
|
||||
case LOG_TERMINAL:
|
||||
return true;
|
||||
case LOG_RAWIO:
|
||||
return this->RawIO;
|
||||
case LOG_DEBUG:
|
||||
return this->Debug;
|
||||
// LOG_DEBUG_[234]
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LogInfo::ProcessMessage(const Log *l)
|
||||
{
|
||||
static time_t lastwarn = time(NULL);
|
||||
|
||||
if (!l)
|
||||
throw CoreException("Bad values passed to LogInfo::ProcessMessages");
|
||||
|
||||
if (!this->HasType(l->Type))
|
||||
return;
|
||||
else if (!l->Category.empty() && !this->HasType(this->GetList(l->Type), l->Category))
|
||||
return;
|
||||
|
||||
if (!this->Sources.empty())
|
||||
{
|
||||
bool log = false;
|
||||
for (std::list<Anope::string>::const_iterator it = this->Sources.begin(), it_end = this->Sources.end(); it != it_end; ++it)
|
||||
{
|
||||
if (std::find(l->Sources.begin(), l->Sources.end(), *it) != l->Sources.end())
|
||||
{
|
||||
log = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!log)
|
||||
return;
|
||||
}
|
||||
|
||||
for (std::list<Anope::string>::iterator it = this->Targets.begin(), it_end = this->Targets.end(); it != it_end; ++it)
|
||||
{
|
||||
const Anope::string &target = *it;
|
||||
|
||||
if (target[0] == '#')
|
||||
{
|
||||
if (UplinkSock && !debug && Me && Me->IsSynced())
|
||||
{
|
||||
Channel *c = findchan(target);
|
||||
if (!c || !l->bi)
|
||||
continue;
|
||||
ircdproto->SendPrivmsg(l->bi, c->name, "%s", l->buf.str().c_str());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LogFile *log = NULL;
|
||||
std::map<Anope::string, LogFile *>::iterator lit = this->Logfiles.find(target);
|
||||
if (lit != this->Logfiles.end())
|
||||
{
|
||||
log = lit->second;
|
||||
if (log && log->GetName() != CreateLogName(target))
|
||||
{
|
||||
delete log;
|
||||
log = new LogFile(CreateLogName(target));
|
||||
|
||||
if (this->LogAge)
|
||||
{
|
||||
Anope::string oldlog = CreateLogName(target, time(NULL) - 86400 * this->LogAge);
|
||||
if (IsFile(oldlog))
|
||||
{
|
||||
DeleteFile(oldlog.c_str());
|
||||
Log(LOG_DEBUG) << "Deleted old logfile " << oldlog;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!log || !log->stream.is_open())
|
||||
{
|
||||
time_t now = time(NULL);
|
||||
if (log && lastwarn + 300 > now)
|
||||
{
|
||||
lastwarn = now;
|
||||
Log() << "Unable to open logfile " << log->GetName();
|
||||
}
|
||||
delete log;
|
||||
log = NULL;
|
||||
this->Logfiles.erase(lit);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (lit == this->Logfiles.end())
|
||||
{
|
||||
log = new LogFile(CreateLogName(target));
|
||||
|
||||
if (!log->stream.is_open())
|
||||
{
|
||||
time_t now = time(NULL);
|
||||
if (lastwarn + 300 > now)
|
||||
{
|
||||
lastwarn = now;
|
||||
Log() << "Unable to open logfile " << log->GetName();
|
||||
delete log;
|
||||
log = NULL;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
this->Logfiles[target] = log;
|
||||
}
|
||||
|
||||
if (log)
|
||||
log->stream << GetTimeStamp() << " " << l->buf.str() << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -4,9 +4,9 @@
|
||||
MailThread::~MailThread()
|
||||
{
|
||||
if (Success)
|
||||
Alog() << "Successfully delivered mail for " << MailTo << " (" << Addr << ")";
|
||||
Log() << "Successfully delivered mail for " << MailTo << " (" << Addr << ")";
|
||||
else
|
||||
Alog() << "Error delivering mail for " << MailTo << " (" << Addr << ")";
|
||||
Log() << "Error delivering mail for " << MailTo << " (" << Addr << ")";
|
||||
}
|
||||
|
||||
void MailThread::Run()
|
||||
|
||||
+138
-142
@@ -43,7 +43,6 @@ Anope::string orig_cwd; /* Original current working directory */
|
||||
Anope::string log_filename = "services.log"; /* -log filename */
|
||||
int debug = 0; /* -debug */
|
||||
bool readonly = false; /* -readonly */
|
||||
bool LogChan = false; /* -logchan */
|
||||
bool nofork = false; /* -nofork */
|
||||
bool nothird = false; /* -nothrid */
|
||||
bool noexpire = false; /* -noexpire */
|
||||
@@ -138,7 +137,7 @@ extern void expire_all()
|
||||
|
||||
FOREACH_MOD(I_OnPreDatabaseExpire, OnPreDatabaseExpire());
|
||||
|
||||
Alog(LOG_DEBUG) << "Running expire routines";
|
||||
Log(LOG_DEBUG) << "Running expire routines";
|
||||
expire_nicks();
|
||||
expire_chans();
|
||||
expire_requests();
|
||||
@@ -156,7 +155,7 @@ void save_databases()
|
||||
|
||||
EventReturn MOD_RESULT;
|
||||
FOREACH_RESULT(I_OnSaveDatabase, OnSaveDatabase());
|
||||
Alog(LOG_DEBUG) << "Saving FFF databases";
|
||||
Log(LOG_DEBUG) << "Saving databases";
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -169,7 +168,7 @@ void do_restart_services()
|
||||
expire_all();
|
||||
save_databases();
|
||||
}
|
||||
Alog() << "Restarting";
|
||||
Log() << "Restarting";
|
||||
|
||||
FOREACH_MOD(I_OnPreRestart, OnPreRestart());
|
||||
|
||||
@@ -188,15 +187,12 @@ void do_restart_services()
|
||||
ircdproto->SendSquit(Config->ServerName, quitmsg);
|
||||
SocketEngine->Process();
|
||||
delete UplinkSock;
|
||||
close_log();
|
||||
ModuleManager::UnloadAll();
|
||||
chdir(binary_dir.c_str());
|
||||
execve(services_bin.c_str(), my_av, my_envp);
|
||||
if (!readonly)
|
||||
{
|
||||
open_log();
|
||||
log_perror("Restart failed");
|
||||
close_log();
|
||||
throw FatalException("Restart failed");
|
||||
}
|
||||
|
||||
FOREACH_MOD(I_OnRestart, OnRestart());
|
||||
@@ -214,7 +210,7 @@ static void services_shutdown()
|
||||
|
||||
if (quitmsg.empty())
|
||||
quitmsg = "Terminating, reason unknown";
|
||||
Alog() << quitmsg;
|
||||
Log() << quitmsg;
|
||||
if (started && UplinkSock)
|
||||
{
|
||||
/* Send a quit for all of our bots */
|
||||
@@ -259,7 +255,7 @@ void sighandler(int signum)
|
||||
#ifndef _WIN32
|
||||
if (signum == SIGHUP)
|
||||
{
|
||||
Alog() << "Received SIGHUP: Saving Databases & Rehash Configuration";
|
||||
Log() << "Received SIGHUP: Saving Databases & Rehash Configuration";
|
||||
|
||||
expire_all();
|
||||
save_databases();
|
||||
@@ -273,7 +269,7 @@ void sighandler(int signum)
|
||||
}
|
||||
catch (const ConfigException &ex)
|
||||
{
|
||||
Alog() << "Error reloading configuration file: " << ex.GetReason();
|
||||
Log() << "Error reloading configuration file: " << ex.GetReason();
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -287,7 +283,7 @@ void sighandler(int signum)
|
||||
signal(SIGHUP, SIG_IGN);
|
||||
#endif
|
||||
|
||||
Alog() << "Received SIGTERM, exiting.";
|
||||
Log() << "Received SIGTERM, exiting.";
|
||||
|
||||
expire_all();
|
||||
save_databases();
|
||||
@@ -300,7 +296,7 @@ void sighandler(int signum)
|
||||
if (nofork)
|
||||
{
|
||||
signal(SIGINT, SIG_IGN);
|
||||
Alog() << "Received SIGINT, exiting.";
|
||||
Log() << "Received SIGINT, exiting.";
|
||||
expire_all();
|
||||
save_databases();
|
||||
quitmsg = "Shutting down on SIGINT";
|
||||
@@ -323,7 +319,7 @@ void sighandler(int signum)
|
||||
if (isatty(2))
|
||||
fprintf(stderr, "%s\n", quitmsg.c_str());
|
||||
else
|
||||
Alog() << quitmsg;
|
||||
Log() << quitmsg;
|
||||
|
||||
exit(1);
|
||||
}
|
||||
@@ -398,11 +394,11 @@ static bool Connect()
|
||||
}
|
||||
catch (const SocketException &ex)
|
||||
{
|
||||
Alog() << "Unable to connect to server" << servernum << " (" << uplink_server->host << ":" << uplink_server->port << "), " << ex.GetReason();
|
||||
Log() << "Unable to connect to server" << servernum << " (" << uplink_server->host << ":" << uplink_server->port << "), " << ex.GetReason();
|
||||
continue;
|
||||
}
|
||||
|
||||
Alog() << "Connected to Server " << servernum << " (" << uplink_server->host << ":" << uplink_server->port << ")";
|
||||
Log() << "Connected to Server " << servernum << " (" << uplink_server->host << ":" << uplink_server->port << ")";
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -417,175 +413,175 @@ static bool Connect()
|
||||
|
||||
int main(int ac, char **av, char **envp)
|
||||
{
|
||||
my_av = av;
|
||||
my_envp = envp;
|
||||
try
|
||||
{
|
||||
my_av = av;
|
||||
my_envp = envp;
|
||||
|
||||
char cwd[PATH_MAX] = "";
|
||||
char cwd[PATH_MAX] = "";
|
||||
#ifdef _WIN32
|
||||
GetCurrentDirectory(PATH_MAX, cwd);
|
||||
GetCurrentDirectory(PATH_MAX, cwd);
|
||||
#else
|
||||
getcwd(cwd, PATH_MAX);
|
||||
getcwd(cwd, PATH_MAX);
|
||||
#endif
|
||||
orig_cwd = cwd;
|
||||
orig_cwd = cwd;
|
||||
|
||||
#ifndef _WIN32
|
||||
/* If we're root, issue a warning now */
|
||||
if (!getuid() && !getgid())
|
||||
{
|
||||
fprintf(stderr, "WARNING: You are currently running Anope as the root superuser. Anope does not\n");
|
||||
fprintf(stderr, " require root privileges to run, and it is discouraged that you run Anope\n");
|
||||
fprintf(stderr, " as the root superuser.\n");
|
||||
}
|
||||
/* If we're root, issue a warning now */
|
||||
if (!getuid() && !getgid())
|
||||
{
|
||||
fprintf(stderr, "WARNING: You are currently running Anope as the root superuser. Anope does not\n");
|
||||
fprintf(stderr, " require root privileges to run, and it is discouraged that you run Anope\n");
|
||||
fprintf(stderr, " as the root superuser.\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
binary_dir = GetFullProgDir(av[0]);
|
||||
if (binary_dir[binary_dir.length() - 1] == '.')
|
||||
binary_dir = binary_dir.substr(0, binary_dir.length() - 2);
|
||||
binary_dir = GetFullProgDir(av[0]);
|
||||
if (binary_dir[binary_dir.length() - 1] == '.')
|
||||
binary_dir = binary_dir.substr(0, binary_dir.length() - 2);
|
||||
#ifdef _WIN32
|
||||
Anope::string::size_type n = binary_dir.rfind('\\');
|
||||
services_dir = binary_dir.substr(0, n) + "\\data";
|
||||
Anope::string::size_type n = binary_dir.rfind('\\');
|
||||
services_dir = binary_dir.substr(0, n) + "\\data";
|
||||
#else
|
||||
Anope::string::size_type n = binary_dir.rfind('/');
|
||||
services_dir = binary_dir.substr(0, n) + "/data";
|
||||
Anope::string::size_type n = binary_dir.rfind('/');
|
||||
services_dir = binary_dir.substr(0, n) + "/data";
|
||||
#endif
|
||||
|
||||
/* Clean out the module runtime directory prior to running, just in case files were left behind during a previous run */
|
||||
ModuleRunTimeDirCleanUp();
|
||||
/* Clean out the module runtime directory prior to running, just in case files were left behind during a previous run */
|
||||
ModuleRunTimeDirCleanUp();
|
||||
|
||||
/* General initialization first */
|
||||
int i = init_primary(ac, av);
|
||||
if (i)
|
||||
return i;
|
||||
/* General initialization first */
|
||||
Init(ac, av);
|
||||
|
||||
Alog(LOG_TERMINAL) << "Anope " << Anope::Version() << ", " << Anope::Build();
|
||||
#ifdef _WIN32
|
||||
Alog(LOG_TERMINAL) << "Using configuration file " << services_dir << "\\" << services_conf;
|
||||
#else
|
||||
Alog(LOG_TERMINAL) << "Using configuration file " << services_dir << "/" << services_conf;
|
||||
#endif
|
||||
/* If the first connect fails give up, don't sit endlessly trying to reconnect */
|
||||
if (!Connect())
|
||||
{
|
||||
Log() << "Can't connect to any servers";
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Initialization stuff. */
|
||||
i = init_secondary(ac, av);
|
||||
if (i)
|
||||
return i;
|
||||
ircdproto->SendConnect();
|
||||
FOREACH_MOD(I_OnServerConnect, OnServerConnect());
|
||||
|
||||
/* If the first connect fails give up, don't sit endlessly trying to reconnect */
|
||||
if (!Connect())
|
||||
fatal_perror("Can't connect to any servers");
|
||||
|
||||
ircdproto->SendConnect();
|
||||
FOREACH_MOD(I_OnServerConnect, OnServerConnect());
|
||||
|
||||
started = true;
|
||||
started = true;
|
||||
|
||||
#ifndef _WIN32
|
||||
if (Config->DumpCore)
|
||||
{
|
||||
rlimit rl;
|
||||
if (getrlimit(RLIMIT_CORE, &rl) == -1)
|
||||
Alog() << "Failed to getrlimit()!";
|
||||
else
|
||||
if (Config->DumpCore)
|
||||
{
|
||||
rl.rlim_cur = rl.rlim_max;
|
||||
if (setrlimit(RLIMIT_CORE, &rl) == -1)
|
||||
Alog() << "setrlimit() failed, cannot increase coredump size";
|
||||
rlimit rl;
|
||||
if (getrlimit(RLIMIT_CORE, &rl) == -1)
|
||||
Log() << "Failed to getrlimit()!";
|
||||
else
|
||||
{
|
||||
rl.rlim_cur = rl.rlim_max;
|
||||
if (setrlimit(RLIMIT_CORE, &rl) == -1)
|
||||
Log() << "setrlimit() failed, cannot increase coredump size";
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Set up timers */
|
||||
time_t last_check = time(NULL);
|
||||
ExpireTimer expireTimer(Config->ExpireTimeout, last_check);
|
||||
UpdateTimer updateTimer(Config->UpdateTimeout, last_check);
|
||||
/* Set up timers */
|
||||
time_t last_check = time(NULL);
|
||||
ExpireTimer expireTimer(Config->ExpireTimeout, last_check);
|
||||
UpdateTimer updateTimer(Config->UpdateTimeout, last_check);
|
||||
|
||||
/*** Main loop. ***/
|
||||
while (!quitting)
|
||||
{
|
||||
while (!quitting && UplinkSock)
|
||||
/*** Main loop. ***/
|
||||
while (!quitting)
|
||||
{
|
||||
time_t t = time(NULL);
|
||||
|
||||
Alog(LOG_DEBUG_2) << "Top of main loop";
|
||||
|
||||
if (!readonly && (save_data || shutting_down))
|
||||
while (!quitting && UplinkSock)
|
||||
{
|
||||
if (!noexpire)
|
||||
expire_all();
|
||||
if (shutting_down)
|
||||
ircdproto->SendGlobops(NULL, "Updating databases on shutdown, please wait.");
|
||||
save_databases();
|
||||
save_data = false;
|
||||
}
|
||||
time_t t = time(NULL);
|
||||
|
||||
if (shutting_down)
|
||||
{
|
||||
quitting = true;
|
||||
break;
|
||||
}
|
||||
Log(LOG_DEBUG_2) << "Top of main loop";
|
||||
|
||||
if (t - last_check >= Config->TimeoutCheck)
|
||||
{
|
||||
TimerManager::TickTimers(t);
|
||||
last_check = t;
|
||||
}
|
||||
|
||||
/* Process any modes that need to be (un)set */
|
||||
ModeManager::ProcessModes();
|
||||
|
||||
/* Process the socket engine */
|
||||
SocketEngine->Process();
|
||||
}
|
||||
|
||||
if (quitting)
|
||||
/* Disconnect and exit */
|
||||
services_shutdown();
|
||||
else
|
||||
{
|
||||
FOREACH_MOD(I_OnServerDisconnect, OnServerDisconnect());
|
||||
|
||||
/* Clear all of our users, but not our bots */
|
||||
for (user_map::const_iterator it = UserListByNick.begin(), it_end = UserListByNick.end(); it != it_end; )
|
||||
{
|
||||
User *u = it->second;
|
||||
++it;
|
||||
|
||||
if (!findbot(u->nick))
|
||||
delete u;
|
||||
}
|
||||
|
||||
Me->SetFlag(SERVER_SYNCING);
|
||||
Me->ClearLinks();
|
||||
|
||||
unsigned j = 0;
|
||||
for (; j < (Config->MaxRetries ? Config->MaxRetries : j + 1); ++j)
|
||||
{
|
||||
Alog() << "Disconnected from the server, retrying in " << Config->RetryWait << " seconds";
|
||||
|
||||
sleep(Config->RetryWait);
|
||||
if (Connect())
|
||||
if (!readonly && (save_data || shutting_down))
|
||||
{
|
||||
ircdproto->SendConnect();
|
||||
FOREACH_MOD(I_OnServerConnect, OnServerConnect());
|
||||
if (!noexpire)
|
||||
expire_all();
|
||||
if (shutting_down)
|
||||
ircdproto->SendGlobops(NULL, "Updating databases on shutdown, please wait.");
|
||||
save_databases();
|
||||
save_data = false;
|
||||
}
|
||||
|
||||
if (shutting_down)
|
||||
{
|
||||
quitting = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (t - last_check >= Config->TimeoutCheck)
|
||||
{
|
||||
TimerManager::TickTimers(t);
|
||||
last_check = t;
|
||||
}
|
||||
|
||||
/* Process any modes that need to be (un)set */
|
||||
ModeManager::ProcessModes();
|
||||
|
||||
/* Process the socket engine */
|
||||
SocketEngine->Process();
|
||||
}
|
||||
if (Config->MaxRetries && j == Config->MaxRetries)
|
||||
|
||||
if (quitting)
|
||||
/* Disconnect and exit */
|
||||
services_shutdown();
|
||||
else
|
||||
{
|
||||
Alog() << "Max connection retry limit exceeded";
|
||||
quitting = true;
|
||||
FOREACH_MOD(I_OnServerDisconnect, OnServerDisconnect());
|
||||
|
||||
/* Clear all of our users, but not our bots */
|
||||
for (user_map::const_iterator it = UserListByNick.begin(), it_end = UserListByNick.end(); it != it_end; )
|
||||
{
|
||||
User *u = it->second;
|
||||
++it;
|
||||
|
||||
if (!findbot(u->nick))
|
||||
delete u;
|
||||
}
|
||||
|
||||
Me->SetFlag(SERVER_SYNCING);
|
||||
Me->ClearLinks();
|
||||
|
||||
unsigned j = 0;
|
||||
for (; j < (Config->MaxRetries ? Config->MaxRetries : j + 1); ++j)
|
||||
{
|
||||
Log() << "Disconnected from the server, retrying in " << Config->RetryWait << " seconds";
|
||||
|
||||
sleep(Config->RetryWait);
|
||||
if (Connect())
|
||||
{
|
||||
ircdproto->SendConnect();
|
||||
FOREACH_MOD(I_OnServerConnect, OnServerConnect());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (Config->MaxRetries && j == Config->MaxRetries)
|
||||
{
|
||||
Log() << "Max connection retry limit exceeded";
|
||||
quitting = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (const FatalException &ex)
|
||||
{
|
||||
if (!ex.GetReason().empty())
|
||||
Log(LOG_TERMINAL) << ex.GetReason();
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline Anope::string Anope::Version()
|
||||
Anope::string Anope::Version()
|
||||
{
|
||||
return stringify(VERSION_MAJOR) + "." + stringify(VERSION_MINOR) + "." + stringify(VERSION_PATCH) + VERSION_EXTRA + " (" + stringify(VERSION_BUILD) + ")";
|
||||
}
|
||||
|
||||
inline Anope::string Anope::Build()
|
||||
Anope::string Anope::Build()
|
||||
{
|
||||
return "build #" + stringify(BUILD) + ", compiled " + Anope::compiled;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ void check_memos(User *u)
|
||||
{
|
||||
if (!u)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "check_memos called with NULL values";
|
||||
Log() << "check_memos called with NULL values";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+6
-4
@@ -102,7 +102,7 @@ int m_privmsg(const Anope::string &source, const Anope::string &receiver, const
|
||||
|
||||
if (!u)
|
||||
{
|
||||
Alog() << message << ": user record for " << source << " not found";
|
||||
Log() << message << ": user record for " << source << " not found";
|
||||
|
||||
BotInfo *bi = findbot(receiver);
|
||||
if (bi)
|
||||
@@ -129,7 +129,9 @@ int m_privmsg(const Anope::string &source, const Anope::string &receiver, const
|
||||
if (get_ignore(source))
|
||||
{
|
||||
Anope::string target = myStrGetToken(message, ' ', 0);
|
||||
Alog() << "Ignored message from " << source << " to " << receiver << " using command " << target;
|
||||
BotInfo *bi = findbot(target);
|
||||
if (bi)
|
||||
Log(bi) << "Ignored message from " << source << " using command " << target;
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -147,7 +149,7 @@ int m_privmsg(const Anope::string &source, const Anope::string &receiver, const
|
||||
}
|
||||
else if (Config->UseStrictPrivMsg)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Ignored PRIVMSG without @ from " << source;
|
||||
Log(LOG_DEBUG) << "Ignored PRIVMSG without @ from " << source;
|
||||
notice_lang(receiver, u, INVALID_TARGET, receiver.c_str(), receiver.c_str(), Config->ServerName.c_str(), receiver.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
@@ -196,7 +198,7 @@ int m_privmsg(const Anope::string &source, const Anope::string &receiver, const
|
||||
}
|
||||
else
|
||||
{
|
||||
Alog() << Config->s_OperServ << ": " << u->nick << ": " << message;
|
||||
Log(OperServ) << u->nick << ": " << message;
|
||||
mod_run_cmd(bi, u, message);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -601,7 +601,7 @@ void EnforceQlinedNick(const Anope::string &nick, const Anope::string &killer)
|
||||
|
||||
if (u2)
|
||||
{
|
||||
Alog() << "Killed Q-lined nick: " << u2->GetMask();
|
||||
Log() << "Killed Q-lined nick: " << u2->GetMask();
|
||||
kill_user(killer, u2->nick, "This nick is reserved for Services. Please use a non Q-Lined nick.");
|
||||
}
|
||||
}
|
||||
@@ -834,7 +834,7 @@ Anope::string host_resolve(const Anope::string &host)
|
||||
char ipbuf[16];
|
||||
ntoa(addr, ipbuf, sizeof(ipbuf));
|
||||
ipreturn = ipbuf;
|
||||
Alog(LOG_DEBUG) << "resolved " << host << " to " << ipbuf;
|
||||
Log(LOG_DEBUG) << "resolved " << host << " to " << ipbuf;
|
||||
}
|
||||
return ipreturn;
|
||||
}
|
||||
|
||||
+19
-21
@@ -33,8 +33,6 @@ Flags<ChannelModeName> DefMLockOn;
|
||||
Flags<ChannelModeName> DefMLockOff;
|
||||
/* Map for default mlocked mode parameters */
|
||||
std::map<ChannelModeName, Anope::string> DefMLockParams;
|
||||
/* Modes to set on bots when they join the channel */
|
||||
std::list<ChannelModeStatus *> BotModes;
|
||||
|
||||
/** Parse the mode string from the config file and set the default mlocked modes
|
||||
*/
|
||||
@@ -72,7 +70,7 @@ void SetDefaultMLock(ServerConfig *config)
|
||||
DefMLockParams.insert(std::make_pair(cm->Name, param));
|
||||
else
|
||||
{
|
||||
Alog() << "Warning: Got default mlock mode " << cm->ModeChar << " with no param?";
|
||||
Log() << "Warning: Got default mlock mode " << cm->ModeChar << " with no param?";
|
||||
ptr->UnsetFlag(cm->Name);
|
||||
}
|
||||
}
|
||||
@@ -81,13 +79,13 @@ void SetDefaultMLock(ServerConfig *config)
|
||||
}
|
||||
|
||||
/* Set Bot Modes */
|
||||
BotModes.clear();
|
||||
for (unsigned i = 0, end_mode = config->BotModes.length(); i < end_mode; ++i)
|
||||
config->BotModeList.clear();
|
||||
for (unsigned i = 0; i < config->BotModes.length(); ++i)
|
||||
{
|
||||
ChannelMode *cm = ModeManager::FindChannelModeByChar(config->BotModes[i]);
|
||||
|
||||
if (cm && cm->Type == MODE_STATUS && std::find(BotModes.begin(), BotModes.end(), cm) == BotModes.end())
|
||||
BotModes.push_back(debug_cast<ChannelModeStatus *>(cm));
|
||||
if (cm && cm->Type == MODE_STATUS && std::find(config->BotModeList.begin(), config->BotModeList.end(), cm) == config->BotModeList.end())
|
||||
config->BotModeList.push_back(debug_cast<ChannelModeStatus *>(cm));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,7 +280,7 @@ void ChannelModeBan::AddMask(Channel *chan, const Anope::string &mask)
|
||||
/* check for NULL values otherwise we will segfault */
|
||||
if (!chan || mask.empty())
|
||||
{
|
||||
Alog(LOG_DEBUG) << "add_ban called with NULL values";
|
||||
Log() << "add_ban called with NULL values";
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -293,7 +291,7 @@ void ChannelModeBan::AddMask(Channel *chan, const Anope::string &mask)
|
||||
|
||||
Entry *ban = entry_add(chan->bans, mask);
|
||||
if (!ban)
|
||||
fatal("Creating new ban entry failed");
|
||||
throw CoreException("Creating new ban entry failed");
|
||||
|
||||
/* Check whether it matches a botserv bot after adding internally
|
||||
* and parsing it through cidr support. ~ Viper */
|
||||
@@ -309,7 +307,7 @@ void ChannelModeBan::AddMask(Channel *chan, const Anope::string &mask)
|
||||
}
|
||||
}
|
||||
|
||||
Alog(LOG_DEBUG) << "Added ban " << mask << " to channel " << chan->name;
|
||||
Log(LOG_DEBUG) << "Added ban " << mask << " to channel " << chan->name;
|
||||
}
|
||||
|
||||
/** Remove a ban from the channel
|
||||
@@ -327,7 +325,7 @@ void ChannelModeBan::DelMask(Channel *chan, const Anope::string &mask)
|
||||
{
|
||||
entry_delete(chan->bans, ban);
|
||||
|
||||
Alog(LOG_DEBUG) << "Deleted ban " << mask << " from channel " << chan->name;
|
||||
Log(LOG_DEBUG) << "Deleted ban " << mask << " from channel " << chan->name;
|
||||
}
|
||||
|
||||
AutoKick *akick;
|
||||
@@ -343,7 +341,7 @@ void ChannelModeExcept::AddMask(Channel *chan, const Anope::string &mask)
|
||||
{
|
||||
if (!chan || mask.empty())
|
||||
{
|
||||
Alog(LOG_DEBUG) << "add_exception called with NULL values";
|
||||
Log() << "add_exception called with NULL values";
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -354,9 +352,9 @@ void ChannelModeExcept::AddMask(Channel *chan, const Anope::string &mask)
|
||||
|
||||
Entry *exception = entry_add(chan->excepts, mask);
|
||||
if (!exception)
|
||||
fatal("Creating new exception entry failed");
|
||||
throw CoreException("Creating new exception entry failed");
|
||||
|
||||
Alog(LOG_DEBUG) << "Added except " << mask << " to channel " << chan->name;
|
||||
Log(LOG_DEBUG) << "Added except " << mask << " to channel " << chan->name;
|
||||
}
|
||||
|
||||
/** Remove an except from the channel
|
||||
@@ -373,7 +371,7 @@ void ChannelModeExcept::DelMask(Channel *chan, const Anope::string &mask)
|
||||
if (exception)
|
||||
{
|
||||
entry_delete(chan->excepts, exception);
|
||||
Alog(LOG_DEBUG) << "Deleted except " << mask << " to channel " << chan->name;
|
||||
Log(LOG_DEBUG) << "Deleted except " << mask << " to channel " << chan->name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -385,7 +383,7 @@ void ChannelModeInvex::AddMask(Channel *chan, const Anope::string &mask)
|
||||
{
|
||||
if (!chan || mask.empty())
|
||||
{
|
||||
Alog(LOG_DEBUG) << "add_invite called with NULL values";
|
||||
Log() << "add_invite called with NULL values";
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -396,9 +394,9 @@ void ChannelModeInvex::AddMask(Channel *chan, const Anope::string &mask)
|
||||
|
||||
Entry *invite = entry_add(chan->invites, mask);
|
||||
if (!invite)
|
||||
fatal("Creating new exception entry failed");
|
||||
throw CoreException("Creating new invex entry failed");
|
||||
|
||||
Alog(LOG_DEBUG) << "Added invite " << mask << " to channel " << chan->name;
|
||||
Log(LOG_DEBUG) << "Added invite " << mask << " to channel " << chan->name;
|
||||
|
||||
}
|
||||
|
||||
@@ -416,7 +414,7 @@ void ChannelModeInvex::DelMask(Channel *chan, const Anope::string &mask)
|
||||
if (invite)
|
||||
{
|
||||
entry_delete(chan->invites, invite);
|
||||
Alog(LOG_DEBUG) << "Deleted invite " << mask << " to channel " << chan->name;
|
||||
Log(LOG_DEBUG) << "Deleted invite " << mask << " to channel " << chan->name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -611,7 +609,7 @@ bool ModeManager::AddUserMode(UserMode *um)
|
||||
if (um->Name == UMODE_END)
|
||||
{
|
||||
um->Name = static_cast<UserModeName>(UMODE_END + ++GenericUserModes);
|
||||
Alog() << "ModeManager: Added generic support for user mode " << um->ModeChar;
|
||||
Log() << "ModeManager: Added generic support for user mode " << um->ModeChar;
|
||||
}
|
||||
ModeManager::UserModesByName.insert(std::make_pair(um->Name, um));
|
||||
ModeManager::Modes.insert(std::make_pair(um->NameAsString, um));
|
||||
@@ -635,7 +633,7 @@ bool ModeManager::AddChannelMode(ChannelMode *cm)
|
||||
if (cm->Name == CMODE_END)
|
||||
{
|
||||
cm->Name = static_cast<ChannelModeName>(CMODE_END + ++GenericChannelModes);
|
||||
Alog() << "ModeManager: Added generic support for channel mode " << cm->ModeChar;
|
||||
Log() << "ModeManager: Added generic support for channel mode " << cm->ModeChar;
|
||||
}
|
||||
ModeManager::ChannelModesByName.insert(std::make_pair(cm->Name, cm));
|
||||
ModeManager::Modes.insert(std::make_pair(cm->NameAsString, cm));
|
||||
|
||||
+13
-13
@@ -51,7 +51,7 @@ static int moduleCopyFile(const Anope::string &name, Anope::string &output)
|
||||
output = tmp_output;
|
||||
free(tmp_output); // XXX
|
||||
|
||||
Alog(LOG_DEBUG) << "Runtime module location: " << output;
|
||||
Log(LOG_DEBUG) << "Runtime module location: " << output;
|
||||
|
||||
FILE *target;
|
||||
#ifndef _WIN32
|
||||
@@ -116,7 +116,7 @@ int ModuleManager::LoadModule(const Anope::string &modname, User *u)
|
||||
if (FindModule(modname))
|
||||
return MOD_ERR_EXISTS;
|
||||
|
||||
Alog(LOG_DEBUG) << "trying to load [" << modname << "]";
|
||||
Log(LOG_DEBUG) << "trying to load [" << modname << "]";
|
||||
|
||||
/* Generate the filename for the temporary copy of the module */
|
||||
Anope::string pbuf = services_dir + "/modules/runtime/" + modname + ".so.XXXXXX";
|
||||
@@ -137,7 +137,7 @@ int ModuleManager::LoadModule(const Anope::string &modname, User *u)
|
||||
const char *err;
|
||||
if (!handle && (err = dlerror()))
|
||||
{
|
||||
Alog() << err;
|
||||
Log() << err;
|
||||
return MOD_ERR_NOLOAD;
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ int ModuleManager::LoadModule(const Anope::string &modname, User *u)
|
||||
Module *(*func)(const Anope::string &, const Anope::string &) = function_cast<Module *(*)(const Anope::string &, const Anope::string &)>(dlsym(handle, "AnopeInit"));
|
||||
if (!func && (err = dlerror()))
|
||||
{
|
||||
Alog() << "No init function found, not an Anope module";
|
||||
Log() << "No init function found, not an Anope module";
|
||||
dlclose(handle);
|
||||
return MOD_ERR_NOLOAD;
|
||||
}
|
||||
@@ -166,7 +166,7 @@ int ModuleManager::LoadModule(const Anope::string &modname, User *u)
|
||||
}
|
||||
catch (const ModuleException &ex)
|
||||
{
|
||||
Alog() << "Error while loading " << modname << ": " << ex.GetReason();
|
||||
Log() << "Error while loading " << modname << ": " << ex.GetReason();
|
||||
return MOD_STOP;
|
||||
}
|
||||
|
||||
@@ -176,27 +176,27 @@ int ModuleManager::LoadModule(const Anope::string &modname, User *u)
|
||||
Version v = m->GetVersion();
|
||||
if (v.GetMajor() < VERSION_MAJOR || (v.GetMajor() == VERSION_MAJOR && v.GetMinor() < VERSION_MINOR))
|
||||
{
|
||||
Alog() << "Module " << modname << " is compiled against an older version of Anope " << v.GetMajor() << "." << v.GetMinor() << ", this is " << VERSION_MAJOR << "." << VERSION_MINOR;
|
||||
Log() << "Module " << modname << " is compiled against an older version of Anope " << v.GetMajor() << "." << v.GetMinor() << ", this is " << VERSION_MAJOR << "." << VERSION_MINOR;
|
||||
DeleteModule(m);
|
||||
return MOD_STOP;
|
||||
}
|
||||
else if (v.GetMajor() > VERSION_MAJOR || (v.GetMajor() == VERSION_MAJOR && v.GetMinor() > VERSION_MINOR))
|
||||
{
|
||||
Alog() << "Module " << modname << " is compiled against a newer version of Anope " << v.GetMajor() << "." << v.GetMinor() << ", this is " << VERSION_MAJOR << "." << VERSION_MINOR;
|
||||
Log() << "Module " << modname << " is compiled against a newer version of Anope " << v.GetMajor() << "." << v.GetMinor() << ", this is " << VERSION_MAJOR << "." << VERSION_MINOR;
|
||||
DeleteModule(m);
|
||||
return MOD_STOP;
|
||||
}
|
||||
else if (v.GetBuild() < VERSION_BUILD)
|
||||
Alog() << "Module " << modname << " is compiled against an older revision of Anope " << v.GetBuild() << ", this is " << VERSION_BUILD;
|
||||
Log() << "Module " << modname << " is compiled against an older revision of Anope " << v.GetBuild() << ", this is " << VERSION_BUILD;
|
||||
else if (v.GetBuild() > VERSION_BUILD)
|
||||
Alog() << "Module " << modname << " is compiled against a newer revision of Anope " << v.GetBuild() << ", this is " << VERSION_BUILD;
|
||||
Log() << "Module " << modname << " is compiled against a newer revision of Anope " << v.GetBuild() << ", this is " << VERSION_BUILD;
|
||||
else if (v.GetBuild() == VERSION_BUILD)
|
||||
Alog(LOG_DEBUG) << "Module " << modname << " compiled against current version of Anope " << v.GetBuild();
|
||||
Log(LOG_DEBUG) << "Module " << modname << " compiled against current version of Anope " << v.GetBuild();
|
||||
|
||||
if (m->type == PROTOCOL && IsOneOfModuleTypeLoaded(PROTOCOL))
|
||||
{
|
||||
DeleteModule(m);
|
||||
Alog() << "You cannot load two protocol modules";
|
||||
Log() << "You cannot load two protocol modules";
|
||||
return MOD_STOP;
|
||||
}
|
||||
|
||||
@@ -257,7 +257,7 @@ void ModuleManager::DeleteModule(Module *m)
|
||||
const char *err;
|
||||
if (!destroy_func && (err = dlerror()))
|
||||
{
|
||||
Alog() << "No destroy function found, chancing delete...";
|
||||
Log() << "No destroy function found, chancing delete...";
|
||||
delete m; /* we just have to chance they haven't overwrote the delete operator then... */
|
||||
}
|
||||
else
|
||||
@@ -266,7 +266,7 @@ void ModuleManager::DeleteModule(Module *m)
|
||||
if (handle)
|
||||
{
|
||||
if (dlclose(handle))
|
||||
Alog() << dlerror();
|
||||
Log() << dlerror();
|
||||
}
|
||||
|
||||
if (!filename.empty())
|
||||
|
||||
+11
-11
@@ -46,7 +46,7 @@ int protocol_module_init()
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
Alog() << "Loading IRCD Protocol Module: [" << Config->IRCDModule << "]";
|
||||
Log() << "Loading IRCD Protocol Module: [" << Config->IRCDModule << "]";
|
||||
ret = ModuleManager::LoadModule(Config->IRCDModule, NULL);
|
||||
|
||||
if (ret == MOD_ERR_OK)
|
||||
@@ -60,7 +60,7 @@ int protocol_module_init()
|
||||
{
|
||||
if (Config->Numeric.empty())
|
||||
{
|
||||
Alog() << "This IRCd protocol requires a server id to be set in Anope's configuration.";
|
||||
Log() << "This IRCd protocol requires a server id to be set in Anope's configuration.";
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
@@ -73,7 +73,7 @@ void Module::InsertLanguage(int langNumber, int ac, const char **av)
|
||||
{
|
||||
int i;
|
||||
|
||||
Alog(LOG_DEBUG) << this->name << " Adding " << ac << " texts for language " << langNumber;
|
||||
Log(LOG_DEBUG) << this->name << " Adding " << ac << " texts for language " << langNumber;
|
||||
|
||||
if (this->lang[langNumber].argc > 0)
|
||||
this->DeleteLanguage(langNumber);
|
||||
@@ -184,7 +184,7 @@ int Module::AddCommand(BotInfo *bi, Command *c)
|
||||
|
||||
if (it.second != true)
|
||||
{
|
||||
Alog() << "Error creating command " << c->name << ". Command already exists!";
|
||||
Log() << "Error creating command " << c->name << ". Command already exists!";
|
||||
return MOD_ERR_EXISTS;
|
||||
}
|
||||
|
||||
@@ -282,7 +282,7 @@ void Module::NoticeLang(const Anope::string &source, const User *u, int number,
|
||||
va_end(va);
|
||||
}
|
||||
else
|
||||
Alog() << this->name << ": INVALID language string call, language: [" << mlang << "], String [" << number << "]";
|
||||
Log() << this->name << ": INVALID language string call, language: [" << mlang << "], String [" << number << "]";
|
||||
}
|
||||
|
||||
const char *Module::GetLangString(User *u, int number)
|
||||
@@ -306,7 +306,7 @@ const char *Module::GetLangString(User *u, int number)
|
||||
*/
|
||||
else
|
||||
{
|
||||
Alog() << this->name << ": INVALID language string call, language: [" << mlang << "], String [" << number << "]";
|
||||
Log() << this->name << ": INVALID language string call, language: [" << mlang << "], String [" << number << "]";
|
||||
return "";
|
||||
}
|
||||
}
|
||||
@@ -326,13 +326,13 @@ void ModuleRunTimeDirCleanUp()
|
||||
{
|
||||
Anope::string dirbuf = services_dir + "/modules/runtime";
|
||||
|
||||
Alog(LOG_DEBUG) << "Cleaning out Module run time directory (" << dirbuf << ") - this may take a moment please wait";
|
||||
Log(LOG_DEBUG) << "Cleaning out Module run time directory (" << dirbuf << ") - this may take a moment please wait";
|
||||
|
||||
#ifndef _WIN32
|
||||
DIR *dirp = opendir(dirbuf.c_str());
|
||||
if (!dirp)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Cannot open directory (" << dirbuf << ")";
|
||||
Log(LOG_DEBUG) << "Cannot open directory (" << dirbuf << ")";
|
||||
return;
|
||||
}
|
||||
struct dirent *dp;
|
||||
@@ -360,7 +360,7 @@ void ModuleRunTimeDirCleanUp()
|
||||
{
|
||||
Anope::string filebuf = dirbuf + "/" + FileData.cFileName;
|
||||
if (!DeleteFile(filebuf.c_str()))
|
||||
Alog(LOG_DEBUG) << "Error deleting file " << filebuf << " - GetLastError() reports " << dlerror();
|
||||
Log(LOG_DEBUG) << "Error deleting file " << filebuf << " - GetLastError() reports " << dlerror();
|
||||
}
|
||||
if (!FindNextFile(hList, &FileData))
|
||||
{
|
||||
@@ -370,11 +370,11 @@ void ModuleRunTimeDirCleanUp()
|
||||
}
|
||||
}
|
||||
else
|
||||
Alog(LOG_DEBUG) << "Invalid File Handle. GetLastError() reports "<< static_cast<int>(GetLastError());
|
||||
Log(LOG_DEBUG) << "Invalid File Handle. GetLastError() reports "<< static_cast<int>(GetLastError());
|
||||
|
||||
FindClose(hList);
|
||||
#endif
|
||||
Alog(LOG_DEBUG) << "Module run time directory has been cleaned out";
|
||||
Log(LOG_DEBUG) << "Module run time directory has been cleaned out";
|
||||
}
|
||||
|
||||
Version Module::GetVersion() const
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ NickAlias::NickAlias(const Anope::string &nickname, NickCore *nickcore)
|
||||
|
||||
if (ot->GetName().equals_ci(it->second))
|
||||
{
|
||||
Alog() << "Tied oper " << this->nc->display << " to type " << ot->GetName();
|
||||
Log() << "Tied oper " << this->nc->display << " to type " << ot->GetName();
|
||||
this->nc->ot = ot;
|
||||
break;
|
||||
}
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ NickCore::~NickCore()
|
||||
NickCoreList.erase(this->display);
|
||||
|
||||
/* Log .. */
|
||||
Alog() << Config->s_NickServ << ": deleting nickname group " << this->display;
|
||||
Log() << Config->s_NickServ << ": deleting nickname group " << this->display;
|
||||
|
||||
/* Clear access before deleting display name, we want to be able to use the display name in the clear access event */
|
||||
this->ClearAccess();
|
||||
|
||||
+4
-4
@@ -248,7 +248,7 @@ void expire_nicks()
|
||||
User *u = finduser(na->nick);
|
||||
if (u && (na->nc->HasFlag(NI_SECURE) ? u->IsIdentified() : u->IsRecognized()))
|
||||
{
|
||||
Alog(LOG_DEBUG_2) << "NickServ: updating last seen time for " << na->nick;
|
||||
Log(LOG_DEBUG_2) << "NickServ: updating last seen time for " << na->nick;
|
||||
na->last_seen = now;
|
||||
continue;
|
||||
}
|
||||
@@ -259,7 +259,7 @@ void expire_nicks()
|
||||
FOREACH_RESULT(I_OnPreNickExpire, OnPreNickExpire(na));
|
||||
if (MOD_RESULT == EVENT_STOP)
|
||||
continue;
|
||||
Alog() << "Expiring nickname " << na->nick << " (group: " << na->nc->display << ") (e-mail: " << (na->nc->email.empty() ? "none" : na->nc->email) << ")";
|
||||
Log() << "Expiring nickname " << na->nick << " (group: " << na->nc->display << ") (e-mail: " << (na->nc->email.empty() ? "none" : na->nc->email) << ")";
|
||||
FOREACH_MOD(I_OnNickExpire, OnNickExpire(na));
|
||||
delete na;
|
||||
}
|
||||
@@ -277,7 +277,7 @@ void expire_requests()
|
||||
|
||||
if (Config->NSRExpire && now - nr->requested >= Config->NSRExpire)
|
||||
{
|
||||
Alog() << "Request for nick " << nr->nick << " expiring";
|
||||
Log() << "Request for nick " << nr->nick << " expiring";
|
||||
delete nr;
|
||||
}
|
||||
}
|
||||
@@ -356,7 +356,7 @@ void change_core_display(NickCore *nc, const Anope::string &newdisplay)
|
||||
{
|
||||
/* Log ... */
|
||||
FOREACH_MOD(I_OnChangeCoreDisplay, OnChangeCoreDisplay(nc, newdisplay));
|
||||
Alog() << Config->s_NickServ << ": changing " << nc->display << " nickname group display to " << newdisplay;
|
||||
Log() << Config->s_NickServ << ": changing " << nc->display << " nickname group display to " << newdisplay;
|
||||
|
||||
/* Remove the core from the list */
|
||||
NickCoreList.erase(nc->display);
|
||||
|
||||
+12
-12
@@ -76,7 +76,7 @@ void add_ignore(const Anope::string &nick, time_t delta)
|
||||
newign->mask = mask;
|
||||
newign->time = delta ? now + delta : 0;
|
||||
ignore.push_front(newign);
|
||||
Alog(LOG_DEBUG) << "Added new ignore entry for " << mask;
|
||||
Log(LOG_DEBUG) << "Added new ignore entry for " << mask;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,13 +137,13 @@ IgnoreData *get_ignore(const Anope::string &nick)
|
||||
/* Check whether the entry has timed out */
|
||||
if (ign != ign_end && (*ign)->time && (*ign)->time <= now)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Expiring ignore entry " << (*ign)->mask;
|
||||
Log(LOG_DEBUG) << "Expiring ignore entry " << (*ign)->mask;
|
||||
delete *ign;
|
||||
ignore.erase(ign);
|
||||
ign = ign_end = ignore.end();
|
||||
}
|
||||
if (ign != ign_end && debug)
|
||||
Alog(LOG_DEBUG) << "Found ignore entry (" << (*ign)->mask << ") for " << nick;
|
||||
if (ign != ign_end)
|
||||
Log(LOG_DEBUG) << "Found ignore entry (" << (*ign)->mask << ") for " << nick;
|
||||
return ign == ign_end ? NULL : *ign;
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ int delete_ignore(const Anope::string &nick)
|
||||
/* No matching ignore found. */
|
||||
if (ign == ign_end)
|
||||
return 0;
|
||||
Alog(LOG_DEBUG) << "Deleting ignore entry " << (*ign)->mask;
|
||||
Log(LOG_DEBUG) << "Deleting ignore entry " << (*ign)->mask;
|
||||
/* Delete the entry and all references to it. */
|
||||
delete *ign;
|
||||
ignore.erase(ign);
|
||||
@@ -208,7 +208,7 @@ int clear_ignores()
|
||||
return 0;
|
||||
for (std::list<IgnoreData *>::iterator ign = ignore.begin(), ign_end = ignore.end(); ign != ign_end; ++ign)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Deleting ignore entry " << (*ign)->mask;
|
||||
Log(LOG_DEBUG) << "Deleting ignore entry " << (*ign)->mask;
|
||||
delete *ign;
|
||||
}
|
||||
int deleted = ignore.size();
|
||||
@@ -278,7 +278,7 @@ void process(const Anope::string &buffer)
|
||||
const char **av;
|
||||
|
||||
/* If debugging, log the buffer */
|
||||
Alog(LOG_DEBUG) << "Received: " << buffer;
|
||||
Log(LOG_RAWIO) << "Received: " << buffer;
|
||||
|
||||
/* First make a copy of the buffer so we have the original in case we
|
||||
* crash - in that case, we want to know what we crashed on. */
|
||||
@@ -315,17 +315,17 @@ void process(const Anope::string &buffer)
|
||||
if (protocoldebug)
|
||||
{
|
||||
if (*source)
|
||||
Alog() << "Source " << source;
|
||||
Log() << "Source " << source;
|
||||
if (*cmd)
|
||||
Alog() << "Token " << cmd;
|
||||
Log() << "Token " << cmd;
|
||||
if (ac)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ac; ++i)
|
||||
Alog() << "av[" << i << "] = " << av[i];
|
||||
Log() << "av[" << i << "] = " << av[i];
|
||||
}
|
||||
else
|
||||
Alog() << "av[0] = NULL";
|
||||
Log() << "av[0] = NULL";
|
||||
}
|
||||
|
||||
/* Do something with the message. */
|
||||
@@ -344,7 +344,7 @@ void process(const Anope::string &buffer)
|
||||
}
|
||||
}
|
||||
else
|
||||
Alog(LOG_DEBUG) << "unknown message from server (" << buffer << ")";
|
||||
Log(LOG_DEBUG) << "unknown message from server (" << buffer << ")";
|
||||
|
||||
/* Free argument list we created */
|
||||
free(av);
|
||||
|
||||
+6
-4
@@ -24,7 +24,9 @@ ChannelInfo::ChannelInfo(const Anope::string &chname)
|
||||
this->founder = this->successor = NULL;
|
||||
this->last_topic_time = 0;
|
||||
this->levels = NULL;
|
||||
this->c = NULL;
|
||||
this->c = findchan(chname);
|
||||
if (this->c)
|
||||
this->c->ci = this;
|
||||
this->capsmin = this->capspercent = 0;
|
||||
this->floodlines = this->floodsecs = 0;
|
||||
this->repeattimes = 0;
|
||||
@@ -68,7 +70,7 @@ ChannelInfo::~ChannelInfo()
|
||||
|
||||
FOREACH_MOD(I_OnDelChan, OnDelChan(this));
|
||||
|
||||
Alog(LOG_DEBUG) << "Deleting channel " << this->name;
|
||||
Log(LOG_DEBUG) << "Deleting channel " << this->name;
|
||||
|
||||
if (this->c)
|
||||
{
|
||||
@@ -575,7 +577,7 @@ bool ChannelInfo::CheckKick(User *user)
|
||||
|
||||
if ((autokick->HasFlag(AK_ISNICK) && autokick->nc == nc) || (!autokick->HasFlag(AK_ISNICK) && match_usermask(autokick->mask, user)))
|
||||
{
|
||||
Alog(LOG_DEBUG_2) << user->nick << " matched akick " << (autokick->HasFlag(AK_ISNICK) ? autokick->nc->display : autokick->mask);
|
||||
Log(LOG_DEBUG_2) << user->nick << " matched akick " << (autokick->HasFlag(AK_ISNICK) ? autokick->nc->display : autokick->mask);
|
||||
autokick->last_used = time(NULL);
|
||||
if (autokick->HasFlag(AK_ISNICK))
|
||||
get_idealban(this, user, mask);
|
||||
@@ -598,7 +600,7 @@ bool ChannelInfo::CheckKick(User *user)
|
||||
if (!do_kick)
|
||||
return false;
|
||||
|
||||
Alog(LOG_DEBUG) << "Autokicking "<< user->GetMask() << " from " << this->name;
|
||||
Log(LOG_DEBUG) << "Autokicking "<< user->GetMask() << " from " << this->name;
|
||||
|
||||
/* If the channel isn't syncing and doesn't have any users, join ChanServ
|
||||
* Note that the user AND POSSIBLY the botserv bot exist here
|
||||
|
||||
+4
-4
@@ -33,21 +33,21 @@ void send_cmd(const Anope::string &source, const char *fmt, ...)
|
||||
if (!UplinkSock)
|
||||
{
|
||||
if (!source.empty())
|
||||
Alog(LOG_DEBUG) << "Attemtped to send \"" << source << " " << buf << "\" with UplinkSock NULL";
|
||||
Log(LOG_DEBUG) << "Attemtped to send \"" << source << " " << buf << "\" with UplinkSock NULL";
|
||||
else
|
||||
Alog(LOG_DEBUG) << "Attemtped to send \"" << buf << "\" with UplinkSock NULL";
|
||||
Log(LOG_DEBUG) << "Attemtped to send \"" << buf << "\" with UplinkSock NULL";
|
||||
return;
|
||||
}
|
||||
|
||||
if (!source.empty())
|
||||
{
|
||||
UplinkSock->Write(":%s %s", source.c_str(), buf);
|
||||
Alog(LOG_DEBUG) << "Sent: :" << source << " " << buf;
|
||||
Log(LOG_RAWIO) << "Sent: :" << source << " " << buf;
|
||||
}
|
||||
else
|
||||
{
|
||||
UplinkSock->Write("%s", buf);
|
||||
Alog(LOG_DEBUG) << "Sent: "<< buf;
|
||||
Log(LOG_RAWIO) << "Sent: "<< buf;
|
||||
}
|
||||
|
||||
va_end(args);
|
||||
|
||||
+12
-18
@@ -60,7 +60,7 @@ Server::Server(Server *uplink, const Anope::string &name, unsigned hops, const A
|
||||
{
|
||||
SetFlag(SERVER_SYNCING);
|
||||
|
||||
Alog(LOG_DEBUG) << "Creating " << this->GetName() << " (" << this->GetSID() << ") uplinked to " << (this->UplinkServer ? this->UplinkServer->GetName() : "no uplink");
|
||||
Log(this, "connect") << "uplinked to " << (this->UplinkServer ? this->UplinkServer->GetName() : "no uplink") << " connected to the network";
|
||||
|
||||
/* Add this server to our uplinks leaf list */
|
||||
if (this->UplinkServer)
|
||||
@@ -72,10 +72,6 @@ Server::Server(Server *uplink, const Anope::string &name, unsigned hops, const A
|
||||
{
|
||||
/* Bring in our pseudo-clients */
|
||||
introduce_user("");
|
||||
|
||||
/* And some IRCds needs Global joined in the logchan */
|
||||
if (LogChan && ircd->join2msg)
|
||||
Global->Join(Config->LogChannel);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -84,7 +80,7 @@ Server::Server(Server *uplink, const Anope::string &name, unsigned hops, const A
|
||||
*/
|
||||
Server::~Server()
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Deleting server " << this->GetName() << " (" << this->GetSID() << ") uplinked to " << (this->UplinkServer ? this->UplinkServer->GetName() : "no uplink");
|
||||
Log(this, "quit") << "quit from " << (this->UplinkServer ? this->UplinkServer->GetName() : "no uplink") << " for " << this->QReason;
|
||||
|
||||
if (Capab.HasFlag(CAPAB_NOQUIT) || Capab.HasFlag(CAPAB_QS))
|
||||
{
|
||||
@@ -108,7 +104,7 @@ Server::~Server()
|
||||
}
|
||||
}
|
||||
|
||||
Alog(LOG_DEBUG) << "Finished removing all users for " << this->GetName();
|
||||
Log(LOG_DEBUG) << "Finished removing all users for " << this->GetName();
|
||||
}
|
||||
|
||||
if (this->UplinkServer)
|
||||
@@ -190,7 +186,7 @@ void Server::AddLink(Server *s)
|
||||
{
|
||||
this->Links.push_back(s);
|
||||
|
||||
Alog() << "Server " << s->GetName() << " introduced from " << this->GetName();
|
||||
Log(this, "connect") << "introduced " << s->GetName();
|
||||
}
|
||||
|
||||
/** Delinks a server from this server
|
||||
@@ -210,7 +206,7 @@ void Server::DelLink(Server *s)
|
||||
}
|
||||
}
|
||||
|
||||
Alog() << "Server " << s->GetName() << " quit from " << this->GetName();
|
||||
Log(this, "quit") << "quit " << s->GetName();
|
||||
}
|
||||
|
||||
/** Remov all links from this server
|
||||
@@ -245,7 +241,7 @@ void Server::Sync(bool SyncLinks)
|
||||
Me->UnsetFlag(SERVER_SYNCING);
|
||||
}
|
||||
|
||||
Alog() << "Server " << this->GetName() << " is done syncing";
|
||||
Log(this, "sync") << "is done syncing";
|
||||
|
||||
FOREACH_MOD(I_OnServerSync, OnServerSync(this));
|
||||
|
||||
@@ -285,7 +281,7 @@ bool Server::IsULined() const
|
||||
*/
|
||||
Server *Server::Find(const Anope::string &name, Server *s)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Server::Find called for " << name;
|
||||
Log(LOG_DEBUG) << "Server::Find called for " << name;
|
||||
|
||||
if (!s)
|
||||
s = Me;
|
||||
@@ -300,7 +296,7 @@ Server *Server::Find(const Anope::string &name, Server *s)
|
||||
|
||||
if (serv->GetName().equals_cs(name) || serv->GetSID().equals_cs(name))
|
||||
return serv;
|
||||
Alog(LOG_DEBUG) << "Server::Find checking " << serv->GetName() << " server tree for " << name;
|
||||
Log(LOG_DEBUG) << "Server::Find checking " << serv->GetName() << " server tree for " << name;
|
||||
Server *server = Server::Find(name, serv);
|
||||
if (server)
|
||||
return server;
|
||||
@@ -324,9 +320,9 @@ Server *Server::Find(const Anope::string &name, Server *s)
|
||||
void do_server(const Anope::string &source, const Anope::string &servername, unsigned int hops, const Anope::string &descript, const Anope::string &numeric)
|
||||
{
|
||||
if (source.empty())
|
||||
Alog(LOG_DEBUG) << "Server " << servername << " introduced";
|
||||
Log(LOG_DEBUG) << "Server " << servername << " introduced";
|
||||
else
|
||||
Alog(LOG_DEBUG) << "Server introduced (" << servername << ")" << " from " << source;
|
||||
Log(LOG_DEBUG) << "Server introduced (" << servername << ")" << " from " << source;
|
||||
|
||||
Server *s = NULL;
|
||||
|
||||
@@ -366,7 +362,7 @@ void do_squit(const Anope::string &source, int ac, const char **av)
|
||||
|
||||
if (!s)
|
||||
{
|
||||
Alog() << "SQUIT for nonexistent server (" << av[0] << ")!!";
|
||||
Log() << "SQUIT for nonexistent server (" << av[0] << ")!!";
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -386,7 +382,7 @@ void do_squit(const Anope::string &source, int ac, const char **av)
|
||||
|
||||
if (s->GetUplink() == Me && Capab.HasFlag(CAPAB_UNCONNECT))
|
||||
{
|
||||
Alog(LOG_DEBUG) << "Sending UNCONNECT SQUIT for " << s->GetName();
|
||||
Log(LOG_DEBUG) << "Sending UNCONNECT SQUIT for " << s->GetName();
|
||||
/* need to fix */
|
||||
ircdproto->SendSquit(s->GetName(), buf);
|
||||
}
|
||||
@@ -459,7 +455,6 @@ const char *ts6_uid_retrieve()
|
||||
{
|
||||
if (!ircd->ts6)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "ts6_uid_retrieve(): TS6 not supported on this ircd";
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -525,7 +520,6 @@ const char *ts6_sid_retrieve()
|
||||
{
|
||||
if (!ircd->ts6)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "ts6_sid_retrieve(): TS6 not supported on this ircd";
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
+6
-6
@@ -168,17 +168,17 @@ void del_session(const Anope::string &host)
|
||||
{
|
||||
if (!Config->LimitSessions)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "del_session called when LimitSessions is disabled";
|
||||
Log(LOG_DEBUG) << "del_session called when LimitSessions is disabled";
|
||||
return;
|
||||
}
|
||||
|
||||
if (host.empty())
|
||||
{
|
||||
Alog(LOG_DEBUG) << "del_session called with NULL values";
|
||||
Log(LOG_DEBUG) << "del_session called with NULL values";
|
||||
return;
|
||||
}
|
||||
|
||||
Alog(LOG_DEBUG_2) << "del_session() called";
|
||||
Log(LOG_DEBUG_2) << "del_session() called";
|
||||
|
||||
Session *session = findsession(host);
|
||||
|
||||
@@ -187,7 +187,7 @@ void del_session(const Anope::string &host)
|
||||
if (debug)
|
||||
{
|
||||
ircdproto->SendGlobops(OperServ, "WARNING: Tried to delete non-existant session: \2%s", host.c_str());
|
||||
Alog(LOG_DEBUG) << "session: Tried to delete non-existant session: " << host;
|
||||
Log() << "session: Tried to delete non-existant session: " << host;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -200,11 +200,11 @@ void del_session(const Anope::string &host)
|
||||
|
||||
SessionList.erase(session->host);
|
||||
|
||||
Alog(LOG_DEBUG_2) << "del_session(): free session structure";
|
||||
Log(LOG_DEBUG_2) << "del_session(): free session structure";
|
||||
|
||||
delete session;
|
||||
|
||||
Alog(LOG_DEBUG_2) << "del_session() done";
|
||||
Log(LOG_DEBUG_2) << "del_session() done";
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ SocketEngineBase::SocketEngineBase()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if (WSAStartup(MAKEWORD(2, 0), &wsa))
|
||||
Alog() << "Failed to initialize WinSock library";
|
||||
Log() << "Failed to initialize WinSock library";
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
+39
-71
@@ -26,10 +26,10 @@ time_t maxusertime;
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
User::User(const Anope::string &snick, const Anope::string &suid)
|
||||
User::User(const Anope::string &snick, const Anope::string &sident, const Anope::string &shost, const Anope::string &suid)
|
||||
{
|
||||
if (snick.empty())
|
||||
throw CoreException("what the craq, empty nick passed to constructor");
|
||||
if (snick.empty() || sident.empty() || shost.empty())
|
||||
throw CoreException("Bad args passed to User::User");
|
||||
|
||||
// XXX: we should also duplicate-check here.
|
||||
|
||||
@@ -40,7 +40,10 @@ User::User(const Anope::string &snick, const Anope::string &suid)
|
||||
OnAccess = false;
|
||||
|
||||
this->nick = snick;
|
||||
this->ident = sident;
|
||||
this->host = shost;
|
||||
this->uid = suid;
|
||||
this->isSuperAdmin = 0;
|
||||
|
||||
UserListByNick[snick] = this;
|
||||
if (!suid.empty())
|
||||
@@ -54,11 +57,8 @@ User::User(const Anope::string &snick, const Anope::string &suid)
|
||||
{
|
||||
maxusercnt = usercnt;
|
||||
maxusertime = time(NULL);
|
||||
if (Config->LogMaxUsers)
|
||||
Alog() << "user: New maximum user count: "<< maxusercnt;
|
||||
Log(this, "maxusers") << "connected - new maximum user count: " << maxusercnt;
|
||||
}
|
||||
|
||||
this->isSuperAdmin = 0; /* always set SuperAdmin to 0 for new users */
|
||||
}
|
||||
|
||||
void User::SetNewNick(const Anope::string &newnick)
|
||||
@@ -67,7 +67,7 @@ void User::SetNewNick(const Anope::string &newnick)
|
||||
if (newnick.empty())
|
||||
throw CoreException("User::SetNewNick() got a bad argument");
|
||||
|
||||
Alog(LOG_DEBUG) << this->nick << " changed nick to " << newnick;
|
||||
Log(this, "nick") << "changed nick to " << newnick;
|
||||
|
||||
UserListByNick.erase(this->nick);
|
||||
|
||||
@@ -88,7 +88,7 @@ void User::SetDisplayedHost(const Anope::string &shost)
|
||||
|
||||
this->vhost = shost;
|
||||
|
||||
Alog(LOG_DEBUG) << this->nick << " changed vhost to " << shost;
|
||||
Log(this, "host") << "changed vhost to " << shost;
|
||||
|
||||
this->UpdateHost();
|
||||
}
|
||||
@@ -116,7 +116,7 @@ void User::SetCloakedHost(const Anope::string &newhost)
|
||||
|
||||
chost = newhost;
|
||||
|
||||
Alog(LOG_DEBUG) << this->nick << " changed cloaked host to " << newhost;
|
||||
Log(this, "host") << "changed cloaked host to " << newhost;
|
||||
|
||||
this->UpdateHost();
|
||||
}
|
||||
@@ -138,7 +138,7 @@ void User::SetVIdent(const Anope::string &sident)
|
||||
{
|
||||
this->vident = sident;
|
||||
|
||||
Alog(LOG_DEBUG) << this->nick << " changed vident to " << sident;
|
||||
Log(this, "ident") << "changed vident to " << sident;
|
||||
|
||||
this->UpdateHost();
|
||||
}
|
||||
@@ -155,7 +155,7 @@ void User::SetIdent(const Anope::string &sident)
|
||||
{
|
||||
this->ident = sident;
|
||||
|
||||
Alog(LOG_DEBUG) << this->nick << " changed real ident to " << sident;
|
||||
Log(this, "ident") << "changed real ident to " << sident;
|
||||
|
||||
this->UpdateHost();
|
||||
}
|
||||
@@ -181,22 +181,17 @@ void User::SetRealname(const Anope::string &srealname)
|
||||
if (na && (this->IsIdentified(true) || this->IsRecognized(true)))
|
||||
na->last_realname = srealname;
|
||||
|
||||
Alog(LOG_DEBUG) << this->nick << " changed realname to " << srealname;
|
||||
Log(this, "realname") << "changed realname to " << srealname;
|
||||
}
|
||||
|
||||
User::~User()
|
||||
{
|
||||
Alog(LOG_DEBUG_2) << "User::~User() called";
|
||||
Log(LOG_DEBUG_2) << "User::~User() called";
|
||||
|
||||
Log(this, "disconnect") << " (" << this->realname << ") " << "disconnected from the network (" << this->server->GetName() << ")";
|
||||
|
||||
this->Logout();
|
||||
|
||||
if (Config->LogUsers)
|
||||
{
|
||||
Anope::string srealname = normalizeBuffer(this->realname);
|
||||
|
||||
Alog() << "LOGUSERS: " << this->nick << " (" << this->GetIdent() << "@" << this->host << (ircd->vhost ? " => " : "") << (ircd->vhost ? this->GetDisplayedHost() : "") << ") (" << srealname << ") left the network (" << this->server->GetName() << ").";
|
||||
}
|
||||
|
||||
FOREACH_MOD(I_OnUserLogoff, OnUserLogoff(this));
|
||||
|
||||
--usercnt;
|
||||
@@ -218,7 +213,7 @@ User::~User()
|
||||
if (na)
|
||||
na->OnCancel(this);
|
||||
|
||||
Alog(LOG_DEBUG_2) << "User::~User() done";
|
||||
Log(LOG_DEBUG_2) << "User::~User() done";
|
||||
}
|
||||
|
||||
void User::SendMessage(const Anope::string &source, const char *fmt, ...) const
|
||||
@@ -659,20 +654,13 @@ User *do_nick(const Anope::string &source, const Anope::string &nick, const Anop
|
||||
char ipbuf[16];
|
||||
struct in_addr addr;
|
||||
|
||||
if (ircd->nickvhost)
|
||||
if (ircd->nickvhost && !vhost2.empty() && vhost2.equals_cs("*"))
|
||||
{
|
||||
if (!vhost2.empty())
|
||||
{
|
||||
if (vhost2.equals_cs("*"))
|
||||
{
|
||||
vhost2.clear();
|
||||
Alog(LOG_DEBUG) << "new user with no vhost in NICK command: " << nick;
|
||||
}
|
||||
}
|
||||
vhost2.clear();
|
||||
}
|
||||
|
||||
/* This is a new user; create a User structure for it. */
|
||||
Alog(LOG_DEBUG) << "new user: " << nick;
|
||||
Log(LOG_DEBUG) << "new user: " << nick;
|
||||
|
||||
if (ircd->nickip)
|
||||
{
|
||||
@@ -682,31 +670,8 @@ User *do_nick(const Anope::string &source, const Anope::string &nick, const Anop
|
||||
|
||||
Server *serv = Server::Find(server);
|
||||
|
||||
if (Config->LogUsers)
|
||||
{
|
||||
/**
|
||||
* Ugly swap routine for Flop's bug :) XXX
|
||||
**/
|
||||
Anope::string logrealname = realname;
|
||||
if (!logrealname.empty())
|
||||
{
|
||||
size_t tmp;
|
||||
while ((tmp = logrealname.find('%')) != Anope::string::npos)
|
||||
logrealname[tmp] = '-';
|
||||
}
|
||||
logrealname = normalizeBuffer(logrealname);
|
||||
|
||||
/**
|
||||
* End of ugly swap
|
||||
**/
|
||||
Alog() << "LOGUSERS: " << nick << " (" << username << "@" << host << (ircd->nickvhost && !vhost2.empty() ? " => " : "") << (ircd->nickvhost && !vhost2.empty() ? vhost2 : "") << ") (" << logrealname << ") "
|
||||
<< (ircd->nickip ? "[" : "") << (ircd->nickip ? ipbuf : "") << (ircd->nickip ? "]" : "") << " connected to the network (" << serv->GetName() << ").";
|
||||
}
|
||||
|
||||
/* Allocate User structure and fill it in. */
|
||||
user = new User(nick, !uid.empty() ? uid : "");
|
||||
user->SetIdent(username);
|
||||
user->host = host;
|
||||
user = new User(nick, username, host, uid);
|
||||
user->server = serv;
|
||||
user->realname = realname;
|
||||
user->timestamp = ts;
|
||||
@@ -721,6 +686,8 @@ User *do_nick(const Anope::string &source, const Anope::string &nick, const Anop
|
||||
else
|
||||
user->hostip = "";
|
||||
|
||||
Log(user, "connect") << (ircd->nickvhost && !vhost2.empty() ? Anope::string("(") + vhost2 + ")" : "") << ") (" << user->realname << ") " << (ircd->nickip ? Anope::string("[") + ipbuf + "] " : "") << "connected to the network (" << serv->GetName() << ")";
|
||||
|
||||
EventReturn MOD_RESULT;
|
||||
FOREACH_RESULT(I_OnPreUserConnect, OnPreUserConnect(user));
|
||||
if (MOD_RESULT == EVENT_STOP)
|
||||
@@ -744,18 +711,12 @@ User *do_nick(const Anope::string &source, const Anope::string &nick, const Anop
|
||||
|
||||
if (!user)
|
||||
{
|
||||
Alog() << "user: NICK from nonexistent nick " << source;
|
||||
Log() << "user: NICK from nonexistent nick " << source;
|
||||
return NULL;
|
||||
}
|
||||
user->isSuperAdmin = 0; /* Dont let people nick change and stay SuperAdmins */
|
||||
Alog(LOG_DEBUG) << source << " changes nick to " << nick;
|
||||
|
||||
if (Config->LogUsers)
|
||||
{
|
||||
Anope::string logrealname = normalizeBuffer(user->realname);
|
||||
Alog() << "LOGUSERS: " << user->nick << " (" << user->GetIdent() << "@" << user->host << (ircd->vhost ? " => " : "") << (ircd->vhost ? user->GetDisplayedHost() : "") << ") (" << logrealname << ") changed nick to "
|
||||
<< nick << " (" << user->server->GetName() << ").";
|
||||
}
|
||||
Log(user, "nick") << " " << (ircd->vhost ? " => " : "") << (ircd->vhost ? user->GetDisplayedHost() : "") << ") (" << user->realname << ") changed nick to " << nick;
|
||||
|
||||
user->timestamp = ts;
|
||||
|
||||
@@ -793,7 +754,7 @@ User *do_nick(const Anope::string &source, const Anope::string &nick, const Anop
|
||||
user->UpdateHost();
|
||||
do_on_id(user);
|
||||
ircdproto->SetAutoIdentificationToken(user);
|
||||
Alog() << Config->s_NickServ << ": " << user->GetMask() << " automatically identified for group " << user->Account()->display;
|
||||
Log() << Config->s_NickServ << ": " << user->GetMask() << " automatically identified for group " << user->Account()->display;
|
||||
}
|
||||
|
||||
if (ircd->sqline)
|
||||
@@ -819,7 +780,7 @@ void do_umode(const Anope::string &source, int ac, const char **av)
|
||||
User *user = finduser(av[0]);
|
||||
if (!user)
|
||||
{
|
||||
Alog() << "user: MODE "<< av[1] << " for nonexistent nick "<< av[0] << ":" << merge_args(ac, av);
|
||||
Log() << "user: MODE "<< av[1] << " for nonexistent nick "<< av[0] << ":" << merge_args(ac, av);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -837,10 +798,11 @@ void do_quit(const Anope::string &source, int ac, const char **av)
|
||||
User *user = finduser(source);
|
||||
if (!user)
|
||||
{
|
||||
Alog() << "user: QUIT from nonexistent user " << source << ":" << merge_args(ac, av);
|
||||
Log() << "user: QUIT from nonexistent user " << source << ":" << merge_args(ac, av);
|
||||
return;
|
||||
}
|
||||
Alog(LOG_DEBUG) << source << " quits";
|
||||
|
||||
Log(user, "quit") << "for " << (*av[0] ? av[0] : "no reason");
|
||||
|
||||
NickAlias *na = findnick(user->nick);
|
||||
if (na && !na->HasFlag(NS_FORBIDDEN) && !na->nc->HasFlag(NI_SUSPENDED) && (user->IsRecognized() || user->IsIdentified(true)))
|
||||
@@ -864,10 +826,11 @@ void do_kill(const Anope::string &nick, const Anope::string &msg)
|
||||
User *user = finduser(nick);
|
||||
if (!user)
|
||||
{
|
||||
Alog(LOG_DEBUG) << "KILL of nonexistent nick: " << nick;
|
||||
Log() << "KILL of nonexistent nick: " << nick;
|
||||
return;
|
||||
}
|
||||
Alog(LOG_DEBUG) << nick << " killed";
|
||||
|
||||
Log(user, "killed") << "for " << msg;
|
||||
|
||||
NickAlias *na = findnick(user->nick);
|
||||
if (na && !na->HasFlag(NS_FORBIDDEN) && !na->nc->HasFlag(NI_SUSPENDED) && (user->IsRecognized() || user->IsIdentified(true)))
|
||||
@@ -997,7 +960,7 @@ void UserSetInternalModes(User *user, int ac, const char **av)
|
||||
if (!user || !modes)
|
||||
return;
|
||||
|
||||
Alog(LOG_DEBUG) << "Changing user modes for " << user->nick << " to " << merge_args(ac, av);
|
||||
Log(user, "mode") << "changes modes to " << merge_args(ac, av);
|
||||
|
||||
for (; *modes; ++modes)
|
||||
{
|
||||
@@ -1042,9 +1005,14 @@ void UserSetInternalModes(User *user, int ac, const char **av)
|
||||
++opcnt;
|
||||
if (Config->WallOper)
|
||||
ircdproto->SendGlobops(OperServ, "\2%s\2 is now an IRC operator.", user->nick.c_str());
|
||||
Log(OperServ) << user->nick << " is now an IRC operator";
|
||||
}
|
||||
else
|
||||
{
|
||||
--opcnt;
|
||||
|
||||
Log(OperServ) << user->nick << " is no longer an IRC operator";
|
||||
}
|
||||
break;
|
||||
case UMODE_REGISTERED:
|
||||
if (add && !user->IsIdentified())
|
||||
|
||||
Reference in New Issue
Block a user