]> Frank Brehm's Git Trees - pixelpark/ldap-migration.git/commitdiff
Adding creation of [UG]ID pools
authorFrank Brehm <frank@brehm-online.com>
Thu, 3 Feb 2022 14:12:36 +0000 (15:12 +0100)
committerFrank Brehm <frank@brehm-online.com>
Thu, 3 Feb 2022 14:12:36 +0000 (15:12 +0100)
after-migration.sh

index 55086a11633457716a785a5ce2a4b0cb4c4f3f1e..b6f8e1a573ae183d0ce41dabad6704d03955a0be 100755 (executable)
@@ -30,7 +30,9 @@ LDAP_URL="ldaps://prd-ds.pixelpark.com"
 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'
@@ -38,6 +40,11 @@ NEW_IMAP_SERVER='prd-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() {
 
@@ -801,6 +808,158 @@ adding_additional_groups() {
 
 }
 
+#------------------------------------------------
+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() {
 
@@ -816,6 +975,7 @@ main() {
     update_all_mailhosts
     update_all_public_sshkeys
     adding_additional_groups
+    add_id_pools
 
     empty_line
     info "Finished."