Skip to content

Commit

Permalink
mail/exilog: fix to be compatible with new exim msgid format
Browse files Browse the repository at this point in the history
Recently exim changed msgid format, so tool does not work correctly
anymore. I tried to contact upstream but no reply so far. Also some
minor changes to make portlint happy
  • Loading branch information
samm-git committed Apr 4, 2024
1 parent 332ec56 commit add1cc6
Show file tree
Hide file tree
Showing 9 changed files with 256 additions and 98 deletions.
42 changes: 22 additions & 20 deletions mail/exilog/Makefile
@@ -1,6 +1,6 @@
PORTNAME= exilog
PORTVERSION= 0.5
PORTREVISION= 9
PORTREVISION= 10
CATEGORIES= mail
MASTER_SITES= http://duncanthrax.net/exilog/

Expand All @@ -11,15 +11,10 @@ WWW= https://duncanthrax.net/exilog/
LICENSE= GPLv2
LICENSE_FILE= ${WRKSRC}/LICENSE

#RUN_DEPENDS= p5-Net-Netmask>=0:net-mgmt/p5-Net-Netmask

OPTIONS_DEFINE= DOCS

USES= perl5 shebangfix
NO_BUILD= yes
NO_ARCH= yes
SHEBANG_GLOB= *.pl

SHEBANG_FILES= exilog_agent.pl exilog_cgi.pl exilog_cleanup.pl
RUN_DEPENDS= p5-Net-Netmask>=0:net-mgmt/p5-Net-Netmask

# Default sql backend
WITH_SQL_BACKEND?= mysql
Expand All @@ -33,7 +28,7 @@ WITH_POSTGRESQL= yes
RUN_DEPENDS+= p5-DBD-Pg>=0:databases/p5-DBD-Pg
SERVER= postgresql
.else
BROKEN= You should specify sql backend using WITH_SQL_BACKEND
BROKEN= you should specify sql backend using WITH_SQL_BACKEND
.endif
SUB_LIST+= SERVER=${SERVER}
.ifndef WITHOUT_WWWDIR
Expand All @@ -42,6 +37,8 @@ EXILOGDIR?= ${PREFIX}/www/exilog
EXILOGDIR?= ${PREFIX}/exilog
.endif

OPTIONS_DEFINE= DOCS

.include <bsd.port.pre.mk>

.if defined(WITHOUT_AGENT)
Expand All @@ -51,6 +48,11 @@ USE_RC_SUBR= exilog
PLIST_SUB+= AGENT=""
.endif

NO_BUILD= yes
NO_ARCH= yes

SHEBANG_FILES= exilog_agent.pl exilog_cgi.pl exilog_cleanup.pl

PLIST_SUB+= EXILOGDIR="${EXILOGDIR:S,^${PREFIX}/,,}"

PORTDOC_FILES= doc/Changelog \
Expand All @@ -67,20 +69,20 @@ pre-patch:
@${REINPLACE_CMD} -e "s,\(use exilog_config\),use lib \'${EXILOGDIR}\'; \1," ${WRKSRC}/exilog_cleanup.pl

do-install:
@${MKDIR} ${STAGEDIR}${EXILOGDIR} ${STAGEDIR}${EXILOGDIR}/icons
@${CP} ${WRKSRC}/*.pm ${WRKSRC}/*.css ${WRKSRC}/*.js ${STAGEDIR}${EXILOGDIR}
@${CP} ${WRKSRC}/icons/* ${STAGEDIR}${EXILOGDIR}/icons
${MKDIR} ${STAGEDIR}${EXILOGDIR} ${STAGEDIR}${EXILOGDIR}/icons
${CP} ${WRKSRC}/*.pm ${WRKSRC}/*.css ${WRKSRC}/*.js ${STAGEDIR}${EXILOGDIR}
${CP} ${WRKSRC}/icons/* ${STAGEDIR}${EXILOGDIR}/icons
.if !defined(WITHOUT_AGENT)
@${INSTALL_SCRIPT} ${WRKSRC}/exilog_agent.pl ${STAGEDIR}${PREFIX}/sbin
${INSTALL_SCRIPT} ${WRKSRC}/exilog_agent.pl ${STAGEDIR}${PREFIX}/sbin
.endif
@${INSTALL_SCRIPT} ${WRKSRC}/exilog_cleanup.pl ${STAGEDIR}${PREFIX}/sbin
@${INSTALL_SCRIPT} ${WRKSRC}/exilog_cgi.pl ${STAGEDIR}${EXILOGDIR}
@${CP} ${WRKSRC}/exilog.conf-example ${STAGEDIR}${PREFIX}/etc/exilog.conf-dist
@${CHMOD} 0600 ${STAGEDIR}${PREFIX}/etc/exilog.conf-dist
@${CP} ${FILESDIR}/htaccess ${STAGEDIR}${EXILOGDIR}/.htaccess
@${MKDIR} ${STAGEDIR}${DOCSDIR}
${INSTALL_SCRIPT} ${WRKSRC}/exilog_cleanup.pl ${STAGEDIR}${PREFIX}/sbin
${INSTALL_SCRIPT} ${WRKSRC}/exilog_cgi.pl ${STAGEDIR}${EXILOGDIR}
${CP} ${WRKSRC}/exilog.conf-example ${STAGEDIR}${PREFIX}/etc/exilog.conf-dist
${CHMOD} 0600 ${STAGEDIR}${PREFIX}/etc/exilog.conf-dist
${CP} ${FILESDIR}/htaccess ${STAGEDIR}${EXILOGDIR}/.htaccess
${MKDIR} ${STAGEDIR}${DOCSDIR}
.for docfile in ${PORTDOC_FILES}
@${INSTALL_DATA} ${WRKSRC}/${docfile} ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} ${WRKSRC}/${docfile} ${STAGEDIR}${DOCSDIR}
.endfor

.include <bsd.port.post.mk>
92 changes: 92 additions & 0 deletions mail/exilog/files/patch-doc_mysql-db-script.sql
@@ -0,0 +1,92 @@
--- doc/mysql-db-script.sql.orig 2005-07-22 08:57:03 UTC
+++ doc/mysql-db-script.sql
@@ -15,12 +15,12 @@

CREATE TABLE `deferrals` (
`server` varchar(32) NOT NULL default '',
- `message_id` varchar(16) binary NOT NULL default '',
+ `message_id` varchar(23) binary NOT NULL default '',
`timestamp` bigint(20) NOT NULL default '0',
`rcpt` varchar(200) NOT NULL default '',
`rcpt_intermediate` varchar(200) default NULL,
`rcpt_final` varchar(200) NOT NULL default '',
- `host_addr` varchar(15) default NULL,
+ `host_addr` varchar(45) default NULL,
`host_dns` varchar(255) default NULL,
`tls_cipher` varchar(128) default NULL,
`router` varchar(128) default NULL,
@@ -43,12 +43,12 @@ CREATE TABLE `deferrals` (

CREATE TABLE `deliveries` (
`server` varchar(32) NOT NULL default '',
- `message_id` varchar(16) binary NOT NULL default '',
+ `message_id` varchar(23) binary NOT NULL default '',
`timestamp` bigint(20) NOT NULL default '0',
`rcpt` varchar(200) NOT NULL default '',
`rcpt_intermediate` varchar(200) default NULL,
`rcpt_final` varchar(200) NOT NULL default '',
- `host_addr` varchar(15) default NULL,
+ `host_addr` varchar(45) default NULL,
`host_dns` varchar(255) default NULL,
`tls_cipher` varchar(128) default NULL,
`router` varchar(128) default NULL,
@@ -71,12 +71,12 @@ CREATE TABLE `deliveries` (

CREATE TABLE `errors` (
`server` varchar(32) NOT NULL default '',
- `message_id` varchar(16) binary NOT NULL default '',
+ `message_id` varchar(23) binary NOT NULL default '',
`timestamp` bigint(20) NOT NULL default '0',
`rcpt` varchar(200) NOT NULL default '',
`rcpt_intermediate` varchar(200) default NULL,
`rcpt_final` varchar(200) NOT NULL default '',
- `host_addr` varchar(15) default NULL,
+ `host_addr` varchar(45) default NULL,
`host_dns` varchar(255) default NULL,
`tls_cipher` varchar(128) default NULL,
`router` varchar(128) default NULL,
@@ -99,12 +99,12 @@ CREATE TABLE `errors` (

CREATE TABLE `messages` (
`server` varchar(32) NOT NULL default '',
- `message_id` varchar(16) binary NOT NULL default '',
+ `message_id` varchar(23) binary NOT NULL default '',
`timestamp` bigint(20) default NULL,
`msgid` varchar(255) default NULL,
`completed` bigint(20) default NULL,
`mailfrom` varchar(255) default NULL,
- `host_addr` varchar(15) default NULL,
+ `host_addr` varchar(45) default NULL,
`host_rdns` varchar(255) default NULL,
`host_ident` varchar(255) default NULL,
`host_helo` varchar(255) default NULL,
@@ -132,7 +132,7 @@ CREATE TABLE `messages` (

CREATE TABLE `queue` (
`server` varchar(32) NOT NULL default '',
- `message_id` varchar(16) binary NOT NULL default '',
+ `message_id` varchar(23) binary NOT NULL default '',
`mailfrom` varchar(255) NOT NULL default '',
`timestamp` bigint(20) NOT NULL default '0',
`num_dsn` int(11) NOT NULL default '0',
@@ -162,9 +162,9 @@ CREATE TABLE `queue` (

CREATE TABLE `rejects` (
`server` varchar(32) NOT NULL default '',
- `message_id` varchar(16) binary default NULL,
+ `message_id` varchar(23) binary default NULL,
`timestamp` bigint(20) NOT NULL default '0',
- `host_addr` varchar(15) NOT NULL default '',
+ `host_addr` varchar(45) NOT NULL default '',
`host_rdns` varchar(255) NOT NULL default '',
`host_ident` varchar(255) default NULL,
`host_helo` varchar(255) default NULL,
@@ -188,7 +188,7 @@ CREATE TABLE `rejects` (

CREATE TABLE `unknown` (
`server` varchar(32) NOT NULL default '',
- `message_id` varchar(16) binary NOT NULL default '',
+ `message_id` varchar(23) binary NOT NULL default '',
`timestamp` bigint(20) NOT NULL default '0',
`line` varchar(255) NOT NULL default '',
PRIMARY KEY (`server`,`message_id`,`timestamp`,`line`),
65 changes: 65 additions & 0 deletions mail/exilog/files/patch-doc_pgsql-db-script.sql
@@ -0,0 +1,65 @@
--- doc/pgsql-db-script.sql.orig 2024-04-04 09:13:29 UTC
+++ doc/pgsql-db-script.sql
@@ -24,7 +24,7 @@ SET search_path = exilog, pg_catalog;

CREATE TABLE deferrals (
server character varying(32) NOT NULL,
- message_id character(16) NOT NULL,
+ message_id character(23) NOT NULL,
"timestamp" bigint NOT NULL,
rcpt character varying(200) NOT NULL,
rcpt_intermediate character varying(200),
@@ -46,7 +46,7 @@ CREATE TABLE deferrals (

CREATE TABLE errors (
server character varying(32) NOT NULL,
- message_id character(16) NOT NULL,
+ message_id character(23) NOT NULL,
"timestamp" bigint NOT NULL,
rcpt character varying(200) NOT NULL,
rcpt_intermediate character varying(200),
@@ -68,7 +68,7 @@ CREATE TABLE errors (

CREATE TABLE deliveries (
server character varying(32) NOT NULL,
- message_id character(16) NOT NULL,
+ message_id character(23) NOT NULL,
"timestamp" bigint NOT NULL,
rcpt character varying(200) NOT NULL,
rcpt_intermediate character varying(200),
@@ -89,7 +89,7 @@ CREATE TABLE deliveries (

CREATE TABLE queue (
server character varying(32) NOT NULL,
- message_id character(16) NOT NULL,
+ message_id character(23) NOT NULL,
mailfrom character varying(255),
"timestamp" bigint,
num_dsn integer,
@@ -111,7 +111,7 @@ CREATE TABLE queue (

CREATE TABLE "unknown" (
server character varying(32) NOT NULL,
- message_id character(16) NOT NULL,
+ message_id character(23) NOT NULL,
"timestamp" bigint NOT NULL,
line character varying(255) NOT NULL
);
@@ -124,7 +124,7 @@ CREATE TABLE "unknown" (

CREATE TABLE messages (
server character varying(32) NOT NULL,
- message_id character(16) NOT NULL,
+ message_id character(23) NOT NULL,
"timestamp" bigint,
msgid character varying(255),
completed bigint,
@@ -148,7 +148,7 @@ CREATE TABLE messages (

CREATE TABLE rejects (
server character varying(32) NOT NULL,
- message_id character(16),
+ message_id character(23),
"timestamp" bigint NOT NULL,
host_addr inet,
host_rdns character varying(255),
32 changes: 32 additions & 0 deletions mail/exilog/files/patch-exilog__agent.pl
@@ -0,0 +1,32 @@
--- exilog_agent.pl.orig 2024-04-04 09:07:54 UTC
+++ exilog_agent.pl
@@ -48,7 +48,11 @@ unless ($foreground) {
};

setsid();
-
+ my $me = "exilog";
+ my $pidfile = "/var/run/".$me.".pid";
+ open (PID,">$pidfile");
+ print PID $$;
+ close (PID);
# dup STDOUT/ERR
open(STDOUT, ">&LOG");
open(STDERR, ">&LOG");
@@ -413,13 +417,13 @@ sub _tail {
print STDERR "($$) [exilog_agent:_tail] ($logfile) ".scalar localtime()." ".$_[0];
};

- # open the file
- open(LOGFILE,"< $logfile");
-
# import parser, open DB connection
use exilog_parse;
use exilog_sql;
reconnect();
+
+ # open the file
+ open(LOGFILE,"< $logfile");

my $curpos;
my $fsize = (-s $logfile);
22 changes: 22 additions & 0 deletions mail/exilog/files/patch-exilog__cgi__messages.pm
@@ -0,0 +1,22 @@
--- exilog_cgi_messages.pm.orig 2005-07-26 11:34:47 UTC
+++ exilog_cgi_messages.pm
@@ -145,8 +145,8 @@ sub _select_host {
}

my @queries;
- if ($param->{'qs'} =~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/) {
- # IPv4 address
+ if ($param->{'qs'} =~ /^[0-9A-Fa-f.:]+$/) {
+ # IPv4 or IPv6 address
push @queries, { 'table' => 'messages',
'criteria' => { 'host_addr' => $param->{'qs'} } },
{ 'table' => 'rejects',
@@ -352,7 +352,7 @@ sub messages {
delete $message->{timestamp};

# Check the message ID.
- if ($message->{message_id} !~ /^.{6}\-.{6}\-.{2}$/) {
+ if ($message->{message_id} !~ /^.{6}\-.{6,11}\-.{2,4}$/) {
# This is a pre-DATA reject/warning.
# Render it as a reject.
my $complete = @{ sql_select( 'rejects', ['*'], $message ) }[0];
20 changes: 20 additions & 0 deletions mail/exilog/files/patch-exilog__parse.pm
@@ -0,0 +1,20 @@
--- exilog_parse.pm.orig 2024-04-04 09:14:20 UTC
+++ exilog_parse.pm
@@ -260,7 +260,7 @@ sub parse_reject_line {
# and one with message ID (post-DATA). Try the latter first.

m/()()()()/;
- $subj =~ m/(\d{4}-\d\d-\d\d) (\d\d:\d\d:\d\d( [-+]\d{4})?) ([A-Za-z0-9]{6}-[A-Za-z0-9]{6}-[A-Za-z0-9]{2}) (H=.*)$/;
+ $subj =~ m/(\d{4}-\d\d-\d\d) (\d\d:\d\d:\d\d( [-+]\d{4})?) ([A-Za-z0-9]{6}-[A-Za-z0-9]{6,11}-[A-Za-z0-9]{2,4}) (H=.*)$/;
my ($date,$tod,$msgid,$line) = ($1,$2,$4,$5);
if ($date && $tod && $msgid && $line) {
# line with message id
@@ -297,7 +297,7 @@ sub parse_message_line {
return 0 if ($subj =~ /retry time not reached for any host$/);

# Grab date, time and message id
- $subj =~ m/(\d{4}-\d\d-\d\d) (\d\d:\d\d:\d\d( [-+]\d{4})?) ([A-Za-z0-9]{6}-[A-Za-z0-9]{6}-[A-Za-z0-9]{2}) (([^ ]+).*)$/;
+ $subj =~ m/(\d{4}-\d\d-\d\d) (\d\d:\d\d:\d\d( [-+]\d{4})?) ([A-Za-z0-9]{6}-[A-Za-z0-9]{6,11}-[A-Za-z0-9]{2,4}) (([^ ]+).*)$/;
my ($date,$tod,$msgid,$line,$type) = ($1,$2,$4,$5,$6);
$line =~ s/^ +// if (defined($line));
unless ($date && $tod && $msgid && $line && $type) {
@@ -1,6 +1,6 @@
--- /usr/local/www/exilog/exilog_sql.pm Tue Feb 21 16:23:56 2006
+++ exilog_sql.pm Wed Aug 24 09:22:29 2005
@@ -208,7 +208,7 @@
--- exilog_sql.pm.orig 2005-08-24 14:22:29 UTC
+++ exilog_sql.pm
@@ -208,7 +208,7 @@ sub _pgsql_sql_queue_add {
sub _pgsql_sql_optimize {
my $where = shift || "nothing";

Expand Down
15 changes: 0 additions & 15 deletions mail/exilog/files/patch-exilog_agent.pl

This file was deleted.

0 comments on commit add1cc6

Please sign in to comment.