#!/bin/bash
#
#Beschreibung: aktualisiert die SSL-Fingerprints in der /etc/fetchmailrc 
#
#benötigt: openssl
#
#Aufruf: get_new_fingerprint.sh
#
#Hinweise und Fehler an tuxator@tuxator.de 
#
#Status: ok
###################################################################
#Variablen
declare srvarray
retval=0
typeset i i=0
#Voraussetzungen
#bin ich root?
if [[ $(whoami) != "root" ]]; then
	retval=1
fi
if [[ ${retval} = 0 ]]; then
	#Hole Zeilennummer mit "sslfingerprint" aus Datei /etc/fetchmailrc
	srvarray=($(grep -n -E "^[^#].*sslfingerprint \"[:0-9A-Z]{47}\".*;$" /etc/fetchmailrc | awk -F: '{ print $1 }'))
	#Für alle relevanten Zeilen
	while [[ ${srvarray[i]} != "" ]]
	do
		#Hole Server
		srv=$(awk -v COLUMN=${srvarray[i]} 'NR==COLUMN { gsub("\"",""); print $2 }' /etc/fetchmailrc)
		#Hole alten Fingerprint
		oldfp=$(awk -v COLUMN=${srvarray[i]} 'NR==COLUMN { gsub("\"",""); print $17 }' /etc/fetchmailrc)
		#Hole neuen Fingerprint vom Server
		newfp=$(openssl s_client -connect ${srv}:995 -showcerts 2> /dev/null | openssl x509 -fingerprint -noout -md5 2> /dev/null | awk '{ sub("Fingerprint=",""); print $NF }')
		if [[ ${newfp} == "" ]]; then
			#keine Verbindung zum Server
			retval=2
		fi
		#Wenn alter Fingerprint ungleich neuer Fingerprint und neuer Fingerprint nicht leer
		if [[ ${oldfp} != ${newfp} ]] && [[ ${newfp} != "" ]] && (( ${retval} == 0 )); then
		#ersetze alten Fingerprint
			sed "${srvarray[i]} s/${oldfp}/${newfp}/" /etc/fetchmailrc > /etc/fetchmailrctmp
			mv /etc/fetchmailrctmp /etc/fetchmailrc
			chown fetchmail:root /etc/fetchmailrc
			chmod 600 /etc/fetchmailrc
		fi
		i=${i}+1
	done
fi
case ${retval} in
	1)
	echo "${0}: Root-Rechte erforderlich"
	;;
	2)
	echo "${0}: konnte keine Verbindung zum Server herstellen"
	;;
esac
exit ${retval}
