#include "module.h" #define AUTHOR "DukePyrolator" #define VERSION "1.5" int my_ghost(User *u); int check_before_release(User *u); int check_before_ghost(User *u); extern int check_password(const char *plaintext, const char *password); int AnopeInit(int argc, char **argv) { Command *c; c = createCommand("ghost", check_before_ghost, NULL, -1, -1, -1, -1, -1); moduleAddCommand(NICKSERV, c, MOD_HEAD); c = createCommand("ghost",my_ghost, NULL, -1, -1, -1, -1, -1); moduleAddCommand(NICKSERV, c, MOD_TAIL); c = createCommand("release", check_before_release, NULL, -1, -1, -1, -1, -1); moduleAddCommand(NICKSERV, c, MOD_HEAD); c = createCommand("release",my_ghost, NULL, -1, -1, -1, -1, -1); moduleAddCommand(NICKSERV, c, MOD_TAIL); alog("ns_ghost: Loaded"); moduleAddAuthor(AUTHOR); moduleAddVersion(VERSION); return MOD_CONT; } int check_before_release(User *u) { char *temp = moduleGetLastBuffer(); char *nick = myStrGetToken(temp,' ',0); NickAlias *na; if (!nick) { syntax_error(s_NickServ, u, "RELEASE", NICK_RELEASE_SYNTAX); goto MODSTOP; } else if (!(na = findnick(nick))) { notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); goto MODSTOP; } else if (na->status & NS_VERBOTEN) { notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); goto MODSTOP; } else if (!(na->status & NS_KILL_HELD)) { notice_lang(s_NickServ, u, NICK_RELEASE_NOT_HELD, nick); goto MODSTOP; } if (nick) free(nick); return MOD_CONT; MODSTOP: if (nick) free(nick); return MOD_STOP; } int check_before_ghost(User *u) { char *temp = moduleGetLastBuffer(); char *nick = myStrGetToken(temp,' ',0); NickAlias *na; if (!nick) { syntax_error(s_NickServ, u, "GHOST", NICK_GHOST_SYNTAX); goto MODSTOP; } else if (!(na = findnick(nick))) { notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); goto MODSTOP; } else if (na->status & NS_VERBOTEN) { notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); goto MODSTOP; } else if (stricmp(nick, u->nick) == 0) { notice_lang(s_NickServ, u, NICK_NO_GHOST_SELF); goto MODSTOP; } if (nick) free(nick); return MOD_CONT; MODSTOP: if (nick) free(nick); return MOD_STOP; } int my_ghost(User *u) { char *temp = moduleGetLastBuffer(); char *nick = myStrGetToken(temp,' ',0); char *passwd = myStrGetToken(temp,' ',1); NickAlias *na; if ((na = findnick(nick))) { if (stricmp(nick,u->nick)==0) goto MODCONT; /* does not work at the moment because "group_identified" and "is_on_access" are declared static in anope if ((group_identified(u, na->nc) || (!(na->nc->flags & NI_SECURE) && is_on_access(u, na->nc))) { send_cmd(NULL,"SVSNICK %s %s :%ld",u->nick,nick,time(NULL)); u->na = na; u->na->status |= NS_IDENTIFIED; u->na->u = u; goto MODCONT; } */ if (passwd) { if (check_password(passwd, na->nc->pass)==1) { send_cmd(NULL,"SVSNICK %s %s :%ld",u->nick,nick,time(NULL)); u->na = na; u->na->status |= NS_IDENTIFIED; u->na->u = u; } } } MODCONT: free(nick); free(passwd); return MOD_CONT; }