1<?php
2///////////////////////////////////////////////////////////////////////////////
3//
4// NagiosQL
5//
6///////////////////////////////////////////////////////////////////////////////
7//
8// (c) 2005-2020 by Martin Willisegger
9//
10// Project   : NagiosQL
11// Component : Admin configuration verification
12// Website   : https://sourceforge.net/projects/nagiosql/
13// Version   : 3.4.1
14// GIT Repo  : https://gitlab.com/wizonet/NagiosQL
15//
16///////////////////////////////////////////////////////////////////////////////
17//
18// Path settings
19// ===================
20$strPattern = '(admin/[^/]*.php)';
21$preRelPath  = preg_replace($strPattern, '', filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_STRING));
22$preBasePath = preg_replace($strPattern, '', filter_input(INPUT_SERVER, 'SCRIPT_FILENAME', FILTER_SANITIZE_STRING));
23//
24// Define common variables
25// =======================
26$prePageId    = 25;
27$preContent   = 'admin/import.htm.tpl';
28$preAccess    = 1;
29$preFieldvars = 1;
30$intModus     = 0;
31//
32// Include preprocessing files
33// ===========================
34require $preBasePath.'functions/prepend_adm.php';
35require $preBasePath.'functions/prepend_content.php';
36//
37// Initialize import class
38// =======================
39$myImportClass = new functions\NagImportClass($_SESSION);
40$myImportClass->myDBClass     =& $myDBClass;
41$myImportClass->myDataClass   =& $myDataClass;
42$myImportClass->myConfigClass =& $myConfigClass;
43//
44// Get configuration set ID
45// ========================
46$myConfigClass->getConfigTargets($arrConfigSet);
47$intConfigId  = $arrConfigSet[0];
48//
49// Process form variables
50// ======================
51if (isset($_FILES['datValue1']) && ($_FILES['datValue1']['name'] != '') && ($chkStatus == 1)) {
52    // Upload Error
53    if ($_FILES['datValue1']['error'] !== UPLOAD_ERR_OK) {
54        $myVisClass->processMessage(
55            translate('File upload error:'). ' ' .$_FILES['filMedia']['error'],
56            $strErrorMessage
57        );
58    } else {
59        $intModus = 1;
60        $strFileName = tempnam($_SESSION['SETS']['path']['tempdir'], 'nagiosql_local_imp');
61        move_uploaded_file($_FILES['datValue1']['tmp_name'], $strFileName);
62        $intReturn   = $myImportClass->fileImport($strFileName, $intConfigId, $chkChbValue1);
63        if ($intReturn != 0) {
64            $myVisClass->processMessage($myImportClass->strErrorMessage, $strErrorMessage);
65        } else {
66            $myVisClass->processMessage($myImportClass->strInfoMessage, $strInfoMessage);
67            $myDataClass->writeLog(translate('File imported - File [overwrite flag]:'). ' ' .
68                    $_FILES['datValue1']['name']. ' [' .$chkChbValue1. ']');
69        }
70    }
71}
72if (($chkMselValue1[0] != '') && ($chkStatus == 1)) {
73    /** @var array $chkMselValue1 */
74    foreach ($chkMselValue1 as $elem) {
75        $intModus    = 1;
76        $myImportClass->strErrorMessage = '';
77        $myImportClass->strInfoMessage  = '';
78        $intReturn   = $myImportClass->fileImport($elem, $intConfigId, $chkChbValue1);
79        if ($intReturn != 0) {
80            $myVisClass->processMessage($myImportClass->strErrorMessage, $strErrorMessage);
81        } else {
82            $myVisClass->processMessage($myImportClass->strInfoMessage, $strInfoMessage);
83            $myDataClass->writeLog(translate('File imported - File [overwrite flag]:'). ' ' .$elem. ' ['
84                .$chkChbValue1. ']');
85        }
86    }
87}
88//
89// Start content
90// =============
91$conttp->setVariable('TITLE', translate('Configuration import'));
92$conttp->parse('header');
93$conttp->show('header');
94$conttp->setVariable('LANG_SEARCH_STRING', translate('Filter string'));
95$conttp->setVariable('LANG_SEARCH', translate('Search'));
96$conttp->setVariable('LANG_DELETE', translate('Delete'));
97$conttp->setVariable('LANG_DELETE_SEARCH', translate('Reset filter'));
98$conttp->setVariable('DAT_SEARCH', $chkTfSearch);
99$conttp->setVariable('TEMPLATE', translate('Template definition'));
100$conttp->setVariable('IMPORTFILE', translate('Import file'));
101$conttp->setVariable('LOCAL_FILE', translate('Local import file'));
102$conttp->setVariable('OVERWRITE', translate('Overwrite database'));
103$conttp->setVariable('MAKE', translate('Import'));
104$conttp->setVariable('ABORT', translate('Abort'));
105$conttp->setVariable('CTRL_INFO', translate('Hold CTRL to select<br>more than one'));
106$conttp->setVariable('IMAGE_PATH', $_SESSION['SETS']['path']['base_url']. 'images/');
107$conttp->setVariable('ACTION_INSERT', filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_STRING));
108$conttp->setVariable('DAT_IMPORTFILE_1', '');
109$conttp->setVariable('IMPORT_INFO_1', translate('To prevent errors or misconfigurations, you should import your '
110        . 'configurations in an useful order. We recommend to do it like this:<br><br><b><i>commands -> '
111        . 'timeperiods -> contacttemplates -> contacts -> contactgroups -> hosttemplates -> hosts -> '
112        . 'hostgroups -> servicetemplates -> services -> servicegroups</i></b><br><br>'));
113$conttp->setVariable('IMPORT_INFO_2', '<span style="color:#FF0000">' .translate('<b>Check your configuration after '
114        . 'import!</b><br>In cause of an error or an uncomplete configuration, re-importing the wrong configuration '
115        . 'can solve the problem.'). '</span>');
116$conttp->parse('filelist1');
117// Get settings
118$myConfigClass->getConfigValues($intConfigId, 'method', $intMethod);
119$myConfigClass->getConfigValues($intConfigId, 'basedir', $strBaseDir);
120$myConfigClass->getConfigValues($intConfigId, 'hostconfig', $strHostDir);
121$myConfigClass->getConfigValues($intConfigId, 'serviceconfig', $strServiceDir);
122$myConfigClass->getConfigValues($intConfigId, 'backupdir', $strBackupDir);
123$myConfigClass->getConfigValues($intConfigId, 'hostbackup', $strHostBackupDir);
124$myConfigClass->getConfigValues($intConfigId, 'servicebackup', $strServiceBackupDir);
125$myConfigClass->getConfigValues($intConfigId, 'importdir', $strImportDir);
126$myConfigClass->getConfigValues($intConfigId, 'nagiosbasedir', $strNagiosBaseDir);
127if ($intMethod == 1) {
128    // Building local file list
129    $arrOutput1 = array();
130    $myConfigClass->storeDirToArray(
131        $strBaseDir,
132        "\.cfg",
133        'cgi.cfg|nagios.cfg|nrpe.cfg|nsca.cfg',
134        $arrOutput1,
135        $strErrorMessage
136    );
137    if ($strNagiosBaseDir != $strBaseDir) {
138        $myConfigClass->storeDirToArray(
139            $strNagiosBaseDir,
140            "\.cfg",
141            'cgi.cfg|nagios.cfg|nrpe.cfg|nsca.cfg',
142            $arrOutput1,
143            $strErrorMessage
144        );
145    }
146    $myConfigClass->storeDirToArray($strHostDir, "\.cfg", '', $arrOutput1, $strErrorMessage);
147    $myConfigClass->storeDirToArray($strServiceDir, "\.cfg", '', $arrOutput1, $strErrorMessage);
148    $myConfigClass->storeDirToArray($strHostBackupDir, "\.cfg_", '', $arrOutput1, $strErrorMessage);
149    $myConfigClass->storeDirToArray($strServiceBackupDir, "\.cfg_", '', $arrOutput1, $strErrorMessage);
150    if (($strImportDir != '') && ($strImportDir != $strBaseDir) && ($strImportDir != $strNagiosBaseDir)) {
151        $myConfigClass->storeDirToArray($strImportDir, "\.cfg", '', $arrOutput1, $strErrorMessage);
152    }
153    $arrOutput2=array_unique($arrOutput1);
154    if (is_array($arrOutput2) && (count($arrOutput2) != 0)) {
155        foreach ($arrOutput2 as $elem) {
156            if (($chkTfSearch == '') || (substr_count($elem, $chkTfSearch) != 0)) {
157                $conttp->setVariable('DAT_IMPORTFILE_2', $elem);
158                $conttp->parse('filelist2');
159            }
160        }
161    }
162} elseif ($intMethod == 2) {
163    // Set up basic connection
164    if ($myConfigClass->getFTPConnection($intConfigId) == '0') {
165        $arrFiles  = array();
166        $arrFiles1 = ftp_nlist($myConfigClass->resConnectId, $strBaseDir);
167        if (is_array($arrFiles1)) {
168            $arrFiles = array_merge($arrFiles, $arrFiles1);
169        }
170        $arrFiles2 = ftp_nlist($myConfigClass->resConnectId, $strHostDir);
171        if (is_array($arrFiles2)) {
172            $arrFiles = array_merge($arrFiles, $arrFiles2);
173        }
174        $arrFiles3 = ftp_nlist($myConfigClass->resConnectId, $strServiceDir);
175        if (is_array($arrFiles3)) {
176            $arrFiles = array_merge($arrFiles, $arrFiles3);
177        }
178        $arrFiles4 = ftp_nlist($myConfigClass->resConnectId, $strHostBackupDir);
179        if (is_array($arrFiles4)) {
180            $arrFiles = array_merge($arrFiles, $arrFiles4);
181        }
182        $arrFiles5 = ftp_nlist($myConfigClass->resConnectId, $strServiceBackupDir);
183        if (is_array($arrFiles5)) {
184            $arrFiles = array_merge($arrFiles, $arrFiles5);
185        }
186        if ($strImportDir != '') {
187            $arrFiles6 = ftp_nlist($myConfigClass->resConnectId, $strImportDir);
188            if (is_array($arrFiles6)) {
189                $arrFiles = array_merge($arrFiles, $arrFiles6);
190            }
191        }
192        if (is_array($arrFiles) && (count($arrFiles) != 0)) {
193            foreach ($arrFiles as $elem) {
194                if (!substr_count($elem, 'cfg')) {
195                    continue;
196                }
197                if (substr_count($elem, 'resource.cfg')) {
198                    continue;
199                }
200                if (substr_count($elem, 'nagios.cfg')) {
201                    continue;
202                }
203                if (substr_count($elem, 'cgi.cfg')) {
204                    continue;
205                }
206                if (substr_count($elem, 'nrpe.cfg')) {
207                    continue;
208                }
209                if (substr_count($elem, 'nsca.cfg')) {
210                    continue;
211                }
212                if (($chkTfSearch == '') || (substr_count($elem, $chkTfSearch) != 0)) {
213                    $conttp->setVariable('DAT_IMPORTFILE_2', str_replace('//', '/', $elem));
214                    $conttp->parse('filelist2');
215                }
216            }
217        }
218        ftp_close($myConfigClass->resConnectId);
219    } else {
220        $myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage);
221    }
222} elseif ($intMethod == 3) {
223    // Set up basic connection
224    if ($myConfigClass->getSSHConnection($intConfigId) == '0') {
225        $arrFiles  = array();
226        $intReturn = $myConfigClass->sendSSHCommand('ls ' .$strBaseDir. '*.cfg', $arrFiles1);
227        if (($intReturn == 0) && is_array($arrFiles1)) {
228            $arrFiles = array_merge($arrFiles, $arrFiles1);
229        }
230        $intReturn = $myConfigClass->sendSSHCommand('ls ' .$strHostDir. '*.cfg', $arrFiles2);
231        if (($intReturn == 0) && is_array($arrFiles2)) {
232            $arrFiles = array_merge($arrFiles, $arrFiles2);
233        }
234        $intReturn = $myConfigClass->sendSSHCommand('ls ' .$strServiceDir. '*.cfg', $arrFiles3);
235        if (($intReturn == 0) && is_array($arrFiles3)) {
236            $arrFiles = array_merge($arrFiles, $arrFiles3);
237        }
238        $intReturn = $myConfigClass->sendSSHCommand('ls ' .$strHostBackupDir. '*.cfg*', $arrFiles4);
239        if (($intReturn == 0) && is_array($arrFiles4)) {
240            $arrFiles = array_merge($arrFiles, $arrFiles4);
241        }
242        $intReturn = $myConfigClass->sendSSHCommand('ls ' .$strServiceBackupDir. '*.cfg*', $arrFiles5);
243        if (($intReturn == 0) && is_array($arrFiles5)) {
244            $arrFiles = array_merge($arrFiles, $arrFiles5);
245        }
246        if ($strImportDir != '') {
247            $intReturn = $myConfigClass->sendSSHCommand('ls ' .$strImportDir. '*.cfg', $arrFiles6);
248            if (($intReturn == 0) && is_array($arrFiles6)) {
249                $arrFiles = array_merge($arrFiles, $arrFiles6);
250            }
251        }
252        if (is_array($arrFiles) && (count($arrFiles) != 0)) {
253            foreach ($arrFiles as $elem) {
254                if (!substr_count($elem, 'cfg')) {
255                    continue;
256                }
257                if (substr_count($elem, 'resource.cfg')) {
258                    continue;
259                }
260                if (substr_count($elem, 'nagios.cfg')) {
261                    continue;
262                }
263                if (substr_count($elem, 'cgi.cfg')) {
264                    continue;
265                }
266                if (substr_count($elem, 'nrpe.cfg')) {
267                    continue;
268                }
269                if (substr_count($elem, 'nsca.cfg')) {
270                    continue;
271                }
272                if (($chkTfSearch == '') || (substr_count($elem, $chkTfSearch) != 0)) {
273                    $conttp->setVariable('DAT_IMPORTFILE_2', str_replace('//', '/', $elem));
274                    $conttp->parse('filelist2');
275                }
276            }
277        }
278    } else {
279        $myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage);
280    }
281}
282// Check access rights for adding new objects
283if ($myVisClass->checkAccountGroup($prePageKey, 'write') != 0) {
284    $conttp->setVariable('ADD_CONTROL', 'disabled="disabled"');
285}
286if ($strErrorMessage != '') {
287    $conttp->setVariable('ERRORMESSAGE', $strErrorMessage);
288}
289$conttp->setVariable('INFOMESSAGE', $strInfoMessage);
290$conttp->parse('main');
291$conttp->show('main');
292//
293// Process footer
294// ==============
295$maintp->setVariable('VERSION_INFO', "<a href='https://sourceforge.net/projects/nagiosql/' "
296        . "target='_blank'>NagiosQL</a> $setFileVersion");
297$maintp->parse('footer');
298$maintp->show('footer');
299