]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Add getpassword.
authorChris Porter <redacted>
Sat, 8 Mar 2008 02:42:52 +0000 (02:42 +0000)
committerChris Porter <redacted>
Sat, 8 Mar 2008 02:42:52 +0000 (02:42 +0000)
Don't allow setpassword or deluser to affect staff.
Add warnings to setpassword/deluser when operations fail or complete.

chanserv/authcmds/Makefile
chanserv/authcmds/commandlist.c
chanserv/authcmds/getpassword.c [new file with mode: 0644]
chanserv/authcmds/setpassword.c
chanserv/usercmds/deluser.c

index 23f7369bbf1466421ba9582f25d1b27bd868a4e3..a26bc2f347a5a38b8c1e1bc73e9ad1fbe5567e37 100644 (file)
@@ -6,5 +6,5 @@ all: Makefile chanserv_authcmds.so
 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 $@ $^ 
index ce707d210a8930d91f712fb620f8a8dec13b08b1..1da15d62919d2f7193d8044b9916b588c67eb924 100644 (file)
@@ -9,6 +9,7 @@ int csa_dochallenge(void *source, int cargc, char **cargv);
 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);
@@ -23,6 +24,7 @@ void _init() {
   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.", "");
@@ -38,6 +40,7 @@ void _fini() {
   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);
diff --git a/chanserv/authcmds/getpassword.c b/chanserv/authcmds/getpassword.c
new file mode 100644 (file)
index 0000000..88e6837
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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;
+}
index c6384bd1b170dd4eece1789b1432aa3549e04d7b..69f4f12f66ac22002d707b987ef5c3de969d1ae4 100644 (file)
@@ -16,8 +16,8 @@
 #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");
@@ -27,11 +27,21 @@ int csa_dosetpw(void *source, int cargc, char **cargv) {
   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;
 }
index 514dc5b683ed048f8695c4ec0f2e63f963902d11..98c855400daa2ac430f051a5540da65868bd773c 100644 (file)
@@ -29,7 +29,16 @@ int csu_dodeluser(void *source, int cargc, char **cargv) {
   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);