Hi,

  I've recently upgraded my qpsmtpd to the most recent
 0.83 release and hit a problem which had me stumped for
 a while.  In short plugins failed to get loaded, so
 all incoming mail was refused with:

   450 No plugin decided if relaying is allowed

  Tracking this down was tricky, but ultimately it seems
 the cause is the following section of Qpsmtpd.pm:

--
sub load_plugins

  my @plugins = $self->config('plugins');
  my @loaded;

  if ($hooks->{queue}) {
print "Plugins loaded already\n";
use Data::Dumper;
print Dumper( \$hooks );
    return @plugins;
  }
--

  Here we see the intent is to avoid loading plugins if they'd
 already been loaded - that is done by looking to see if at
 least one plugin has hooked queuing.

  I added the Data::Dumper section, and updated _load_plugin to
 log the loading of individual plugins:

--
sub _load_plugin {
  my $self = shift;
  my ($plugin_line, @plugin_dirs) = @_;
print "Load: $plugin_line\n";
--

  When I launch qpsmtpd I see this:

--
lenny:/etc/qpsmtpd# /usr/bin/perl -Tw /usr/bin/qpsmtpd-prefork --port 25 --user 
qpsmtpd --pid-file /var/run/qpsmtpd/qpsmtpd.pid  --debug
26/10/2009 13:20:23:9059: qpsmtpd-prefork daemon, version: 1.0, staring on 
host: 0.0.0.0:25 (user: qpsmtpd [0])
26/10/2009 13:20:23:9059: parent daemon nice level: -5
Load: logging/ffile:0 loglevel LOGCRIT /var/log/qpsmtpd/terse.log
Load: logging/terse
Load: logging/ffile:1 loglevel LOGINFO /var/log/qpsmtpd/qpsmtpd.log
Plugins loaded already
$VAR1 = \{
            'logging' => [
                           {
                             'name' => 'logging::ffile_3a0',
                             'code' => sub { "DUMMY" }
                           },
                           {
                             'name' => 'logging::ffile_3a1',
                             'code' => sub { "DUMMY" }
                           }
                         ],
            'deny' => [
                        {
                          'name' => 'logging::terse',
                          'code' => sub { "DUMMY" }
                        }
                      ],
            'queue' => [
                         {
                           'name' => 'logging::terse',
                           'code' => sub { "DUMMY" }
                         }
                       ],
            'disconnect' => [
                              {
                                'name' => 'logging::ffile_3a0',
                                'code' => sub { "DUMMY" }
                              },
                              {
                                'name' => 'logging::ffile_3a1',
                                'code' => sub { "DUMMY" }
                              }
                            ],
            'connect' => [
                           {
                             'name' => 'logging::ffile_3a0',
                             'code' => sub { "DUMMY" }
                           },
                           {
                             'name' => 'logging::ffile_3a1',
                             'code' => sub { "DUMMY" }
                           }
                         ]
          };
26/10/2009 13:20:23:9059: new child, pid: 9060
26/10/2009 13:20:23:9059: new child, pid: 9061
--

  In short because /etc/qpsmptd/logging contains "logterse" there
 is a hook_queue installed, and this tricks the server into believing
 that all the plugins are loaded even though only three plugins were
 loaded.  That means none of my "real" plugins are loaded, just the
 logging ones and ultimately mail is refused for all recipients.

  Having looked over the gitweb changelog I see nothing obvious
 which could have caused this change in behaviour so I'm a little
 stumped as to who is to "blame".

  For the moment I've stopped using logterse and all is well.

  I think it might be nice to update the code to test loading
 in some other fashion - but first I thought I'd throw this out
 to see if theres a sane explanation for this failure case.

Steve
--
Debian GNU/Linux System Administration
http://www.debian-administration.org/

Reply via email to