summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorribosome ribosome@31f1291d-b8d6-0310-a050-a5561fc1590b <ribosome ribosome@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2005-03-26 10:05:57 +0000
committerribosome ribosome@31f1291d-b8d6-0310-a050-a5561fc1590b <ribosome ribosome@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2005-03-26 10:05:57 +0000
commitc4cdb1fe36643447c4f04e375e48bd6165355c36 (patch)
tree4ad554dc0e8804be68d25e061bec22957418e11c /src
parent2225f58c39d004e3fac4ec38e52daeb9884727be (diff)
BUILD : 1.7.8 (641) BUGS : NOTES : Added SUSPEND and UNSUSPEND to NickServ. Also added running as root check to anoperc.
git-svn-id: svn://svn.anope.org/anope/trunk@641 31f1291d-b8d6-0310-a050-a5561fc1590b git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@489 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rwxr-xr-xsrc/bin/anoperc7
-rw-r--r--src/nickserv.c144
2 files changed, 151 insertions, 0 deletions
diff --git a/src/bin/anoperc b/src/bin/anoperc
index bc0704f12..0f3900f52 100755
--- a/src/bin/anoperc
+++ b/src/bin/anoperc
@@ -47,6 +47,13 @@ if [ ! -f $ANOPEBIN$ANOPROG ] ; then
exit 1
fi
+if [ "$UID" = "0" ] ; then
+ echo "**********************************";
+ echo "Warning: Do not run anope as root!";
+ echo "**********************************";
+ exit 1
+fi
+
if [ "$1" = "start" ] ; then
if [ -f $ANOPEBIN$PIDFILE ] ; then
diff --git a/src/nickserv.c b/src/nickserv.c
index 61a14c3b5..6d821b61c 100644
--- a/src/nickserv.c
+++ b/src/nickserv.c
@@ -86,6 +86,8 @@ static int do_getemail(User * u);
static int do_sendpass(User * u);
static int do_forbid(User * u);
static int do_resend(User * u);
+static int do_suspend(User * u);
+static int do_unsuspend(User * u);
/* Obsolete commands */
static int do_link(User * u);
@@ -137,6 +139,8 @@ void moduleAddNickServCmds(void) {
c = createCommand("GETPASS", do_getpass, is_services_admin, -1,-1, -1,NICK_SERVADMIN_HELP_GETPASS, NICK_SERVADMIN_HELP_GETPASS); addCoreCommand(NICKSERV,c);
c = createCommand("GETEMAIL", do_getemail, is_services_admin, -1,-1, -1,NICK_SERVADMIN_HELP_GETEMAIL, NICK_SERVADMIN_HELP_GETEMAIL); addCoreCommand(NICKSERV,c);
c = createCommand("FORBID", do_forbid, is_services_admin, -1,-1, -1,NICK_SERVADMIN_HELP_FORBID, NICK_SERVADMIN_HELP_FORBID); addCoreCommand(NICKSERV,c);
+ c = createCommand("SUSPEND", do_suspend, is_services_admin, -1,-1, -1,NICK_SERVADMIN_HELP_SUSPEND, NICK_SERVADMIN_HELP_SUSPEND); addCoreCommand(NICKSERV,c);
+ c = createCommand("UNSUSPEND",do_unsuspend,is_services_admin, -1,-1, -1,NICK_SERVADMIN_HELP_SUSPEND, NICK_SERVADMIN_HELP_SUSPEND); addCoreCommand(NICKSERV,c);
}
/* *INDENT-ON* */
/*************************************************************************/
@@ -2541,6 +2545,8 @@ static int do_identify(User * u)
}
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
+ } else if (na->status & NS_SUSPENDED) {
+ notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_ALREADY_IDENTIFIED);
} else if (!(res = check_password(pass, na->nc->pass))) {
@@ -2845,6 +2851,8 @@ static int do_set(User * u)
notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
+ } else if (na->status & NS_SUSPENDED) {
+ notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (!is_servadmin && !nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
} else if (stricmp(cmd, "DISPLAY") == 0) {
@@ -3283,6 +3291,12 @@ static int do_access(User * u)
return MOD_CONT;
}
+ if (na->status & NS_SUSPENDED) {
+ notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
+ return MOD_CONT;
+ }
+
+
notice_lang(s_NickServ, u, NICK_ACCESS_LIST_X, mask);
mask = strtok(NULL, " ");
for (access = na->nc->access, i = 0; i < na->nc->accesscount;
@@ -3305,6 +3319,9 @@ static int do_access(User * u)
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
+ } else if (na->status & NS_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);
@@ -3555,6 +3572,11 @@ static int do_info(User * u)
notice_lang(s_NickServ, u, NICK_INFO_OPTIONS,
*buf ? buf : getstring(u->na, NICK_INFO_OPT_NONE));
+ if (na->status & NS_SUSPENDED) {
+ notice_lang(s_NickServ, u, NICK_INFO_SUSPENDED,
+ na->last_quit);
+ }
+
if (na->status & NS_NO_EXPIRE) {
notice_lang(s_NickServ, u, NICK_INFO_NO_EXPIRE);
} else {
@@ -3916,6 +3938,8 @@ static int do_recover(User * u)
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
+ } else if (na->status & NS_SUSPENDED) {
+ notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (stricmp(nick, u->nick) == 0) {
notice_lang(s_NickServ, u, NICK_NO_RECOVER_SELF);
} else if (pass) {
@@ -3960,6 +3984,8 @@ static int do_release(User * u)
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
+ } else if (na->status & NS_SUSPENDED) {
+ notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (!(na->status & NS_KILL_HELD)) {
notice_lang(s_NickServ, u, NICK_RELEASE_NOT_HELD, nick);
} else if (pass) {
@@ -4004,6 +4030,8 @@ static int do_ghost(User * u)
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
+ } else if (na->status & NS_SUSPENDED) {
+ notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (stricmp(nick, u->nick) == 0) {
notice_lang(s_NickServ, u, NICK_NO_GHOST_SELF);
} else if (pass) {
@@ -4278,6 +4306,122 @@ static int do_forbid(User * u)
/*************************************************************************/
+static int do_suspend(User * u)
+{
+
+ NickAlias *na;
+ char *nick = strtok(NULL, " ");
+ char *reason = strtok(NULL, "");
+
+ if (!nick || !reason) {
+ syntax_error(s_NickServ, u, "SUSPEND", NICK_SUSPEND_SYNTAX);
+ return MOD_CONT;
+ }
+
+ if (readonly) {
+ notice_lang(s_NickServ, u, READ_ONLY_MODE);
+ return MOD_CONT;
+ }
+
+ if ((na = findnick(nick)) == NULL) {
+ notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
+ return MOD_CONT;
+ }
+
+ if (na->status & NS_VERBOTEN) {
+ notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
+ return MOD_CONT;
+ }
+
+ if (NSSecureAdmins && nick_is_services_admin(na->nc)
+ && !is_services_root(u)) {
+ notice_lang(s_NickServ, u, PERMISSION_DENIED);
+ return MOD_CONT;
+ }
+
+ if (na) {
+ na->status |= NS_SUSPENDED;
+ na->nc->flags |= NI_SECURE;
+ na->status &= ~(NS_IDENTIFIED | NS_RECOGNIZED);
+ na->nc->flags &= ~(NI_KILLPROTECT | NI_KILL_QUICK | NI_KILL_IMMED);
+ na->last_quit = sstrdup(reason);
+
+ if (WallForbid)
+ anope_cmd_global(s_NickServ, "\2%s\2 used SUSPEND on \2%s\2",
+ u->nick, nick);
+
+ alog("%s: %s set SUSPEND for nick %s", s_NickServ, u->nick, nick);
+ notice_lang(s_NickServ, u, NICK_SUSPEND_SUCCEEDED, nick);
+ send_event(EVENT_NICK_FORBIDDEN, nick);
+
+ } else {
+
+ alog("%s: Valid SUSPEND for %s by %s failed", s_NickServ, nick,
+ u->nick);
+ notice_lang(s_NickServ, u, NICK_SUSPEND_FAILED, nick);
+
+ }
+ return MOD_CONT;
+}
+
+/*************************************************************************/
+
+static int do_unsuspend(User * u)
+{
+ NickAlias *na;
+ char *nick = strtok(NULL, " ");
+
+ if (!nick) {
+ syntax_error(s_NickServ, u, "UNSUSPEND", NICK_UNSUSPEND_SYNTAX);
+ return MOD_CONT;
+ }
+
+ if (readonly) {
+ notice_lang(s_NickServ, u, READ_ONLY_MODE);
+ return MOD_CONT;
+ }
+
+ if ((na = findnick(nick)) == NULL) {
+ notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
+ return MOD_CONT;
+ }
+
+ if (na->status & NS_VERBOTEN) {
+ notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
+ return MOD_CONT;
+ }
+ if (NSSecureAdmins && nick_is_services_admin(na->nc)
+ && !is_services_root(u)) {
+ notice_lang(s_NickServ, u, PERMISSION_DENIED);
+ return MOD_CONT;
+ }
+
+ if (na) {
+ na->status &= ~NS_SUSPENDED;
+
+ if (WallForbid)
+ anope_cmd_global(s_NickServ, "\2%s\2 used UNSUSPEND on \2%s\2",
+ u->nick, nick);
+
+ alog("%s: %s set UNSUSPEND for nick %s", s_NickServ, u->nick,
+ nick);
+ notice_lang(s_NickServ, u, NICK_UNSUSPEND_SUCCEEDED, nick);
+ send_event(EVENT_NICK_UNSUSPEND, nick);
+
+ } else {
+
+ alog("%s: Valid UNSUSPEND for %s by %s failed", s_NickServ, nick,
+ u->nick);
+ notice_lang(s_NickServ, u, NICK_UNSUSPEND_FAILED, nick);
+
+ }
+
+ return MOD_CONT;
+
+}
+
+/*************************************************************************/
+
int ns_do_register(User * u)
{
return do_register(u);