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