]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/chancmds/unbanmask.c
1 /* Automatically generated by refactor.pl.
5 * CMDLEVEL: QCMD_AUTHED
7 * CMDDESC: Removes bans matching a particular mask from a channel.
8 * CMDFUNC: csc_dounbanmask
9 * CMDPROTO: int csc_dounbanmask(void *source, int cargc, char **cargv);
12 #include "../chanserv.h"
13 #include "../../nick/nick.h"
14 #include "../../lib/flags.h"
15 #include "../../lib/irc_string.h"
16 #include "../../channel/channel.h"
17 #include "../../parser/parser.h"
18 #include "../../irc/irc.h"
19 #include "../../localuser/localuserchannel.h"
23 int csc_dounbanmask(void *source
, int cargc
, char **cargv
) {
34 chanservstdmessage(sender
, QM_NOTENOUGHPARAMS
, "unbanmask");
38 if (!(cip
=cs_checkaccess(sender
, cargv
[0], CA_OPPRIV
, NULL
, "unbanmask", 0, 0)))
41 rcp
=cip
->exts
[chanservext
];
42 theban
=makeban(cargv
[1]);
45 localsetmodeinit(&changes
, cip
->channel
, chanservnick
);
47 for (rbh
=&(rcp
->bans
); *rbh
; ) {
49 if (banoverlap(theban
, rbp
->cbp
)) {
50 banstr
=bantostring(rbp
->cbp
);
51 /* Check perms and remove */
52 if (!cs_checkaccess(sender
, NULL
, CA_MASTERPRIV
, cip
, NULL
, 0, 1)) {
53 chanservstdmessage(sender
, QM_NOTREMOVEDPERMBAN
, banstr
, cip
->name
->content
);
56 chanservstdmessage(sender
, QM_REMOVEDPERMBAN
, banstr
, cip
->name
->content
);
58 localdosetmode_ban(&changes
, banstr
, MCB_DEL
);
59 /* Remove from database */
61 /* Remove from list */
63 /* Free ban/string and update setby refcount, and free actual regban */
64 freesstring(rbp
->reason
);
65 freechanban(rbp
->cbp
);
74 for (cbh
=&(cip
->channel
->bans
); *cbh
; ) {
76 if (banoverlap(theban
, cbp
)) {
78 banstr
=bantostring(cbp
);
79 chanservstdmessage(sender
, QM_REMOVEDCHANBAN
, banstr
, cip
->name
->content
);
80 localdosetmode_ban(&changes
, banstr
, MCB_DEL
);
85 localsetmodeflush(&changes
,1);
89 chanservstdmessage(sender
, QM_DONE
);