Advertisement
Guest User

Untitled

a guest
Oct 10th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 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
  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 = pyad.adcontainer.ADContainer.from_dn("ou=SshUsers, dc=example, dc=org")
  24.  
  25. kwargs = {}
  26. if password:
  27. kwargs["password"] = password
  28. elif key:
  29. kwargs["optional_attributes"] = {"sshPublicKey": key}
  30. else:
  31. raise ValueError("Neither password nor key passed")
  32.  
  33. pyad.aduser.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.  
  78. parser.add_argument("--ldap")
  79. parser.add_argument("--ldap-username")
  80. parser.add_argument("--ldap-password")
  81. parser.add_argument("--ldap-next-uid", type=int)
  82. parser.add_argument("--ldap-gid", type=int)
  83.  
  84. parser.add_argument("--ad")
  85. parser.add_argument("--ad-username")
  86. parser.add_argument("--ad-password")
  87.  
  88. parser.add_argument("--password")
  89. parser.add_argument("--key-file")
  90.  
  91. parser.add_argument("input")
  92.  
  93. args = parser.parse_args()
  94.  
  95. if args.ldap:
  96. populator = LdapPopulator(args)
  97. elif args.ad:
  98. populator = AdPopulator(args)
  99. else:
  100. raise ValueError("No populator specified")
  101.  
  102. password = args.password
  103.  
  104. key = None
  105. if args.key_file:
  106. with open(args.key_file, "r") as f:
  107. key = f.read()
  108.  
  109. with open(args.input, "r") as f:
  110. reader = csv.reader(f)
  111. for username, use_key in reader:
  112. kwargs = {"username": username}
  113. if use_key == "1":
  114. kwargs["key"] = key
  115. else:
  116. kwargs["password"] = password
  117.  
  118. populator.populate(**kwargs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement