]> jfr.im git - irc/quakenet/newserv.git/blame - trojanscan/trojanscan.h
Merge default.
[irc/quakenet/newserv.git] / trojanscan / trojanscan.h
CommitLineData
c86edd1d
Q
1#ifndef __trojanscan_H
2#define __trojanscan_H
3
4#include "../core/config.h"
5#include "../core/schedule.h"
6#include "../lib/irc_string.h"
7#include "../lib/splitline.h"
31f37482 8#include "../lib/strlfunc.h"
c86edd1d
Q
9#include "../localuser/localuserchannel.h"
10
11#include <assert.h>
12#include <mysql/mysql.h>
13#include <mysql/mysql_version.h>
14#include <pcre.h>
15#include <stdarg.h>
16#include <stdio.h>
17#include <string.h>
c8fdcfa5
CP
18#include <ctype.h>
19#include <strings.h>
c86edd1d 20
72829a0c 21#define TROJANSCAN_VERSION "2.72"
c86edd1d 22
f49909c3
CP
23#define TROJANSCAN_CLONE_MAX 75
24#define TROJANSCAN_WATCHCLONE_MAX 75
c86edd1d
Q
25#define TROJANSCAN_CLONE_TOTAL TROJANSCAN_CLONE_MAX + TROJANSCAN_WATCHCLONE_MAX
26
27#define TROJANSCAN_POOLSIZE 1000
20b84796 28#define TROJANSCAN_MINPOOLSIZE 500 /* 500 */
c86edd1d 29
1fbd040c 30#define TROJANSCAN_MINIMUM_HOSTS_BEFORE_POOL 5000 /* 5000 */
c86edd1d 31
31f37482 32#define TROJANSCAN_DEFAULT_MAXCHANS 750
f49909c3 33#define TROJANSCAN_DEFAULT_CYCLETIME 1600
c86edd1d 34
20b84796 35#define TROJANSCAN_DEFAULT_MINIMUM_CHANNEL_SIZE 100 /* 100 */
c86edd1d 36
72829a0c 37#define TROJANSCAN_NICKCHANGE_ODDS 16
c86edd1d
Q
38#define TROJANSCAN_INVISIBLE_ODDS 8
39
72829a0c 40#define TROJANSCAN_DEFAULT_PARTTIME 260
c86edd1d
Q
41#define TROJANSCAN_DEFAULT_MAXUSERS 20
42
43#define TROJANSCAN_POOL_REGENERATION 3600
44
378cf1b9
CP
45#define TROJANSCAN_HOST_POOL 0x00
46#define TROJANSCAN_STEAL_HOST 0x01
47
72829a0c 48#define TROJANSCAN_EPIDEMIC_MULTIPLIER 20
378cf1b9
CP
49
50#define TROJANSCAN_HOST_MODE TROJANSCAN_STEAL_HOST
51
72829a0c 52#define TROJANSCAN_MAX_CLONE_COUNT 3
707e6470 53
c86edd1d
Q
54#define TROJANSCAN_CAT "./trojanscan/cat.txt"
55
e3448309 56#define TROJANSCAN_CHANNEL "#qnet.trj"
c86edd1d
Q
57#define TROJANSCAN_OPERCHANNEL "#twilightzone"
58
59#define TROJANSCAN_URL_PREFIX "http://trojanscan.quakenet.org/?"
60
61#define TROJANSCAN_MMAX(a, b) a > b ? a : b
62#define TROJANSCAN_MMIN(a, b) a > b ? b : a
63
64#define TROJANSCAN_NORMAL_CLONES 0
65#define TROJANSCAN_WATCH_CLONES 1
66
67#define TROJANSCAN_QUERY_TEMP_BUF_SIZE 1040
68#define TROJANSCAN_QUERY_BUF_SIZE 5040
69
31f37482 70#define TROJANSCAN_FIRST_OFFENSE 12
c86edd1d
Q
71#define TROJANSCAN_IPLEN 20
72
73#define TROJANSCAN_VERSION_DETECT "\001VERSION"
72829a0c 74#define TROJANSCAN_DEFAULT_VERSION_REPLY "mIRC v6.35 Khaled Mardam-Bey"
c86edd1d
Q
75
76typedef struct trojanscan_clones {
77 int remaining, sitting, index;
78 nick *clone;
21ec3379 79 patricia_node_t *fakeipnode;
c86edd1d
Q
80} trojanscan_clones;
81
82typedef struct trojanscan_channels {
83 sstring *name;
84 unsigned exempt : 1;
85} trojanscan_channels;
86
87typedef struct trojanscan_worms {
88 int id;
89 sstring *name;
90 unsigned glinehost : 1;
91 unsigned glineuser : 1;
92 unsigned monitor : 1;
93 unsigned datalen : 1;
94 unsigned hitpriv : 1;
95 unsigned hitchans : 1;
378cf1b9 96 unsigned epidemic : 1;
c86edd1d
Q
97} trojanscan_worms;
98
99typedef struct trojanscan_phrases {
100 int id;
101 pcre *phrase;
102 pcre_extra *hint;
103 trojanscan_worms *worm;
104} trojanscan_phrases;
105
106typedef struct trojanscan_db {
107 int total_channels, total_phrases, total_worms, detections, glines;
108 trojanscan_channels *channels;
109 trojanscan_phrases *phrases;
110 trojanscan_worms *worms;
111} trojanscan_db;
112
113typedef struct trojanscan_prechannels {
114 sstring *name;
115 int size;
378cf1b9 116 struct trojanscan_clones *watch_clone;
c86edd1d
Q
117 struct trojanscan_prechannels *next;
118 unsigned exempt : 1;
119} trojanscan_prechannels;
120
121typedef struct trojanscan_realchannels {
122 channel *chan;
123 struct trojanscan_clones *clone;
124 struct trojanscan_realchannels *next;
125 void *schedule;
126 char donotpart;
127 int kickedout;
128} trojanscan_realchannels;
129
130typedef struct trojanscan_userflags {
131 unsigned unauthed : 1;
132 unsigned cat : 1;
133 unsigned website : 1;
134 unsigned staff : 1;
135 unsigned teamleader : 1;
136 unsigned developer : 1;
137} trojanscan_userflags;
138
139typedef union trojanscan_userlevel {
140 char number;
141 struct trojanscan_userflags values;
142} trojanscan_userlevel;
143
144typedef struct trojanscan_flagmodification {
145 char addition;
146 char flag;
147} trojanscan_flagmodification;
148
149typedef struct trojanscan_rejoinlist {
150 sstring *channel;
2e9a528b 151 trojanscan_clones *clone;
c86edd1d
Q
152 void *schedule;
153 struct trojanscan_realchannels *rp;
154 struct trojanscan_rejoinlist *next;
155} trojanscan_rejoinlist;
156
378cf1b9
CP
157typedef struct trojanscan_inchannel {
158 sstring *channel;
159 struct trojanscan_clones *watch_clone;
160} trojanscan_inchannel;
161
162typedef struct trojanscan_templist {
163 struct trojanscan_clones *watch_clone;
164 char active; /* required as copy of trojanscan_inchannel could be nil unfortunatly */
165} trojanscan_templist;
166
c86edd1d
Q
167typedef MYSQL_RES trojanscan_database_res;
168typedef MYSQL_ROW trojanscan_database_row;
169typedef MYSQL trojanscan_database_connection;
170
171#define TROJANSCAN_FLAG_MASK "%s%s%s%s%s"
172
173#define TrojanscanIsCat(x) (x.values.cat)
174#define TrojanscanIsWebsite(x) (x.values.website)
175#define TrojanscanIsStaff(x) (x.values.staff)
176#define TrojanscanIsDeveloper(x) (x.values.developer)
177#define TrojanscanIsTeamLeader(x) (x.values.teamleader)
178
179#define TrojanscanIsLeastTeamLeader(x) ((TrojanscanIsTeamLeader(x) | TrojanscanIsDeveloper(x)))
180#define TrojanscanIsLeastWebsite(x) ((TrojanscanIsWebsite(x) | TrojanscanIsDeveloper(x)))
181#define TrojanscanIsLeastStaff(x) ((TrojanscanIsStaff(x) | TrojanscanIsTeamLeader(x) | TrojanscanIsDeveloper(x)))
182
183#define TrojanscanFlagsInfo(flags) TrojanscanIsDeveloper(flags) ? "d" : "", TrojanscanIsTeamLeader(flags) ? "t" : "", TrojanscanIsStaff(flags) ? "s" : "", TrojanscanIsWebsite(flags) ? "w" : "", TrojanscanIsCat(flags) ? "c" : ""
184
185#define TROJANSCAN_ACL_UNAUTHED 0x01
186#define TROJANSCAN_ACL_STAFF 0x02
187#define TROJANSCAN_ACL_OPER 0x04
188#define TROJANSCAN_ACL_DEVELOPER 0x08
189#define TROJANSCAN_ACL_CAT 0x10
190#define TROJANSCAN_ACL_WEBSITE 0x20
191#define TROJANSCAN_ACL_TEAMLEADER 0x40
192
193int trojanscan_status(void *sender, int cargc, char **cargv);
194int trojanscan_showcommands(void *sender, int cargc, char **cargv);
195int trojanscan_help(void *sender, int cargc, char **cargv);
196int trojanscan_hello(void *sender, int cargc, char **cargv);
197int trojanscan_userjoin(void *sender, int cargc, char **cargv);
198int trojanscan_changelev(void *sender, int cargc, char **cargv);
199int trojanscan_deluser(void *sender, int cargc, char **cargv);
200int trojanscan_rehash(void *sender, int cargc, char **cargv);
201int trojanscan_mew(void *sender, int cargc, char **cargv);
202int trojanscan_cat(void *sender, int cargc, char **cargv);
203int trojanscan_reschedule(void *sender, int cargc, char **cargv);
204int trojanscan_chanlist(void *sender, int cargc, char **cargv);
205int trojanscan_whois(void *sender, int cargc, char **cargv);
206int trojanscan_listusers(void *sender, int cargc, char **cargv);
207
208char trojanscan_getmtfrommessagetype(int input);
209
210void trojanscan_handlemessages(nick *target, int messagetype, void **args);
211void trojanscan_clonehandlemessages(nick *target, int messagetype, void **args);
bb4b25ee
CP
212void trojanscan_mainchanmsg(char *message, ...) __attribute__ ((format (printf, 1, 2)));
213void trojanscan_peonchanmsg(char *message, ...) __attribute__ ((format (printf, 1, 2)));
214void trojanscan_reply(nick *target, char *message, ... ) __attribute__ ((format (printf, 2, 3)));
215void trojanscan_privmsg_chan_or_nick(channel *cp, nick *np, char *text, ...) __attribute__ ((format (printf, 3, 4)));
c86edd1d
Q
216
217void trojanscan_connect(void *arg);
218void trojanscan_dojoin(void *arg);
219void trojanscan_dopart(void *arg);
220void trojanscan_donickchange(void *arg);
221void trojanscan_registerclones(void *arg);
222void trojanscan_fill_channels(void *arg);
223void trojanscan_rehash_schedule(void *arg);
224void trojanscan_rejoin_channel(void *arg);
225
226void trojanscan_read_database(int first_time);
227void trojanscan_free_database(void);
228
229struct trojanscan_realchannels *trojanscan_allocaterc(char *chan);
230void trojanscan_join(trojanscan_realchannels *rc);
231struct trojanscan_clones *trojanscan_selectclone(char type);
232void trojanscan_free_channels(void);
233int trojanscan_add_ll(struct trojanscan_prechannels **head, struct trojanscan_prechannels *newitem);
234int trojanscan_keysort(const void *v1, const void *v2);
235
236int trojanscan_user_level_by_authname(char *authname);
237int trojanscan_user_id_by_authname(char *authname);
238struct trojanscan_worms *trojanscan_find_worm_by_id(int id);
239char *trojanscan_getuser(int id);
240
241int trojanscan_minmaxrand(float min, float max);
242char *trojanscan_iptostr(char *buf, int buflen, unsigned int ip);
243
244int trojanscan_database_connect(char *dbhost, char *dbuser, char *dbpass, char *db, unsigned int port);
245void trojanscan_database_close(void);
246void trojanscan_database_escape_string(char *dest, char *source, size_t length);
bb4b25ee 247int trojanscan_database_query(char *format, ...) __attribute__ ((format (printf, 1, 2)));
c86edd1d
Q
248int trojanscan_database_num_rows(trojanscan_database_res *res);
249trojanscan_database_res *trojanscan_database_store_result();
250trojanscan_database_row trojanscan_database_fetch_row(trojanscan_database_res *res);
251void trojanscan_database_free_result(trojanscan_database_res *res);
c8fdcfa5 252nick *trojanscan_selectuser(void);
c86edd1d
Q
253
254int trojanscan_is_not_octet(char *begin, int length);
255void trojanscan_genreal(char *ptc, char size);
256char trojanscan_genchar(int ty);
257void trojanscan_gennick(char *ptc, char size);
258void trojanscan_genident(char *ptc, char size);
21ec3379 259void trojanscan_genhost(char *ptc, char size, patricia_node_t **fakeipnode);
c86edd1d
Q
260
261int trojanscan_generatepool(void);
262void trojanscan_watch_clone_update(struct trojanscan_prechannels *hp, int count);
263void trojanscan_repool(void *arg);
264
21ec3379 265void trojanscan_generatehost(char *buf, int maxsize, patricia_node_t **fakeipnode);
c86edd1d
Q
266void trojanscan_generatenick(char *buf, int maxsize);
267void trojanscan_generateident(char *buf, int maxsize);
268void trojanscan_generaterealname(char *buf, int maxsize);
269
270sstring *trojanscan_getsstring(char *string, int length);
271int trojanscan_strip_codes(char *buf, size_t max, char *original);
c8fdcfa5 272int trojanscan_isip(char *host);
c86edd1d
Q
273
274struct trojanscan_clones trojanscan_swarm[TROJANSCAN_CLONE_TOTAL];
275struct trojanscan_db trojanscan_database;
276
277sstring *trojanscan_hostpool[TROJANSCAN_POOLSIZE], *trojanscan_tailpool[TROJANSCAN_POOLSIZE];
378cf1b9 278struct trojanscan_inchannel *trojanscan_chans = NULL;
c86edd1d
Q
279
280unsigned int trojanscan_cycletime, trojanscan_maxchans, trojanscan_part_time, trojanscan_activechans = 0, trojanscan_tailpoolsize = 0, trojanscan_hostpoolsize = 0, trojanscan_channumber = 0, trojanscan_maxusers;
281int trojanscan_watchclones_count = 0;
282
283int trojanscan_errorcode;
284struct trojanscan_realchannels *trojanscan_realchanlist;
285char trojanscan_hostmode;
286
287void *trojanscan_schedule, *trojanscan_connect_schedule;
288void *trojanscan_initialschedule, *trojanscan_rehashschedule, *trojanscan_poolschedule, *trojanscan_cloneschedule;
289
36efd3fc 290int trojanscan_minchansize, trojanscan_min_hosts;
c86edd1d
Q
291int trojanscan_swarm_created = 0;
292
293nick *trojanscan_nick;
294CommandTree *trojanscan_cmds;
295trojanscan_database_connection trojanscan_sql;
296struct trojanscan_rejoinlist *trojanscan_schedulerejoins = NULL;
297
298#endif