Monitor de Cambio en Directorio.
ELO330 - Programación de Sistemas
Danny Sateler González - 2521028-K
Sergio Silva Muñoz - 2521025-5


Introducción:

Esta tarea consiste en un script bash que monitorea una carpeta <directorio>, esta es revisada cada <segundos> segundos, y cuando un cambio es detectado se envía un correo electronico reportando dicho cambio. Este reporte se hace mediante correo electronico utilizando la funcion openssl de bash y que permite hacer el envió del correo utilizando un servidor smtp.


Ejecución:

Para correr el script de debe ejecutar la sentencia:
$ ./mcd.sh <segundos> <directorio>
Luego, el programa le pedirá la información necesaria para su funcionamiento: servidor smtp a utilizar, puerto donde éste escucha, cuenta email desde donde se enviará la alerta, password en formato codificado base64 y cuenta email donde se enviará la alerta.


Funcionamiento del Script:

El script comprueba que se hayan ingresado la cantidad correcta de argumentos, si no es así, se termina el proceso, en caso contrario, prepara los archivos temporales y variables que se utilizarán en el proceso. Luego la funcion set_mail() lee los datos necesarios introducidos por el usuario mediante el comando read y los guardan para despues ser ajustadas al formato correcto para el funcionamiento del script (se separa el usuario del @, etc). Mediante el comando ls se guarda la información que contiene el directorio y esta es guardada en un archivo, luego cada segundos se repite el paso anterior pero la informacion es guardada en otro archivo, y se comparan mediante el comando diff, si son diferenes es porque se produjo un cambio dentro del directorio, y la salida de este comando es guardada en otro archivo para ser reportada. Ahora se necesita enviar el correo, para ello se creo la funcion send_mail(), que formatea los datos obtenidos mediante set_mail() y abre una conección con el servidor smtp mediante el comando openssl, utilizando una pipa se le pasa la información necesaria desde una función llamada mail() la cual responde automaticamente a cada petición del servidor compensando los retardos de transmisión para cada petición con un sleep.


Funcionalidad extra:

Además se agregó la opción para que al momento de pedir la password se oculta lo que se escribe, de este modo se facilita el uso ya que el usuario puede escribir su password sin necesidad de codificarla antes y además nadie podra verla, para utilizar este modo de ejecución se debe agregar un 1 como tercer agumento al momento de ejecutar. Se incluyó tambien una función cabecera() que calcula en que momento del dia se envía el email con el reporte, de este modo el correo incluye un “buenos dias”, “buenas tardes” o “buenas noches” dependiendo del caso, y produce un efecto mas acogedor para el receptor.