summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864>2009-02-10 19:34:31 +0000
committerrburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864>2009-02-10 19:34:31 +0000
commitd01df85cd11ddcc83fe58ec0ba7b170979a02555 (patch)
tree651aa9f79bf523d672fa410e5d093dd8bdb00acc /src
parent1ed7d17b5dbcfae87cee82e7611ddd866b3427ea (diff)
More fixes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1983 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r--src/core/ns_help.c4
-rw-r--r--src/core/ns_identify.c2
-rw-r--r--src/core/ns_info.c8
-rw-r--r--src/core/ns_list.c7
-rw-r--r--src/core/ns_logout.c4
-rw-r--r--src/core/ns_recover.c4
-rw-r--r--src/core/ns_register.c253
7 files changed, 137 insertions, 145 deletions
diff --git a/src/core/ns_help.c b/src/core/ns_help.c
index 68351dba7..339b11f25 100644
--- a/src/core/ns_help.c
+++ b/src/core/ns_help.c
@@ -24,7 +24,7 @@ class CommandNSHelp : public Command
CommandReturn Execute(User *u, std::vector<std::string> &params)
{
- const char *cmd = params[0].c_str()
+ const char *cmd = params[0].c_str();
if (!stricmp(cmd, "SET LANGUAGE"))
{
int i;
@@ -34,6 +34,8 @@ class CommandNSHelp : public Command
}
else
mod_help_cmd(s_NickServ, u, NICKSERV, cmd);
+
+ return MOD_CONT;
}
void OnSyntaxError(User *u)
diff --git a/src/core/ns_identify.c b/src/core/ns_identify.c
index 8a104b5ab..de1a0bc26 100644
--- a/src/core/ns_identify.c
+++ b/src/core/ns_identify.c
@@ -29,7 +29,7 @@ class CommandNSIdentify : public Command
CommandReturn Execute(User *u, std::vector<std::string> &params)
{
- char *pass = params[0].c_str();
+ const char *pass = params[0].c_str();
NickAlias *na;
NickRequest *nr;
int res;
diff --git a/src/core/ns_info.c b/src/core/ns_info.c
index a1b7e82aa..1e664e35a 100644
--- a/src/core/ns_info.c
+++ b/src/core/ns_info.c
@@ -45,8 +45,8 @@ class CommandNSInfo : public Command
* Syntax: INFO <nick> {ALL}
* -TheShadow (13 Mar 1999)
*/
- char *nick = params[0].c_str();
- char *param = params.size() > 1 ? params[1].c_str() : NULL;
+ const char *nick = params[0].c_str();
+ const char *param = params.size() > 1 ? params[1].c_str() : NULL;
NickAlias *na;
NickRequest *nr = NULL;
@@ -81,9 +81,7 @@ class CommandNSInfo : public Command
else
{
struct tm *tm;
- char buf[BUFSIZE], *end;
- const char *commastr = getstring(u->na, COMMA_SPACE);
- int need_comma = 0;
+ char buf[BUFSIZE];
int nick_online = 0;
int show_hidden = 0;
time_t expt;
diff --git a/src/core/ns_list.c b/src/core/ns_list.c
index 33650db97..8e86c4857 100644
--- a/src/core/ns_list.c
+++ b/src/core/ns_list.c
@@ -14,6 +14,7 @@
/*************************************************************************/
#include "module.h"
+#include "hashcomp.h"
void myNickServHelp(User *u);
@@ -39,7 +40,7 @@ class CommandNSList : public Command
*
* UPDATE: SUSPENDED keyword is now accepted as well.
*/
- char *pattern = params[0].c_str();
+ const char *pattern = params[0].c_str();
NickAlias *na;
NickCore *mync;
unsigned nnicks, i;
@@ -106,7 +107,7 @@ class CommandNSList : public Command
{
std::string keyword;
spacesepstream keywords(params[1]);
- while (keywords.GetString(keyword))
+ while (keywords.GetToken(keyword))
{
if (!stricmp(keyword.c_str(), "FORBIDDEN"))
matchflags |= NS_FORBIDDEN;
@@ -197,6 +198,8 @@ class CommandNSList : public Command
notice_lang(s_NickServ, u, NICK_SERVADMIN_HELP_LIST);
else
notice_lang(s_NickServ, u, NICK_HELP_LIST);
+
+ return true;
}
void OnSyntaxError(User *u)
diff --git a/src/core/ns_logout.c b/src/core/ns_logout.c
index 74101d021..d7c9f1f1f 100644
--- a/src/core/ns_logout.c
+++ b/src/core/ns_logout.c
@@ -29,8 +29,8 @@ class CommandNSLogout : public Command
CommandReturn Execute(User *u, std::vector<std::string> &params)
{
- char *nick = params.size() ? params[0].c_str() : NULL;
- char *param = params.size() > 1 ? params[1].c_str() : NULL;
+ const char *nick = params.size() ? params[0].c_str() : NULL;
+ const char *param = params.size() > 1 ? params[1].c_str() : NULL;
User *u2;
if (!is_services_admin(u) && nick)
diff --git a/src/core/ns_recover.c b/src/core/ns_recover.c
index 921bdd5c7..9ae60fff4 100644
--- a/src/core/ns_recover.c
+++ b/src/core/ns_recover.c
@@ -26,8 +26,8 @@ class CommandNSRecover : public Command
CommandReturn Execute(User *u, std::vector<std::string> &params)
{
- char *nick = params[0].c_str();
- char *pass = params.size() > 1 ? params[1].c_str() : NULL;
+ const char *nick = params[0].c_str();
+ const char *pass = params.size() > 1 ? params[1].c_str() : NULL;
NickAlias *na;
User *u2;
diff --git a/src/core/ns_register.c b/src/core/ns_register.c
index 549d358fa..5eec9f8d6 100644
--- a/src/core/ns_register.c
+++ b/src/core/ns_register.c
@@ -23,17 +23,120 @@ int do_sendregmail(User *u, NickRequest *nr);
class CommandNSConfirm : public Command
{
- private:
+ protected:
+ CommandReturn ActuallyConfirmNick(User *u, NickRequest *nr, bool force)
+ {
+ NickAlias *na;
+ na = makenick(nr->nick);
+
+ if (!na)
+ {
+ alog("%s: makenick(%s) failed", s_NickServ, u->nick);
+ notice_lang(s_NickServ, u, NICK_REGISTRATION_FAILED);
+ return MOD_CONT;
+ }
+
+ int i, len;
+ char tsbuf[16];
+ char tmp_pass[PASSMAX];
+ char modes[512];
+
+ memcpy(na->nc->pass, nr->password, PASSMAX);
+ na->status = static_cast<int16>(NS_IDENTIFIED | NS_RECOGNIZED);
+
+ na->nc->flags |= NSDefFlags;
+ for (i = 0; i < RootNumber; ++i)
+ {
+ if (!stricmp(ServicesRoots[i], nr->nick))
+ {
+ na->nc->flags |= NI_SERVICES_ROOT;
+ break;
+ }
+ }
+
+ na->nc->memos.memomax = MSMaxMemos;
+
+ if (force)
+ {
+ na->last_usermask = sstrdup("*@*");
+ na->last_realname = sstrdup("unknown");
+ }
+ else
+ {
+ na->last_usermask = new char[u->GetIdent().length() + u->GetDisplayedHost().length() + 2];
+ sprintf(na->last_usermask, "%s@%s", u->GetIdent().c_str(), u->GetDisplayedHost().c_str());
+ na->last_realname = sstrdup(u->realname);
+ }
+
+ na->time_registered = na->last_seen = time(NULL);
+
+ if (NSAddAccessOnReg)
+ {
+ na->nc->accesscount = 1;
+ na->nc->access = static_cast<char **>(scalloc(sizeof(char *), 1));
+ na->nc->access[0] = create_mask(u);
+ }
+ else
+ {
+ na->nc->accesscount = 0;
+ na->nc->access = NULL;
+ }
+
+ na->nc->language = NSDefLanguage;
+ if (nr->email)
+ na->nc->email = sstrdup(nr->email);
+
+ if (!force)
+ {
+ u->na = na;
+ 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]);
+ else
+ notice_lang(s_NickServ, u, NICK_REGISTERED_NO_MASK, u->nick);
+ send_event(EVENT_NICK_REGISTERED, 1, u->nick);
+
+ if (enc_decrypt(na->nc->pass, tmp_pass, PASSMAX - 1) == 1)
+ notice_lang(s_NickServ, u, NICK_PASSWORD_IS, tmp_pass);
+
+ u->lastnickreg = time(NULL);
+ if (ircd->modeonreg)
+ {
+ len = strlen(ircd->modeonreg);
+ strncpy(modes, ircd->modeonreg, 512);
+ if (ircd->rootmodeonid && is_services_root(u))
+ strncat(modes, ircd->rootmodeonid, 512 - len);
+ else if (ircd->adminmodeonid && is_services_admin(u))
+ strncat(modes, ircd->adminmodeonid, 512 - len);
+ else if (ircd->opermodeonid && is_services_oper(u))
+ strncat(modes, ircd->opermodeonid, 512 - len);
+
+ if (ircd->tsonmode)
+ {
+ snprintf(tsbuf, sizeof(tsbuf), "%lu", static_cast<unsigned long>(u->timestamp));
+ common_svsmode(u, modes, tsbuf);
+ }
+ else
+ common_svsmode(u, modes, NULL);
+ }
+ }
+ else
+ 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;
+
+ }
+
CommandReturn DoConfirm(User *u, std::vector<std::string> &params)
{
NickRequest *nr = NULL;
- NickAlias *na = NULL;
- char *passcode = params.size() ? params[0].c_str() : NULL;
- char *email = NULL;
- int forced = 0;
- User *utmp = NULL;
- char modes[512];
- int len;
+ const char *passcode = params.size() ? params[0].c_str() : NULL;
nr = findrequestnick(u->nick);
@@ -54,19 +157,17 @@ class CommandNSConfirm : public Command
nr = findrequestnick(passcode);
if (nr)
{
- utmp = finduser(passcode);
+ User *utmp = finduser(passcode);
if (utmp)
{
- sprintf(passcode, "FORCE_ACTIVATION_DUE_TO_OPER_CONFIRM %s", nr->passcode);
- passcode = strtok(passcode, " ");
+ ActuallyConfirmNick(u, nr, false);
notice_lang(s_NickServ, u, NICK_FORCE_REG, nr->nick);
- do_confirm(utmp);
return MOD_CONT;
}
else
{
- passcode = sstrdup(nr->passcode);
- forced = 1;
+ passcode = nr->passcode;
+ ActuallyConfirmNick(u, nr, true);
}
}
else
@@ -85,8 +186,6 @@ class CommandNSConfirm : public Command
if (stricmp(nr->passcode, passcode))
{
notice_lang(s_NickServ, u, NICK_CONFIRM_INVALID);
- if (forced)
- delete [] passcode;
return MOD_CONT;
}
}
@@ -94,121 +193,14 @@ class CommandNSConfirm : public Command
if (!nr)
{
notice_lang(s_NickServ, u, NICK_REGISTRATION_FAILED);
- if (forced)
- delete [] passcode;
return MOD_CONT;
}
- if (nr->email)
- email = sstrdup(nr->email);
- na = makenick(nr->nick);
-
- if (na)
- {
- int i;
- char tsbuf[16];
- char tmp_pass[PASSMAX];
-
- memcpy(na->nc->pass, nr->password, PASSMAX);
- na->status = static_cast<int16>(NS_IDENTIFIED | NS_RECOGNIZED);
- /* na->nc->flags |= NI_ENCRYPTEDPW; */
-
- na->nc->flags |= NSDefFlags;
- for (i = 0; i < RootNumber; ++i)
- {
- if (!stricmp(ServicesRoots[i], nr->nick))
- {
- na->nc->flags |= NI_SERVICES_ROOT;
- break;
- }
- }
-
- na->nc->memos.memomax = MSMaxMemos;
-
- if (forced == 1)
- {
- na->last_usermask = sstrdup("*@*");
- na->last_realname = sstrdup("unknown");
- }
- else
- {
- na->last_usermask = new char[u->GetIdent().length() + u->GetDisplayedHost().length() + 2];
- sprintf(na->last_usermask, "%s@%s", u->GetIdent().c_str(), u->GetDisplayedHost().c_str());
- na->last_realname = sstrdup(u->realname);
- }
- na->time_registered = na->last_seen = time(NULL);
- if (NSAddAccessOnReg)
- {
- na->nc->accesscount = 1;
- na->nc->access = static_cast<char **>(scalloc(sizeof(char *), 1));
- na->nc->access[0] = create_mask(u);
- }
- else
- {
- na->nc->accesscount = 0;
- na->nc->access = NULL;
- }
- na->nc->language = NSDefLanguage;
- if (email)
- na->nc->email = sstrdup(email);
- if (forced != 1)
- {
- u->na = na;
- na->u = u;
- alog("%s: '%s' registered by %s@%s (e-mail: %s)", s_NickServ, u->nick, u->GetIdent().c_str(), u->host, email ? email : "none");
- if (NSAddAccessOnReg)
- notice_lang(s_NickServ, u, NICK_REGISTERED, u->nick, na->nc->access[0]);
- else
- notice_lang(s_NickServ, u, NICK_REGISTERED_NO_MASK, u->nick);
- send_event(EVENT_NICK_REGISTERED, 1, u->nick);
-
- if (enc_decrypt(na->nc->pass, tmp_pass, PASSMAX - 1) == 1)
- notice_lang(s_NickServ, u, NICK_PASSWORD_IS, tmp_pass);
-
- u->lastnickreg = time(NULL);
- if (ircd->modeonreg)
- {
- len = strlen(ircd->modeonreg);
- strncpy(modes, ircd->modeonreg, 512);
- if (ircd->rootmodeonid && is_services_root(u))
- strncat(modes, ircd->rootmodeonid, 512 - len);
- else if (ircd->adminmodeonid && is_services_admin(u))
- strncat(modes, ircd->adminmodeonid, 512 - len);
- else if (ircd->opermodeonid && is_services_oper(u))
- strncat(modes, ircd->opermodeonid, 512 - len);
-
- if (ircd->tsonmode)
- {
- snprintf(tsbuf, sizeof(tsbuf), "%lu", static_cast<unsigned long>(u->timestamp));
- common_svsmode(u, modes, tsbuf);
- }
- else
- common_svsmode(u, modes, NULL);
- }
- }
- else
- notice_lang(s_NickServ, u, NICK_FORCE_REG, nr->nick);
- delnickrequest(nr); /* remove the nick request */
- }
- else
- {
- alog("%s: makenick(%s) failed", s_NickServ, u->nick);
- notice_lang(s_NickServ, u, NICK_REGISTRATION_FAILED);
- }
-
- /* Enable nick tracking if enabled */
- if (NSNickTracking)
- nsStartNickTracking(u);
-
- if (forced)
- delete [] passcode;
- if (email)
- delete [] email;
-
+ ActuallyConfirmNick(u, nr, false);
return MOD_CONT;
}
public:
- CommandNSConfirm() : Command("CONFIRM", 0, 1)
+ CommandNSConfirm(const std::string &cmdn, int min, int max) : Command("CONFIRM", min, max)
{
}
@@ -227,7 +219,7 @@ class CommandNSConfirm : public Command
class CommandNSRegister : public CommandNSConfirm
{
public:
- CommandNSRegister() : Command("REGISTER", 1, 2)
+ CommandNSRegister() : CommandNSConfirm("REGISTER", 1, 2)
{
}
@@ -237,8 +229,8 @@ class CommandNSRegister : public CommandNSConfirm
NickCore *nc = NULL;
int prefixlen = strlen(NSGuestNickPrefix);
int nicklen = strlen(u->nick);
- char *pass = params[0].c_str();
- char *email = params.size() > 1 ? params[1].c_str() : NULL;
+ const char *pass = params[0].c_str();
+ const char *email = params.size() > 1 ? params[1].c_str() : NULL;
char passcode[11];
int idx, min = 1, max = 62, i = 0;
int chars[] =
@@ -346,9 +338,6 @@ class CommandNSRegister : public CommandNSConfirm
nr = makerequest(u->nick);
nr->passcode = sstrdup(passcode);
strscpy(nr->password, pass, PASSMAX);
- memset(pass, 0, strlen(pass));
- /* We are paranoid about keeping a plain text pass in memory, yet we would write
- * it to a database.. - Viper */
enc_encrypt_in_place(nr->password, PASSMAX);
if (email)
nr->email = sstrdup(email);
@@ -445,7 +434,7 @@ class NSRegister : public Module
this->SetType(CORE);
this->AddCommand(NICKSERV, new CommandNSRegister(), MOD_UNIQUE);
- this->AddCommand(NICKSERV, new CommandNSConfirm(), MOD_UNIQUE);
+ this->AddCommand(NICKSERV, new CommandNSConfirm("CONFIRM", 0, 1), MOD_UNIQUE);
this->AddCommand(NICKSERV, new CommandNSResend(), MOD_UNIQUE);
this->SetNickHelp(myNickServHelp);