setFormatter(new LineFormatter("%datetime% %level_name% %message%" . PHP_EOL, "H:i:s.u")); $log = new Logger("nasl_plugin"); $log->pushHandler(new StreamHandler(LOG_PATH . "/nessus_plugins/{$cmd['f']}.log", $log_level)); $log->pushHandler($stream); $db = new db(); $nasl = new nasl($cmd['f']); $plugin_id = 0; $file_date = null; if (!isset($nasl->{'id'})) { //unlink($cmd['f']); $log->critical("No ID available"); die; } if (isset($cmd['debug'])) { $log->debug("", [$nasl]); } $db->help->select("sagacity.nessus_plugins", ['plugin_id', 'file_date'], [ [ 'field' => 'plugin_id', 'op' => '=', 'value' => $nasl->id ] ]); if ($row = $db->help->execute()) { $plugin_id = $row['plugin_id']; $file_date = DateTime::createFromFormat("U", $row['file_date']); } if (($plugin_id && !is_a($file_date, "DateTime")) || (is_a($file_date, "DateTime") && isset($nasl->last_modification) && is_a($nasl->last_modification, "DateTime") && $file_date->format("U") < $nasl->last_modification->format("U"))) { $log->info("Updating {$nasl->id}"); $db->help->update("sagacity.nessus_plugins", [ 'file_name' => basename($cmd['f']), 'file_date' => (is_a($file_date, "DateTime") ? $file_date->format("U") : filemtime($cmd['f']))], [ [ 'field' => 'plugin_id', 'op' => '=', 'value' => $nasl->id ] ]); if (!isset($cmd['debug'])) { if (!$db->help->execute()) { throw(new Exception("Failed to update the plugin {$nasl->id}", E_WARNING)); } } } elseif (!$plugin_id) { $log->info("Inserting {$nasl->id}"); $params = [ 'plugin_id' => $nasl->id, 'oid' => isset($nasl->oid) ? $nasl->oid : null, 'name' => isset($nasl->name) ? $nasl->name : null, 'copyright' => isset($nasl->copyright) ? $nasl->copyright : null, 'version' => isset($nasl->rev) ? $nasl->rev : null, 'file_name' => basename($cmd['f']), 'file_date' => isset($nasl->last_modification) && is_a($nasl->last_modification, "DateTime") ? $nasl->last_modification->format("U") : null ]; $db->help->insert("sagacity.nessus_plugins", $params, true); if (!isset($cmd['debug'])) { if (!$db->help->execute()) { throw(new Exception("Failed to insert a new plugin {$nasl->id}", E_WARNING)); } } } else { $log->info("No changes to plugin {$nasl->id}"); } $params = []; if (isset($nasl->ref)) { foreach ($nasl->ref as $key => $refs) { if (is_array($refs)) { foreach ($refs as $ref) { $params[] = [ $nasl->id, $key, $ref ]; } } else { $params[] = [ $nasl->id, $key, $refs ]; } } } unset($nasl->ref); unset($nasl->oid); unset($nasl->name); unset($nasl->copyright); unset($nasl->rev); unset($nasl->last_modification); foreach ((array) $nasl as $field => $val) { if (($field == 'id') || (is_array($val) && count($val) > 1)) { continue; } elseif (is_array($val) && count($val) == 1 && isset($val[0])) { $val = $val[0]; } $params[] = [ $nasl->id, $field, $val ]; } if (count($params)) { $db->help->extended_insert("sagacity.nessus_meta", [ 'plugin_id', 'type', 'val' ], $params, true); } if (!isset($cmd['debug'])) { $db->help->execute(); } else { print $db->help->sql . PHP_EOL; } function usage() { print <<