diff --git a/bin/gestUsers.sh b/bin/gestUsers.sh index 5af92b7..0d0daad 100755 --- a/bin/gestUsers.sh +++ b/bin/gestUsers.sh @@ -8,9 +8,9 @@ KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) setKazVars . $DOCKERS_ENV -. $KAZ_KEY_DIR/env-ldapServ -. $KAZ_KEY_DIR/env-nextcloudServ -. $KAZ_KEY_DIR/env-sympaServ +. $KAZ_KEY_DIR/env-ldapServ +. $KAZ_KEY_DIR/env-nextcloudServ +. $KAZ_KEY_DIR/env-sympaServ . $KAZ_KEY_DIR/env-paheko VERSION="16-10-2025" @@ -50,7 +50,7 @@ rm -rf /tmp/*.json ############################################ Fonctions ####################################################### ExpMail() { - + . $KAZ_KEY_DIR/env-mail MAIL_DEST=$1 MAIL_SUJET=$2 @@ -69,7 +69,7 @@ PostMattermost() { searchEmail() { - # on peut appeler cette fonction avec un paramêtre + # on peut appeler cette fonction avec un paramêtre # qui doit être une adresse email CHOIX_MAIL="" SEARCH_OBJECT_CLASS="inetOrgPerson" @@ -85,7 +85,7 @@ searchEmail() { echo "----------------------------------------------------------------------" read -p "Adresse ou caractere contenu dans cette adresse (r ou R pour retour ) ? : " RMAIL [[ ${RMAIL} =~ ^[rRqQ]$ ]] && Main - if [ "${RMAIL}" == "" ] + if [ "${RMAIL}" == "" ] then fait=0 else @@ -114,11 +114,11 @@ searchEmail() { # si on tape r ou r ou Q ou q ou 0 on relance le menu de recherche de mail [[ $NB_LIGNE_MAIL =~ [rRqQ0] ]] && searchEmail $1 CHOIX_MAIL=$(cat ${TFILE_MAILS_TROUVE} | grep "^${NB_LIGNE_MAIL}\b" | awk '{print $3}' | tr -d '[:space:]') - - # si on répond par entrée nb_ligne_mail sera vide - # si on donne une réponse qui est une lettre ou un mauvais chiffre choix_mail sera vide + + # si on répond par entrée nb_ligne_mail sera vide + # si on donne une réponse qui est une lettre ou un mauvais chiffre choix_mail sera vide # alors on reboucle sur la liste des mails - + if [ "$CHOIX_MAIL" == "" ] || [ "$NB_LIGNE_MAIL" == "" ] then CHOIX_MAIL="" @@ -171,7 +171,7 @@ infoEmail() { printKazMsg "${ACTION_EN_COURS}" echo "------------------------------------------------" read -p "Alias ou Mail ? (R pour retour ou M/A [M] :" RINFOMAIL - case ${RINFOMAIL} in + case ${RINFOMAIL} in "" | M | m ) infofait=O searchEmail @@ -202,12 +202,12 @@ infoEmail() { jq .results[].ville /tmp/$CHOIX_MAIL-paheko.json SERVEUR_PROD=$(jq .results[].serveur_prod /tmp/$CHOIX_MAIL-paheko.json) NOM_ORGA=$(jq .results[].nom_orga /tmp/$CHOIX_MAIL-paheko.json) - [ "${NOM_ORGA}" = "null" ] || echo -e " - ORGA : ${GREEN}${NOM_ORGA}${NC} sur serveur ${GREEN}${SERVEUR_PROD}${NC} " + [ "${NOM_ORGA}" = "null" ] || echo -e " - ORGA : ${GREEN}${NOM_ORGA}${NC} sur serveur ${GREEN}${SERVEUR_PROD}${NC} " echo -n " - Quota (Paheko) : " echo -ne "${GREEN}" jq .results[].quota_disque /tmp/$CHOIX_MAIL-paheko.json echo -ne "${NC}" - echo -n " - Quota Mail (Ldap) : " + echo -n " - Quota Mail (Ldap) : " echo -ne "${GREEN}" ldapsearch -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i mailquota | cut -c 11-60 echo -ne "${NC}" @@ -254,7 +254,7 @@ infoEmail() { -w "${LDAP_ADMIN_PASSWORD}" -b "${ldap_root}" "(&(objectclass=PostfixBookMailForward)(cn=*${CHOIX_MAIL}*))" mail \ | grep ^mail: | sed -e 's/^mail://') do - echo -ne "=====> ${GREEN} " + echo -ne "=====> ${GREEN} " echo "${INFOALIAS}" | tr -d [:space:] echo "${NC}" done @@ -278,7 +278,12 @@ searchDestroy() { CHOIX_MAIL="" searchEmail REP_SEARCH_DESTROY=$CHOIX_MAIL + MAIL_SECOURS=$(ldapsearch -H ldap://${LDAP_IP} \ + -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ + -w "${LDAP_ADMIN_PASSWORD}" \ + -b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${REP_SEARCH_DESTROY}*))" | grep ^mailDeSecours | sed -e 's/^mailDeSecours: //') echo "CHOIX=$REP_SEARCH_DESTROY" + echo "SECOURS=${MAIL_SECOURS}" echo "domaine en cours : ${DOMAINE_EN_COURS}" echo "--------------------------------- SUPPRESION ----------------------------------------" while : @@ -335,10 +340,11 @@ searchDestroy() { fi echo -e "${NC}" echo "" - echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans la liste info de sympa" + echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} et ${MAIL_SECOURS} dans la liste info de sympa" echo -e "${NC}" echo "" docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${REP_SEARCH_DESTROY}" + docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${MAIL_SECOURS}" echo -e "${NC}" echo "" echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le serveur de mail" @@ -355,10 +361,6 @@ searchDestroy() { echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le ldap" echo -e "${NC}" echo "" - MAIL_SECOURS=$(ldapsearch -H ldap://${LDAP_IP} \ - -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ - -w "${LDAP_ADMIN_PASSWORD}" \ - -b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${REP_SEARCH_DESTROY}*))" | grep ^mailDeSecours | sed -e 's/^mailDeSecours: //') ldapdelete -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" "cn=${REP_SEARCH_DESTROY},ou=users,${ldap_root}" if [ "$?" -eq "0" ] then @@ -373,7 +375,7 @@ searchDestroy() { printKazError "Erreur de suppression" fi printKazMsg "Envoi d'un message dans mattermost pour la suppression du compte" - docker exec -ti mattermostServ bin/mmctl post create kaz:Creation-Comptes --message "Le compte ${REP_SEARCH_DESTROY} est supprimé" >/dev/null 2>&1 + docker exec -ti mattermostServ bin/mmctl post create kaz:Creation-Comptes --message "Le compte ${REP_SEARCH_DESTROY} est supprimé , mail envoyé à ${MAIL_SECOURS}" >/dev/null 2>&1 MAIL_SUPPR="Le compte ${REP_SEARCH_DESTROY} est supprimé" OLDIFS=${IFS} IFS='' @@ -386,7 +388,7 @@ searchDestroy() { done } -gestPassword() { +gestPassword() { ACTION_EN_COURS="Gestion du mot de passe d' un compte" searchEmail #cree un mdp acceptable par postfix/nc/mattermost @@ -473,7 +475,7 @@ createMail() { QUOTA=1 TRUE_KAZ=TRUE fait=0 - # On demande le mail souhaite on regarde si c' est valide et si ça existe déjà + # On demande le mail souhaite on regarde si c' est valide et si ça existe déjà while [ $fait -eq 0 ] do clear @@ -482,7 +484,7 @@ createMail() { echo "----------------------------------------------------------------------" read -p "Mail souhaité (r ou R pour quitter ) : " EMAIL_SOUHAITE [[ ${EMAIL_SOUHAITE} =~ ^[rRqQ]$ ]] && Main - if [[ ${EMAIL_SOUHAITE} =~ ${regexMail} ]] + if [[ ${EMAIL_SOUHAITE} =~ ${regexMail} ]] then ldapsearch -H ldap://${LDAP_IP} \ -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ @@ -509,7 +511,7 @@ createMail() { # on renseigne le domaine en cours pour les options qui concernent pas le domaine kaz.bzh # ---------------------------------------------------------------------- DOMAINE_EN_COURS=$(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//') - echo " ---- Domaine: " ${DOMAINE_EN_COURS} ---- + echo " ---- Domaine: " ${DOMAINE_EN_COURS} ---- # ---------------------------------------------------------------------- # On demande le mail de secours et on teste si c' est un mail valide fait=0 @@ -546,7 +548,7 @@ createMail() { # on constitue le user,domain et pass crypté pour le ldap LDAPUSER=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $1}') LDAPDOMAIN=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $2}') - LDAPPASS=$(mkpasswd -m sha512crypt ${PASSWORD}) + LDAPPASS=$(mkpasswd -m sha512crypt ${PASSWORD}) [ "${DOMAINE_EN_COURS}" != "${domain}" ] && TRUE_KAZ=FALSE echo "${GREEN}Mail souhaité : ${NC}${EMAIL_SOUHAITE}" echo "${GREEN}Mail secours : ${NC}${EMAIL_SECOURS}" @@ -587,7 +589,7 @@ agoraEnabled: ${TRUE_KAZ}\n\ userPassword: {CRYPT}${LDAPPASS}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=${LDAP_ADMIN_USERNAME},${ldap_root}\" -x -w ${LDAP_ADMIN_PASSWORD}" >${TFILE_CREATE_MAIL} # on execute le fichier avec les données ldap pour créer l' entrée dans l' annuaire bash ${TFILE_CREATE_MAIL} >/dev/null -# on colle le compte et le mot de passe dans le fichier +# on colle le compte et le mot de passe dans le fichier echo "Création de : ${EMAIL_SOUHAITE} avec le mot de passe : ${PASSWORD}" >>${TFILE_CREATE_MAIL} OLDIFS=${IFS} IFS='' @@ -618,7 +620,7 @@ Main createAlias() { ACTION_EN_COURS="création d' un alias de messagerie" fait=0 - # On demande alias souhaite on regarde si c' est valide et si ça existe déjà + # On demande alias souhaite on regarde si c' est valide et si ça existe déjà while [ $fait -eq 0 ] do clear @@ -627,7 +629,7 @@ createAlias() { echo "-------------------------------------------------" read -p "Alias souhaité (r ou q pour quitter ) : " AMAIL [[ ${AMAIL} =~ ^[rRqQ]$ ]] && Main - if [[ ${AMAIL} =~ ${regexMail} ]] + if [[ ${AMAIL} =~ ${regexMail} ]] then RESU_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} \ -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ @@ -689,7 +691,7 @@ createAlias() { done fait=0 while [ "$fait" = 0 ] - do + do clear echo "--------------------------------------------------" echo -e "${GREEN}résumé de la situation${NC}" @@ -713,7 +715,7 @@ mailAlias: ${AMAIL}\n\ ${LDAPALAISMAIL}\n\n" | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w ${LDAP_ADMIN_PASSWORD} fait=1 printKazMsg "Création de ${AMAIL}" - sleep 3 + sleep 3 createAlias ;; n | N ) @@ -737,7 +739,7 @@ delAlias() { CHOIX_MAIL="" RESU_ALIAS="" searchEmail alias - RALIAS=${CHOIX_MAIL} + RALIAS=${CHOIX_MAIL} [[ ${RALIAS} =~ ^[rRqQ]$ ]] && Main if [[ ${RALIAS} =~ ${regexMail} ]] then @@ -764,13 +766,13 @@ delAlias() { "" | * ) faitdel=0 ;; - - esac + + esac done else fait=0 fi - + else printKazError " - format alias invalide !" sleep 2 @@ -780,12 +782,12 @@ delAlias() { delAlias } -modifyAlias() +modifyAlias() { ACTION_EN_COURS="Modfication d' un alias de messagerie" MRESU_ALIAS="" LISTE_MAIL_ALIAS="" - NEW_LISTE_MAIL_ALIAS="" + NEW_LISTE_MAIL_ALIAS="" ACHANGE=0 searchEmail alias LISTE_MAIL_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} \ @@ -841,13 +843,13 @@ modifyAlias() BOUCLE_ADD_MAIL=1 else printKazMsg "erreur de mail" - fi + fi done ;; "" | n | N ) BOUCLE_ADD_MAIL=1 ;; - * ) + * ) BOUCLE_ADD_MAIL=1 ;; esac @@ -875,7 +877,7 @@ modifyAlias() } updateUser() { - rm -rf /tmp/*attributs.txt + rm -rf /tmp/*attributs.txt ACTION_EN_COURS="Modification d'un compte" ATTRIB_MAILS="mailDeSecours mailAlias" ATTRIB_QUOTA="mailQuota nextcloudQuota" @@ -923,7 +925,7 @@ updateUser() { then echo "------------------------------------------------------------------------" read -p "=====> ATTENTION : il y a des modifs en cours abandonner ?(o ou n) ? <===== : " RABANDON - case "${RABANDON}" in + case "${RABANDON}" in o | O ) faitAttrib=1 ;; @@ -933,7 +935,7 @@ updateUser() { * ) echo "" ;; - esac + esac else faitAttrib=1 fi @@ -947,7 +949,7 @@ updateUser() { # pour être sur de virer tous les espaces et les tab etc on utilise [:space:] # on affiche tout les arguments ( les $1 $2 $2 avec la boucle for) # on ajoute de ___ pour pouvoir le remplace par un espace entre chaque variable - # afin d' afficher un beau contenu1 contenu2 contenu 3 + # afin d' afficher un beau contenu1 contenu2 contenu 3 ATTRIBUT_EN_COURS=$(cat ${FIC_ATTRIBUTS} | grep "^${REP_ATTRIBUT}\b" | awk '{print $3}') CONTENU_ATTRIBUT=$(cat ${FIC_ATTRIBUTS} | grep "^${REP_ATTRIBUT}\b" \ @@ -971,7 +973,7 @@ updateUser() { mailDeSecours ) echo "------------------------------------------------" read -p " - Nouveau Mail de Secours : " RCHANGE - if [[ ${RCHANGE} =~ ${regexMail} ]] + if [[ ${RCHANGE} =~ ${regexMail} ]] then CHANGED+=([mailDeSecours]=${RCHANGE}) else @@ -1011,7 +1013,7 @@ updateUser() { do read -p " - ${GREEN}Nouvel Alias: ( F pour finir ) :${NC} " ALIAS_SUPP BOUCLE_ADD_MAIL=0 - if [[ ${ALIAS_SUPP} =~ ${regexMail} ]] + if [[ ${ALIAS_SUPP} =~ ${regexMail} ]] then if echo "${CONTENU_ATTRIBUT}" | grep "^${ALIAS_SUPP}$" then @@ -1035,7 +1037,7 @@ updateUser() { printKazMsg "Erreur" sleep 2 ;; - esac + esac [ "${MAILALIAS_CHANGE}" -gt "0" ] && CHANGED+=([mailAlias]="${NEW_CONTENU_ATTRIBUT} ${TALIAS_SUPP}") faitattrib=0 ;; @@ -1090,7 +1092,7 @@ updateUser() { fi ;; "" | * ) - faitAttrib=0 + faitAttrib=0 ;; esac done @@ -1149,19 +1151,19 @@ case "$CHOICE" in ;; '4' ) searchDestroy - ;; + ;; '5' ) createMail - ;; + ;; '6' ) createAlias - ;; + ;; '7' ) modifyAlias - ;; + ;; '8' ) delAlias - ;; + ;; 'h'| "H" ) clear echo "--------------------------------------------" @@ -1199,4 +1201,3 @@ esac [ ! -e ${KAZ_CONF_DIR}/autorized-domains.txt ] && { echo "création de ${KAZ_CONF_DIR}/autorized-domains.txt" ; touch ${KAZ_CONF_DIR}/autorized-domains.txt;} ! grep $domain ${KAZ_CONF_DIR}/autorized-domains.txt && echo $domain >> ${KAZ_CONF_DIR}/autorized-domains.txt Main -