#!/usr/bin/perl -w use esmith::DomainsDB; use esmith::ConfigDB; use File::Find; my $d = esmith::DomainsDB->open_ro || die "Couldn't open the domains database"; my $c = esmith::ConfigDB->open_ro || die "Couldn't open the configurtion database"; my $qpsmtpd = $c->get('qpsmtpd'); die "qpsmtpd service entry not found" unless ($qpsmtpd); my $dkim_sign = $qpsmtpd->prop('DKIMSigning') || 'disabled'; find({ wanted => \&wanted }, qw(/var/service/qpsmtpd/config/dkim/)); # Build a list of domain for which we want to sign emails my @dkim_domains = (); if ($dkim_sign =~ m/^enabled|yes|1|on$/){ foreach my $dom ($d->domains){ next if ($dom->prop('DKIMSigning') || 'enabled') eq 'disabled'; next if ($dom->prop('MailServer')); push @dkim_domains, $dom->key; } } sub wanted{ my $domain = $d->get($_); if ( -l && !grep { $_ eq $domain->key } @dkim_domains ){ unlink $_; } } foreach my $dom (@dkim_domains){ next if (-e '/var/service/qpsmtpd/config/dkim/' . $dom); my $src = ( -e '/home/e-smith/dkim_keys/' . $dom ) ? '/home/e-smith/dkim_keys/' . $dom : '/home/e-smith/dkim_keys/default'; symlink $src, '/var/service/qpsmtpd/config/dkim/' . $dom; }