]> jfr.im git - irc/quakenet/newserv.git/commitdiff
CHANSERV: fix bug in unbanme found by X-LP where realhost of +x user is not unbanned...
authorChris Porter <redacted>
Sat, 3 Aug 2013 00:19:01 +0000 (01:19 +0100)
committerChris Porter <redacted>
Sat, 3 Aug 2013 00:19:01 +0000 (01:19 +0100)
--HG--
branch : chanserv-live

chanserv/chancmds/recover.c
chanserv/chancmds/unbanmask.c
chanserv/chancmds/unbanme.c
chanserv/chanserv.h
chanserv/chanservuser.c

index e7dd75f0fba4c7738dd153c12b872af627a9d1af..366b12a29b7d0f5db268c49c081f7f803b9f5239 100644 (file)
 #include <string.h>
 #include <stdio.h>
 
+static int nickmatchban_peerthroughhidehost(void *arg, struct chanban *ban) {
+  return nickmatchban(arg, ban, 0);
+}
+
 int csc_dorecover(void *source, int cargc, char **cargv) {
   nick *sender=source,*np;
   reguser *rup;
@@ -60,7 +64,7 @@ int csc_dorecover(void *source, int cargc, char **cargv) {
     }
 
     /* remove the registered bans that match on me */
-    cs_unbanfn(sender, cip, (UnbanFN)nickmatchban, sender, 1, 0);
+    cs_unbanfn(sender, cip, nickmatchban_peerthroughhidehost, sender, 1, 0);
 
     /* deopall */
     for (i=0,lp=cip->channel->users->content;
index f2607850c09f4c6bf7d72d1a74f836e1a016cfdd..e9a614c85309817522bb168ee18c7392c7bb81f4 100644 (file)
 #include <string.h>
 #include <stdio.h>
 
+static int banoverlap_wrapper(void *arg, struct chanban *ban) {
+  return banoverlap(arg, ban);
+}
+
 int csc_dounbanmask(void *source, int cargc, char **cargv) {
   nick *sender=source;
   chanindex *cip;
@@ -44,7 +48,7 @@ int csc_dounbanmask(void *source, int cargc, char **cargv) {
 
   theban=makeban(cargv[1]);
   /* nice cast here */
-  cs_unbanfn(sender, cip, (UnbanFN)banoverlap, theban, 1, 0);
+  cs_unbanfn(sender, cip, banoverlap_wrapper, theban, 1, 0);
   cs_log(sender,"UNBANMASK %s",bantostring(theban));
   freechanban(theban);
 
index b0fcefb80dbfb869f7c1298e3e711335d2a48ae0..fdd9eb06d866b97858b23251c804f34787afead0 100644 (file)
 #include <string.h>
 #include <stdio.h>
 
+static int nickmatchban_peerthroughhidehost(void *arg, struct chanban *ban) {
+  return nickmatchban(arg, ban, 0);
+}
+
 int csc_dounbanme(void *source, int cargc, char **cargv) {
   nick *sender=source;
   chanindex *cip;
@@ -38,7 +42,7 @@ int csc_dounbanme(void *source, int cargc, char **cargv) {
     return CMD_ERROR;
 
   /* Try to unban, if it fails we'll let the failure message speak for itself */
-  if (!cs_unbanfn(sender, cip, (UnbanFN)nickmatchban, sender, 1, 1)) {
+  if (!cs_unbanfn(sender, cip, nickmatchban_peerthroughhidehost, sender, 1, 1)) {
     chanservstdmessage(sender, QM_DONE);
   }  
 
index f2025da6419d88fb3ee573c0ede95086b50a05e3..83e5551c5830d1241a3cb3d23e5556819dbbb0de 100644 (file)
@@ -874,8 +874,7 @@ void cs_removeuser(reguser *rup);
 int checkresponse(reguser *rup, const unsigned char *entropy, const char *response, CRAlgorithm algorithm);
 int checkhashpass(reguser *rup, const char *junk, const char *hash);
 flag_t cs_sanitisechanlev(flag_t flags);
-typedef int (*UnbanFN)(void *arg, struct chanban *ban);
-int cs_unbanfn(nick *sender, chanindex *cip, UnbanFN fn, void *arg, int removepermbans, int abortonfailure);
+int cs_unbanfn(nick *sender, chanindex *cip, int (*fn)(void *arg, struct chanban *ban), void *arg, int removepermbans, int abortonfailure);
 void cs_logchanop(regchan *rcp, char *nick, reguser *rup);
 int checkreason(nick *np, char *reason);
 
index bd755bbe7d7d4fad625a3466571fe16b7cabc323..078a0acdb4108f24e296e88524b45b4343f56389 100644 (file)
@@ -1368,7 +1368,7 @@ reguser *findreguser(nick *sender, const char *str) {
  *
  * Return 0 if it works, 1 if it don't.
  */
-int cs_unbanfn(nick *sender, chanindex *cip, UnbanFN fn, void *arg, int removepermbans, int abortonfailure) {
+int cs_unbanfn(nick *sender, chanindex *cip, int (*fn)(void *arg, struct chanban *ban), void *arg, int removepermbans, int abortonfailure) {
   regban **rbh, *rbp;
   chanban **cbh, *cbp;
   regchan *rcp;