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

/iRedMail/functions/ldap_server.sh

https://bitbucket.org/zhb/iredmail
Shell | 181 lines | 146 code | 30 blank | 5 comment | 8 complexity | 17bd6f4a97066b5d03ad826abbbf57f4 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: ${VMAIL_USER_NAME}
  16. sn: ${VMAIL_USER_NAME}
  17. uid: ${VMAIL_USER_NAME}
  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=${FIRST_USER}@${FIRST_DOMAIN},${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: ${FIRST_USER}
  64. sn: ${FIRST_USER}
  65. uid: ${FIRST_USER}
  66. givenName: ${FIRST_USER}
  67. mail: ${FIRST_USER}@${FIRST_DOMAIN}
  68. accountStatus: active
  69. storageBaseDirectory: ${STORAGE_BASE_DIR}
  70. mailMessageStore: ${STORAGE_NODE}/${FIRST_USER_MAILDIR_HASH_PART}
  71. homeDirectory: ${FIRST_USER_MAILDIR_FULL_PATH}
  72. mailQuota: 104857600
  73. userPassword: $(generate_password_hash ${DEFAULT_PASSWORD_SCHEME} "${FIRST_USER_PASSWD}")
  74. enabledService: mail
  75. enabledService: internal
  76. enabledService: doveadm
  77. enabledService: smtp
  78. enabledService: smtpsecured
  79. enabledService: pop3
  80. enabledService: pop3secured
  81. enabledService: imap
  82. enabledService: imapsecured
  83. enabledService: deliver
  84. enabledService: lda
  85. enabledService: lmtp
  86. enabledService: forward
  87. enabledService: senderbcc
  88. enabledService: recipientbcc
  89. enabledService: managesieve
  90. enabledService: managesievesecured
  91. enabledService: sieve
  92. enabledService: sievesecured
  93. enabledService: displayedInGlobalAddressBook
  94. enabledService: shadowaddress
  95. enabledService: lib-storage
  96. enabledService: indexer-worker
  97. enabledService: dsync
  98. enabledService: domainadmin
  99. enabledService: sogo
  100. domainGlobalAdmin: yes
  101. EOF
  102. }
  103. ldap_server_config()
  104. {
  105. ldap_generate_populate_ldif
  106. # Always use SSHA for root dn so that ldap server can verify the password.
  107. # SSHA512, BCRYPT is not supported by OpenLDAP.
  108. export LDAP_ROOTPW_SSHA="$(generate_password_hash SSHA ${LDAP_ROOTPW})"
  109. if [ X"${BACKEND_ORIG}" == X'LDAPD' ]; then
  110. . ${FUNCTIONS_DIR}/ldapd.sh
  111. check_status_before_run ldapd_config
  112. else
  113. . ${FUNCTIONS_DIR}/openldap.sh
  114. check_status_before_run openldap_config && \
  115. check_status_before_run openldap_data_initialize
  116. fi
  117. }
  118. ldap_server_cron_backup()
  119. {
  120. if [ X"${BACKEND_ORIG}" == X'LDAPD' ]; then
  121. ldap_backup_script="${BACKUP_DIR}/${BACKUP_SCRIPT_LDAPD_NAME}"
  122. else
  123. ldap_backup_script="${BACKUP_DIR}/${BACKUP_SCRIPT_LDAP_NAME}"
  124. fi
  125. ECHO_INFO "Setup daily cron job to backup LDAP data with ${ldap_backup_script}"
  126. [ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR} &>/dev/null
  127. backup_file ${ldap_backup_script}
  128. cp ${TOOLS_DIR}/${BACKUP_SCRIPT_LDAP_NAME} ${ldap_backup_script}
  129. chown ${SYS_ROOT_USER}:${SYS_ROOT_GROUP} ${ldap_backup_script}
  130. chmod 0500 ${ldap_backup_script}
  131. perl -pi -e 's#^(export BACKUP_ROOTDIR=).*#${1}"$ENV{BACKUP_DIR}"#' ${ldap_backup_script}
  132. perl -pi -e 's#^(export MYSQL_USER=).*#${1}"$ENV{IREDADMIN_DB_USER}"#' ${ldap_backup_script}
  133. perl -pi -e 's#^(export MYSQL_PASSWD=).*#${1}"$ENV{IREDADMIN_DB_PASSWD}"#' ${ldap_backup_script}
  134. if [ X"${BACKEND_ORIG}" == X'LDAPD' ]; then
  135. perl -pi -e 's#(export LDAP_BASE_DN=).*#${1}"$ENV{LDAP_SUFFIX}"#g' ${ldap_backup_script}
  136. perl -pi -e 's#(export LDAP_BIND_DN=).*#${1}"$ENV{LDAP_ROOTDN}"#g' ${ldap_backup_script}
  137. perl -pi -e 's#(export LDAP_BIND_PASSWORD=).*#${1}"$ENV{LDAP_ROOTPW}"#g' ${ldap_backup_script}
  138. fi
  139. # Add cron job
  140. cat >> ${CRON_FILE_ROOT} <<EOF
  141. # ${PROG_NAME}: Backup LDAP data (at 03:00 AM)
  142. 0 3 * * * ${SHELL_BASH} ${ldap_backup_script}
  143. EOF
  144. cat >> ${TIP_FILE} <<EOF
  145. Backup LDAP data:
  146. * Script: ${ldap_backup_script}
  147. * See also:
  148. # crontab -l -u ${SYS_ROOT_USER}
  149. EOF
  150. echo 'export status_ldap_server_cron_backup="DONE"' >> ${STATUS_FILE}
  151. }