PageRenderTime 48ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/libs/ldaplib/iredldif.py

https://bitbucket.org/sqbell/iredadmin-ose
Python | 162 lines | 134 code | 23 blank | 5 comment | 1 complexity | 6ad8f29777bddc82eea19566138f4281 MD5 | raw file
Possible License(s): GPL-2.0
  1. # Author: Zhang Huangbin <zhb@iredmail.org>
  2. import web
  3. from libs import iredutils
  4. from libs.ldaplib import ldaputils
  5. from time import time
  6. cfg = web.iredconfig
  7. # Define and return LDIF structure of domain.
  8. def ldif_maildomain(domain, cn=None,
  9. mtaTransport=cfg.general.get('mtaTransport', 'dovecot'),
  10. enabledService=['mail'], ):
  11. domain = web.safestr(domain).lower()
  12. minPasswordLength = cfg.general.get('min_passwd_length', '8')
  13. ldif = [
  14. ('objectClass', ['mailDomain']),
  15. ('domainName', [domain]),
  16. ('mtaTransport', [mtaTransport]),
  17. ('accountStatus', ['active']),
  18. ('enabledService', enabledService),
  19. ('accountSetting', ['minPasswordLength:%s' % minPasswordLength]),
  20. ]
  21. ldif += ldaputils.getLdifOfSingleAttr(attr='cn', value=cn, default=domain,)
  22. return ldif
  23. def ldif_group(name):
  24. ldif = [
  25. ('objectClass', ['organizationalUnit']),
  26. ('ou', [name]),
  27. ]
  28. return ldif
  29. def ldif_mailExternalUser(mail,):
  30. mail = web.safestr(mail).lower()
  31. if not iredutils.isEmail(mail):
  32. return None
  33. listname, domain = mail.split('@')
  34. ldif = [
  35. ('objectClass', ['mailExternalUser']),
  36. ('accountStatus', ['active']),
  37. ('memberOfGroup', [mail]),
  38. ('enabledService', ['mail', 'deliver']),
  39. ]
  40. return ldif
  41. # Define and return LDIF structure of domain admin.
  42. def ldif_mailadmin(mail, passwd, cn, preferredLanguage='en_US', domainGlobalAdmin='no'):
  43. mail = web.safestr(mail).lower()
  44. ldif = [
  45. ('objectClass', ['mailAdmin']),
  46. ('mail', [mail]),
  47. ('userPassword', [str(passwd)]),
  48. ('accountStatus', ['active']),
  49. ('preferredLanguage', [web.safestr(preferredLanguage)]),
  50. ('domainGlobalAdmin', [web.safestr(domainGlobalAdmin)]),
  51. ]
  52. ldif += ldaputils.getLdifOfSingleAttr(attr='cn', value=cn, default=mail.split('@', 1)[0],)
  53. return ldif
  54. # Define and return LDIF structure of sambaSamAccount
  55. def ldif_samba(uidNumber, gidNumber, sambaNTPassword,):
  56. ldif = [
  57. ('objectClass', ['inetOrgPerson', 'mailUser', 'shadowAccount', 'amavisAccount', 'sambaSamAccount', 'posixAccount']),
  58. ('uidNumber', [str(uidNumber)]),
  59. ('gidNumber', [str(gidNumber)]),
  60. ('sambaAcctFlags', ['[U ]']),
  61. ('sambaPasswordHistory', ['0000000000000000000000000000000000000000000000000000000000000000']),
  62. ('sambaSID', [cfg.samba.sid + '-' + str(uidNumber*2+1000)]),
  63. ('sambaNTPassword', [sambaNTPassword]),
  64. ('sambaPwdLastSet', [str(int(time()))]),
  65. ]
  66. return ldif
  67. # Define and return LDIF structure of mail user.
  68. def ldif_mailuser(domain, username, cn, passwd, quota=0, aliasDomains=[], groups=[], storageBaseDirectory=None,):
  69. domain = str(domain).lower()
  70. username = str(username).strip().replace(' ', '').lower()
  71. mail = username + '@' + domain
  72. if storageBaseDirectory is None:
  73. tmpStorageBaseDirectory = cfg.general.get('storage_base_directory').lower()
  74. else:
  75. tmpStorageBaseDirectory = storageBaseDirectory
  76. splitedSBD = tmpStorageBaseDirectory.rstrip('/').split('/')
  77. storageNode = splitedSBD.pop()
  78. storageBaseDirectory = '/'.join(splitedSBD)
  79. mailMessageStore = storageNode + '/' + iredutils.setMailMessageStore(mail)
  80. homeDirectory = storageBaseDirectory + '/' + mailMessageStore
  81. # Generate basic LDIF.
  82. ldif = [
  83. ('objectClass', ['inetOrgPerson', 'mailUser', 'shadowAccount', 'amavisAccount', ]),
  84. ('mail', [mail]),
  85. ('userPassword', [str(passwd)]),
  86. ('sn', [username]),
  87. ('uid', [username]),
  88. ('storageBaseDirectory', [storageBaseDirectory]),
  89. ('mailMessageStore', [mailMessageStore]),
  90. ('homeDirectory', [homeDirectory]),
  91. ('accountStatus', ['active']),
  92. ('enabledService', ['mail', 'deliver', 'lda', 'smtp', 'smtpsecured',
  93. 'pop3', 'pop3secured', 'imap', 'imapsecured',
  94. 'managesieve', 'managesievesecured',
  95. # ManageService name In dovecot-1.2.
  96. 'sieve', 'sievesecured',
  97. 'forward', 'senderbcc', 'recipientbcc',
  98. 'internal', 'lib-storage',
  99. 'shadowaddress', 'displayedInGlobalAddressBook', ]
  100. ),
  101. # shadowAccount integration.
  102. ('shadowLastChange', ['0']),
  103. # Amavisd integration.
  104. ('amavisLocal', ['TRUE']),
  105. ]
  106. # Append @shadowAddress.
  107. shadowAddresses = []
  108. for d in aliasDomains:
  109. if iredutils.isDomain(d):
  110. shadowAddresses += [username + '@' + d]
  111. if len(shadowAddresses) > 0:
  112. ldif += [('shadowAddress', shadowAddresses)]
  113. # Append quota. No 'mailQuota' attribute means unlimited.
  114. quota = str(quota).strip()
  115. if quota.isdigit():
  116. quota = int(quota) * 1024 * 1024
  117. ldif += [('mailQuota', [str(quota)])]
  118. # Append cn.
  119. ldif += ldaputils.getLdifOfSingleAttr(attr='cn', value=cn, default=username,)
  120. # Append groups.
  121. if isinstance(groups, list) and len(groups) >= 1:
  122. # Remove duplicate items.
  123. grps = set()
  124. for g in groups:
  125. grps.update([str(g).strip()])
  126. ldif += [('memberOfGroup', list(grps))]
  127. return ldif