dissect.target 3.20.dev17__py3-none-any.whl → 3.20.dev18__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -96,6 +96,7 @@ class ExtendedCmd(cmd.Cmd):
96
96
 
97
97
  CMD_PREFIX = "cmd_"
98
98
  _runtime_aliases = {}
99
+ DEFAULT_RUNCOMMANDS_FILE = None
99
100
 
100
101
  def __init__(self, cyber: bool = False):
101
102
  cmd.Cmd.__init__(self)
@@ -121,6 +122,28 @@ class ExtendedCmd(cmd.Cmd):
121
122
 
122
123
  return object.__getattribute__(self, attr)
123
124
 
125
+ def _load_targetrc(self, path: pathlib.Path) -> None:
126
+ """Load and execute commands from the run commands file."""
127
+ try:
128
+ with path.open() as fh:
129
+ for line in fh:
130
+ if (line := line.strip()) and not line.startswith("#"): # Ignore empty lines and comments
131
+ self.onecmd(line)
132
+ except FileNotFoundError:
133
+ # The .targetrc file is optional
134
+ pass
135
+ except Exception as e:
136
+ log.debug("Error processing .targetrc file: %s", e)
137
+
138
+ def _get_targetrc_path(self) -> pathlib.Path | None:
139
+ """Get the path to the run commands file. Can return ``None`` if ``DEFAULT_RUNCOMMANDS_FILE`` is not set."""
140
+ return pathlib.Path(self.DEFAULT_RUNCOMMANDS_FILE).expanduser() if self.DEFAULT_RUNCOMMANDS_FILE else None
141
+
142
+ def preloop(self) -> None:
143
+ super().preloop()
144
+ if targetrc_path := self._get_targetrc_path():
145
+ self._load_targetrc(targetrc_path)
146
+
124
147
  @staticmethod
125
148
  def check_compatible(target: Target) -> bool:
126
149
  return True
@@ -309,6 +332,8 @@ class TargetCmd(ExtendedCmd):
309
332
  DEFAULT_HISTFILESIZE = 10_000
310
333
  DEFAULT_HISTDIR = None
311
334
  DEFAULT_HISTDIRFMT = ".dissect_history_{uid}_{target}"
335
+ DEFAULT_RUNCOMMANDS_FILE = "~/.targetrc"
336
+ CONFIG_KEY_RUNCOMMANDS_FILE = "TARGETRCFILE"
312
337
 
313
338
  def __init__(self, target: Target):
314
339
  self.target = target
@@ -338,7 +363,15 @@ class TargetCmd(ExtendedCmd):
338
363
 
339
364
  super().__init__(self.target.props.get("cyber"))
340
365
 
366
+ def _get_targetrc_path(self) -> pathlib.Path:
367
+ """Get the path to the run commands file."""
368
+
369
+ return pathlib.Path(
370
+ getattr(self.target._config, self.CONFIG_KEY_RUNCOMMANDS_FILE, self.DEFAULT_RUNCOMMANDS_FILE)
371
+ ).expanduser()
372
+
341
373
  def preloop(self) -> None:
374
+ super().preloop()
342
375
  if readline and self.histfile.exists():
343
376
  try:
344
377
  readline.read_history_file(self.histfile)
@@ -507,7 +540,6 @@ class TargetCli(TargetCmd):
507
540
  self.prompt_base = _target_name(target)
508
541
 
509
542
  TargetCmd.__init__(self, target)
510
-
511
543
  self._clicache = {}
512
544
  self.cwd = None
513
545
  self.chdir("/")
@@ -1144,6 +1176,10 @@ class UnixConfigTreeCli(TargetCli):
1144
1176
  class RegistryCli(TargetCmd):
1145
1177
  """CLI for browsing the registry."""
1146
1178
 
1179
+ # Registry shell is incompatible with default shell, so override the default rc file and config key
1180
+ DEFAULT_RUNCOMMANDS_FILE = "~/.targetrc.registry"
1181
+ CONFIG_KEY_RUNCOMMANDS_FILE = "TARGETRCFILE_REGISTRY"
1182
+
1147
1183
  def __init__(self, target: Target, registry: regutil.RegfHive | None = None):
1148
1184
  self.prompt_base = _target_name(target)
1149
1185
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.20.dev17
3
+ Version: 3.20.dev18
4
4
  Summary: This module ties all other Dissect modules together, it provides a programming API and command line tools which allow easy access to various data sources inside disk images or file collections (a.k.a. targets)
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License: Affero General Public License v3
@@ -351,7 +351,7 @@ dissect/target/tools/logging.py,sha256=5ZnumtMWLyslxfrUGZ4ntRyf3obOOhmn8SBjKfdLc
351
351
  dissect/target/tools/mount.py,sha256=8GRYnu4xEmFBHxuIZAYhOMyyTGX8fat1Ou07DNiUnW4,3945
352
352
  dissect/target/tools/query.py,sha256=e-yAN9zdQjuOiTuoOQoo17mVEQGGcOgaA9YkF4GYpkM,15394
353
353
  dissect/target/tools/reg.py,sha256=FDsiBBDxjWVUBTRj8xn82vZe-J_d9piM-TKS3PHZCcM,3193
354
- dissect/target/tools/shell.py,sha256=7jur65pFugpZHyfA0MkaMPCYWZPUSFjhkFQZO8IBYXQ,52077
354
+ dissect/target/tools/shell.py,sha256=0RqcPmOmFEQ0-5Efqm8ZdGbTeZw2OXFFaCGNyCCzUVs,53714
355
355
  dissect/target/tools/utils.py,sha256=JJZDSso1CEK2sv4Z3HJNgqxH6G9S5lbmV-C3h-XmcMo,12035
356
356
  dissect/target/tools/yara.py,sha256=70k-2VMulf1EdkX03nCACzejaOEcsFHOyX-4E40MdQU,2044
357
357
  dissect/target/tools/dump/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -366,10 +366,10 @@ dissect/target/volumes/luks.py,sha256=OmCMsw6rCUXG1_plnLVLTpsvE1n_6WtoRUGQbpmu1z
366
366
  dissect/target/volumes/lvm.py,sha256=wwQVR9I3G9YzmY6UxFsH2Y4MXGBcKL9aayWGCDTiWMU,2269
367
367
  dissect/target/volumes/md.py,sha256=7ShPtusuLGaIv27SvEETtgsuoQyAa4iAAeOR1NEaajI,1689
368
368
  dissect/target/volumes/vmfs.py,sha256=-LoUbn9WNwTtLi_4K34uV_-wDw2W5hgaqxZNj4UmqAQ,1730
369
- dissect.target-3.20.dev17.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
370
- dissect.target-3.20.dev17.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
371
- dissect.target-3.20.dev17.dist-info/METADATA,sha256=b-FuP0zAaieA2KU6NYBKK1oQK45_bIreeC9TCgCLHvE,12897
372
- dissect.target-3.20.dev17.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
373
- dissect.target-3.20.dev17.dist-info/entry_points.txt,sha256=BWuxAb_6AvUAQpIQOQU0IMTlaF6TDht2AIZK8bHd-zE,492
374
- dissect.target-3.20.dev17.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
375
- dissect.target-3.20.dev17.dist-info/RECORD,,
369
+ dissect.target-3.20.dev18.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
370
+ dissect.target-3.20.dev18.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
371
+ dissect.target-3.20.dev18.dist-info/METADATA,sha256=mgzYr9ayweYe6lsopWNXI3cfGRMDemWb8ydUGkZayvU,12897
372
+ dissect.target-3.20.dev18.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
373
+ dissect.target-3.20.dev18.dist-info/entry_points.txt,sha256=BWuxAb_6AvUAQpIQOQU0IMTlaF6TDht2AIZK8bHd-zE,492
374
+ dissect.target-3.20.dev18.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
375
+ dissect.target-3.20.dev18.dist-info/RECORD,,