~/paste/1226
~/paste/1226
~/paste/1226

  1. #!/bin/sh
  2.  
  3. alias echo=/bin/echo
  4.  
  5. rand=$(pwgen -A -0 20 1)
  6. test_domain="test.nanl.de"
  7. monitoring_domain="nanl.de"
  8. hostname=$(cat /etc/mailname)
  9. sleep=10
  10. postfixadmin_url="https://mail.nanl.de"
  11. postfixadmin_username="monitoring@nanl.de"
  12. postfixadmin_password="XXXXX"
  13. postfixadmin_key="/etc/ssl/private/nanl_clients.key"
  14. postfixadmin_crt="/etc/ssl/certs/nanl_clients.crt"
  15. postfixadmin_ca="/etc/ssl/certs/nanl_services.ca"
  16. testmail_ssl="yes"
  17. testmail_ssl_ca="/etc/ssl/certs/nanl_services.ca"
  18. testmail_username="test@test.nanl.de"
  19. testmail_password="YYYYYY"
  20. testmail_server="mail.nanl.de"
  21.  
  22. wget_args="-O - --quiet --load-cookies /tmp/mail_${monitoring_domain}.cookie"
  23. test -z "${postfixadmin_ca}" || wget_args="$wget_args --ca-certificate ${postfixadmin_ca}"
  24. test -z "${postfixadmin_key}" || wget_args="$wget_args --private-key ${postfixadmin_key}"
  25. test -z "${postfixadmin_crt}" || wget_args="$wget_args --certificate ${postfixadmin_crt}"
  26.  
  27. bail() {
  28.     output=$(wget ${wget_args} "${postfixadmin_url}/delete.php?table=alias&delete=${rand}@${test_domain}&domain=${test_domain}")
  29.     rm -f "/tmp/mail_${monitoring_domain}.fetchmail_inbox" "/tmp/mail_${monitoring_domain}.fetchmail_conf" "/tmp/mail_${monitoring_domain}.cookie" "/tmp/mail_${monitoring_domain}.fetchmail_ids" "/tmp/mail_${monitoring_domain}.fetchmail_pid"
  30.     echo "${2:-Unknown error}"
  31.     exit ${1:-2}
  32. }
  33.  
  34. test -z "$(which pwgen)" && bail 23 '"pwgen" not found in $PATH'
  35. test -z "$(which fetchmail)" && bail 23 '"fetchmail" not found in $PATH'
  36.  
  37. output=$(wget ${wget_args} --keep-session-cookies --save-cookies /tmp/mail_${monitoring_domain}.cookie --post-data "fUsername=${postfixadmin_username}&fPassword=${postfixadmin_password}&lang=en&submit=Login" "${postfixadmin_url}/login.php")
  38. output=$(wget ${wget_args} --post-data "fAddress=${rand}&fDomain=${test_domain}&fGoto=test@${test_domain}&fActive=on&submit=Add+Alias" "${postfixadmin_url}/create-alias.php?domain=${test_domain}")
  39.  
  40. # iterating over all MX records listed for domain $monitoring_domain and send a mail to test@$test_domain via each of them
  41. failed=0
  42. msg=
  43. mailservers=$(nslookup -type=mx "${monitoring_domain}" | grep -E -io '(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])\.$')
  44. for mx in $mailservers; do
  45.     data="HELO ${hostname}\r\nMAIL FROM: monitoring@${hostname}\r\nRCPT TO: ${rand}@${test_domain}\r\nDATA\r\nSubject: test ${rand} via ${mx}\r\nFrom: monitoring@${hostname}\r\nTo: ${rand}@${test_domain}\r\n\r\nmx:${mx}|rand:${rand}\r\n.\r\nQUIT\r\n"
  46.     echo -e "${data}" | nc "${mx}" 25 > /dev/null 2>&1
  47.     if [ "$?" != 0 ]; then
  48.         failed=$(($failed+1))
  49.         msg="${msg}Could not send mail via ${mx} "
  50.     fi
  51. done
  52. [ "$failed" = "$(echo "${mailservers}" | wc -l)" ] && bail 2 "No mailserver reachable at all"
  53.  
  54. sleep ${sleep}
  55.  
  56. # iterating over all MX records listed for domain $monitoring_domain and check for mails identifying this very test run for each MX
  57. #args="--nokeep --bsmtp /tmp/mail_${monitoring_domain} --protocol ${testmail_protocol} --username ${testmail_username} ${testmail_server}"
  58. fetchmail_args=
  59. test -z "${testmail_ssl}" || fetchmail_args="$fetchmail_args ssl"
  60. test -z "${testmail_ssl_ca}" || fetchmail_args="$fetchmail_args sslcertck sslcertfile '${testmail_ssl_ca}'"
  61. echo -e "poll ${testmail_server} via ${testmail_server}\n with proto IMAP auth password\n  user '${testmail_username}' there with password '${testmail_password}' is '${testmail_username}' here options no rewrite nokeep bsmtp '/tmp/mail_${monitoring_domain}.fetchmail_inbox' ${fetchmail_args}" > "/tmp/mail_${monitoring_domain}.fetchmail_conf"
  62. chmod 700 "/tmp/mail_${monitoring_domain}.fetchmail_conf"
  63. fetchmail --pidfile "/tmp/mail_${monitoring_domain}.fetchmail_pid" -i "/tmp/mail_${monitoring_domain}.fetchmail_ids" -s -f "/tmp/mail_${monitoring_domain}.fetchmail_conf"
  64. [ -s "/tmp/mail_${monitoring_domain}.fetchmail_inbox" ] || bail 2 "Did not fetch any mail at all"
  65. failed=0
  66. for mx in $mailservers; do
  67.     if ! grep -q "mx:${mx}|rand:${rand}" "/tmp/mail_${monitoring_domain}.fetchmail_inbox"; then
  68.         failed=$(($failed+1))
  69.         msg="${msg}Did not fetch mail sent via ${mx}"
  70.     fi
  71. done
  72. rm "/tmp/mail_${monitoring_domain}.fetchmail_inbox" "/tmp/mail_${monitoring_domain}.fetchmail_conf"
  73. [ "$failed" = "$(echo "${mailservers}" | wc -l)" ] && bail 2 "Did not fetch any mail at all"
  74.  
  75. [ "$failed" != "0" ] && bail 1 "${msg}"
  76. [ "$failed"  = "0" ] && bail 0 "All mail services running and working"
  77.  
Language: text
Posted by Anonymous at 10 Nov 2012, 06:11:36 UTC