summaryrefslogtreecommitdiff
path: root/src/nickserv.c
diff options
context:
space:
mode:
authorAdam <Adam@Anope.org>2010-05-25 00:57:25 -0500
committerAdam <Adam@anope.org>2010-06-18 21:04:07 -0400
commit4a2b9ebcf38d6c0a2860b966421b3af125438488 (patch)
treee4af4e59fd29352138db0fb0ff614d50233850b8 /src/nickserv.c
parent2fba686904e6f78ebab35df171c5757afeebf05d (diff)
Renamed all of source files from .c to .cpp
Diffstat (limited to 'src/nickserv.c')
-rw-r--r--src/nickserv.c513
1 files changed, 0 insertions, 513 deletions
diff --git a/src/nickserv.c b/src/nickserv.c
deleted file mode 100644
index c3b3d31c6..000000000
--- a/src/nickserv.c
+++ /dev/null
@@ -1,513 +0,0 @@
-
-/* NickServ functions.
- *
- * (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"
-#include "modules.h"
-#include "language.h"
-
-nickalias_map NickAliasList;
-nickcore_map NickCoreList;
-nickrequest_map NickRequestList;
-
-static std::map<std::string, NickServCollide *> NickServCollides;
-static std::map<std::string, NickServRelease *> NickServReleases;
-
-NickServCollide::NickServCollide(const std::string &_nick, time_t delay) : Timer(delay), nick(_nick)
-{
- /* Erase the current collide and use the new one */
- std::map<std::string, NickServCollide *>::iterator nit = NickServCollides.find(nick);
- if (nit != NickServCollides.end())
- {
- delete nit->second;
- }
-
- NickServCollides.insert(std::make_pair(nick, this));
-}
-
-NickServCollide::~NickServCollide()
-{
- NickServCollides.erase(nick);
-}
-
-void NickServCollide::Tick(time_t ctime)
-{
- /* If they identified or don't exist anymore, don't kill them. */
- User *u = finduser(nick);
- NickAlias *na = findnick(nick);
- if (!u || !na || u->Account() == na->nc || u->my_signon > this->GetSetTime())
- return;
-
- u->Collide(na);
-}
-
-NickServRelease::NickServRelease(const std::string &_nick, const std::string &_uid, time_t delay) : Timer(delay), nick(_nick), uid(_uid)
-{
- /* Erase the current release timer and use the new one */
- std::map<std::string, NickServRelease *>::iterator nit = NickServReleases.find(nick);
- if (nit != NickServReleases.end())
- {
- delete nit->second;
- }
-
- NickServReleases.insert(std::make_pair(nick, this));
-}
-
-NickServRelease::~NickServRelease()
-{
- NickServReleases.erase(nick);
-}
-
-void NickServRelease::Tick(time_t ctime)
-{
- NickAlias *na = findnick(nick);
-
- if (na)
- na->Release();
-}
-
-/*************************************************************************/
-/* *INDENT-OFF* */
-void moduleAddNickServCmds()
-{
- ModuleManager::LoadModuleList(Config.NickServCoreModules);
-}
-/* *INDENT-ON* */
-/*************************************************************************/
-
-/* Return information on memory use. Assumes pointers are valid. */
-
-void get_aliases_stats(long *nrec, long *memuse)
-{
- long count = 0, mem = 0;
-
- for (nickalias_map::const_iterator it = NickAliasList.begin(); it != NickAliasList.end(); ++it)
- {
- NickAlias *na = it->second;
-
- count++;
- mem += sizeof(*na);
- if (na->nick)
- mem += strlen(na->nick) + 1;
- if (na->last_usermask)
- mem += strlen(na->last_usermask) + 1;
- if (na->last_realname)
- mem += strlen(na->last_realname) + 1;
- if (na->last_quit)
- mem += strlen(na->last_quit) + 1;
- }
- *nrec = count;
- *memuse = mem;
-}
-
-/*************************************************************************/
-
-/* Return information on memory use. Assumes pointers are valid. */
-
-void get_core_stats(long *nrec, long *memuse)
-{
- long count = 0, mem = 0;
- unsigned j;
-
- for (nickcore_map::const_iterator it = NickCoreList.begin(); it != NickCoreList.end(); ++it)
- {
- NickCore *nc = it->second;
-
- count++;
- mem += sizeof(*nc);
-
- if (nc->display)
- mem += strlen(nc->display) + 1;
- if (!nc->pass.empty())
- mem += (nc->pass.capacity() + (2 * sizeof(size_t)) + (2 * sizeof(void*)));
- if (nc->url)
- mem += strlen(nc->url) + 1;
- if (nc->email)
- mem += strlen(nc->email) + 1;
- if (nc->greet)
- mem += strlen(nc->greet) + 1;
-
- mem += sizeof(std::string) * nc->access.size();
- for (j = 0; j < nc->access.size(); ++j)
- mem += nc->GetAccess(j).length() + 1;
-
- mem += nc->memos.memos.size() * sizeof(Memo);
- for (j = 0; j < nc->memos.memos.size(); j++)
- {
- if (nc->memos.memos[j]->text)
- mem += strlen(nc->memos.memos[j]->text) + 1;
- }
-
- mem += sizeof(NickAlias *) * nc->aliases.size();
- }
- *nrec = count;
- *memuse = mem;
-}
-
-/*************************************************************************/
-/*************************************************************************/
-
-/* NickServ initialization. */
-
-void ns_init()
-{
- moduleAddNickServCmds();
-}
-
-/*************************************************************************/
-
-/* Main NickServ routine. */
-
-void nickserv(User * u, char *buf)
-{
- const char *cmd, *s;
-
- cmd = strtok(buf, " ");
-
- if (!cmd)
- {
- return;
- }
- else if (stricmp(cmd, "\1PING") == 0)
- {
- if (!(s = strtok(NULL, "")))
- {
- s = "";
- }
- ircdproto->SendCTCP(NickServ, u->nick.c_str(), "PING %s", s);
- }
- else
- {
- mod_run_cmd(NickServ, u, cmd);
- }
-
-}
-
-/*************************************************************************/
-
-/* Check whether a user is on the access list of the nick they're using If
- * not, send warnings as appropriate. If so (and not NI_SECURE), update
- * last seen info.
- * Return 1 if the user is valid and recognized, 0 otherwise (note
- * that this means an NI_SECURE nick will return 0 from here).
- * If the user's nick is not registered, 0 is returned.
- */
-
-int validate_user(User * u)
-{
- NickAlias *na;
- NickRequest *nr;
-
- if ((nr = findrequestnick(u->nick.c_str())))
- {
- notice_lang(Config.s_NickServ, u, NICK_IS_PREREG);
- return 0;
- }
-
- if (!(na = findnick(u->nick)))
- return 0;
-
- if (na->HasFlag(NS_FORBIDDEN))
- {
- notice_lang(Config.s_NickServ, u, NICK_MAY_NOT_BE_USED);
- u->Collide(na);
- return 0;
- }
-
- if (na->nc->HasFlag(NI_SUSPENDED))
- {
- notice_lang(Config.s_NickServ, u, NICK_X_SUSPENDED, u->nick.c_str());
- u->Collide(na);
- return 0;
- }
-
- if (!na->nc->HasFlag(NI_SECURE) && u->IsRecognized())
- {
- na->last_seen = time(NULL);
- if (na->last_usermask)
- delete [] na->last_usermask;
- std::string last_usermask = u->GetIdent() + "@" + u->GetDisplayedHost();
- na->last_usermask = sstrdup(last_usermask.c_str());
- if (na->last_realname)
- delete [] na->last_realname;
- na->last_realname = sstrdup(u->realname);
-
- check_memos(u);
-
- return 1;
- }
-
- if (u->IsRecognized() || !na->nc->HasFlag(NI_KILL_IMMED))
- {
- if (na->nc->HasFlag(NI_SECURE))
- notice_lang(Config.s_NickServ, u, NICK_IS_SECURE, Config.s_NickServ);
- else
- notice_lang(Config.s_NickServ, u, NICK_IS_REGISTERED, Config.s_NickServ);
- }
-
- if (na->nc->HasFlag(NI_KILLPROTECT) && !u->IsRecognized())
- {
- if (na->nc->HasFlag(NI_KILL_IMMED))
- {
- notice_lang(Config.s_NickServ, u, FORCENICKCHANGE_NOW);
- u->Collide(na);
- }
- else if (na->nc->HasFlag(NI_KILL_QUICK))
- {
- notice_lang(Config.s_NickServ, u, FORCENICKCHANGE_IN_20_SECONDS);
- new NickServCollide(na->nick, 20);
- }
- else
- {
- notice_lang(Config.s_NickServ, u, FORCENICKCHANGE_IN_1_MINUTE);
- new NickServCollide(na->nick, 60);
- }
- }
-
- return 0;
-}
-
-/*************************************************************************/
-
-/* Remove all nicks which have expired. Also update last-seen time for all
- * nicks.
- */
-
-void expire_nicks()
-{
- time_t now = time(NULL);
-
- for (nickalias_map::const_iterator it = NickAliasList.begin(); it != NickAliasList.end();)
- {
- NickAlias *na = it->second;
- ++it;
-
- 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;
- na->last_seen = now;
- continue;
- }
-
- if (Config.NSExpire && now - na->last_seen >= Config.NSExpire
- && !na->HasFlag(NS_FORBIDDEN) && !na->HasFlag(NS_NO_EXPIRE)
- && !na->nc->HasFlag(NI_SUSPENDED))
- {
- EventReturn MOD_RESULT;
- 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 ? na->nc->email : "none") << ")";
- FOREACH_MOD(I_OnNickExpire, OnNickExpire(na));
- delete na;
- }
- }
-}
-
-void expire_requests()
-{
- time_t now = time(NULL);
-
- for (nickrequest_map::const_iterator it = NickRequestList.begin(); it != NickRequestList.end(); ++it)
- {
- NickRequest *nr = it->second;
-
- if (Config.NSRExpire && now - nr->requested >= Config.NSRExpire)
- {
- Alog() << "Request for nick " << nr->nick << " expiring";
- delete nr;
- }
- }
-}
-
-/*************************************************************************/
-
-NickRequest *findrequestnick(const char *nick)
-{
- return findrequestnick(ci::string(nick));
-}
-
-NickRequest *findrequestnick(const std::string &nick)
-{
- return findrequestnick(ci::string(nick.c_str()));
-}
-
-NickRequest *findrequestnick(const ci::string &nick)
-{
- nickrequest_map::const_iterator it = NickRequestList.find(nick);
-
- if (it != NickRequestList.end())
- return it->second;
- return NULL;
-}
-
-NickAlias *findnick(const char *nick)
-{
- return findnick(ci::string(nick));
-}
-
-NickAlias *findnick(const std::string &nick)
-{
- return findnick(ci::string(nick.c_str()));
-}
-
-NickAlias *findnick(const ci::string &nick)
-{
- nickalias_map::const_iterator it = NickAliasList.find(nick);
-
- if (it != NickAliasList.end())
- return it->second;
- return NULL;
-}
-
-/*************************************************************************/
-
-NickCore *findcore(const char *nick)
-{
- return findcore(ci::string(nick));
-}
-
-NickCore *findcore(const std::string &nick)
-{
- return findcore(ci::string(nick.c_str()));
-}
-
-NickCore *findcore(const ci::string &nick)
-{
- nickcore_map::const_iterator it = NickCoreList.find(nick);
-
- if (it != NickCoreList.end())
- return it->second;
- return NULL;
-}
-
-/*************************************************************************/
-/*********************** NickServ private routines ***********************/
-/*************************************************************************/
-
-/** Is the user's address on the nickcores access list?
- * @param u The user
- * @param nc The nickcore
- * @return true or false
- */
-bool is_on_access(User *u, NickCore *nc)
-{
- unsigned i;
- char *buf;
- char *buf2 = NULL;
- char *buf3 = NULL;
- std::string tmp_buf;
-
- if (!u || !nc || nc->access.empty())
- return false;
-
- tmp_buf = u->GetIdent() + "@" + u->host;
- buf = sstrdup(tmp_buf.c_str());
- if (ircd->vhost)
- {
- if (u->vhost)
- {
- tmp_buf = u->GetIdent() + "@" + u->vhost;
- buf2 = sstrdup(tmp_buf.c_str());
- }
- if (!u->GetCloakedHost().empty())
- {
- tmp_buf = u->GetIdent() + "@" + u->GetCloakedHost();
- buf3 = sstrdup(tmp_buf.c_str());
- }
- }
-
- for (i = 0; i < nc->access.size(); i++)
- {
- std::string access = nc->GetAccess(i);
- if (Anope::Match(buf, access, false) || (buf2 && Anope::Match(buf2, access, false)) || (buf3 && Anope::Match(buf3, access, false)))
- {
- delete [] buf;
- if (ircd->vhost)
- {
- if (u->vhost)
- {
- delete [] buf2;
- }
- if (!u->GetCloakedHost().empty())
- {
- delete [] buf3;
- }
- }
- return true;
- }
- }
- delete [] buf;
- if (ircd->vhost)
- {
- if (buf2)
- delete [] buf2;
- if (buf3)
- delete [] buf3;
- }
- return false;
-}
-
-/*************************************************************************/
-
-/* Sets nc->display to newdisplay. If newdisplay is NULL, it will change
- * it to the first alias in the list.
- */
-
-
-void change_core_display(NickCore * nc, const char *newdisplay)
-{
- /* Log ... */
- FOREACH_MOD(I_OnChangeCoreDisplay, OnChangeCoreDisplay(nc, newdisplay));
- Alog() << Config.s_NickServ << ": changing " << nc->display << " nickname group display to " << newdisplay;
-
- /* Remove the core from the list */
- NickCoreList.erase(nc->display);
-
- delete [] nc->display;
- nc->display = sstrdup(newdisplay);
-
- NickCoreList[nc->display] = nc;
-}
-
-void change_core_display(NickCore * nc)
-{
- NickAlias *na;
- if (nc->aliases.empty())
- return;
- na = nc->aliases.front();
- change_core_display(nc,na->nick);
-}
-
-
-/*************************************************************************/
-/*********************** NickServ command routines ***********************/
-/*************************************************************************/
-
-int do_setmodes(User * u)
-{
- Channel *c;
-
- /* Walk users current channels */
- for (UChannelList::iterator it = u->chans.begin(); it != u->chans.end(); ++it)
- {
- ChannelContainer *cc = *it;
-
- if ((c = cc->chan))
- chan_set_correct_modes(u, c, 1);
- }
- return MOD_CONT;
-}
-