#!/bin/bash #KI: didi #KOI: lire les emails secours et tel sur chaque fiche paheko et les rajouter/modifier le ldap #KAN: 21/08/2026 #KAN: le 25/10/2026 # grosse modif, il faut passer des argumens pour modifier les quotas, le mail secours ou le nuro de tel #on récupère toutes les variables et mdp #KAZ_ROOT=/kaz KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) . $KAZ_ROOT/bin/.commonFunctions.sh setKazVars . $DOCKERS_ENV . $KAZ_KEY_DIR/env-ldapServ . $KAZ_KEY_DIR/env-paheko PRG=$(basename $0) RACINE=$(echo $PRG | awk '{print $1}') URL_PAHEKO="https://${API_USER}:${API_PASSWORD}@kaz-paheko.kaz.bzh" LDAP_IP=$(docker inspect -f '{{.NetworkSettings.Networks.ldapNet.IPAddress}}' ldapServ) regexMail="^(([A-Za-z0-9]+((\.|\-|\_|\+)?[A-Za-z0-9]?)*[A-Za-z0-9]+)|[A-Za-z0-9]+)@(([A-Za-z0-9]+)+((\.|\-|\_)?([A-Za-z0-9]+)+)*)+\.([A-Za-z]{2,})+$" FICLDIF=/tmp/${RACINE}.ldif IfExistRec() { T_EMAIL=$1 #T_MOBILE=$2 #T_MAILSECOURS=$3 #T_QUOTA=$4 SEARCH_OBJECT_CLASS="inetOrgPerson" TAB_REP="" T_REP="" T_VAL="" COUNT=0 for T_VAL in mail mailDeSecours mobile quota do T_REP="${T_REP} $(ldapsearch -H ldap://${LDAP_IP} \ -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ -w "${LDAP_ADMIN_PASSWORD}" \ -b "${ldap_root}" "(&(objectclass=${SEARCH_OBJECT_CLASS})(cn=${T_EMAIL}))" ${T_VAL}\ | grep -e ^${T_VAL}: \ | sed -e 's/'"${T_VAL}"': //g' \ | tr -d [:space:] )" # si la longueur moins de 1 alors on a une valeur et on la mets dans le tableau # sinon on met le nom du champ ( ce qui veut dire que la valeur est vide et qu'il faudra la modifier if [ $(echo -n "${T_REP}" | wc -c) -le "1" ] then [ "${COUNT}" -eq "0" ] && TAB_REP="${TAB_REP}${T_VAL}" || TAB_REP="${TAB_REP} ${T_VAL}" else [ "${COUNT}" -eq "0" ] && TAB_REP="${TAB_REP}${T_REP}" || TAB_REP="${TAB_REP} ${T_REP}" fi T_REP="" COUNT=$(expr ${COUNT} + 1 ) done # on retourne les valeurs trouvées # si tout le tableau ne contient que les noms de champs alors c'est que tout est [ "${TAB_REP}" = "mail mailDeSecours mobile quota" ] && { echo "vide" ; exit 1 ; } [ -z "${TAB_REP}" ] && { echo "vide" ; exit 1 ; } || echo ${TAB_REP} } LdapUpdateAll() { >${FICLDIF} COUNT=0 # bon la requête je ne l'ai pas inventée vu mon niveau de sql # j'ai fait une recherche avancée dans paheko et ça propose de montrer la requête for line in $(curl -s ${URL_PAHEKO}/api/sql -d "SELECT u."email" , u."telephone" , u."email_secours", u."quota_disque" FROM users_view AS u INNER JOIN users_search AS us USING (id) \ WHERE (id_category in ('12','3') and u.telephone like '06%' or telephone like '07%' ) LIMIT 3000" \ | sed 's/\([0-9]\)[ \.]\([-0-9]\)/\1\2/g' \ | jq -r '.results[] | [.email,.telephone,.email_secours,.quota_disque]| @csv') do TAB_MODIF="" MAILSECOURS=$(echo ${line} | awk -F',' {'print $3'} | sed -e 's/"//g') EMAIL=$(echo ${line} | awk -F',' {'print $1'} | sed -e 's/"//g') MOBILE=$(echo ${line} | awk -F',' {'print $2'} | sed -e 's/"//g') QUOTA=$(echo ${line} | awk -F',' {'print $4'} | sed -e 's/"//g') #A_REP=$(IfExistRec ${EMAIL} ${MOBILE} ${MAILSECOURS} ${QUOTA}) A_REP=$(IfExistRec ${EMAIL}) A_MAIL=$(echo ${A_REP} | awk {'print $1'}) A_MAILSECOURS=$(echo ${A_REP} | awk {'print $2'}) A_MOBILE=$(echo ${A_REP} | awk {'print $3'}) A_QUOTA=$(echo ${A_REP} | awk {'print $4'}) # cas ou ça ne remonte rien donc on passe au suivant [ "${A_REP}" = "vide" ] && { continue; } [ "${A_MOBILE}" != "${MOBILE}" ] && { TAB_MODIF="${TAB_MODIF}$(echo -e "replace: mobile\nmobile: ${MOBILE}\n")" ; TAB_MODIF="${TAB_MODIF}\n$(echo "-\n")"; } [ "${A_MAILSECOURS}" != "${MAILSECOURS}" ] && TAB_MODIF="${TAB_MODIF}$(echo -e "replace: mailDeSecours\nmailDeSecours: ${MAILSECOURS}\n-\n")" [ "${A_QUOTA}" != "${QUOTA}" ] && TAB_MODIF="${TAB_MODIF}$(echo -e "replace: quota\nquota: ${QUOTA}\n-\n")" if [ ! -z "${TAB_MODIF}" ] then echo -e "\ndn: cn=${EMAIL},ou=users,${ldap_root}" >>${FICLDIF} echo -e "changeType: modify" >>${FICLDIF} echo -e "${TAB_MODIF}\n" >>${FICLDIF} COUNT=$(expr ${COUNT} + 1 ) fi done echo "${COUNT} enregistrement(s) modifié(s)" cat ${FICLDIF} | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" >/dev/null 2>/dev/null } LdapUpdateUniq() { EMAIL=$1 MOBILE=$2 MAILSECOURS=$3 QUOTA=$4 PBARGU="" I_REP=$(IfExistRec ${EMAIL}) [ "${I_REP}" = "vide" ] && { echo "Le mail ${EMAIL} n'existe pas dans l'annuaire Ldap" ; exit 1;} [ "${MOBILE}" = IDEM ] && MOBILE=$(echo ${I_REP} | awk {'print $3'}) [ "${MAILSECOURS}" = IDEM ] && MAILSECOURS=$(echo ${I_REP} | awk {'print $2'}) [ "${QUOTA}" = IDEM ] && QUOTA=$(echo ${I_REP} | awk {'print $4'}) [[ ${MOBILE} =~ ^[0-9]+$ ]] && [ "$(echo ${MOBILE} | wc -L)" -eq "10" ] && [[ ${MOBILE} =~ ^(0)[67] ]] || PBARGU="${PBARGU} - Le numéro est malformé" [[ ${EMAIL} =~ ${regexMail} ]] || PBARGU="${PBARGU} - Le mail est malformé" [[ ${MAILSECOURS} =~ ${regexMail} ]] || PBARGU="${PBARGU} - Le mail de secours est malformé" [[ ${QUOTA} =~ ^[0-9]+$ ]] || echo "le quota doit être en chiffres" [ ! -z "${PBARGU}" ] && { echo ${PBARGU};exit 1; } # a chaque fois qu'un élément est différent on le dit dans la variable PBARGU en commencant par un - # ça va permettre de compter les tirets pour déterminer si quelque chose est a changer COMPTEUR=0 # si le numéro est connu on le dit dans la variable [ "$(echo ${I_REP} | awk {'print $3'})" = "${MOBILE}" ] && { PBARGU="${PBARGU} -Le numéro est ok" ; COMPTEUR=$((COMPTEUR+1)) ; } # si le mail Secours est connu on le dit dans la variable [ "$(echo ${I_REP} | awk {'print $2'})" = "${MAILSECOURS}" ] && { PBARGU="${PBARGU} -Le mail de secours est ok" ; COMPTEUR=$((COMPTEUR+1)) ; } # si le quota est le même on le met dans la variable [ "$(echo ${I_REP} | awk {'print $4'})" = "${QUOTA}" ] && { PBARGU="${PBARGU} -Le quota est déjà ok" ; COMPTEUR=$((COMPTEUR+1)) ; } # si PBARGU n'est pas vide et si le nombre de tiret est égal à 3 c'est que tout est déjà bon et je sors # mais si le nombre de tiret n'est pas 3 c'est que au moins un des élément est a changer et là je mets les autres valeurs (puisque celles qui existent sont ok ) # donc la remettre n'est pas bien grave [ ! -z "${PBARGU}" ] && [ "$COMPTEUR" -eq "3" ] && { echo "Tout es ok : rien à faire ";exit 1; } || echo "Info : ${PBARGU}" >${FICLDIF} echo -e "dn: cn=${EMAIL},ou=users,${ldap_root}" >>${FICLDIF} echo -e "changeType: modify">>${FICLDIF} echo -e "replace: mailDeSecours">>${FICLDIF} echo -e "mailDeSecours: ${MAILSECOURS}">>${FICLDIF} echo -e "-" >>${FICLDIF} echo -e "replace: mobile">>${FICLDIF} echo -e "mobile: ${MOBILE}">>${FICLDIF} echo -e "-" >>${FICLDIF} echo -e "replace: quota">>${FICLDIF} echo -e "quota: ${QUOTA}">>${FICLDIF} echo -e "-" >>${FICLDIF} #cat ${FICLDIF} cat ${FICLDIF} | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" >/dev/null } usage() { echo " Usage $0 [ -a ] [ -u mail -s mailsecours -m mobile -q quota ]" echo " ---" echo " Ce script intérroge paheko et met à jour des champs tous les comptes ldap" echo " Ou peut juste mettre un enregistrement à jour " echo " - Les options :" echo " ------------------" echo " -a c'est pour faire une mise à jour du ldap de tous les enregistrements de paheko" echo " cette commande produit un log dans ${KAZ_ROOT}/log avec le nom du script et la date" echo " -u suivi du mail ( obligatoire ) et des options à changer " echo " (Les options sont cummulables )" echo " -u d'un mail" echo " -m d'un telephone au format 06 ou 07 XXXXXXXXXX : 10 chiffres donc ..:-)" echo " -s le mail de secours " echo " -q et le mail de secours" echo " ----------------------------------------" echo " - Exemple pour modifier juste le quota" echo " $0 -u mail -q 10" echo " - Exemple pour changer le quota et le mail de secours" echo " $0 -u mail -q 10 -s mail_secours" echo " ----------------------------------------" } ## MAIN MOBILE="" MAIL="" MAILSEC="" QUOTA="" OPTION="" [ $# -eq 0 ] && { usage; exit 1;} echo "$@" | grep "\-a" >/dev/null && [ "${#}" -gt "1" ] && { echo "-a doit être seule" ; exit 1 ; } while getopts "au:q:s:m:" flag; do case "${flag}" in a) OPTION="TOUT" ;; u) MAIL=$OPTARG ;; q) QUOTA=$OPTARG ;; s) MAILSEC=$OPTARG ;; m) MOBILE=$OPTARG ;; esac done if [ "${OPTION}" = "TOUT" ] && [ "${#}" -eq "1" ] then LdapUpdateAll >${KAZ_ROOT}/log/$0-$(date +%d-%m-%y-%H:%M:%S).log exit fi [ -z "$MAIL" ] && { echo "usage -u -q -s -m (-u obligatoire )" ; exit ; } [ -z "$QUOTA" ] && [ -z "$MOBILE" ] && [ -z "$MAILSEC" ] && { echo "-u ne peut pas être seul" ; exit 1 ;} LdapUpdateUniq ${MAIL} ${MOBILE:-IDEM} ${MAILSEC:-IDEM} ${QUOTA:-IDEM}