[Dovecot] Possible to log IMAP connections to MySQL Table?

Marcin Gryszkalis mg at fork.pl
Sat Jan 3 02:15:39 EET 2009


On Wednesday of December 24 2008, Corey Shaw wrote:
> I'll take a look at the post login scripting.  It sounds like it would be
> much better than a script that simply tails the log file for any IMAP
> connections.  Thanks for the help!

I used such script and it works fine (on not really busy site though):

I think you could use better way to find out if it's imap or pop3 (better than 
looking if $ENV{POP3_CLIENT_WORKAROUNDS} exists), but it works for me...

#!/usr/bin/perl
use DBI;
$db_user = 'dovecot';
$db_pass = 'DOVECOTPASSWORD';
$db_db = 'system';

$mode = exists $ENV{POP3_CLIENT_WORKAROUNDS} ? "pop3" : "imap";
$ip = $ENV{IP};

$u = $ENV{USER};
$virtual = $u =~ m/(.*)\@(.*)/ ? 1 : 0;
if ($virtual)
{
    $local = $1;
    $domain = $2;

    $dbh = DBI->connect("DBI:mysql:$db_db", $db_user, $db_pass) || 
die "Could not connect to database: $DBI::errstr";
    $dbh->do('UPDATE user set lastlogin=now(), lastlogin_ip=? where username=? 
and domain=?', undef, $ip, $local, $domain);
    $dbh->disconnect();
}

exec "/usr/local/libexec/dovecot/$mode";




-- 
Marcin Gryszkalis, PGP 0x9F183FA3 
jabber jid:mg at fork.pl, gg:2532994
http://the.fork.pl


More information about the dovecot mailing list