00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "module.h"
00016
00017 Command *c;
00018
00019 static int do_release(User * u);
00020 static void myNickServHelp(User * u);
00021 static int myHelpResonse(User * u);
00022
00029 int AnopeInit(int argc, char **argv)
00030 {
00031 moduleAddAuthor("Anope");
00032 moduleAddVersion(VERSION_STRING);
00033 moduleSetType(CORE);
00034
00035 c = createCommand("RELEASE", do_release, NULL, -1, -1, -1, -1, -1);
00036 moduleAddCommand(NICKSERV, c, MOD_UNIQUE);
00037 moduleAddHelp(c, myHelpResonse);
00038
00039 moduleSetNickHelp(myNickServHelp);
00040
00041 return MOD_CONT;
00042 }
00043
00047 void AnopeFini(void)
00048 {
00049
00050 }
00051
00052
00053
00058 static void myNickServHelp(User * u)
00059 {
00060 notice_lang(s_NickServ, u, NICK_HELP_CMD_RELEASE);
00061 }
00062
00067 static int myHelpResonse(User * u)
00068 {
00069 char relstr[192];
00070
00071
00072 duration(u->na, relstr, sizeof(relstr), NSReleaseTimeout);
00073
00074 notice_help(s_NickServ, u, NICK_HELP_RELEASE, relstr);
00075 do_help_limited(s_NickServ, u, c);
00076
00077 return MOD_CONT;
00078 }
00079
00085 static int do_release(User * u)
00086 {
00087 char *nick = strtok(NULL, " ");
00088 char *pass = strtok(NULL, " ");
00089 NickAlias *na;
00090
00091 if (!nick) {
00092 syntax_error(s_NickServ, u, "RELEASE", NICK_RELEASE_SYNTAX);
00093 } else if (!(na = findnick(nick))) {
00094 notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
00095 } else if (na->status & NS_VERBOTEN) {
00096 notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
00097 } else if (na->nc->flags & NI_SUSPENDED) {
00098 notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
00099 } else if (!(na->status & NS_KILL_HELD)) {
00100 notice_lang(s_NickServ, u, NICK_RELEASE_NOT_HELD, nick);
00101 } else if (pass) {
00102 int res = enc_check_password(pass, na->nc->pass);
00103 if (res == 1) {
00104 release(na, 0);
00105 notice_lang(s_NickServ, u, NICK_RELEASED);
00106 } else {
00107 notice_lang(s_NickServ, u, ACCESS_DENIED);
00108 if (res == 0) {
00109 alog("%s: RELEASE: invalid password for %s by %s!%s@%s",
00110 s_NickServ, nick, u->nick, u->username, u->host);
00111 bad_password(u);
00112 }
00113 }
00114 } else {
00115 if (group_identified(u, na->nc)
00116 || (!(na->nc->flags & NI_SECURE) && is_on_access(u, na->nc))) {
00117 release(na, 0);
00118 notice_lang(s_NickServ, u, NICK_RELEASED);
00119 } else {
00120 notice_lang(s_NickServ, u, ACCESS_DENIED);
00121 }
00122 }
00123 return MOD_CONT;
00124 }
00125
00126