# HG changeset patch # User heiko # Date 1167751426 0 # Node ID 417562509dbe906b581edea8984003e325bb0dc1 # Parent 7da62b48653f4340ea14ccf623cb297638150fd5 Installation to .../share and ../sbin diff -r 7da62b48653f -r 417562509dbe Makefile --- a/Makefile Tue Jan 02 10:49:47 2007 +0000 +++ b/Makefile Tue Jan 02 15:23:46 2007 +0000 @@ -1,11 +1,11 @@ # $Id$ # $URL$ +exim = exim + prefix = /usr/local sbindir = ${prefix}/sbin -sysconfdir = ${prefix}/etc - -eximconfdir = ${sysconfdir}/exim +libdir = ${prefix}/share/${exim} SCRIPTS = exigrey @@ -20,10 +20,15 @@ install -m 0755 -d $(DESTDIR)${sbindir} install -m 0755 $(SCRIPTS) $(DESTDIR)${sbindir}/ - install -m 0755 -d $(DESTDIR)$(eximconfdir)/exigrey - install -m 0644 greylist.pl $(DESTDIR)$(eximconfdir)/exigrey/ + install -m 0755 -d $(DESTDIR)$(libdir) + install -m 0644 exim-exigrey.pl $(DESTDIR)$(libdir)/exigrey.pl -%: %.pl - @perl -c $< - @cp -vf $< $@ - @chmod a-w,+x $@ +%: .%.pl + @test -e $@ && { test -w $@ || chmod +w $@; } || true + @cat $< >$@ + @chmod a-w,a+x $@ + +.%.pl: %.pl + @sed -e 's,@LIBDIR@,$(libdir),g' \ + <$< >$@ + @perl -c $@ diff -r 7da62b48653f -r 417562509dbe debian/changelog --- a/debian/changelog Tue Jan 02 10:49:47 2007 +0000 +++ b/debian/changelog Tue Jan 02 15:23:46 2007 +0000 @@ -1,3 +1,12 @@ +exigrey (0.2-1) stable; urgency=low + + * files and directories changed + bin: /usr/sbin/exigrey + lib: /usr/share/exim4/exigrey.pl + + -- Heiko Schlittermann Tue, 02 Jan 2007 16:01:03 +0100 + + exigrey (0.1-3) stable; urgency=low * Initial release diff -r 7da62b48653f -r 417562509dbe debian/rules --- a/debian/rules Tue Jan 02 10:49:47 2007 +0000 +++ b/debian/rules Tue Jan 02 15:23:46 2007 +0000 @@ -33,7 +33,7 @@ dh_testdir # Add here commands to compile the package. - $(MAKE) + $(MAKE) prefix=/usr exim=exim4 #docbook-to-man debian/exigrey.sgml > exigrey.1 touch $@ @@ -57,7 +57,7 @@ # Add here commands to install the package into debian/exigrey. $(MAKE) \ prefix=/usr \ - eximconfdir=/etc/exim4 \ + exim=exim4 \ DESTDIR=$(CURDIR)/debian/exigrey \ install diff -r 7da62b48653f -r 417562509dbe exigrey.pl --- a/exigrey.pl Tue Jan 02 10:49:47 2007 +0000 +++ b/exigrey.pl Tue Jan 02 15:23:46 2007 +0000 @@ -24,7 +24,7 @@ use FindBin qw/$Bin/; use POSIX qw/strftime mktime/; -do "$Bin/greylist.pl" or die; +do "@LIBDIR@/exigrey.pl" or die; my %DEFAULT = getDefault(); $DEFAULT{days} = 7; diff -r 7da62b48653f -r 417562509dbe exim-exigrey.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/exim-exigrey.pl Tue Jan 02 15:23:46 2007 +0000 @@ -0,0 +1,91 @@ +# © 2006,2007 Heiko Schlittermann +# $Id$ +# $URL$ + +use strict; +use warnings; +use BerkeleyDB; + +my %DEFAULT = ( + delay => 600, + db => "seen.db", +); + +sub unseen($;$$); + +sub getDBDir(); +sub findExim(;$); +sub getDefault() { %DEFAULT }; + +# Usage: +# ${perl{unseen}{$sender_host_address}} +# ${perl{unseen}{$sender_host_address}{600}} +# ${perl{unseen}{$sender_host_address}{600}{seen.db}} +# ${perl{unseen}{$sender_host_address}{600}{/some/dir/seen.db}} +# +# record structure: key: item\0 +# value: timestamp(creation) timestamp(usage)\0 +# (This way we're compatible with ${lookup{...}dbm{...}}) +sub unseen($;$$) { + my ($item, $delay, $db) = @_; + $item .= "\0"; + $delay = $DEFAULT{delay} unless defined $delay; + $db = $DEFAULT{db} unless defined $db; + + my $now = time(); + my $umask; + my $rc; + + $db = getDBDir() . "/$db" unless $db =~ /^\//; + + $umask = umask 0077 if !-f $db; + + my %h; tie %h, "BerkeleyDB::Hash", + -Filename => $db, + -Flags => DB_CREATE + or die; + + umask $umask if defined $umask; + + if (not exists $h{$item}) { + $h{$item} = "$now $now\0"; + $rc = "yes"; + } else { + my $created = (split " ", $h{$item})[0]; + if ($now - $created < $delay) { $rc = "yes" } + else { + $rc = "no"; + $h{$item} = "$created $now\0"; + } + } + untie %h; + return $rc; +} + +# Get the directory where we could store the database file(s) +# If we're running under exim it's easy, otherwise we've to find exim +# and then ask... +sub getDBDir() { + my $spooldir; + eval { $spooldir = Exim::expand_string('$spool_directory') }; + if (not defined $spooldir) { + my $exim = findExim(); + chomp($spooldir = `$exim -be '\$spool_directory'`); + die "Can't find spooldir" if not defined $spooldir; + } + return "$spooldir/db"; +} + +sub findExim(;$) { + my $path = shift || $ENV{PATH}; + my $exim; + foreach (split /:/, $ENV{PATH}) { + -x ($exim = "$_/exim") and return $exim; + -x ($exim = "$_/exim4") and return $exim; + } + return undef; +} + +1; + +# vim:aw: diff -r 7da62b48653f -r 417562509dbe greylist.pl --- a/greylist.pl Tue Jan 02 10:49:47 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -# © 2006,2007 Heiko Schlittermann -# $Id$ -# $URL$ - -use strict; -use warnings; -use BerkeleyDB; - -my %DEFAULT = ( - delay => 600, - db => "seen.db", -); - -sub unseen($;$$); - -sub getDBDir(); -sub findExim(;$); -sub getDefault() { %DEFAULT }; - -# Usage: -# ${perl{unseen}{$sender_host_address}} -# ${perl{unseen}{$sender_host_address}{600}} -# ${perl{unseen}{$sender_host_address}{600}{seen.db}} -# ${perl{unseen}{$sender_host_address}{600}{/some/dir/seen.db}} -# -# record structure: key: item\0 -# value: timestamp(creation) timestamp(usage)\0 -# (This way we're compatible with ${lookup{...}dbm{...}}) -sub unseen($;$$) { - my ($item, $delay, $db) = @_; - $item .= "\0"; - $delay = $DEFAULT{delay} unless defined $delay; - $db = $DEFAULT{db} unless defined $db; - - my $now = time(); - my $umask; - my $rc; - - $db = getDBDir() . "/$db" unless $db =~ /^\//; - - $umask = umask 0077 if !-f $db; - - my %h; tie %h, "BerkeleyDB::Hash", - -Filename => $db, - -Flags => DB_CREATE - or die; - - umask $umask if defined $umask; - - if (not exists $h{$item}) { - $h{$item} = "$now $now\0"; - $rc = "yes"; - } else { - my $created = (split " ", $h{$item})[0]; - if ($now - $created < $delay) { $rc = "yes" } - else { - $rc = "no"; - $h{$item} = "$created $now\0"; - } - } - untie %h; - return $rc; -} - -# Get the directory where we could store the database file(s) -# If we're running under exim it's easy, otherwise we've to find exim -# and then ask... -sub getDBDir() { - my $spooldir; - eval { $spooldir = Exim::expand_string('$spool_directory') }; - if (not defined $spooldir) { - my $exim = findExim(); - chomp($spooldir = `$exim -be '\$spool_directory'`); - die "Can't find spooldir" if not defined $spooldir; - } - return "$spooldir/db"; -} - -sub findExim(;$) { - my $path = shift || $ENV{PATH}; - my $exim; - foreach (split /:/, $ENV{PATH}) { - -x ($exim = "$_/exim") and return $exim; - -x ($exim = "$_/exim4") and return $exim; - } - return undef; -} - -1; - -# vim:aw: