From 05ff0ad608d5fa2e32ee414ed7ad35f06c04a150 Mon Sep 17 00:00:00 2001 From: Dominik Meyer <dmeyer@federationhq.de> Date: Wed, 27 Dec 2023 11:29:48 +0100 Subject: [PATCH] FIX: verify dsn --- plugins/rcpt_mysql | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/plugins/rcpt_mysql b/plugins/rcpt_mysql index dd2c3dd..a489898 100644 --- a/plugins/rcpt_mysql +++ b/plugins/rcpt_mysql @@ -39,6 +39,16 @@ sub createDSN $self->{dsn} = $dsn; $self->log(LOGDEBUG, "created DSN " . $self->{dsn}); + + # try to parse the dsn to ensure it is valid + my @data = DBI->parse_dsn($self->{dsn}); + + if (@data == 0) + { + $self->log(LOGERROR, "DSN " . $self->{dsn} . " not valid"); + $self->{dsn}=""; + } + } sub createQuery @@ -180,20 +190,25 @@ sub askDatabase my $self = shift; my $recipient = shift; - $self->log(LOGDEBUG, "use DSN " . $self->{dsn}); + if (length($self->{dsn}) == 0) + { + $self->log(LOGERROR, "DSN not valid not checking recipient in database"); + return DECLINED; + } + my $dbh = DBI::connect($self->{dsn}, $self->{user}, $self->{pass}); if ($dbh->err()) { - warn("error connecting to DB: " . $dbh->errstr()); - return DENYSOFT; + $self->log(LOGERROR, "error connecting to DB: " . $dbh->errstr()); + return DECLINED; } my $sth = $dbh->prepare($self->{sqlquery}); if ($sth->err()) { - warn("error preparing query: " . $sth->errstr()); - return DENYSOFT; + $self->log(LOGERROR, "error preparing query: " . $sth->errstr()); + return DECLINED; } $sth->execute($self->prepareParams($recipient));