]>
Commit | Line | Data |
---|---|---|
1dd6d55d | 1 | /* Automatically generated by refactor.pl. |
2 | * | |
3 | * | |
4 | * CMDNAME: banclear | |
5 | * CMDLEVEL: QCMD_AUTHED | |
6 | * CMDARGS: 1 | |
7 | * CMDDESC: Removes all bans from a channel including persistent bans. | |
8 | * CMDFUNC: csc_dobanclear | |
9 | * CMDPROTO: int csc_dobanclear(void *source, int cargc, char **cargv); | |
cabd7271 | 10 | * CMDHELP: Usage: BANCLEAR <channel> |
11 | * CMDHELP: Removes all temporary and persistent bans from a channel, where: | |
12 | * CMDHELP: channel - the channel to use | |
13 | * CMDHELP: BANCLEAR requires master (+m) access on the named channel. | |
1dd6d55d | 14 | */ |
15 | ||
16 | #include "../chanserv.h" | |
17 | #include "../../nick/nick.h" | |
18 | #include "../../lib/flags.h" | |
19 | #include "../../lib/irc_string.h" | |
20 | #include "../../channel/channel.h" | |
21 | #include "../../parser/parser.h" | |
22 | #include "../../irc/irc.h" | |
23 | #include "../../localuser/localuserchannel.h" | |
24 | #include <string.h> | |
25 | #include <stdio.h> | |
26 | ||
27 | int csc_dobanclear(void *source, int cargc, char **cargv) { | |
28 | nick *sender=source; | |
29 | chanindex *cip; | |
30 | regban **rbh, *rbp; | |
31 | chanban **cbh, *cbp; | |
32 | regchan *rcp; | |
33 | modechanges changes; | |
34 | char *banstr; | |
35 | ||
36 | if (cargc<1) { | |
37 | chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "banclear"); | |
38 | return CMD_ERROR; | |
39 | } | |
40 | ||
41 | if (!(cip=cs_checkaccess(sender, cargv[0], CA_MASTERPRIV, NULL, "banclear", 0, 0))) | |
42 | return CMD_ERROR; | |
43 | ||
44 | rcp=cip->exts[chanservext]; | |
45 | ||
46 | if (cip->channel) | |
47 | localsetmodeinit(&changes, cip->channel, chanservnick); | |
48 | ||
49 | for (rbh=&(rcp->bans); *rbh; ) { | |
50 | rbp=*rbh; | |
51 | banstr=bantostring(rbp->cbp); | |
52 | chanservstdmessage(sender, QM_REMOVEDPERMBAN, banstr, cip->name->content); | |
53 | if (cip->channel) | |
54 | localdosetmode_ban(&changes, banstr, MCB_DEL); | |
55 | /* Remove from database */ | |
56 | csdb_deleteban(rbp); | |
57 | /* Remove from list */ | |
58 | (*rbh)=rbp->next; | |
59 | /* Free ban/string and update setby refcount, and free actual regban */ | |
60 | freesstring(rbp->reason); | |
61 | freechanban(rbp->cbp); | |
62 | freeregban(rbp); | |
63 | } | |
64 | ||
65 | if (cip->channel) { | |
66 | for (cbh=&(cip->channel->bans); *cbh; ) { | |
67 | cbp=*cbh; | |
68 | banstr=bantostring(cbp); | |
69 | chanservstdmessage(sender, QM_REMOVEDCHANBAN, banstr, cip->name->content); | |
70 | localdosetmode_ban(&changes, banstr, MCB_DEL); | |
71 | } | |
72 | localsetmodeflush(&changes,1); | |
73 | } | |
74 | ||
75 | chanservstdmessage(sender, QM_DONE); | |
76 | return CMD_OK; | |
77 | } |