00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "module.h"
00017
00018 int do_ghost(User * u);
00019 void myNickServHelp(User * u);
00020
00027 int AnopeInit(int argc, char **argv)
00028 {
00029 Command *c;
00030
00031 moduleAddAuthor("Anope");
00032 moduleAddVersion("$Id: ns_ghost.c 1265 2007-08-26 15:33:06Z geniusdex $");
00033 moduleSetType(CORE);
00034
00035 c = createCommand("GHOST", do_ghost, NULL, NICK_HELP_GHOST, -1, -1, -1,
00036 -1);
00037 moduleAddCommand(NICKSERV, c, MOD_UNIQUE);
00038
00039 moduleSetNickHelp(myNickServHelp);
00040
00041 return MOD_CONT;
00042 }
00043
00047 void AnopeFini(void)
00048 {
00049
00050 }
00051
00052
00053
00058 void myNickServHelp(User * u)
00059 {
00060 notice_lang(s_NickServ, u, NICK_HELP_CMD_GHOST);
00061 }
00062
00068 int do_ghost(User * u)
00069 {
00070 char *nick = strtok(NULL, " ");
00071 char *pass = strtok(NULL, " ");
00072 NickAlias *na;
00073 User *u2;
00074
00075 if (!nick) {
00076 syntax_error(s_NickServ, u, "GHOST", NICK_GHOST_SYNTAX);
00077 } else if (!(u2 = finduser(nick))) {
00078 notice_lang(s_NickServ, u, NICK_X_NOT_IN_USE, nick);
00079 } else if (!(na = u2->na)) {
00080 notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
00081 } else if (na->status & NS_VERBOTEN) {
00082 notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
00083 } else if (na->nc->flags & NI_SUSPENDED) {
00084 notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
00085 } else if (stricmp(nick, u->nick) == 0) {
00086 notice_lang(s_NickServ, u, NICK_NO_GHOST_SELF);
00087 } else if (pass) {
00088 int res = enc_check_password(pass, na->nc->pass);
00089 if (res == 1) {
00090 char buf[NICKMAX + 32];
00091 snprintf(buf, sizeof(buf), "GHOST command used by %s",
00092 u->nick);
00093 if (LimitSessions) {
00094 del_session(u2->host);
00095 }
00096 kill_user(s_NickServ, nick, buf);
00097 notice_lang(s_NickServ, u, NICK_GHOST_KILLED, nick);
00098 } else {
00099 notice_lang(s_NickServ, u, ACCESS_DENIED);
00100 if (res == 0) {
00101 alog("%s: GHOST: invalid password for %s by %s!%s@%s",
00102 s_NickServ, nick, u->nick, u->username, u->host);
00103 bad_password(u);
00104 }
00105 }
00106 } else {
00107 if (group_identified(u, na->nc)
00108 || (!(na->nc->flags & NI_SECURE) && is_on_access(u, na->nc))) {
00109 char buf[NICKMAX + 32];
00110 snprintf(buf, sizeof(buf), "GHOST command used by %s",
00111 u->nick);
00112 if (LimitSessions) {
00113 del_session(u2->host);
00114 }
00115 kill_user(s_NickServ, nick, buf);
00116 notice_lang(s_NickServ, u, NICK_GHOST_KILLED, nick);
00117 } else {
00118 notice_lang(s_NickServ, u, ACCESS_DENIED);
00119 }
00120 }
00121 return MOD_CONT;
00122 }