PageRenderTime 56ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 1ms

/libs/ldaplib/iredldif.py

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