From d1611b640bcd27e1a91a99ef32127bc722e50a36 Mon Sep 17 00:00:00 2001 From: rburchell Date: Sun, 15 Feb 2009 22:29:18 +0000 Subject: Remove User::na, use User::nc everywhere. Will probably break everything, but opens the door to decoupling NC from NA, and means commands can now be run without bothering about changinc nick :) More tweaking for na/nc usage. It compiles, but it's still a work in progress. Again, this compiles, but I *bet* there's no chance in hell it'll work. :) Slightly better. Set User::nc correctly. Fix crash with unregistered nicks in core and ns_access. Fix glist to work when you're not on that particular nick. Fix ns_set to not crash and burn horribly. Fix ns_set and ns_logout to not do bad things. git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2076 5417fbe8-f217-4b02-8779-1006273d7864 --- include/account.h | 4 - include/extern.h | 16 ++-- include/services.h | 3 - include/users.h | 3 - src/botserv.c | 10 +-- src/channels.c | 8 +- src/chanserv.c | 18 ++--- src/commands.c | 3 +- src/core/bs_info.c | 66 ++++++++--------- src/core/bs_kick.c | 2 +- src/core/cs_akick.c | 8 +- src/core/cs_help.c | 2 +- src/core/cs_info.c | 34 ++++----- src/core/cs_register.c | 4 - src/core/cs_sendpass.c | 14 ++-- src/core/ms_cancel.c | 2 +- src/core/ms_check.c | 2 +- src/core/ms_del.c | 2 +- src/core/ms_info.c | 14 ++-- src/core/ms_list.c | 2 +- src/core/ms_read.c | 2 +- src/core/ms_rsend.c | 9 +-- src/core/ms_set.c | 36 ++++----- src/core/ns_access.c | 70 +++++++++--------- src/core/ns_alist.c | 4 +- src/core/ns_drop.c | 4 +- src/core/ns_forbid.c | 8 +- src/core/ns_ghost.c | 9 +-- src/core/ns_group.c | 39 ++++------ src/core/ns_identify.c | 10 +-- src/core/ns_info.c | 27 ++++--- src/core/ns_list.c | 2 +- src/core/ns_logout.c | 19 +++-- src/core/ns_recover.c | 8 +- src/core/ns_register.c | 26 +++---- src/core/ns_release.c | 4 +- src/core/ns_saset.c | 9 +-- src/core/ns_set.c | 42 +++++------ src/core/ns_update.c | 16 ++-- src/core/os_akill.c | 2 +- src/core/os_defcon.c | 4 +- src/core/os_session.c | 2 +- src/core/os_set.c | 4 +- src/core/os_sgline.c | 2 +- src/core/os_sqline.c | 2 +- src/core/os_szline.c | 2 +- src/hostserv.c | 14 ++-- src/language.c | 19 ++++- src/mail.c | 2 +- src/memoserv.c | 20 ++--- src/messages.c | 2 +- src/misc.c | 24 +++--- src/modules.c | 11 +-- src/modules/cs_enforce.c | 4 +- src/modules/hs_request.c | 6 +- src/modules/ns_maxemail.c | 2 +- src/nickserv.c | 137 +++++------------------------------ src/operserv.c | 10 +-- src/protocol/bahamut.c | 18 +---- src/protocol/inspircd11.c | 16 +--- src/protocol/inspircd12.cpp | 15 +--- src/protocol/ratbox.c | 4 +- src/protocol/unreal32.c | 38 ++-------- src/send.c | 4 +- src/servers.c | 6 +- src/users.c | 173 ++++++++++++++++---------------------------- 66 files changed, 427 insertions(+), 677 deletions(-) diff --git a/include/account.h b/include/account.h index 40b7146c2..6c49bbd58 100644 --- a/include/account.h +++ b/include/account.h @@ -34,7 +34,6 @@ class NickAlias time_registered = last_seen = 0; status = 0; nc = NULL; - u = NULL; } NickAlias *next, *prev; @@ -46,9 +45,6 @@ class NickAlias time_t last_seen; /* When it was seen online for the last time */ uint16 status; /* See NS_* below */ NickCore *nc; /* I'm an alias of this */ - - /* Not saved */ - User *u; /* Current online user that has me */ }; class NickCore : public Extensible diff --git a/include/extern.h b/include/extern.h index 43adbf644..888d64721 100644 --- a/include/extern.h +++ b/include/extern.h @@ -317,7 +317,6 @@ E bool NSStrictPrivileges; E bool NSEmailReg; E bool NSModeOnID; E bool NSRestrictGetPass; -E bool NSNickTracking; E bool NSAddAccessOnReg; E int CSDefFlags; @@ -525,7 +524,9 @@ E void lang_init(); E int strftime_lang(char *buf, int size, User * u, int format, struct tm *tm); E void syntax_error(char *service, User * u, const char *command, int msgnum); E const char *getstring(NickAlias *na, int index); -E const char *getstring2(NickCore *nc, int index); +E const char *getstring(NickCore *nc, int index); +E const char *getstring(User *nc, int index); +E const char *getstring(int index); /**** log.c ****/ @@ -630,8 +631,8 @@ E const char *merge_args(int argc, const char **argv); E int match_wild(const char *pattern, const char *str) MARK_DEPRECATED; E int match_wild_nocase(const char *pattern, const char *str) MARK_DEPRECATED; E int dotime(const char *s); -E char *duration(NickAlias * na, char *buf, int bufsize, time_t seconds); -E char *expire_left(NickAlias * na, char *buf, int len, time_t expires); +E const char *duration(NickCore *nc, char *buf, int bufsize, time_t seconds); +E const char *expire_left(NickCore *nc, char *buf, int len, time_t expires); E int doValidHost(const char *host, int type); typedef int (*range_callback_t) (User * u, int num, va_list args); @@ -736,11 +737,6 @@ E NickAlias *findnick(const char *nick); E NickAlias *findnick(const std::string &nick); E NickCore *findcore(const char *nick); E void clean_ns_timeouts(NickAlias * na); -E void nsStartNickTracking(User * u); -E void nsStopNickTracking(User * u); -E int nsCheckNickTracking(User *u); - -E int group_identified(User * u, NickCore * nc); E int is_on_access(User * u, NickCore * nc); /**** operserv.c ****/ @@ -930,7 +926,7 @@ E char *TS6UPLINK; E void update_host(User * user); E User *do_nick(const char *source, const char *nick, const char *username, const char *host, - const char *server, const char *realname, time_t ts, uint32 svid, uint32 ip, const char *vhost, const char *uid); + const char *server, const char *realname, time_t ts, uint32 ip, const char *vhost, const char *uid); E void do_umode(const char *source, int ac, const char **av); E void do_quit(const char *source, int ac, const char **av); diff --git a/include/services.h b/include/services.h index 549d39ba1..6c00c959f 100644 --- a/include/services.h +++ b/include/services.h @@ -1312,10 +1312,7 @@ class IRCDProto virtual void SendSGLine(const char *, const char *) { } virtual void SendBanDel(const char *, const char *) { } virtual void SendSVSModeChan(const char *, const char *, const char *) { } - virtual void SendSVID(const char *, time_t) { } virtual void SendUnregisteredNick(User *) { } - virtual void SendSVID2(User *, const char *) { } - virtual void SendSVID3(User *, const char *) { } virtual void SendCTCP(BotInfo *bi, const char *dest, const char *fmt, ...); virtual void SendSVSJoin(const char *, const char *, const char *, const char *) { } virtual void SendSVSPart(const char *, const char *, const char *) { } diff --git a/include/users.h b/include/users.h index 17dfccd8d..fd05b5c17 100644 --- a/include/users.h +++ b/include/users.h @@ -37,14 +37,11 @@ public: // XXX: exposing a tiny bit too much std::string chost; /* User's cloaked hostname */ char *realname; /* Realname */ Server *server; /* Server user is connected to */ - char *nickTrack; /* Nick Tracking */ time_t timestamp; /* Timestamp of the nick */ time_t my_signon; /* When did _we_ see the user? */ - time_t svid; /* Services ID */ uint32 mode; /* See below */ NickCore *nc; - NickAlias *na; int isSuperAdmin; /* is SuperAdmin on or off? */ diff --git a/src/botserv.c b/src/botserv.c index 96b017bcd..1f0a13421 100644 --- a/src/botserv.c +++ b/src/botserv.c @@ -803,7 +803,7 @@ static void bot_kick(ChannelInfo * ci, User * u, int message, ...) return; va_start(args, message); - fmt = getstring(u->na, message); + fmt = getstring(u, message); if (!fmt) return; vsnprintf(buf, sizeof(buf), fmt, args); @@ -837,7 +837,7 @@ void bot_raw_ban(User * requester, ChannelInfo * ci, char *nick, if (ircd->protectedumode) { if (is_protected(u) && (requester != u)) { ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", - getstring2(NULL, PERMISSION_DENIED)); + getstring(PERMISSION_DENIED)); return; } } @@ -849,7 +849,7 @@ void bot_raw_ban(User * requester, ChannelInfo * ci, char *nick, if (ircd->except) { if (is_excepted(ci, u) == 1) { ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", - getstring2(NULL, BOT_EXCEPT)); + getstring(BOT_EXCEPT)); return; } } @@ -913,7 +913,7 @@ void bot_raw_kick(User * requester, ChannelInfo * ci, char *nick, if (ircd->protectedumode) { if (is_protected(u) && (requester != u)) { ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", - getstring2(NULL, PERMISSION_DENIED)); + getstring(PERMISSION_DENIED)); return; } } @@ -967,7 +967,7 @@ void bot_raw_mode(User * requester, ChannelInfo * ci, const char *mode, if (ircd->protectedumode) { if (is_protected(u) && *mode == '-' && (requester != u)) { ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", - getstring2(NULL, PERMISSION_DENIED)); + getstring(PERMISSION_DENIED)); return; } } diff --git a/src/channels.c b/src/channels.c index 85f17785e..6e52139f7 100644 --- a/src/channels.c +++ b/src/channels.c @@ -499,7 +499,7 @@ User *nc_on_chan(Channel * c, NickCore * nc) return NULL; for (u = c->users; u; u = u->next) { - if (u->user->na && u->user->na->nc == nc + if (u->user->nc == nc && nick_recognized(u->user)) return u->user; } @@ -1390,7 +1390,7 @@ void chan_set_correct_modes(User * user, Channel * c, int give_modes) * to receive modes. I wonder who added that... *looks at Rob* ;) -GD */ if (give_modes && (get_ignore(user->nick) == NULL) - && (!user->na || !(user->na->nc->flags & NI_AUTOOP))) { + && (!user->nc || !(user->nc->flags & NI_AUTOOP))) { if (ircd->owner && is_founder(user, ci)) add_modes |= CUS_OWNER; else if ((ircd->protect || ircd->admin) @@ -1569,7 +1569,7 @@ void chan_adduser2(User * user, Channel * c) if (c->usercount == BSMinUsers) bot_join(c->ci); if (c->usercount >= BSMinUsers && (c->ci->botflags & BS_GREET) - && user->na && user->na->nc->greet + && user->nc && user->nc->greet && check_access(user, c->ci, CA_GREET)) { /* Only display the greet if the main uplink we're connected * to has synced, or we'll get greet-floods when the net @@ -1577,7 +1577,7 @@ void chan_adduser2(User * user, Channel * c) */ if (is_sync(user->server)) { ircdproto->SendPrivmsg(c->ci->bi, c->name, "[%s] %s", - user->na->nick, user->na->nc->greet); + user->nc->display, user->nc->greet); c->ci->bi->lastmsg = time(NULL); } } diff --git a/src/chanserv.c b/src/chanserv.c index 79824a008..393a5831b 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -1142,13 +1142,13 @@ int check_kick(User * user, const char *chan, time_t chants) if (ci->flags & CI_SUSPENDED || ci->flags & CI_FORBIDDEN) { get_idealban(ci, user, mask, sizeof(mask)); - reason = ci->forbidreason ? ci->forbidreason : getstring(user->na, CHAN_MAY_NOT_BE_USED); + reason = ci->forbidreason ? ci->forbidreason : getstring(user, CHAN_MAY_NOT_BE_USED); set_modes = true; goto kick; } if (nick_recognized(user)) - nc = user->na->nc; + nc = user->nc; else nc = NULL; @@ -1188,7 +1188,7 @@ int check_kick(User * user, const char *chan, time_t chants) if (check_access(user, ci, CA_NOJOIN)) { get_idealban(ci, user, mask, sizeof(mask)); - reason = getstring(user->na, CHAN_NOT_ALLOWED_TO_JOIN); + reason = getstring(user, CHAN_NOT_ALLOWED_TO_JOIN); goto kick; } @@ -1846,7 +1846,7 @@ int is_founder(User * user, ChannelInfo * ci) return 1; } - if (user->na && user->na->nc == ci->founder) { + if (user->nc && user->nc == ci->founder) { if ((nick_identified(user) || (nick_recognized(user) && !(ci->flags & CI_SECURE)))) return 1; @@ -1864,7 +1864,7 @@ int is_real_founder(User * user, ChannelInfo * ci) return 1; } - if (user->na && user->na->nc == ci->founder) { + if (user->nc && user->nc == ci->founder) { if ((nick_identified(user) || (nick_recognized(user) && !(ci->flags & CI_SECURE)))) return 1; @@ -1927,12 +1927,12 @@ int get_access(User * user, ChannelInfo * ci) if (is_founder(user, ci)) return ACCESS_FOUNDER; - if (!user->na) + if (!user->nc) return 0; if (nick_identified(user) || (nick_recognized(user) && !(ci->flags & CI_SECURE))) - if ((access = get_access_entry(user->na->nc, ci))) + if ((access = get_access_entry(user->nc, ci))) return access->level; if (nick_identified(user)) @@ -1947,12 +1947,12 @@ void update_cs_lastseen(User * user, ChannelInfo * ci) { ChanAccess *access; - if (!ci || !user || !user->na) + if (!ci || !user || !user->nc) return; if (is_founder(user, ci) || nick_identified(user) || (nick_recognized(user) && !(ci->flags & CI_SECURE))) - if ((access = get_access_entry(user->na->nc, ci))) + if ((access = get_access_entry(user->nc, ci))) access->last_seen = time(NULL); } diff --git a/src/commands.c b/src/commands.c index 9501640c7..018ca6897 100644 --- a/src/commands.c +++ b/src/commands.c @@ -77,8 +77,7 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char * // Command requires registered users only if (!nick_identified(u)) { - // XXX: we should have a new string for this - notice_lang(service, u, ACCESS_DENIED); + notice_lang(service, u, NICK_IDENTIFY_REQUIRED, service); alog("Access denied for unregistered user %s with service %s and command %s", u->nick, service, cmd); return; } diff --git a/src/core/bs_info.c b/src/core/bs_info.c index 4f65d990d..ff7c2c932 100644 --- a/src/core/bs_info.c +++ b/src/core/bs_info.c @@ -61,7 +61,7 @@ class CommandBSInfo : public Command int need_comma = 0; char buf[BUFSIZE], *end; - const char *commastr = getstring(u->na, COMMA_SPACE); + const char *commastr = getstring(u, COMMA_SPACE); if ((bi = findbot(query))) { @@ -74,7 +74,7 @@ class CommandBSInfo : public Command strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm); notice_lang(s_BotServ, u, BOT_INFO_BOT_CREATED, buf); notice_lang(s_BotServ, u, BOT_INFO_BOT_OPTIONS, - getstring(u->na, + getstring(u, (bi-> flags & BI_PRIVATE) ? BOT_INFO_OPT_PRIVATE : BOT_INFO_OPT_NONE)); @@ -104,137 +104,137 @@ class CommandBSInfo : public Command if (ci->botflags & BS_KICK_BADWORDS) { if (ci->ttb[TTB_BADWORDS]) notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS_BAN, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->ttb[TTB_BADWORDS]); else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS, - getstring(u->na, BOT_INFO_ACTIVE)); + getstring(u, BOT_INFO_ACTIVE)); } else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS, - getstring(u->na, BOT_INFO_INACTIVE)); + getstring(u, BOT_INFO_INACTIVE)); if (ci->botflags & BS_KICK_BOLDS) { if (ci->ttb[TTB_BOLDS]) notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS_BAN, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->ttb[TTB_BOLDS]); else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS, - getstring(u->na, BOT_INFO_ACTIVE)); + getstring(u, BOT_INFO_ACTIVE)); } else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS, - getstring(u->na, BOT_INFO_INACTIVE)); + getstring(u, BOT_INFO_INACTIVE)); if (ci->botflags & BS_KICK_CAPS) { if (ci->ttb[TTB_CAPS]) notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_BAN, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->ttb[TTB_CAPS], ci->capsmin, ci->capspercent); else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_ON, - getstring(u->na, BOT_INFO_ACTIVE), ci->capsmin, + getstring(u, BOT_INFO_ACTIVE), ci->capsmin, ci->capspercent); } else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_OFF, - getstring(u->na, BOT_INFO_INACTIVE)); + getstring(u, BOT_INFO_INACTIVE)); if (ci->botflags & BS_KICK_COLORS) { if (ci->ttb[TTB_COLORS]) notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS_BAN, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->ttb[TTB_COLORS]); else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS, - getstring(u->na, BOT_INFO_ACTIVE)); + getstring(u, BOT_INFO_ACTIVE)); } else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS, - getstring(u->na, BOT_INFO_INACTIVE)); + getstring(u, BOT_INFO_INACTIVE)); if (ci->botflags & BS_KICK_FLOOD) { if (ci->ttb[TTB_FLOOD]) notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_BAN, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->ttb[TTB_FLOOD], ci->floodlines, ci->floodsecs); else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_ON, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->floodlines, ci->floodsecs); } else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_OFF, - getstring(u->na, BOT_INFO_INACTIVE)); + getstring(u, BOT_INFO_INACTIVE)); if (ci->botflags & BS_KICK_REPEAT) { if (ci->ttb[TTB_REPEAT]) notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_BAN, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->ttb[TTB_REPEAT], ci->repeattimes); else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_ON, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->repeattimes); } else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_OFF, - getstring(u->na, BOT_INFO_INACTIVE)); + getstring(u, BOT_INFO_INACTIVE)); if (ci->botflags & BS_KICK_REVERSES) { if (ci->ttb[TTB_REVERSES]) notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES_BAN, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->ttb[TTB_REVERSES]); else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES, - getstring(u->na, BOT_INFO_ACTIVE)); + getstring(u, BOT_INFO_ACTIVE)); } else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES, - getstring(u->na, BOT_INFO_INACTIVE)); + getstring(u, BOT_INFO_INACTIVE)); if (ci->botflags & BS_KICK_UNDERLINES) { if (ci->ttb[TTB_UNDERLINES]) notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES_BAN, - getstring(u->na, BOT_INFO_ACTIVE), + getstring(u, BOT_INFO_ACTIVE), ci->ttb[TTB_UNDERLINES]); else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES, - getstring(u->na, BOT_INFO_ACTIVE)); + getstring(u, BOT_INFO_ACTIVE)); } else notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES, - getstring(u->na, BOT_INFO_INACTIVE)); + getstring(u, BOT_INFO_INACTIVE)); end = buf; *end = 0; if (ci->botflags & BS_DONTKICKOPS) { end += snprintf(end, sizeof(buf) - (end - buf), "%s", - getstring(u->na, BOT_INFO_OPT_DONTKICKOPS)); + getstring(u, BOT_INFO_OPT_DONTKICKOPS)); need_comma = 1; } if (ci->botflags & BS_DONTKICKVOICES) { end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? commastr : "", - getstring(u->na, BOT_INFO_OPT_DONTKICKVOICES)); + getstring(u, BOT_INFO_OPT_DONTKICKVOICES)); need_comma = 1; } if (ci->botflags & BS_FANTASY) { end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? commastr : "", - getstring(u->na, BOT_INFO_OPT_FANTASY)); + getstring(u, BOT_INFO_OPT_FANTASY)); need_comma = 1; } if (ci->botflags & BS_GREET) { end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? commastr : "", - getstring(u->na, BOT_INFO_OPT_GREET)); + getstring(u, BOT_INFO_OPT_GREET)); need_comma = 1; } if (ci->botflags & BS_NOBOT) { end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? commastr : "", - getstring(u->na, BOT_INFO_OPT_NOBOT)); + getstring(u, BOT_INFO_OPT_NOBOT)); need_comma = 1; } if (ci->botflags & BS_SYMBIOSIS) { end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? commastr : "", - getstring(u->na, BOT_INFO_OPT_SYMBIOSIS)); + getstring(u, BOT_INFO_OPT_SYMBIOSIS)); need_comma = 1; } notice_lang(s_BotServ, u, BOT_INFO_CHAN_OPTIONS, - *buf ? buf : getstring(u->na, BOT_INFO_OPT_NONE)); + *buf ? buf : getstring(u, BOT_INFO_OPT_NONE)); } else notice_lang(s_BotServ, u, BOT_INFO_NOT_FOUND, query); diff --git a/src/core/bs_kick.c b/src/core/bs_kick.c index 87ef4111a..53485f011 100644 --- a/src/core/bs_kick.c +++ b/src/core/bs_kick.c @@ -44,7 +44,7 @@ class CommandBSKick : public Command notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan); else if (ci->flags & CI_FORBIDDEN) notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan); - else if (!check_access(u, ci, CA_SET) && !u->na->nc->HasCommand("botserv/administration")) + else if (!check_access(u, ci, CA_SET) && !u->nc->HasCommand("botserv/administration")) notice_lang(s_BotServ, u, ACCESS_DENIED); else if (!ci->bi) notice_help(s_BotServ, u, BOT_NOT_ASSIGNED); diff --git a/src/core/cs_akick.c b/src/core/cs_akick.c index 4bd2b10bd..a0efdc067 100644 --- a/src/core/cs_akick.c +++ b/src/core/cs_akick.c @@ -82,7 +82,7 @@ int akick_list(User * u, int index, ChannelInfo * ci, int *sent_header) ((akick->flags & AK_ISNICK) ? akick->u.nc-> display : akick->u.mask), (akick->reason ? akick-> - reason : getstring(u->na, NO_REASON))); + reason : getstring(u, NO_REASON))); return 1; } @@ -113,7 +113,7 @@ int akick_view(User * u, int index, ChannelInfo * ci, int *sent_header) strftime_lang(timebuf, sizeof(timebuf), u, STRFTIME_SHORT_DATE_FORMAT, &tm); } else { - snprintf(timebuf, sizeof(timebuf), "%s", getstring(u->na, UNKNOWN)); + snprintf(timebuf, sizeof(timebuf), "%s", getstring(u, UNKNOWN)); } notice_lang(s_ChanServ, u, @@ -122,11 +122,11 @@ int akick_view(User * u, int index, ChannelInfo * ci, int *sent_header) CHAN_AKICK_VIEW_FORMAT), index + 1, ((akick->flags & AK_ISNICK) ? akick->u.nc-> display : akick->u.mask), - akick->creator ? akick->creator : getstring(u->na, + akick->creator ? akick->creator : getstring(u, UNKNOWN), timebuf, (akick->reason ? akick-> - reason : getstring(u->na, NO_REASON))); + reason : getstring(u, NO_REASON))); return 1; } diff --git a/src/core/cs_help.c b/src/core/cs_help.c index eadc0ea8f..17ec5fe4c 100644 --- a/src/core/cs_help.c +++ b/src/core/cs_help.c @@ -52,7 +52,7 @@ class CommandCSHelp : public Command { notice_help(s_ChanServ, u, CHAN_HELP_LEVELS_DESC_FORMAT, levelinfo_maxwidth, levelinfo[i].name, - getstring(u->na, levelinfo[i].desc)); + getstring(u, levelinfo[i].desc)); } } else diff --git a/src/core/cs_info.c b/src/core/cs_info.c index 4bb8495e4..09d92e84f 100644 --- a/src/core/cs_info.c +++ b/src/core/cs_info.c @@ -28,11 +28,11 @@ void myChanServHelp(User * u) class CommandCSInfo : public Command { // cannot be const, as it is modified. - void CheckOptStr(std::string &buf, int opt, const std::string &str, ChannelInfo *ci, NickAlias *na) + void CheckOptStr(std::string &buf, int opt, const std::string &str, ChannelInfo *ci, NickCore *nc) { if (ci->flags & opt) { - const char *commastr = getstring(na, COMMA_SPACE); + const char *commastr = getstring(nc, COMMA_SPACE); if (!buf.empty()) buf += commastr; @@ -69,7 +69,7 @@ class CommandCSInfo : public Command notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN_OPER, chan, ci->forbidby, (ci->forbidreason ? ci-> - forbidreason : getstring(u->na, NO_REASON))); + forbidreason : getstring(u, NO_REASON))); else notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan); @@ -115,19 +115,19 @@ class CommandCSInfo : public Command notice_lang(s_ChanServ, u, CHAN_INFO_BANTYPE, ci->bantype); std::string optbuf; - CheckOptStr(optbuf, CI_KEEPTOPIC, getstring(u->na, CHAN_INFO_OPT_KEEPTOPIC), ci, u->na); - CheckOptStr(optbuf, CI_OPNOTICE, getstring(u->na, CHAN_INFO_OPT_OPNOTICE), ci, u->na); - CheckOptStr(optbuf, CI_PEACE, getstring(u->na, CHAN_INFO_OPT_PEACE), ci, u->na); - CheckOptStr(optbuf, CI_PRIVATE, getstring(u->na, CHAN_INFO_OPT_PRIVATE), ci, u->na); - CheckOptStr(optbuf, CI_RESTRICTED, getstring(u->na, CHAN_INFO_OPT_RESTRICTED), ci, u->na); - CheckOptStr(optbuf, CI_SECURE, getstring(u->na, CHAN_INFO_OPT_SECURE), ci, u->na); - CheckOptStr(optbuf, CI_SECUREFOUNDER, getstring(u->na, CHAN_INFO_OPT_SECUREFOUNDER), ci, u->na); - CheckOptStr(optbuf, CI_SECUREOPS, getstring(u->na, CHAN_INFO_OPT_SECUREOPS), ci, u->na); - CheckOptStr(optbuf, CI_SIGNKICK | CI_SIGNKICK_LEVEL, getstring(u->na, CHAN_INFO_OPT_SIGNKICK), ci, u->na); - CheckOptStr(optbuf, CI_TOPICLOCK, getstring(u->na, CHAN_INFO_OPT_TOPICLOCK), ci, u->na); - CheckOptStr(optbuf, CI_XOP, getstring(u->na, CHAN_INFO_OPT_XOP), ci, u->na); - - notice_lang(s_ChanServ, u, CHAN_INFO_OPTIONS, optbuf.empty() ? getstring(u->na, CHAN_INFO_OPT_NONE) : optbuf.c_str()); + CheckOptStr(optbuf, CI_KEEPTOPIC, getstring(u, CHAN_INFO_OPT_KEEPTOPIC), ci, u->nc); + CheckOptStr(optbuf, CI_OPNOTICE, getstring(u, CHAN_INFO_OPT_OPNOTICE), ci, u->nc); + CheckOptStr(optbuf, CI_PEACE, getstring(u, CHAN_INFO_OPT_PEACE), ci, u->nc); + CheckOptStr(optbuf, CI_PRIVATE, getstring(u, CHAN_INFO_OPT_PRIVATE), ci, u->nc); + CheckOptStr(optbuf, CI_RESTRICTED, getstring(u, CHAN_INFO_OPT_RESTRICTED), ci, u->nc); + CheckOptStr(optbuf, CI_SECURE, getstring(u, CHAN_INFO_OPT_SECURE), ci, u->nc); + CheckOptStr(optbuf, CI_SECUREFOUNDER, getstring(u, CHAN_INFO_OPT_SECUREFOUNDER), ci, u->nc); + CheckOptStr(optbuf, CI_SECUREOPS, getstring(u, CHAN_INFO_OPT_SECUREOPS), ci, u->nc); + CheckOptStr(optbuf, CI_SIGNKICK | CI_SIGNKICK_LEVEL, getstring(u, CHAN_INFO_OPT_SIGNKICK), ci, u->nc); + CheckOptStr(optbuf, CI_TOPICLOCK, getstring(u, CHAN_INFO_OPT_TOPICLOCK), ci, u->nc); + CheckOptStr(optbuf, CI_XOP, getstring(u, CHAN_INFO_OPT_XOP), ci, u->nc); + + notice_lang(s_ChanServ, u, CHAN_INFO_OPTIONS, optbuf.empty() ? getstring(u, CHAN_INFO_OPT_NONE) : optbuf.c_str()); notice_lang(s_ChanServ, u, CHAN_INFO_MODE_LOCK, get_mlock_modes(ci, 1)); // XXX: we could just as easily (and tidily) merge this in with the flags display above. @@ -148,7 +148,7 @@ class CommandCSInfo : public Command } if (ci->flags & CI_SUSPENDED) { - notice_lang(s_ChanServ, u, CHAN_X_SUSPENDED, ci->forbidby, (ci->forbidreason ? ci->forbidreason : getstring(u->na, NO_REASON))); + notice_lang(s_ChanServ, u, CHAN_X_SUSPENDED, ci->forbidby, (ci->forbidreason ? ci->forbidreason : getstring(u, NO_REASON))); } if (!show_all && (check_access(u, ci, CA_INFO) || is_servadmin)) diff --git a/src/core/cs_register.c b/src/core/cs_register.c index b632bfa6e..2caeaa567 100644 --- a/src/core/cs_register.c +++ b/src/core/cs_register.c @@ -56,10 +56,6 @@ class CommandCSRegister : public Command notice_lang(s_ChanServ, u, CHAN_SYMBOL_REQUIRED); else if (!ircdproto->IsChannelValid(chan)) notice_lang(s_ChanServ, u, CHAN_X_INVALID, chan); - else if (!u->na || !(nc = u->na->nc)) - notice_lang(s_ChanServ, u, CHAN_MUST_REGISTER_NICK, s_NickServ); - else if (!nick_recognized(u)) - notice_lang(s_ChanServ, u, CHAN_MUST_IDENTIFY_NICK, s_NickServ, s_NickServ); else if (!(c = findchan(chan))) notice_lang(s_ChanServ, u, CHAN_REGISTER_NONE_CHANNEL, chan); else if ((ci = cs_findchan(chan))) diff --git a/src/core/cs_sendpass.c b/src/core/cs_sendpass.c index 0cfef402b..e61f6e2ee 100644 --- a/src/core/cs_sendpass.c +++ b/src/core/cs_sendpass.c @@ -44,24 +44,24 @@ class CommandCSSendPass : public Command { MailInfo *mail; - snprintf(buf, sizeof(buf), getstring2(founder, CHAN_SENDPASS_SUBJECT), ci->name); + snprintf(buf, sizeof(buf), getstring(founder, CHAN_SENDPASS_SUBJECT), ci->name); mail = MailBegin(u, founder, buf, s_ChanServ); if (!mail) return MOD_CONT; - fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_HEAD)); + fprintf(mail->pipe, getstring(founder, CHAN_SENDPASS_HEAD)); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_1), + fprintf(mail->pipe, getstring(founder, CHAN_SENDPASS_LINE_1), ci->name); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_2), + fprintf(mail->pipe, getstring(founder, CHAN_SENDPASS_LINE_2), tmp_pass); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_3)); + fprintf(mail->pipe, getstring(founder, CHAN_SENDPASS_LINE_3)); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_4)); + fprintf(mail->pipe, getstring(founder, CHAN_SENDPASS_LINE_4)); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_5), + fprintf(mail->pipe, getstring(founder, CHAN_SENDPASS_LINE_5), NetworkName); fprintf(mail->pipe, "\n.\n"); diff --git a/src/core/ms_cancel.c b/src/core/ms_cancel.c index 1f24ead6d..48867563e 100644 --- a/src/core/ms_cancel.c +++ b/src/core/ms_cancel.c @@ -46,7 +46,7 @@ class CommandMSCancel : public Command for (i = mi->memos.size() - 1; i >= 0; --i) { - if ((mi->memos[i]->flags & MF_UNREAD) && !stricmp(mi->memos[i]->sender, u->na->nc->display) && (!(mi->memos[i]->flags & MF_NOTIFYS))) + if ((mi->memos[i]->flags & MF_UNREAD) && !stricmp(mi->memos[i]->sender, u->nc->display) && (!(mi->memos[i]->flags & MF_NOTIFYS))) { delmemo(mi, mi->memos[i]->number); notice_lang(s_MemoServ, u, MEMO_CANCELLED, name); diff --git a/src/core/ms_check.c b/src/core/ms_check.c index 0685cdc79..19f376873 100644 --- a/src/core/ms_check.c +++ b/src/core/ms_check.c @@ -57,7 +57,7 @@ class CommandMSCheck : public Command for (i = mi->memos.size() - 1; i >= 0; --i) { - if (!stricmp(mi->memos[i]->sender, u->na->nc->display)) + if (!stricmp(mi->memos[i]->sender, u->nc->display)) { found = 1; /* Yes, we've found the memo */ diff --git a/src/core/ms_del.c b/src/core/ms_del.c index 7d493bffe..cb20a2b22 100644 --- a/src/core/ms_del.c +++ b/src/core/ms_del.c @@ -67,7 +67,7 @@ class CommandMSDel : public Command notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ); return MOD_CONT; } - mi = &u->na->nc->memos; + mi = &u->nc->memos; } if (!numstr || (!isdigit(*numstr) && stricmp(numstr, "ALL") && stricmp(numstr, "LAST"))) this->OnSyntaxError(u); diff --git a/src/core/ms_info.c b/src/core/ms_info.c index 2d2ace3ef..68cf9e11d 100644 --- a/src/core/ms_info.c +++ b/src/core/ms_info.c @@ -82,11 +82,11 @@ class CommandMSInfo : public Command notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ); return MOD_CONT; } - mi = &u->na->nc->memos; - hardmax = u->na->nc->flags & NI_MEMO_HARDMAX ? 1 : 0; + mi = &u->nc->memos; + hardmax = u->nc->flags & NI_MEMO_HARDMAX ? 1 : 0; } - if (name && (ci || na->nc != u->na->nc)) + if (name && (ci || na->nc != u->nc)) { if (mi->memos.empty()) notice_lang(s_MemoServ, u, MEMO_INFO_X_NO_MEMOS, name); @@ -145,7 +145,7 @@ class CommandMSInfo : public Command notice_lang(s_MemoServ, u, MEMO_INFO_X_NOTIFY_OFF, name); } } - else /* !name || (!ci || na->nc == u->na->nc) */ + else /* !name || (!ci || na->nc == u->nc) */ { if (mi->memos.empty()) notice_lang(s_MemoServ, u, MEMO_INFO_NO_MEMOS); @@ -192,11 +192,11 @@ class CommandMSInfo : public Command notice_lang(s_MemoServ, u, MEMO_INFO_NO_LIMIT); /* Ripped too. But differently because of a seg fault (loughs) */ - if ((u->na->nc->flags & NI_MEMO_RECEIVE) && (u->na->nc->flags & NI_MEMO_SIGNON)) + if ((u->nc->flags & NI_MEMO_RECEIVE) && (u->nc->flags & NI_MEMO_SIGNON)) notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_ON); - else if (u->na->nc->flags & NI_MEMO_RECEIVE) + else if (u->nc->flags & NI_MEMO_RECEIVE) notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_RECEIVE); - else if (u->na->nc->flags & NI_MEMO_SIGNON) + else if (u->nc->flags & NI_MEMO_SIGNON) notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_SIGNON); else notice_lang(s_MemoServ, u, MEMO_INFO_NOTIFY_OFF); diff --git a/src/core/ms_list.c b/src/core/ms_list.c index f3b934c46..4465a2e47 100644 --- a/src/core/ms_list.c +++ b/src/core/ms_list.c @@ -62,7 +62,7 @@ class CommandMSList : public Command notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ); return MOD_CONT; } - mi = &u->na->nc->memos; + mi = &u->nc->memos; } if (param && !isdigit(*param) && stricmp(param, "NEW")) this->OnSyntaxError(u); diff --git a/src/core/ms_read.c b/src/core/ms_read.c index 962adf9e4..bf07e30e0 100644 --- a/src/core/ms_read.c +++ b/src/core/ms_read.c @@ -62,7 +62,7 @@ class CommandMSRead : public Command notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ); return MOD_CONT; } - mi = &u->na->nc->memos; + mi = &u->nc->memos; } num = numstr ? atoi(numstr) : -1; if (!numstr || (stricmp(numstr, "LAST") && stricmp(numstr, "NEW") && num <= 0)) diff --git a/src/core/ms_rsend.c b/src/core/ms_rsend.c index 9a903264b..cc00d10bf 100644 --- a/src/core/ms_rsend.c +++ b/src/core/ms_rsend.c @@ -34,13 +34,10 @@ class CommandMSRSend : public Command /* prevent user from rsend to themselves */ if ((na = findnick(name))) { - if (u->na) + if (na->nc == u->nc) { - if (!stricmp(na->nc->display, u->na->nc->display)) - { - notice_lang(s_MemoServ, u, MEMO_NO_RSEND_SELF); - return MOD_CONT; - } + notice_lang(s_MemoServ, u, MEMO_NO_RSEND_SELF); + return MOD_CONT; } else { diff --git a/src/core/ms_set.c b/src/core/ms_set.c index 9d92c9388..67d792047 100644 --- a/src/core/ms_set.c +++ b/src/core/ms_set.c @@ -26,26 +26,26 @@ class CommandMSSet : public Command if (!stricmp(param, "ON")) { - u->na->nc->flags |= NI_MEMO_SIGNON | NI_MEMO_RECEIVE; + u->nc->flags |= NI_MEMO_SIGNON | NI_MEMO_RECEIVE; notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_ON, s_MemoServ); } else if (!stricmp(param, "LOGON")) { - u->na->nc->flags |= NI_MEMO_SIGNON; - u->na->nc->flags &= ~NI_MEMO_RECEIVE; + u->nc->flags |= NI_MEMO_SIGNON; + u->nc->flags &= ~NI_MEMO_RECEIVE; notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_LOGON, s_MemoServ); } else if (!stricmp(param, "NEW")) { - u->na->nc->flags &= ~NI_MEMO_SIGNON; - u->na->nc->flags |= NI_MEMO_RECEIVE; + u->nc->flags &= ~NI_MEMO_SIGNON; + u->nc->flags |= NI_MEMO_RECEIVE; notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_NEW, s_MemoServ); } else if (!stricmp(param, "MAIL")) { - if (u->na->nc->email) + if (u->nc->email) { - u->na->nc->flags |= NI_MEMO_MAIL; + u->nc->flags |= NI_MEMO_MAIL; notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_MAIL); } else @@ -53,12 +53,12 @@ class CommandMSSet : public Command } else if (!stricmp(param, "NOMAIL")) { - u->na->nc->flags &= ~NI_MEMO_MAIL; + u->nc->flags &= ~NI_MEMO_MAIL; notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_NOMAIL); } else if (!stricmp(param, "OFF")) { - u->na->nc->flags &= ~(NI_MEMO_SIGNON | NI_MEMO_RECEIVE); + u->nc->flags &= ~(NI_MEMO_SIGNON | NI_MEMO_RECEIVE); notice_lang(s_MemoServ, u, MEMO_SET_NOTIFY_OFF, s_MemoServ); } else @@ -73,7 +73,7 @@ class CommandMSSet : public Command const char *p3 = params.size() > 3 ? params[3].c_str() : NULL; const char *user = NULL, *chan = NULL; int32 limit; - NickAlias *na = u->na; + NickCore *nc = u->nc; ChannelInfo *ci = NULL; int is_servadmin = is_services_admin(u); @@ -104,6 +104,7 @@ class CommandMSSet : public Command { if (p2 && stricmp(p2, "HARD") && !chan) { + NickAlias *na; if (!(na = findnick(p1))) { notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, p1); @@ -111,6 +112,7 @@ class CommandMSSet : public Command } user = p1; mi = &na->nc->memos; + nc = na->nc; p1 = p2; p2 = p3; } @@ -134,9 +136,9 @@ class CommandMSSet : public Command else { if (p2) - na->nc->flags |= NI_MEMO_HARDMAX; + nc->flags |= NI_MEMO_HARDMAX; else - na->nc->flags &= ~NI_MEMO_HARDMAX; + nc->flags &= ~NI_MEMO_HARDMAX; } limit = atoi(p1); if (limit < 0 || limit > 32767) @@ -158,7 +160,7 @@ class CommandMSSet : public Command notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_FORBIDDEN, chan); return MOD_CONT; } - else if (!chan && (na->nc->flags & NI_MEMO_HARDMAX)) { + else if (!chan && (nc->flags & NI_MEMO_HARDMAX)) { notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT_FORBIDDEN); return MOD_CONT; } @@ -182,21 +184,21 @@ class CommandMSSet : public Command mi->memomax = limit; if (limit > 0) { - if (!chan && na->nc == u->na->nc) + if (!chan && nc == u->nc) notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT, limit); else notice_lang(s_MemoServ, u, MEMO_SET_LIMIT, chan ? chan : user, limit); } else if (!limit) { - if (!chan && na->nc == u->na->nc) + if (!chan && nc == u->nc) notice_lang(s_MemoServ, u, MEMO_SET_YOUR_LIMIT_ZERO); else notice_lang(s_MemoServ, u, MEMO_SET_LIMIT_ZERO, chan ? chan : user); } else { - if (!chan && na->nc == u->na->nc) + if (!chan && nc == u->nc) notice_lang(s_MemoServ, u, MEMO_UNSET_YOUR_LIMIT); else notice_lang(s_MemoServ, u, MEMO_UNSET_LIMIT, @@ -212,7 +214,7 @@ class CommandMSSet : public Command CommandReturn Execute(User *u, std::vector ¶ms) { const char *cmd = params[0].c_str(); - MemoInfo *mi = &u->na->nc->memos; + MemoInfo *mi = &u->nc->memos; if (readonly) { diff --git a/src/core/ns_access.c b/src/core/ns_access.c index 07fce81a4..7afeb1559 100644 --- a/src/core/ns_access.c +++ b/src/core/ns_access.c @@ -20,32 +20,34 @@ void myNickServHelp(User *u); class CommandNSAccess : public Command { private: - CommandReturn DoServAdminList(User *u, std::vector ¶ms, NickAlias *na) + CommandReturn DoServAdminList(User *u, std::vector ¶ms, NickCore *nc) { const char *mask = params.size() > 2 ? params[2].c_str() : NULL; char **access; int i; - if (!na->nc->accesscount) + if (!nc->accesscount) { - notice_lang(s_NickServ, u, NICK_ACCESS_LIST_X_EMPTY, na->nick); + notice_lang(s_NickServ, u, NICK_ACCESS_LIST_X_EMPTY, nc->display); return MOD_CONT; } +/* reinstate when forbidden is moved to a group flag if (na->status & NS_FORBIDDEN) { notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); return MOD_CONT; } +*/ - if (na->nc->flags & NI_SUSPENDED) + if (nc->flags & NI_SUSPENDED) { - notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick); + notice_lang(s_NickServ, u, NICK_X_SUSPENDED, nc->display); return MOD_CONT; } notice_lang(s_NickServ, u, NICK_ACCESS_LIST_X, params[1].c_str()); - for (access = na->nc->access, i = 0; i < na->nc->accesscount; ++access, ++i) + for (access = nc->access, i = 0; i < nc->accesscount; ++access, ++i) { if (mask && !match_wild(mask, *access)) continue; @@ -55,7 +57,7 @@ class CommandNSAccess : public Command return MOD_CONT; } - CommandReturn DoAdd(User *u, std::vector ¶ms, NickAlias *na, const char *mask) + CommandReturn DoAdd(User *u, std::vector ¶ms, NickCore *nc, const char *mask) { char **access; int i; @@ -66,13 +68,13 @@ class CommandNSAccess : public Command return MOD_CONT; } - if (na->nc->accesscount >= NSAccessMax) + if (nc->accesscount >= NSAccessMax) { notice_lang(s_NickServ, u, NICK_ACCESS_REACHED_LIMIT, NSAccessMax); return MOD_CONT; } - for (access = na->nc->access, i = 0; i < na->nc->accesscount; ++access, ++i) + for (access = nc->access, i = 0; i < nc->accesscount; ++access, ++i) { if (!strcmp(*access, mask)) { @@ -81,15 +83,15 @@ class CommandNSAccess : public Command } } - ++na->nc->accesscount; - na->nc->access = static_cast(srealloc(na->nc->access, sizeof(char *) * na->nc->accesscount)); - na->nc->access[na->nc->accesscount - 1] = sstrdup(mask); + ++nc->accesscount; + nc->access = static_cast(srealloc(nc->access, sizeof(char *) * nc->accesscount)); + nc->access[nc->accesscount - 1] = sstrdup(mask); notice_lang(s_NickServ, u, NICK_ACCESS_ADDED, mask); return MOD_CONT; } - CommandReturn DoDel(User *u, std::vector ¶ms, NickAlias *na, const char *mask) + CommandReturn DoDel(User *u, std::vector ¶ms, NickCore *nc, const char *mask) { char **access; int i; @@ -100,12 +102,12 @@ class CommandNSAccess : public Command return MOD_CONT; } - for (access = na->nc->access, i = 0; i < na->nc->accesscount; ++access, ++i) + for (access = nc->access, i = 0; i < nc->accesscount; ++access, ++i) { if (!stricmp(*access, mask)) break; } - if (i == na->nc->accesscount) + if (i == nc->accesscount) { notice_lang(s_NickServ, u, NICK_ACCESS_NOT_FOUND, mask); return MOD_CONT; @@ -113,33 +115,33 @@ class CommandNSAccess : public Command notice_lang(s_NickServ, u, NICK_ACCESS_DELETED, *access); delete [] *access; - --na->nc->accesscount; - if (i < na->nc->accesscount) /* if it wasn't the last entry... */ - memmove(access, access + 1, (na->nc->accesscount - i) * sizeof(char *)); - if (na->nc->accesscount) /* if there are any entries left... */ - na->nc->access = static_cast(srealloc(na->nc->access, na->nc->accesscount * sizeof(char *))); + --nc->accesscount; + if (i < nc->accesscount) /* if it wasn't the last entry... */ + memmove(access, access + 1, (nc->accesscount - i) * sizeof(char *)); + if (nc->accesscount) /* if there are any entries left... */ + nc->access = static_cast(srealloc(nc->access, nc->accesscount * sizeof(char *))); else { - free(na->nc->access); - na->nc->access = NULL; + free(nc->access); + nc->access = NULL; } return MOD_CONT; } - CommandReturn DoList(User *u, std::vector ¶ms, NickAlias *na, const char *mask) + CommandReturn DoList(User *u, std::vector ¶ms, NickCore *nc, const char *mask) { char **access; int i; - if (!na->nc->accesscount) + if (!nc->accesscount) { notice_lang(s_NickServ, u, NICK_ACCESS_LIST_EMPTY, u->nick); return MOD_CONT; } notice_lang(s_NickServ, u, NICK_ACCESS_LIST); - for (access = na->nc->access, i = 0; i < na->nc->accesscount; ++access, ++i) + for (access = nc->access, i = 0; i < nc->accesscount; ++access, ++i) { if (mask && !match_wild(mask, *access)) continue; @@ -160,7 +162,7 @@ class CommandNSAccess : public Command NickAlias *na; if (!stricmp(cmd, "LIST") && is_services_admin(u) && mask && (na = findnick(params[1].c_str()))) - return this->DoServAdminList(u, params, na); + return this->DoServAdminList(u, params, na->nc); if (mask && !strchr(mask, '@')) { @@ -168,20 +170,18 @@ class CommandNSAccess : public Command notice_lang(s_NickServ, u, MORE_INFO, s_NickServ, "ACCESS"); } - else if (!(na = u->na)) - notice_lang(s_NickServ, u, NICK_NOT_REGISTERED); + /* else if (na->status & NS_FORBIDDEN) notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); - else if (na->nc->flags & NI_SUSPENDED) - notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick); - else if (!nick_identified(u)) - notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ); + */ + else if (u->nc->flags & NI_SUSPENDED) + notice_lang(s_NickServ, u, NICK_X_SUSPENDED, u->nc->display); else if (!stricmp(cmd, "ADD")) - return this->DoAdd(u, params, na, mask); + return this->DoAdd(u, params, u->nc, mask); else if (!stricmp(cmd, "DEL")) - return this->DoDel(u, params, na, mask); + return this->DoDel(u, params, u->nc, mask); else if (!stricmp(cmd, "LIST")) - return this->DoList(u, params, na, mask); + return this->DoList(u, params, u->nc, mask); else this->OnSyntaxError(u); return MOD_CONT; diff --git a/src/core/ns_alist.c b/src/core/ns_alist.c index 1d631baa2..e6218f1e1 100644 --- a/src/core/ns_alist.c +++ b/src/core/ns_alist.c @@ -46,7 +46,7 @@ class CommandNSAList : public Command if (!is_servadmin) /* Non service admins can only see their own levels */ - na = u->na; + na = findnick(u->nick); else { /* Services admins can request ALIST on nicks. @@ -61,7 +61,7 @@ class CommandNSAList : public Command if (nick) na = findnick(nick); else - na = u->na; + na = findnick(u->nick); } /* If available, get level from arguments */ diff --git a/src/core/ns_drop.c b/src/core/ns_drop.c index 33488d8f2..2d2ffc8d9 100644 --- a/src/core/ns_drop.c +++ b/src/core/ns_drop.c @@ -39,7 +39,7 @@ class CommandNSDrop : public Command return MOD_CONT; } - if (!(na = (nick ? findnick(nick) : u->na))) + if (!(na = (nick ? findnick(nick) : findnick(u->nick)))) { if (nick) { @@ -61,7 +61,7 @@ class CommandNSDrop : public Command return MOD_CONT; } - is_mine = u->na && u->na->nc == na->nc; + is_mine = u->nc && u->nc == na->nc; if (is_mine && !nick) my_nick = sstrdup(na->nick); diff --git a/src/core/ns_forbid.c b/src/core/ns_forbid.c index 5e9f396ee..aff9aec48 100644 --- a/src/core/ns_forbid.c +++ b/src/core/ns_forbid.c @@ -61,13 +61,11 @@ class CommandNSForbid : public Command if (reason) na->last_realname = sstrdup(reason); - na->u = finduser(na->nick); - if (na->u) - na->u->na = na; + User *curr = finduser(na->nick); - if (na->u) + if (curr) { - notice_lang(s_NickServ, na->u, FORCENICKCHANGE_NOW); + notice_lang(s_NickServ, curr, FORCENICKCHANGE_NOW); collide(na, 0); } diff --git a/src/core/ns_ghost.c b/src/core/ns_ghost.c index b89d8b2be..44678bbd4 100644 --- a/src/core/ns_ghost.c +++ b/src/core/ns_ghost.c @@ -28,12 +28,11 @@ class CommandNSGhost : public Command { const char *nick = params[0].c_str(); const char *pass = params.size() > 1 ? params[1].c_str() : NULL; - NickAlias *na; - User *u2; + NickAlias *na = findnick(nick); - if (!(u2 = finduser(nick))) + if (!finduser(nick)) notice_lang(s_NickServ, u, NICK_X_NOT_IN_USE, nick); - else if (!(na = u2->na)) + else if (!na) notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); else if (na->status & NS_FORBIDDEN) notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); @@ -63,7 +62,7 @@ class CommandNSGhost : public Command } else { - if (group_identified(u, na->nc) || (!(na->nc->flags & NI_SECURE) && is_on_access(u, na->nc))) + if (u->nc == na->nc || (!(na->nc->flags & NI_SECURE) && is_on_access(u, na->nc))) { char buf[NICKMAX + 32]; snprintf(buf, sizeof(buf), "GHOST command used by %s", u->nick); diff --git a/src/core/ns_group.c b/src/core/ns_group.c index 5648c3fe3..8115a8cc4 100644 --- a/src/core/ns_group.c +++ b/src/core/ns_group.c @@ -92,19 +92,12 @@ class CommandNSGroup : public Command notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); else if (time(NULL) < u->lastnickreg + NSRegDelay) notice_lang(s_NickServ, u, NICK_GROUP_PLEASE_WAIT, NSRegDelay); - else if (u->na && (u->na->status & NS_FORBIDDEN)) - { - alog("%s: %s@%s tried to use GROUP from FORBIDden nick %s", s_NickServ, u->GetIdent().c_str(), u->host, u->nick); - notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, u->nick); - } - else if (u->na && (u->na->nc->flags & NI_SUSPENDED)) + else if (u->nc->flags & NI_SUSPENDED) { alog("%s: %s!%s@%s tried to use GROUP from SUSPENDED nick %s", s_NickServ, u->nick, u->GetIdent().c_str(), u->host, target->nick); notice_lang(s_NickServ, u, NICK_X_SUSPENDED, u->nick); } - else if (u->na && NSNoGroupChange) - notice_lang(s_NickServ, u, NICK_GROUP_CHANGE_DISABLED, s_NickServ); - else if (u->na && !nick_identified(u)) + else if (!nick_identified(u)) notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ); else if (target && (target->nc->flags & NI_SUSPENDED)) { @@ -113,7 +106,7 @@ class CommandNSGroup : public Command } else if (target->status & NS_FORBIDDEN) notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick); - else if (u->na && target->nc == u->na->nc) + else if (target->nc == u->nc) notice_lang(s_NickServ, u, NICK_GROUP_SAME, target->nick); else if (NSMaxAliases && (target->nc->aliases.count >= NSMaxAliases) && !nick_is_services_admin(target->nc)) notice_lang(s_NickServ, u, NICK_GROUP_TOO_MANY, target->nick, s_NickServ, s_NickServ); @@ -128,8 +121,8 @@ class CommandNSGroup : public Command /* If the nick is already registered, drop it. * If not, check that it is valid. */ - if (u->na) - delnick(u->na); + if (findnick(u->nick)) + delnick(findnick(u->nick)); else { int prefixlen = strlen(NSGuestNickPrefix); @@ -163,9 +156,7 @@ class CommandNSGroup : public Command } } - u->na = na; u->nc = na->nc; - na->u = u; send_event(EVENT_GROUP, 1, u->nick); alog("%s: %s!%s@%s makes %s join group of %s (%s) (e-mail: %s)", s_NickServ, u->nick, u->GetIdent().c_str(), u->host, u->nick, target->nick, target->nc->display, (target->nc->email ? target->nc->email : "none")); @@ -223,17 +214,17 @@ class CommandNSGList : public Command { const char *nick = params.size() ? params[0].c_str() : NULL; - NickAlias *na, *na2; + NickCore *nc = u->nc; int is_servadmin = is_services_admin(u); int nick_ided = nick_identified(u); int i; if (nick ? (stricmp(nick, u->nick) ? !is_servadmin : !nick_ided) : !nick_ided) notice_lang(s_NickServ, u, nick_ided ? ACCESS_DENIED : NICK_IDENTIFY_REQUIRED, s_NickServ); - else if (!nick ? !(na = u->na) : !(na = findnick(nick))) + else if (nick && (!findnick(nick) || !(nc = findnick(nick)->nc))) notice_lang(s_NickServ, u, !nick ? NICK_NOT_REGISTERED : NICK_X_NOT_REGISTERED, nick); - else if (na->status & NS_FORBIDDEN) - notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); +/* else if (na->status & NS_FORBIDDEN) + notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);*/ else { time_t expt; @@ -241,22 +232,22 @@ class CommandNSGList : public Command char buf[BUFSIZE]; int wont_expire; - notice_lang(s_NickServ, u, nick ? NICK_GLIST_HEADER_X : NICK_GLIST_HEADER, na->nc->display); - for (i = 0; i < na->nc->aliases.count; ++i) + notice_lang(s_NickServ, u, nick ? NICK_GLIST_HEADER_X : NICK_GLIST_HEADER, nc->display); + for (i = 0; i < nc->aliases.count; ++i) { - na2 = static_cast(na->nc->aliases.list[i]); - if (na2->nc == na->nc) + NickAlias *na2 = static_cast(nc->aliases.list[i]); + if (na2->nc == nc) { if (!(wont_expire = na2->status & NS_NO_EXPIRE)) { expt = na2->last_seen + NSExpire; tm = localtime(&expt); - strftime_lang(buf, sizeof(buf), na2->u, STRFTIME_DATE_TIME_FORMAT, tm); + strftime_lang(buf, sizeof(buf), finduser(na2->nick), STRFTIME_DATE_TIME_FORMAT, tm); } notice_lang(s_NickServ, u, is_services_admin(u) && !wont_expire ? NICK_GLIST_REPLY_ADMIN : NICK_GLIST_REPLY, wont_expire ? '!' : ' ', na2->nick, buf); } } - notice_lang(s_NickServ, u, NICK_GLIST_FOOTER, na->nc->aliases.count); + notice_lang(s_NickServ, u, NICK_GLIST_FOOTER, nc->aliases.count); } return MOD_CONT; } diff --git a/src/core/ns_identify.c b/src/core/ns_identify.c index 14d4f4188..891677d17 100644 --- a/src/core/ns_identify.c +++ b/src/core/ns_identify.c @@ -38,7 +38,7 @@ class CommandNSIdentify : public Command char modes[512]; int len; - if (!(na = u->na)) + if (!(na = findnick(u->nick))) { if ((nr = findrequestnick(u->nick))) notice_lang(s_NickServ, u, NICK_IS_PREREG); @@ -74,6 +74,8 @@ class CommandNSIdentify : public Command na->status |= NS_IDENTIFIED; na->last_seen = time(NULL); + u->nc = na->nc; + snprintf(tsbuf, sizeof(tsbuf), "%lu", static_cast(u->timestamp)); if (ircd->modeonreg) @@ -99,7 +101,7 @@ class CommandNSIdentify : public Command if (NSModeOnID) do_setmodes(u); - if (NSForceEmail && u->na && !u->na->nc->email) + if (NSForceEmail && u->nc && !u->nc->email) { notice_lang(s_NickServ, u, NICK_IDENTIFY_EMAIL_REQUIRED); notice_help(s_NickServ, u, NICK_IDENTIFY_EMAIL_HOWTO); @@ -108,10 +110,6 @@ class CommandNSIdentify : public Command if (!(na->status & NS_RECOGNIZED)) check_memos(u); - /* Enable nick tracking if enabled */ - if (NSNickTracking) - nsStartNickTracking(u); - /* Clear any timers */ if (na->nc->flags & NI_KILLPROTECT) del_ns_timeout(na, TO_COLLIDE); diff --git a/src/core/ns_info.c b/src/core/ns_info.c index ac586746c..93e305d6a 100644 --- a/src/core/ns_info.c +++ b/src/core/ns_info.c @@ -21,11 +21,11 @@ class CommandNSInfo : public Command { private: // cannot be const, as it is modified - void CheckOptStr(std::string &buf, int opt, const std::string &str, NickCore *nc, NickAlias *na, bool reverse_logic = false) + void CheckOptStr(std::string &buf, int opt, const std::string &str, NickCore *nc, bool reverse_logic = false) { if (reverse_logic ? !(nc->flags & opt) : (nc->flags & opt)) { - const char *commastr = getstring(na, COMMA_SPACE); + const char *commastr = getstring(nc, COMMA_SPACE); if (!buf.empty()) buf += commastr; @@ -75,7 +75,7 @@ class CommandNSInfo : public Command else if (na->status & NS_FORBIDDEN) { if (is_oper(u) && na->last_usermask) - notice_lang(s_NickServ, u, NICK_X_FORBIDDEN_OPER, nick, na->last_usermask, na->last_realname ? na->last_realname : getstring(u->na, NO_REASON)); + notice_lang(s_NickServ, u, NICK_X_FORBIDDEN_OPER, nick, na->last_usermask, na->last_realname ? na->last_realname : getstring(u, NO_REASON)); else notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick); } @@ -93,12 +93,12 @@ class CommandNSInfo : public Command /* Only show hidden fields to owner and sadmins and only when the ALL * parameter is used. -TheShadow */ - if (param && !stricmp(param, "ALL") && u->na && ((nick_identified(u) && na->nc == u->na->nc) || is_servadmin)) + if (param && !stricmp(param, "ALL") && u->nc && (na->nc == u->nc || is_servadmin)) show_hidden = 1; notice_lang(s_NickServ, u, NICK_INFO_REALNAME, na->nick, na->last_realname); - if ((nick_identified(u) && na->nc == u->na->nc) || is_servadmin) + if (show_hidden) { if (nick_is_services_root(na->nc)) notice_lang(s_NickServ, u, NICK_INFO_SERVICES_ROOT, na->nick); @@ -169,13 +169,13 @@ class CommandNSInfo : public Command std::string optbuf; - CheckOptStr(optbuf, NI_KILLPROTECT, getstring(u->na, NICK_INFO_OPT_KILL), na->nc, u->na); - CheckOptStr(optbuf, NI_SECURE, getstring(u->na, NICK_INFO_OPT_SECURE), na->nc, u->na); - CheckOptStr(optbuf, NI_PRIVATE, getstring(u->na, NICK_INFO_OPT_PRIVATE), na->nc, u->na); - CheckOptStr(optbuf, NI_MSG, getstring(u->na, NICK_INFO_OPT_MSG), na->nc, u->na); - CheckOptStr(optbuf, NI_AUTOOP, getstring(u->na, NICK_INFO_OPT_AUTOOP), na->nc, u->na, true); + CheckOptStr(optbuf, NI_KILLPROTECT, getstring(u, NICK_INFO_OPT_KILL), na->nc); + CheckOptStr(optbuf, NI_SECURE, getstring(u, NICK_INFO_OPT_SECURE), na->nc); + CheckOptStr(optbuf, NI_PRIVATE, getstring(u, NICK_INFO_OPT_PRIVATE), na->nc); + CheckOptStr(optbuf, NI_MSG, getstring(u, NICK_INFO_OPT_MSG), na->nc); + CheckOptStr(optbuf, NI_AUTOOP, getstring(u, NICK_INFO_OPT_AUTOOP), na->nc, true); - notice_lang(s_NickServ, u, NICK_INFO_OPTIONS, optbuf.empty() ? getstring(u->na, NICK_INFO_OPT_NONE) : optbuf.c_str()); + notice_lang(s_NickServ, u, NICK_INFO_OPTIONS, optbuf.empty() ? getstring(u, NICK_INFO_OPT_NONE) : optbuf.c_str()); if (na->nc->flags & NI_SUSPENDED) { @@ -193,14 +193,13 @@ class CommandNSInfo : public Command { expt = na->last_seen + NSExpire; tm = localtime(&expt); - strftime_lang(buf, sizeof(buf), na->u, STRFTIME_DATE_TIME_FORMAT, tm); + strftime_lang(buf, sizeof(buf), finduser(na->nick), STRFTIME_DATE_TIME_FORMAT, tm); notice_lang(s_NickServ, u, NICK_INFO_EXPIRE, buf); } } } - if (!show_hidden && ((u->na && (na->nc == u->na->nc) && nick_identified(u)) || is_servadmin)) - notice_lang(s_NickServ, u, NICK_INFO_FOR_MORE, s_NickServ, na->nick); + notice_lang(s_NickServ, u, NICK_INFO_FOR_MORE, s_NickServ, na->nick); } return MOD_CONT; } diff --git a/src/core/ns_list.c b/src/core/ns_list.c index b7e1cf772..938fc1fbe 100644 --- a/src/core/ns_list.c +++ b/src/core/ns_list.c @@ -120,7 +120,7 @@ class CommandNSList : public Command } } - mync = nick_identified(u) ? u->na->nc : NULL; + mync = u->nc; notice_lang(s_NickServ, u, NICK_LIST_HEADER, pattern); if (!nronly) diff --git a/src/core/ns_logout.c b/src/core/ns_logout.c index a8fe171b5..4a6be4eef 100644 --- a/src/core/ns_logout.c +++ b/src/core/ns_logout.c @@ -32,20 +32,19 @@ class CommandNSLogout : public Command const char *nick = params.size() ? params[0].c_str() : NULL; const char *param = params.size() > 1 ? params[1].c_str() : NULL; User *u2; + NickAlias *na; if (!is_services_admin(u) && nick) this->OnSyntaxError(u); else if (!(u2 = (nick ? finduser(nick) : u))) notice_lang(s_NickServ, u, NICK_X_NOT_IN_USE, nick); - else if (!u2->na) + else if (!(na = findnick(u2->nick))) { if (nick) notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); else notice_lang(s_NickServ, u, NICK_NOT_REGISTERED); } - else if (u2->na->status & NS_FORBIDDEN) - notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, u2->na->nick); else if (!nick && !nick_identified(u)) notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ); else if (nick && is_services_admin(u2)) @@ -58,7 +57,9 @@ class CommandNSLogout : public Command validate_user(u2); } else - u2->na->status &= ~(NS_IDENTIFIED | NS_RECOGNIZED); + { + na->status &= ~(NS_IDENTIFIED | NS_RECOGNIZED); + } if (ircd->modeonreg) common_svsmode(u2, ircd->modeonunreg, "1"); @@ -71,13 +72,11 @@ class CommandNSLogout : public Command else notice_lang(s_NickServ, u, NICK_LOGOUT_SUCCEEDED); - /* Stop nick tracking if enabled */ - if (NSNickTracking) - nsStopNickTracking(u2); - /* Clear any timers again */ - if (u->na->nc->flags & NI_KILLPROTECT) - del_ns_timeout(u->na, TO_COLLIDE); + if (u->nc->flags & NI_KILLPROTECT) + del_ns_timeout(na, TO_COLLIDE); + + u2->nc = NULL; /* Send out an event */ send_event(EVENT_NICK_LOGOUT, 1, u2->nick); diff --git a/src/core/ns_recover.c b/src/core/ns_recover.c index 9ae60fff4..b4e3b9d44 100644 --- a/src/core/ns_recover.c +++ b/src/core/ns_recover.c @@ -33,7 +33,7 @@ class CommandNSRecover : public Command if (!(u2 = finduser(nick))) notice_lang(s_NickServ, u, NICK_X_NOT_IN_USE, nick); - else if (!(na = u2->na)) + else if (!(na = findnick(u2->nick))) notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); else if (na->status & NS_FORBIDDEN) notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); @@ -53,7 +53,7 @@ class CommandNSRecover : public Command collide(na, 0); /* Convert NSReleaseTimeout seconds to string format */ - duration(u2->na, relstr, sizeof(relstr), NSReleaseTimeout); + duration(na->nc, relstr, sizeof(relstr), NSReleaseTimeout); notice_lang(s_NickServ, u, NICK_RECOVERED, s_NickServ, nick, relstr); } @@ -69,7 +69,7 @@ class CommandNSRecover : public Command } else { - if (group_identified(u, na->nc) || (!(na->nc->flags & NI_SECURE) && is_on_access(u, na->nc))) + if (u->nc == na->nc || (!(na->nc->flags & NI_SECURE) && is_on_access(u, na->nc))) { notice_lang(s_NickServ, u2, FORCENICKCHANGE_NOW); collide(na, 0); @@ -86,7 +86,7 @@ class CommandNSRecover : public Command char relstr[192]; /* Convert NSReleaseTimeout seconds to string format */ - duration(u->na, relstr, sizeof(relstr), NSReleaseTimeout); + duration(u->nc, relstr, sizeof(relstr), NSReleaseTimeout); notice_help(s_NickServ, u, NICK_HELP_RECOVER, relstr); do_help_limited(s_NickServ, u, this); diff --git a/src/core/ns_register.c b/src/core/ns_register.c index a79997bce..47978ad11 100644 --- a/src/core/ns_register.c +++ b/src/core/ns_register.c @@ -88,9 +88,7 @@ class CommandNSConfirm : public Command if (!force) { - u->na = na; u->nc = na->nc; - na->u = u; alog("%s: '%s' registered by %s@%s (e-mail: %s)", s_NickServ, u->nick, u->GetIdent().c_str(), u->host, nr->email ? nr->email : "none"); if (NSAddAccessOnReg) notice_lang(s_NickServ, u, NICK_REGISTERED, u->nick, na->nc->access[0]); @@ -126,10 +124,6 @@ class CommandNSConfirm : public Command notice_lang(s_NickServ, u, NICK_FORCE_REG, nr->nick); delnickrequest(nr); /* remove the nick request */ - /* Enable nick tracking if enabled */ - if (NSNickTracking) - nsStartNickTracking(u); - return MOD_CONT; } @@ -228,6 +222,7 @@ class CommandNSRegister : public CommandNSConfirm { NickRequest *nr = NULL, *anr = NULL; NickCore *nc = NULL; + NickAlias *na; int prefixlen = strlen(NSGuestNickPrefix); int nicklen = strlen(u->nick); const char *pass = params[0].c_str(); @@ -315,9 +310,10 @@ class CommandNSRegister : public CommandNSConfirm this->OnSyntaxError(u); else if (time(NULL) < u->lastnickreg + NSRegDelay) notice_lang(s_NickServ, u, NICK_REG_PLEASE_WAIT, NSRegDelay); - else if (u->na) /* i.e. there's already such a nick regged */ + else if ((na = findnick(u->nick))) { - if (u->na->status & NS_FORBIDDEN) + /* i.e. there's already such a nick regged */ + if (na->status & NS_FORBIDDEN) { alog("%s: %s@%s tried to register FORBIDden nick %s", s_NickServ, u->GetIdent().c_str(), u->host, u->nick); notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick); @@ -498,21 +494,21 @@ int do_sendregmail(User *u, NickRequest *nr) if (!nr && !u) return -1; - snprintf(buf, sizeof(buf), getstring2(NULL, NICK_REG_MAIL_SUBJECT), nr->nick); + snprintf(buf, sizeof(buf), getstring(NICK_REG_MAIL_SUBJECT), nr->nick); mail = MailRegBegin(u, nr, buf, s_NickServ); if (!mail) return -1; - fprintf(mail->pipe, getstring2(NULL, NICK_REG_MAIL_HEAD)); + fprintf(mail->pipe, getstring(NICK_REG_MAIL_HEAD)); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(NULL, NICK_REG_MAIL_LINE_1), nr->nick); + fprintf(mail->pipe, getstring(NICK_REG_MAIL_LINE_1), nr->nick); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(NULL, NICK_REG_MAIL_LINE_2), s_NickServ, nr->passcode); + fprintf(mail->pipe, getstring(NICK_REG_MAIL_LINE_2), s_NickServ, nr->passcode); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(NULL, NICK_REG_MAIL_LINE_3)); + fprintf(mail->pipe, getstring(NICK_REG_MAIL_LINE_3)); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(NULL, NICK_REG_MAIL_LINE_4)); + fprintf(mail->pipe, getstring(NICK_REG_MAIL_LINE_4)); fprintf(mail->pipe, "\n\n"); - fprintf(mail->pipe, getstring2(NULL, NICK_REG_MAIL_LINE_5), NetworkName); + fprintf(mail->pipe, getstring(NICK_REG_MAIL_LINE_5), NetworkName); fprintf(mail->pipe, "\n.\n"); MailEnd(mail); return 0; diff