Skip to content

Instantly share code, notes, and snippets.

@itc-lab
Last active November 21, 2021 09:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itc-lab/c751e9c731365b744af3f3a27b8c41ad to your computer and use it in GitHub Desktop.
Save itc-lab/c751e9c731365b744af3f3a27b8c41ad to your computer and use it in GitHub Desktop.
# Create LDIF for Active Directory
# 70200 AD users, 702 groups.
# Each group has 100 people from 001 to 100.
# Usage:
# python3 create_ad_users_groups_ldif.py > dummy.ldif
# ldapadd -H ldaps://example.contoso.com -x -D "CN=administrator,CN=Users,DC=ad,DC=contoso,DC=com" -w "password" -f dummy.ldif
import base64
PASSWORD = "password$01"
def num2alpha(n):
r = ""
for i in range(1, 10):
if n < 0:
break
r = chr(0x41 + (n % pow(26, i) // pow(26, i - 1))) + r
n -= pow(26, i)
return r
unicodePwd = base64.b64encode(('"' + PASSWORD + '"').encode("utf-16-le"))
for i in range(702):
alpha = num2alpha(i)
group = """
dn: CN=Group{alpha},CN=Users,DC=ad,DC=contoso,DC=com
objectClass: top
objectClass: group
cn: Group{alpha}
distinguishedName: CN=Group{alpha},CN=Users,DC=ad,DC=contoso,DC=com
name: Group{alpha}
sAMAccountName: Group{alpha}
objectCategory: CN=Group,CN=Schema,CN=Configuration,DC=ad,DC=contoso,DC=com
groupType: -2147483646
""".format(
alpha=alpha
).strip()
for j in range(1, 101):
number = "{0:03d}".format(j)
member = f"member: CN=TEST{number}{alpha} User{number}{alpha},CN=Users,DC=ad,DC=contoso,DC=com"
user = """
dn: CN=TEST{number}{alpha} User{number}{alpha},CN=Users,DC=ad,DC=contoso,DC=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: TEST{number}{alpha} User{number}{alpha}
sn: TEST{number}{alpha}
givenName: User{number}{alpha}
distinguishedName: CN=TEST{number}{alpha} User{number}{alpha},CN=Users,DC=ad,DC=contoso,DC=com
name: TEST{number}{alpha} User{number}{alpha}
sAMAccountName: TEST{number}{alpha}
userPrincipalName: TEST{number}{alpha}@contoso.com
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=ad,DC=contoso,DC=com
userAccountControl: 512
unicodePwd:: {unicodePwd}
""".format(
number=number, alpha=alpha, unicodePwd=unicodePwd.decode()
).strip()
group += "\n" + member
print(user + "\n")
print(group + "\n")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment