--- a/Makefile.PL Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-use ExtUtils::MakeMaker;
-
-WriteMakefile(
- NAME => 'Exim::Grey',
- AUTHOR => ['Heiko Schlittermann <hs@schlittermann.de>'],
- VERSION_FROM => 'lib/Exim/Grey.pm',
- EXE_FILES => ['bin/exigrey'],
- PREREQ_PM => {
- 'DB_File::Lock' => '0.05',
- },
- NO_META => 1,
- NO_MYMETA => 1,
-);
--- a/README Wed Jun 21 00:26:46 2017 +0200
+++ b/README Wed Jun 21 00:30:38 2017 +0200
@@ -1,19 +1,1 @@
-The documenation is currently only available from
-http://www.schlittermann.de/doc/grey
-
-
-Example configuration snippet
------------------------------
-
-perl_startup = use Exim::Grey qw(unseen);
-GREYLISTED = ${perl{unseen}{<$sender_address>:<$local_part@$domain>/$sender_host_address}{60}}
-
-acl_check_rcpt:
-
- ...
-
- defer
- condition = GREYLISTED
- condition = ${if <{$message_size}{1M}}
- log_message = grey listed exigrey
-
+Project moved to git.git.schlittermann.de/exim/exigrey
--- a/TODO Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-auto whitelist [done]
--- a/bin/exigrey Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,254 +0,0 @@
-#!perl
-# © 2006,2007,2016 Heiko Schlittermann <hs@schlittermann.de>
-# Quick and dirty. Absolutly no warranty. Not even for spelling ;-)
-
-use strict;
-use warnings;
-use Getopt::Long;
-use File::Basename;
-use File::Temp qw/tmpfile/;
-use constant ME => basename $0;
-use FindBin qw/$Bin/;
-use POSIX qw/strftime mktime/;
-use if $ENV{DEBUG} => 'Smart::Comments';
-use Pod::Usage;
-
-use Exim::Grey qw(:all);
-
-my $VERSION = '$Id$';
-
-my $opt_list;
-my $opt_stats;
-my $opt_insert;
-my $opt_help;
-my $opt_clean;
-my $opt_purge;
-my $opt_dbs;
-my $opt_remove;
-
-sub getDBs(@);
-sub iterate(\%$);
-
-MAIN: {
-
- GetOptions(
- 'list!' => \$opt_list,
- 'insert!' => \$opt_insert,
- 'remove!' => \$opt_remove,
- 'stats!' => \$opt_stats,
- 'clean!' => \$opt_clean,
- 'purge!' => \$opt_purge,
- 'dbs!' => \$opt_dbs,
- 'help!' => sub { pod2usage(-verbose => 1, -exit => 0) },
- 'man!' => sub { pod2usage(-verbose => 2, -exit => 0,
- noperldoc => system('perldoc -V 2>/dev/null >/dev/null')) },
- ) or pod2usage;
-
- if ($opt_list) {
- foreach (@ARGV = getDBs(@ARGV)) {
- my %h;
- my $db = connectDB(\%h, $_);
- print "# $db\n";
- iterate(
- %h,
- sub {
- my ($item, $v0, $v1, $c, $flag) = @_;
- printf "$item: $v0 $v1 $c (%s %s)%s\n",
- strftime("%FT%T", localtime($v0)),
- strftime("%FT%T", localtime($v1)),
- $flag ? " $flag" : "";
- }
- );
- print "\n" if @ARGV;
- }
- exit 0;
- }
-
- if ($opt_stats) {
- foreach (@ARGV = getDBs(@ARGV)) {
- my %h;
- my $db = connectDB(\%h, $_);
-
- my ($seen, $returned, $oldest_c, $oldest_u, $auto);
- $seen = $returned = 0;
- $oldest_c = $oldest_u = time();
- iterate(
- %h,
- sub {
- my ($item, $v0, $v1, $c, $flags) = @_;
- if ($flags // '' eq 'auto') {
- ++$auto;
- return;
- }
- ++$seen;
- ++$returned if $v0 != $v1; # soon it can be $c
- $oldest_c = $v0 if $v0 < $oldest_c;
- $oldest_u = $v1 if $v1 < $oldest_u;
- return;
- }
- );
-
- $_ = <<__;
- date: %s
- db: $db (ls: %.1f MB / du: %.1f MB)
- total: $seen (100%%)
- returned: %*d (%3d%%)
- not returned: %*d (%3d%%)
-auto white listed: %*d
- oldest (created): %.1f days (%s)
- oldest (used): %.1f days (%s)
-__
- printf $_, scalar(localtime), (-s $db) / (1024 * 1024),
- ((stat $db)[12] * 512) / (1024 * 1024),
- length($seen), $returned,
- int(0.5 + 100 * ($returned / $seen)), # returned
- length($seen), $seen - $returned,
- int(0.5 + 100 * ($seen - $returned) / $seen), # not returned
- length($seen), $auto, # auto white
- ((time - $oldest_c) / 86400), scalar(localtime $oldest_c),
- ((time - $oldest_u) / 86400), scalar(localtime $oldest_u);
- print "\n" if @ARGV;
-
- }
- exit 0;
- }
-
- if ($opt_clean or $opt_purge) {
-
- my $cut = time() - (86400 * (@ARGV ? shift : 7));
- foreach (getDBs(@ARGV)) {
- my %h;
- my $tmp = tmpfile();
- my $db = connectDB(\%h, $_);
- iterate(
- %h,
- sub {
- my ($item, $v0, $v1, $c) = @_;
- my $rv = defined $opt_purge ? \$v0 : \$v1;
- print $tmp "$item\0" if $$rv <= $cut;
- }
- );
-
- seek($tmp, 0, 0) or die "Can't seek tmpfile";
-
- $/ = "\0";
- delete $h{$_} while <$tmp>;
- printf "$. items %s from $db\n", $opt_purge ? "purged" : "deleted";
-
- close($tmp);
-
- }
- exit 0;
- }
-
- if ($opt_dbs) {
- print join("\n", getDBs(@ARGV)), "\n";
- exit 0;
- }
-
- if ($opt_insert) {
- print unseen(@ARGV);
- exit 0;
- }
-
- if ($opt_remove) {
- my %default = getDefault();
- my $item = shift;
- my $db = shift // $default{db};
-
- my $key = "$item\0";
-
- connectDB(\my %h, $db);
- if (not exists $h{$key}) {
- warn "$0: key `$key' not found\n";
- }
- else {
- $_ = $h{$key}; # delete from tied hashes
- delete $h{$key}; # doesn't return anything always
- chop;
- print "$key: $_\n";
- }
- exit 0;
- }
-}
-
-sub getDBs(@) {
- grep { !/\.lock$/ } grep { -f -s }
- map { m(^\.?/) ? glob($_) : glob(getDBDir() . "/$_") } @_ ? @_ : "*";
-}
-
-# Helper to iterate over our hash and call the passed
-# "callback" function (item, v0, v1, count, flags)
-sub iterate(\%$) {
- my ($hash, $sub) = @_;
- while (my ($k, $v) = each %$hash) {
- chop($k, $v);
-### $k
-### $v
- &$sub($k, (split(' ', $v), 0, 0)[0 .. 3]); # 0 for filling
- }
-}
-
-__END__
-
-=head1 NAME
-
- exigrey - command line interface to exim greylist database
-
-=head1 SYNOPSIS
-
- exigrey --insert item [delay [db]]
- exigrey --remove item
- exigrey --list [db]
- exigrey --stat [db-glob ...]
- exigrey {--clean|--purge} [days [db-glob ...]]
- exigrey {--man|--help}
-
-=head1 DESCRIPTION
-
-B<exigrey> is the command line interface to the greylist implementation
-for Exim. It may be used to examine, cleanup and manipulate the
-greylist database.
-
-=head1 OPTIONS
-
-=over
-
-=item B<--insert> I<item> [I<delay> [I<db>]]
-
-Insert a new item into the database.
-
-=item B<--remove> I<item> [I<db>]
-
-Remove the Item I<item> from the database I<db>.
-
-=item B<--list> [I<db>]
-
-List the complete content of the database I<db>. This
-may take a while.
-
-=item B<--stat> [I<db-glob>]
-
-Print the statistics about the databases matching the I<db-glob>
-pattern.
-
-=item B<--clean>|B<--purge> [I<days> [I<db-glob>]...]
-
-Clean (unused) items or purge items unconditionally.
-
-=item B<--dbs> [I<db-glob>]
-
-List the matching database names.
-
-=back
-
-If a database name starts with F<./> or F</>, it's considered
-a file name, otherwise it's looked for in F<spool_directory/grey/>.
-
-=head1 AUTHOR
-
-Heiko Schlittermann L<<hs@schlittermann.de>>
-
-=cut
-
-# vim:ft=perl aw sts=4 sw=4:
--- a/cron.daily.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-#! /bin/bash
-
-command -v exigrey >/dev/null || exit 0
-
-# only output if terminal is connected
-test -t 0 || exec >/dev/null
-
-exigrey --clean 3 '*'
-exigrey --purge 5 '*'
--- a/debian/README.Debian Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-exigrey for Debian
-------------------
-
-More information: http://www.schlittermann.de/doc/grey
-
- -- Heiko Schlittermann <heiko@schlittermann.de> Mon, 1 Jan 2007 20:17:51 +0100
--- a/debian/changelog Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-exigrey (0.21) stable; urgency=low
-
- * new upstream
-
- -- Heiko Schlittermann <heiko@schlittermann.de> Mon, 21 Jan 2008 12:43:06 +0100
-
-exigrey (0.19-1) stable; urgency=low
-
- * new upstream
- - Locking
- * perltidy
-
- -- Heiko Schlittermann <heiko@schlittermann.de> Fri, 18 Jan 2008 22:59:36 +0100
-
-exigrey (0.18-1) stable; urgency=low
-
- * new upstream
- - Kosmetik
-
- * cron.daily.ex
-
- -- Heiko Schlittermann <hs@schlittermann.de> Tue, 16 Jan 2007 13:25:22 +0100
-
-exigrey (0.17-1) stable; urgency=low
-
- * new upstream
- - Kosmetik
-
- -- Heiko Schlittermann <hs@schlittermann.de> Tue, 16 Jan 2007 00:01:14 +0100
-
-exigrey (0.16-1) stable; urgency=low
-
- * new upstream
- - bug fix
-
- -- Heiko Schlittermann <hs@schlittermann.de> Sat, 13 Jan 2007 22:36:49 +0100
-
-exigrey (0.15-1) stable; urgency=low
-
- * new upstream
- - bug with counting resolved
-
- -- Heiko Schlittermann <hs@schlittermann.de> Wed, 03 Jan 2007 22:21:34 +0100
-
-exigrey (0.14-1) stable; urgency=low
-
- * new upstream
- - counter added
-
- -- Heiko Schlittermann <hs@schlittermann.de> Wed, 03 Jan 2007 18:15:21 +0100
-
-exigrey (0.13-1) stable; urgency=low
-
- * new upstream
- - wildcard behaviour
-
- -- Heiko Schlittermann <hs@schlittermann.de> Wed, 03 Jan 2007 17:23:33 +0100
-
-exigrey (0.12-1) stable; urgency=low
-
- * new upstream
- - more informative output
- * cron.daily: output if TERMINAL
-
- -- Heiko Schlittermann <hs@schlittermann.de> Wed, 03 Jan 2007 13:05:04 +0100
-
-exigrey (0.11-1) stable; urgency=low
-
- * new upstream
- - purge
- * added purge to cron.daily
-
- -- Heiko Schlittermann <hs@schlittermann.de> Wed, 03 Jan 2007 12:57:15 +0100
-
-exigrey (0.10-1) stable; urgency=low
-
- * new upstream
- - wildcards
-
- -- Heiko Schlittermann <hs@schlittermann.de> Wed, 03 Jan 2007 11:18:02 +0100
-
-exigrey (0.9-1) stable; urgency=low
-
- * new features for cmd tool
- * cron.daily
-
- -- Heiko Schlittermann <hs@schlittermann.de> Wed, 03 Jan 2007 10:21:33 +0100
-
-exigrey (0.8-1) stable; urgency=low
-
- * new upstream
- -bug fix
-
- -- Heiko Schlittermann <hs@schlittermann.de> Wed, 03 Jan 2007 00:15:29 +0100
-
-exigrey (0.7-1) stable; urgency=low
-
- * new upstream:
- - stats: size of database
-
- -- Heiko Schlittermann <hs@schlittermann.de> Wed, 03 Jan 2007 00:05:44 +0100
-
-exigrey (0.6-1) stable; urgency=low
-
- * bug with umask fixed
-
- -- Heiko Schlittermann <hs@schlittermann.de> Tue, 02 Jan 2007 22:46:22 +0100
-
-exigrey (0.5-1) stable; urgency=low
-
- * new upstream:
- - autocreation of files/dirs
- - default db location/name changed
-
- -- Heiko Schlittermann <hs@schlittermann.de> Tue, 02 Jan 2007 22:35:21 +0100
-
-exigrey (0.4-3) stable; urgency=low
-
- * depends on exim4-daemon-heavy
-
- -- Heiko Schlittermann <hs@schlittermann.de> Tue, 02 Jan 2007 21:09:58 +0100
-
-exigrey (0.4-2) stable; urgency=low
-
- * depends on perl
-
- -- Heiko Schlittermann <hs@schlittermann.de> Tue, 02 Jan 2007 20:53:44 +0100
-
-exigrey (0.4-1) stable; urgency=low
-
- * new upstream (DB_File instead of BerkeleyDB)
-
- -- Heiko Schlittermann <hs@schlittermann.de> Tue, 02 Jan 2007 20:49:13 +0100
-
-exigrey (0.3-1) stable; urgency=low
-
- * new upstream (--clean added)
-
- -- Heiko Schlittermann <hs@schlittermann.de> Tue, 02 Jan 2007 17:56:52 +0100
-
-exigrey (0.2-1) stable; urgency=low
-
- * files and directories changed
- bin: /usr/sbin/exigrey
- lib: /usr/share/exim4/exigrey.pl
-
- -- Heiko Schlittermann <hs@schlittermann.de> Tue, 02 Jan 2007 16:01:03 +0100
-
-
-exigrey (0.1-3) stable; urgency=low
-
- * Initial release
-
- -- Heiko Schlittermann <heiko@schlittermann.de> Mon, 1 Jan 2007 20:17:51 +0100
-
--- a/debian/compat Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-5
--- a/debian/control Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-Source: exigrey
-Section: unknown
-Priority: extra
-Maintainer: Heiko Schlittermann <heiko@schlittermann.de>
-Build-Depends: debhelper (>= 5)
-Standards-Version: 3.7.2
-
-Package: exigrey
-Architecture: all
-Depends: ${shlibs:Depends}, ${misc:Depends}, perl, exim4-daemon-heavy, libdb-file-lock-perl
-Description: greylist implementation for exim (perl)
- Yet another greylist implementation for exim, using Exim's
- perl_startup feature.
- For info see http://www.schlittermann.de/grey.
-
--- a/debian/copyright Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-This package was debianized by Heiko Schlittermann <heiko@schlittermann.de> on
-Mon, 1 Jan 2007 20:17:51 +0100.
-
-It was downloaded from <fill in http/ftp site>
-
-Upstream Author: <put author(s) name and email here>
-
-Copyright: <put the year(s) of the copyright, and the names of the
- copyright holder(s) here>
-
-License:
-
-<Put the license of the package here>
-
-
-The Debian packaging is (C) 2007, Heiko Schlittermann <heiko@schlittermann.de> and
-is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
-
-
-# Please also look if there are files or directories which have a
-# different copyright/license attached and list them here.
-
--- a/debian/cron.d.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-#
-# Regular cron jobs for the exigrey package
-#
-0 4 * * * root exigrey_maintenance
--- a/debian/dirs Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-usr/bin
-usr/sbin
-etc/cron.daily
--- a/debian/docs Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-README
--- a/debian/emacsen-install.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#! /bin/sh -e
-# /usr/lib/emacsen-common/packages/install/exigrey
-
-# Written by Jim Van Zandt <jrv@debian.org>, borrowing heavily
-# from the install scripts for gettext by Santiago Vila
-# <sanvila@ctv.es> and octave by Dirk Eddelbuettel <edd@debian.org>.
-
-FLAVOR=$1
-PACKAGE=exigrey
-
-if [ ${FLAVOR} = emacs ]; then exit 0; fi
-
-echo install/${PACKAGE}: Handling install for emacsen flavor ${FLAVOR}
-
-#FLAVORTEST=`echo $FLAVOR | cut -c-6`
-#if [ ${FLAVORTEST} = xemacs ] ; then
-# SITEFLAG="-no-site-file"
-#else
-# SITEFLAG="--no-site-file"
-#fi
-FLAGS="${SITEFLAG} -q -batch -l path.el -f batch-byte-compile"
-
-ELDIR=/usr/share/emacs/site-lisp/${PACKAGE}
-ELCDIR=/usr/share/${FLAVOR}/site-lisp/${PACKAGE}
-
-# Install-info-altdir does not actually exist.
-# Maybe somebody will write it.
-if test -x /usr/sbin/install-info-altdir; then
- echo install/${PACKAGE}: install Info links for ${FLAVOR}
- install-info-altdir --quiet --section "" "" --dirname=${FLAVOR} /usr/info/${PACKAGE}.info.gz
-fi
-
-install -m 755 -d ${ELCDIR}
-cd ${ELDIR}
-FILES=`echo *.el`
-cp ${FILES} ${ELCDIR}
-cd ${ELCDIR}
-
-cat << EOF > path.el
-(setq load-path (cons "." load-path) byte-compile-warnings nil)
-EOF
-${FLAVOR} ${FLAGS} ${FILES}
-rm -f *.el path.el
-
-exit 0
--- a/debian/emacsen-remove.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#!/bin/sh -e
-# /usr/lib/emacsen-common/packages/remove/exigrey
-
-FLAVOR=$1
-PACKAGE=exigrey
-
-if [ ${FLAVOR} != emacs ]; then
- if test -x /usr/sbin/install-info-altdir; then
- echo remove/${PACKAGE}: removing Info links for ${FLAVOR}
- install-info-altdir --quiet --remove --dirname=${FLAVOR} /usr/info/exigrey.info.gz
- fi
-
- echo remove/${PACKAGE}: purging byte-compiled files for ${FLAVOR}
- rm -rf /usr/share/${FLAVOR}/site-lisp/${PACKAGE}
-fi
--- a/debian/emacsen-startup.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-;; -*-emacs-lisp-*-
-;;
-;; Emacs startup file, e.g. /etc/emacs/site-start.d/50exigrey.el
-;; for the Debian exigrey package
-;;
-;; Originally contributed by Nils Naumann <naumann@unileoben.ac.at>
-;; Modified by Dirk Eddelbuettel <edd@debian.org>
-;; Adapted for dh-make by Jim Van Zandt <jrv@debian.org>
-
-;; The exigrey package follows the Debian/GNU Linux 'emacsen' policy and
-;; byte-compiles its elisp files for each 'emacs flavor' (emacs19,
-;; xemacs19, emacs20, xemacs20...). The compiled code is then
-;; installed in a subdirectory of the respective site-lisp directory.
-;; We have to add this to the load-path:
-(let ((package-dir (concat "/usr/share/"
- (symbol-name flavor)
- "/site-lisp/exigrey")))
-;; If package-dir does not exist, the exigrey package must have
-;; removed but not purged, and we should skip the setup.
- (when (file-directory-p package-dir)
- (setq load-path (cons package-dir load-path))
- (autoload 'exigrey-mode "exigrey-mode"
- "Major mode for editing exigrey files." t)
- (add-to-list 'auto-mode-alist '("\\.exigrey$" . exigrey-mode))))
-
--- a/debian/exigrey-default.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-# Defaults for exigrey initscript
-# sourced by /etc/init.d/exigrey
-# installed at /etc/default/exigrey by the maintainer scripts
-
-#
-# This is a POSIX shell fragment
-#
-
-# Additional options that are passed to the Daemon.
-DAEMON_OPTS=""
--- a/debian/exigrey.doc-base.EX Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-Document: exigrey
-Title: Debian exigrey Manual
-Author: <insert document author here>
-Abstract: This manual describes what exigrey is
- and how it can be used to
- manage online manuals on Debian systems.
-Section: unknown
-
-Format: debiandoc-sgml
-Files: /usr/share/doc/exigrey/exigrey.sgml.gz
-
-Format: postscript
-Files: /usr/share/doc/exigrey/exigrey.ps.gz
-
-Format: text
-Files: /usr/share/doc/exigrey/exigrey.text.gz
-
-Format: HTML
-Index: /usr/share/doc/exigrey/html/index.html
-Files: /usr/share/doc/exigrey/html/*.html
-
-
--- a/debian/init.d.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-#! /bin/sh
-#
-# skeleton example file to build /etc/init.d/ scripts.
-# This file should be used to construct scripts for /etc/init.d.
-#
-# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
-# Modified for Debian
-# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
-#
-# Version: @(#)skeleton 1.9 26-Feb-2001 miquels@cistron.nl
-#
-
-PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
-DAEMON=/usr/sbin/exigrey
-NAME=exigrey
-DESC=exigrey
-
-test -x $DAEMON || exit 0
-
-# Include exigrey defaults if available
-if [ -f /etc/default/exigrey ] ; then
- . /etc/default/exigrey
-fi
-
-set -e
-
-case "$1" in
- start)
- echo -n "Starting $DESC: "
- start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
- --exec $DAEMON -- $DAEMON_OPTS
- echo "$NAME."
- ;;
- stop)
- echo -n "Stopping $DESC: "
- start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
- --exec $DAEMON
- echo "$NAME."
- ;;
- #reload)
- #
- # If the daemon can reload its config files on the fly
- # for example by sending it SIGHUP, do it here.
- #
- # If the daemon responds to changes in its config file
- # directly anyway, make this a do-nothing entry.
- #
- # echo "Reloading $DESC configuration files."
- # start-stop-daemon --stop --signal 1 --quiet --pidfile \
- # /var/run/$NAME.pid --exec $DAEMON
- #;;
- force-reload)
- #
- # If the "reload" option is implemented, move the "force-reload"
- # option to the "reload" entry above. If not, "force-reload" is
- # just the same as "restart" except that it does nothing if the
- # daemon isn't already running.
- # check wether $DAEMON is running. If so, restart
- start-stop-daemon --stop --test --quiet --pidfile \
- /var/run/$NAME.pid --exec $DAEMON \
- && $0 restart \
- || exit 0
- ;;
- restart)
- echo -n "Restarting $DESC: "
- start-stop-daemon --stop --quiet --pidfile \
- /var/run/$NAME.pid --exec $DAEMON
- sleep 1
- start-stop-daemon --start --quiet --pidfile \
- /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
- echo "$NAME."
- ;;
- *)
- N=/etc/init.d/$NAME
- # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
- echo "Usage: $N {start|stop|restart|force-reload}" >&2
- exit 1
- ;;
-esac
-
-exit 0
--- a/debian/manpage.1.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-.\" Hey, EMACS: -*- nroff -*-
-.\" First parameter, NAME, should be all caps
-.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
-.\" other parameters are allowed: see man(7), man(1)
-.TH EXIGREY SECTION "Januar 1, 2007"
-.\" Please adjust this date whenever revising the manpage.
-.\"
-.\" Some roff macros, for reference:
-.\" .nh disable hyphenation
-.\" .hy enable hyphenation
-.\" .ad l left justify
-.\" .ad b justify to both left and right margins
-.\" .nf disable filling
-.\" .fi enable filling
-.\" .br insert line break
-.\" .sp <n> insert n+1 empty lines
-.\" for manpage-specific macros, see man(7)
-.SH NAME
-exigrey \- program to do something
-.SH SYNOPSIS
-.B exigrey
-.RI [ options ] " files" ...
-.br
-.B bar
-.RI [ options ] " files" ...
-.SH DESCRIPTION
-This manual page documents briefly the
-.B exigrey
-and
-.B bar
-commands.
-.PP
-.\" TeX users may be more comfortable with the \fB<whatever>\fP and
-.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
-.\" respectively.
-\fBexigrey\fP is a program that...
-.SH OPTIONS
-These programs follow the usual GNU command line syntax, with long
-options starting with two dashes (`-').
-A summary of options is included below.
-For a complete description, see the Info files.
-.TP
-.B \-h, \-\-help
-Show summary of options.
-.TP
-.B \-v, \-\-version
-Show version of program.
-.SH SEE ALSO
-.BR bar (1),
-.BR baz (1).
-.br
-The programs are documented fully by
-.IR "The Rise and Fall of a Fooish Bar" ,
-available via the Info system.
-.SH AUTHOR
-exigrey was written by <upstream author>.
-.PP
-This manual page was written by Heiko Schlittermann <heiko@schlittermann.de>,
-for the Debian project (but may be used by others).
--- a/debian/manpage.sgml.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>FIRSTNAME</firstname>">
- <!ENTITY dhsurname "<surname>SURNAME</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Januar 1, 2007</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>SECTION</manvolnum>">
- <!ENTITY dhemail "<email>heiko@schlittermann.de</email>">
- <!ENTITY dhusername "Heiko Schlittermann">
- <!ENTITY dhucpackage "<refentrytitle>EXIGREY</refentrytitle>">
- <!ENTITY dhpackage "exigrey">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2003</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>program to do something</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-e <replaceable>this</replaceable></option></arg>
-
- <arg><option>--example <replaceable>that</replaceable></option></arg>
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para>This manual page documents briefly the
- <command>&dhpackage;</command> and <command>bar</command>
- commands.</para>
-
- <para>This manual page was written for the &debian; distribution
- because the original program does not have a manual page.
- Instead, it has documentation in the &gnu;
- <application>Info</application> format; see below.</para>
-
- <para><command>&dhpackage;</command> is a program that...</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>These programs follow the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below. For a complete description, see the
- <application>Info</application> files.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-v</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of program.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>bar (1), baz (1).</para>
-
- <para>The programs are documented fully by <citetitle>The Rise and
- Fall of a Fooish Bar</citetitle> available via the
- <application>Info</application> system.</para>
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was written by &dhusername; &dhemail; for
- the &debian; system (but may be used by others). Permission is
- granted to copy, distribute and/or modify this document under
- the terms of the &gnu; General Public License, Version 2 any
- later version published by the Free Software Foundation.
- </para>
- <para>
- On Debian systems, the complete text of the GNU General Public
- License can be found in /usr/share/common-licenses/GPL.
- </para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
-
-
--- a/debian/manpage.xml.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-<?xml version='1.0' encoding='ISO-8859-1'?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
-
-<!--
-
-Process this file with an XSLT processor: `xsltproc \
--''-nonet /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
-manpages/docbook.xsl manpage.dbk'. A manual page
-<package>.<section> will be generated. You may view the
-manual page with: nroff -man <package>.<section> | less'. A
-typical entry in a Makefile or Makefile.am is:
-
-DB2MAN=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
-manpages/docbook.xsl
-XP=xsltproc -''-nonet
-
-manpage.1: manpage.dbk
- $(XP) $(DB2MAN) $<
-
-The xsltproc binary is found in the xsltproc package. The
-XSL files are in docbook-xsl. Please remember that if you
-create the nroff version in one of the debian/rules file
-targets (such as build), you will need to include xsltproc
-and docbook-xsl in your Build-Depends control field.
-
--->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>FIRSTNAME</firstname>">
- <!ENTITY dhsurname "<surname>SURNAME</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Januar 1, 2007</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>SECTION</manvolnum>">
- <!ENTITY dhemail "<email>heiko@schlittermann.de</email>">
- <!ENTITY dhusername "Heiko Schlittermann">
- <!ENTITY dhucpackage "<refentrytitle>EXIGREY</refentrytitle>">
- <!ENTITY dhpackage "exigrey">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2003</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>program to do something</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-e <replaceable>this</replaceable></option></arg>
-
- <arg><option>--example <replaceable>that</replaceable></option></arg>
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para>This manual page documents briefly the
- <command>&dhpackage;</command> and <command>bar</command>
- commands.</para>
-
- <para>This manual page was written for the &debian; distribution
- because the original program does not have a manual page.
- Instead, it has documentation in the &gnu;
- <application>Info</application> format; see below.</para>
-
- <para><command>&dhpackage;</command> is a program that...</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>These programs follow the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below. For a complete description, see the
- <application>Info</application> files.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-v</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of program.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>bar (1), baz (1).</para>
-
- <para>The programs are documented fully by <citetitle>The Rise and
- Fall of a Fooish Bar</citetitle> available via the
- <application>Info</application> system.</para>
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was written by &dhusername; &dhemail; for
- the &debian; system (but may be used by others). Permission is
- granted to copy, distribute and/or modify this document under
- the terms of the &gnu; General Public License, Version 2 any
- later version published by the Free Software Foundation.
- </para>
- <para>
- On Debian systems, the complete text of the GNU General Public
- License can be found in /usr/share/common-licenses/GPL.
- </para>
-
- </refsect1>
-</refentry>
-
--- a/debian/menu.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-?package(exigrey):needs="X11|text|vc|wm" section="Apps/see-menu-manual"\
- title="exigrey" command="/usr/bin/exigrey"
--- a/debian/postinst Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#!/bin/sh
-# postinst script for exigrey
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-# * <postinst> `configure' <most-recently-configured-version>
-# * <old-postinst> `abort-upgrade' <new version>
-# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
-# <new-version>
-# * <postinst> `abort-remove'
-# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
-# <failed-install-package> <version> `removing'
-# <conflicting-package> <version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-
-case "$1" in
- configure)
- if test -e /etc/exim4/exim4.conf; then
- a=$(exim4 -bP perl_startup) || true
- if expr "$a" : "/etc/exim4/exigrey" >/dev/null; then
- perl -i.$(date -I) -pe \
- 's/perl_startup.*/perl_startup = do "/usr/share/exim4/exigrey.pl"' \
- /etc/exim4/exim4.conf
- fi
- fi
- ;;
-
- abort-upgrade|abort-remove|abort-deconfigure)
- ;;
-
- *)
- echo "postinst called with unknown argument \`$1'" >&2
- exit 1
- ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
-
-
--- a/debian/postinst.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-#!/bin/sh
-# postinst script for exigrey
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-# * <postinst> `configure' <most-recently-configured-version>
-# * <old-postinst> `abort-upgrade' <new version>
-# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
-# <new-version>
-# * <postinst> `abort-remove'
-# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
-# <failed-install-package> <version> `removing'
-# <conflicting-package> <version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-
-case "$1" in
- configure)
- ;;
-
- abort-upgrade|abort-remove|abort-deconfigure)
- ;;
-
- *)
- echo "postinst called with unknown argument \`$1'" >&2
- exit 1
- ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
-
-
--- a/debian/postrm Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#!/bin/sh
-# postrm script for exigrey
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-# * <postrm> `remove'
-# * <postrm> `purge'
-# * <old-postrm> `upgrade' <new-version>
-# * <new-postrm> `failed-upgrade' <old-version>
-# * <new-postrm> `abort-install'
-# * <new-postrm> `abort-install' <old-version>
-# * <new-postrm> `abort-upgrade' <old-version>
-# * <disappearer's-postrm> `disappear' <overwriter>
-# <overwriter-version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-
-case "$1" in
- purge)
- # try to find the db file in the default place
- dir=`exim4 -be '$spool_directory'` || exit 0
- test -d "$dir/grey" || exit 0
- rm -f "$dir/grey/"* || true
- rmdir "$dir/grey" || true
- left=`find "$dir/grey" 2>/dev/null | wc` || true
- test -n "$x" && echo "Some files are left in $dir/grey!" >&2
- ;;
-
- remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
- ;;
-
- *)
- echo "postrm called with unknown argument \`$1'" >&2
- exit 1
- ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
-
-
--- a/debian/postrm.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#!/bin/sh
-# postrm script for exigrey
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-# * <postrm> `remove'
-# * <postrm> `purge'
-# * <old-postrm> `upgrade' <new-version>
-# * <new-postrm> `failed-upgrade' <old-version>
-# * <new-postrm> `abort-install'
-# * <new-postrm> `abort-install' <old-version>
-# * <new-postrm> `abort-upgrade' <old-version>
-# * <disappearer's-postrm> `disappear' <overwriter>
-# <overwriter-version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-
-case "$1" in
- purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
- ;;
-
- *)
- echo "postrm called with unknown argument \`$1'" >&2
- exit 1
- ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
-
-
--- a/debian/preinst.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-#!/bin/sh
-# preinst script for exigrey
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-# * <new-preinst> `install'
-# * <new-preinst> `install' <old-version>
-# * <new-preinst> `upgrade' <old-version>
-# * <old-preinst> `abort-upgrade' <new-version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-
-case "$1" in
- install|upgrade)
- ;;
-
- abort-upgrade)
- ;;
-
- *)
- echo "preinst called with unknown argument \`$1'" >&2
- exit 1
- ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
-
-
--- a/debian/prerm.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-#!/bin/sh
-# prerm script for exigrey
-#
-# see: dh_installdeb(1)
-
-set -e
-
-# summary of how this script can be called:
-# * <prerm> `remove'
-# * <old-prerm> `upgrade' <new-version>
-# * <new-prerm> `failed-upgrade' <old-version>
-# * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
-# * <deconfigured's-prerm> `deconfigure' `in-favour'
-# <package-being-installed> <version> `removing'
-# <conflicting-package> <version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-
-case "$1" in
- remove|upgrade|deconfigure)
- ;;
-
- failed-upgrade)
- ;;
-
- *)
- echo "prerm called with unknown argument \`$1'" >&2
- exit 1
- ;;
-esac
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
-#DEBHELPER#
-
-exit 0
-
-
--- a/debian/rules Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-#!/bin/sh
-
-echo "NOT YET. Debian package generation needs to be re-done"
-exit 1
-
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# This file was originally written by Joey Hess and Craig Small.
-# As a special exception, when this file is copied by dh-make into a
-# dh-make output file, you may use that output file without restriction.
-# This special exception was added by Craig Small in version 0.37 of dh-make.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-
-
-CFLAGS = -Wall -g
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
- CFLAGS += -O0
-else
- CFLAGS += -O2
-endif
-
-configure: configure-stamp
-configure-stamp:
- dh_testdir
- # Add here commands to configure the package.
-
- touch configure-stamp
-
-
-build: build-stamp
-
-build-stamp: configure-stamp
- dh_testdir
-
- # Add here commands to compile the package.
- $(MAKE) prefix=/usr exim=exim4
- #docbook-to-man debian/exigrey.sgml > exigrey.1
-
- touch $@
-
-clean:
- dh_testdir
- dh_testroot
- rm -f build-stamp configure-stamp
-
- # Add here commands to clean up after the build process.
- -$(MAKE) clean
-
- dh_clean
-
-install: build
- dh_testdir
- dh_testroot
- dh_clean -k
- dh_installdirs
-
- # Add here commands to install the package into debian/exigrey.
- $(MAKE) \
- prefix=/usr \
- exim=exim4 \
- DESTDIR=$(CURDIR)/debian/exigrey \
- install
-
- install -m755 cron.daily.ex $(CURDIR)/debian/exigrey/etc/cron.daily/exigrey
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
- dh_testdir
- dh_testroot
- dh_installchangelogs
- dh_installdocs
- dh_installexamples
-# dh_install
-# dh_installmenu
-# dh_installdebconf
-# dh_installlogrotate
-# dh_installemacsen
-# dh_installpam
-# dh_installmime
-# dh_python
-# dh_installinit
- dh_installcron
-# dh_installinfo
- dh_installman
- dh_link
- dh_strip
- dh_compress
- dh_fixperms
-# dh_perl
-# dh_makeshlibs
- dh_installdeb
- dh_shlibdeps
- dh_gencontrol
- dh_md5sums
- dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
--- a/debian/watch.ex Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-# Example watch control file for uscan
-# Rename this file to "watch" and then you can run the "uscan" command
-# to check for upstream updates and more.
-# See uscan(1) for format
-
-# Compulsory line, this is a version 3 file
-version=3
-
-# Uncomment to examine a Webpage
-# <Webpage URL> <string match>
-#http://www.example.com/downloads.php exigrey-(.*)\.tar\.gz
-
-# Uncomment to examine a Webserver directory
-#http://www.example.com/pub/exigrey-(.*)\.tar\.gz
-
-# Uncommment to examine a FTP server
-#ftp://ftp.example.com/pub/exigrey-(.*)\.tar\.gz debian uupdate
-
-# Uncomment to find new files on sourceforge, for debscripts >= 2.9
-# http://sf.net/exigrey/exigrey-(.*)\.tar\.gz
-
-
--- a/lib/Exim/Grey.pm Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-package Exim::Grey;
-# for usage please see at the end
-
-use strict;
-use warnings;
-use base 'Exporter';
-use Carp;
-
-our @EXPORT_OK = qw(unseen seen getDBDir connectDB getDefault);
-our %EXPORT_TAGS = (all => \@EXPORT_OK,);
-our $VERSION = '2.0';
-
-our $verbose;
-
-sub verbose {
- return if not $verbose;
- print STDERR __PACKAGE__ . ': ' . map { s/\0//gr } @_, "\n";
-}
-
-sub exim_bool { $_[0] ? 'yes' : 'no' }
-
-# You may choose, but DB_File's footprint is smaller.
-# perl -MDB_File -e 'tie %h, ...': real 0m0.063s
-# perl -MBerkeleyDB -e 'tie %h, ...': real 0m0.112s
-# And DB_File is part of the Perl core distribution (?)
-# use BerkeleyDB;
-# use DB_File;
-#
-# But we need locking! DB_File::Lock isn't part of the corelist.
-use DB_File::Lock;
-
-my %DEFAULT = (
- delay => 600,
- db => 'seen',
-);
-
-# some helper functions
-sub getDBDir();
-sub findExim(;$);
-sub connectDB($$);
-sub getDefault() { %DEFAULT }
-
-# dbm file is relativ to $spool_directory/grey, EXCEPT its name
-# starts with "/".
-
-sub unseen_ {
- my $item = shift;
- my $delay = shift // $DEFAULT{delay};
- my $db = shift // $DEFAULT{db};
- my $now = time();
- my ($auto) = $item =~ /.*?\/(.+?)$/ # remember the /<autokey> from the item
- and $item =~ s/\/.*?$//; # and remove it from the item
- my $rc;
-
- connectDB(\my %h, $db);
-
- return 1 # not unseen, ergo known
- if defined $auto and is_whitelisted($auto, \%h);
-
- my $key = "$item\0"; # for compatibility with Exim's dbm functions
-
- # We do not know anything about the client -> unknown.
- # But remember that key with the associated "auto" subkey
- if (not exists $h{$key}) {
- $h{$key} = serialize(t0 => $now, t1 => $now, count => 0, auto => [defined $auto ? $auto : ()]);
-
- verbose "unseen: $item" if $verbose;
- return 1;
- }
-
- my %entry = deserialize($h{$key});
-
- # we know the client, but last contact was recently (too fast)
- # should we add it to our list auto entries too?
- if ($now - $entry{t0} < $delay) {
- return 1;
- }
-
- # we know the client, was patiently enough
- whitelist(\%h, uniq($auto, $entry{auto})) if defined $auto;
- $entry{count}++;
- $h{$key} = $_ = serialize(%entry);
- verbose "seen: $_" if $verbose;
- return 0;
-}
-
-sub unseen { exim_bool unseen_ @_ }
-sub seen { exim_bool !unseen_ @_ }
-
-# According to a thought from "David Woodhouse <dwmw2@infradead.org>"
-# on exim-users@exim.org (Thu, 08 May 2008 13:10:21 +0100,
-# Message-Id: <1210248621.25560.1088.camel@pmac.infradead.org>) we
-# should have the ability to "auto whitelist" hosts which are known
-# for retries, because there is no benefit in greylisting them.
-#
-# Most safe approach would be something based on message id.
-# If we see the message id a second time it indicates successful retry.
-# But we do not see the message id the first time we reject the message.
-
-# This function has to be called twice per message delivery attempt
-# <KEY> <$sender_host_address> <$sender_helo_name>
-# (Where <KEY> is something like <$sender_address>+<$local_part@$domain>
-# If we see the same message a second time (same message means here:
-# same greylist criteria
-
-sub whitelist {
- my ($h, @items) = (shift, uniq(@_));
- my $now = time;
- warn __PACKAGE__ . ": whitelist: @items\n"
- if $verbose;
- $h->{"$_\0"} = "$now $now 1 auto\0"
- foreach uniq(@items);
-}
-
-sub uniq {
- my %h = map { $_, undef } @_;
- return keys %h;
-}
-
-sub is_whitelisted {
- my ($item, $h) = @_;
- my $key = "$item\0";
-
- warn __PACKAGE__ . 'is '
- . (exists $h->{$key} ? '' : 'not')
- . "whitelisted: $item\n" if $verbose;
-
- return 0 if not exists $h->{$key};
-
- my ($t0, undef, $cnt, $flag) = split /[ \0]/, $h->{$key};
- $h->{$key} = join(' ' => $t0, time, ++$cnt, $flag ? $flag : ()) . "\0";
-
-
- return 1;
-}
-
-# 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, $dbdir);
- 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;
- }
- -d ($dbdir = "$spooldir/grey") and return $dbdir;
-
- my ($mode, $owner, $group) = (stat $spooldir)[2, 4, 5];
- {
- local $) = $group;
- local $> = $owner;
- $mode &= 0777;
- mkdir $dbdir, $mode or die "Can't create $dbdir: $!";
- }
- return $dbdir;
-}
-
-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;
- }
- die "Can't find exim binary (missing .../sbin dirs in PATH?";
-}
-
-sub connectDB($$) {
- my ($h, $db) = @_;
- $db = getDBDir() . "/$db" unless $db =~ m(^/);
-
- # Creation of DB-File if it doesn't exist
- # to avoid races we change our own uid/gid for creation of
- # this file.
- if (!-f $db) {
- (my $dir = $db) =~ s/^(.*)\/.*?$/$1/;
-
- # copy mode, uid, gid from the directory
- my ($mode, $user, $group) = (stat $dir)[2, 4, 5]
- or die "Can't stat $dir: $!";
- my $umask = umask(($mode & 0777) ^ 0777);
- local $) = $group;
- local $> = $user;
- open(X, ">>$db") or die "Can't create $db: $!";
- close(X);
- umask $umask;
- }
-
- # now test which of the DB-Modules has been loaded
-
- if (exists &BerkeleyDB::Hash::TIEHASH) {
- no strict;
- my $umask = umask 077;
- tie %$h, "BerkeleyDB::Hash", -Filename => $db
- or die "$0: $db: $!";
- return $db;
- }
-
- if (exists &DB_File::Lock::TIEHASH) {
- tie %$h, 'DB_File::Lock', [$db], 'write'
- or die "$0: $db: $!";
- return $db;
- }
-
- if (exists &DB_File::TIEHASH) {
- tie %$h, 'DB_File', $db or die "$0: $db: $!";
- warn "$0: using DB_File, no locking is possible!\n";
- return $db;
- }
-
- die "Can't connect to database driver";
-}
-
-# These two functions do not truly serialize/de-serialize the data
-# passed. They're specialiased to a fixed data format:
-# serialized: <t0> <t1> <count> [auto=<item>[,<item>]...]
-# structured: (
-# t0 => <t0>,
-# t1 => <t1>,
-# count => <count>,
-# auto => [item, item, …],
-# )
-sub serialize {
- my %data = @_;
- my $auto = (ref $data{auto} && @{$data{auto}}) ? join ',', @{$data{auto}} : '';
- return "$data{t0} $data{t1} $data{count} auto=$auto\0";
-}
-
-sub deserialize {
- my @data = split / /, $_[0] =~ s/\0$//r;
- my %data;
- ($data{t0}, $data{t1}, $data{count}) = splice @data, 0, 3;
- if ($data[0] =~ /^auto=(.*)/) {
- $data{auto} = [split /,/, $1];
- }
- return %data;
-}
-
-1;
-
-__END__
-=head1 NAME
-
- Exim::Grey
-
-=head1 SYNOPSIS
-
- perl_startup use Exim::Grey qw(unseen);
- ...
- acl rcpt
- defer condition = ${perl{unseen}{<$sender_address>:<$local_part@$domain>}}
-
-=head1 DESCRIPTION
-
-This is a module to be loade by Exim, the MTA. On request it exports
-a single function C<unseen()>. This function may be used in the ACL section
-to support greylisting.
-
-=head1 FUNCTIONS
-
-=over
-
-=item scalar B<unseen>(I<key>, I<delay>, I<db>)
-
-This function returns I<true> if the key is already known in the I<db> database
-for the minimum I<delay> time. (Note: The database may be cleaned regularly by
-the compangion L<exigrey> tool.)
-
-The I<key> is mandotory, the default I<delay> is 600 seconds and the default I<db>
-is called F<seen>.
-
-I<Key> may contain a suffix, separated by "/". This suffix is used for
-automatic whitelisting.
-
-=item scalar B<seen>(I<key>, I<delay>, I<db>)
-
-The same as C<unseen()>, but with reversed result.
-
-=back
-
-=head1 EXAMPLES
-
-=head2 Greylisting
-
-First you have to include B<Exim::Grey> into your Exim. If Exim is built with Perl
-support, the configuration syntax allows for C<perl_startup>:
-
- perl_startup = use Exim::Grey qw(unseen);
-
-In the ACL section of the configuration can check if a given key (sender, or combination
-of sender and recipient, or whatever) is new (unseen):
-
- defer condition = ${perl{unseen}{<$sender_address>:$<local_part@$domain>}}
-
-If the same condition is checked more then I<delay> later, the C<unseen> function returns
-false.
-
-=head2 Greylisting + automatic whitelisting
-
-Greylisting gets annoying if you do it for senders that are already known to retry. Thus it might be
-good to maintain a whitelist. You may use a suffix to your key, separated by "/". Once the greylist
-filter is passed, the used suffixes are registered with the whitelist.
-
- t
- |
- 0 a->b/x # a->b never seen, suffix never seen: greylist
- 1 a->b/y # a->b again: accept AND put x and y to the whitelist,
- | # as they are known to retry
- 2 c->b/x # c->b unknown, but x is already whitelisted: accept
- 3 d->b/y # d->b unknown, but y is already whitelisted: accept
- |
- v
-
-This can be implemented in your ACL as:
-
- defer condition = ${perl{unseen}{<$sender_address>:$<local_part@$domain>/$sender_host_address}}
-
-But, if I<a> and I<b> are the sender and the recipient address, and the
-subkey is the sender host address, a spammer might send a forged message
-after t0, to get whitelisted.
-
-=head1 INTERNALS
-
-=head2 Format of the database
-
-The record structure is
-
- key: item\0
- value: timestamp(creation) timestamp(usage) counter[ flags]\0
-
-This way we are compatible with ${lookup{...}dbm{...}}
-
-=head1 FILES
-
-The database files are placed in C<$spool_directory/grey/>.
-
-=head1 SEE ALSO
-
-The companion tool L<exigrey> should be used for inspection and manipulation
-of the database.
-
-=cut
-
-# vim:aw et sw=4 ts=4:
--- a/t/10-interface.tt Wed Jun 21 00:26:46 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-use strict;
-use warnings;
-
-use Test::More qw(no_plan);
-use File::Temp;
-
-use_ok 'Exim::Grey' => qw(unseen seen) or BAIL_OUT;
-
-subtest 'simple' => sub {
- my $db = File::Temp->new();
- is seen('a->x', 0, "$db"), 'no' => 'not seen a->x';
- is unseen('a->b', 0, "$db"), 'yes' => 'unseen a->b';
- is unseen('a->b', 600, "$db"), 'yes' => 'unseen a->b with 600s delay';
- is unseen('a->b', 0, "$db"), 'no' => 'not unseen a->b';
- is seen('a->b', 600, "$db"), 'no' => 'not seen a->b with 600s delay';
-};
-
-subtest 'whitelist' => sub {
- my $db = File::Temp->new();
- is unseen('x->y/1.1.1.1', 1, "$db"), 'yes' => 'unseen x->y/1.1.1.1';
- is unseen('x->y/1.1.1.1', 1, "$db"), 'yes' => 'unseen x->y/1.1.1.1';
-
- is seen('x->y/1.1.1.1', 0, "$db"), 'yes' => 'seen x->y/1.1.1.1';
- is seen('x->z/1.1.1.1', 0, "$db"), 'yes' => 'seen x->z/1.1.1.1 (subkey known)';
- is seen('1.1.1.1', 0, "$db"), 'yes' => 'seen 1.1.1.1';
-
-};
-__END__
-
-subtest 'whitelist multiple subkeys' => sub {
- my $db = File::Temp->new();
-
- is unseen('x->y/1.1.1.1', 0, "$db"), 'yes' => 'unseen x->y/1.1.1.1';
- is unseen('x->y/2.2.2.2', 3, "$db"), 'yes' => 'unseen x->y/3.3.3.3';
- is unseen('x->y/3.3.3.3', 0, "$db"), 'no' => 'not unseen x->y/2.2.2.2';
-
- is unseen('a->b/1.1.1.1', 0, "$db"), 'no' => 'not unseen (whitelisted source)';
- is unseen('a->c/2.2.2.2', 0, "$db"), 'no' => 'not unseen (whitelisted source)';
- is unseen('x->y/3.3.3.3', 0, "$db"), 'no' => 'not unseen x->y/3.3.3.3 (known key)';
-};