cs_getpass.c

Go to the documentation of this file.
00001 /* ChanServ core functions
00002  *
00003  * (C) 2003-2007 Anope Team
00004  * Contact us at info@anope.org
00005  *
00006  * Please read COPYING and README for further details.
00007  *
00008  * Based on the original code of Epona by Lara.
00009  * Based on the original code of Services by Andy Church. 
00010  * 
00011  * $Id: cs_getpass.c 1265 2007-08-26 15:33:06Z geniusdex $
00012  *
00013  */
00014 /*************************************************************************/
00015 
00016 #include "module.h"
00017 
00018 int do_getpass(User * u);
00019 void myChanServHelp(User * u);
00020 
00027 int AnopeInit(int argc, char **argv)
00028 {
00029     Command *c;
00030 
00031     moduleAddAuthor("Anope");
00032     moduleAddVersion("$Id: cs_getpass.c 1265 2007-08-26 15:33:06Z geniusdex $");
00033     moduleSetType(CORE);
00034 
00035     c = createCommand("GETPASS", do_getpass, is_services_admin, -1, -1, -1,
00036                       CHAN_SERVADMIN_HELP_GETPASS,
00037                       CHAN_SERVADMIN_HELP_GETPASS);
00038     moduleAddCommand(CHANSERV, c, MOD_UNIQUE);
00039 
00040     moduleSetChanHelp(myChanServHelp);
00041 
00042     return MOD_CONT;
00043 }
00044 
00048 void AnopeFini(void)
00049 {
00050 
00051 }
00052 
00053 
00054 
00059 void myChanServHelp(User * u)
00060 {
00061     if (is_services_admin(u)) {
00062         notice_lang(s_ChanServ, u, CHAN_HELP_CMD_GETPASS);
00063     }
00064 }
00065 
00072 int do_getpass(User * u)
00073 {
00074     char *chan = strtok(NULL, " ");
00075     char tmp_pass[PASSMAX];
00076     ChannelInfo *ci;
00077 
00078     if (!chan) {
00079         syntax_error(s_ChanServ, u, "GETPASS", CHAN_GETPASS_SYNTAX);
00080     } else if (!(ci = cs_findchan(chan))) {
00081         notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
00082     } else if (ci->flags & CI_VERBOTEN) {
00083         notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
00084     } else if (CSRestrictGetPass && !is_services_root(u)) {
00085         notice_lang(s_ChanServ, u, PERMISSION_DENIED);
00086     } else {
00087     if(enc_decrypt(ci->founderpass,tmp_pass,PASSMAX)==1) {
00088             alog("%s: %s!%s@%s used GETPASS on %s",
00089                  s_ChanServ, u->nick, u->username, u->host, ci->name);
00090             if (WallGetpass) {
00091                 anope_cmd_global(s_ChanServ,
00092                                  "\2%s\2 used GETPASS on channel \2%s\2",
00093                                  u->nick, chan);
00094             }
00095             notice_lang(s_ChanServ, u, CHAN_GETPASS_PASSWORD_IS,
00096                         chan, ci->founderpass);
00097     } else {
00098         notice_lang(s_ChanServ, u, CHAN_GETPASS_UNAVAILABLE);
00099     }
00100     }
00101     return MOD_CONT;
00102 }

Generated on Sun Dec 30 09:26:46 2007 for Anope by  doxygen 1.5.1-20070107