mirror of https://github.com/MISP/MISP
Merge branch '2.4' of github.com:MISP/MISP into 2.4
commit
8839770242
2
PyMISP
2
PyMISP
|
@ -1 +1 @@
|
|||
Subproject commit db9c54bb0883296707023cd30f3a23c0c47937bb
|
||||
Subproject commit cb718b97f1e36e11a06870adb5368309e1c14912
|
|
@ -47,7 +47,7 @@ class AppController extends Controller
|
|||
public $helpers = array('Utility', 'OrgImg', 'FontAwesome', 'UserName');
|
||||
|
||||
private $__queryVersion = '97';
|
||||
public $pyMispVersion = '2.4.120';
|
||||
public $pyMispVersion = '2.4.121';
|
||||
public $phpmin = '7.2';
|
||||
public $phprec = '7.4';
|
||||
public $pythonmin = '3.6';
|
||||
|
|
|
@ -77,7 +77,7 @@ class AppModel extends Model
|
|||
27 => false, 28 => false, 29 => false, 30 => false, 31 => false, 32 => false,
|
||||
33 => false, 34 => false, 35 => false, 36 => false, 37 => false, 38 => false,
|
||||
39 => false, 40 => false, 41 => false, 42 => false, 43 => false, 44 => false,
|
||||
45 => false, 46 => false
|
||||
45 => false, 46 => false, 47 => false
|
||||
);
|
||||
|
||||
public $advanced_updates_description = array(
|
||||
|
@ -1319,6 +1319,11 @@ class AppModel extends Model
|
|||
$sqlArray[] = "ALTER TABLE `events` ADD `sighting_timestamp` int(11) NOT NULL DEFAULT 0 AFTER `publish_timestamp`;";
|
||||
$sqlArray[] = "ALTER TABLE `servers` ADD `push_sightings` tinyint(1) NOT NULL DEFAULT 0 AFTER `pull`;";
|
||||
break;
|
||||
case 47:
|
||||
$this->__addIndex('tags', 'numerical_value');
|
||||
$this->__addIndex('taxonomy_predicates', 'numerical_value');
|
||||
$this->__addIndex('taxonomy_entries', 'numerical_value');
|
||||
break;
|
||||
case 'fixNonEmptySharingGroupID':
|
||||
$sqlArray[] = 'UPDATE `events` SET `sharing_group_id` = 0 WHERE `distribution` != 4;';
|
||||
$sqlArray[] = 'UPDATE `attributes` SET `sharing_group_id` = 0 WHERE `distribution` != 4;';
|
||||
|
|
|
@ -4390,7 +4390,7 @@ class Server extends AppModel
|
|||
$dbExpectedSchema = $this->getExpectedDBSchema();
|
||||
if ($dbExpectedSchema !== false) {
|
||||
$db_schema_comparison = $this->compareDBSchema($dbActualSchema['schema'], $dbExpectedSchema['schema']);
|
||||
$db_indexes_comparison = $this->compareDBIndexes($dbActualSchema['indexes'], $dbExpectedSchema['indexes']);
|
||||
$db_indexes_comparison = $this->compareDBIndexes($dbActualSchema['indexes'], $dbExpectedSchema['indexes'], $dbExpectedSchema);
|
||||
$schemaDiagnostic['checked_table_column'] = $dbActualSchema['column'];
|
||||
$schemaDiagnostic['diagnostic'] = $db_schema_comparison;
|
||||
$schemaDiagnostic['diagnostic_index'] = $db_indexes_comparison;
|
||||
|
@ -4665,23 +4665,53 @@ class Server extends AppModel
|
|||
return $dbDiff;
|
||||
}
|
||||
|
||||
public function compareDBIndexes($actualIndex, $expectedIndex)
|
||||
public function compareDBIndexes($actualIndex, $expectedIndex, $dbExpectedSchema)
|
||||
{
|
||||
$defaultIndexKeylength = 255;
|
||||
$whitelistTables = array();
|
||||
$indexDiff = array();
|
||||
foreach($expectedIndex as $tableName => $indexes) {
|
||||
if (!array_key_exists($tableName, $actualIndex)) {
|
||||
// If table does not exists, it is covered by the schema diagnostic
|
||||
continue; // If table does not exists, it is covered by the schema diagnostic
|
||||
} elseif(in_array($tableName, $whitelistTables)) {
|
||||
continue; // Ignore whitelisted tables
|
||||
} else {
|
||||
$tableIndexDiff = array_diff($indexes, $actualIndex[$tableName]); // check for missing indexes
|
||||
if (count($tableIndexDiff) > 0) {
|
||||
foreach($tableIndexDiff as $columnDiff) {
|
||||
$indexDiff[$tableName][$columnDiff] = sprintf(__('Column `%s` should be indexed'), $columnDiff);
|
||||
$columnData = Hash::extract($dbExpectedSchema['schema'][$tableName], sprintf('{n}[column_name=%s]', $columnDiff))[0];
|
||||
$message = sprintf(__('Column `%s` should be indexed'), $columnDiff);
|
||||
if ($columnData['data_type'] == 'varchar') {
|
||||
$keyLength = sprintf('(%s)', $columnData['character_maximum_length'] < $defaultIndexKeylength ? $columnData['character_maximum_length'] : $defaultIndexKeylength);
|
||||
} elseif ($columnData['data_type'] == 'text') {
|
||||
$keyLength = sprintf('(%s)', $defaultIndexKeylength);
|
||||
} else {
|
||||
$keyLength = '';
|
||||
}
|
||||
$sql = sprintf('CREATE INDEX `%s` ON `%s` (%s%s);',
|
||||
$columnDiff,
|
||||
$tableName,
|
||||
$columnDiff,
|
||||
$keyLength
|
||||
);
|
||||
$indexDiff[$tableName][$columnDiff] = array(
|
||||
'message' => $message,
|
||||
'sql' => $sql
|
||||
);
|
||||
}
|
||||
}
|
||||
$tableIndexDiff = array_diff($actualIndex[$tableName], $indexes); // check for additional indexes
|
||||
if (count($tableIndexDiff) > 0) {
|
||||
foreach($tableIndexDiff as $columnDiff) {
|
||||
$indexDiff[$tableName][$columnDiff] = sprintf(__('Column `%s` is indexed but should not'), $columnDiff);
|
||||
$message = sprintf(__('Column `%s` is indexed but should not'), $columnDiff);
|
||||
$sql = sprintf('DROP INDEX `%s` ON %s;',
|
||||
$columnDiff,
|
||||
$tableName
|
||||
);
|
||||
$indexDiff[$tableName][$columnDiff] = array(
|
||||
'message' => $message,
|
||||
'sql' => $sql
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4784,7 +4814,7 @@ class Server extends AppModel
|
|||
public function stixDiagnostics(&$diagnostic_errors, &$stixVersion, &$cyboxVersion, &$mixboxVersion, &$maecVersion, &$stix2Version, &$pymispVersion)
|
||||
{
|
||||
$result = array();
|
||||
$expected = array('stix' => '>1.2.0.6', 'cybox' => '>2.1.0.18.dev0', 'mixbox' => '1.0.3', 'maec' => '>4.1.0.14', 'stix2' => '>1.2.0', 'pymisp' => '>2.4.93');
|
||||
$expected = array('stix' => '>1.2.0.6', 'cybox' => '>2.1.0.18.dev0', 'mixbox' => '1.0.3', 'maec' => '>4.1.0.14', 'stix2' => '>1.2.0', 'pymisp' => '>2.4.120');
|
||||
// check if the STIX and Cybox libraries are working using the test script stixtest.py
|
||||
$scriptResult = shell_exec($this->getPythonVersion() . ' ' . APP . 'files' . DS . 'scripts' . DS . 'stixtest.py');
|
||||
$scriptResult = json_decode($scriptResult, true);
|
||||
|
@ -5261,15 +5291,15 @@ class Server extends AppModel
|
|||
public function extensionDiagnostics()
|
||||
{
|
||||
$results = array();
|
||||
$extensions = array('redis', 'gd');
|
||||
$extensions = array('redis', 'gd', 'ssdeep');
|
||||
foreach ($extensions as $extension) {
|
||||
$results['web']['extensions'][$extension] = extension_loaded($extension);
|
||||
}
|
||||
if (!is_readable(APP . '/files/scripts/selftest.php')) {
|
||||
$results['cli'] = false;
|
||||
} else {
|
||||
$results['cli'] = exec('php ' . APP . '/files/scripts/selftest.php');
|
||||
$results['cli'] = json_decode($results['cli'], true);
|
||||
$execResult = exec('php ' . APP . '/files/scripts/selftest.php');
|
||||
$results['cli'] = json_decode($execResult, true);
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
<th>Column name</th>
|
||||
<th>Indexed</th>
|
||||
<th>Description</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -30,15 +31,23 @@
|
|||
<?php foreach($columnArray as $columnName): ?>
|
||||
<?php
|
||||
$columnIndexed = !empty($indexes[$tableName]) && in_array($columnName, $indexes[$tableName]);
|
||||
$warning = isset($diagnostic[$tableName][$columnName]);
|
||||
if ($warning) {
|
||||
$warningArray = isset($diagnostic[$tableName][$columnName]);
|
||||
if ($warningArray) {
|
||||
$columnCount++;
|
||||
}
|
||||
$rowHtml .= sprintf('%s%s%s%s%s',
|
||||
sprintf('<tr class="%s">', $warning ? 'error' : 'indexInfo hidden'),
|
||||
$rowHtml .= sprintf('%s%s%s%s%s%s',
|
||||
sprintf('<tr class="%s">', $warningArray ? 'error' : 'indexInfo hidden'),
|
||||
sprintf('<td>%s</td>', h($columnName)),
|
||||
sprintf('<td><i class="bold fa %s"></i></td>', $columnIndexed ? 'green fa-check' : 'red fa-times'),
|
||||
sprintf('<td>%s</td>', $warning ? h($diagnostic[$tableName][$columnName]) : ''),
|
||||
sprintf('<td>%s</td>', $warningArray ? h($diagnostic[$tableName][$columnName]['message']) : ''),
|
||||
sprintf('<td>%s</td>', $warningArray ?
|
||||
sprintf(
|
||||
'<i class="fa fa-wrench useCursorPointer" onclick="quickFixIndexSchema(this, \'%s\')" title="%s" data-query="%s"></i>',
|
||||
h($diagnostic[$tableName][$columnName]['sql']),
|
||||
__('Fix Database Index Schema'),
|
||||
h($diagnostic[$tableName][$columnName]['sql'])
|
||||
) : ''
|
||||
),
|
||||
'</tr>'
|
||||
);
|
||||
?>
|
||||
|
@ -59,4 +68,9 @@
|
|||
$('#containerDBIndexes').toggle();
|
||||
})
|
||||
})
|
||||
function quickFixIndexSchema(clicked, sqlQuery) {
|
||||
var message = "<?php echo sprintf('<div class=\"alert alert-error\" style=\"margin-bottom: 5px;\"><h5>%s</h5> %s</div>', __('Warning'), __('Executing this query might take some time and may harm your database. Please review the query below or backup your database in case of doubt.')) ?>"
|
||||
message += "<div class=\"well\"><kbd>" + sqlQuery + "</kbd></div>"
|
||||
openPopover(clicked, message, undefined, 'left');
|
||||
}
|
||||
</script>
|
|
@ -1,10 +1,8 @@
|
|||
<?php
|
||||
$extensions = array('redis', 'gd');
|
||||
$results = array();
|
||||
$results['phpversion'] = phpversion();
|
||||
foreach ($extensions as $extension) {
|
||||
$results['extensions'][$extension] = extension_loaded($extension);
|
||||
}
|
||||
echo json_encode($results);
|
||||
|
||||
?>
|
||||
$extensions = array('redis', 'gd', 'ssdeep');
|
||||
$results = array();
|
||||
$results['phpversion'] = phpversion();
|
||||
foreach ($extensions as $extension) {
|
||||
$results['extensions'][$extension] = extension_loaded($extension);
|
||||
}
|
||||
echo json_encode($results);
|
||||
|
|
|
@ -5718,5 +5718,5 @@
|
|||
"id"
|
||||
]
|
||||
},
|
||||
"db_version": "46"
|
||||
"db_version": "47"
|
||||
}
|
Loading…
Reference in New Issue