]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/usercmds/spewdomain.c
Merge pull request #132 from retropc/lua_country
[irc/quakenet/newserv.git] / chanserv / usercmds / spewdomain.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: spewdomain
5 * CMDLEVEL: QCMD_OPER
6 * CMDARGS: 1
7 * CMDDESC: Spew Mail Domains.
8 * CMDFUNC: csu_dospewdomain
9 * CMDPROTO: int csu_dospewdomain(void *source, int cargc, char **cargv);
10 * CMDHELP: Usage: spewdomain <pattern>
11 * CMDHELP: Displays all mail domains that match the specified pattern.
12 */
13
14 #include "../chanserv.h"
15 #include "../../lib/irc_string.h"
16 #include "../../lib/strlfunc.h"
17 #include <stdio.h>
18 #include <string.h>
19
20 int csu_dospewdomain(void *source, int cargc, char **cargv) {
21 nick *sender=source;
22 reguser *rup=getreguserfromnick(sender);
23 int i;
24 unsigned int count=0;
25 maildomain *smdp;
26 int limit=0, actlimit=0;
27 char flagbuf[100], smallbuf[20];
28
29 if (!rup)
30 return CMD_ERROR;
31
32 if (cargc < 1) {
33 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "spewdomain");
34 return CMD_ERROR;
35 }
36
37 chanservstdmessage(sender, QM_SPEWDOMAINHEADER);
38 maildomain *mdp;
39
40 for (i=0;i<MAILDOMAINHASHSIZE;i++) {
41 for (mdp=maildomainnametable[i]; mdp; mdp=mdp->nextbyname) {
42 if (!match(cargv[0], mdp->name->content)) {
43 limit = 0; actlimit=0;
44 for(smdp=mdp;smdp;smdp=smdp->parent) {
45 if(smdp->limit) {
46 limit = smdp->limit;
47 break;
48 }
49 }
50 for(smdp=mdp;smdp;smdp=smdp->parent) {
51 if(smdp->actlimit) {
52 actlimit = smdp->actlimit;
53 break;
54 }
55 }
56
57 snprintf(flagbuf, sizeof(flagbuf), "%s",printflags(mdp->flags, mdflags));
58 if(MDHasLimit(mdp)) {
59 snprintf(smallbuf, sizeof(smallbuf), " %d", limit);
60 strlcat(flagbuf, smallbuf, sizeof(flagbuf));
61 }
62
63 if(MDHasActLimit(mdp)) {
64 snprintf(smallbuf, sizeof(smallbuf), " %d", actlimit);
65 strlcat(flagbuf, smallbuf, sizeof(flagbuf));
66 }
67
68 /***@@@ bug here? i.e. we recurse up to find limit, then check MDHaslimit for current domain only?*/
69 chanservsendmessage(sender, "%-19s %-7d %s", mdp->name->content, mdp->count, flagbuf);
70 count++;
71 if (count >= 2000) {
72 chanservstdmessage(sender, QM_TOOMANYRESULTS, 2000, "domains");
73 return CMD_ERROR;
74 }
75 }
76 }
77 }
78 chanservstdmessage(sender, QM_RESULTCOUNT, count, "domain", (count==1)?"":"s");
79
80 return CMD_OK;
81 }