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