[savepoint] ng
authorHeiko Schlittermann <hs@schlittermann.de>
Fri, 16 Jul 2010 17:12:22 +0200
branchng
changeset 5 2407e371ec7a
parent 4 90735b404da2
child 6 31f1e0c6344d
[savepoint]
README
lib/.perltidyrc
lib/Exim.pm
run
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README	Fri Jul 16 17:12:22 2010 +0200
@@ -0,0 +1,17 @@
+The checks should ensure that configuration changes to exim didn't break
+anything.
+
+Several types of checks should be performed:
+
+* ROUTING
+* ACCESS
+* AUTHENTICATION
+
+
+Which parameters do we need to set for checking?
+Which parameters influence Routing, Access Control and Authentication?
+
+First we could focus on simple -bt or -bv checks. But this does not
+suffice, since even routing could depend on source IP, sender address
+and so on.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/.perltidyrc	Fri Jul 16 17:12:22 2010 +0200
@@ -0,0 +1,2 @@
+--paren-tightness=2
+--square-bracket-tightness=2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/Exim.pm	Fri Jul 16 17:12:22 2010 +0200
@@ -0,0 +1,58 @@
+package Exim;
+
+use strict;
+use warnings;
+use Carp;
+
+my %basename;
+my %binary;
+my %config;
+
+sub new {
+    my $class = ref $_[0] ? ref shift : shift;
+
+    bless my $self = \my $anonymous => $class;
+    my %arg = @_;
+
+    $basename{$self} = $arg{basename} ? $arg{basename} : "exim4";
+    $config{$self}   = $arg{config}   ? $arg{config}   : "$arg{basename}.conf";
+    $binary{$self} = $self->_find_exim;
+
+    return $self;
+}
+
+sub binary {
+    my $self = shift;
+    return $binary{$self};
+}
+
+sub run {
+    my $self = shift;
+    return qx/$binary{$self} -C $config{$self} @_/;
+}
+
+sub get {
+    my $self = shift;
+    chomp(local $_ = $self->run(-bP => shift));
+    croak $_ unless /=/;
+    return /=\s*(.*)/;
+}
+
+sub DESTROY {
+    my $self = shift;
+    delete $basename{$self};
+    delete $binary{$self};
+    delete $config{$self};
+}
+
+sub _find_exim {
+    my $self = shift;
+    my %seen;
+    foreach (split /:/, "$ENV{PATH}:/usr/local/sbin:/usr/sbin:/sbin") {
+        next if $seen{$_};
+        return "$_/$basename{$self}" if -x "$_/$basename{$self}";
+    }
+    croak "Can't find the exim binary ($basename{$self})\n";
+}
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run	Fri Jul 16 17:12:22 2010 +0200
@@ -0,0 +1,11 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use lib "lib";
+use Exim;
+
+my $exim = new Exim(basename => "exim4", config => "/etc/exim4/exim4.conf");
+
+print $exim->get("spool_directory");