diff --git a/htdocs/admin/system/filecheck.php b/htdocs/admin/system/filecheck.php index 48eddfec155..6c13b61432a 100644 --- a/htdocs/admin/system/filecheck.php +++ b/htdocs/admin/system/filecheck.php @@ -42,6 +42,8 @@ llxHeader(); print load_fiche_titre($langs->trans("FileCheckDolibarr"),'','title_setup'); +print $langs->trans("FileCheckDesc").'

'; + // Version $var = true; print ''; @@ -72,91 +74,134 @@ $file_list = array('missing' => array(), 'updated' => array()); // File to analyze //$xmlfile = DOL_DOCUMENT_ROOT.'/install/filelist-'.DOL_VERSION.'.xml'; -$xmlfile = DOL_DOCUMENT_ROOT.'/install/filelist.xml'; +$xmlshortfile = '/install/filelist-'.DOL_VERSION.'.xml'; +$xmlfile = DOL_DOCUMENT_ROOT.$xmlshortfile; +$xmlremote = 'https://www.dolibarr.org/files/stable/signatures/filelist-'.DOL_VERSION.'.xml'; + +$enableremotecheck = False; +print ''; +print $langs->trans("MakeIntegrityAnalysisFrom").':
'; if (file_exists($xmlfile)) { - $xml = simplexml_load_file($xmlfile); - if ($xml) - { - if (is_object($xml->dolibarr_htdocs_dir[0])) - { - $file_list = array(); - $ret = getFilesUpdated($file_list, $xml->dolibarr_htdocs_dir[0]); // Fill array $file_list - - print '
'; - print ''; - print ''; - print ''; - print ''."\n"; - $var = true; - $tmpfilelist = dol_sort_array($file_list['missing'], 'filename'); - if (is_array($tmpfilelist) && count($tmpfilelist)) - { - foreach ($tmpfilelist as $file) - { - $var = !$var; - print ''; - print '' . "\n"; - print '' . "\n"; - print "\n"; - } - } - else - { - print ''; - } - print '
' . $langs->trans("FilesMissing") . '' . $langs->trans("ExpectedChecksum") . '
'.$file['filename'].''.$file['expectedmd5'].'
'.$langs->trans("None").'
'; - - print '
'; - - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''."\n"; - $var = true; - $tmpfilelist = dol_sort_array($file_list['updated'], 'filename'); - if (is_array($tmpfilelist) && count($tmpfilelist)) - { - foreach ($tmpfilelist as $file) - { - $var = !$var; - print ''; - print '' . "\n"; - print '' . "\n"; - print '' . "\n"; - print '' . "\n"; - print '' . "\n"; - print "\n"; - } - } - else - { - print ''; - } - print '
' . $langs->trans("FilesUpdated") . '' . $langs->trans("ExpectedChecksum") . '' . $langs->trans("CurrentChecksum") . '' . $langs->trans("Size") . '' . $langs->trans("DateModification") . '
'.$file['filename'].''.$file['expectedmd5'].''.$file['md5'].''.dol_print_size(dol_filesize(DOL_DOCUMENT_ROOT.'/'.$file['filename'])).''.dol_print_date(dol_filemtime(DOL_DOCUMENT_ROOT.'/'.$file['filename']),'dayhour').'
'.$langs->trans("None").'
'; - } - else - { - print 'Error: Failed to found dolibarr_htdocs_dir into XML file '.$xmlfile; - $error++; - } - } - else - { - print 'Error: Failed to parse XML for input file '.$xmlfile; - $error++; - } + print ' '.$langs->trans("LocalSignature").' = '.$xmlshortfile.'
'; } else { - print $langs->trans('XmlNotFound') . ': ' . $xmlfile; - $error++; + print ' '.$langs->trans("LocalSignature").' = '.$xmlshortfile.' ('.$langs->trans("NotAvailable").')
'; } +if ($enableremotecheck) +{ + print ' '.$langs->trans("RemoteSignature").' = '.$xmlremote.'
'; +} +else +{ + print ' '.$langs->trans("RemoteSignature").' = '.$xmlremote.' ('.$langs->trans("FeatureNotYetAvailable").')
'; +} +print ''; +print ''; +print '
'; + +if (GETPOST('local')) +{ + if (file_exists($xmlfile)) + { + $xml = simplexml_load_file($xmlfile); + } + else + { + print $langs->trans('XmlNotFound') . ': ' . $xmlfile; + $error++; + } +} +if (GETPOST('remote')) +{ + // TODO + //$xmlfile = ; + if (1 == 1) + { + //$xml = simplexml_load_file($xmlfile); + } + else + { + print $langs->trans('XmlNotFound') . ': ' . $xmlfile; + $error++; + } +} + + +if ($xml) +{ + if (is_object($xml->dolibarr_htdocs_dir[0])) + { + $file_list = array(); + $ret = getFilesUpdated($file_list, $xml->dolibarr_htdocs_dir[0]); // Fill array $file_list + + print ''; + print ''; + print ''; + print ''; + print ''."\n"; + $var = true; + $tmpfilelist = dol_sort_array($file_list['missing'], 'filename'); + if (is_array($tmpfilelist) && count($tmpfilelist)) + { + foreach ($tmpfilelist as $file) + { + $var = !$var; + print ''; + print '' . "\n"; + print '' . "\n"; + print "\n"; + } + } + else + { + print ''; + } + print '
' . $langs->trans("FilesMissing") . '' . $langs->trans("ExpectedChecksum") . '
'.$file['filename'].''.$file['expectedmd5'].'
'.$langs->trans("None").'
'; + + print '
'; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''."\n"; + $var = true; + $tmpfilelist = dol_sort_array($file_list['updated'], 'filename'); + if (is_array($tmpfilelist) && count($tmpfilelist)) + { + foreach ($tmpfilelist as $file) + { + $var = !$var; + print ''; + print '' . "\n"; + print '' . "\n"; + print '' . "\n"; + print '' . "\n"; + print '' . "\n"; + print "\n"; + } + } + else + { + print ''; + } + print '
' . $langs->trans("FilesUpdated") . '' . $langs->trans("ExpectedChecksum") . '' . $langs->trans("CurrentChecksum") . '' . $langs->trans("Size") . '' . $langs->trans("DateModification") . '
'.$file['filename'].''.$file['expectedmd5'].''.$file['md5'].''.dol_print_size(dol_filesize(DOL_DOCUMENT_ROOT.'/'.$file['filename'])).''.dol_print_date(dol_filemtime(DOL_DOCUMENT_ROOT.'/'.$file['filename']),'dayhour').'
'.$langs->trans("None").'
'; + } + else + { + print 'Error: Failed to found dolibarr_htdocs_dir into XML file '.$xmlfile; + $error++; + } +} + + + llxFooter(); diff --git a/htdocs/install/.gitignore b/htdocs/install/.gitignore index 7e55df64ce7..85797d21c95 100644 --- a/htdocs/install/.gitignore +++ b/htdocs/install/.gitignore @@ -1 +1 @@ -/filelist.xml +/filelist*.xml diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 0ab14c4218b..042911e355a 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -9,6 +9,10 @@ VersionDevelopment=Development VersionUnknown=Unknown VersionRecommanded=Recommended FileCheck=Files Integrity +FileCheckDesc=This tool allows you to check the integrity of files of your application, comparing each files with the official ones. You can use this tool to detect if some files were modified by a hacker for example. +MakeIntegrityAnalysisFrom=Make integrity analysis of application files from +LocalSignature=Embedded local signature (less reliable) +RemoteSignature=Remote distant signature (more reliable) FilesMissing=Missing Files FilesUpdated=Updated Files FileCheckDolibarr=Check Dolibarr Files Integrity