From 1eac5403a5b5a1ecac103d1be164655bd03d4eb3 Mon Sep 17 00:00:00 2001 From: cecinestpasunepipe <110607403+cecinestpasunepipe@users.noreply.github.com> Date: Fri, 2 Aug 2024 15:13:33 +0200 Subject: [PATCH 1/8] Fix issue with pathless config items --- dissect/target/plugins/os/unix/etc/etc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dissect/target/plugins/os/unix/etc/etc.py b/dissect/target/plugins/os/unix/etc/etc.py index b6689eb5f..04c8a2ad6 100644 --- a/dissect/target/plugins/os/unix/etc/etc.py +++ b/dissect/target/plugins/os/unix/etc/etc.py @@ -48,7 +48,7 @@ def _sub(self, items: ConfigurationEntry, entry: Path, pattern: str) -> Iterator if fnmatch.fnmatch(path, pattern): data = { "_target": self.target, - "source": self.target.fs.path(config_entry.entry.path), + "source": self.target.fs.path(config_entry.entry.path if hasattr(config_entry,"entry") else path), "path": path, "key": key, "value": value, From deb58c5029702e58252447b0889ce670d9641c05 Mon Sep 17 00:00:00 2001 From: cecinestpasunepipe <110607403+cecinestpasunepipe@users.noreply.github.com> Date: Fri, 2 Aug 2024 17:58:23 +0200 Subject: [PATCH 2/8] Improved --- dissect/target/plugins/os/unix/etc/etc.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/dissect/target/plugins/os/unix/etc/etc.py b/dissect/target/plugins/os/unix/etc/etc.py index 04c8a2ad6..5f8ea411a 100644 --- a/dissect/target/plugins/os/unix/etc/etc.py +++ b/dissect/target/plugins/os/unix/etc/etc.py @@ -1,7 +1,7 @@ import fnmatch import re from pathlib import Path -from typing import Iterator +from typing import Iterator, Union from dissect.target import Target from dissect.target.helpers.record import TargetRecordDescriptor @@ -28,7 +28,9 @@ class EtcTree(ConfigurationTreePlugin): def __init__(self, target: Target): super().__init__(target, "/etc") - def _sub(self, items: ConfigurationEntry, entry: Path, pattern: str) -> Iterator[UnixConfigTreeRecord]: + def _sub( + self, items: Union[ConfigurationEntry, dict], entry: Path, orig_path: Path, pattern: str + ) -> Iterator[UnixConfigTreeRecord]: index = 0 config_entry = items if not isinstance(items, dict): @@ -39,7 +41,7 @@ def _sub(self, items: ConfigurationEntry, entry: Path, pattern: str) -> Iterator path = Path(entry) / Path(key) if isinstance(value, dict): - yield from self._sub(value, path, pattern) + yield from self._sub(value, path, orig_path, pattern) continue if not isinstance(value, list): @@ -48,7 +50,9 @@ def _sub(self, items: ConfigurationEntry, entry: Path, pattern: str) -> Iterator if fnmatch.fnmatch(path, pattern): data = { "_target": self.target, - "source": self.target.fs.path(config_entry.entry.path if hasattr(config_entry,"entry") else path), + "source": self.target.fs.path( + config_entry.entry.path if hasattr(config_entry, "entry") else orig_path + ), "path": path, "key": key, "value": value, @@ -68,7 +72,7 @@ def etc(self, pattern: str) -> Iterator[UnixConfigTreeRecord]: try: config_object = self.get(str(Path(entry) / Path(item))) if isinstance(config_object, ConfigurationEntry): - yield from self._sub(config_object, Path(entry) / Path(item), pattern) + yield from self._sub(config_object, Path(entry) / Path(item), Path(entry) / Path(item), pattern) except Exception: self.target.log.warning("Could not open configuration item: %s", item) pass From 459c90a31d3fac7003904b0264d54b91f7f8dc0b Mon Sep 17 00:00:00 2001 From: cecinestpasunepipe <110607403+cecinestpasunepipe@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:53:48 +0200 Subject: [PATCH 3/8] Improvements --- dissect/target/plugins/os/unix/etc/etc.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dissect/target/plugins/os/unix/etc/etc.py b/dissect/target/plugins/os/unix/etc/etc.py index 5f8ea411a..bc1d96bfc 100644 --- a/dissect/target/plugins/os/unix/etc/etc.py +++ b/dissect/target/plugins/os/unix/etc/etc.py @@ -50,9 +50,7 @@ def _sub( if fnmatch.fnmatch(path, pattern): data = { "_target": self.target, - "source": self.target.fs.path( - config_entry.entry.path if hasattr(config_entry, "entry") else orig_path - ), + "source": self.target.fs.path(orig_path), "path": path, "key": key, "value": value, @@ -72,7 +70,8 @@ def etc(self, pattern: str) -> Iterator[UnixConfigTreeRecord]: try: config_object = self.get(str(Path(entry) / Path(item))) if isinstance(config_object, ConfigurationEntry): - yield from self._sub(config_object, Path(entry) / Path(item), Path(entry) / Path(item), pattern) + orig_path = Path(entry) / Path(item) + yield from self._sub(config_object, orig_path, orig_path, pattern) except Exception: self.target.log.warning("Could not open configuration item: %s", item) pass From ee6cb342feb052604625cedf9a0ca41995ad5cc5 Mon Sep 17 00:00:00 2001 From: cecinestpasunepipe <110607403+cecinestpasunepipe@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:03:48 +0200 Subject: [PATCH 4/8] Improvements --- dissect/target/plugins/os/unix/etc/etc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dissect/target/plugins/os/unix/etc/etc.py b/dissect/target/plugins/os/unix/etc/etc.py index bc1d96bfc..c7162d90f 100644 --- a/dissect/target/plugins/os/unix/etc/etc.py +++ b/dissect/target/plugins/os/unix/etc/etc.py @@ -32,7 +32,6 @@ def _sub( self, items: Union[ConfigurationEntry, dict], entry: Path, orig_path: Path, pattern: str ) -> Iterator[UnixConfigTreeRecord]: index = 0 - config_entry = items if not isinstance(items, dict): items = items.as_dict() From 39b5c9373cfa68338ce8142c2bd86a567dc2bf2c Mon Sep 17 00:00:00 2001 From: cecinestpasunepipe <110607403+cecinestpasunepipe@users.noreply.github.com> Date: Mon, 12 Aug 2024 09:45:10 +0200 Subject: [PATCH 5/8] Improvements --- dissect/target/plugins/os/unix/etc/etc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dissect/target/plugins/os/unix/etc/etc.py b/dissect/target/plugins/os/unix/etc/etc.py index c7162d90f..103b0e91d 100644 --- a/dissect/target/plugins/os/unix/etc/etc.py +++ b/dissect/target/plugins/os/unix/etc/etc.py @@ -69,8 +69,8 @@ def etc(self, pattern: str) -> Iterator[UnixConfigTreeRecord]: try: config_object = self.get(str(Path(entry) / Path(item))) if isinstance(config_object, ConfigurationEntry): - orig_path = Path(entry) / Path(item) - yield from self._sub(config_object, orig_path, orig_path, pattern) + path = Path(entry) / Path(item) + yield from self._sub(config_object, path, orig_path=path, pattern=pattern) except Exception: self.target.log.warning("Could not open configuration item: %s", item) pass From ead7b5bfaf8dc4661e1d31a3208519eab88b6512 Mon Sep 17 00:00:00 2001 From: cecinestpasunepipe <110607403+cecinestpasunepipe@users.noreply.github.com> Date: Tue, 13 Aug 2024 09:17:40 +0200 Subject: [PATCH 6/8] Update dissect/target/plugins/os/unix/etc/etc.py Co-authored-by: Erik Schamper <1254028+Schamper@users.noreply.github.com> --- dissect/target/plugins/os/unix/etc/etc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dissect/target/plugins/os/unix/etc/etc.py b/dissect/target/plugins/os/unix/etc/etc.py index f5eb3e008..6083d2701 100644 --- a/dissect/target/plugins/os/unix/etc/etc.py +++ b/dissect/target/plugins/os/unix/etc/etc.py @@ -29,7 +29,7 @@ def __init__(self, target: Target): super().__init__(target, "/etc") def _sub( - self, items: Union[ConfigurationEntry, dict], entry: Path, orig_path: Path, pattern: str + self, items: ConfigurationEntry | dict, entry: Path, orig_path: Path, pattern: str ) -> Iterator[UnixConfigTreeRecord]: index = 0 if not isinstance(items, dict): From 743cfa3e5f882e6076309f5e751640d9702503bf Mon Sep 17 00:00:00 2001 From: cecinestpasunepipe <110607403+cecinestpasunepipe@users.noreply.github.com> Date: Tue, 13 Aug 2024 09:17:46 +0200 Subject: [PATCH 7/8] Update dissect/target/plugins/os/unix/etc/etc.py Co-authored-by: Erik Schamper <1254028+Schamper@users.noreply.github.com> --- dissect/target/plugins/os/unix/etc/etc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dissect/target/plugins/os/unix/etc/etc.py b/dissect/target/plugins/os/unix/etc/etc.py index 6083d2701..3e518e37b 100644 --- a/dissect/target/plugins/os/unix/etc/etc.py +++ b/dissect/target/plugins/os/unix/etc/etc.py @@ -1,7 +1,7 @@ import fnmatch import re from pathlib import Path -from typing import Iterator, Union +from typing import Iterator from dissect.target import Target from dissect.target.helpers.record import TargetRecordDescriptor From 3d6125a2a4f9a3fdb58fe50317c61c96ead0ed65 Mon Sep 17 00:00:00 2001 From: cecinestpasunepipe <110607403+cecinestpasunepipe@users.noreply.github.com> Date: Tue, 13 Aug 2024 12:09:44 +0200 Subject: [PATCH 8/8] Improvements --- dissect/target/plugins/os/unix/etc/etc.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dissect/target/plugins/os/unix/etc/etc.py b/dissect/target/plugins/os/unix/etc/etc.py index 3e518e37b..f7ce28fb1 100644 --- a/dissect/target/plugins/os/unix/etc/etc.py +++ b/dissect/target/plugins/os/unix/etc/etc.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import fnmatch import re from pathlib import Path