Skip to content

Commit a2d4d93

Browse files
committed
Simplify logic
1 parent a219e09 commit a2d4d93

1 file changed

Lines changed: 37 additions & 55 deletions

File tree

nxc/modules/presence.py

Lines changed: 37 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,15 @@ def safe_str(obj):
6464
self.sid_to_user = {} # dictionary mapping sid string to username
6565

6666
try:
67-
resp = samr.c(dce, server_handle, domain)["DomainId"]
68-
domain_sid = resp.formatCanonical()
67+
resp = samr.hSamrLookupDomainInSamServer(dce, server_handle, domain)
68+
domain_sid = resp["DomainId"].formatCanonical()
6969
context.log.debug(f"Resolved domain SID for {domain}: {domain_sid}")
7070
except Exception as e:
7171
context.log.debug(f"Failed to lookup SID for domain {domain}: {e!s}")
7272
return False
7373

7474
try:
75-
domain_handle = samr.hSamrOpenDomain(dce, server_handle, samr.DOMAIN_LOOKUP | samr.DOMAIN_LIST_ACCOUNTS, domain)["DomainHandle"]
75+
domain_handle = samr.hSamrOpenDomain(dce, server_handle, samr.DOMAIN_LOOKUP | samr.DOMAIN_LIST_ACCOUNTS, resp["DomainId"])["DomainHandle"]
7676
except Exception as e:
7777
context.log.debug(f"Failed to open domain {domain}: {e!s}")
7878
return False
@@ -87,61 +87,43 @@ def safe_str(obj):
8787

8888
try:
8989
group_handle = samr.hSamrOpenGroup(dce, domain_handle, samr.GROUP_LIST_MEMBERS, group_rid)["GroupHandle"]
90-
91-
try:
92-
resp = samr.hSamrGetMembersInGroup(dce, group_handle)
93-
if resp["Members"]["Members"]:
94-
for member in resp["Members"]["Members"]:
95-
try:
96-
rid = int.from_bytes(member.getData(), byteorder="little")
97-
try:
98-
user_handle = samr.hSamrOpenUser(
99-
dce,
100-
domain_handle,
101-
samr.MAXIMUM_ALLOWED,
102-
rid
103-
)["UserHandle"]
104-
105-
user_info = samr.hSamrQueryInformationUser2(
106-
dce,
107-
user_handle,
108-
samr.USER_INFORMATION_CLASS.UserAllInformation
109-
)["Buffer"]["All"]
110-
111-
username = user_info["UserName"]
112-
username_str = (
113-
username.encode("utf-16-le").decode("utf-16-le")
114-
if isinstance(username, bytes)
115-
else str(username)
116-
)
117-
118-
full_username = f"{domain}\\{username_str}"
119-
admin_users.add(f"{full_username} (Member of {group_name})")
120-
121-
# map sid string of user to username
122-
user_sid = f"{domain_sid}-{rid}"
123-
self.sid_to_user[user_sid] = full_username
124-
125-
samr.hSamrCloseHandle(dce, user_handle)
126-
except Exception as name_e:
127-
try:
128-
sid_str = domain_sid.formatCanonical()
129-
full_sid = f"{sid_str}-{rid}"
130-
except Exception:
131-
full_sid = "[unrepresentable SID]"
132-
context.log.debug(f"Failed to get user info for RID {rid}: {name_e!s}")
133-
admin_users.add(f"{domain}\\{full_sid} (Member of {group_name})")
134-
except Exception as member_e_inner:
135-
context.log.debug(f"Error processing group member: {member_e_inner!s}")
136-
except Exception as member_e:
137-
context.log.debug(f"Failed to get members of group {group_name}: {member_e!s}")
138-
finally:
139-
with suppress(Exception):
140-
samr.hSamrCloseHandle(dce, group_handle)
141-
14290
except Exception as group_e:
14391
context.log.debug(f"Failed to process {group_name} group: {group_e!s}")
14492
return False
93+
try:
94+
resp = samr.hSamrGetMembersInGroup(dce, group_handle)
95+
if resp["Members"]["Members"]:
96+
for member in resp["Members"]["Members"]:
97+
try:
98+
rid = int.from_bytes(member.getData(), byteorder="little")
99+
try:
100+
user_handle = samr.hSamrOpenUser(dce, domain_handle, samr.MAXIMUM_ALLOWED, rid)["UserHandle"]
101+
username = samr.hSamrQueryInformationUser2(dce, user_handle, samr.USER_INFORMATION_CLASS.UserAllInformation)["Buffer"]["All"]["UserName"]
102+
103+
full_username = f"{domain}\\{username}"
104+
admin_users.add(f"{full_username} (Member of {group_name})")
105+
106+
# map sid string of user to username
107+
user_sid = f"{domain_sid}-{rid}"
108+
self.sid_to_user[user_sid] = full_username
109+
110+
samr.hSamrCloseHandle(dce, user_handle)
111+
except Exception as name_e:
112+
try:
113+
sid_str = domain_sid
114+
full_sid = f"{sid_str}-{rid}"
115+
except Exception:
116+
full_sid = "[unrepresentable SID]"
117+
context.log.debug(f"Failed to get user info for RID {rid}: {name_e!s}")
118+
admin_users.add(f"{domain}\\{full_sid} (Member of {group_name})")
119+
except Exception as member_e_inner:
120+
context.log.debug(f"Error processing group member: {member_e_inner!s}")
121+
except Exception as e:
122+
context.log.exception(e)
123+
context.log.debug(f"Failed to get members of group {group_name}: {e!s}")
124+
finally:
125+
with suppress(Exception):
126+
samr.hSamrCloseHandle(dce, group_handle)
145127

146128
if admin_users:
147129
# extract usernames only, remove domain and suffix

0 commit comments

Comments
 (0)