Compare commits
No commits in common. "e8a23e0ede1b1b7433545328c6d66e571c2a2d6a" and "a936734ceeb49aea7f55977d3a8e390edd444fd4" have entirely different histories.
e8a23e0ede
...
a936734cee
@ -100,13 +100,6 @@ class Attribute:
|
|||||||
except Exception:
|
except Exception:
|
||||||
return
|
return
|
||||||
|
|
||||||
def _try_decode_grouptype(self) -> None:
|
|
||||||
if self.utf8_clean:
|
|
||||||
try:
|
|
||||||
self.decoded = _types.grouptype.parse(self.utf8_clean.strip())
|
|
||||||
except Exception:
|
|
||||||
return
|
|
||||||
|
|
||||||
def _try_decode(self, args: Arguments) -> None:
|
def _try_decode(self, args: Arguments) -> None:
|
||||||
if self.name in ("objectSid", "securityIdentifier"):
|
if self.name in ("objectSid", "securityIdentifier"):
|
||||||
self._try_decode_sid()
|
self._try_decode_sid()
|
||||||
@ -122,8 +115,6 @@ class Attribute:
|
|||||||
self._try_decode_timestamp(args)
|
self._try_decode_timestamp(args)
|
||||||
elif self.name == "userAccountControl":
|
elif self.name == "userAccountControl":
|
||||||
self._try_decode_uac()
|
self._try_decode_uac()
|
||||||
elif self.name == "groupType":
|
|
||||||
self._try_decode_grouptype()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _base64_value(self) -> str:
|
def _base64_value(self) -> str:
|
||||||
@ -199,19 +190,13 @@ class Decoder:
|
|||||||
return decoded_entry
|
return decoded_entry
|
||||||
|
|
||||||
def human(self, *, dn: str, obj: TDecoded) -> dict[str, str]:
|
def human(self, *, dn: str, obj: TDecoded) -> dict[str, str]:
|
||||||
emit: dict[str, typing.Any] = dict(dn=dn)
|
|
||||||
for name, attrs in obj.items():
|
|
||||||
emit[name] = self.arguments.human_separator.join(attr.human() for attr in attrs)
|
|
||||||
return emit
|
|
||||||
|
|
||||||
def simple_json(self, *, dn: str, obj: TDecoded) -> dict[str, str]:
|
|
||||||
emit: dict[str, typing.Any] = dict(dn=dn)
|
emit: dict[str, typing.Any] = dict(dn=dn)
|
||||||
for name, attrs in obj.items():
|
for name, attrs in obj.items():
|
||||||
emit[name] = [attr.human() for attr in attrs]
|
emit[name] = [attr.human() for attr in attrs]
|
||||||
return emit
|
return emit
|
||||||
|
|
||||||
def emit_simple_json(self, *, dn: str, obj: TDecoded, file: typing.IO[str] = sys.stdout) -> None:
|
def emit_simple_json(self, *, dn: str, obj: TDecoded, file: typing.IO[str] = sys.stdout) -> None:
|
||||||
emit = self.simple_json(dn=dn, obj=obj)
|
emit = self.human(dn=dn, obj=obj)
|
||||||
json.dump(emit, file, ensure_ascii=False)
|
json.dump(emit, file, ensure_ascii=False)
|
||||||
print(file=file) # terminate output dicts by newline
|
print(file=file) # terminate output dicts by newline
|
||||||
|
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from . import grouptype, sid, timestamp, uac
|
from . import sid, timestamp, uac
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"grouptype",
|
|
||||||
"sid",
|
"sid",
|
||||||
"timestamp",
|
"timestamp",
|
||||||
"uac",
|
"uac",
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import enum
|
|
||||||
import typing
|
|
||||||
|
|
||||||
|
|
||||||
class GroupTypeFlags(enum.IntFlag):
|
|
||||||
SYSTEM = 0x00000001
|
|
||||||
SCOPE_GLOBAL = 0x00000002
|
|
||||||
SCOPE_DOMAIN = 0x00000004
|
|
||||||
SCOPE_UNIVERSAL = 0x00000008
|
|
||||||
APP_BASIC = 0x00000010
|
|
||||||
APP_QUERY = 0x00000020
|
|
||||||
SECURITY = 0x80000000 # otherwise distribution
|
|
||||||
|
|
||||||
def flags(self) -> list[GroupTypeFlags]:
|
|
||||||
# ignore "uncovered" bits for now
|
|
||||||
value = self.value
|
|
||||||
members = []
|
|
||||||
for member in GroupTypeFlags:
|
|
||||||
member_value = member.value
|
|
||||||
if member_value and member_value & value == member_value:
|
|
||||||
members.append(member)
|
|
||||||
return members
|
|
||||||
|
|
||||||
|
|
||||||
def parse(value: str) -> str:
|
|
||||||
members = GroupTypeFlags(int(value)).flags()
|
|
||||||
return ", ".join(typing.cast(str, member.name) for member in members)
|
|
Loading…
x
Reference in New Issue
Block a user