]> jfr.im git - irc/quakenet/newserv.git/blame - chanserv/newsearch/interface.c
New module: nickwatch
[irc/quakenet/newserv.git] / chanserv / newsearch / interface.c
CommitLineData
20b9980a 1#include "../chanserv.h"
4a3ebc9e 2#include "../../lib/stringbuf.h"
6d349eb0 3#include "chanserv_newsearch.h"
20b9980a
CP
4#include <stdio.h>
5#include <stdarg.h>
6
4a3ebc9e
CP
7static char *concatargs(int cargc, char **cargv) {
8 static char bigbuf[1024];
9 StringBuf b;
10 int i;
11
12 sbinit(&b, bigbuf, sizeof(bigbuf));
13 for(i=0;i<cargc;i++) {
14 sbaddstr(&b, cargv[i]);
15 sbaddchar(&b, ' ');
16 }
17 sbterminate(&b);
18
19 return bigbuf;
20}
21
20b9980a
CP
22static void chanservmessagewrapper(nick *np, char *format, ...) {
23 char buf[1024];
24 va_list ap;
25
26 va_start(ap, format);
27 vsnprintf(buf, sizeof(buf), format, ap);
28 va_end(ap);
29
30 chanservsendmessage(np, "%s", buf);
31}
32
33static void chanservwallwrapper(int level, char *format, ...) {
34 char buf[1024];
35 va_list ap;
36
37 va_start(ap, format);
38 vsnprintf(buf, sizeof(buf), format, ap);
39 va_end(ap);
40
41 chanservwallmessage("%s", buf);
42}
43
44int cs_donicksearch(void *source, int cargc, char **cargv) {
45 nick *sender=source;
46
47 if (cargc < 1) {
48 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "nicksearch");
49 return CMD_ERROR;
50 }
51
4a3ebc9e 52 cs_log(source, "NICKSEARCH %s", concatargs(cargc, cargv));
20b9980a
CP
53 do_nicksearch_real(chanservmessagewrapper, chanservwallwrapper, source, cargc, cargv);
54
55 chanservstdmessage(sender, QM_DONE);
56 return CMD_OK;
57}
58
59int cs_dochansearch(void *source, int cargc, char **cargv) {
60 nick *sender=source;
61
62 if (cargc < 1) {
63 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "chansearch");
64 return CMD_ERROR;
65 }
66
4a3ebc9e 67 cs_log(source, "CHANSEARCH %s", concatargs(cargc, cargv));
20b9980a
CP
68 do_chansearch_real(chanservmessagewrapper, chanservwallwrapper, source, cargc, cargv);
69
70 chanservstdmessage(sender, QM_DONE);
71 return CMD_OK;
72}
73
6d349eb0
CP
74int cs_dousersearch(void *source, int cargc, char **cargv) {
75 nick *sender=source;
76
77 if (cargc < 1) {
78 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "usersearch");
79 return CMD_ERROR;
80 }
81
4a3ebc9e 82 cs_log(source, "USERSEARCH %s", concatargs(cargc, cargv));
6d349eb0
CP
83 do_usersearch_real(chanservmessagewrapper, chanservwallwrapper, source, cargc, cargv);
84
85 chanservstdmessage(sender, QM_DONE);
86 return CMD_OK;
87}
88
2181a10f
CP
89void showheader(void *source, void *header) {
90 long iheader = (long)header;
91
92 chanservstdmessage(source, iheader);
93}
94
e1c7b7a9 95int cs_dospewemail(void *source, int cargc, char **cargv) {
68d05acb 96 searchASTExpr tree;
6d349eb0 97
d98f606a
CP
98 if(cargc < 1) {
99 chanservstdmessage(source, QM_NOTENOUGHPARAMS, "spewemail");
100 return CMD_ERROR;
101 }
6d349eb0 102
4a3ebc9e
CP
103 cs_log(source, "SPEWEMAIL %s", cargv[0]);
104
6d349eb0 105 tree = NSASTNode(match_parse, NSASTNode(qemail_parse), NSASTLiteral(cargv[0]));
4860501e 106 return ast_usersearch(&tree, chanservmessagewrapper, source, chanservwallwrapper, printauth, showheader, (void *)QM_SPEWHEADER, 2000, NULL);
6d349eb0
CP
107}
108
e1c7b7a9 109int cs_dospewdb(void *source, int cargc, char **cargv) {
68d05acb 110 searchASTExpr tree;
6d349eb0 111
d98f606a
CP
112 if(cargc < 1) {
113 chanservstdmessage(source, QM_NOTENOUGHPARAMS, "spewdb");
114 return CMD_ERROR;
115 }
6d349eb0 116
4a3ebc9e
CP
117 cs_log(source, "SPEWDB %s", cargv[0]);
118
6d349eb0
CP
119 tree =
120 NSASTNode(or_parse,
121 NSASTNode(match_parse, NSASTNode(qusername_parse), NSASTLiteral(cargv[0])),
122 NSASTNode(match_parse, NSASTNode(qsuspendreason_parse), NSASTLiteral(cargv[0])),
123 NSASTNode(match_parse, NSASTNode(qemail_parse), NSASTLiteral(cargv[0])),
124 NSASTNode(match_parse, NSASTNode(qlasthost_parse), NSASTLiteral(cargv[0])),
125 );
4860501e 126 return ast_usersearch(&tree, chanservmessagewrapper, source, chanservwallwrapper, printauth, showheader, (void *)QM_SPEWHEADER, 2000, NULL);
6d349eb0
CP
127}
128