summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sysutils/oak/DESCR5
-rw-r--r--sysutils/oak/Makefile25
-rw-r--r--sysutils/oak/PLIST6
-rw-r--r--sysutils/oak/distinfo8
-rw-r--r--sysutils/oak/files/oak.1256
-rw-r--r--sysutils/oak/files/oak.conf291
-rw-r--r--sysutils/oak/files/oak.sh17
-rw-r--r--sysutils/oak/patches/patch-aa19
-rw-r--r--sysutils/oak/patches/patch-ab22
-rw-r--r--sysutils/oak/patches/patch-ac22
10 files changed, 671 insertions, 0 deletions
diff --git a/sysutils/oak/DESCR b/sysutils/oak/DESCR
new file mode 100644
index 00000000000..e4e8762ff8f
--- /dev/null
+++ b/sysutils/oak/DESCR
@@ -0,0 +1,5 @@
+Oak is a program that can be used to monitor syslogs from a collection
+of servers and notify operators when problem conditions arise. In
+addition to providing immediate notification of critical problems, oak
+will also batch less critical problems into summary messages that can be
+sent less often and via any medium.
diff --git a/sysutils/oak/Makefile b/sysutils/oak/Makefile
new file mode 100644
index 00000000000..eec5a61ea79
--- /dev/null
+++ b/sysutils/oak/Makefile
@@ -0,0 +1,25 @@
+# $NetBSD: Makefile,v 1.1.1.1 2007/11/03 14:28:21 rillig Exp $
+#
+
+DISTNAME= oak-1.5.0
+CATEGORIES= sysutils
+MASTER_SITES= http://www.ktools.org/dist/oak/
+
+MAINTAINER= jdwhite@jdwhite.org
+HOMEPAGE= http://www.ktools.org/dist/oak/
+COMMENT= System log reporting tool
+
+USE_PKGLOCALEDIR= yes
+USE_TOOLS+= gmake
+GNU_CONFIGURE= yes
+BUILD_TARGET=
+
+RCD_SCRIPTS= oak
+CONF_FILES= ${PREFIX}/share/examples/oak/oak.conf ${PKG_SYSCONFDIR}/oak.conf
+
+post-install:
+ ${INSTALL_DATA_DIR} ${PREFIX}/share/examples/oak
+ ${INSTALL_DATA} ${FILESDIR}/oak.conf* ${PREFIX}/share/examples/oak/
+ ${INSTALL_DATA} ${FILESDIR}/oak.1 ${PREFIX}/${PKGMANDIR}/man1/
+
+.include "../../mk/bsd.pkg.mk"
diff --git a/sysutils/oak/PLIST b/sysutils/oak/PLIST
new file mode 100644
index 00000000000..7528e2f15df
--- /dev/null
+++ b/sysutils/oak/PLIST
@@ -0,0 +1,6 @@
+@comment $NetBSD: PLIST,v 1.1.1.1 2007/11/03 14:28:21 rillig Exp $
+bin/oak
+man/man1/oak.1
+share/examples/rc.d/oak
+share/examples/oak/oak.conf
+@dirrm share/examples/oak
diff --git a/sysutils/oak/distinfo b/sysutils/oak/distinfo
new file mode 100644
index 00000000000..764714994ce
--- /dev/null
+++ b/sysutils/oak/distinfo
@@ -0,0 +1,8 @@
+$NetBSD: distinfo,v 1.1.1.1 2007/11/03 14:28:21 rillig Exp $
+
+SHA1 (oak-1.5.0.tar.gz) = cbfb413d0d6fcd16a7684b586c19ca481e060077
+RMD160 (oak-1.5.0.tar.gz) = b1ec46d5f5c0453b07b501d368196e7d884b150e
+Size (oak-1.5.0.tar.gz) = 31034 bytes
+SHA1 (patch-aa) = 4dba7d09f70786340881437dca77a99f0a731647
+SHA1 (patch-ab) = b202613feea1d6d9b538bbc1d34db6c64884c34c
+SHA1 (patch-ac) = ce53cf83a7a1e3cb55bb12141a8f5fe744b1cacd
diff --git a/sysutils/oak/files/oak.1 b/sysutils/oak/files/oak.1
new file mode 100644
index 00000000000..7117afb2808
--- /dev/null
+++ b/sysutils/oak/files/oak.1
@@ -0,0 +1,256 @@
+.Dt OAK 1
+.Dd Feb 27, 2005
+.Dt OAK 1
+.Sh NAME
+.Nm oak
+.Nd System Log Reporting Tool
+.Sh SYNOPSIS
+.Nm
+.Op Fl v
+.Op Fl h
+.Op Fl d
+.Op Fl c Ar configfile
+.Sh DESCRIPTION
+Oak is a program that can be used to monitor syslogs from a collection
+of servers and notify operators when problem conditions arise. In
+addition to providing immediate notification of critical problems, oak
+will also batch less critical problems into summary messages that can be
+sent less often and via any medium. For example you may wish to have oak
+page you on critical events while sending a summary of less important
+messages to your terminal once an hour. In addition you could send a
+daily email message summarizing all events.
+.Pp
+Oak runs as a daemon and monitors a syslog file for events. A common way
+to run oak would be on a server that is receiving syslogs forwarded from
+other servers. Based on a series of configurable regular expressions,
+each message is placed into one or more user-defined queues. Each queue
+is configured by the user to send out its messages after waiting some
+period of time.
+.Pp
+Oak keeps its messages succinct in a number of ways. Oak is aware of
+some information in log messages that will be unnecessary and produce
+needlessly repeated messages. For example process id's and sendmail
+queue id's can be automatically filtered out, thereby condensing
+hundreds of message to one short notification. In the case that oak does
+not know about a kind of log that can be condensed the configuration
+file can specify the custom information to be removed. Finally, for each
+medium being used to send messages the user can specify limits on the
+length of the message, the line length, the number of hosts being
+reported on, the number of messages per host, etc. This helps ensure that
+a runaway message won't overwhelm its recipient.
+.Pp
+Available options:
+.Bl -tag -width file
+.It Fl v
+print version number and exit
+.It Fl h
+print help message and exit
+.It Fl d
+run in debugging mode
+.It Fl c Ar configfile
+specify the oak config file.
+.El
+.Pp
+.Sh CONFIGURATION FILE
+The configuration file first defines a number of queues. Each queue will
+take a certain action at a certain time interval. For example you might
+define a queue called "daily-mail" that fires once a day and sends a
+piece of email. Or you might define a queue called "immediate-page"
+which would page you as soon as a problem was noticed.
+.Pp
+Next the configuration file specifies lists of regular expressions and
+each regular expression is associated with one or more of the queues
+defined earlier. Messages that come in are compared against the regular
+expressions in order. When the first regular expression is found that
+matches the message that message is placed in the queues associated with
+that expression.
+.Pp
+Note that a trash queue is defined for you by default and any messages
+queued to it are discarded. Because oak uses the first regular
+expression it finds the trash queue may be helpful in discarding
+unwanted messages while still allowing others to fall through by
+default.
+.Pp
+Config syntax:
+.Pp
+.Bl -ohang
+.It Sy set infile Ao Ar file Ac
+.Bl -ohang -offset indent
+Set the file being monitored to
+.Ao Ar file Ac .
+If this option is not specified in the config then it will default to
+.Pa /var/adm/messages .
+.El
+.It Sy set Oo Sy no Oc Sy nukepid
+.Bl -ohang -offset indent
+[Don't] Automatically remove process id's from logs. This option is on
+by default and is strongly recommended.
+.El
+.It Sy set Oo Sy no Oc Sy nukeciscoid
+.Bl -ohang -offset indent
+[Don't] Automatically remove log id numbers from cisco syslogs. This
+option is on by default and is recommended if you are processing logs
+from cisco equipment.
+.El
+.It Sy set Oo Sy no Oc Sy nukesmqid
+.Bl -ohang -offset indent
+[Don't] Automatically remove sendmail queue id numbers from logs.
+This option is on by default and is recommended if you are processing
+logs from sendmail.
+.El
+.It Sy set ignorehosts Ao Ar host Ac Oo Ao Ar host Ac ... Oc
+.Bl -ohang -offset indent
+Ignore logs from the hosts in the list. Make sure each host is
+listed exactly as it will appear in the log (i.e. exactly as it will be
+resolved by the local syslogd). This command can not be used at the same
+time as the
+.Em set onlyhosts
+command.
+.El
+.It Sy set onlyhosts Ao Ar host Ac Oo Ao Ar host Ac ... Oc
+.Bl -ohang -offset indent
+Process logs only from the hosts in the list. Make sure each host is
+listed exactly as it will appear in the log (i.e. exactly as it will be
+resolved by the local syslogd). This command can not be used at the same
+time as the
+.Em set ignorehosts
+command.
+.El
+.It Sy set replacestr Ao Ar string Ac
+.Bl -ohang -offset indent
+Set the string to be used when a section of log is blanked out, such
+as the pid. By default the string is "___". Anything in parens in a
+regular expression is blanked out, as is described below.
+.El
+.It Sy define queue Ao Ar queue Ac
+.Bl -ohang -offset indent
+Define a new queue whose name is
+.Ao Ar queue Ac .
+The following subcommands can be issued after defining a queue. They
+pertain to the most recent queue defined.
+.It Sy action Ao Ar action Ac Oo Ao Ar arg Ac ... Oc
+.Bl -ohang -offset indent
+Direct the queue to take specified
+.Ao Ar action Ac
+when it receives messages. You may use multiple action commands to
+specify more than one action. Currently supported values for
+.Ao Ar action Ac
+are
+.Em mail ,
+.Em zwrite ,
+and
+.Em exec .
+The arguments for each are as follows:
+.Bl -ohang -offset indent
+.It Sy action mail Ao Ar to Ac Ao Ar from Ac Ao Ar subject Ac
+.It Sy action zwrite Ao Ar class Ac Ao Ar instance Ac Ao Ar recipient Ac
+.It Sy action exec Ao Ar program Ac Oo Ao Ar arg Ac ... Oc
+.El
+In the case of the exec command the message is piped to the stdin of
+the named program.
+.El
+.It Sy action-limits Ao Ar numlines Ac Ao Ar linelen Ac Ao Ar numhosts Ac Ao Ar hostents Ac
+.Bl -ohang -offset indent
+Set limits on the size of messages sent by this queue.
+.Ao Ar numlines Ac
+is the total number of lines in the message.
+.Ao Ar linelen Ac
+is the maximum length of a line.
+.Ao Ar numhosts Ac
+is the maximum number of hosts in a message.
+.Ao Ar hostents Ac
+is the maximum number of logs per host. If the limits set by
+.Em numlines ,
+.Em numhosts ,
+or
+.Em hostents
+are exceeded then the message will be truncated appropriately and a
+message will be included noting that fact. If
+.Em linelen
+is exceeded by a line, the final characters will silently be stripped off.
+.El
+.It Sy fire Ao Ar time Ac
+.Bl -ohang -offset indent
+Specify how often the queue should send messages.
+.Ao Ar time Ac
+can be in one of three formats:
+.Bl -ohang -offset indent
+.It Sy *<num>[m|h|s]
+This specifies a repeated interval. For example:
+.Em *5m
+means to fire every 5 minutes from the time oak was started.
+.It Sy <hour>:<min>
+This specifies a static time to fire at, using a 24 hour clock.
+.Em 17:00
+would fire every day at 5pm.
+.It Sy now
+This indicates that message should be sent immediately. This option
+should almost always be used in conjunction with the
+.Em locking
+command described below.
+.El
+.El
+.It Sy locking Ao Ar time Ac
+.Bl -ohang -offset indent
+This option specifies how long a queue should wait after sending a
+message before it will send another message that matches the same
+regular expression as the first. This is typically used with queues that
+fire immediately or at very short intervals. For example, if a queue
+were set to page someone on a "file system full" message it would be
+desirable to not receive the page every on each successive log of the
+error; there would be a flood of pages. If the queue were set to be
+.Em locking 30m
+then a "file system full" page would be sent at most once every thirty
+minutes.
+.El
+.It Sy header Ao Ar text Ac
+.Bl -ohang -offset indent
+Set
+.Ao Ar text Ac
+to be sent at the beginning of the message.
+.El
+.It Sy prescan
+.Bl -ohang -offset indent
+This option indicates that the queue should include messages that
+are already in the log file. Normally a queue will only pick up new
+messages after oak has been started. This option is useful if you want
+to restart the oak daemon, but not lose messages for a daily report. It
+is not recommended for queues that send frequent messages since with the
+.Em prescan
+option set those messages will all be sent when oak is started.
+.El
+.El
+.It Sy on Ao Ar regex Ac
+.Bl -ohang -offset indent
+Specify a regular expression that can be matched. The subcommands
+following the
+.Em on
+command indicate what to do when the expression is matched. Anything in
+the regular expression that falls between parenthesis will be blanked
+out.
+.It Sy queues Ao Ar queuename Ac Oo Ao Ar queuename Ac ... Oc
+.Bl -ohang -offset indent
+Spool the message being matched into the queues named by
+.Ao Ar queuename Ac .
+.El
+.El
+.El
+.Pp
+.Sh SAMPLE CONFIG FILE
+.Bl -ohang
+.It A sample config file can be found at
+http://www.ktools.org/oak/oak-sample-config-1.txt
+.El
+.Sh BUGS
+Bugs can be reported to <bug-oak@ktools.org>.
+.Pp
+.Sh SEE ALSO
+.Bl -ohang
+.It re_format(7)
+.It oak homepage
+http://www.ktools.org/oak
+.It oak-users mailing list
+http://www.ktools.org/mailman/listinfo/oak-users/
+.El
+.Sh AUTHOR
+Oak was written by James Kretchmar (http://www.ktools.org/kretch).
diff --git a/sysutils/oak/files/oak.conf b/sysutils/oak/files/oak.conf
new file mode 100644
index 00000000000..d025497bc1f
--- /dev/null
+++ b/sysutils/oak/files/oak.conf
@@ -0,0 +1,291 @@
+###
+### Oak config file
+###
+
+###
+### Options -- See oak man page for a complete list.
+###
+
+set infile /var/log/messages
+
+# These are on by default, but we'll set them anyway.
+# To turn them off change to "set no nukepid", etc.
+set nukepid
+set nukeciscoid
+set nukesmqid
+
+###
+### Define Queues
+###
+
+define queue immediate-mail
+ # action mail <from> <to> <subject>
+ action mail root root "Oak Log Report"
+ fire now
+ locking 10m
+
+define queue hourly-mail
+ action mail root root "Oak Hourly Report"
+ fire *1hr
+ header Hourly Message Log
+
+define queue daily-mail
+ prescan
+ action mail root root "Oak Daily Report"
+ action-limits 300 100 100 100
+ fire 00:00
+ header Daily Message Log
+
+define queue immediate-zephyr
+ # action zwrite <class> <instance> <recipient>
+ action zwrite myclass oak *
+ action-limits 25 100 100 10
+ fire now
+ locking 30m
+ header **** CRITICAL MESSAGE LOG ****
+
+define queue hourly-zephyr
+ action zwrite myclass oak *
+ action-limits 25 100 100 10
+ fire *1hr
+ header Hourly Message Log
+
+define queue sendpage
+ #action exec <program> [<args> ...]
+ action exec pager_program pager_number
+ fire now
+ locking 30m
+
+# Queue 'trash' is implicitly defined. Anything queued to trash is ignored.
+
+##
+## Define queuing rules
+##
+## Uses regular expressions. Anything in parens gets turned into "___".
+##
+##########################################################################
+
+###
+### Critical messages first
+###
+
+on ^sendmail\[(.+)\]: (.+): SYSERR.*: (.+): cannot fork: Not enough memory
+ queues immediate-mail hourly-mail daily-mail
+on ^sendmail\[(.+)\]: WorkList for .+ maxed out at .+
+ queues immediate-mail hourly-mail daily-mail
+on ^unix: WARNING: Sorry, no swap space to grow stack for pid (.+)
+ queues immediate-mail hourly-mail daily-mail
+on file system full
+ queues immediate-mail hourly-mail daily-mail
+
+###
+### Then throw out the garbage
+###
+
+on ^(.+): -Traceback= .+
+ queues trash
+on ^(.+): -Process= .Per-minute Jobs., ipl= (.+), pid= (.+)
+ queues trash
+on ^(.+): End of MEMD buffer : (.+)
+ queues trash
+on ^(.+): End of datagram : (.+)
+ queues trash
+on ^(.+): bufhdr .+
+ queues trash
+on ^(.+): %SYS-5-CONFIG_I: Configured from console by (.+) \((.+)\)
+ queues trash
+on ^(.+): %AT-6-NODEWRONG: .+: AppleTalk node (.+) misconfigured; reply has been broadcast
+ queues trash
+on ^(.+): %AUTORP-5-MAPPING: RP for .+ is now .+
+ queues trash
+on ^(.+): %AT-5-RTMPSTATE: .+: RTMP Path to (.+) via .+ now in Bad state *(.*)
+ queues trash
+on ^(.+): %AT-5-RTMPSTATE: .+: RTMP Path to (.+) via .+ now in Good state (.*)
+ queues trash
+on ^dhcpd: Abandoning IP address (.+): declined
+ queues trash
+on gethostbyaddr: (.*) != (.+)
+ queues trash
+on ^imapd\[(.+)\]: PROTERR: idle for too long
+ queues trash
+on ^imapd\[(.+)\]: PROTERR: Connection reset by peer
+ queues trash
+on ^kshd\[(.+)\]: Executing .* rcp .* for principal (.*)
+ queues trash
+on ^eklogind\[(.+)\]: ROOT login by (.+) \((.+)\)
+ queues trash
+on ^eklogind\[(.+)\]: Kerberos authentication failed
+ queues trash
+on ^Klogind\[(.+)\]: (.*)login by (.+) \((.+) \((.+)\)\)
+ queues trash
+on ^klogind\[(.+)\]: ROOT login by (.+) \((.+) \((.+)\)\)
+ queues trash
+on ^klogind\[(.+)\]: User (.+) is not authorized to login to account .+
+ queues trash
+on last message repeated .+ time
+ queues trash
+on ^login\[(.+)\]: ROOT LOGIN .+
+ queues trash
+on ^login: ROOT LOGIN (.+) FROM (.+)
+ queues trash
+on ^named\[(.+)\]: ns_resp: TCP truncated: (.*) .+
+ queues trash
+on ^named\[(.+)\]: Broken pipe
+ queues trash
+on ^named\[(.+)\]: fwritemsg: Broken pipe
+ queues trash
+on ^newsyslog\[(.+)\]: logfile turned over
+ queues trash
+on ^ninit\[(.+)\]: named hosed!
+ queues trash
+on ^ninit\[(.+)\]: ...named restarted.
+ queues trash
+on ^ninit\[(.+)\]: Named hosed! Restarting...
+ queues trash
+on ^popper: (.+): \((.+)\) Incorrect network address \(krb_rd_req\)
+ queues trash
+on ^popper: (.+): \((.+)\) Ticket expired \(krb_rd_req\)
+ queues trash
+on ^popper: (.+): \((.+)\) Time is out of bounds \(krb_rd_req\)
+ queues trash
+on ^popper: (.+): \(.*\) Can't decode authenticator \(krb_rd_req\)
+ queues trash
+on ^popper: (.+): EOF
+ queues trash
+on ^popper: (.+): \((.+)\) Service expired \(kerberos\)
+ queues trash
+on ^popper: (.*): timeout waiting for ticket
+ queues trash
+on ^popper: (.*): timeout waiting for data
+ queues trash
+on ^popper: (.+): auth failed: (.+) vs (.+)
+ queues trash
+on ^popper: (.*): \((.*)\) realm not accepted.
+ queues trash
+on ^popper: (.*): \((.*)\) instance not accepted.
+ queues trash
+on ^popper: Unable to obtain socket and address of client, err = 57
+ queues trash
+on ^popper: (.*): \((.*)\) Generic kerberos error \(kfailure\)
+ queues trash
+on ^quota\[(.+)\]: IOERROR: opening quota file .+: Permission denied
+ queues trash
+on ^mail.local: root: wrong owner \(is 1, should be 0\)
+ queues trash
+on ^sendmail\[(.+)\]: NOQUEUE: SYSERR: .+: line (.+): cannot alias non-local name
+ queues trash
+on ^sendmail\[(.+)\]: third party call from (.+) at (.+)
+ queues trash
+on ^sendmail\[(.+)]: NOQUEUE: SYSERR: getrequests: cannot bind: Address already in use
+ queues trash
+on ^sendmail\[(.+)\]: (.+): collect: premature EOM: Error 0
+ queues trash
+on ^sendmail\[(.+)\]: (.+): collect: premature EOM: Connection reset by (.+)
+ queues trash
+on ^sendmail\[(.+)\]: (.+): SYSERR\(root\): collect: I/O error on connection from
+ queues trash
+on ^sendmail\[(.+)\]: (.+): SYSERR: prescan: too many tokens
+ queues trash
+on ^sendmail\[(.+)\]: cannot get connection
+ queues trash
+on ^sendmail\[(.+)\]: (.+): SYSERR: putoutmsg \((.+)\): error on output channel sending (.*)
+ queues trash
+on ^sendmail\[(.+)\]: (.+): SYSERR: sendall: too many hops
+ queues trash
+on ^sendmail\[(.+)\]: (.+): SYSERR.*: Too many hops .+ \(.+ max\): from (.*)
+ queues trash
+on ^sendmail\[(.+)\]: (.+): (.+): DATA-2 protocol error: 221 Timeout waiting for input
+ queues trash
+on ^snmpdx: community_check\(\) : bad community from (.+)
+ queues trash
+on ^snmpdx: session_open\(\) failed for a pdu received from (.+)
+ queues trash
+on ^snmpdx: Agent snmpd is now OK
+ queues trash
+on ^syslogd: exiting on signal 15
+ queues trash
+on ^tcp_forwarder\[(.+)\]: read: s: Connection reset by peer
+ queues trash
+on ^tftpd\[(.+)\]: connect from: (.+)
+ queues trash
+on ^tftpd\[(.+)\]: (.+) requests (.+)
+ queues trash
+on ^tftpd\[(.+)]\: end session: (.+)
+ queues trash
+on ^unix: afs: Lost contact with file server (.+) in cell .+ .*
+ queues trash
+on ^unix: afs: file server (.+) in cell .+ is back up
+ queues trash
+on ^unix: afs: Lost contact with volume location server (.+) in cell .+
+ queues trash
+on ^unix: afs: Waiting for busy volume (.+) \((.*)\) in cell .+
+ queues trash
+on ^unix: afs: Waiting for busy volume (.+) in cell .+
+ queues trash
+on ^unix: Starting AFS cache scan...
+ queues trash
+on ^unix: Memory cache: Allocating (.+) dcache entries...
+ queues trash
+on ^unix: found (.+) non-empty cache files (.+)\.
+ queues trash
+on ^xntpd\[(.+)\]: time reset \(step\) .+ s
+ queues trash
+
+###
+### Everything else
+###
+
+on ^(.+): %SYS-3-CPUHOG: Task ran for (.+) msec \((.+)\), Process = ARP Input, PC = (.+)
+ queues hourly-mail daily-mail
+on ^(.+): %CLEAR-5-COUNTERS: Clear counter on interface ATM8/0 by vty0 \((.+)\)
+ queues hourly-mail daily-mail
+on ^(.+): %LINEPROTO-5-UPDOWN: Line protocol on Interface .*, changed state to (.*)
+ queues hourly-mail daily-mail
+on ^(.+): %LINK-3-UPDOWN: Interface .*, changed state to (.*)
+ queues hourly-mail daily-mail
+on ^(.+): %AT-1-NOMEM: Could not allocate memory for pdb at line (.+) in .+
+ queues hourly-mail daily-mail
+on ^(.+): -Process= "IP Input", ipl= (.+), pid= (.+)
+ queues hourly-mail daily-mail
+on ^deliver\[(.+)\]: .+ quota file (.+): No space
+ queues hourly-mail daily-mail
+on ^deliver\[(.+)\]: .+: unable to record (.+) of (.+) bytes in quota file (.+)
+ queues hourly-mail daily-mail
+on ^imapd\[(.+)\]: stating header for (.+): No such file or directory
+ queues hourly-mail daily-mail
+on ^imapd\[(.+)]: .*stating (.+): No such file or directory
+ queues hourly-mail daily-mail
+on ^pop3d\[(.+)\]: .+: .+ quota file (.+): No space
+ queues hourly-mail daily-mail
+on ^pop3d\[(.+)\]: .+: unable to record .+ of (.+) bytes in quota (.+)
+ queues hourly-mail daily-mail
+on ^sendmail\[(.+)\]: SYSERR.*: /usr/local/sendmail/etc/aliases.new: line (.+): readaliases
+ queues hourly-mail daily-mail
+on ^sendmail\[(.+)\]: (.+): (.+): SMTP DATA-2 protocol error: 501 Badly structu
+ queues hourly-mail daily-mail
+on ^sendmail\[(.+)\]: (.+): SYSERR(.*): (.+) config error: mail loops back to me
+ queues hourly-mail daily-mail
+on ^sendmail\[(.+)\]: (.+): SYSERR(.*): deliver: mci=(.+) rcode=(.+) errno=(.+) state=(.+)
+ queues hourly-mail daily-mail
+on ^sendmail\[(.+)\]: (.+): SYSERR(.*): timeout writing message to (.+)
+ queues hourly-mail daily-mail
+on ^sendmail\[(.+)\]: (.+): collect: premature EOM: Connection timed out with (.+)
+ queues hourly-mail daily-mail
+on ^sendmail\[(.+)\]: (.+): SYSERR: Cannot open (.+): No such file or directory
+ queues hourly-mail daily-mail
+on ^sendmail\[(.+)\]: (.+): SYSERR: (.+): line (.+): readqf: cannot open (.+): No such file or directory
+ queues hourly-mail daily-mail
+on ^sendmail\[(.+)\]: (.+): SYSERR: putoutmsg \((.+)\): error on output channel sending .*
+ queues hourly-mail daily-mail
+on ^snmpdx: session_open.. failed for a pdu received from (.+)
+ queues hourly-mail daily-mail
+on ^unix: afs: volume location server (.+) in cell .+ is back up
+ queues hourly-mail daily-mail
+on ^unix: afs: Lost contact with file server (.+) in cell .+
+ queues hourly-mail daily-mail
+on ^vmunix: afs: Lost contact with file server (.+) in cell .+
+ queues hourly-mail daily-mail
+on ^vmunix: afs: file server (.+) in cell .+ is back up
+ queues hourly-mail daily-mail
+on .*
+ queues hourly-mail daily-mail
diff --git a/sysutils/oak/files/oak.sh b/sysutils/oak/files/oak.sh
new file mode 100644
index 00000000000..d704f998b53
--- /dev/null
+++ b/sysutils/oak/files/oak.sh
@@ -0,0 +1,17 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# oak - Jason White <jdwhite@jdwhite.org>
+#
+# PROVIDE: oak
+# REQUIRE: DAEMON
+
+. /etc/rc.subr
+
+name="oak"
+rcvar=$name
+command="@PREFIX@/bin/oak"
+command_args="-c @PKG_SYSCONFDIR@/oak.conf"
+required_files="@PKG_SYSCONFDIR@/oak.conf"
+
+load_rc_config $name
+run_rc_command "$1"
diff --git a/sysutils/oak/patches/patch-aa b/sysutils/oak/patches/patch-aa
new file mode 100644
index 00000000000..f1a4ed648e6
--- /dev/null
+++ b/sysutils/oak/patches/patch-aa
@@ -0,0 +1,19 @@
+$NetBSD: patch-aa,v 1.1.1.1 2007/11/03 14:28:21 rillig Exp $
+
+--- Makefile.in 2005-02-27 12:54:53.000000000 -0600
++++ Makefile.in 2006-02-04 14:36:44.000000000 -0600
+@@ -1,3 +1,5 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
+ CC=@CC@
+ CFLAGS=-g -Wall
+ OBJS=action.o matchline.o oak.o queuelist.o fire.o queue.o util.o list.o global.o readconfig.o text.o queue_entry.o string.o
+@@ -7,7 +7,7 @@
+ $(CC) -o oak $(OBJS) $(LIBS)
+
+ install:
+- ./install-sh -c oak /usr/local/bin/
++ ./install-sh -c oak @bindir@/
+
+ clean:
+ $(RM) *~ *.o oak
diff --git a/sysutils/oak/patches/patch-ab b/sysutils/oak/patches/patch-ab
new file mode 100644
index 00000000000..2a38b11f34f
--- /dev/null
+++ b/sysutils/oak/patches/patch-ab
@@ -0,0 +1,22 @@
+$NetBSD: patch-ab,v 1.1.1.1 2007/11/03 14:28:21 rillig Exp $
+
+--- action.c 2005-02-27 12:54:53.000000000 -0600
++++ action.c 2006-02-04 14:40:27.000000000 -0600
+@@ -58,7 +58,7 @@
+
+ if (act->argc<1) return;
+
+- if (!oak_global_is_debug(&g)) {
++ if (!oak_global_is_debug(&g) && !oak_global_is_quit(&g)) {
+ i=fork();
+ if (i) {
+ wait3(NULL, WNOHANG, NULL);
+@@ -117,7 +120,7 @@
+ /* it didn't end, so we'll just take what we got */
+ }
+ } else {
+- strcpy(subject, act->argv[3]);
++ strncpy(subject, act->argv[3], sizeof(subject)-1);
+ }
+
+ file=popen(command, "w");
diff --git a/sysutils/oak/patches/patch-ac b/sysutils/oak/patches/patch-ac
new file mode 100644
index 00000000000..a52c4899f9a
--- /dev/null
+++ b/sysutils/oak/patches/patch-ac
@@ -0,0 +1,22 @@
+$NetBSD: patch-ac,v 1.1.1.1 2007/11/03 14:28:21 rillig Exp $
+
+--- global.c 2005-02-27 12:54:53.000000000 -0600
++++ global.c 2006-02-04 14:38:45.000000000 -0600
+@@ -48,7 +50,7 @@
+
+ void oak_global_set_logfile(oak_global *g, char *filename)
+ {
+- strcpy(g->logfile, filename);
++ strncpy(g->logfile, filename, sizeof(g->logfile)-1);
+ }
+
+ oak_queuelist *oak_global_get_queuelist(oak_global *g)
+@@ -113,7 +115,7 @@
+
+ void oak_global_set_replacestr(oak_global *g, char *in)
+ {
+- strcpy(g->replacestr, in);
++ strncpy(g->replacestr, in, sizeof(g->replacestr)-1);
+ }
+
+ int oak_global_host_is_ok(oak_global *g, char *host)