]>
Commit | Line | Data |
---|---|---|
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 | |
76 | typedef struct trojanscan_clones { | |
77 | int remaining, sitting, index; | |
78 | nick *clone; | |
21ec3379 | 79 | patricia_node_t *fakeipnode; |
c86edd1d Q |
80 | } trojanscan_clones; |
81 | ||
82 | typedef struct trojanscan_channels { | |
83 | sstring *name; | |
84 | unsigned exempt : 1; | |
85 | } trojanscan_channels; | |
86 | ||
87 | typedef 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 | ||
99 | typedef struct trojanscan_phrases { | |
100 | int id; | |
101 | pcre *phrase; | |
102 | pcre_extra *hint; | |
103 | trojanscan_worms *worm; | |
104 | } trojanscan_phrases; | |
105 | ||
106 | typedef 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 | ||
113 | typedef 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 | ||
121 | typedef 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 | ||
130 | typedef 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 | ||
139 | typedef union trojanscan_userlevel { | |
140 | char number; | |
141 | struct trojanscan_userflags values; | |
142 | } trojanscan_userlevel; | |
143 | ||
144 | typedef struct trojanscan_flagmodification { | |
145 | char addition; | |
146 | char flag; | |
147 | } trojanscan_flagmodification; | |
148 | ||
149 | typedef 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 |
157 | typedef struct trojanscan_inchannel { |
158 | sstring *channel; | |
159 | struct trojanscan_clones *watch_clone; | |
160 | } trojanscan_inchannel; | |
161 | ||
162 | typedef 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 |
167 | typedef MYSQL_RES trojanscan_database_res; |
168 | typedef MYSQL_ROW trojanscan_database_row; | |
169 | typedef 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 | ||
193 | int trojanscan_status(void *sender, int cargc, char **cargv); | |
194 | int trojanscan_showcommands(void *sender, int cargc, char **cargv); | |
195 | int trojanscan_help(void *sender, int cargc, char **cargv); | |
196 | int trojanscan_hello(void *sender, int cargc, char **cargv); | |
197 | int trojanscan_userjoin(void *sender, int cargc, char **cargv); | |
198 | int trojanscan_changelev(void *sender, int cargc, char **cargv); | |
199 | int trojanscan_deluser(void *sender, int cargc, char **cargv); | |
200 | int trojanscan_rehash(void *sender, int cargc, char **cargv); | |
201 | int trojanscan_mew(void *sender, int cargc, char **cargv); | |
202 | int trojanscan_cat(void *sender, int cargc, char **cargv); | |
203 | int trojanscan_reschedule(void *sender, int cargc, char **cargv); | |
204 | int trojanscan_chanlist(void *sender, int cargc, char **cargv); | |
205 | int trojanscan_whois(void *sender, int cargc, char **cargv); | |
206 | int trojanscan_listusers(void *sender, int cargc, char **cargv); | |
207 | ||
208 | char trojanscan_getmtfrommessagetype(int input); | |
209 | ||
210 | void trojanscan_handlemessages(nick *target, int messagetype, void **args); | |
211 | void trojanscan_clonehandlemessages(nick *target, int messagetype, void **args); | |
bb4b25ee CP |
212 | void trojanscan_mainchanmsg(char *message, ...) __attribute__ ((format (printf, 1, 2))); |
213 | void trojanscan_peonchanmsg(char *message, ...) __attribute__ ((format (printf, 1, 2))); | |
214 | void trojanscan_reply(nick *target, char *message, ... ) __attribute__ ((format (printf, 2, 3))); | |
215 | void trojanscan_privmsg_chan_or_nick(channel *cp, nick *np, char *text, ...) __attribute__ ((format (printf, 3, 4))); | |
c86edd1d Q |
216 | |
217 | void trojanscan_connect(void *arg); | |
218 | void trojanscan_dojoin(void *arg); | |
219 | void trojanscan_dopart(void *arg); | |
220 | void trojanscan_donickchange(void *arg); | |
221 | void trojanscan_registerclones(void *arg); | |
222 | void trojanscan_fill_channels(void *arg); | |
223 | void trojanscan_rehash_schedule(void *arg); | |
224 | void trojanscan_rejoin_channel(void *arg); | |
225 | ||
226 | void trojanscan_read_database(int first_time); | |
227 | void trojanscan_free_database(void); | |
228 | ||
229 | struct trojanscan_realchannels *trojanscan_allocaterc(char *chan); | |
230 | void trojanscan_join(trojanscan_realchannels *rc); | |
231 | struct trojanscan_clones *trojanscan_selectclone(char type); | |
232 | void trojanscan_free_channels(void); | |
233 | int trojanscan_add_ll(struct trojanscan_prechannels **head, struct trojanscan_prechannels *newitem); | |
234 | int trojanscan_keysort(const void *v1, const void *v2); | |
235 | ||
236 | int trojanscan_user_level_by_authname(char *authname); | |
237 | int trojanscan_user_id_by_authname(char *authname); | |
238 | struct trojanscan_worms *trojanscan_find_worm_by_id(int id); | |
239 | char *trojanscan_getuser(int id); | |
240 | ||
241 | int trojanscan_minmaxrand(float min, float max); | |
242 | char *trojanscan_iptostr(char *buf, int buflen, unsigned int ip); | |
243 | ||
244 | int trojanscan_database_connect(char *dbhost, char *dbuser, char *dbpass, char *db, unsigned int port); | |
245 | void trojanscan_database_close(void); | |
246 | void trojanscan_database_escape_string(char *dest, char *source, size_t length); | |
bb4b25ee | 247 | int trojanscan_database_query(char *format, ...) __attribute__ ((format (printf, 1, 2))); |
c86edd1d Q |
248 | int trojanscan_database_num_rows(trojanscan_database_res *res); |
249 | trojanscan_database_res *trojanscan_database_store_result(); | |
250 | trojanscan_database_row trojanscan_database_fetch_row(trojanscan_database_res *res); | |
251 | void trojanscan_database_free_result(trojanscan_database_res *res); | |
c8fdcfa5 | 252 | nick *trojanscan_selectuser(void); |
c86edd1d Q |
253 | |
254 | int trojanscan_is_not_octet(char *begin, int length); | |
255 | void trojanscan_genreal(char *ptc, char size); | |
256 | char trojanscan_genchar(int ty); | |
257 | void trojanscan_gennick(char *ptc, char size); | |
258 | void trojanscan_genident(char *ptc, char size); | |
21ec3379 | 259 | void trojanscan_genhost(char *ptc, char size, patricia_node_t **fakeipnode); |
c86edd1d Q |
260 | |
261 | int trojanscan_generatepool(void); | |
262 | void trojanscan_watch_clone_update(struct trojanscan_prechannels *hp, int count); | |
263 | void trojanscan_repool(void *arg); | |
264 | ||
21ec3379 | 265 | void trojanscan_generatehost(char *buf, int maxsize, patricia_node_t **fakeipnode); |
c86edd1d Q |
266 | void trojanscan_generatenick(char *buf, int maxsize); |
267 | void trojanscan_generateident(char *buf, int maxsize); | |
268 | void trojanscan_generaterealname(char *buf, int maxsize); | |
269 | ||
270 | sstring *trojanscan_getsstring(char *string, int length); | |
271 | int trojanscan_strip_codes(char *buf, size_t max, char *original); | |
c8fdcfa5 | 272 | int trojanscan_isip(char *host); |
c86edd1d Q |
273 | |
274 | struct trojanscan_clones trojanscan_swarm[TROJANSCAN_CLONE_TOTAL]; | |
275 | struct trojanscan_db trojanscan_database; | |
276 | ||
277 | sstring *trojanscan_hostpool[TROJANSCAN_POOLSIZE], *trojanscan_tailpool[TROJANSCAN_POOLSIZE]; | |
378cf1b9 | 278 | struct trojanscan_inchannel *trojanscan_chans = NULL; |
c86edd1d Q |
279 | |
280 | unsigned int trojanscan_cycletime, trojanscan_maxchans, trojanscan_part_time, trojanscan_activechans = 0, trojanscan_tailpoolsize = 0, trojanscan_hostpoolsize = 0, trojanscan_channumber = 0, trojanscan_maxusers; | |
281 | int trojanscan_watchclones_count = 0; | |
282 | ||
283 | int trojanscan_errorcode; | |
284 | struct trojanscan_realchannels *trojanscan_realchanlist; | |
285 | char trojanscan_hostmode; | |
286 | ||
287 | void *trojanscan_schedule, *trojanscan_connect_schedule; | |
288 | void *trojanscan_initialschedule, *trojanscan_rehashschedule, *trojanscan_poolschedule, *trojanscan_cloneschedule; | |
289 | ||
36efd3fc | 290 | int trojanscan_minchansize, trojanscan_min_hosts; |
c86edd1d Q |
291 | int trojanscan_swarm_created = 0; |
292 | ||
293 | nick *trojanscan_nick; | |
294 | CommandTree *trojanscan_cmds; | |
295 | trojanscan_database_connection trojanscan_sql; | |
296 | struct trojanscan_rejoinlist *trojanscan_schedulerejoins = NULL; | |
297 | ||
298 | #endif |