This commit is contained in:
Simon Vieille 2015-03-02 21:39:36 +01:00
commit 500021adcf
5 changed files with 167 additions and 0 deletions

1
DEBIAN/conffiles Normal file
View file

@ -0,0 +1 @@

7
DEBIAN/control Normal file
View file

@ -0,0 +1,7 @@
Package: spfgenerator
Version: 1.1.1
Section: base
Priority: optional
Architecture: all
Maintainer: Simon Vieille <simon+spfgenerator@deblan.fr>
Description: SPF Generator

2
DEBIAN/postins Executable file
View file

@ -0,0 +1,2 @@
#!/bin/sh

1
DEBIAN/postrm Executable file
View file

@ -0,0 +1 @@
#!/bin/sh

156
usr/bin/spfgenerator Executable file
View file

@ -0,0 +1,156 @@
#!/bin/sh
showHelp() {
cat <<EOF
NAME
spfgenerator generate SPF DNS entry
SYNOPSIS
spfgenerator [-h] [-s] [-mx] [-a [domain]] [-i domain] [-p fail|soft|neutral] [-d domain]
DESCRIPTION
spfgenerator generates SPF DNS entry
-h, --help
show this help.
-mx
Allow servers listed as MX to send email for the domain.
-ip <ip>
Allow IP to send email for the domain.
Can be used several times.
-i, --include <domain>
Any domains that may deliver or relay mail for the domain.
Can be used several times.
-a <domain>
Add any other server hostname that may deliver or relay mail for the domain.
If domain is empty, it allow current IP address of the domain to send email for the domain.
Can be used several times.
-p, --policy <fail|soft|neutral
How strict should be the servers treating the emails
neutral:
Mails will be probably accepted
Default value.
fail:
Not compliant will be rejected
soft:
Not compliant will be accepted but marked
-d, --domain <domain>
Default value: @
-s, --short
Only show the value
EOF
}
MX=0
IPv4s=
IPv6s=
INCLUDEs=
POLICY='?all'
DOMAIN=@
SHORT=0
As=
testData() {
if [ -z "$1" ]; then
(
echo "Invalid parameter ($2)\n"
showHelp
) >&2
exit 1
fi
}
addIp() {
if [ -n "$1" ]; then
if [ $(echo "$1" | egrep "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+") ]; then
IPv4s="$IPv4s ip4:$1"
else
IPv6s="$IPv6s ip6:$1"
fi
fi
}
addA() {
if [ -z "$1" ]; then
As="$As a"
else
As="$As a:$1"
fi
}
addInclude() {
if [ -n "$1" ]; then
INCLUDEs="$INCLUDEs include:$1"
fi
}
for i in $@; do
case $1 in
-h|--help)
showHelp
exit 0
;;
-mx)
MX=1
shift
;;
-s|--short)
SHORT=1
shift
;;
-a)
shift
addA $1
shift
;;
-ip)
shift
addIp $1
shift
;;
-i|--include)
shift
addInclude $1
shift
;;
-p|--policy)
shift
case $1 in
neutral) POLICY='?all';;
soft) POLICY='~all';;
fail) POLICY='-all';;
esac
shift
;;
-d|--domain)
shift
DOMAIN=$1
shift
;;
esac
done
testData "$DOMAIN" domain
testData "$IPv4s$IPv6s" ip
(
if [ $MX -eq 1 ]; then
MX=mx
fi
if [ $SHORT -eq 0 ]; then
echo "$DOMAIN IN TXT \"v=spf1 $MX $As $IPv4s $IPv6s $INCLUDEs $POLICY\""
else
echo "v=spf1 $MX $As $IPv4s $IPv6s $INCLUDEs $POLICY"
fi
) | sed 's/ */ /g'