/functions/ldap_server.sh

https://github.com/iredmail/iRedMail · Shell · 169 lines · 136 code · 28 blank · 5 comment · 2 complexity · 57656cbc173ec9fb581ee8fdfa5b2d5d MD5 · raw file

  1. ldap_generate_populate_ldif()
  2. {
  3. ECHO_DEBUG "Generate LDIF file used to populate LDAP tree."
  4. export LDAP_SUFFIX_MAJOR="$(echo ${LDAP_SUFFIX} | sed -e 's/dc=//g' -e 's/,/./g' | awk -F'.' '{print $1}')"
  5. cat > ${LDAP_INIT_LDIF} <<EOF
  6. dn: ${LDAP_SUFFIX}
  7. objectclass: dcObject
  8. objectclass: organization
  9. dc: ${LDAP_SUFFIX_MAJOR}
  10. o: ${LDAP_SUFFIX_MAJOR}
  11. dn: ${LDAP_BINDDN}
  12. objectClass: person
  13. objectClass: shadowAccount
  14. objectClass: top
  15. cn: ${SYS_USER_VMAIL}
  16. sn: ${SYS_USER_VMAIL}
  17. uid: ${SYS_USER_VMAIL}
  18. userPassword: $(generate_password_hash SSHA "${LDAP_BINDPW}")
  19. dn: ${LDAP_ADMIN_DN}
  20. objectClass: person
  21. objectClass: shadowAccount
  22. objectClass: top
  23. cn: ${VMAIL_DB_ADMIN_USER}
  24. sn: ${VMAIL_DB_ADMIN_USER}
  25. uid: ${VMAIL_DB_ADMIN_USER}
  26. userPassword: $(generate_password_hash SSHA "${LDAP_ADMIN_PW}")
  27. dn: ${LDAP_BASEDN}
  28. objectClass: Organization
  29. o: ${LDAP_BASEDN_NAME}
  30. dn: ${LDAP_ADMIN_BASEDN}
  31. objectClass: Organization
  32. o: ${LDAP_ATTR_DOMAINADMIN_DN_NAME}
  33. dn: domainName=${FIRST_DOMAIN},${LDAP_BASEDN}
  34. objectClass: mailDomain
  35. domainName: ${FIRST_DOMAIN}
  36. mtaTransport: ${TRANSPORT}
  37. accountStatus: active
  38. accountSetting: minPasswordLength:8
  39. accountSetting: defaultQuota:1024
  40. enabledService: mail
  41. dn: ou=Users,domainName=${FIRST_DOMAIN},${LDAP_BASEDN}
  42. objectClass: organizationalUnit
  43. objectClass: top
  44. ou: Users
  45. dn: ou=Groups,domainName=${FIRST_DOMAIN},${LDAP_BASEDN}
  46. objectClass: organizationalUnit
  47. objectClass: top
  48. ou: Groups
  49. dn: ou=Aliases,domainName=${FIRST_DOMAIN},${LDAP_BASEDN}
  50. objectClass: organizationalUnit
  51. objectClass: top
  52. ou: Aliases
  53. dn: ou=Externals,domainName=${FIRST_DOMAIN},${LDAP_BASEDN}
  54. objectClass: organizationalUnit
  55. objectClass: top
  56. ou: Externals
  57. dn: mail=${DOMAIN_ADMIN_EMAIL},${LDAP_ATTR_GROUP_RDN}=${LDAP_ATTR_GROUP_USERS},${LDAP_ATTR_DOMAIN_RDN}=${FIRST_DOMAIN},${LDAP_BASEDN}
  58. objectClass: inetOrgPerson
  59. objectClass: shadowAccount
  60. objectClass: amavisAccount
  61. objectClass: mailUser
  62. objectClass: top
  63. cn: ${DOMAIN_ADMIN_NAME}
  64. sn: ${DOMAIN_ADMIN_NAME}
  65. uid: ${DOMAIN_ADMIN_NAME}
  66. givenName: ${DOMAIN_ADMIN_NAME}
  67. mail: ${DOMAIN_ADMIN_EMAIL}
  68. accountStatus: active
  69. storageBaseDirectory: ${STORAGE_BASE_DIR}
  70. mailMessageStore: ${STORAGE_NODE}/${DOMAIN_ADMIN_MAILDIR_HASH_PART}
  71. homeDirectory: ${DOMAIN_ADMIN_MAILDIR_FULL_PATH}
  72. mailQuota: 104857600
  73. userPassword: ${DOMAIN_ADMIN_PASSWD_HASH}
  74. enabledService: mail
  75. enabledService: internal
  76. enabledService: doveadm
  77. enabledService: smtp
  78. enabledService: smtpsecured
  79. enabledService: smtptls
  80. enabledService: pop3
  81. enabledService: pop3secured
  82. enabledService: pop3tls
  83. enabledService: imap
  84. enabledService: imapsecured
  85. enabledService: imaptls
  86. enabledService: deliver
  87. enabledService: lda
  88. enabledService: lmtp
  89. enabledService: forward
  90. enabledService: senderbcc
  91. enabledService: recipientbcc
  92. enabledService: managesieve
  93. enabledService: managesievesecured
  94. enabledService: sieve
  95. enabledService: sievesecured
  96. enabledService: sievetls
  97. enabledService: displayedInGlobalAddressBook
  98. enabledService: shadowaddress
  99. enabledService: lib-storage
  100. enabledService: indexer-worker
  101. enabledService: dsync
  102. enabledService: domainadmin
  103. enabledService: sogo
  104. domainGlobalAdmin: yes
  105. EOF
  106. }
  107. ldap_server_config()
  108. {
  109. ldap_generate_populate_ldif
  110. # Always use SSHA for root dn so that ldap server can verify the password.
  111. # SSHA512, BCRYPT is not supported by OpenLDAP.
  112. export LDAP_ROOTPW_SSHA="$(generate_password_hash SSHA ${LDAP_ROOTPW})"
  113. . ${FUNCTIONS_DIR}/openldap.sh
  114. check_status_before_run openldap_config && \
  115. check_status_before_run openldap_data_initialize
  116. }
  117. ldap_server_cron_backup()
  118. {
  119. ldap_backup_script="${BACKUP_DIR}/${BACKUP_SCRIPT_LDAP_NAME}"
  120. ECHO_INFO "Setup daily cron job to backup LDAP data with ${ldap_backup_script}"
  121. [ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR} &>/dev/null
  122. backup_file ${ldap_backup_script}
  123. cp ${TOOLS_DIR}/${BACKUP_SCRIPT_LDAP_NAME} ${ldap_backup_script}
  124. chown ${SYS_USER_ROOT}:${SYS_GROUP_ROOT} ${ldap_backup_script}
  125. chmod 0500 ${ldap_backup_script}
  126. perl -pi -e 's#^(export BACKUP_ROOTDIR=).*#${1}"$ENV{BACKUP_DIR}"#' ${ldap_backup_script}
  127. perl -pi -e 's#^(export MYSQL_USER=).*#${1}"$ENV{IREDADMIN_DB_USER}"#' ${ldap_backup_script}
  128. perl -pi -e 's#^(export MYSQL_PASSWD=).*#${1}"$ENV{IREDADMIN_DB_PASSWD}"#' ${ldap_backup_script}
  129. # Add cron job
  130. cat >> ${CRON_FILE_ROOT} <<EOF
  131. # ${PROG_NAME}: Backup LDAP data (at 03:00 AM)
  132. 0 3 * * * ${SHELL_BASH} ${ldap_backup_script}
  133. EOF
  134. cat >> ${TIP_FILE} <<EOF
  135. Backup LDAP data:
  136. * Script: ${ldap_backup_script}
  137. * See also:
  138. # crontab -l -u ${SYS_USER_ROOT}
  139. EOF
  140. echo 'export status_ldap_server_cron_backup="DONE"' >> ${STATUS_FILE}
  141. }