home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2006 June / PCpro_2006_06.ISO / files / mstools / MBaslineSASetup-EN.msi / Data.Cab / printreport.xsl < prev    next >
Encoding:
Extensible Markup Language  |  2005-06-29  |  26.6 KB  |  721 lines

  1. <?xml version="1.0"?> 
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3.  
  4.     <xsl:variable name="ScoreLookup">
  5.       <c score="0" url="././././Graphics/dash.gif" alttext="Check Not Performed"/>
  6.       <c score="1" url="././././Graphics/excl_red.gif" alttext="Unable to scan"/>
  7.       <c score="2" url="././././Graphics/x_red.gif" alttext="Check failed (critical)"/>
  8.       <c score="3" url="././././Graphics/x_gold.gif" alttext="Check failed (non-critical)"/>
  9.       <c score="4" url="././././Graphics/astrx.gif" alttext="Best practice"/>
  10.       <c score="5" url="././././Graphics/chek_grn.gif" alttext="Check passed"/>
  11.       <c score="6" url="././././Graphics/dash.gif" alttext="Check not performed"/>
  12.       <c score="7" url="././././Graphics/info.gif" alttext="Additional information"/>
  13.       <c score="8" url="././././Graphics/star_blu.gif" alttext="Not approved"/>
  14.     </xsl:variable>
  15.     
  16.     <xsl:variable name="Assessment">
  17.       <c score="1" text="Incomplete Scan" longtext="Could not complete one or more requested checks."/>
  18.       <c score="2" text="Severe Risk" longtext="One or more critical checks failed."/>
  19.       <c score="3" text="Potential Risk" longtext="One or more non-critical checks failed."/>
  20.       <c score="4" text="Security FYIs" longtext=""/>
  21.       <c score="5" text="Strong Security" longtext="The selected checks were passed."/>
  22.       <c score="8" text="Security FYIs" longtext=""/>
  23.     </xsl:variable>
  24.  
  25.     <xsl:variable name="SeverityLookup">
  26.         <c value="4" text="Critical"/>
  27.         <c value="3" text="Important"/>
  28.         <c value="2" text="Moderate"/>
  29.         <c value="1" text="Low"/>
  30.         <c value="0" text=""/>
  31.     </xsl:variable>
  32.  
  33.     <xsl:variable name="FileName">FileNameHere</xsl:variable>
  34.     
  35.         <xsl:template match="SecScan">
  36.             <xsl:param name="assess" select="@Grade"/>    
  37.             <table>
  38.             <tr>
  39.                 <td class="reportsubheader" width="140">Computer name:</td>
  40.                 <td>
  41.                     <xsl:choose>
  42.                         <xsl:when test="@DisplayName">
  43.                             <xsl:value-of select="@DisplayName"/>
  44.                         </xsl:when>
  45.                         <xsl:otherwise>
  46.                             <xsl:value-of select="@Domain"/>\<xsl:value-of select="@Machine"/>
  47.                         </xsl:otherwise>
  48.                     </xsl:choose>
  49.                 </td>
  50.             </tr>
  51.             <tr>
  52.                 <td class="reportsubheader" width="140">IP address:</td>
  53.                 <td><xsl:value-of select="@IP"/></td>
  54.             </tr>
  55.             <tr>
  56.                 <td class="reportsubheader" width="140">Security report name:</td>
  57.                 <td><xsl:value-of select="$FileName" /></td>
  58.             </tr>
  59.             <xsl:if test="@SUSServer and @SUSServer != ''">
  60.                 <tr>
  61.                     <td class="reportsubheader" width="140">Update Services server:</td>
  62.                     <td><xsl:value-of select="@SUSServer" /></td>
  63.                 </tr>
  64.             </xsl:if>
  65.             <tr>
  66.                 <td class="reportsubheader" width="140">Scan date:</td>
  67.                 <td><xsl:value-of select="@LDate"/></td>
  68.             </tr>
  69.             <xsl:choose>
  70.             <xsl:when test="@HotfixDataVersion">
  71.                   <tr>
  72.                     <td class="reportsubheader" width="140">Catalog synchronization date:</td>
  73.                     <td><xsl:value-of select="@HotfixDataVersion"/>
  74.                         <xsl:if test="NewerVersions/@XmlVer"><b>  ** New security updates are available; rescan to use security update database version <xsl:value-of select="NewerVersions/@XmlVer"/> **</b></xsl:if>
  75.                     </td>
  76.                 </tr>
  77.             </xsl:when>
  78.             </xsl:choose>    
  79.             <xsl:choose>
  80.             <xsl:when test="@WUSSource and @WUSSource != ''">
  81.                   <tr>
  82.                     <td class="reportsubheader" width="140">Security update catalog:</td>
  83.                     <td><xsl:value-of select="@WUSSource"/>
  84.                     </td>
  85.                 </tr>
  86.             </xsl:when>
  87.             </xsl:choose>    
  88.  
  89.             <xsl:for-each select="//Check[@DataVersionName and @DataVersion]">
  90.                   <tr>
  91.                     <td class="reportsubheader" width="140"><xsl:value-of select="@DataVersionName"/></td>
  92.                     <td><xsl:value-of select="@DataVersion"/></td>
  93.                 </tr>
  94.             </xsl:for-each>
  95.  
  96.             <tr>
  97.                 <td class="reportsubheader" width="140">Security assessment:</td>
  98.                 <td><xsl:value-of select="document('')/*/xsl:variable[@name='Assessment']/c[@score=$assess]/@text"/></td>
  99.             </tr>
  100.             </table>
  101.             
  102.             
  103.             <xsl:choose>
  104.             <xsl:when test="Check[@Type='5']">
  105.                 <br />
  106.                 <div class="reportheader">Security Updates</div>
  107.                 <xsl:choose>
  108.                 <xsl:when test="Check[@Type='5'][@Cat='1']">
  109.                     <br />
  110.                     <table width="100%" style="MARGIN-BOTTOM: 20px;" border="0" cellpadding="0" cellspacing="0">
  111.                         <tr class="ReportListHeader">
  112.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  113.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  114.                             <td><nobr>Result</nobr></td>
  115.                         </tr>
  116.                         <xsl:for-each select=".">
  117.                             <xsl:apply-templates select="Check[@ID='500' and @Type='5'][@Cat='1']" mode="wus">
  118.                                 <xsl:sort order="sortorder" select="sortfield"/>
  119.                                 <xsl:sort select="@Rank"/>
  120.                             </xsl:apply-templates>
  121.                             <xsl:apply-templates select="Check[@ID!='500' and @Type='5'][@Cat='1']">
  122.                                 <xsl:sort order="sortorder" select="sortfield"/>
  123.                                 <xsl:sort select="@Rank"/>
  124.                             </xsl:apply-templates>
  125.                         </xsl:for-each>
  126.                     </table>            
  127.                 </xsl:when>
  128.                 </xsl:choose>
  129.             </xsl:when>
  130.             </xsl:choose>
  131.             
  132.             
  133.             <xsl:choose>
  134.             <xsl:when test="Check[@Type='1']">
  135.                 <br />
  136.                 <div class="reportheader">Windows Scan Results</div>
  137.                 <xsl:choose>
  138.                 <xsl:when test="Check[@Type='1'][@Cat='1']">
  139.                     <br />
  140.                     <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Administrative Vulnerabilities</div>
  141.                     <br />
  142.                     <table width="100%" style="MARGIN-BOTTOM: 20px;" border="0" cellpadding="0" cellspacing="0">
  143.                         <tr class="ReportListHeader">
  144.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  145.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  146.                             <td><nobr>Result</nobr></td>
  147.                         </tr>
  148.                         <xsl:for-each select=".">
  149.                             <xsl:apply-templates select="Check[@Type='1'][@Cat='1']">
  150.                                 <xsl:sort order="sortorder" select="sortfield"/>
  151.                             </xsl:apply-templates>
  152.                         </xsl:for-each>
  153.                     </table>            
  154.                 </xsl:when>
  155.                 </xsl:choose>
  156.                 <xsl:choose>
  157.                 <xsl:when test="Check[@Type='1'][@Cat='2']">
  158.                     <br />
  159.                     <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Additional System Information</div>
  160.                     <br />
  161.                     <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  162.                         <tr class="ReportListHeader">
  163.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  164.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  165.                             <td><nobr>Result</nobr></td>
  166.                         </tr>
  167.                         <xsl:for-each select=".">
  168.                             <xsl:apply-templates select="Check[@Type='1'][@Cat='2']">
  169.                                 <xsl:sort order="sortorder" select="sortfield"/>
  170.                             </xsl:apply-templates>
  171.                         </xsl:for-each>
  172.                     </table>
  173.                 </xsl:when>
  174.                 </xsl:choose>
  175.             </xsl:when>
  176.             </xsl:choose>
  177.  
  178.             <xsl:choose>
  179.             <xsl:when test="Check[@Type='3']">    
  180.                 <br />
  181.                 <div class="reportheader">Internet Information Services (IIS) Scan Results</div>
  182.                 <xsl:choose>
  183.                 <xsl:when test="Check[@Type='3'][@Cat='1']">
  184.                     <br />
  185.                     <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Administrative Vulnerabilities</div>
  186.                     <br />
  187.                     <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  188.                         <tr class="ReportListHeader">
  189.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  190.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  191.                             <td><nobr>Result</nobr></td>
  192.                         </tr>
  193.                         <xsl:for-each select=".">
  194.                             <xsl:apply-templates select="Check[@Type='3'][@Cat='1']">
  195.                                 <xsl:sort order="sortorder" select="sortfield"/>
  196.                             </xsl:apply-templates>
  197.                         </xsl:for-each>
  198.                     </table>            
  199.                 </xsl:when>
  200.                 </xsl:choose>
  201.                 <xsl:choose>
  202.                 <xsl:when test="Check[@Type='3'][@Cat='2']">
  203.                     <br />
  204.                     <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Additional System Information</div>
  205.                     <br />
  206.                     <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  207.                         <tr class="ReportListHeader">
  208.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  209.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  210.                             <td><nobr>Result</nobr></td>
  211.                         </tr>
  212.                         <xsl:for-each select=".">
  213.                             <xsl:apply-templates select="Check[@Type='3'][@Cat='2']">
  214.                                 <xsl:sort order="sortorder" select="sortfield"/>
  215.                             </xsl:apply-templates>
  216.                         </xsl:for-each>
  217.                     </table>
  218.                 </xsl:when>
  219.                 </xsl:choose>
  220.                 <xsl:choose>
  221.                 <xsl:when test="Check[@Type='3'][@Cat='4']">
  222.                     <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  223.                         <tr class="ReportListHeader">
  224.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  225.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  226.                             <td><nobr>Result</nobr></td>
  227.                         </tr>
  228.                         <xsl:for-each select=".">
  229.                             <xsl:apply-templates select="Check[@Type='3'][@Cat='4']">
  230.                                 <xsl:sort order="sortorder" select="sortfield"/>
  231.                             </xsl:apply-templates>
  232.                         </xsl:for-each>
  233.                     </table>
  234.                 </xsl:when>
  235.                 </xsl:choose>
  236.             </xsl:when>
  237.             </xsl:choose>
  238.             
  239.  
  240.             <!-- One tag per SQL Instance, MBSA V1.1 and later -->
  241.             <xsl:choose>
  242.                 <xsl:when test="SQLInstance">
  243.                     <xsl:for-each select=".">
  244.                         <xsl:apply-templates select="SQLInstance"/>
  245.                     </xsl:for-each>
  246.                 </xsl:when>
  247.             </xsl:choose>
  248.  
  249.             <xsl:choose>
  250.             <xsl:when test="Check[@Type='2']">    
  251.                 <br />
  252.                 <div class="reportheader">SQL Server Scan Results</div>
  253.                 <xsl:choose>
  254.                 <xsl:when test="Check[@Type='2'][@Cat='1']">
  255.                     <br />
  256.                     <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Administrative Vulnerabilities</div>
  257.                     <br />
  258.                     <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  259.                         <tr class="ReportListHeader">
  260.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  261.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  262.                             <td><nobr>Result</nobr></td>
  263.                         </tr>
  264.                         <xsl:for-each select=".">
  265.                             <xsl:apply-templates select="Check[@Type='2'][@Cat='1']">
  266.                                 <xsl:sort order="sortorder" select="sortfield"/>
  267.                             </xsl:apply-templates>
  268.                         </xsl:for-each>
  269.                     </table>            
  270.                 </xsl:when>
  271.                 </xsl:choose>
  272.                 <xsl:choose>
  273.                 <xsl:when test="Check[@Type='2'][@Cat='2']">
  274.                     <br />
  275.                     <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Additional System Information</div>
  276.                     <br />
  277.                     <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  278.                         <tr class="ReportListHeader">
  279.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  280.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  281.                             <td><nobr>Result</nobr></td>
  282.                         </tr>
  283.                         <xsl:for-each select=".">
  284.                             <xsl:apply-templates select="Check[@Type='2'][@Cat='2']">
  285.                                 <xsl:sort order="sortorder" select="sortfield"/>
  286.                             </xsl:apply-templates>
  287.                         </xsl:for-each>
  288.                     </table>
  289.                 </xsl:when>
  290.                 </xsl:choose>
  291.                 <xsl:choose>
  292.                 <xsl:when test="Check[@Type='2'][@Cat='4']">
  293.                     <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  294.                         <tr class="ReportListHeader">
  295.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  296.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  297.                             <td><nobr>Result</nobr></td>
  298.                         </tr>
  299.                         <xsl:for-each select=".">
  300.                             <xsl:apply-templates select="Check[@Type='2'][@Cat='4']">
  301.                                 <xsl:sort order="sortorder" select="sortfield"/>
  302.                             </xsl:apply-templates>
  303.                         </xsl:for-each>
  304.                     </table>
  305.                 </xsl:when>
  306.                 </xsl:choose>
  307.             </xsl:when>
  308.             </xsl:choose>
  309.             
  310.             <xsl:choose>
  311.             <xsl:when test="Check[@Type='4']">    
  312.                 <br />
  313.                 <div class="reportheader">Desktop Application Scan Results</div>
  314.                 <xsl:choose>
  315.                 <xsl:when test="Check[@Type='4'][@Cat='1']">
  316.                     <br />
  317.                     <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Administrative Vulnerabilities</div>
  318.                     <br />
  319.                     <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  320.                         <tr class="ReportListHeader">
  321.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  322.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  323.                             <td><nobr>Result</nobr></td>
  324.                         </tr>
  325.                         <xsl:for-each select=".">
  326.                             <xsl:apply-templates select="Check[@Type='4'][@Cat='1']">
  327.                                 <xsl:sort order="sortorder" select="sortfield"/>
  328.                             </xsl:apply-templates>
  329.                         </xsl:for-each>
  330.                     </table>            
  331.                 </xsl:when>
  332.                 </xsl:choose>
  333.                 <xsl:choose>
  334.                 <xsl:when test="Check[@Type='4'][@Cat='2']">
  335.                     <br />
  336.                     <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Additional System Information</div>
  337.                     <br />
  338.                     <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  339.                         <tr class="ReportListHeader">
  340.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  341.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  342.                             <td><nobr>Result</nobr></td>
  343.                         </tr>
  344.                         <xsl:for-each select=".">
  345.                             <xsl:apply-templates select="Check[@Type='4'][@Cat='2']">
  346.                                 <xsl:sort order="sortorder" select="sortfield"/>
  347.                             </xsl:apply-templates>
  348.                         </xsl:for-each>
  349.                     </table>
  350.                 </xsl:when>
  351.                 </xsl:choose>
  352.             </xsl:when>
  353.             </xsl:choose>
  354.             
  355.         </xsl:template>
  356.     
  357.     <xsl:template match="Check">
  358.         <xsl:param name="score" select="@Grade"/>
  359.         
  360.             <xsl:variable name="bgcolor">
  361.             <xsl:choose>
  362.                 <xsl:when test="(position() mod 2) = 1">#8caae6</xsl:when>
  363.                 <xsl:otherwise>#CECFF6</xsl:otherwise>
  364.             </xsl:choose>
  365.             </xsl:variable>
  366.             <tr bgcolor="{$bgcolor}">
  367.                 <td align="center" valign="top" style="padding-bottom: 10px;">
  368.                     <xsl:choose>
  369.                       <xsl:when test="@Cat='2'">
  370.                         <xsl:choose>
  371.                           <xsl:when test="@ID='121'">
  372.                             <img alt="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=7]/@alttext}" src="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=7]/@url}" />
  373.                            </xsl:when>
  374.                           <xsl:when test="@ID='10121'">
  375.                             <img alt="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=7]/@alttext}" src="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=7]/@url}" />
  376.                            </xsl:when>
  377.                           <xsl:when test="@ID='101'">
  378.                             <img alt="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=$score]/@alttext}" src="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=$score]/@url}" />
  379.                            </xsl:when>
  380.                           <xsl:when test="@ID='10101'">
  381.                             <img alt="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=7]/@alttext}" src="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=7]/@url}" />
  382.                            </xsl:when>
  383.                           <xsl:otherwise>
  384.                             <img alt="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=4]/@alttext}" src="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=4]/@url}" />
  385.                           </xsl:otherwise>
  386.                         </xsl:choose>
  387.                       </xsl:when>
  388.                       <xsl:otherwise>
  389.                         <img alt="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=$score]/@alttext}" src="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=$score]/@url}" />    
  390.                       </xsl:otherwise>
  391.                     </xsl:choose>    
  392.                 </td>
  393.                 <td width="75" style="padding-bottom: 10px;"><xsl:value-of select="@Name"/></td>
  394.                 <td style="padding-bottom: 10px;"> 
  395.                     <TABLE width="100%">  
  396.                       <TR>
  397.                         <TD align="left" colspan="3"><xsl:value-of select="Advice"/></TD>
  398.                       </TR>
  399.                         <xsl:choose>
  400.                           <xsl:when test="Detail">
  401.                             <TR>
  402.                             <TD>
  403.                             <table width="100%" border="0" cellpadding="0" cellspacing="0" style="padding-left: 10px; padding-right: 10px;">
  404.                                 <tr class="ReportListHeader">
  405.                                     <xsl:for-each select="Detail/Head/Col">
  406.                                         <td Nowrap="true">
  407.                                         <xsl:value-of select="."/>  
  408.                                         </td>
  409.                                     </xsl:for-each>
  410.                                 </tr>
  411.                                 <xsl:for-each select="Detail">
  412.                                     <xsl:apply-templates select="Row">
  413.                                     </xsl:apply-templates>
  414.                                 </xsl:for-each>
  415.                             </table>
  416.                             </TD>
  417.                             </TR>
  418.                           </xsl:when>
  419.                         </xsl:choose>    
  420.                     </TABLE>
  421.                     <br/>
  422.                 </td>
  423.             </tr>
  424.     </xsl:template>
  425.     
  426.     <xsl:template match="Row">
  427.         <xsl:param name="score" select="@Grade"/>
  428.             <tr>
  429.                 <xsl:for-each select="Col">
  430.                 <td valign="top" style="padding-bottom: 5px;">
  431.                  <xsl:choose>
  432.                   <xsl:when test="@URL and @URL != '' and @URL != ' '">
  433.                     <A href="{@URL}"><xsl:value-of select="."/></A>
  434.                   </xsl:when>
  435.                   <xsl:otherwise>
  436.                     <xsl:value-of select="."/>
  437.                   </xsl:otherwise>
  438.                 </xsl:choose>    
  439.  
  440.                 <xsl:if test="@REQUIREDNAME">
  441.                     <br/><div class="halignlikea">This update requires
  442.                     <xsl:value-of select="@REQUIREDNAME"/>
  443.                     to be installed first.</div>
  444.                 </xsl:if>
  445.  
  446.                 </td>
  447.                 </xsl:for-each>
  448.             </tr>
  449.             <xsl:apply-templates select="SETTINGS">
  450.             </xsl:apply-templates>
  451.     </xsl:template>
  452.     
  453.     <xsl:template match="SETTINGS">
  454.         <xsl:param name="numCols" select="count(Head/Col)"/>
  455.             <tr>
  456.                 <td colspan="4">
  457.                     <table width="100%" border="0" cellpadding="0" cellspacing="0" style="padding-left: 10px; padding-right: 10px;">
  458.                         <tr class="ReportListHeader">
  459.                             <xsl:for-each select="Head/Col">
  460.                                 <td Nowrap="true">
  461.                                     <B><xsl:value-of select="."/></B>
  462.                                 </td>
  463.                             </xsl:for-each>
  464.                         </tr>
  465.                         <xsl:apply-templates select="Row">
  466.                         </xsl:apply-templates>
  467.                     </table>
  468.                 </td>
  469.             </tr>
  470.     </xsl:template>
  471.  
  472.  
  473.     <!-- SQL Instance section -->
  474.     <xsl:template match="SQLInstance">
  475.         <br />
  476.         <div class="reportheader">SQL Server Scan Results: Instance <xsl:value-of select="@Name"/></div>
  477.         <xsl:choose>
  478.         <xsl:when test="Check[@Type='2'][@Cat='1']">
  479.             <br />
  480.             <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Administrative Vulnerabilities</div>
  481.             <br />
  482.             <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  483.                 <tr class="ReportListHeader">
  484.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  485.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  486.                             <td><nobr>Result</nobr></td>
  487.                 </tr>
  488.                 <xsl:for-each select=".">
  489.                     <xsl:apply-templates select="Check[@Type='2'][@Cat='1']">
  490.                         <xsl:sort order="sortorder" select="sortfield"/>
  491.                     </xsl:apply-templates>
  492.                 </xsl:for-each>
  493.             </table>            
  494.         </xsl:when>
  495.         </xsl:choose>
  496.         <xsl:choose>
  497.         <xsl:when test="Check[@Type='2'][@Cat='2']">
  498.             <br />
  499.             <div class="reportsubheader" style="MARGIN-LEFT: 5px;">Additional System Information</div>
  500.             <br />
  501.             <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  502.                 <tr class="ReportListHeader">
  503.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  504.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  505.                             <td><nobr>Result</nobr></td>
  506.                 </tr>
  507.                 <xsl:for-each select=".">
  508.                     <xsl:apply-templates select="Check[@Type='2'][@Cat='2']">
  509.                         <xsl:sort order="sortorder" select="sortfield"/>
  510.                     </xsl:apply-templates>
  511.                 </xsl:for-each>
  512.             </table>
  513.         </xsl:when>
  514.         </xsl:choose>
  515.         <xsl:choose>
  516.         <xsl:when test="Check[@Type='2'][@Cat='4']">
  517.             <table width="100%" style="MARGIN-BOTTOM: 20px" border="0" cellpadding="0" cellspacing="0">
  518.                 <tr class="ReportListHeader">
  519.                             <td style="width:40" align="center"><nobr>  Score  </nobr></td>
  520.                             <td style="width:80" align="left"><nobr>Issue</nobr></td>
  521.                             <td><nobr>Result</nobr></td>
  522.                 </tr>
  523.                 <xsl:for-each select=".">
  524.                     <xsl:apply-templates select="Check[@Type='2'][@Cat='4']">
  525.                         <xsl:sort order="sortorder" select="sortfield"/>
  526.                     </xsl:apply-templates>
  527.                 </xsl:for-each>
  528.             </table>
  529.         </xsl:when>
  530.         </xsl:choose>
  531.     </xsl:template>
  532.             
  533.     <xsl:template match="Check" mode="wus">
  534.             <xsl:param name="score" select="@Grade"/>
  535.             <xsl:variable name="bgcolor">
  536.             <xsl:choose>
  537.                 <xsl:when test="(position() mod 2) = 1">#8caae6</xsl:when>
  538.                 <xsl:otherwise>#CECFF6</xsl:otherwise>
  539.             </xsl:choose>
  540.             </xsl:variable>
  541.             <tr bgcolor="{$bgcolor}">
  542.                 <td align="center" valign="top" style="padding-bottom: 10px;">
  543.                     <img alt="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=$score]/@alttext}" src="{document('')/*/xsl:variable[@name='ScoreLookup']/c[@score=$score]/@url}" />    
  544.                 </td>
  545.                 <td style="WIDTH:75" align="left" valign="top"><xsl:value-of select="@Name"/></td>
  546.                 <td> 
  547.                     <TABLE width="100%">  
  548.                       <TR>
  549.                         <TD align="left" colspan="3"><xsl:value-of select="Advice"/></TD>
  550.                       </TR>
  551.                         <xsl:choose>
  552.                           <xsl:when test="Detail">
  553.                             <TR>
  554.                             <TD>
  555.                                 <xsl:apply-templates select="." mode="wus2"/>
  556.                             </TD>
  557.                             </TR>
  558.                           </xsl:when>
  559.                         </xsl:choose>    
  560.                     </TABLE>
  561.                 </td>
  562.             </tr>
  563.     </xsl:template>
  564.  
  565.     <xsl:template match="Check" mode="wus2">
  566.             <table id="TableID" width="100%" border="0" cellpadding="0" cellspacing="5" class="DetailsTable">
  567.     
  568.                 <!-- 1st section: Missing critical updates -->
  569.                 <xsl:if test="count(Detail/UpdateData[(@IsInstalled='false' or @RestartRequired='true') and @Type=1]) > 0">
  570.                     <tr><td colspan="5" class="tdText">
  571.                         <b>Security Updates</b>
  572.                     </td></tr>
  573.                                     
  574.                     <tr >
  575.                         <td class="DetailHeader" width="32">Score</td>
  576.                         <td class="DetailHeader" width="32">ID</td>
  577.                         <td class="DetailHeader" width="100%">Description</td>
  578.                         <td class="DetailHeader" width="32">Maximum Severity</td>
  579.                     </tr>
  580.                         
  581.                     <xsl:apply-templates select="Detail/UpdateData[(@IsInstalled='false' or @RestartRequired='true') and @Type=1]" mode="missing"/>
  582.                 </xsl:if>
  583.                 
  584.                 <!-- 2nd section: Missing rollups and service packs -->
  585.                 <xsl:if test="count(Detail/UpdateData[(@IsInstalled='false' or @RestartRequired='true') and @Type!=1]) > 0">
  586.                     <tr><td colspan="5" class="tdText">
  587.                         <b>Update Rollups and Service Packs</b>
  588.                     </td></tr>
  589.                                     
  590.                     <tr>
  591.                         <td class="DetailHeader" width="32">Score</td>
  592.                         <td class="DetailHeader" width="32">ID</td>
  593.                         <td class="DetailHeader" width="100%" colspan="2">Description</td>
  594.                     </tr>
  595.                         
  596.                     <xsl:apply-templates select="Detail/UpdateData[(@IsInstalled='false' or @RestartRequired='true') and @Type!=1]" mode="missing"/>
  597.                 </xsl:if>
  598.  
  599.                 <!-- 3rd section: Installed items -->
  600.                 <xsl:if test="count(Detail/UpdateData[@IsInstalled='true' and (not(@RestartRequired) or @RestartRequired='false')]) > 0">
  601.                     <tr><td colspan="5" class="tdText">
  602.                         <b>Current Update Compliance</b>
  603.                     </td></tr>
  604.                                     
  605.                     <tr>
  606.                         <td class="DetailHeader" width="32">Score</td>
  607.                         <td class="DetailHeader" width="32">ID</td>
  608.                         <td class="DetailHeader" width="100%">Description</td>
  609.                         <td class="DetailHeader" width="32">Maximum Severity</td>
  610.                         <td class="DetailHeader"> </td>
  611.                     </tr>
  612.                         
  613.                     <xsl:apply-templates select="Detail/UpdateData[@IsInstalled='true' and (not(@RestartRequired) or @RestartRequired='false')]" mode="installed"/>
  614.                 </xsl:if>
  615.             </table>
  616.     </xsl:template>
  617.     
  618.     <xsl:template match="UpdateData" mode="installed">
  619.     <xsl:variable name="GradeText">
  620.         <xsl:choose>
  621.             <xsl:when test="@IsInstalled='true'">Installed</xsl:when>
  622.             <xsl:when test="@IsInstalled='false' and not(@WUSApproved)">Missing</xsl:when>
  623.             <xsl:when test="@IsInstalled='false' and @WUSApproved='true'">Missing</xsl:when>
  624.             <xsl:when test="@IsInstalled='false' and @WUSApproved='false'">Not Approved</xsl:when>
  625.             <xsl:otherwise></xsl:otherwise>
  626.         </xsl:choose>
  627.     </xsl:variable>
  628.         <tr>
  629.             <td valign="top" align="left" nowrap="nowrap">
  630.                 <xsl:value-of select="$GradeText"/>
  631.             </td>
  632.             <td valign="top" nowrap="nowrap">
  633.                 <xsl:value-of select="@ID"/>
  634.                 <xsl:apply-templates select="References/OtherIDs"/>
  635.             </td>
  636.             <td valign="top">
  637.                 <xsl:value-of select="Title"/>
  638.                 <xsl:apply-templates select="@RestartRequired"/>
  639.             </td>
  640.             <td valign="top">
  641.                 <xsl:variable name="SevValue"><xsl:value-of select="@Severity"/></xsl:variable>
  642.                 <xsl:choose>
  643.                     <xsl:when test="$SevValue > 0">
  644.                         <xsl:value-of select="document('')/*/xsl:variable[@name='SeverityLookup']/c[@value=$SevValue]/@text"/>
  645.                     </xsl:when>
  646.                     <xsl:otherwise> </xsl:otherwise>
  647.                 </xsl:choose>
  648.             </td>
  649.         </tr>
  650.     </xsl:template>
  651.     
  652.     <xsl:template match="UpdateData" mode="missing">
  653.     <xsl:variable name="GradeText">
  654.         <xsl:choose>
  655.             <xsl:when test="@IsInstalled='true'">Installed</xsl:when>
  656.             <xsl:when test="@IsInstalled='false' and not(@WUSApproved)">Missing</xsl:when>
  657.             <xsl:when test="@IsInstalled='false' and @WUSApproved='true'">Missing</xsl:when>
  658.             <xsl:when test="@IsInstalled='false' and @WUSApproved='false'">Not Approved</xsl:when>
  659.             <xsl:otherwise></xsl:otherwise>
  660.         </xsl:choose>
  661.     </xsl:variable>
  662.         <xsl:variable name="grade">
  663.             <xsl:choose>
  664.                 <xsl:when test="@WUSApproved and @WUSApproved = 'false'">8</xsl:when>
  665.                 <xsl:when test="@Type != 1">3</xsl:when>
  666.                 <xsl:otherwise>2</xsl:otherwise>
  667.             </xsl:choose>
  668.         </xsl:variable>
  669.         <tr>
  670.             <td valign="top" align="left" nowrap="nowrap">
  671.                 <xsl:value-of select="$GradeText"/>
  672.             </td>
  673.             <td valign="top" nowrap="nowrap">
  674.                 <xsl:value-of select="@ID"/>
  675.                 <xsl:apply-templates select="References/OtherIDs"/>
  676.             </td>
  677.             <xsl:choose>
  678.                 <xsl:when test="@Type = 1">
  679.                     <td valign="top">
  680.                         <xsl:value-of select="Title"/>
  681.                         <xsl:apply-templates select="@RestartRequired"/>
  682.                     </td>
  683.                     <td valign="top">
  684.                         <xsl:variable name="SevValue"><xsl:value-of select="@Severity"/></xsl:variable>
  685.                         <xsl:choose>
  686.                             <xsl:when test="$SevValue > 0">
  687.                                 <xsl:value-of select="document('')/*/xsl:variable[@name='SeverityLookup']/c[@value=$SevValue]/@text"/>
  688.                             </xsl:when>
  689.                             <xsl:otherwise> </xsl:otherwise>
  690.                         </xsl:choose>
  691.                     </td>
  692.                 </xsl:when>
  693.                 <xsl:otherwise>
  694.                     <td valign="top" colspan="2">
  695.                         <xsl:value-of select="Title"/>
  696.                         <xsl:apply-templates select="@RestartRequired"/>
  697.                     </td>
  698.                 </xsl:otherwise>
  699.             </xsl:choose>
  700.         </tr>
  701.     </xsl:template>    
  702.  
  703.     <xsl:template match="@RestartRequired">
  704.         <xsl:if test=".='true'">
  705.             <br/>
  706.             <br/>
  707.             <font color="gray">Installation of this software update was not completed. You must restart your computer to finish the installation.</font>
  708.         </xsl:if>
  709.     </xsl:template>
  710.  
  711.     <xsl:template match="OtherIDs">
  712.         <br/>
  713.         <xsl:apply-templates select="OtherID"/>
  714.     </xsl:template>
  715.     
  716.     <xsl:template match="OtherID">
  717.         <xsl:value-of select="."/><br/>
  718.     </xsl:template>
  719.     
  720. </xsl:stylesheet>
  721.