diff options
author | feld <feld@FreeBSD.org> | 2015-07-12 19:40:07 +0000 |
---|---|---|
committer | feld <feld@FreeBSD.org> | 2015-07-12 19:40:07 +0000 |
commit | 1f0e4436756bf9bd029eceff6d2033706dab6325 (patch) | |
tree | 46cba4787f007e5c3d1004ccceb40b230bf290ca | |
parent | 22edc0ed0053985c2ffbcbf7009440646fe1969c (diff) | |
download | FreeBSD-ports-1f0e4436756bf9bd029eceff6d2033706dab6325.zip FreeBSD-ports-1f0e4436756bf9bd029eceff6d2033706dab6325.tar.gz |
Add ability to produce html files for vuxml entries
This will allow committers to test complex vuxml entries before
submission.
A special thanks to hrs for responding to my plea for this feature
Submitted by: hrs
-rw-r--r-- | security/vuxml/Makefile | 14 | ||||
-rw-r--r-- | security/vuxml/files/common.css | 225 | ||||
-rw-r--r-- | security/vuxml/files/html.xsl | 179 |
3 files changed, 417 insertions, 1 deletions
diff --git a/security/vuxml/Makefile b/security/vuxml/Makefile index 629f885..160d12e 100644 --- a/security/vuxml/Makefile +++ b/security/vuxml/Makefile @@ -96,4 +96,16 @@ tidy: vuln.xml newentry: @${SH} ${FILESDIR}/newentry.sh "${VUXML_FILE}" -.include <bsd.port.mk> +.include <bsd.port.pre.mk> + +.if defined(VID) && !empty(VID) +html: work/${VID}.html +work/${VID}.html: ${FILESDIR}/html.xsl ${FILESDIR}/common.css ${VUXML_FILE} + ${MKDIR} work + xsltproc --stringparam vid "${VID}" \ + --output ${.TARGET} \ + ${FILESDIR}/html.xsl ${VUXML_FILE} + ${INSTALL_DATA} ${FILESDIR}/common.css work +.endif + +.include <bsd.port.post.mk> diff --git a/security/vuxml/files/common.css b/security/vuxml/files/common.css new file mode 100644 index 0000000..0fbcc33 --- /dev/null +++ b/security/vuxml/files/common.css @@ -0,0 +1,225 @@ +/* + * Copyright 2003-2009 Jacques Vidrine and contributors. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + */ +body { + background: #ffffff; + font-family: verdana, "bitstream vera sans", arial, helvetica, sans-serif; +} +h1.title { + color: #208020; +} +h2.section { + color: #208020; +} + +h1.title0 { + margin-bottom: 0em; + color: #208020; +} +p.subtitle { + margin-top: 0em; + color: #208020; + font-size: small; + font-style: italic; + font-weight: bold; +} + +/* The blurb in the upper-right corner. */ +.blurb { + color: #40A040; + font-size: small; + font-style: italic; + border: thin solid #40A040; + text-align: center; + width: 9em; + float: right; + padding: 2px; +} +div.blurb A:link, div.blurb A:visited, div.blurb A:hover { + text-decoration: none; + color: #40A040; +} + +/* The link from the package page to FreshPorts.org. */ +div.freshportslink { + color: #AD0040; + font-size: small; + font-style: italic; + text-align: left; + padding: 0px 2px 2px 2px; +} +div.freshportslink a:link, div.freshportslink a:visited, +div.freshportslink a:hover { + border: thin solid #AD0040; + text-decoration: none; + color: #AD0040; + padding: 2px; +} + +/* The link from the CVE page to cve.mitre.org. */ +div.cvelink { + color: #AD0040; + font-size: small; + font-style: italic; + text-align: left; + padding: 0px 2px 2px 2px; +} +div.cvelink a:link, div.cvelink a:visited, div.cvelink a:hover { + border: thin solid #AD0040; + text-decoration: none; + color: #AD0040; + padding: 2px; +} + +/* Most links are black unless the mouse is over them. */ +A:link, A:visited { + text-decoration: none; + color: #000000; +} +A:hover { + text-decoration: underline; + color: #802020; +} + +/* Some links should be more visible. */ +A:link.vis, A:visited.vis { + text-decoration: none; + color: #0000ef; +} + +/* Links in the ``embedded'' HTML look a bit different. */ +div.embed A:link { + text-decoration: underline; + color: #6b69ff; +} +div.embed A:visited { + text-decoration: underline; + color: #840084; +} +div.embed A:hover { + text-decoration: underline; + color: #ff0000; +} +div.citation A:link { + text-decoration: none; + color: #6b69ff; +} +div.citation A:visited { + text-decoration: none; + color: #840084; +} +div.citation A:hover { + text-decoration: none; + color: #ff0000; +} + +/* Simple list tables */ +table.list { + border: thin solid #000000; +} +table.list thead td { + text-align: center; + background: #000000; + color: #ffffff; +} + +/* Label/content tables */ +td.label { + font-weight: bold; + padding-right: 0.75em; + padding-left: 0.75em; + background-color: #c6d3de; + white-space: nowrap; +} +td.content { + padding-right: 0.75em; + padding-left: 0.75em; + background: #e5ffe5; +} + +/* The navigation bar */ +tbody.nav td { + border: thin solid black; + padding: 3pt; +} + +/* Our common table style */ +table.common thead th { + padding-right: 0.75em; + padding-left: 0.75em; + background-color: #c6d3de; + white-space: nowrap; +} +table.common tbody td { + padding-right: 0.75em; + padding-left: 0.75em; + background: #e5ffe5; +} +table.common tbody td.group { + background: #c5ffc5; + white-space: nowrap; +} + +/* Blockquotes */ +blockquote { + background: #F0F0F0; + border-left: #CCCCCC 0.5em solid; + border-right: #CCCCCC 1px dashed; + border-top: #CCCCCC 1px dashed; + border-bottom: #CCCCCC 1px dashed; +} +div.citation { + font-size: small; + font-style: italic; + text-align: right; +} + +/* Various attributes */ +.package { + font-family: "monaco", "andale mono", "courier new", monospace; +} +.vid { + font-family: "monaco", "andale mono", "courier new", monospace; +} +.copyright { + font-size: small; + font-style: italic; +} +.email { + font-family: "monaco", "andale mono", "courier new", monospace; +} +.hide { + display: none; +} +.note { + font-size: small; + font-style: italic; + color: #801010; +} +.date, .cvename { + white-space: nowrap; +} + diff --git a/security/vuxml/files/html.xsl b/security/vuxml/files/html.xsl new file mode 100644 index 0000000..24c08fe --- /dev/null +++ b/security/vuxml/files/html.xsl @@ -0,0 +1,179 @@ +<?xml version="1.0"?> +<!-- $FreeBSD$ --> +<xsl:stylesheet + version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:vuxml="http://www.vuxml.org/apps/vuxml-1" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:exsl="http://exslt.org/common" + extension-element-prefixes="exsl" + exclude-result-prefixes="xhtml vuxml"> + + <xsl:output method="xml" encoding="utf-8" indent="yes" + doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" + doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/> + + <xsl:param name="vid" select="'none'" /> + + <xsl:template match="/"> + <xsl:apply-templates select="vuxml:vuxml/vuxml:vuln[@vid = $vid]" /> + </xsl:template> + + <xsl:template name="range-spec"> + <xsl:param name="gt" /> + <xsl:param name="ge" /> + <xsl:param name="lt" /> + <xsl:param name="le" /> + <xsl:param name="eq" /> + <xsl:param name="name" /> + + <tr valign="top"> + <td class="version"> + <xsl:choose> + <xsl:when test="$gt != ''"><xsl:value-of select="$gt" /></xsl:when> + <xsl:when test="$ge != ''"><xsl:value-of select="$ge" /></xsl:when> + <xsl:when test="$eq != ''"><xsl:value-of select="$eq" /></xsl:when> + </xsl:choose> + </td> + <td class="operator"> + <xsl:choose> + <xsl:when test="$gt != ''"><</xsl:when> + <xsl:when test="$ge != ''"><=</xsl:when> + <xsl:when test="$eq != ''">=</xsl:when> + </xsl:choose> + </td> + <td class="package"><xsl:element name="a"> + <xsl:attribute name="href"> + <xsl:value-of select="concat('pkg-', $name, '.html')" /> + </xsl:attribute> + <xsl:value-of select="$name" /></xsl:element></td> + <td class="operator"> + <xsl:choose> + <xsl:when test="$lt != ''"><</xsl:when> + <xsl:when test="$le != ''"><=</xsl:when> + </xsl:choose> + </td> + <td class="version"> + <xsl:choose> + <xsl:when test="$lt != ''"><xsl:value-of select="$lt" /></xsl:when> + <xsl:when test="$le != ''"><xsl:value-of select="$le" /></xsl:when> + </xsl:choose> + </td> + </tr> + </xsl:template> + + <xsl:template name="vuln-range"> + <xsl:param name="range" /> + <xsl:param name="name" /> + + <xsl:for-each select="exsl:node-set($range)"> + <xsl:call-template name="range-spec"> + <xsl:with-param name="lt" select="vuxml:lt" /> + <xsl:with-param name="le" select="vuxml:le" /> + <xsl:with-param name="gt" select="vuxml:gt" /> + <xsl:with-param name="ge" select="vuxml:ge" /> + <xsl:with-param name="name" select="$name" /> + </xsl:call-template> + </xsl:for-each> + </xsl:template> + + <xsl:template name="stats" xmlns="http://www.w3.org/1999/xhtml"> + <xsl:param name="id" /> + <xsl:param name="label" /> + <xsl:param name="content" /> + + <tr valign="top"> + <td class="label"><xsl:value-of select="$label" /></td> + <td class="content"> + <xsl:element name="span"> + <xsl:attribute name="class"><xsl:value-of select="$id" /></xsl:attribute> + <xsl:value-of select="$content" /></xsl:element> + </td> + </tr> + </xsl:template> + + <xsl:template match="vuxml:vuln"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title><xsl:value-of select="vuxml:topic" /></title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8;" /> + <link rel="stylesheet" type="text/css" href="common.css" /> + </head> + + <body> + <h1 class="title"><xsl:value-of select="vuxml:topic" /></h1> + + <table cellspacing="12"> + <tr valign="top"> + <td><table class="list"> + <thead><tr><td colspan="5">Affected packages</td></tr></thead> + <tbody> + <xsl:for-each select="vuxml:affects/vuxml:package"> + <xsl:for-each select="vuxml:name"> + <xsl:call-template name="vuln-range"> + <xsl:with-param name="range" select="../vuxml:range" /> + <xsl:with-param name="name" select="." /> + </xsl:call-template> + </xsl:for-each> + </xsl:for-each> + </tbody> + </table></td></tr> + </table> + + <h2 class="section">Details</h2> + + <table class="stats"> + <xsl:call-template name="stats"> + <xsl:with-param name="id" select="'vid'" /> + <xsl:with-param name="label" select="'VuXML ID'" /> + <xsl:with-param name="content" select="$vid" /> + </xsl:call-template> + + <xsl:for-each select=" + vuxml:dates/vuxml:discovery | + vuxml:dates/vuxml:entry | + vuxml:dates/vuxml:modified"> + <xsl:call-template name="stats"> + <xsl:with-param name="id" select="name()" /> + <xsl:with-param name="label" + select="concat(translate(substring(name(), 1, 1), + 'abcdefghijllmnopqrstuvwxyz', + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), + substring(name(), 2))" /> + <xsl:with-param name="content" select="." /> + </xsl:call-template> + </xsl:for-each> + </table> + + <div class="embed"> + <xsl:for-each select="vuxml:description/xhtml:body"> + <xsl:copy-of select="node()" /> + </xsl:for-each> + </div> + + <h2 class="section">References</h2> + <table class="reftab"> + <xsl:for-each select="vuxml:references/vuxml:cvename"> + <tr valign="top"> + <td class="label">CVE Name</td> + <td class="content"><xsl:element name="a"> + <xsl:attribute name="href"><xsl:value-of select="concat(., '.html')" /></xsl:attribute> + <xsl:value-of select="." /> + </xsl:element></td> + </tr> + </xsl:for-each> + <xsl:for-each select="vuxml:references/vuxml:url"> + <tr valign="top"> + <td class="label">URL</td> + <td class="content"><xsl:element name="a"> + <xsl:attribute name="href"><xsl:value-of select="." /></xsl:attribute> + <xsl:value-of select="." /> + </xsl:element> + </td> + </tr> + </xsl:for-each> + </table> + </body> + </html> + </xsl:template> +</xsl:stylesheet> |