From: Chris Porter Date: Sat, 3 Aug 2013 00:19:01 +0000 (+0100) Subject: CHANSERV: fix bug in unbanme found by X-LP where realhost of +x user is not unbanned... X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/commitdiff_plain/b08b920b83aee6eccbf9ab531f53e2b54e5d218d CHANSERV: fix bug in unbanme found by X-LP where realhost of +x user is not unbanned (involving removal of a very dubious cast) --HG-- branch : chanserv-live --- diff --git a/chanserv/chancmds/recover.c b/chanserv/chancmds/recover.c index e7dd75f0..366b12a2 100644 --- a/chanserv/chancmds/recover.c +++ b/chanserv/chancmds/recover.c @@ -26,6 +26,10 @@ #include #include +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; diff --git a/chanserv/chancmds/unbanmask.c b/chanserv/chancmds/unbanmask.c index f2607850..e9a614c8 100644 --- a/chanserv/chancmds/unbanmask.c +++ b/chanserv/chancmds/unbanmask.c @@ -29,6 +29,10 @@ #include #include +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); diff --git a/chanserv/chancmds/unbanme.c b/chanserv/chancmds/unbanme.c index b0fcefb8..fdd9eb06 100644 --- a/chanserv/chancmds/unbanme.c +++ b/chanserv/chancmds/unbanme.c @@ -25,6 +25,10 @@ #include #include +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); } diff --git a/chanserv/chanserv.h b/chanserv/chanserv.h index f2025da6..83e5551c 100644 --- a/chanserv/chanserv.h +++ b/chanserv/chanserv.h @@ -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); diff --git a/chanserv/chanservuser.c b/chanserv/chanservuser.c index bd755bbe..078a0acd 100644 --- a/chanserv/chanservuser.c +++ b/chanserv/chanservuser.c @@ -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;