]> jfr.im git - irc/quakenet/newserv.git/blame - chanserv/authcmds/auth.c
CHANSERV: add REMOTEAUTH command
[irc/quakenet/newserv.git] / chanserv / authcmds / auth.c
CommitLineData
1dd6d55d 1/* Automatically generated by refactor.pl.
2 *
3 *
56f0d0f8 4 * CMDNAME: auth
ffc280ba 5 * CMDALIASES: login ircdauth
56f0d0f8 6 * CMDLEVEL: QCMD_SECURE | QCMD_NOTAUTHED
1dd6d55d 7 * CMDARGS: 2
8 * CMDDESC: Authenticates you on the bot.
9 * CMDFUNC: csa_doauth
10 * CMDPROTO: int csa_doauth(void *source, int cargc, char **cargv);
56f0d0f8 11 * CMDHELP: Usage: @UCOMMAND@ <username> <password>
dd258305 12 * CMDHELP: Authenticates you on the bot, where:
13 * CMDHELP: username - your username
14 * CMDHELP: password - your password
15 * CMDHELP: If you do not have a username and password, see HELLO.
16 * CMDHELP: Note: due to the sensitive nature of this command, you must send the message
17 * CMDHELP: to Q@CServe.quakenet.org when using it.
18 * CMDHELP: Note: the preferred way to authenticate is to use the /AUTH command.
1dd6d55d 19 */
20
21#include "../chanserv.h"
22#include "../authlib.h"
23#include "../../lib/irc_string.h"
24#include <stdio.h>
25#include <string.h>
26
bc6c8fbe
CP
27int csa_completeauth(nick *sender, reguser *rup, char *authtype);
28
b7a95f03 29int csa_auth(void *source, int cargc, char **cargv, CRAlgorithm alg) {
1dd6d55d 30 reguser *rup;
23b85e10 31 activeuser *aup;
bc6c8fbe 32 nick *sender=source;
b7a95f03
CP
33 int challenge=0;
34 char *authtype = "AUTH";
1dd6d55d 35
b7a95f03
CP
36 if (alg) {
37 challenge=1;
38 authtype = "CHALLENGEAUTH";
39 } else if (cargc<2) {
1dd6d55d 40 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "auth");
41 return CMD_ERROR;
42 }
43
44 if (!(aup = getactiveuserfromnick(sender)))
45 return CMD_ERROR;
46
47 aup->authattempts++;
48 if (aup->authattempts > MAXAUTHATTEMPT) {
81f75fea 49/*
1dd6d55d 50 if ((aup->authattempts % 100) == 0)
b7a95f03 51 chanservwallmessage("Warning: User %s!%s@%s attempted to auth %d times. Last attempt: %s %s %s",
c0181971 52 sender->nick, sender->ident, sender->host->name->content, aup->authattempts, authtype, cargv[0], cargv[1]);
81f75fea
CP
53*/
54
0b48bbd5 55 chanservstdmessage(sender, QM_TOOMANYAUTHATTEMPTS);
b7a95f03 56 cs_log(sender,"%s FAIL too many auth attempts (last attempt: %s %s %s)", authtype, authtype, cargv[0], cargv[1]);
1dd6d55d 57 return CMD_ERROR;
58 }
59
60 if (!(rup=findreguserbynick(cargv[0]))) {
61 chanservstdmessage(sender, QM_AUTHFAIL);
b7a95f03 62 cs_log(sender,"%s FAIL bad username %s",authtype,cargv[0]);
1dd6d55d 63 return CMD_ERROR;
64 }
65
b7a95f03
CP
66 if (!challenge) {
67 if (!checkpassword(rup, cargv[1])) {
68 chanservstdmessage(sender, QM_AUTHFAIL);
69 cs_log(sender,"%s FAIL username %s bad password %s",authtype,rup->username,cargv[1]);
70 return CMD_ERROR;
71 }
72 } else {
73 if (!checkresponse(rup, aup->entropy, cargv[1], alg)) {
74 chanservstdmessage(sender, QM_AUTHFAIL);
75 cs_log(sender,"%s FAIL username %s bad response",authtype,rup->username);
76 return CMD_ERROR;
77 }
1dd6d55d 78 }
79
bc6c8fbe
CP
80 return csa_completeauth(sender, rup, authtype);
81}
82
1b75afa4
CP
83int csa_doauth(void *source, int cargc, char **cargv) {
84 return csa_auth(source, cargc, cargv, NULL);
85}
86
bc6c8fbe 87int csa_completeauth(nick *sender, reguser *rup, char *authtype) {
d72584f9 88 void *args[2];
1b75afa4 89 time_t oldlastauth;
f3b0017b 90
d72584f9 91 oldlastauth=rup->lastauth;
063103ed 92
1b75afa4
CP
93 if(!csa_completeauth2(rup, sender->nick, sender->ident, sender->host->name->content, authtype, chanservstdmessage, sender))
94 return CMD_ERROR;
3294b10b
CP
95
96 localusersetaccount(sender, rup->username, rup->ID, cs_accountflagmap(rup), rup->lastauth);
1dd6d55d 97
ef4b2323 98 chanservstdmessage(sender, QM_AUTHOK, rup->username);
99
d72584f9 100 args[0]=sender;
101 args[1]=(void *)oldlastauth;
1b75afa4 102 /* note: not triggered for REMOTEAUTH */
d72584f9 103 triggerhook(HOOK_CHANSERV_AUTH, args);
104
1dd6d55d 105 return CMD_OK;
106}