/opt/imunify360/venv/lib/python3.11/site-packages/imav/migrations
NameSizeModeActions
__pycache__/-0755rm
000_noop_migration.py9470644editdlrm
001_fix_scan_unserialization.py29230644editdlrm
002_convert_serialized_scans.py25440644editdlrm
003_add_new_fields_to_malware_history.py13230644editdlrm
003_whmapi1_set_importance_imav.py16810644editdlrm
004_add_malwarehit_owner.py11270644editdlrm
004_patchman_client.py17470644editdlrm
004_plesk_configs.py64510644editdlrm
004_plesk_eula.py23860644editdlrm
005_plesk_cleanup_storage.py41110644editdlrm
005_populate_malwarehit_owner.py11420644editdlrm
006_add_malwarehit_snippet.py11370644editdlrm
007_add_malwarehistory_fileuser.py11570644editdlrm
007_revisium_ignore_list.py26600644editdlrm
008_populate_malwarehistory_foleuser.py11850644editdlrm
008_subscription_permissions.py33710644editdlrm
009_revisium_scan_history.py92080644editdlrm
010_add_malwarehistory_scan_id.py11590644editdlrm
011_add_malwarehistory_index.py15270644editdlrm
012_add_rescan_outdated_scan_type.py14320644editdlrm
013_add_malware_ctime.py12240644editdlrm
014_add_imunify_security.py9860644editdlrm
015_manually_deleted_at_field_added.py9890644editdlrm
016_add_vulnerability_hit_table.py25390644editdlrm
017_add_imunify_patch_subscriptions_table.py13250644editdlrm
017_add_version_field.py9880644editdlrm
018_delete_suspicious_hits.py9770644editdlrm
019_add_malware_history_signature_id_field.py11690644editdlrm
020_add_default_plesk_settings_av.py17840644editdlrm
021_remove_cron_scan_file.py10910644editdlrm
022_scan_queue_to_json.py16120644editdlrm
023_create_mrs_upload_queue.py18320644editdlrm
024_create_mrs_queue_counters_and_meta.py13320644editdlrm
__init__.py00644editdlrm
Edit: /opt/imunify360/venv/lib/python3.11/site-packages/imav/migrations/001_fix_scan_unserialization.py (2923B)
""" This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program.  If not, see . Copyright © 2019 Cloud Linux Software Inc. This software is also available under ImunifyAV commercial license, see Used to fix issue with inability to unserialize stored scans. See DEF-23158 for details. """ import collections import importlib import logging import pickle from pathlib import Path logger = logging.getLogger(__name__) SCANS_PATH = Path("/var/imunify360/aibolit/scans.pickle") OLD_MALWARELIB = "defence360agent.malwarelib" NEW_MALWARELIB = "imav.malwarelib" class AVUnpickler(pickle.Unpickler): def find_class(self, module, name): try: return super().find_class(module, name) except (ImportError, ModuleNotFoundError): if module.startswith(OLD_MALWARELIB): av_module = importlib.import_module( module.replace(OLD_MALWARELIB, NEW_MALWARELIB) ) return getattr(av_module, name) raise def dump(obj, path): temp_path = path.with_name(path.name + ".temp") with temp_path.open("wb") as f: pickle.dump(obj, f) # to avoid the possibility of leaving a broken file, # if any errors occurred above temp_path.replace(path) def migrate(migrator, *_, fake=False, **__): if fake or not SCANS_PATH.exists(): return if OLD_MALWARELIB.encode() in SCANS_PATH.read_bytes(): try: with SCANS_PATH.open("rb") as f: scans = AVUnpickler(f).load() # convert class instance to a simple dict updated = collections.deque( { "path": item.path, "scanid": item.scanid, "scan_type": item.scan_type, "created": item.created, "started": item.started, "args": item.args, "resource_type": item.resource_type.value, "state": item.state.value, } for item in scans ) except Exception as exc: logger.exception( "Failed to load pickle scans %s: %s", SCANS_PATH, exc ) else: dump(updated, SCANS_PATH) def rollback(migrator, *_, fake=False, **__): pass