#!/bin/bash

#/**
#@file    comparedhcpopengnsys
#@brief   Compara la configuración de los equipos en el dhcp y la base de datos de opengnsys
#@brief   Definir la variable "DHCPFILE" para indicar un fichero DHCP alternativo.
#@usage   comparedhcpopengnsys
#@usage   DHCPFILE=/camino/fichero/dhcpd.conf comparedhcpopengnsys
#@warning El script utiliza dos archivos temporales, uno de cada servicio, con el formato nombre;mac;ip.
#@warning El formato depende de que el fichero dhcpd.conf este en el orden "correcto"
#@version 1.0.4
#@author  Irina Gómez, Univ. Sevilla.
#@date    2012-02-08
#*/ ##


PROG="$(basename "$0")"
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
DHCPFILE=${DHCPFILE:-/etc/dhcp/dhcpd.conf}
TMP_DHCP=/tmp/$PROG-dhcp$$
TMP_MYSQL=/tmp/$PROG-mysql$$

source $OPENGNSYS/lib/ogfunctions.sh || exit 1

[ "$*" == "help" ] && help
[ "$*" == "version" ] && version
[ "$USER" != "root" ] && raiseError access "Solo ejecutable por root"
[ -r $DHCPFILE ] || raiseError access "No tenemos acceso al fichero de configuracion del dhcp"

# Obtener datos de acceso a la Base de datos.
source $SERVERCONF 2> /dev/null || raiseError access "Fichero de configuración del servidor"

trap "rm -f $TMP_DHCP $TMP_MYSQL" 1 2 3 9 15
# Genero fichero temporal de dhcp recorriendo la configuración del dhcp cadena a cadena.
# Quito comentarios del fichero
CONTENIDO=$(sed  's/#.*$//' $DHCPFILE)
OLDLINE=""
HOST=""
IP=""
MAC=""
for LINE in ${CONTENIDO} ; do
    case $LINE in
        "host")           OLDLINE="host" && continue ;;
        "hardware")       OLDLINE="hardware" && continue ;;
        "ethernet")       [ "$OLDLINE" == "hardware" ] && OLDLINE="hardware ethernet" && continue ;;
        "fixed-address")  OLDLINE="fixed-address" && continue ;;
        "}")              [ "$HOST" == "" ] || echo "$HOST;${MAC%%;};${IP%%;}" >> $TMP_DHCP
                          HOST=""
                          IP=""
                          MAC=""
                          continue
                          ;;
    esac
    case "$OLDLINE" in
        "host")              HOST=$LINE ;;
        "hardware ethernet") MAC=$(echo $LINE|sed s/://g)  ;;
        "fixed-address")     IP=$LINE ;;
    esac
    OLDLINE=""
done
# Ordeno el fichero
sort -o $TMP_DHCP $TMP_DHCP

# Creo fichero temporal del mysql, de la base de datos de opengnsys
dbexec "select CONCAT_WS (';', nombreordenador, mac, ip) from ordenadores order by nombreordenador;" > $TMP_MYSQL

# Comparo los ficheros
echo "Comparamos las configuraciones: < dhcp y > mysql"
diff -bi $TMP_DHCP $TMP_MYSQL && echo "El fichero del servicio dhcp y la base de datos de ogAdmBD tienen la misma configuracion"

rm -f $TMP_DHCP $TMP_MYSQL

