diff --git a/mail/exilog/Makefile b/mail/exilog/Makefile index 1f7f76923513..d45506b34051 100644 --- a/mail/exilog/Makefile +++ b/mail/exilog/Makefile @@ -1,86 +1,88 @@ PORTNAME= exilog PORTVERSION= 0.5 -PORTREVISION= 9 +PORTREVISION= 10 CATEGORIES= mail MASTER_SITES= http://duncanthrax.net/exilog/ MAINTAINER= ports@FreeBSD.org COMMENT= Tool to centralize and visualize Exim logs with a web front end 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 .if (${WITH_SQL_BACKEND} == "mysql") WITH_MYSQL= yes RUN_DEPENDS+= p5-DBD-mysql>=0:databases/p5-DBD-mysql SERVER= mysql .elif (${WITH_SQL_BACKEND} == "postgresql") 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 EXILOGDIR?= ${PREFIX}/www/exilog .else EXILOGDIR?= ${PREFIX}/exilog .endif +OPTIONS_DEFINE= DOCS + .include .if defined(WITHOUT_AGENT) PLIST_SUB+= AGENT="@comment " .else 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 \ doc/exilog.txt \ doc/mysql-db-script.sql \ doc/pgsql-db-script.sql post-extract: @${MV} ${WRKDIR}/${PORTNAME} ${WRKSRC} pre-patch: @${REINPLACE_CMD} -e 's,$$RealBin/exilog.conf,${PREFIX}/etc/exilog.conf,' ${WRKSRC}/exilog_config.pm @${REINPLACE_CMD} -e "s,\(use exilog_config\),use lib \'${EXILOGDIR}\'; \1," ${WRKSRC}/exilog_agent.pl @${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 diff --git a/mail/exilog/files/patch-doc_mysql-db-script.sql b/mail/exilog/files/patch-doc_mysql-db-script.sql new file mode 100644 index 000000000000..6d1fb9496dcc --- /dev/null +++ b/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`), diff --git a/mail/exilog/files/patch-doc_pgsql-db-script.sql b/mail/exilog/files/patch-doc_pgsql-db-script.sql new file mode 100644 index 000000000000..ca287f30388c --- /dev/null +++ b/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), diff --git a/mail/exilog/files/patch-exilog__agent.pl b/mail/exilog/files/patch-exilog__agent.pl new file mode 100644 index 000000000000..26fcf26a5c35 --- /dev/null +++ b/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); diff --git a/mail/exilog/files/patch-exilog__cgi__messages.pm b/mail/exilog/files/patch-exilog__cgi__messages.pm new file mode 100644 index 000000000000..33f38545071a --- /dev/null +++ b/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]; diff --git a/mail/exilog/files/patch-exilog__parse.pm b/mail/exilog/files/patch-exilog__parse.pm new file mode 100644 index 000000000000..3e746f9f049c --- /dev/null +++ b/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) { diff --git a/mail/exilog/files/patch-exilog_sql.pm b/mail/exilog/files/patch-exilog__sql.pm similarity index 62% rename from mail/exilog/files/patch-exilog_sql.pm rename to mail/exilog/files/patch-exilog__sql.pm index 9f1aa3d1099c..0a22b977a377 100644 --- a/mail/exilog/files/patch-exilog_sql.pm +++ b/mail/exilog/files/patch-exilog__sql.pm @@ -1,11 +1,11 @@ ---- /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"; - my $sql = "OPTIMIZE TABLE ".$where; + my $sql = "VACUUM ANALYZE ".$where; my $sh = $dbh->prepare($sql); $sh->execute; $sh->finish; diff --git a/mail/exilog/files/patch-exilog_agent.pl b/mail/exilog/files/patch-exilog_agent.pl deleted file mode 100644 index 4a970498a1a5..000000000000 --- a/mail/exilog/files/patch-exilog_agent.pl +++ /dev/null @@ -1,15 +0,0 @@ ---- exilog_agent.pl.orig Sat Jun 4 19:36:03 2005 -+++ exilog_agent.pl Sat Jun 4 19:39:00 2005 -@@ -46,7 +46,11 @@ - }; - - 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"); diff --git a/mail/exilog/files/patch-ipv6 b/mail/exilog/files/patch-ipv6 deleted file mode 100644 index 0d17adbcdbde..000000000000 --- a/mail/exilog/files/patch-ipv6 +++ /dev/null @@ -1,60 +0,0 @@ ---- doc/mysql-db-script.sql.orig 2012-02-06 14:35:52.000000000 +0200 -+++ doc/mysql-db-script.sql 2012-02-06 14:36:11.000000000 +0200 -@@ -20,7 +20,7 @@ - `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, -@@ -48,7 +48,7 @@ - `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, -@@ -76,7 +76,7 @@ - `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, -@@ -104,7 +104,7 @@ - `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, -@@ -164,7 +164,7 @@ - `server` varchar(32) NOT NULL default '', - `message_id` varchar(16) 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, ---- exilog_cgi_messages.pm.orig 2012-02-06 14:39:16.000000000 +0200 -+++ exilog_cgi_messages.pm 2012-02-06 14:40:02.000000000 +0200 -@@ -145,8 +145,8 @@ - } - - 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',