Steve Kemp wrote: > 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
I've qpsmtpd 0.83 with logterse running without any problems > > 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 /etc/qpsmtpd/logging should contain something like "logging/warn 9" rather than logterse. Synopsis from logterse plugin: "This plugin is not a logging replacement, but rather an adjunct to the normal logging plugins or builtin logging functionality. Specify it in config/plugins not config/logging or you'll get "interesting" results." > 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/ > > Christian