Don't allow setpassword or deluser to affect staff.
Add warnings to setpassword/deluser when operations fail or complete.
Makefile:
../mkcommandlist.pl chanserv_authcmds.so
-chanserv_authcmds.so: auth.o authhistory.o challenge.o challengeauth.o checkhashpass.o email.o hello.o login.o newpass.o requestpassword.o setemail.o setpassword.o commandlist.o
+chanserv_authcmds.so: auth.o authhistory.o challenge.o challengeauth.o checkhashpass.o email.o getpassword.o hello.o login.o newpass.o requestpassword.o setemail.o setpassword.o commandlist.o
ld -shared -Bdynamic -o $@ $^
int csa_dochallengeauth(void *source, int cargc, char **cargv);
int csa_docheckhashpass(void *source, int cargc, char **cargv);
int csa_doemail(void *source, int cargc, char **cargv);
+int csa_dogetpw(void *source, int cargc, char **cargv);
int csa_dohello(void *source, int cargc, char **cargv);
int csa_doauth(void *source, int cargc, char **cargv);
int csa_donewpw(void *source, int cargc, char **cargv);
chanservaddcommand("challengeauth", QCMD_SECURE | QCMD_NOTAUTHED, 3, csa_dochallengeauth, "Authenticates you on the bot using challenge response.", "");
chanservaddcommand("checkhashpass", QCMD_OPER, 3, csa_docheckhashpass, "Checks supplied password against a version hashed in the database.", "");
chanservaddcommand("email", QCMD_SECURE | QCMD_AUTHED, 3, csa_doemail, "Change your email address.", "");
+ chanservaddcommand("getpassword", QCMD_OPER, 2, csa_dogetpw, "Gets a users password", "");
chanservaddcommand("hello", QCMD_NOTAUTHED, 2, csa_dohello, "Creates a new user account.", "");
chanservaddcommand("login", QCMD_SECURE | QCMD_NOTAUTHED, 2, csa_doauth, "Authenticates you on the bot.", "Usage: login <username> <password>\nAuthenticates using the supplied username and password.\n");
chanservaddcommand("newpass", QCMD_SECURE | QCMD_AUTHED, 3, csa_donewpw, "Change your password.", "");
chanservremovecommand("challengeauth", csa_dochallengeauth);
chanservremovecommand("checkhashpass", csa_docheckhashpass);
chanservremovecommand("email", csa_doemail);
+ chanservremovecommand("getpassword", csa_dogetpw);
chanservremovecommand("hello", csa_dohello);
chanservremovecommand("login", csa_doauth);
chanservremovecommand("newpass", csa_donewpw);
--- /dev/null
+/* Automatically generated by refactor.pl.
+ *
+ *
+ * CMDNAME: getpassword
+ * CMDLEVEL: QCMD_OPER
+ * CMDARGS: 2
+ * CMDDESC: Gets a users password
+ * CMDFUNC: csa_dogetpw
+ * CMDPROTO: int csa_dogetpw(void *source, int cargc, char **cargv);
+ */
+
+#include "../chanserv.h"
+#include "../authlib.h"
+#include "../../lib/irc_string.h"
+#include <stdio.h>
+#include <string.h>
+
+int csa_dogetpw(void *source, int cargc, char **cargv) {
+ reguser *rup;
+ nick *sender=source;
+ reguser *srup=getreguserfromnick(sender);
+
+ if (cargc<1) {
+ chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "getpassword");
+ return CMD_ERROR;
+ }
+
+ if (!(rup=findreguser(sender, cargv[0])))
+ return CMD_ERROR;
+
+ if(UHasHelperPriv(rup)) {
+ cs_log(sender,"GETPASSWORD FAILED username %s",rup->username);
+ chanservwallmessage("%s (%s) just FAILED using GETPASSWORD on %s", sender->nick, srup->username, rup->username);
+ chanservsendmessage(sender, "Sorry, that user is privileged.");
+ return CMD_ERROR;
+ }
+
+ cs_log(sender,"GETPASSWORD OK username %s",rup->username);
+ chanservwallmessage("%s (%s) just used GETPASSWORD on %s", sender->nick, srup->username, rup->username);
+
+ chanservsendmessage(sender, "Password is currently: %s",rup->password);
+ return CMD_OK;
+}
#include <string.h>
int csa_dosetpw(void *source, int cargc, char **cargv) {
- reguser *rup;
nick *sender=source;
+ reguser *rup, *vrup=getreguserfromnick(sender);
if (cargc<2) {
chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "setpassword");
if (!(rup=findreguser(sender, cargv[0])))
return CMD_ERROR;
+ if(UHasHelperPriv(rup)) {
+ cs_log(sender,"GETPASSWORD FAILED username %s",rup->username);
+ chanservwallmessage("%s (%s) just FAILED using SETPASSWORD on %s", sender->nick, vrup->username, rup->username);
+ chanservsendmessage(sender, "Sorry, that user is privileged.");
+ return CMD_ERROR;
+ }
+
+ cs_log(sender,"SETPASSWORD OK username %s",rup->username);
+ chanservwallmessage("%s (%s) just used SETPASSWORD on %s", sender->nick, vrup->username, rup->username);
+
strncpy(rup->password,cargv[1],PASSLEN);
rup->password[PASSLEN]='\0';
- chanservstdmessage(sender, QM_PWCHANGED);
- cs_log(sender,"SETPASSWORD OK username %s",rup->username);
csdb_updateuser(rup);
+ chanservstdmessage(sender, QM_PWCHANGED);
+
return CMD_OK;
}
if (!(target=findreguser(sender, cargv[0])))
return CMD_ERROR;
- cs_log(sender,"DELUSER %s (%s)",target->username,cargc>1?cargv[1]:"");
+ if(UHasHelperPriv(target)) {
+ cs_log(sender,"DELUSER FAILED username %s (%s)",target->username,cargc>1?cargv[1]:"");
+ chanservwallmessage("%s (%s) just FAILED using DELUSER on %s (%s)", sender->nick, rup->username, target->username, cargc>1?cargv[1]:"");
+ chanservsendmessage(sender, "Sorry, that user is privileged.");
+ return CMD_ERROR;
+ }
+
+ cs_log(sender,"DELUSER OK username %s (%s)",target->username,cargc>1?cargv[1]:"");
+ chanservwallmessage("%s (%s) just used DELUSER on %s (%s)", sender->nick, rup->username, target->username, cargc>1?cargv[1]:"");
+
cs_removeuser(target);
chanservstdmessage(sender, QM_DONE);