Compare commits
15 Commits
Author | SHA1 | Date |
---|---|---|
Daniel Berteaud | 6d99639d6d | |
Daniel Berteaud | 3c7d17a2e5 | |
Daniel Berteaud | 432eaa8de8 | |
Daniel Berteaud | e6b501d606 | |
Daniel Berteaud | 52e7d7997c | |
Daniel Berteaud | 8669325555 | |
Daniel Berteaud | c9f983db0d | |
Daniel Berteaud | 3b05c5c5f6 | |
Daniel Berteaud | f9260644a5 | |
Daniel Berteaud | 1a090306f9 | |
Daniel Berteaud | 825e337c60 | |
Daniel Berteaud | 260359acbb | |
Daniel Berteaud | 70be65c741 | |
Daniel Berteaud | ebf4c1e73d | |
Daniel Berteaud | b56e73795a |
|
@ -0,0 +1,18 @@
|
|||
#!/bin/bash
|
||||
|
||||
HOME=/root
|
||||
|
||||
LOG=$(/sbin/e-smith/db configuration getprop qpsmtpd Log2Sql || echo 'disabled')
|
||||
|
||||
if [ "$LOG" != "enabled" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
RETENTION=$(/sbin/e-smith/db configuration getprop qpsmtpd Log2SqlRetention || echo 730)
|
||||
DB=$(/sbin/e-smith/db configuration getprop qpsmtpd DbName || echo smtp_log)
|
||||
|
||||
echo "delete from rcpts where mail_id IN (select mail_id from messages where date_day<DATE_SUB(NOW(), INTERVAL $RETENTION DAY));" | mysql $DB
|
||||
echo "delete from message_body where mail_id IN (select mail_id from messages where date_day<DATE_SUB(NOW(), INTERVAL $RETENTION DAY));" | mysql $DB
|
||||
echo "delete from message_headers where mail_id IN (select mail_id from messages where date_day<DATE_SUB(NOW(), INTERVAL $RETENTION DAY));" | mysql $DB
|
||||
echo "delete from messages where date_day<DATE_SUB(NOW(), INTERVAL $RETENTION DAY);" | mysql $DB
|
||||
|
|
@ -5,6 +5,12 @@ my $pass = ${'qpsmtpd'}{'DbPassword'} || 'secret';
|
|||
|
||||
my $dbstruct = `rpm -qd smeserver-qpsmtpd-log2sql | grep smtp_log.sql`;
|
||||
|
||||
my $convertInnoDB = '';
|
||||
foreach my $table qw(messages message_headers message_body rcpts){
|
||||
$convertInnoDB .= "ALTER TABLE $table ENGINE=InnoDB;\n"
|
||||
if (-e "/var/lib/mysql/$db/$table.MYD");
|
||||
}
|
||||
|
||||
$OUT .= <<"END";
|
||||
#! /bin/sh
|
||||
if [ ! -d /var/lib/mysql/$db ]; then
|
||||
|
@ -41,6 +47,10 @@ REPLACE INTO db (
|
|||
'N', 'Y', 'Y');
|
||||
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
USE smtp_log;
|
||||
$convertInnoDB
|
||||
|
||||
EOF
|
||||
END
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ if (($qpsmtpd{'Log2Sql'} || 'enabled') eq 'enabled'){
|
|||
|
||||
$OUT .=<<"EOF";
|
||||
# Log to MySQL
|
||||
logging/log2sql d $dbname h $dbhost u $dbuser p $dbpass D Yes
|
||||
logging/log2sql d $dbname h $dbhost u $dbuser p $dbpass D Yes H Yes
|
||||
EOF
|
||||
}
|
||||
else{
|
||||
|
|
|
@ -7,7 +7,7 @@ if (($qpsmtpd{'Log2Sql'} || 'enabled') eq 'enabled'){
|
|||
|
||||
$OUT .=<<"EOF";
|
||||
# Log to MySQL
|
||||
logging/log2sql d $dbname h $dbhost u $dbuser p $dbpass D Yes
|
||||
logging/log2sql d $dbname h $dbhost u $dbuser p $dbpass D Yes H Yes
|
||||
EOF
|
||||
}
|
||||
else{
|
||||
|
|
|
@ -16,7 +16,7 @@ use strict;
|
|||
#plugin level variables are here since version 0.02
|
||||
my ($dsn,$mail_table,$rcpt_table,$user,$passwd,$mail_id);
|
||||
my ($log_header);
|
||||
my ($log_all_body,$log_deny_body,$body_table);
|
||||
my ($log_all_body,$log_deny_body,$body_table,$headers_table);
|
||||
my ($dbh,$sth);
|
||||
|
||||
sub register {
|
||||
|
@ -25,6 +25,8 @@ sub register {
|
|||
my (%args) = @_;
|
||||
|
||||
$self->register_hook("connect", "connect_handler");
|
||||
$self->register_hook("auth-plain", "auth_handler");
|
||||
$self->register_hook("auth-login", "auth_handler");
|
||||
$self->register_hook("mail", "mail_handler");
|
||||
$self->register_hook("rcpt", "rcpt_handler");
|
||||
$self->register_hook("data_post", "data_post_handler");
|
||||
|
@ -50,6 +52,7 @@ sub register {
|
|||
$log_all_body = $args{B} || undef;
|
||||
$log_deny_body = $args{DB} || undef;
|
||||
$body_table = $args{b} || 'message_body';
|
||||
$headers_table = $args{I} || 'message_headers';
|
||||
}
|
||||
|
||||
sub connect_handler {
|
||||
|
@ -58,6 +61,9 @@ sub connect_handler {
|
|||
$self->log(LOGDEBUG,"DSN:$dsn");
|
||||
$dbh = DBI->connect($dsn,$user,$passwd) || $self->log(LOGERROR,DBI::errstr);
|
||||
|
||||
# Use UTF8
|
||||
$dbh->do("SET NAMES 'utf8';") || $self->log(LOGERROR,$dbh->errstr());
|
||||
|
||||
# generate mail id
|
||||
$mail_id = $$.'.'.time.'.'.int(rand(10000));
|
||||
# set note for other plugins
|
||||
|
@ -89,6 +95,20 @@ sub connect_handler {
|
|||
return(DECLINED);
|
||||
}
|
||||
|
||||
sub auth_handler {
|
||||
my ($self, $transaction, $method, $user) = @_;
|
||||
|
||||
my ($statement) = "UPDATE ".$mail_table." SET auth_user=".
|
||||
$dbh->quote($user).
|
||||
" WHERE mail_id=".$mail_id;
|
||||
|
||||
$self->log(LOGDEBUG,"auth_handler statement:".$statement);
|
||||
|
||||
$dbh->do($statement)
|
||||
|| $self->log(LOGERROR,$dbh->errstr());
|
||||
|
||||
return(DECLINED);
|
||||
}
|
||||
|
||||
sub mail_handler {
|
||||
my ($self, $transaction, $sender) = @_;
|
||||
|
@ -151,9 +171,9 @@ sub data_post_handler{
|
|||
|
||||
#if $args{H} then log the message header in the main 'messages' table
|
||||
if ($log_header){
|
||||
$statement = "UPDATE ".$mail_table." SET ".
|
||||
"header=".$dbh->quote($header->as_string()).
|
||||
"WHERE mail_id=".$mail_id;
|
||||
$statement = "INSERT INTO ".$headers_table." (mail_id,header)".
|
||||
" VALUES(".$mail_id.",".$dbh->quote($header->as_string()).
|
||||
")";
|
||||
$self->log(LOGDEBUG,"data_post_handler log header statement:".$statement);
|
||||
|
||||
$dbh->do($statement)
|
||||
|
@ -268,6 +288,7 @@ The plugin accepts the following parameters:
|
|||
u - database user (default root)
|
||||
p - database password (default '')
|
||||
H - log the header of the message in the main table for mail messages (e.g. 'messages'). For example "H Yes".
|
||||
I - sql table for the message headers. H parameter is requiered
|
||||
|
||||
=head1 CONFIGURATION OF THE ADDITIONAL FEATURES
|
||||
|
||||
|
@ -297,7 +318,6 @@ Here are the CREATE statements for the tables. Assuming the 'messages' table is
|
|||
`header_size` int(11) default NULL,
|
||||
`body_size` int(11) default NULL,
|
||||
`spam_status` float default NULL,
|
||||
`header` text,
|
||||
`deny` set('YES','NO') default NULL,
|
||||
`deny_plugin` varchar(100) default '',
|
||||
`deny_code` int(11) default '0',
|
||||
|
@ -319,6 +339,12 @@ Here are the CREATE statements for the tables. Assuming the 'messages' table is
|
|||
PRIMARY KEY (`bdy_id`)
|
||||
) TYPE=MyISAM;
|
||||
|
||||
CREATE TABLE `message_headers` (
|
||||
`header_id` int(11) NOT NULL auto_increment,
|
||||
`mail_id` varchar(255) NOT NULL default '',
|
||||
`header` text,
|
||||
PRIMARY KEY (`header_id`)
|
||||
) TYPE=MyISAM;
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
%define version 0.1.2
|
||||
%define version 0.1.8
|
||||
%define release 1
|
||||
%define name smeserver-qpsmtpd-log2sql
|
||||
|
||||
|
@ -23,7 +23,27 @@ Requires: perl(DBI)
|
|||
Log every smtp transaction in a database
|
||||
|
||||
%changelog
|
||||
* Fri Oct 12 2012 Daniel Berteaud <daniel@firewall-services.com> 0.1.2-1
|
||||
* Thu Jun 26 2014 Daniel Berteaud <daniel@firewall-services.com> 0.1.8-1
|
||||
- Define HOME in cron task so it works on EL6
|
||||
|
||||
* Wed May 15 2013 Daniel Berteaud <daniel@firewall-services.com> 0.1.7-1
|
||||
- Only convert to InnoDB if not already done
|
||||
|
||||
* Mon Apr 22 2013 Daniel Berteaud <daniel@firewall-services.com> 0.1.6-1
|
||||
- Fix a typo in MySQL template
|
||||
|
||||
* Fri Apr 19 2013 Daniel Berteaud <daniel@firewall-services.com> 0.1.5-1
|
||||
- Use InnoDB instead of MyISAM
|
||||
|
||||
* Tue Oct 16 2012 Daniel Berteaud <daniel@firewall-services.com> 0.1.4-1
|
||||
- purge old entries from the database
|
||||
- log headers in a separate table
|
||||
|
||||
* Sun Oct 14 2012 Daniel Berteaud <daniel@firewall-services.com> 0.1.3-1
|
||||
- use UTF-8 for MySQL connexion
|
||||
- log auth user name
|
||||
|
||||
* Fri Oct 12 2012 Daniel Berteaud <daniel@firewall-services.com> 0.1.2-1
|
||||
- decode (MIME-Header) mail subject
|
||||
|
||||
* Thu Oct 11 2012 Daniel Berteaud <daniel@firewall-services.com> 0.1.1-1
|
||||
|
@ -45,6 +65,7 @@ perl ./createlinks
|
|||
(cd root ; /usr/bin/find . -depth -print | /bin/cpio -dump $RPM_BUILD_ROOT)
|
||||
/bin/rm -f %{name}-%{version}-filelist
|
||||
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT \
|
||||
--file /etc/cron.daily/qpsmtpd-db-cleanup 'attr(0755,root,root)' \
|
||||
> %{name}-%{version}-filelist
|
||||
|
||||
echo "%doc CHANGELOG.git" >> %{name}-%{version}-filelist
|
||||
|
|
15
smtp_log.sql
15
smtp_log.sql
|
@ -5,29 +5,36 @@ CREATE TABLE `messages` (
|
|||
`remote_ip` varchar(255) default NULL,
|
||||
`remote_host` varchar(255) default NULL,
|
||||
`remote_info` varchar(255) default NULL,
|
||||
`auth_user` varchar(30) default NULL,
|
||||
`sender` varchar(255) default NULL,
|
||||
`subject` varchar(255) default NULL,
|
||||
`header_size` int(11) default NULL,
|
||||
`body_size` int(11) default NULL,
|
||||
`spam_status` float default NULL,
|
||||
`header` text,
|
||||
`deny` set('YES','NO') default NULL,
|
||||
`deny_plugin` varchar(100) default '',
|
||||
`deny_code` int(11) default '0',
|
||||
`deny_msg` text,
|
||||
PRIMARY KEY (`mail_id`)
|
||||
) TYPE=MyISAM;
|
||||
) TYPE=InnoDB;
|
||||
|
||||
CREATE TABLE `rcpts` (
|
||||
`rcpt_id` int(11) NOT NULL auto_increment,
|
||||
`mail_id` varchar(255) NOT NULL default '',
|
||||
`recipient` varchar(255),
|
||||
PRIMARY KEY (`rcpt_id`)
|
||||
) TYPE=MyISAM;
|
||||
) TYPE=InnoDB;
|
||||
|
||||
CREATE TABLE `message_body` (
|
||||
`bdy_id` int(11) NOT NULL auto_increment,
|
||||
`mail_id` varchar(255) NOT NULL default '',
|
||||
`body` text,
|
||||
PRIMARY KEY (`bdy_id`)
|
||||
) TYPE=MyISAM;
|
||||
) TYPE=InnoDB;
|
||||
|
||||
CREATE TABLE `message_headers` (
|
||||
`header_id` int(11) NOT NULL auto_increment,
|
||||
`mail_id` varchar(255) NOT NULL default '',
|
||||
`header` text,
|
||||
PRIMARY KEY (`header_id`)
|
||||
) TYPE=InnoDB;
|
||||
|
|
Loading…
Reference in New Issue