Advertisement
Guest User

Untitled

a guest
Oct 10th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. # python populator.py --ldap ldap://localhost:389/ --ldap-username cn=admin,dc=example,dc=org --ldap-password admin --ldap-next-uid 1000 --ldap-gid 100 --password pass --key-file ~/.ssh/id_rsa.pub users.csv
  2.  
  3. import argparse
  4. import csv
  5.  
  6. try:
  7. import ldap
  8. import ldap.modlist as modlist
  9. except ImportError:
  10. pass
  11.  
  12. try:
  13. from pyad import pyad, ADContainer, ADUser
  14. except ImportError:
  15. pass
  16.  
  17.  
  18. class AdPopulator(object):
  19. def __init__(self, args):
  20. pyad.set_defaults(ldap_server=args.ad, username=args.ad_username, password=args.ad_password)
  21.  
  22. def populate(self, username, password=None, key=None):
  23. ou = ADContainer.from_dn("ou=users, dc=domain, dc=com")
  24.  
  25. kwargs = {}
  26. if password:
  27. kwargs["password"] = password
  28. elif key:
  29. kwargs["sshPublicKey"] = key
  30. else:
  31. raise ValueError("Neither password nor key passed")
  32.  
  33. ADUser.create(username, ou, **kwargs)
  34.  
  35.  
  36. class LdapPopulator(object):
  37. def __init__(self, args):
  38. self.ldap = ldap.initialize(args.ldap)
  39. self.ldap.simple_bind_s(args.ldap_username, args.ldap_password)
  40.  
  41. self.next_uid = args.ldap_next_uid
  42. self.gid = args.ldap_gid
  43.  
  44. def populate(self, username, password=None, key=None):
  45. dn = "uid=%s,dc=example,dc=org" % username
  46.  
  47. attrs = {
  48. "cn": username,
  49. "sn": username,
  50. "objectClass": [
  51. "top",
  52. "posixAccount",
  53. "shadowAccount",
  54. "inetOrgPerson",
  55. "organizationalPerson",
  56. "person"
  57. ],
  58. "uidNumber": str(self.next_uid),
  59. "gidNumber": str(self.gid),
  60. "homeDirectory": "/home/%s" % username,
  61. }
  62. if password:
  63. attrs["userPassword"] = password
  64. elif key:
  65. attrs["objectClass"].append("ldapPublicKey")
  66. attrs["sshPublicKey"] = key
  67. else:
  68. raise ValueError("Neither password nor key passed")
  69.  
  70. ldif = modlist.addModlist(attrs)
  71. self.ldap.add_s(dn, ldif)
  72.  
  73. self.next_uid += 1
  74.  
  75. if __name__ == "__main__":
  76. parser = argparse.ArgumentParser()
  77. parser.add_argument("--ldap")
  78. parser.add_argument("--ldap-username")
  79. parser.add_argument("--ldap-password")
  80. parser.add_argument("--ldap-next-uid", type=int)
  81. parser.add_argument("--ldap-gid", type=int)
  82. parser.add_argument("--password")
  83. parser.add_argument("--key-file")
  84. parser.add_argument("input")
  85. args = parser.parse_args()
  86.  
  87. if args.ldap:
  88. populator = LdapPopulator(args)
  89. else:
  90. raise ValueError("No populator specified")
  91.  
  92. password = args.password
  93.  
  94. key = None
  95. if args.key_file:
  96. with open(args.key_file, "r") as f:
  97. key = f.read()
  98.  
  99. with open(args.input, "r") as f:
  100. reader = csv.reader(f)
  101. for username, use_key in reader:
  102. kwargs = {"username": username}
  103. if use_key == "1":
  104. kwargs["key"] = key
  105. else:
  106. kwargs["password"] = password
  107.  
  108. populator.populate(**kwargs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement