mirror of
https://github.com/anope/anope.git
synced 2026-07-10 13:03:12 +02:00
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
This commit is contained in:
parent
2225f58c39
commit
c4cdb1fe36
@@ -1,6 +1,8 @@
|
||||
Anope Version S V N
|
||||
-------------------
|
||||
Provided by Anope Dev. <dev@anope.org> - 2005
|
||||
03/25 A Added nickserv suspend/unsuspend command. [ #00]
|
||||
03/25 A Added check for UID in anoperc. Stops running as root. [ #00]
|
||||
03/11 A Event for database backups. [ #00]
|
||||
03/09 A Documentation on the proxy detector in docs/PROXY. [ #00]
|
||||
03/03 A ShadowIRCD 4.0 beta 7 support added. [ #00]
|
||||
|
||||
@@ -7,6 +7,15 @@ Anope Version S V N
|
||||
CHAN_GETKEY_NOKEY
|
||||
CHAN_GETKEY_KEY
|
||||
OPER_SET_SQL_ERROR_DISABLED
|
||||
NICK_X_SUSPENDED
|
||||
NICK_INFO_SUSPENDED
|
||||
NICK_SUSPEND_SYNTAX
|
||||
NICK_SUSPEND_SUCCEEDED
|
||||
NICK_SUSPEND_FAILED
|
||||
NICK_UNSUSPEND_SYNTAX
|
||||
NICK_UNSUSPEND_SUCCEEDED
|
||||
NICK_UNSUSPEND_FAILED
|
||||
NICK_SERVADMIN_HELP_SUSPEND
|
||||
|
||||
*** Mod Strings:
|
||||
OPER_HELP_SET
|
||||
|
||||
@@ -47,4 +47,6 @@
|
||||
#define EVENT_SERVER_SQUIT "server_squit"
|
||||
#define EVENT_SERVER_CONNECT "server_connect"
|
||||
#define EVENT_DEFCON_LEVEL "defcon_level"
|
||||
#define EVENT_NICK_SUSPENDED "nick_suspended"
|
||||
#define EVENT_NICK_UNSUSPEND "nick_unsuspend"
|
||||
|
||||
|
||||
+1
-1
@@ -1074,6 +1074,7 @@ struct session_ {
|
||||
#define NS_MASTER 0x0200 /* Was a master nick; used to import old databases */
|
||||
#define NS_TRANSGROUP 0xC000 /* Status flags that can be passed to a nick of the
|
||||
same group during nick change */
|
||||
#define NS_SUSPENDED 0x0400 /* Nickname has been suspended */
|
||||
#define NS_TEMPORARY 0xFF00 /* All temporary status flags */
|
||||
/* These two are not used anymore */
|
||||
#define NS_OLD_ENCRYPTEDPW 0x0001 /* Nickname password is encrypted */
|
||||
@@ -1097,7 +1098,6 @@ struct session_ {
|
||||
#define NI_SERVICES_ROOT 0x00008000 /* User is a Services root */
|
||||
#define NI_MEMO_MAIL 0x00010000 /* User gets email on memo */
|
||||
#define NI_HIDE_STATUS 0x00020000 /* Don't show services access status */
|
||||
|
||||
/* Languages. Never insert anything in the middle of this list, or
|
||||
* everybody will start getting the wrong language! If you want to change
|
||||
* the order the languages are displayed in for NickServ HELP SET LANGUAGE,
|
||||
|
||||
@@ -206,6 +206,8 @@ NICK_X_ILLEGAL
|
||||
Nick %s is an illegal nickname and cannot be used.
|
||||
NICK_X_TRUNCATED
|
||||
Nick %s was truncated to %d characters.
|
||||
NICK_X_SUSPENDED
|
||||
Nick %s is currently suspended.
|
||||
CHAN_X_NOT_REGISTERED
|
||||
Channel %s isn't registered.
|
||||
CHAN_X_NOT_IN_USE
|
||||
@@ -611,6 +613,8 @@ NICK_INFO_NO_EXPIRE
|
||||
This nickname will not expire.
|
||||
NICK_INFO_FOR_MORE
|
||||
For more verbose information, type /msg %s INFO %s ALL.
|
||||
NICK_INFO_SUSPENDED
|
||||
This nickname is currently suspended, reason: %s
|
||||
|
||||
# LIST responses
|
||||
NICK_LIST_SYNTAX
|
||||
@@ -713,6 +717,22 @@ NICK_SENDPASS_LINE_5
|
||||
NICK_SENDPASS_OK
|
||||
Password of %s has been sent.
|
||||
|
||||
# SUSPEND responses
|
||||
NICK_SUSPEND_SYNTAX
|
||||
SUSPEND nickname reason
|
||||
NICK_SUSPEND_SUCCEEDED
|
||||
Nick %s is now suspended.
|
||||
NICK_SUSPEND_FAILED
|
||||
Couldn't suspend nick %s!
|
||||
|
||||
# UNSUSPEND responses
|
||||
NICK_UNSUSPEND_SYNTAX
|
||||
UNSUSPEND nickname
|
||||
NICK_UNSUSPEND_SUCCEEDED
|
||||
Nick %s is now released.
|
||||
NICK_UNSUSPEND_FAILED
|
||||
Couldn't release nick %s!
|
||||
|
||||
# FORBID responses
|
||||
NICK_FORBID_SYNTAX
|
||||
FORBID nickname [reason]
|
||||
@@ -3713,6 +3733,13 @@ NICK_SERVADMIN_HELP_FORBID
|
||||
|
||||
Limited to Services admins.
|
||||
|
||||
NICK_SERVADMIN_HELP_SUSPEND
|
||||
Syntax: SUSPEND nickname reason / UNSUSPEND nickname
|
||||
|
||||
SUSPENDs / UNSUSPENDs a nickname from being identified to
|
||||
|
||||
Limited to Services admins.
|
||||
|
||||
###########################################################################
|
||||
#
|
||||
# ChanServ help messages
|
||||
|
||||
@@ -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
|
||||
|
||||
+144
@@ -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);
|
||||
|
||||
+5
-1
@@ -8,10 +8,14 @@
|
||||
VERSION_MAJOR="1"
|
||||
VERSION_MINOR="7"
|
||||
VERSION_PATCH="8"
|
||||
VERSION_BUILD="640"
|
||||
VERSION_BUILD="641"
|
||||
|
||||
# $Log$
|
||||
#
|
||||
# BUILD : 1.7.8 (641)
|
||||
# BUGS :
|
||||
# NOTES : Added SUSPEND and UNSUSPEND to NickServ. Also added running as root check to anoperc.
|
||||
#
|
||||
# BUILD : 1.7.8 (640)
|
||||
# BUGS : 323
|
||||
# NOTES : Fixed /ns update setting +a if you had rights to get +q but already had it
|
||||
|
||||
Reference in New Issue
Block a user