#!/bin/sh -e
#
# Copyright (c) 2004 Oliver Eikemeier. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions of source code must retain the above copyright notice
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the author nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# $FreeBSD: ports/ports-mgmt/portaudit-db/files/packaudit.sh,v 1.8 2007/02/19 12:37:15 remko Exp $
#
AWK=/usr/bin/awk
BASENAME=/usr/bin/basename
CAT=/bin/cat
DATE=/bin/date
ENV=/usr/bin/env
MD5=/sbin/md5
MKDIR="/bin/mkdir -p"
MKTEMP=/usr/bin/mktemp
RM=/bin/rm
SED=/usr/bin/sed
TAR=/usr/bin/tar
XSLTPROC=/usr/local/bin/xsltproc
PORTSDIR="${PORTSDIR:-/usr/ports}"
VUXMLDIR="${VUXMLDIR:-$PORTSDIR/security/vuxml}"
PORTAUDITDBDIR="${PORTAUDITDBDIR:-$PORTSDIR/ports-mgmt/portaudit-db}"
DATABASEDIR="${DATABASEDIR:-/var/db/portaudit}"
STYLESHEET="/usr/local/share/portaudit-db/vuxml2portaudit.xslt"
PUBLIC_HTML="${PUBLIC_HTML:-$HOME/public_html/portaudit}"
HTMLSHEET="/usr/local/share/portaudit-db/vuxml2html.xslt"
BASEURL="${BASEURL:-http://www.freebsd.org/ports/portaudit/}"
PORTAUDIT2VUXML="/usr/local/share/portaudit-db/portaudit2vuxml.awk"
[ -d "$DATABASEDIR" ] || $MKDIR "$DATABASEDIR"
if [ ! -w "$DATABASEDIR" ]; then
echo "$DATABASEDIR is not writable by you, exiting."
exit 1
fi
TMPNAME=`$BASENAME "$0"`
VULVER=`$SED -En -e '/^.*\\$FreeBSD\: [^$ ]+,v ([0-9]+(\.[0-9]+)+) [^$]+\\$.*$/{s//\1/p;q;}' "$VUXMLDIR/vuln.xml"`
VULURL="http://cvsweb.freebsd.org/ports/security/vuxml/vuln.xml?rev=$VULVER"
[ -r "/usr/local/etc/packaudit.conf" ] && . "/usr/local/etc/packaudit.conf"
if [ -d "$PUBLIC_HTML" -a -w "$PUBLIC_HTML" ]; then
VULNMD5=`$CAT "$VUXMLDIR/vuln.xml" "$PORTAUDITDBDIR/database/portaudit.xml" "$PORTAUDITDBDIR/database/portaudit.txt" | $MD5`
if [ -f "$PUBLIC_HTML/portaudit.md5" ]; then
VULNMD5_OLD=`$CAT "$PUBLIC_HTML/portaudit.md5"`
fi
if [ "$VULNMD5" != "$VULNMD5_OLD" ]; then
echo -n "$VULNMD5" > "$PUBLIC_HTML/portaudit.md5"
TMPXML=`$MKTEMP -t "$TMPNAME.$$"` || exit 1
$PORTAUDIT2VUXML "$PORTAUDITDBDIR/database/portaudit.txt" "$PORTAUDITDBDIR/database/portaudit.xml" > "$TMPXML"
$XSLTPROC $XSLTPROC_EXTRA_ARGS --stringparam vulurl "$VULURL" --stringparam extradoc "$TMPXML" \
-o "$PUBLIC_HTML/" "$HTMLSHEET" "$VUXMLDIR/vuln.xml"
$RM "$TMPXML"
fi
fi
TMPDIR=`$MKTEMP -d -t "$TMPNAME.$$"` || exit 1
TESTPORT="vulnerability-test-port>=2000<`$DATE -u +%Y.%m.%d`"
TESTURL="http://cvsweb.freebsd.org/ports/security/vulnerability-test-port/"
TESTREASON="Not vulnerable, just a test port (database: `$DATE -u +%Y-%m-%d`)"
XLIST_FILE="$PORTAUDITDBDIR/database/portaudit.xlist"
cd "$TMPDIR" || exit 1
{
$DATE -u "+#CREATED: %Y-%m-%d %H:%M:%S"
echo "# Created by packaudit 0.2.3"
echo "$TESTPORT|$TESTURL|$TESTREASON"
echo "# Please refer to the original document for copyright information:"
echo "# $VULURL"
$XSLTPROC $XSLTPROC_EXTRA_ARGS --stringparam baseurl "$BASEURL" "$STYLESHEET" "$VUXMLDIR/vuln.xml" \
| $AWK -F\| -v XLIST_FILE="$XLIST_FILE" '
BEGIN {
while((getline < XLIST_FILE) > 0)
if(!/^(#|$)/)
ignore[$1]=1
}
/^(#|$)/ || !($4 in ignore) {
print
}
'
echo "# This part is in the public domain"
$XSLTPROC $XSLTPROC_EXTRA_ARGS --stringparam baseurl "$BASEURL" "$STYLESHEET" "$PORTAUDITDBDIR/database/portaudit.xml"
$AWK -F\| '
/^(#|$)/ {
print
next
}
{
if ($4)
print $1 FS "'"$BASEURL"'" $4 ".html" FS $3 FS $4
else
print
}
' "$PORTAUDITDBDIR/database/portaudit.txt"
} | $AWK -F\| -v XLIST_FILE="$XLIST_FILE" '
/^(#|$)/ {
print
next
}
{
print $1 "|" $2 "|" $3
}
' > auditfile
echo "#CHECKSUM: MD5 `$MD5 < auditfile`" >> auditfile
$TAR -jcf "$DATABASEDIR/auditfile.tbz" auditfile
cd
$RM -Rf "$TMPDIR"
syntax highlighted by Code2HTML, v. 0.9.1