Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F35558639
raw-paste-data.txt
No One
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Authored By
taavi
Oct 9 2022, 9:52 AM
2022-10-09 09:52:29 (UTC+0)
Size
1 KB
Referenced Files
None
Subscribers
None
raw-paste-data.txt
View Options
# SPDX-License-Identifier: AGPL-3.0
# (c) Taavi Väänänen <hi@taavi.wtf>, 2022
import ldap3
import yaml
with open("/etc/ldap.yaml", "r") as f:
ldap_config = yaml.safe_load(f.read())
conn = ldap3.Connection(
ldap_config["servers"],
user=ldap_config["user"],
password=ldap_config["password"],
auto_bind=True,
auto_range=True,
read_only=True,
)
not_locked_toolforge_users = [
user["dn"]
for user in conn.extend.standard.paged_search(
"ou=people,dc=wikimedia,dc=org",
"(&(objectclass=posixAccount)(memberOf=cn=project-tools,ou=groups,dc=wikimedia,dc=org)(!(pwdPolicySubentry=cn=disabled,ou=ppolicies,dc=wikimedia,dc=org)))",
attributes=["dn"],
time_limit=5,
paged_size=256,
generator=True,
)
]
tools = conn.extend.standard.paged_search(
"ou=servicegroups,dc=wikimedia,dc=org",
"(&(objectClass=groupOfNames)(cn=tools.*))",
attributes=["cn", "member"],
time_limit=5,
paged_size=256,
generator=True,
)
for tool in tools:
found = False
for maintainer in tool["attributes"]["member"]:
if maintainer in not_locked_toolforge_users:
found = True
break
if not found:
print(tool["attributes"]["cn"][0])
File Metadata
Details
Attached
Mime Type
text/plain; charset=utf-8
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
9768032
Default Alt Text
raw-paste-data.txt (1 KB)
Attached To
Mode
P35381 find-tools-with-no-unblocked-maintainers.py
Attached
Detach File
Event Timeline
Log In to Comment