00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "module.h"
00016
00017 static int do_getpass(User * u);
00018 static void myNickServHelp(User * u);
00019
00026 int AnopeInit(int argc, char **argv)
00027 {
00028 Command *c;
00029
00030 moduleAddAuthor("Anope");
00031 moduleAddVersion(VERSION_STRING);
00032 moduleSetType(CORE);
00033
00034 c = createCommand("GETPASS", do_getpass, is_services_admin, -1, -1, -1,
00035 NICK_SERVADMIN_HELP_GETPASS,
00036 NICK_SERVADMIN_HELP_GETPASS);
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
00056 static void myNickServHelp(User * u)
00057 {
00058 if (is_services_admin(u)) {
00059 notice_lang(s_NickServ, u, NICK_HELP_CMD_GETPASS);
00060 }
00061 }
00062
00068 static int do_getpass(User * u)
00069 {
00070 char *nick = strtok(NULL, " ");
00071 char tmp_pass[PASSMAX];
00072 NickAlias *na;
00073 NickRequest *nr = NULL;
00074
00075 if (!nick) {
00076 syntax_error(s_NickServ, u, "GETPASS", NICK_GETPASS_SYNTAX);
00077 } else if (!(na = findnick(nick))) {
00078 if ((nr = findrequestnick(nick))) {
00079 alog("%s: %s!%s@%s used GETPASS on %s", s_NickServ, u->nick,
00080 u->username, u->host, nick);
00081 if (WallGetpass)
00082 anope_cmd_global(s_NickServ,
00083 "\2%s\2 used GETPASS on \2%s\2", u->nick,
00084 nick);
00085 notice_lang(s_NickServ, u, NICK_GETPASS_PASSCODE_IS, nick,
00086 nr->passcode);
00087 } else {
00088 notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
00089 }
00090 } else if (na->status & NS_VERBOTEN) {
00091 notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
00092 } else if (NSSecureAdmins && nick_is_services_admin(na->nc)
00093 && !is_services_root(u)) {
00094 notice_lang(s_NickServ, u, PERMISSION_DENIED);
00095 } else if (NSRestrictGetPass && !is_services_root(u)) {
00096 notice_lang(s_NickServ, u, PERMISSION_DENIED);
00097 } else {
00098 if(enc_decrypt(na->nc->pass,tmp_pass,PASSMAX - 1)==1) {
00099 alog("%s: %s!%s@%s used GETPASS on %s", s_NickServ, u->nick,
00100 u->username, u->host, nick);
00101 if (WallGetpass)
00102 anope_cmd_global(s_NickServ, "\2%s\2 used GETPASS on \2%s\2",
00103 u->nick, nick);
00104 notice_lang(s_NickServ, u, NICK_GETPASS_PASSWORD_IS, nick,
00105 tmp_pass);
00106 } else {
00107 notice_lang(s_NickServ, u, NICK_GETPASS_UNAVAILABLE);
00108 }
00109 }
00110 return MOD_CONT;
00111 }