diff --git a/dissect/target/exceptions.py b/dissect/target/exceptions.py index 22f46a604..aea713290 100644 --- a/dissect/target/exceptions.py +++ b/dissect/target/exceptions.py @@ -114,3 +114,7 @@ class RegistryCorruptError(RegistryError): class ConfigurationParsingError(Error): """An error occurred during configuration parsing.""" + + +class TargetPathNotFoundError(TargetError): + """The path to the target does not exist.""" diff --git a/dissect/target/loaders/raw.py b/dissect/target/loaders/raw.py index 9b59a1e11..c4c851e01 100644 --- a/dissect/target/loaders/raw.py +++ b/dissect/target/loaders/raw.py @@ -1,6 +1,7 @@ from pathlib import Path from dissect.target import container +from dissect.target.exceptions import TargetPathNotFoundError from dissect.target.loader import Loader from dissect.target.target import Target @@ -8,6 +9,12 @@ class RawLoader(Loader): """Load raw container files such as disk images.""" + def __init__(self, path: Path, **kwargs): + if not path.exists(): + raise TargetPathNotFoundError("Provided target path does not exist") + + super().__init__(path, **kwargs) + @staticmethod def detect(path: Path) -> bool: return not path.is_dir() diff --git a/dissect/target/target.py b/dissect/target/target.py index ac922310c..7ef02b1b6 100644 --- a/dissect/target/target.py +++ b/dissect/target/target.py @@ -14,6 +14,7 @@ PluginError, PluginNotFoundError, TargetError, + TargetPathNotFoundError, UnsupportedPluginError, VolumeSystemError, ) @@ -284,7 +285,11 @@ def _find(find_path: Path, parsed_path: Optional[urllib.parse.ParseResult]): try: ldr = loader_cls(sub_entry, parsed_path=parsed_path) except Exception as e: - getlogger(sub_entry).error("Failed to initiate loader: %s", e) + message = "Failed to initiate loader: %s" + if isinstance(e, TargetPathNotFoundError): + message = "%s" + + getlogger(sub_entry).error(message, e) getlogger(sub_entry).debug("", exc_info=e) continue