LDAP_PWD_FILE="${HOME}/.private/dirsrv-prd-dpx-admin-pwd-wonl.txt"
LDAP_BASE="o=isp"
GLOBAL_SEARCH_BASE="o=isp"
-DPX_PEOPLE_SEARCH_BASE="ou=People,o=Pixelpark,o=isp"
+DPX_SEARCH_BASE="o=Pixelpark,o=isp"
+DPX_PEOPLE_SEARCH_BASE="ou=People,${DPX_SEARCH_BASE}"
+SERVICE_SP_SEARCH_BASE="ou=service_sp,ou=Applications,${DPX_SEARCH_BASE}"
OLD_IMAP_SERVER='mail-brln-store02.pixelpark.com'
# NEW_IMAP_SERVER='dev-imap01.pixelpark.com'
LDIF_FILE=
+DEFAULT_MAX_UID=1000
+DEFAULT_MAX_GID=1000
+
+AUTHOR_DN="uid=frank.brehm,ou=People,o=Pixelpark,o=isp"
+
#-------------------------------------------------------------------
detect_color() {
}
+#------------------------------------------------
+add_uid_pool() {
+
+ local dn="$1"
+ local search_base="$2"
+
+ local cmd=
+ local max_uid=
+ local cn=
+ local desc="The numeric UID of this object should be always greater than "
+ desc+="the uidNumber of all users below."
+ local doc_id="Pool for numeric UIDs of ${search_base}"
+
+ empty_line
+
+ debug "Checking for uidPool '${CYAN}${dn}${NORMAL}' ..."
+ cmd="ldapsearch -x -LLL -o ldif-wrap=no -H '${LDAP_URL}' "
+ cmd+="-b \"${dn}\" -x -D \"${LDAP_USR}\" -y \"${LDAP_PWD_FILE}\" "
+ cmd+="\"(objectClass=*)\" dn | grep -i '^dn:'"
+ # debug "Executing: ${cmd}"
+ value=$( eval ${cmd} || true )
+
+ if [[ -n "${value}" ]] ; then
+ info "uidPool '${CYAN}${dn}${NORMAL}' is already existing."
+ return 0
+ fi
+
+ info "Creating uidPool object '${CYAN}${dn}${NORMAL}' ..."
+
+ cmd="ldapsearch -x -LLL -o ldif-wrap=no -H '${LDAP_URL}' "
+ cmd+="-b \"${search_base}\" -x -D \"${LDAP_USR}\" -y \"${LDAP_PWD_FILE}\" "
+ cmd+="\"uidNumber=*\" uidNumber | grep '^uidNumber:' | sed -e 's/^uidNumber:[ ][ ]*//i' | "
+ cmd+="sort -n -u | tail -n 1"
+
+ debug "Executing: ${cmd}"
+ max_uid=$( eval ${cmd} )
+
+ if [[ -z "${max_uid}" ]] ; then
+ max_uid="${DEFAULT_MAX_UID}"
+ fi
+ max_uid=$(( ${max_uid} + 1 ))
+ debug "uidNumber of pool: ${CYAN}${max_uid}${NORMAL}."
+
+ cn=$( echo "${dn}" | sed -e 's/,.*//' | awk -F= '{ print $2 }'
+ debug "Common name of pool: '${CYAN}${cn}${NORMAL}'."
+
+ cat > "${LDIF_FILE}" <<-EOF
+ dn: ${dn}
+ cn: ${cn}
+ description: ${desc}
+ documentAuthor: ${AUTHOR_DN}
+ documentIdentifier: ${doc_id}
+ objectClass: document
+ objectClass: uidPool
+ objectClass: top
+ uidNumber: ${max_uid}
+
+ EOF
+
+ cmd="ldapadd -H \"${LDAP_URL}\" -x -D \"${LDAP_USR}\" -y \"${LDAP_PWD_FILE}\""
+ cmd+=" -f \"${LDIF_FILE}\""
+ debug "Executing: ${cmd}"
+ if [[ "${SIMULATE}" != "y" ]] ; then
+ eval $cmd
+ fi
+ debug "Done."
+
+}
+
+#------------------------------------------------
+add_gid_pool() {
+
+ local dn="$1"
+ local search_base="$2"
+
+ local cmd=
+ local max_gid=
+ local cn=
+ local desc="The numeric GID of this object should be always greater than "
+ desc+="the gidNumber of all Groups below."
+ local doc_id="Pool for numeric GIDs of ${search_base}"
+
+ empty_line
+
+ debug "Checking for gidPool '${CYAN}${dn}${NORMAL}' ..."
+ cmd="ldapsearch -x -LLL -o ldif-wrap=no -H '${LDAP_URL}' "
+ cmd+="-b \"${dn}\" -x -D \"${LDAP_USR}\" -y \"${LDAP_PWD_FILE}\" "
+ cmd+="\"(objectClass=*)\" dn | grep -i '^dn:'"
+ # debug "Executing: ${cmd}"
+ value=$( eval ${cmd} || true )
+
+ if [[ -n "${value}" ]] ; then
+ info "gidPool '${CYAN}${dn}${NORMAL}' is already existing."
+ return 0
+ fi
+
+ info "Creating gidPool object '${CYAN}${dn}${NORMAL}' ..."
+
+ cmd="ldapsearch -x -LLL -o ldif-wrap=no -H '${LDAP_URL}' "
+ cmd+="-b \"${search_base}\" -x -D \"${LDAP_USR}\" -y \"${LDAP_PWD_FILE}\" "
+ cmd+="\"gidNumber=*\" gidNumber | grep '^gidNumber:' | sed -e 's/^gidNumber:[ ][ ]*//i' | "
+ cmd+="sort -n -u | tail -n 1"
+
+ debug "Executing: ${cmd}"
+ max_gid=$( eval ${cmd} )
+
+ if [[ -z "${max_gid}" ]] ; then
+ max_gid="${DEFAULT_MAX_GID}"
+ fi
+ max_gid=$(( ${max_gid} + 1 ))
+ debug "gidNumber of pool: ${CYAN}${max_gid}${NORMAL}."
+
+ cn=$( echo "${dn}" | sed -e 's/,.*//' | awk -F= '{ print $2 }'
+ debug "Common name of pool: '${CYAN}${cn}${NORMAL}'."
+
+ cat > "${LDIF_FILE}" <<-EOF
+ dn: ${dn}
+ cn: ${cn}
+ description: ${desc}
+ documentAuthor: ${AUTHOR_DN}
+ documentIdentifier: ${doc_id}
+ objectClass: document
+ objectClass: gidPool
+ objectClass: top
+ uidNumber: ${max_gid}
+
+ EOF
+
+ cmd="ldapadd -H \"${LDAP_URL}\" -x -D \"${LDAP_USR}\" -y \"${LDAP_PWD_FILE}\""
+ cmd+=" -f \"${LDIF_FILE}\""
+ debug "Executing: ${cmd}"
+ if [[ "${SIMULATE}" != "y" ]] ; then
+ eval $cmd
+ fi
+ debug "Done."
+
+}
+
+#------------------------------------------------
+add_id_pools() {
+
+ empty_line
+ draw_line
+ info "Adding ${CYAN}UID- and GID-Pools${NORMAL} ..."
+ empty_line
+
+ add_uid_pool "cn=uid-pool,${DPX_SEARCH_BASE}" "${DPX_PEOPLE_SEARCH_BASE}"
+ add_uid_pool "cn=uid-pool,${SERVICE_SP_SEARCH_BASE}" "${SERVICE_SP_SEARCH_BASE}"
+ add_gid_pool "cn=gid-pool,${DPX_SEARCH_BASE}" "${DPX_SEARCH_BASE}"
+
+}
+
#------------------------------------------------
main() {
update_all_mailhosts
update_all_public_sshkeys
adding_additional_groups
+ add_id_pools
empty_line
info "Finished."