Plan 9 from Bell Labs’s /usr/web/sources/contrib/boyd/sys/src/cmd/rbl.build.html

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


<html>
<body>
<pre>
<tt>
#!/bin/sh
#
# Build zone containing blackholed addresses.  Uses Christian Rignoni's
# DNS zone templates.
#
# Boyd Roberts
# November 1997
#

myname="`basename \"$0\"`"

RBL=rbl.maps.france3.fr		# blackhole domain name
ADDR=127.0.0.2			# address attributed to a blackholed 'host'
LIST=rbl.list			# list of blackholed addresses

# Configation files
BOOT=/etc/named.boot
RCONF=/etc/resolv.conf

# File extensions
SOA=soa
HOSTS=hosts
HOSTNAMES=hostnames

# Templates
MODELE=modele

# Determine current domain

DOM="`awk \"\\$1 == \\"domain\\" {
	print \\$2
	exit
	}\" \"$RCONF\""

case "$DOM" in
'')
	echo "$myname: Could not find 'domain' in '$RCONF'." 1&gt;&amp;2
	exit 1
	;;
esac

# Determine configuration directory

DIR="`awk \"\\$1 == \\"directory\\" {
	print \\$2
	exit
	}\" \"$BOOT\""

case "$DIR" in
'')
	echo "$myname: Could not find 'directory' in '$BOOT'." 1&gt;&amp;2
	exit 1
	;;
esac

# Determine zone file for domain

FILE="`awk \"\\$1 == \\"primary\\" &amp;&amp; \\$2 == \\"$RBL\\" {
	print \\$3
	exit
	}\" \"$BOOT\""

case "$FILE" in
'')
	echo "$myname: Could not find primary for $RBL in '$BOOT'." 1&gt;&amp;2
	exit 1
	;;
esac

# Check the list exists

if [ ! -r "$DIR/$LIST" ]
then
	echo "$myname: Realtime Blackhole List '$DIR/$LIST' missing." 1&gt;&amp;2
	exit 1
fi

# Determine hostname

UNAME="`(uname -n || hostname) | sed 's/\..*$//'`"

case "$UNAME" in
'')
	echo "$myname: Could not determine hostname." 1&gt;&amp;2
	exit 1
	;;
esac

# Build $FILE

f="$DIR/$FILE"

if [ ! -s "$f" ]
then
	m="$DIR/$MODELE.$HOSTS"
	sed -e "s/ZONE/$RBL/g" "$m" &gt; "$f" || exit 1
fi

ZONE_A="$RBL"

# Construct Start Of Authority

f="$DIR/$RBL.$SOA"

if [ ! -s "$f" ]
then
	m="$DIR/$MODELE.$SOA"
	sed -e "s/UNAME.ZONE_A/$UNAME.$DOM/g" -e "s/ZONE_A/$ZONE_A/g" "$m" &gt; "$f" || exit 1
fi


# Build host list
#
# Comments after the address are appended as comments in the zone file.

awk '
$0 ~ /^;/				{ next }

$1 !~ /[0-9]+.[0-9]+.[0-9]+.[0-9]+/	{ next }

{
	split($1, a, ".")
	print a[4] "." a[3] "." a[2] "." a[1] "\tIN\tA\t" addr "\t; " $0
}

' addr="$ADDR" "$DIR/$LIST" &gt; "$DIR/$RBL.$HOSTNAMES" || exit 1

# Update serial number

serial="`awk '$0 ~ /;[ 	]*serial/ { print $1 }' \"$DIR/$RBL.$SOA\"`"

case "$serial" in
00000001)
	n=0
	;;

*)
	n="`expr \"$serial\" : '......\\(..\\)'`"
	;;
esac

day="`date '+%y%m%d'`"
n="`awk 'END { printf("%02d\n", n + 1)}' n=\"$n\" /dev/null`"

ed - "$DIR/$RBL.$SOA" &lt;&lt;! &amp;&amp; exit 0
/;[ 	]*serial/s/$serial/$day$n/
w
q
!

echo "$myname: Could not modify serial number of '$DIR/$RBL.$SOA'." 1&gt;&amp;2
exit 1
</tt>
</pre>
<HR>
&copy 1998,
Boyd Roberts:
<A HREF="mailto:boyd@fr.inter.net">boyd@fr.inter.net</A>
</body>
</html>

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.