amélioration du PTR
This commit is contained in:
@@ -51,6 +51,14 @@ get_fqdn() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Fonction pour obtenir le FQDN réel avec `host`
|
||||||
|
get_actual_fqdn() {
|
||||||
|
local ip="$1"
|
||||||
|
local actual_fqdn=$(host "$ip" | awk '/domain name pointer/ {print $5}' | sed 's/\.$//')
|
||||||
|
echo "$actual_fqdn"
|
||||||
|
}
|
||||||
|
|
||||||
# Fonction pour vérifier si un hostname est déjà enregistré
|
# Fonction pour vérifier si un hostname est déjà enregistré
|
||||||
is_hostname_registered() {
|
is_hostname_registered() {
|
||||||
local hostname="$1"
|
local hostname="$1"
|
||||||
@@ -60,6 +68,8 @@ is_hostname_registered() {
|
|||||||
|
|
||||||
# Variable pour suivre si un changement a été fait
|
# Variable pour suivre si un changement a été fait
|
||||||
MODIFIED=0
|
MODIFIED=0
|
||||||
|
MODIFIED_BY_HOSTNAME=0
|
||||||
|
MODIFIED_BY_FQDN=0
|
||||||
|
|
||||||
# Vérifier si l'IP existe déjà dans le fichier
|
# Vérifier si l'IP existe déjà dans le fichier
|
||||||
EXISTING_HOSTNAMES=($(grep -E "address=/[^ ]+/$IP$" "$DNSMASQ_CONF" | sed -E "s/address=\/([^\/]+)\/$IP/\1/"))
|
EXISTING_HOSTNAMES=($(grep -E "address=/[^ ]+/$IP$" "$DNSMASQ_CONF" | sed -E "s/address=\/([^\/]+)\/$IP/\1/"))
|
||||||
@@ -78,11 +88,17 @@ for HOSTNAME in "${HOSTNAMES[@]}"; do
|
|||||||
if is_hostname_registered "$FQDN"; then
|
if is_hostname_registered "$FQDN"; then
|
||||||
echo "L'association $FQDN -> $IP existe déjà."
|
echo "L'association $FQDN -> $IP existe déjà."
|
||||||
else
|
else
|
||||||
read -p "Le FQDN $FQDN n'est pas dans la liste. Voulez-vous l'ajouter ? (o/n) " REPLY
|
read -t 5 -p "Le FQDN $FQDN n'est pas dans la liste. Voulez-vous l'ajouter ? (o/N) 5s " REPLY
|
||||||
|
# Si aucune entrée n'est faite dans le délai imparti, on met "n" par défaut
|
||||||
|
if [[ -z "$REPLY" ]]; then
|
||||||
|
REPLY="n"
|
||||||
|
echo -e "\nTemps écoulé. Réponse par défaut : n"
|
||||||
|
fi
|
||||||
if [[ "$REPLY" =~ ^[Oo]$ ]]; then
|
if [[ "$REPLY" =~ ^[Oo]$ ]]; then
|
||||||
echo "address=/$FQDN/$IP" >> "$DNSMASQ_CONF"
|
echo "address=/$FQDN/$IP" >> "$DNSMASQ_CONF"
|
||||||
echo "Ajout de : $FQDN -> $IP"
|
echo "Ajout de : $FQDN -> $IP"
|
||||||
MODIFIED=1
|
MODIFIED=1
|
||||||
|
MODIFIED_BY_FQDN=1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -92,27 +108,60 @@ for HOSTNAME in "${HOSTNAMES[@]}"; do
|
|||||||
echo "address=/$HOSTNAME/$IP" >> "$DNSMASQ_CONF"
|
echo "address=/$HOSTNAME/$IP" >> "$DNSMASQ_CONF"
|
||||||
echo "Ajout de : $HOSTNAME -> $IP"
|
echo "Ajout de : $HOSTNAME -> $IP"
|
||||||
MODIFIED=1
|
MODIFIED=1
|
||||||
|
MODIFIED_BY_HOSTNAME=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérification et ajout du PTR record
|
||||||
|
PTR_RECORD=$(get_ptr_record "$IP")
|
||||||
|
EXISTING_PTR=$(grep -E "ptr-record=$PTR_RECORD," "$DNSMASQ_CONF" | cut -d'=' -f2)
|
||||||
|
|
||||||
|
if [[ $MODIFIED -eq 1 ]]; then
|
||||||
|
# Déterminer $ACTUAL_FQDN
|
||||||
|
test $MODIFIED_BY_HOSTNAME -eq 1 && ACTUAL_FQDN=$HOSTNAME
|
||||||
|
if is_hostname_registered "$FQDN"; then
|
||||||
|
ACTUAL_FQDN=$FQDN
|
||||||
|
fi
|
||||||
|
test $MODIFIED_BY_FQDN -eq 1 && ACTUAL_FQDN=$FQDN
|
||||||
|
else
|
||||||
|
ACTUAL_FQDN=""
|
||||||
|
|
||||||
|
if is_hostname_registered "$HOSTNAME"; then
|
||||||
|
ACTUAL_FQDN=$HOSTNAME
|
||||||
|
fi
|
||||||
|
if is_hostname_registered "$FQDN"; then
|
||||||
|
ACTUAL_FQDN=$FQDN
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Si ACTUAL_FQDN n'est pas vide, alors
|
||||||
|
if [[ -n "$ACTUAL_FQDN" ]]; then
|
||||||
|
# Si l'enregistrement actuel ne correspond pas déjà à $ACTUAL_FQDN, procéder à la mise à jour
|
||||||
|
if [[ "$(get_actual_fqdn "$IP")" != "$ACTUAL_FQDN" ]]; then
|
||||||
|
if [[ -n "$EXISTING_PTR" ]]; then
|
||||||
|
if [[ "$EXISTING_PTR" != "ptr-record=$PTR_RECORD,$ACTUAL_FQDN" ]]; then
|
||||||
|
read -t 5 -p "Voulez-vous le remplacer ? (o/N) 5s " REPLY
|
||||||
|
if [[ -z "$REPLY" ]]; then
|
||||||
|
REPLY="n"
|
||||||
|
echo -e "\nTemps écoulé. Réponse par défaut : n"
|
||||||
|
fi
|
||||||
|
if [[ "$REPLY" =~ ^[Oo]$ ]]; then
|
||||||
|
sed -i "/ptr-record=$PTR_RECORD/d" "$DNSMASQ_CONF"
|
||||||
|
echo "ptr-record=$PTR_RECORD,${ACTUAL_FQDN}" >> "$DNSMASQ_CONF"
|
||||||
|
echo "PTR mis à jour : $PTR_RECORD -> ${ACTUAL_FQDN}"
|
||||||
|
MODIFIED=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "ptr-record=$PTR_RECORD,${ACTUAL_FQDN}" >> "$DNSMASQ_CONF"
|
||||||
|
echo "Ajout du PTR : $PTR_RECORD -> ${ACTUAL_FQDN}"
|
||||||
|
MODIFIED=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
# Vérification et ajout du PTR record
|
|
||||||
PTR_RECORD=$(get_ptr_record "$IP")
|
|
||||||
EXISTING_PTR=$(grep -E "ptr-record=$PTR_RECORD," "$DNSMASQ_CONF" | cut -d'=' -f2)
|
|
||||||
if [[ -n "$EXISTING_PTR" ]]; then
|
|
||||||
echo "Un enregistrement PTR existant a été trouvé : $EXISTING_PTR"
|
|
||||||
read -p "Voulez-vous le remplacer ? (o/n) " REPLY
|
|
||||||
if [[ "$REPLY" =~ ^[Oo]$ ]]; then
|
|
||||||
sed -i "/ptr-record=$PTR_RECORD/d" "$DNSMASQ_CONF"
|
|
||||||
echo "ptr-record=$PTR_RECORD,${HOSTNAMES[0]}" >> "$DNSMASQ_CONF"
|
|
||||||
echo "PTR mis à jour : $PTR_RECORD -> ${HOSTNAMES[0]}"
|
|
||||||
MODIFIED=1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "ptr-record=$PTR_RECORD,${HOSTNAMES[0]}" >> "$DNSMASQ_CONF"
|
|
||||||
echo "Ajout du PTR : $PTR_RECORD -> ${HOSTNAMES[0]}"
|
|
||||||
MODIFIED=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Redémarrer dnsmasq seulement si des changements ont été faits
|
# Redémarrer dnsmasq seulement si des changements ont été faits
|
||||||
if [[ $MODIFIED -eq 1 ]]; then
|
if [[ $MODIFIED -eq 1 ]]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user