diff --git a/htdocs/admin/system/filecheck.php b/htdocs/admin/system/filecheck.php index 48eddfec155226a8532d4ed5af650dbe70a15e11..6c13b61432ab51a666c25ff7b24b727a0fb93ebd 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").'<br><br>'; + // Version $var = true; print '<table class="noborder" width="100%">'; @@ -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 '<form name="check" action="'.$_SERVER["PHP_SELF"].'">'; +print $langs->trans("MakeIntegrityAnalysisFrom").':<br>'; if (file_exists($xmlfile)) { - $xml = simplexml_load_file($xmlfile); - if ($xml) + print '<input type="checkbox" name="local" checked> '.$langs->trans("LocalSignature").' = '.$xmlshortfile.'<br>'; +} +else +{ + print '<input type="checkbox" name="local"> '.$langs->trans("LocalSignature").' = '.$xmlshortfile.' <span class="warning">('.$langs->trans("NotAvailable").')</span><br>'; +} +if ($enableremotecheck) +{ + print '<input type="checkbox" name="remote"> '.$langs->trans("RemoteSignature").' = '.$xmlremote.'<br>'; +} +else +{ + print '<input type="checkbox" name="remote" disabled> '.$langs->trans("RemoteSignature").' = '.$xmlremote.' <span class="warning">('.$langs->trans("FeatureNotYetAvailable").')</span><br>'; +} +print '<input type="submit" name="check" class="button" value="'.$langs->trans("Check").'">'; +print '</form>'; +print '<br>'; + +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) { - if (is_object($xml->dolibarr_htdocs_dir[0])) + //$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 '<table class="noborder">'; + print '<tr class="liste_titre">'; + print '<td>' . $langs->trans("FilesMissing") . '</td>'; + print '<td align="center">' . $langs->trans("ExpectedChecksum") . '</td>'; + print '</tr>'."\n"; + $var = true; + $tmpfilelist = dol_sort_array($file_list['missing'], 'filename'); + if (is_array($tmpfilelist) && count($tmpfilelist)) { - $file_list = array(); - $ret = getFilesUpdated($file_list, $xml->dolibarr_htdocs_dir[0]); // Fill array $file_list - - print '<table class="noborder">'; - print '<tr class="liste_titre">'; - print '<td>' . $langs->trans("FilesMissing") . '</td>'; - print '<td align="center">' . $langs->trans("ExpectedChecksum") . '</td>'; - print '</tr>'."\n"; - $var = true; - $tmpfilelist = dol_sort_array($file_list['missing'], 'filename'); - if (is_array($tmpfilelist) && count($tmpfilelist)) - { - foreach ($tmpfilelist as $file) - { - $var = !$var; - print '<tr ' . $bc[$var] . '>'; - print '<td>'.$file['filename'].'</td>' . "\n"; - print '<td align="center">'.$file['expectedmd5'].'</td>' . "\n"; - print "</tr>\n"; - } - } - else - { - print '<tr ' . $bc[false] . '><td colspan="2" class="opacitymedium">'.$langs->trans("None").'</td></tr>'; - } - print '</table>'; - - print '<br>'; - - print '<table class="noborder">'; - print '<tr class="liste_titre">'; - print '<td>' . $langs->trans("FilesUpdated") . '</td>'; - print '<td align="center">' . $langs->trans("ExpectedChecksum") . '</td>'; - print '<td align="center">' . $langs->trans("CurrentChecksum") . '</td>'; - print '<td align="right">' . $langs->trans("Size") . '</td>'; - print '<td align="right">' . $langs->trans("DateModification") . '</td>'; - print '</tr>'."\n"; - $var = true; - $tmpfilelist = dol_sort_array($file_list['updated'], 'filename'); - if (is_array($tmpfilelist) && count($tmpfilelist)) - { - foreach ($tmpfilelist as $file) - { - $var = !$var; - print '<tr ' . $bc[$var] . '>'; - print '<td>'.$file['filename'].'</td>' . "\n"; - print '<td align="center">'.$file['expectedmd5'].'</td>' . "\n"; - print '<td align="center">'.$file['md5'].'</td>' . "\n"; - print '<td align="right">'.dol_print_size(dol_filesize(DOL_DOCUMENT_ROOT.'/'.$file['filename'])).'</td>' . "\n"; - print '<td align="right">'.dol_print_date(dol_filemtime(DOL_DOCUMENT_ROOT.'/'.$file['filename']),'dayhour').'</td>' . "\n"; - print "</tr>\n"; - } - } - else - { - print '<tr ' . $bc[false] . '><td colspan="5" class="opacitymedium">'.$langs->trans("None").'</td></tr>'; - } - print '</table>'; + foreach ($tmpfilelist as $file) + { + $var = !$var; + print '<tr ' . $bc[$var] . '>'; + print '<td>'.$file['filename'].'</td>' . "\n"; + print '<td align="center">'.$file['expectedmd5'].'</td>' . "\n"; + print "</tr>\n"; + } } - else + else + { + print '<tr ' . $bc[false] . '><td colspan="2" class="opacitymedium">'.$langs->trans("None").'</td></tr>'; + } + print '</table>'; + + print '<br>'; + + print '<table class="noborder">'; + print '<tr class="liste_titre">'; + print '<td>' . $langs->trans("FilesUpdated") . '</td>'; + print '<td align="center">' . $langs->trans("ExpectedChecksum") . '</td>'; + print '<td align="center">' . $langs->trans("CurrentChecksum") . '</td>'; + print '<td align="right">' . $langs->trans("Size") . '</td>'; + print '<td align="right">' . $langs->trans("DateModification") . '</td>'; + print '</tr>'."\n"; + $var = true; + $tmpfilelist = dol_sort_array($file_list['updated'], 'filename'); + if (is_array($tmpfilelist) && count($tmpfilelist)) { - print 'Error: Failed to found dolibarr_htdocs_dir into XML file '.$xmlfile; - $error++; + foreach ($tmpfilelist as $file) + { + $var = !$var; + print '<tr ' . $bc[$var] . '>'; + print '<td>'.$file['filename'].'</td>' . "\n"; + print '<td align="center">'.$file['expectedmd5'].'</td>' . "\n"; + print '<td align="center">'.$file['md5'].'</td>' . "\n"; + print '<td align="right">'.dol_print_size(dol_filesize(DOL_DOCUMENT_ROOT.'/'.$file['filename'])).'</td>' . "\n"; + print '<td align="right">'.dol_print_date(dol_filemtime(DOL_DOCUMENT_ROOT.'/'.$file['filename']),'dayhour').'</td>' . "\n"; + print "</tr>\n"; + } } + else + { + print '<tr ' . $bc[false] . '><td colspan="5" class="opacitymedium">'.$langs->trans("None").'</td></tr>'; + } + print '</table>'; } else { - print 'Error: Failed to parse XML for input file '.$xmlfile; + print 'Error: Failed to found dolibarr_htdocs_dir into XML file '.$xmlfile; $error++; } } -else -{ - print $langs->trans('XmlNotFound') . ': ' . $xmlfile; - $error++; -} + + + llxFooter(); diff --git a/htdocs/install/.gitignore b/htdocs/install/.gitignore index 7e55df64ce765d5d29bae53725fd6995e43b82f6..85797d21c9505234747e009d4b29501fe0eba6b6 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 0ab14c4218b2d1742598fadcdcc4e39950827387..042911e355ac22e1dcda19c3fa231a3d513fffdb 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