[Oval-commits] r313 - in trunk/ovalint: docs doxygen project/linux project/linux/EL3 project/linux/EL4 src src/linux src/probes/independent src/probes/linux src/probes/unix src/probes/windows src/solaris src/windows xml

Pavel Vinogradov blaze-guest at alioth.debian.org
Wed Jan 23 19:30:42 UTC 2008


Author: blaze-guest
Date: 2008-01-23 19:30:41 +0000 (Wed, 23 Jan 2008)
New Revision: 313

Added:
   trunk/ovalint/src/probes/linux/DPKGInfoProbe.cpp
   trunk/ovalint/src/probes/linux/DPKGInfoProbe.h
Modified:
   trunk/ovalint/docs/README.txt
   trunk/ovalint/docs/build.linux.txt
   trunk/ovalint/docs/build.win32.txt
   trunk/ovalint/docs/ovaldi.1
   trunk/ovalint/docs/terms.txt
   trunk/ovalint/docs/version.txt
   trunk/ovalint/doxygen/doxygen.linux.config
   trunk/ovalint/doxygen/doxygen.solaris.config
   trunk/ovalint/doxygen/doxygen.windows.config
   trunk/ovalint/project/linux/EL3/libxalan-c.so.110.0
   trunk/ovalint/project/linux/EL3/libxalanMsg.so.110.0
   trunk/ovalint/project/linux/EL3/libxerces-c.so.27.0
   trunk/ovalint/project/linux/EL4/libxalan-c.so.110.0
   trunk/ovalint/project/linux/EL4/libxalanMsg.so.110.0
   trunk/ovalint/project/linux/EL4/libxerces-c.so.27.0
   trunk/ovalint/project/linux/Makefile
   trunk/ovalint/project/linux/ovaldi.sh
   trunk/ovalint/src/AbsComponent.cpp
   trunk/ovalint/src/AbsComponent.h
   trunk/ovalint/src/AbsCriteria.cpp
   trunk/ovalint/src/AbsCriteria.h
   trunk/ovalint/src/AbsDataCollector.cpp
   trunk/ovalint/src/AbsDataCollector.h
   trunk/ovalint/src/AbsEntity.cpp
   trunk/ovalint/src/AbsEntity.h
   trunk/ovalint/src/AbsFileFinder.cpp
   trunk/ovalint/src/AbsFileFinder.h
   trunk/ovalint/src/AbsFunctionComponent.cpp
   trunk/ovalint/src/AbsFunctionComponent.h
   trunk/ovalint/src/AbsObject.cpp
   trunk/ovalint/src/AbsObject.h
   trunk/ovalint/src/AbsObjectCollector.cpp
   trunk/ovalint/src/AbsObjectCollector.h
   trunk/ovalint/src/AbsProbe.cpp
   trunk/ovalint/src/AbsProbe.h
   trunk/ovalint/src/AbsState.cpp
   trunk/ovalint/src/AbsState.h
   trunk/ovalint/src/AbsVariable.cpp
   trunk/ovalint/src/AbsVariable.h
   trunk/ovalint/src/Analyzer.cpp
   trunk/ovalint/src/Analyzer.h
   trunk/ovalint/src/Behavior.cpp
   trunk/ovalint/src/Behavior.h
   trunk/ovalint/src/CollectedObject.cpp
   trunk/ovalint/src/CollectedObject.h
   trunk/ovalint/src/CollectedSet.cpp
   trunk/ovalint/src/CollectedSet.h
   trunk/ovalint/src/Common.cpp
   trunk/ovalint/src/Common.h
   trunk/ovalint/src/ComponentFactory.cpp
   trunk/ovalint/src/ComponentFactory.h
   trunk/ovalint/src/ComponentValue.cpp
   trunk/ovalint/src/ComponentValue.h
   trunk/ovalint/src/ConcatFunction.cpp
   trunk/ovalint/src/ConcatFunction.h
   trunk/ovalint/src/ConstantVariable.cpp
   trunk/ovalint/src/ConstantVariable.h
   trunk/ovalint/src/Criteria.cpp
   trunk/ovalint/src/Criteria.h
   trunk/ovalint/src/Criterion.cpp
   trunk/ovalint/src/Criterion.h
   trunk/ovalint/src/Definition.cpp
   trunk/ovalint/src/Definition.h
   trunk/ovalint/src/DocumentManager.cpp
   trunk/ovalint/src/DocumentManager.h
   trunk/ovalint/src/EntityComparator.cpp
   trunk/ovalint/src/EntityComparator.h
   trunk/ovalint/src/Exception.cpp
   trunk/ovalint/src/Exception.h
   trunk/ovalint/src/ExtendedDefinition.cpp
   trunk/ovalint/src/ExtendedDefinition.h
   trunk/ovalint/src/ExternalVariable.cpp
   trunk/ovalint/src/ExternalVariable.h
   trunk/ovalint/src/Filter.cpp
   trunk/ovalint/src/Filter.h
   trunk/ovalint/src/FilterEntity.cpp
   trunk/ovalint/src/FilterEntity.h
   trunk/ovalint/src/Item.cpp
   trunk/ovalint/src/Item.h
   trunk/ovalint/src/ItemEntity.cpp
   trunk/ovalint/src/ItemEntity.h
   trunk/ovalint/src/LiteralComponent.cpp
   trunk/ovalint/src/LiteralComponent.h
   trunk/ovalint/src/LocalVariable.cpp
   trunk/ovalint/src/LocalVariable.h
   trunk/ovalint/src/Log.cpp
   trunk/ovalint/src/Log.h
   trunk/ovalint/src/MD5.cpp
   trunk/ovalint/src/MD5.h
   trunk/ovalint/src/Main.cpp
   trunk/ovalint/src/Main.h
   trunk/ovalint/src/Object.cpp
   trunk/ovalint/src/Object.h
   trunk/ovalint/src/ObjectComponent.cpp
   trunk/ovalint/src/ObjectComponent.h
   trunk/ovalint/src/ObjectEntity.cpp
   trunk/ovalint/src/ObjectEntity.h
   trunk/ovalint/src/ObjectFactory.cpp
   trunk/ovalint/src/ObjectFactory.h
   trunk/ovalint/src/ObjectReader.cpp
   trunk/ovalint/src/ObjectReader.h
   trunk/ovalint/src/OvalEnum.cpp
   trunk/ovalint/src/OvalEnum.h
   trunk/ovalint/src/OvalMessage.cpp
   trunk/ovalint/src/OvalMessage.h
   trunk/ovalint/src/PossibleRestrictionType.cpp
   trunk/ovalint/src/PossibleRestrictionType.h
   trunk/ovalint/src/PossibleValueType.cpp
   trunk/ovalint/src/PossibleValueType.h
   trunk/ovalint/src/REGEX.cpp
   trunk/ovalint/src/REGEX.h
   trunk/ovalint/src/RestrictionType.cpp
   trunk/ovalint/src/RestrictionType.h
   trunk/ovalint/src/Set.cpp
   trunk/ovalint/src/Set.h
   trunk/ovalint/src/SetObject.cpp
   trunk/ovalint/src/SetObject.h
   trunk/ovalint/src/State.cpp
   trunk/ovalint/src/State.h
   trunk/ovalint/src/StateEntity.cpp
   trunk/ovalint/src/StateEntity.h
   trunk/ovalint/src/SubstringFunction.cpp
   trunk/ovalint/src/SubstringFunction.h
   trunk/ovalint/src/Test.cpp
   trunk/ovalint/src/Test.h
   trunk/ovalint/src/TestedItem.cpp
   trunk/ovalint/src/TestedItem.h
   trunk/ovalint/src/VariableComponent.cpp
   trunk/ovalint/src/VariableComponent.h
   trunk/ovalint/src/VariableFactory.cpp
   trunk/ovalint/src/VariableFactory.h
   trunk/ovalint/src/VariableValue.cpp
   trunk/ovalint/src/VariableValue.h
   trunk/ovalint/src/Version.cpp
   trunk/ovalint/src/Version.h
   trunk/ovalint/src/XmlCommon.cpp
   trunk/ovalint/src/XmlCommon.h
   trunk/ovalint/src/XmlProcessor.cpp
   trunk/ovalint/src/XmlProcessor.h
   trunk/ovalint/src/XslCommon.cpp
   trunk/ovalint/src/XslCommon.h
   trunk/ovalint/src/linux/DataCollector.cpp
   trunk/ovalint/src/linux/DataCollector.h
   trunk/ovalint/src/linux/FileFinder.cpp
   trunk/ovalint/src/linux/FileFinder.h
   trunk/ovalint/src/linux/ObjectCollector.cpp
   trunk/ovalint/src/linux/ObjectCollector.h
   trunk/ovalint/src/linux/ProbeFactory.cpp
   trunk/ovalint/src/linux/ProbeFactory.h
   trunk/ovalint/src/linux/SystemInfo.cpp
   trunk/ovalint/src/linux/SystemInfo.h
   trunk/ovalint/src/probes/independent/EnvironmentVariableProbe.cpp
   trunk/ovalint/src/probes/independent/EnvironmentVariableProbe.h
   trunk/ovalint/src/probes/independent/FamilyProbe.cpp
   trunk/ovalint/src/probes/independent/FamilyProbe.h
   trunk/ovalint/src/probes/independent/FileHashProbe.cpp
   trunk/ovalint/src/probes/independent/FileHashProbe.h
   trunk/ovalint/src/probes/independent/FileMd5Probe.cpp
   trunk/ovalint/src/probes/independent/FileMd5Probe.h
   trunk/ovalint/src/probes/independent/TextFileContentProbe.cpp
   trunk/ovalint/src/probes/independent/TextFileContentProbe.h
   trunk/ovalint/src/probes/independent/VariableProbe.cpp
   trunk/ovalint/src/probes/independent/VariableProbe.h
   trunk/ovalint/src/probes/independent/XmlFileContentProbe.cpp
   trunk/ovalint/src/probes/independent/XmlFileContentProbe.h
   trunk/ovalint/src/probes/linux/InetListeningServersProbe.cpp
   trunk/ovalint/src/probes/linux/InetListeningServersProbe.h
   trunk/ovalint/src/probes/linux/RPMInfoProbe.cpp
   trunk/ovalint/src/probes/linux/RPMInfoProbe.h
   trunk/ovalint/src/probes/unix/FileProbe.cpp
   trunk/ovalint/src/probes/unix/FileProbe.h
   trunk/ovalint/src/probes/unix/ProcessProbe.cpp
   trunk/ovalint/src/probes/unix/ProcessProbe.h
   trunk/ovalint/src/probes/unix/UnameProbe.cpp
   trunk/ovalint/src/probes/unix/UnameProbe.h
   trunk/ovalint/src/probes/windows/AccessTokenProbe.cpp
   trunk/ovalint/src/probes/windows/AccessTokenProbe.h
   trunk/ovalint/src/probes/windows/AuditEventPolicyProbe.cpp
   trunk/ovalint/src/probes/windows/AuditEventPolicyProbe.h
   trunk/ovalint/src/probes/windows/FileEffectiveRightsProbe.cpp
   trunk/ovalint/src/probes/windows/FileEffectiveRightsProbe.h
   trunk/ovalint/src/probes/windows/FileProbe.cpp
   trunk/ovalint/src/probes/windows/FileProbe.h
   trunk/ovalint/src/probes/windows/GroupProbe.cpp
   trunk/ovalint/src/probes/windows/GroupProbe.h
   trunk/ovalint/src/probes/windows/LockoutPolicyProbe.cpp
   trunk/ovalint/src/probes/windows/LockoutPolicyProbe.h
   trunk/ovalint/src/probes/windows/PasswordPolicyProbe.cpp
   trunk/ovalint/src/probes/windows/PasswordPolicyProbe.h
   trunk/ovalint/src/probes/windows/RegistryProbe.cpp
   trunk/ovalint/src/probes/windows/RegistryProbe.h
   trunk/ovalint/src/probes/windows/SidProbe.cpp
   trunk/ovalint/src/probes/windows/SidProbe.h
   trunk/ovalint/src/probes/windows/UserProbe.cpp
   trunk/ovalint/src/probes/windows/UserProbe.h
   trunk/ovalint/src/probes/windows/WMIProbe.cpp
   trunk/ovalint/src/probes/windows/WMIProbe.h
   trunk/ovalint/src/solaris/DataCollector.cpp
   trunk/ovalint/src/solaris/DataCollector.h
   trunk/ovalint/src/solaris/FileFinder.cpp
   trunk/ovalint/src/solaris/FileFinder.h
   trunk/ovalint/src/solaris/ObjectCollector.cpp
   trunk/ovalint/src/solaris/ObjectCollector.h
   trunk/ovalint/src/solaris/ProbeFactory.cpp
   trunk/ovalint/src/solaris/ProbeFactory.h
   trunk/ovalint/src/solaris/SystemInfo.cpp
   trunk/ovalint/src/solaris/SystemInfo.h
   trunk/ovalint/src/windows/DataCollector.cpp
   trunk/ovalint/src/windows/DataCollector.h
   trunk/ovalint/src/windows/FileFinder.cpp
   trunk/ovalint/src/windows/FileFinder.h
   trunk/ovalint/src/windows/ObjectCollector.cpp
   trunk/ovalint/src/windows/ObjectCollector.h
   trunk/ovalint/src/windows/ProbeFactory.cpp
   trunk/ovalint/src/windows/ProbeFactory.h
   trunk/ovalint/src/windows/SystemInfo.cpp
   trunk/ovalint/src/windows/SystemInfo.h
   trunk/ovalint/src/windows/WindowsCommon.cpp
   trunk/ovalint/src/windows/WindowsCommon.h
   trunk/ovalint/xml/results_to_html.xsl
Log:
Update ovaldi to upstream 5.3 build 40

Modified: trunk/ovalint/docs/README.txt
===================================================================
--- trunk/ovalint/docs/README.txt	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/docs/README.txt	2008-01-23 19:30:41 UTC (rev 313)
@@ -4,7 +4,7 @@
 
                   OVAL Interpreter
 
- Copyright (c) 2002 - 2007 - The MITRE Corporation
+ Copyright (c) 2002 - 2008 - The MITRE Corporation
 
 ****************************************************
 
@@ -24,7 +24,8 @@
 TERMS AND CONDITIONS OF USE.  IF YOU DO NOT AGREE TO THESE TERMS, DO NOT
 USE THE INTERPRETER.
 
-Please refer to the terms.txt file or http://oval.mitre.org/about/bsd_license.html
+Please refer to the terms.txt file or 
+http://oval.mitre.org/about/bsd_license.html 
 for more information.
 
 
@@ -89,9 +90,12 @@
 
        XML Schema:
        OVAL schema files
+       evaluation-ids.xsd - XML Schema that defines a format for inputing a 
+                            set of definition ids to evaluate.
        xmldsig-core-schema.xsd - XML digital signature schema
 
        XSL:
+       oval-definitions-schematron.xsl - OVAL Definition Schematron validation rules
        results_to_html.xsl - A simple xsl that formats an oval-results document as html
  
        The .so file for the Xerces library must be made accessible to
@@ -141,9 +145,12 @@
 
        XML Schema:
        OVAL schema files
+       evaluation-ids.xsd - XML Schema that defines a format for inputing a 
+                            set of definition ids to evaluate.
        xmldsig-core-schema.xsd - XML digital signature schema
 
        XSL:
+       oval-definitions-schematron.xsl - OVAL Definition Schematron validation rules
        results_to_html.xsl - A simple xsl that formats an oval-results document as html
 
 -- II -- USING THE INTERPRETER --
@@ -230,35 +237,44 @@
      Command Line: ovaldi [options] MD5Hash
 
      Options:
-     -h          = Show options available from the command line.
+      -h           = show options available from the command line.
 
-     -o filename = Path to the definitions xml file.
-	               DEFAULT="definitions.xml"
-     -d filename = Save collected system configuration data to XML file. 
-                   DEFAULT="system-characteristics.xml"
-     -r filename = Save results to XMl file. DEFAULT="results.xml"
-     -v filename = Get external variable values from the specified XML file. 
-                   DEFAULT="external-variables.xml"
-     -e <string> = evaluate the specified list of definitions. Supply 
-                   definition ids as a comma seperated list like: 
-                   oval:com.example:def:123,oval:com.example:def:234
+     Definition Evaluation Options:
+      -o filename  = path to the oval-definitions xml file. 
+                     DEFAULT="definitions.xml"
+      -v filename  = path to external variable values file.
+                     DEFAULT="external-variables.xml"
+      -e <string>  = evaluate the specified list of definitions. Supply
+                     definition ids as a comma seperated list like: 
+                     oval:com.example:def:123,oval:com.example:def:234
+      -f filename  = path to a file containing a list of definitions to be 
+                     evaluated. The file must comply with the evaluation-id schema.
 
-     -n          = Perform Schematron validation of the oval-defiitions file.
-     -c filename = Use the specified xsl for oval-definitions Schematron validation. 
-                    DEFAULT="oval-definitions-schematron.xsl"
+     Input Validation Options:
+      -m           = do not verify the oval-definitions file with an MD5 hash
+      -n           = perform Schematron validation of the oval-definitions file.
+      -c filename  = path to xsl for oval-definitions Schematron validation. 
+                     DEFAULT="oval-definitions-schematron.xsl"    
 
-     -i filename = Use data from input Systems Characteristics file.
+     Data Collection Options:
+      -i filename  = path to input System Characteristics file. Evaluation will
+                     be based on the contents of the file.
 
-     -m          = Do not verify MD5 of the definitions xml file.
-     -p          = Print all information and error messages to screen.
+     Result Output Options:
+      -d filename  = save system-characteristics data to the specified XML file.
+                     DEFAULT="system-characteristics.xml"
+      -r filename  = save oval-results to the specified XML file.
+                     DEFAULT="oval-results.xml"
+      -s           = do not apply a stylesheet to the results xml.
+      -t filename  = apply the specified xsl to the results xml.
+                     DEFAULT="results_to_html.xsl"
+      -x filename  = output xsl transform results to the specified file.
+                     DEFAULT="results.html"
 
-     -s          = Do not apply an xsl to the oval results xml.
-     -t filename = Apply the sepcified xsl to the oval results xml. 
-                    DEFAULT="results_to_html.xsl"
-     -x filename = Output xsl formatted results to the specified file.
-                    DEFAULT="results.html"
+     Other Options:
+      -p           = print all information and error messages.
+      -z           = return md5 of current oval-definitions file.
 
-     -z          = Return md5 of current definitions xml file.
 
      In more detail: 
      -h -- Displays command line options.
@@ -267,35 +283,44 @@
            If none is specified than the Interpreter will default to
            "definitions.xml" in the Interpreter directory.
 
-     -d -- Specifies the pathname of the file to which collected
-           configuration data is to be saved. This data is stored in the
-           format defined by the Systems Characteristics Schema. 
-
-     -r -- Specifies the pathname of the file to which analysis results
-           are to be saved.  This data is stored according to the format
-           defined by the OVAL Results Schema.  If none is specified 
-           than the Interpreter will default to "results.xml" in the 
-           Interpreter directory.
-
      -v -- Specifies the pathname of the external variable file to use.
            If none is specified then the Interpreter will default to
-           "external-variables.xml" in the Interpreter directory.
+           "external-variables.xml" in the Interpreter directory.           
 
      -e -- Specifies a set of OVAL Definition ids to evaluate in the input
            OVAL Definitions Document. Definition Ids should be comma 
-           sepearated without spaces. All OVAL Definitions in the list
+           separated without spaces. All OVAL Definitions in the list
            are evaluated in the input OVAL Definitions Document if they
            exist in the input document. Any Definition Ids not found will
-           be assigned an error status. Any Defihitions in the input 
+           be assigned an error status. Any Definitions in the input 
            document that are not in the list will be marked as 'Not 
-           Evaluated'. 
+           Evaluated'.            
 
+     -f -- Specifies a the path to an xml file containing the set of
+           OVAL Definition ids to evaluate in the input OVAL Definitions
+           Document. The input xml file must comply with the evaluation-ids.xsd.
+           All OVAL Definitions in the input evaluation-ids document are 
+           evaluated if they exist in the input OVAL Definitions Document. Any
+           Definition Ids not found will be assigned an error result. Any 
+           Definitions in the input document that are not in the list will be 
+           assigned a 'Not Evaluated' evaluated.  
+
+     -m -- Run without requiring an MD5 checksum.  Running the
+           Interpreter with this option DISABLES an important security
+           feature.  In normal usage, a trusted checksum provided on the
+           command line is used to verify the integrity of the OVAL
+           Definitions file.
+
+           Use of this option is recommended only when testing your own
+           draft definitions before submitting them to the OVAL Community 
+           Forum for public review.
+
      -n -- If set run Schematron validation on the input OVAL Definitions
            Document. Schematron validation is currently optional. In the 
            future the OVAL Compatibility program will likely require 
-           Schematron validation. Once Schematron validation is required
-           this reference implementation will also require Schematon
-           validation.
+           Schematron validation. When Schematron validation is required by the
+           OVAL Language this reference implementation will also require 
+           Schematron validation.  
                      
      -c -- Specifies the pathname of the oval-definitions-schematron.xsl
            to be used for Schematron validation. If none is specified 
@@ -307,20 +332,17 @@
            the Interpreter does not perform data collection on the
            local system, but relies upon the input file, which may
            have been generated on another system.
+          
+     -d -- Specifies the pathname of the file to which collected
+           configuration data is to be saved. This data is stored in the
+           format defined by the Systems Characteristics Schema. 
 
-     -m -- Run without requiring an MD5 checksum.  Running the
-           Interpreter with this option DISABLES an important security
-           feature.  In normal usage, a trusted checksum provided on the
-           command line is used to verify the integrity of the OVAL
-           Definitions file.
+     -r -- Specifies the pathname of the file to which analysis results
+           are to be saved.  This data is stored according to the format
+           defined by the OVAL Results Schema.  If none is specified 
+           than the Interpreter will default to "results.xml" in the 
+           Interpreter directory.
 
-           Use of this option is recommended only when testing your own
-           draft definitions before submitting them to the OVAL Community 
-           Forum for public review.
-
-     -p -- Verbose output.  Print all information and error message to the 
-           console.
-
      -s -- If set do not apply the xsl to the OVAL Results xml.
 
      -t -- Specifies the pathname of the xsl file which should be used to
@@ -331,6 +353,9 @@
            are to be saved.  If none is specified then the Interpreter 
            will default to "results.html" in the Interpreter directory.
 
+     -p -- Verbose output.  Print all information and error message to the 
+           console.
+
      -z -- Calculates and prints to the screen the MD5 checksum of the
            current data file (definitions.xml by default, or as specified
            by the -o option).  This can be used to manually compare the

Modified: trunk/ovalint/docs/build.linux.txt
===================================================================
--- trunk/ovalint/docs/build.linux.txt	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/docs/build.linux.txt	2008-01-23 19:30:41 UTC (rev 313)
@@ -10,7 +10,7 @@
 
               Build Instructions
 
-    Copyright (c) 2006 - The MITRE Corporation
+  Copyright (c) 2002-2008, The MITRE Corporation
 
 ****************************************************
 
@@ -205,13 +205,13 @@
 
 OVAL Web site -- http://oval.mitre.org
 
-OVAL Interpreter Source Code -- http://oval.mitre.org/oval/download/interpreter/index.html#def_source_code
+OVAL Interpreter Source Code -- http://oval.mitre.org/language/download/interpreter/index.html
 
 Terms of Use -- http://oval.mitre.org/about/bsd_license.html
 
 ----------------------------------------------------------
 OVAL is sponsored by US-CERT at the U.S. Department of Homeland
 Security. OVAL and the OVAL logo are trademarks of The MITRE
-Corporation. Copyright 2006, The MITRE Corporation (www.mitre.org).
+Corporation. Copyright 2002-2008, The MITRE Corporation (www.mitre.org).
 
 

Modified: trunk/ovalint/docs/build.win32.txt
===================================================================
--- trunk/ovalint/docs/build.win32.txt	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/docs/build.win32.txt	2008-01-23 19:30:41 UTC (rev 313)
@@ -4,7 +4,7 @@
 
               Build Instructions
 
-    Copyright (c) 2006 - The MITRE Corporation
+  Copyright (c) 2002-2008, The MITRE Corporation
 
 ****************************************************
 
@@ -231,11 +231,12 @@
 
 OVAL Web site -- http://oval.mitre.org
 
-OVAL Interpreter Source Code -- http://oval.mitre.org/oval/download/interpreter/index.html#def_source_code
+OVAL Interpreter Source Code -- 
+http://oval.mitre.org/language/download/interpreter/index.html
 
 Terms of Use -- http://oval.mitre.org/about/bsd_license.html
 
 ----------------------------------------------------------
 OVAL is sponsored by US-CERT at the U.S. Department of Homeland
 Security. OVAL and the OVAL logo are trademarks of The MITRE
-Corporation. Copyright 2006, The MITRE Corporation (www.mitre.org).
+Corporation. Copyright 2002-2008, The MITRE Corporation (www.mitre.org).

Modified: trunk/ovalint/docs/ovaldi.1
===================================================================
--- trunk/ovalint/docs/ovaldi.1	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/docs/ovaldi.1	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,4 +1,4 @@
-.TH ovaldi 1 "June 26, 2007" "Version 5.3" "USER COMMANDS"
+.TH ovaldi 1 "January 15, 2008" "Version 5.3" "USER COMMANDS"
 .SH NAME
 ovaldi \- a reference interpreter for the Open Vulnerability and Asessment Language
 .SH SYNOPSIS
@@ -23,17 +23,6 @@
 specified than the Interpreter will default to "definitions.xml" in the
 Interpreter directory.
 .TP
-.B \-d filename
-Specifies the pathname of the file to which collected configuration data is
-to be saved. This data is stored in the format defined by the Systems
-Characteristics Schema.
-.TP
-.B \-r filename
-Specifies the pathname of the file to which analysis results are to be
-saved.  This data is stored according to the format defined by the OVAL
-Results Schema.  If none is specified than the Interpreter will default to
-"results.xml" in the Interpreter directory.
-.TP
 .B \-v filename
 Specifies the pathname of the external variable file to use.  If none is
 specified than the Interpreter will default to "external-variables.xml" in
@@ -44,6 +33,20 @@
 document. Supply definition ids as a comma seperated list like: 
 oval:com.example:def:123,oval:com.example:def:234
 .TP
+.B \-f filename
+Path to a file containing a list of definitions to be evaluated. The 
+file must comply with the evaluation-id schema.
+.TP
+.B \-m
+Run without requiring an MD5 checksum.  Running the Interpreter with this
+option DISABLES an important security feature.  In normal usage, a trusted
+checksum provided on the command line is used to verify the integrity of
+the OVAL Definitions file.
+
+Use of this option is recommended only when testing your own draft
+definitions before submitting them to the OVAL Community Forum for public
+review.
+.TP
 .B \-n
 Perform Schematron validation of the oval-defiitions file.
 .TP
@@ -59,18 +62,16 @@
 perform data collection on the local system, but relies upon the input
 file, which may have been generated on another system.
 .TP
-.B \-m
-Run without requiring an MD5 checksum.  Running the Interpreter with this
-option DISABLES an important security feature.  In normal usage, a trusted
-checksum provided on the command line is used to verify the integrity of
-the OVAL Definitions file.
-
-Use of this option is recommended only when testing your own draft
-definitions before submitting them to the OVAL Community Forum for public
-review.
+.B \-d filename
+Specifies the pathname of the file to which collected configuration data is
+to be saved. This data is stored in the format defined by the Systems
+Characteristics Schema.
 .TP
-.B \-p
-Verbose output. Print all information and error message to the console.
+.B \-r filename
+Specifies the pathname of the file to which analysis results are to be
+saved.  This data is stored according to the format defined by the OVAL
+Results Schema.  If none is specified than the Interpreter will default to
+"results.xml" in the Interpreter directory.
 .TP
 .B \-s
 If set do not apply the xsl to the OVAL Results xml.
@@ -85,6 +86,9 @@
 are to be saved.  If none is specified then the Interpreter
 will default to "results.html" in the Interpreter directory.
 .TP
+.B \-p
+Verbose output. Print all information and error message to the console.
+.TP
 .B \-z
 Calculates and prints to the screen the MD5 checksum of the current data
 file (definitions.xml by default, or as specified by the -o option).  This
@@ -101,4 +105,4 @@
 /usr/share/ovaldi/*.xsd
 The schema files for the OVAL language.
 .SH AUTHOR
-Man page written by Brendan Jonathan Baker (bakerj at mitre.org)
+Man page written by Jonathan Baker (bakerj at mitre.org)

Modified: trunk/ovalint/docs/terms.txt
===================================================================
--- trunk/ovalint/docs/terms.txt	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/docs/terms.txt	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,4 +1,4 @@
-Copyright (c) 2006, The MITRE Corporation
+Copyright (c) 2002-2008, The MITRE Corporation
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/docs/version.txt
===================================================================
--- trunk/ovalint/docs/version.txt	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/docs/version.txt	2008-01-23 19:30:41 UTC (rev 313)
@@ -2,12 +2,27 @@
 
                 OVAL Interpreter
 
-  Copyright (c) 2002-2007 - The MITRE Corporation
+  Copyright (c) 2002-2008 - The MITRE Corporation
 
 ****************************************************
 
 
 ---------------------------------------
+---        Version 5.3 build 40     ---
+---------------------------------------
+* Implemented TextFileContentProbe and documented weaknesses in the oval-definitions-schema. The code for this probe is based on contributions from Pavel Vinogradov (Pavel.Vinogradov at NIXDEV.NET)
+* Added REGEX::GetMatchingSubstrings function to allow matched substrings to be pulled from an input string.
+* Corrected Test::EvaluateCheckExistence method's combining of items based on the check_extistence attribute. The schema documetationt was changed causing a code change to the interpreter source.  
+* Corrected bug in processing of AccessToken behaviors. 
+* Corrected bug in EntityCompartator that was causing the parse version string method to fail on 64 bit linux systems.  Thanks to Ken Sorensen (sorensk at losrios.edu) and Mark Cox (mjc at redhat.com) for tracking this down and fixing it. Applied similar fixes to problematic areas of the code.
+* Corrected bug in processing of variable components. Needed to make a copy of the messages associated with a ComponentValue when computing a value for a Component.
+* Corrected bug in AbsObjectCollector::ProcessObject function. The code was not correctly computing the flag value on collected objects. The flag value should be based on the combination of the status value of each referenced item.
+* Updated Linux makfile to support rpm and dpkg package managers on Linux systems.
+* Corrected bug in processing of unix file_object behaviors. This required an update to AbsFileFinder and both the Linux and Windows FileFinder implementations.  The bug allowed unsupported unix file_object behaviors to go reported on unix systems. 2 of 4 unix file_object behaviors are supported at this time. Now if an unsupported unix file_object behavior is found an error message is reported.
+* Corrected bug in processing of command line arguments which caused the -p flag to not be considered until after some code had already been executed.
+* Source code comments were cleaned up.
+
+---------------------------------------
 ---        Version 5.3 build 20     ---
 ---------------------------------------
 * Corrected bug in EntityComparator::ParseVersionStr(). Added error checking to the function to ensure that the input version strings are in a valid format.

Modified: trunk/ovalint/doxygen/doxygen.linux.config
===================================================================
--- trunk/ovalint/doxygen/doxygen.linux.config	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/doxygen/doxygen.linux.config	2008-01-23 19:30:41 UTC (rev 313)
@@ -31,7 +31,7 @@
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER         = "5.0 beta 2"
+PROJECT_NUMBER         = "5.3"
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
@@ -465,7 +465,7 @@
 INPUT                  = ..\src \
                          ..\src\probes\independent \
                          ..\src\probes\linux \
-                         ..\src\windows
+                         ..\src\linux
 
 # This tag can be used to specify the character encoding of the source files that 
 # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
@@ -481,13 +481,13 @@
 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
 
-FILE_PATTERNS          = 
+FILE_PATTERNS          = *.cpp *.h
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 # should be searched for input files as well. Possible values are YES and NO. 
 # If left blank NO is used.
 
-RECURSIVE              = YES
+RECURSIVE              = NO
 
 # The EXCLUDE tag can be used to specify files and/or directories that should 
 # excluded from the INPUT source files. This way you can easily exclude a 
@@ -507,7 +507,7 @@
 # against the file with absolute path, so to exclude all test directories 
 # for example use the pattern */test/*
 
-EXCLUDE_PATTERNS       = */CVS/*
+EXCLUDE_PATTERNS       = */svn/*
 
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
 # (namespaces, classes, functions, etc.) that should be excluded from the output. 

Modified: trunk/ovalint/doxygen/doxygen.solaris.config
===================================================================
--- trunk/ovalint/doxygen/doxygen.solaris.config	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/doxygen/doxygen.solaris.config	2008-01-23 19:30:41 UTC (rev 313)
@@ -31,7 +31,7 @@
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER         = "5.0 beta 2"
+PROJECT_NUMBER         = "5.3"
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
@@ -465,7 +465,7 @@
 INPUT                  = ..\src \
                          ..\src\probes\independent \
                          ..\src\probes\solaris \
-                         ..\src\windows
+                         ..\src\solaris
 
 # This tag can be used to specify the character encoding of the source files that 
 # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
@@ -481,13 +481,13 @@
 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
 
-FILE_PATTERNS          = 
+FILE_PATTERNS          = *.cpp *.h
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 # should be searched for input files as well. Possible values are YES and NO. 
 # If left blank NO is used.
 
-RECURSIVE              = YES
+RECURSIVE              = NO
 
 # The EXCLUDE tag can be used to specify files and/or directories that should 
 # excluded from the INPUT source files. This way you can easily exclude a 
@@ -507,7 +507,7 @@
 # against the file with absolute path, so to exclude all test directories 
 # for example use the pattern */test/*
 
-EXCLUDE_PATTERNS       = */CVS/*
+EXCLUDE_PATTERNS       = */svn/*
 
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
 # (namespaces, classes, functions, etc.) that should be excluded from the output. 

Modified: trunk/ovalint/doxygen/doxygen.windows.config
===================================================================
--- trunk/ovalint/doxygen/doxygen.windows.config	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/doxygen/doxygen.windows.config	2008-01-23 19:30:41 UTC (rev 313)
@@ -31,7 +31,7 @@
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER         = 5.2
+PROJECT_NUMBER         = 5.3
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
@@ -481,7 +481,7 @@
 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
 
-FILE_PATTERNS          = 
+FILE_PATTERNS          = *.cpp *.h
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 # should be searched for input files as well. Possible values are YES and NO. 
@@ -507,7 +507,7 @@
 # against the file with absolute path, so to exclude all test directories 
 # for example use the pattern */test/*
 
-EXCLUDE_PATTERNS       = */CVS/*
+EXCLUDE_PATTERNS       = */svn/*
 
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
 # (namespaces, classes, functions, etc.) that should be excluded from the output. 

Modified: trunk/ovalint/project/linux/EL3/libxalan-c.so.110.0
===================================================================
(Binary files differ)

Modified: trunk/ovalint/project/linux/EL3/libxalanMsg.so.110.0
===================================================================
(Binary files differ)

Modified: trunk/ovalint/project/linux/EL3/libxerces-c.so.27.0
===================================================================
(Binary files differ)

Modified: trunk/ovalint/project/linux/EL4/libxalan-c.so.110.0
===================================================================
(Binary files differ)

Modified: trunk/ovalint/project/linux/EL4/libxalanMsg.so.110.0
===================================================================
(Binary files differ)

Modified: trunk/ovalint/project/linux/EL4/libxerces-c.so.27.0
===================================================================
(Binary files differ)

Modified: trunk/ovalint/project/linux/Makefile
===================================================================
--- trunk/ovalint/project/linux/Makefile	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/project/linux/Makefile	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 #
-# $Id: Makefile 4195 2007-06-26 17:30:31Z bakerj $
+# $Id: Makefile 4579 2008-01-02 17:39:07Z bakerj $
 #
 #****************************************************************************************//
-# Copyright (c) 2006, The MITRE Corporation
+# Copyright (c) 2002-2008, The MITRE Corporation
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are
@@ -54,14 +54,28 @@
 LIBDIR = -L/usr/lib
 
 # What libraries do we need?
-LIBS = -lxerces-c -lxalan-c -lpcre -lrpm -lrpmdb -lrpmio -lpopt
+LIBS = -lxerces-c -lxalan-c -lpcre -lpopt
 
 # Determine what platform the source is being build on
-PLATFORM = $(shell uname)
+PLATFORM = $(shell uname | tr '[a-z]' '[A-Z]')
 
+# Determine what package management system is being used 
+PACKAGE_RPM  = $(shell /usr/bin/env rpm  --version 2>/dev/null)
+PACKAGE_DPKG = $(shell /usr/bin/env dpkg --version 2>/dev/null)
+PACKAGE_MANAGERS = 
+
+ifneq (${PACKAGE_RPM}, )
+	LIBS += -lrpm -lrpmdb -lrpmio
+	PACKAGE_MANAGERS += -DPACKAGE_RPM
+endif
+ifneq (${PACKAGE_DPKG}, )
+	LIBS += -lapt-pkg
+	PACKAGE_MANAGERS += -DPACKAGE_DPKG
+endif
+
 # What object code are we expecting?
 OBJS = \
-    Main.obj \
+  Main.obj \
 	AbsFileFinder.obj \
 	AbsComponent.obj \
 	AbsCriteria.obj \
@@ -131,7 +145,6 @@
 	FileProbe.obj \
 	InetListeningServersProbe.obj \
 	ProcessProbe.obj \
-	RPMInfoProbe.obj \
 	UnameProbe.obj \
 	TextFileContentProbe.obj \
 	XmlFileContentProbe.obj \
@@ -141,6 +154,13 @@
 	FileHashProbe.obj \
 	VariableProbe.obj \
 
+ifneq (${PACKAGE_RPM}, )
+	OBJS += RPMInfoProbe.obj
+endif
+ifneq (${PACKAGE_DPKG}, )
+	OBJS += DPKGInfoProbe.obj
+endif
+
 REL_OBJS = \
 	$(BUILDDIR)/Main.obj \
 	$(BUILDDIR)/AbsComponent.obj \
@@ -212,7 +232,6 @@
 	$(BUILDDIR)/FileProbe.obj \
 	$(BUILDDIR)/InetListeningServersProbe.obj \
 	$(BUILDDIR)/ProcessProbe.obj \
-	$(BUILDDIR)/RPMInfoProbe.obj \
 	$(BUILDDIR)/UnameProbe.obj \
 	$(BUILDDIR)/TextFileContentProbe.obj \
 	$(BUILDDIR)/XmlFileContentProbe.obj \
@@ -222,6 +241,13 @@
 	$(BUILDDIR)/FileHashProbe.obj \
 	$(BUILDDIR)/VariableProbe.obj \
 
+ifneq (${PACKAGE_RPM}, )
+	REL_OBJS += $(BUILDDIR)/RPMInfoProbe.obj
+endif
+ifneq (${PACKAGE_DPKG}, )
+	REL_OBJS += $(BUILDDIR)/DPKGInfoProbe.obj
+endif
+
 # Search the output directory for object files
 vpath %.obj $(BUILDDIR)
 vpath %.cpp $(SRCDIR)
@@ -239,30 +265,35 @@
 .SUFFIXES: .cpp .obj
 
 .cpp.obj:
-	$(CXX) -c $(CPPFLAGS) -D$(PLATFORM) $(INCDIRS) -o $(BUILDDIR)/$@ $^
+	$(CXX) -c $(CPPFLAGS) -D$(PLATFORM) $(PACKAGE_MANAGERS) $(INCDIRS) -o $(BUILDDIR)/$@ $^
 
 # *******************************************************************
 #                            Rules
 # *******************************************************************
 
-all: update set-platform
+all: create-dir update set-platform
 
+
+create-dir:
+	@install -d ${BUILDDIR};
+
+
+# OS-specific builds 
+# -- these may be used later on but aren't really needed now
+
 set-platform:
-	@if [ $(PLATFORM) = Linux ]; then \
+	@if [ ${PLATFORM} = SUNOS ]; then \
+		make sunos; \
+	fi; \
+	if  [ ${PLATFORM} = LINUX ]; then \
 		make linux; \
 	fi;
 
-	@if [ $(PLATFORM) = SunOS ]; then \
-		make sunos; \
-	fi;
-
-linux: PLATFORM = LINUX
 linux: build
 
-
-sunos: PLATFORM = SUNOS
 sunos: build
 
+
 update:
 #	-rm $(BUILDDIR)/Version.obj
 #	cd ${SRCDIR}; ls; ./updateversion.pl; cd ${CURRENTDIR}
@@ -270,22 +301,25 @@
 build : $(OBJS)
 	$(CXX) $(CPPFLAGS) -D$(PLATFORM) $(REL_OBJS) $(LIBDIR) $(LIBS) -o $(EXECUTABLE)
 
+
+# OS-specific cleaning
+# -- These may be used later on but aren't needed right now
+
 clean :
-	-rm $(REL_OBJS)
-	@if [ $(PLATFORM) = Linux ]; then \
+	@if [ $(PLATFORM) = LINUX ]; then \
 		make clean-linux; \
-	fi;
-
-	@if [ $(PLATFORM) = SunOS ]; then \
+	fi; \
+	if  [ $(PLATFORM) = SUNOS ]; then \
 		make clean-sunos; \
 	fi;
 
 clean-linux:
-	-rm $(OUTDIR)/ovaldi
+	-rm -rf $(OUTDIR)
 
 clean-sunos:
-	-rm $(OUTDIR)/ovaldi
+	-rm -rf $(OUTDIR)
 
+
 debug: CPPFLAGS = -Wall -O -static-libgcc -ggdb
 debug: all
 

Modified: trunk/ovalint/project/linux/ovaldi.sh
===================================================================
--- trunk/ovalint/project/linux/ovaldi.sh	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/project/linux/ovaldi.sh	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,9 +1,9 @@
 #!/bin/bash
 #
-# $Id: ovaldi.sh 4235 2007-06-28 16:01:17Z bakerj $
+# $Id: ovaldi.sh 4579 2008-01-02 17:39:07Z bakerj $
 #
 #****************************************************************************************#
-# Copyright (c) 2002-2007, The MITRE Corporation
+# Copyright (c) 2002-2008, The MITRE Corporation
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/AbsComponent.cpp
===================================================================
--- trunk/ovalint/src/AbsComponent.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsComponent.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsComponent.cpp 3739 2007-01-25 18:56:25Z bakerj $
+// $Id: AbsComponent.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/AbsComponent.h
===================================================================
--- trunk/ovalint/src/AbsComponent.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsComponent.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsComponent.h 3739 2007-01-25 18:56:25Z bakerj $
+// $Id: AbsComponent.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/AbsCriteria.cpp
===================================================================
--- trunk/ovalint/src/AbsCriteria.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsCriteria.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsCriteria.cpp 3691 2007-01-17 18:51:25Z bakerj $
+// $Id: AbsCriteria.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/AbsCriteria.h
===================================================================
--- trunk/ovalint/src/AbsCriteria.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsCriteria.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsCriteria.h 4123 2007-06-22 14:03:41Z bakerj $
+// $Id: AbsCriteria.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -65,7 +65,7 @@
 class AbsCriteria {
 
 public :
-	/** Create a compelete AbsCriteria object. 
+	/** Create a complete AbsCriteria object. 
 		All paremters are initialized with default values. 
 		Default values are: negate = false; result = error
 	*/

Modified: trunk/ovalint/src/AbsDataCollector.cpp
===================================================================
--- trunk/ovalint/src/AbsDataCollector.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsDataCollector.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsDataCollector.cpp 4117 2007-06-22 13:51:07Z bakerj $
+// $Id: AbsDataCollector.cpp 4647 2008-01-15 14:35:33Z bworrell $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -182,7 +182,9 @@
 
 		// Once finished running call write method on all collected objects
 		CollectedObject::WriteCollectedObjects();
-		Filter::ClearCache(); // TODO - not currently in use.
+
+		// clean up after the run completes
+		Filter::ClearCache();
 		AbsVariable::ClearCache();
 		AbsProbe::ClearGlobalCache();
 		VariableValue::ClearCache();

Modified: trunk/ovalint/src/AbsDataCollector.h
===================================================================
--- trunk/ovalint/src/AbsDataCollector.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsDataCollector.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsDataCollector.h 3740 2007-01-25 21:59:04Z bakerj $
+// $Id: AbsDataCollector.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -118,8 +118,11 @@
 	virtual void WriteSystemInfo() = 0;
 
 	DOMElement* collectedObjectsElm;
+	
 	DOMElement* systemDataElm;
+
 	AbsObjectCollector *objectCollector;
+
 	/** The singleton instance of a concrete DataCollector in the application. */
 	static AbsDataCollector* instance;
 	/** A flag used to indicate that the concrete DataCollector is running. 

Modified: trunk/ovalint/src/AbsEntity.cpp
===================================================================
--- trunk/ovalint/src/AbsEntity.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsEntity.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsEntity.cpp 4169 2007-06-25 17:38:30Z bakerj $
+// $Id: AbsEntity.cpp 4611 2008-01-08 13:52:45Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -240,16 +240,15 @@
 		for(varValueIt = values->begin(); varValueIt != values->end(); varValueIt ++) {
 			varValues->push_back((*varValueIt));
 		}
-		// TODO - do i need this delete call here
-		//delete values;
-		//values = NULL;
 
 		// get any variable values that were used for determinihng the value of this variable
 		values = varRef->GetVariableValues();
 		for(varValueIt = values->begin(); varValueIt != values->end(); varValueIt ++) {
 			varValues->push_back((*varValueIt));
 		}
-		// TODO - do i need this delete call here
+		// BUG - These can not currently be deleted. 
+		// The code is not consistant here. In places a new vector is returned
+		// in others a reference to a vector that is managed by other code is returned.
 		//delete values;
 		//values = NULL;
 	}

Modified: trunk/ovalint/src/AbsEntity.h
===================================================================
--- trunk/ovalint/src/AbsEntity.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsEntity.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsEntity.h 4169 2007-06-25 17:38:30Z bakerj $
+// $Id: AbsEntity.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -81,7 +81,7 @@
 		AbsVariable* varRef = NULL, OvalEnum::Check varCheck = OvalEnum::CHECK_ALL, bool nil = false);
 
 	/**
-		This destructor takes no special action. All dynamically allocated memory is freed by otehr classes.
+		This destructor takes no special action. All dynamically allocated memory is freed by other classes.
 	*/
 	virtual ~AbsEntity();
 

Modified: trunk/ovalint/src/AbsFileFinder.cpp
===================================================================
--- trunk/ovalint/src/AbsFileFinder.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsFileFinder.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsFileFinder.cpp 4228 2007-06-28 14:37:29Z bakerj $
+// $Id: AbsFileFinder.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -143,37 +143,9 @@
 		delete allPaths;
 	}
 
-	// Process the behaviors to identify any additional paths.
-	// initialize these default values based on the defaults 
-	// set in the oval definitions schema
-	string recurseDirection = Behavior::GetBehaviorValue(behaviors, "recurse_direction");
-	if(recurseDirection.compare("") == 0) {
-		recurseDirection = "none";
-	}
+	// apply any behaviors and consolidate the results
+	StringVector* behaviorPaths = this->ProcessPathBehaviors(paths, behaviors);
 
-	string maxDepthStr = Behavior::GetBehaviorValue(behaviors, "max_depth");
-	int maxDepth = -1;
-	if(maxDepthStr.compare("") != 0) {
-		maxDepth = atoi(maxDepthStr.c_str());
-		if(maxDepth < -1) 
-			maxDepth = -1;
-	}
-
-	// only need to address recurseDirection up & down if maxDepth is not 0
-	StringVector* behaviorPaths = new StringVector();
-	if(recurseDirection.compare("up") == 0 && maxDepth != 0) {
-		StringVector::iterator path;
-		for(path = paths->begin(); path != paths->end(); path++) {
-			this->UpwardPathRecursion(behaviorPaths, (*path), maxDepth);
-		}
-
-	} else if(recurseDirection.compare("down") == 0 && maxDepth != 0) {
-		StringVector::iterator path;
-		for(path = paths->begin(); path != paths->end(); path++) {
-			this->DownwardPathRecursion(behaviorPaths, (*path), maxDepth);
-		}
-	}
-
 	// combine all the paths into a unique string vector
 	StringVector* uniquePaths = new StringVector();
 	UniqueStringVector* usv = new UniqueStringVector(uniquePaths);
@@ -269,7 +241,7 @@
 	}
 }
 
-StringVector* AbsFileFinder::GetFileNames(string path, ObjectEntity* fileName) {
+StringVector* AbsFileFinder::GetFileNames(string path, ObjectEntity* fileName, BehaviorVector* behaviors) {
 
 	StringVector* fileNames = new StringVector();
 

Modified: trunk/ovalint/src/AbsFileFinder.h
===================================================================
--- trunk/ovalint/src/AbsFileFinder.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsFileFinder.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsFileFinder.h 4170 2007-06-25 17:40:20Z bakerj $
+// $Id: AbsFileFinder.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -78,7 +78,7 @@
 		Search the file system for files under the specified path that match the 
 	  	provided ObjectEntity.
 	*/
-	StringVector* GetFileNames(string path, ObjectEntity* fileName);
+	StringVector* GetFileNames(string path, ObjectEntity* fileName, BehaviorVector* behaviors = NULL);
 
 	/** Return true if the calling probe should report that the path does not exist.
 		If a path's operator is set to OPERATOR_EQUALS and the path does not exist
@@ -106,7 +106,10 @@
 
 protected:
 	
-	/** Return true if teh specified directory exists. */
+	/** Return the set of matching paths after applying behaviors */
+	virtual StringVector* ProcessPathBehaviors(StringVector* paths, BehaviorVector* behaviors) = 0;
+
+	/** Return true if the specified directory exists. */
 	virtual bool PathExists(string path) = 0;
 	
 	/** Return true if the specified filename is found in the specified directory. */
@@ -133,8 +136,6 @@
 
 	REGEX *fileMatcher;
 
-private:
-
 	/** Do a recusive search down the file system until the specified maxDepth is hit. 
 	    Each directory traversed is added to the set of paths. If maxDepth is a positive
 		number it is decremented with each recursive call and recursion stops when the 

Modified: trunk/ovalint/src/AbsFunctionComponent.cpp
===================================================================
--- trunk/ovalint/src/AbsFunctionComponent.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsFunctionComponent.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsFunctionComponent.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: AbsFunctionComponent.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete AbsFunctionComponent object
+	//	Create a complete AbsFunctionComponent object
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/AbsFunctionComponent.h
===================================================================
--- trunk/ovalint/src/AbsFunctionComponent.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsFunctionComponent.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsFunctionComponent.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: AbsFunctionComponent.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 
 /**
 	This class represents abstract function component in a local_varaible in the oval definition schema.
-	The oval defintion schema defines a set of funtions for use in local_variables. All functions have 
+	The oval definition schema defines a set of funtions for use in local_variables. All functions have 
 	some common aspects. This calls encaplusates those commonalities.
 */
 class AbsFunctionComponent : public AbsComponent {

Modified: trunk/ovalint/src/AbsObject.cpp
===================================================================
--- trunk/ovalint/src/AbsObject.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsObject.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsObject.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: AbsObject.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete Entity object
+	//	Create a complete Entity object
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/AbsObject.h
===================================================================
--- trunk/ovalint/src/AbsObject.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsObject.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsObject.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: AbsObject.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/AbsObjectCollector.cpp
===================================================================
--- trunk/ovalint/src/AbsObjectCollector.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsObjectCollector.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsObjectCollector.cpp 4139 2007-06-22 14:13:04Z bakerj $
+// $Id: AbsObjectCollector.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -69,7 +69,7 @@
 			collectedObject = CollectedObject::CreateError(objectId);
 			collectedObject->SetFlag(ex.GetVariable()->GetFlag());
 			
-			// add all the messages reported wtih the AbsVariable
+			// add all the messages reported with the AbsVariable
 			StringVector::iterator iterator;
 			for(iterator = ex.GetVariable()->GetMessages()->begin(); iterator != ex.GetVariable()->GetMessages()->end(); iterator++) {
 				collectedObject->AppendOvalMessage(new OvalMessage((*iterator)));
@@ -265,17 +265,7 @@
 }
 
 CollectedObject* AbsObjectCollector::ProcessSetObject(SetObject* setObject) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	 - Copy the variable values from the specified object.
-	//	 - Make call to process set to start the recursive processing of the set.
-	//	 - Set the references based on the results of processing the set 
-	//	 - Set the flag based on the results of processing the set
-	//	 - Copy the variable values used to create the collected set
-	// -----------------------------------------------------------------------
 
-	
 	CollectedSet* collectedSet = this->ProcessSet(setObject->GetSet());
 	CollectedObject* collectedObject = CollectedObject::Create(setObject);	
 	collectedObject->SetReferences(collectedSet->GetItems());
@@ -286,13 +276,6 @@
 }
 
 CollectedSet* AbsObjectCollector::ProcessSet(Set* set) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//	
-	//	Either recursivley process each child set or Process each object 
-	//	reference.
-	//	
-	// -----------------------------------------------------------------------
 
 	CollectedSet* collectedSet1 = NULL;
 	CollectedSet* collectedSet2 = NULL;
@@ -362,16 +345,6 @@
 }
 
 CollectedObject* AbsObjectCollector::ProcessObject(Object* object) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	 - make sure the object is supported and applicable
-	//	 - copy any variable values from the object
-	//	 - Get the probe for the object
-	//	 - Run the probe with the object
-	//	 - Set the matching collected items for the collected object
-	//	 - Set the flag value for the collected object.
-	// -----------------------------------------------------------------------
 
 	CollectedObject* collectedObject = NULL;
 
@@ -395,30 +368,12 @@
 				// only create collected object if the pribe succeeds
 				collectedObject = CollectedObject::Create(object);
 				collectedObject->AppendVariableValues(object->GetVariableValues());
-				collectedObject->AppendReferences(items);
+				collectedObject->AppendReferencesAndComputeFlag(items);
 			} else {
+				
+				// because we first check if the object is supported the code should never get here.
 				throw AbsObjectCollectorException("Error: Unable to locate a probe for the specified object.", ERROR_FATAL);
 			}
-
-			// set the flag corerctly
-			if(collectedObject->GetReferences()->size() == 0) {
-				collectedObject->SetFlag(OvalEnum::FLAG_DOES_NOT_EXIST);
-			} else {
-
-				//
-				//
-				// TODO: here is where i need to figure out a new way to set the flag.
-				// If there are collected objects the flag may still be does not exit.
-				// need to check that one more more items has a status of exists
-				//
-				// Then i need to review each probe. When ever a probe detects that 
-				// an item is not found it needs to report it rather than reporting 
-				// nothing
-				//
-				//
-
-				collectedObject->SetFlag(OvalEnum::FLAG_COMPLETE);
-			}
 		}
 	}
 
@@ -426,11 +381,6 @@
 }
 
 OvalEnum::Flag AbsObjectCollector::CombineFlagBySetOperator(OvalEnum::SetOperator setOp, OvalEnum::Flag set1Flag, OvalEnum::Flag set2Flag) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Combine the 
-	// -----------------------------------------------------------------------
 
 	OvalEnum::Flag result = OvalEnum::FLAG_ERROR;
 
@@ -622,23 +572,9 @@
 //						AbsObjectCollectorException Class								  //	
 //****************************************************************************************//
 AbsObjectCollectorException::AbsObjectCollectorException(string errMsgIn, int severity, Exception* ex) : Exception(errMsgIn, severity, ex) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the error message and then set the severity to ERROR_FATAL. This is 
-	//	done with the explicit call to the Exception class constructor that 
-	//	takes a single string param.
-	//
-	// -----------------------------------------------------------------------
 
 }
 
 AbsObjectCollectorException::~AbsObjectCollectorException() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Do nothing for now
-	//
-	// -----------------------------------------------------------------------
 
 }

Modified: trunk/ovalint/src/AbsObjectCollector.h
===================================================================
--- trunk/ovalint/src/AbsObjectCollector.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsObjectCollector.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsObjectCollector.h 4118 2007-06-22 13:51:50Z bakerj $
+// $Id: AbsObjectCollector.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -96,18 +96,56 @@
 	AbsObjectCollector();
 	static AbsObjectCollector* instance;
 
+	/** 
+		Return true if the input object is applicable on the host being evaluated.
+		Return true if the specified object is applicable to this object 
+		collector. All objects defined in the windows and independent schemas 
+		are applicable
+	*/
 	virtual bool IsApplicable(AbsObject* object) = 0;
+
+	/** Return true if the specified object is supported by this object collector. */
 	virtual bool IsSupported(AbsObject* object) = 0;
+
+	/** Call the ProbeFactory and get a probe capable of collecting the input object.
+		If an appropriate probe is not found NULL is returned.
+	*/
 	virtual AbsProbe* GetProbe(Object* object) = 0;
 	
 	/** Based on the type of object call the appropriate process method. */
 	CollectedObject* Process(AbsObject* absObject);
 
+	/**
+		Process the input set object and return the resulting CollectedObject.
+		The following actions are taken:
+		 - Copy the variable values from the specified object.
+		 - Make call to process set to start the recursive processing of the set.
+		 - Set the references based on the results of processing the set 
+		 - Set the flag based on the results of processing the set
+		 - Copy the variable values used to create the collected set
+
+	*/
 	CollectedObject* ProcessSetObject(SetObject* setObject);
+
+	/** 
+		Process the input object and return the resulting CollectedObject.
+		The following actions are taken:
+		 - make sure the object is supported and applicable
+		 - copy any variable values from the object
+		 - Get the probe for the object
+		 - Run the probe with the object
+		 - Set the matching collected items for the collected object
+		 - Set the flag value for the collected object.
+	*/
 	CollectedObject* ProcessObject(Object* object);
 
+	/** 
+		Process the input set and return the resulting CollectedSet.
+		Either recursivley process each child set or Process each object reference. 
+	*/
 	CollectedSet* ProcessSet(Set* set);	
 	
+	/** Based the input set operator combine the 2 input flag values and return the resulting flag value. */
 	OvalEnum::Flag CombineFlagBySetOperator(OvalEnum::SetOperator setOp, OvalEnum::Flag set1Flag, OvalEnum::Flag set2Flag);
 
 	/**

Modified: trunk/ovalint/src/AbsProbe.cpp
===================================================================
--- trunk/ovalint/src/AbsProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsProbe.cpp 4153 2007-06-22 17:51:35Z bakerj $
+// $Id: AbsProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/AbsProbe.h
===================================================================
--- trunk/ovalint/src/AbsProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsProbe.h 4153 2007-06-22 17:51:35Z bakerj $
+// $Id: AbsProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/AbsState.cpp
===================================================================
--- trunk/ovalint/src/AbsState.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsState.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsState.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: AbsState.cpp 4583 2008-01-03 16:25:18Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete State object
+	//	Create a complete State object
 	//
 	// -----------------------------------------------------------------------
 
@@ -53,7 +53,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete State object
+	//	Create a complete State object
 	//
 	// -----------------------------------------------------------------------
 
@@ -245,9 +245,9 @@
 			for(varValueIt = values->begin(); varValueIt != values->end(); varValueIt ++) {
 				varValues->push_back((*varValueIt));
 			}
-			// TODO - do i need this delete 
-			//delete values;
-			// values = NULL;
+
+			delete values;
+			values = NULL;
 		}
 	}
 	return varValues;
@@ -277,4 +277,3 @@
 	// -----------------------------------------------------------------------
 
 }
-

Modified: trunk/ovalint/src/AbsState.h
===================================================================
--- trunk/ovalint/src/AbsState.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsState.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsState.h 4122 2007-06-22 14:02:20Z bakerj $
+// $Id: AbsState.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -101,7 +101,7 @@
 typedef pair <string, AbsState* > AbsStatePair;
 
 /**	
-	A map for storing AbsStatePair. 
+	A map for storing AbsState. 
 	Stores only pointers to the objects. 
 */
 typedef map <string, AbsState* > AbsStateMap;

Modified: trunk/ovalint/src/AbsVariable.cpp
===================================================================
--- trunk/ovalint/src/AbsVariable.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsVariable.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsVariable.cpp 4146 2007-06-22 16:36:16Z bakerj $
+// $Id: AbsVariable.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -31,18 +31,12 @@
 
 #include "AbsVariable.h"
 
-AbsVariableVector AbsVariable::processedVariables;
+AbsVariableMap AbsVariable::processedVariableCache;
 
 //****************************************************************************************//
 //									AbsVariable Class									  //	
 //****************************************************************************************//
 AbsVariable::AbsVariable(string id, string name, int version, OvalEnum::Datatype datatype, StringVector* msgs) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a compelete Entity object
-	//
-	// -----------------------------------------------------------------------
 
 	this->SetId(id);
 	this->SetDatatype(datatype);
@@ -53,12 +47,6 @@
 }
 
 AbsVariable::~AbsVariable() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	delete the messages
-	//
-	// -----------------------------------------------------------------------
 
 	delete msgs;
 }
@@ -68,115 +56,57 @@
 // ***************************************************************************************	//
 
 OvalEnum::Datatype AbsVariable::GetDatatype() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the datatype field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->datatype;
 }
 
 void AbsVariable::SetDatatype(OvalEnum::Datatype datatype) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the datatype field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->datatype = datatype;
 }
 
 OvalEnum::Flag AbsVariable::GetFlag() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the flag field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->flag;
 }
 
 void AbsVariable::SetFlag(OvalEnum::Flag flag) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the flag field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->flag = flag;
 }
 
 string AbsVariable::GetId() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the id field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->id;
 }
 
 void AbsVariable::SetId(string id) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the id field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->id = id;
 }
 
 StringVector* AbsVariable::GetMessages() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the msgs field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->msgs;
 }
 
 void AbsVariable::SetMessages(StringVector* msgs) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the msgs field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->msgs = msgs;
 }
 
 void AbsVariable::AppendMessage(string msg) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Add a msg to the end of the msgs vector
-	//
-	// -----------------------------------------------------------------------
 
 	this->msgs->push_back(msg);
 }
 
 void AbsVariable::AppendMessages(StringVector* newMsgs) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Add a newMsgs to the end of the msgs vector
-	//
-	// -----------------------------------------------------------------------
 
 	StringVector::iterator iterator;
 	for(iterator = newMsgs->begin(); iterator != newMsgs->end(); iterator++) {
-		this->AppendMessage((*iterator));
+		string str = "";
+		str.append((*iterator));
+		this->AppendMessage(str);
 	}
 }
 
@@ -199,129 +129,73 @@
 }
 
 string AbsVariable::GetName() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the name field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->name;
 }
 
 void AbsVariable::SetName(string name) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the name field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->name = name;
 }
 
 VariableValueVector* AbsVariable::GetValues() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the value field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return &this->values;
 }
 
 void AbsVariable::SetValues(VariableValueVector* value) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the value field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->values = values;
 }
 
 void AbsVariable::AppendVariableValue(VariableValue* value) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the version field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->values.push_back(value);
 }
 
 int AbsVariable::GetVersion() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the version field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->version;
 }
 
 void AbsVariable::SetVersion(int version) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the version field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->version = version;
 }
 
-
 AbsVariable* AbsVariable::SearchCache(string id) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	search the cache of variables for the specifed variable. 
-	//	return NULL if not found
-	//
-	// -----------------------------------------------------------------------
 
 	AbsVariable* cachedAbsVariable = NULL;
 
-	AbsVariableVector::iterator iterator;
-	for(iterator = AbsVariable::processedVariables.begin(); iterator != AbsVariable::processedVariables.end(); iterator++) {
-		if((*iterator)->GetId().compare(id) == 0) {
-			cachedAbsVariable = (*iterator);
-			break;
-		}
+	AbsVariableMap::iterator iterator = AbsVariable::processedVariableCache.find(id);
+	if(iterator != AbsVariable::processedVariableCache.end()) {
+		AbsVariablePair pair = (*iterator);
+		cachedAbsVariable = pair.second;
 	}
 
 	return cachedAbsVariable;
 }
 
 void AbsVariable::ClearCache() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	delete all items in the cache
-	//
-	// -----------------------------------------------------------------------
 
 	AbsVariable* var = NULL;
-	while(AbsVariable::processedVariables.size() != 0) {
-	  	var = AbsVariable::processedVariables[AbsVariable::processedVariables.size()-1];
-	  	AbsVariable::processedVariables.pop_back();
-	  	delete var;
-	  	var = NULL;
+	
+	if(!AbsVariable::processedVariableCache.empty()) {
+
+		while(AbsVariable::processedVariableCache.size() != 0) {
+			AbsVariableMap::iterator iterator = AbsVariable::processedVariableCache.begin();
+			AbsVariablePair pair = (*iterator);
+			var = pair.second;
+			AbsVariable::processedVariableCache.erase(iterator);
+	  		delete var;
+	  		var = NULL;
+		}
+
 	}
 }
 
 void AbsVariable::Cache(AbsVariable* var) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	// cache the specified var
-	//	TODO - do i need to add protection to this cache
-	// -----------------------------------------------------------------------
-	
-	AbsVariable::processedVariables.push_back(var);
+
+	string id = var->GetId();
+	AbsVariable::processedVariableCache.insert(AbsVariablePair(id, var));
 }

Modified: trunk/ovalint/src/AbsVariable.h
===================================================================
--- trunk/ovalint/src/AbsVariable.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/AbsVariable.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AbsVariable.h 4138 2007-06-22 14:12:43Z bakerj $
+// $Id: AbsVariable.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -46,6 +46,8 @@
 #include <vector>
 #include <iostream>
 #include <stdlib.h>
+#include <map>
+#include <utility>
 
 #include "Common.h"
 #include "Exception.h"
@@ -57,50 +59,82 @@
 
 class AbsVariable;
 
-/**
-	A vector for storing AbsVariable objects. 
+/**	
+	A pair for storing variable ids and AbsVariable together. 
+	Stores only pointers to the AbsVariable. 
+*/
+typedef pair <string, AbsVariable* > AbsVariablePair;
+
+/**	
+	A map for storing AbsVariable. 
 	Stores only pointers to the objects. 
 */
-typedef vector < AbsVariable*, allocator<AbsVariable*> > AbsVariableVector;
+typedef map <string, AbsVariable* > AbsVariableMap;
 
 /**
 	This class represents an AbsVariable in an oval definition schema.
 */
 class AbsVariable {
 public:
+	/** delete the messages */
 	virtual ~AbsVariable();
 
 	virtual void Parse(DOMElement*) = 0;
 
 	virtual VariableValueVector* GetVariableValues() = 0;
 	
+	/** Return the id field's value. */
 	string GetId();
+	/** Set the id field's value. */
 	void SetId(string id);
-
+	
+	/** Return the datatype field's value. */
 	OvalEnum::Datatype GetDatatype();
+	/** Set the datatype field's value. */
 	void SetDatatype(OvalEnum::Datatype datatype);
 
+	/** Return the flag field's value. */
 	OvalEnum::Flag GetFlag();
+	/** Set the flag field's value. */
 	void SetFlag(OvalEnum::Flag flag);
 
+	/** Return the name field's value. */
 	string GetName();
+	/** Set the name field's value. */
 	void SetName(string name);
 
+	/** Return the values field's value. */
 	VariableValueVector* GetValues();
+	/** Set the values field's value. */
 	void SetValues(VariableValueVector* value);
+	/** Add a value to the set of values associated with this variable. */
 	void AppendVariableValue(VariableValue* value);
 
+	/** Return the version field's value. */
 	int GetVersion();
+	/** Set the version field's value. */
 	void SetVersion(int version);
 
+	/** Return the msgs field's value. */
 	StringVector* GetMessages();
+	/** Set the msgs field's value. */
 	void SetMessages(StringVector* msgs);
+	/** Add a msg to the end of the msgs vector. */
 	void AppendMessage(string msg);
+	/** Add a newMsgs to the end of the msgs vector. */
 	void AppendMessages(StringVector* newMsgs);
+	/** Create a string listing of all messages. */
 	string ListMessages();
 
+	/** Search the cache of variables for the specifed variable. 
+		return NULL if not found.
+	*/
 	static AbsVariable* SearchCache(string id);
+	/** delete all items in the cache. */
 	static void ClearCache();
+	/** cache the specified var
+		TODO - do i need to add protection to this cache
+	*/
 	static void Cache(AbsVariable* var);
 
 protected:
@@ -114,10 +148,10 @@
 	int version;
 	OvalEnum::Datatype datatype;
 	VariableValueVector values; 
-	bool error;
+	//bool error;  // i don't think this is used anywhere
 	StringVector* msgs;
 
-	static AbsVariableVector processedVariables;
+	static AbsVariableMap processedVariableCache;
 };
 
 #endif

Modified: trunk/ovalint/src/Analyzer.cpp
===================================================================
--- trunk/ovalint/src/Analyzer.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Analyzer.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Analyzer.cpp 4121 2007-06-22 13:55:59Z bakerj $
+// $Id: Analyzer.cpp 4605 2008-01-04 17:59:03Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -92,7 +92,7 @@
 
 	this->InitResultsDocument();
 
-	// get the definitions element in the defintions file
+	// get the definitions element in the definitions file
 	int prevIdLength = 1;
 	int curIdLength = 1;
 	DOMElement* definitionsElm = XmlCommon::FindElementNS(DocumentManager::GetDefinitionDocument(), "definitions");
@@ -129,7 +129,6 @@
 
 					Definition* def = new Definition();
 					def->Parse(definitionElm);
-					//OvalEnum::ResultEnumeration result = def->Analyze();
 					def->Analyze();
 					def->Write(Analyzer::GetResultsDefinitionsElm());					
 					prevIdLength = definitionId.length();
@@ -271,6 +270,7 @@
 		VariableValue::ClearCache();
 
 		this->FinializeResultsDocument();
+
 	} else {
 		string logMessage = "\n    No definitions found! \n";
 		cout << logMessage;
@@ -289,10 +289,10 @@
 	///////////////////////////////////////////////////////////////////////////
 	//	Print the vulnerable results
 	///////////////////////////////////////////////////////////////////////////
-	cout << "    OVAL Id                            Result" << endl;
-	cout << "    --------------------------------------------------" << endl;
-	Log::UnalteredMessage("    OVAL Id                           Result\n");
-	Log::UnalteredMessage("    --------------------------------------------------\n");
+	cout << "    OVAL Id                                 Result" << endl;
+	cout << "    -------------------------------------------------------" << endl;
+	Log::UnalteredMessage("    OVAL Id                                Result\n");
+	Log::UnalteredMessage("    -------------------------------------------------------\n");
 
 	// print each result value 
 	StringPairVector::iterator it;
@@ -331,9 +331,9 @@
 		Log::UnalteredMessage(resultStr + "\n");
 	}
 
-	cout << "    --------------------------------------------------\n" << endl;
+	cout << "    -------------------------------------------------------\n" << endl;
 	cout << "\n ** finished evaluating OVAL definitions.\n" << endl;	
-	Log::UnalteredMessage("    --------------------------------------------------\n\n");
+	Log::UnalteredMessage("    -------------------------------------------------------\n\n");
 	Log::UnalteredMessage("\n ** finished evaluating OVAL definitions.\n\n");
 
 }
@@ -341,7 +341,7 @@
 string Analyzer::ResultPairToStr(StringPair* pair) {
 
 	string resultStr = "    ";
-	resultStr.append(Common::PadString(pair->first, 35));
+	resultStr.append(Common::PadString(pair->first, 40));
 	resultStr.append(Common::PadString(pair->second, 15));
 
 	return resultStr;
@@ -457,5 +457,3 @@
 AnalyzerException::~AnalyzerException() {
 
 }
-
-

Modified: trunk/ovalint/src/Analyzer.h
===================================================================
--- trunk/ovalint/src/Analyzer.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Analyzer.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Analyzer.h 4120 2007-06-22 13:52:57Z bakerj $
+// $Id: Analyzer.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Behavior.cpp
===================================================================
--- trunk/ovalint/src/Behavior.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Behavior.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Behavior.cpp 3668 2007-01-11 18:14:16Z bakerj $
+// $Id: Behavior.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Behavior.h
===================================================================
--- trunk/ovalint/src/Behavior.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Behavior.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Behavior.h 3668 2007-01-11 18:14:16Z bakerj $
+// $Id: Behavior.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -56,12 +56,12 @@
 typedef vector < Behavior*, allocator<Behavior*> > BehaviorVector;
 
 /**
-	This class represents a behavior in teh oval definition schema
+	This class represents a behavior in the oval definition schema
 	Behaviors are used by objects to refine data collection.
 */
 class Behavior {
 public:
-	/** Create a compelete Behavior object. */
+	/** Create a complete Behavior object. */
 	Behavior(string name = "", string value = "");
 	~Behavior();
 

Modified: trunk/ovalint/src/CollectedObject.cpp
===================================================================
--- trunk/ovalint/src/CollectedObject.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/CollectedObject.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: CollectedObject.cpp 4138 2007-06-22 14:12:43Z bakerj $
+// $Id: CollectedObject.cpp 4584 2008-01-03 16:25:43Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -41,7 +41,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete CollectedObject object
+	//	Create a complete CollectedObject object
 	//
 	// -----------------------------------------------------------------------
 
@@ -153,6 +153,7 @@
 		CollectedObject* obj = iterator->second;
 		obj->Write(DocumentManager::GetSystemCharacterisitcsDocument(), AbsDataCollector::Instance()->GetSCCollectedObjectsElm());
 		delete obj;
+		obj = NULL;
 	}
 	
 	CollectedObject::collectedObjectsMap.clear();
@@ -365,16 +366,80 @@
 	this->messages.push_back(message);
 }
 
-void CollectedObject::AppendReference(Item* reference) {
-	// -----------------------------------------------------------------------
-	//	Abstract
+void CollectedObject::AppendReferencesAndComputeFlag(ItemVector* references) {
+
+	this->AppendReferences(references);
+
+	// compute the flag value for the collected obj beased on the set of items
+
+	// get counts of each status value set on the items in the list
+	int errorCnt = 0;
+	int existsCnt = 0;
+	int doesNotExistCnt = 0;
+	int notCollectedCnt = 0;
+
+	// now loop through the items and examine their status values.
+	ItemVector::iterator iterator;
+	for(iterator = references->begin(); iterator != references->end(); iterator++) {
+		Item* tmp = (*iterator);
+
+		if(tmp->GetStatus() == OvalEnum::STATUS_ERROR) {
+			errorCnt++;
+		} else if(tmp->GetStatus() == OvalEnum::STATUS_EXISTS) {
+			existsCnt++;
+		} else if(tmp->GetStatus() == OvalEnum::STATUS_DOES_NOT_EXIST) {
+			doesNotExistCnt++;
+		} else if(tmp->GetStatus() == OvalEnum::STATUS_NOT_COLLECTED) {
+			notCollectedCnt++;
+		}
+	}
+
+	// status values -  error, exists, does not exist, not collected
+
+	// Flag == error
+	// if the set contains any item marked as error
+	if(errorCnt > 0) {
+		this->SetFlag(OvalEnum::FLAG_ERROR);
+
+	// Flag == complete
+	// if the set contains
+	//   at least one item with a status of exists and
+	//   no items with a status of not collected and
+	//   no items with a status of error
+	} else if(errorCnt == 0 && notCollectedCnt == 0 && existsCnt > 0) {
+		this->SetFlag(OvalEnum::FLAG_COMPLETE);
+
+	// Flag == incomplete
+	// if the set contains
+	//  one ore more items with a status of not collected
+	//  no items with a status of error
+	} else if(errorCnt == 0 && notCollectedCnt > 0) {
+		this->SetFlag(OvalEnum::FLAG_INCOMPLETE);
+
+	// Flag == does not exist
+	// if the set is empty, or the set contains
+	//   no items with a status of exists
+	//   no items with a status of error
+	//   no items with a status of not collected
+	//   all items have a status of does not exist
+	} else if((errorCnt == 0 && notCollectedCnt == 0 && existsCnt == 0) || references->size() == 0) {
+		this->SetFlag(OvalEnum::FLAG_DOES_NOT_EXIST);
+
+	// Flag == not collected
+	// if all items in the set have a status of not collected and
+	// the set has atleast one item
 	//
-	//	Add an reference to the end of the references vector
-	//	Assign the items id before adding to vector.
+	// NOTE: This condition is currently handled elsewhere in 
+	// the code see: CollectedObject* AbsObjectCollector::ProcessObject(Object* object)
 	//
-	// -----------------------------------------------------------------------
+	} else if(references->size() == notCollectedCnt && notCollectedCnt > 0) {
+		this->SetFlag(OvalEnum::FLAG_DOES_NOT_EXIST);
+	}
 
-	this->references.push_back(reference);
+	// Flag == not applicable
+	// 
+	// handled elsewhere in the code see: CollectedObject* AbsObjectCollector::ProcessObject(Object* object)
+
 }
 
 void CollectedObject::AppendReferences(ItemVector* references) {
@@ -396,7 +461,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Add a varaible value to the end of teh variable values vector
+	//	Add a varaible value to the end of the variable values vector
 	//
 	// -----------------------------------------------------------------------
 
@@ -559,24 +624,10 @@
 //								CollectedObjectException Class							  //	
 //****************************************************************************************//
 CollectedObjectException::CollectedObjectException(string errMsgIn, int severity, Exception* ex) : Exception(errMsgIn, severity, ex) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the error message and then set the severity to ERROR_FATAL. This is 
-	//	done with the explicit call to the Exception class constructor that 
-	//	takes a single string param.
-	//
-	// -----------------------------------------------------------------------
 
 }
 
 CollectedObjectException::~CollectedObjectException() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Do nothing for now
-	//
-	// -----------------------------------------------------------------------
 
 }
 

Modified: trunk/ovalint/src/CollectedObject.h
===================================================================
--- trunk/ovalint/src/CollectedObject.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/CollectedObject.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: CollectedObject.h 4138 2007-06-22 14:12:43Z bakerj $
+// $Id: CollectedObject.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -130,12 +130,18 @@
 	void SetVersion(int version);
 
 	void AppendOvalMessage(OvalMessage* message);
-	void AppendReference(Item* reference);
-	void AppendReferences(ItemVector* references);
+
+	/** Creates references to the set of input items and computes the flag value of this object based on the set. */
+	void AppendReferencesAndComputeFlag(ItemVector* references);
+	
 	void AppendVariableValue(VariableValue* variableValue);
 	void AppendVariableValues(VariableValueVector* variableValues);
     
 private:
+
+	/** Creates references to the set of input items. */
+	void AppendReferences(ItemVector* references);
+
 	CollectedObject(string id = "", string comment = "", int version = 1, int variableInstance = 0, OvalEnum::Flag flag = OvalEnum::FLAG_ERROR);
 	/** Ensure that a given variable value for a variable id is only written once. */
 	bool IsWritten(StringPairVector* varIdValuePairs, string varId, string value);
@@ -161,6 +167,11 @@
 */
 class CollectedObjectException : public Exception {
 	public:
+		/** 
+			Set the error message and then set the severity to ERROR_FATAL. This is 
+			done with the explicit call to the Exception class constructor that 
+	 		takes a single string param.
+		*/
 		CollectedObjectException(string errMsgIn = "", int severity = ERROR_FATAL, Exception *ex = NULL);
 		~CollectedObjectException();
 };

Modified: trunk/ovalint/src/CollectedSet.cpp
===================================================================
--- trunk/ovalint/src/CollectedSet.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/CollectedSet.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: CollectedSet.cpp 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: CollectedSet.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -141,7 +141,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Add a varaible value to the end of teh variable values vector
+	//	Add a varaible value to the end of the variable values vector
 	//
 	// -----------------------------------------------------------------------
 
@@ -152,7 +152,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Add a varaible value to the end of teh variable values vector
+	//	Add a varaible value to the end of the variable values vector
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/CollectedSet.h
===================================================================
--- trunk/ovalint/src/CollectedSet.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/CollectedSet.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: CollectedSet.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: CollectedSet.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Common.cpp
===================================================================
--- trunk/ovalint/src/Common.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Common.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Common.cpp 4196 2007-06-26 20:08:22Z bakerj $
+// $Id: Common.cpp 4606 2008-01-04 18:01:23Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -31,7 +31,6 @@
 
 #include "Common.h"
 
-
 UniqueStringVector::UniqueStringVector(StringVector* strings) {
 	// caller is responsible for providing a ptr to a StringVector
 	// caller is responsible for cleaning up after the StringVector
@@ -87,7 +86,8 @@
 bool   Common::verifyXMLfile		= true;
 
 bool          Common::limitEvaluationToDefinitionIds = false;
-StringVector* Common::definitionIds                  = NULL;
+string        Common::definitionIds                  = "";
+string        Common::definitionIdsFile              = "";
 
 
 #ifdef WIN32
@@ -152,10 +152,14 @@
 	return Common::noXsl;
 }
 
-StringVector* Common::GetDefinitionIds() {
+string Common::GetDefinitionIdsString() {
 	return Common::definitionIds;
 }
 
+string Common::GetDefinitionIdsFile() {
+	return Common::definitionIdsFile;
+}
+
 bool Common::GetLimitEvaluationToDefinitionIds() {
 	return Common::limitEvaluationToDefinitionIds;
 }
@@ -225,10 +229,79 @@
 	Common::noXsl = noXsl;
 }
 
-void Common::SetDefinitionIds(string definitionIdsString) {
+void Common::SetDefinitionIdsString(string definitionIdsString) {
+	Common::definitionIds = definitionIdsString;
+}
 
+void Common::SetDefinitionIdsFile(string definitionIdsFile) {
+	Common::definitionIdsFile = definitionIdsFile;
+}
+
+void Common::SetLimitEvaluationToDefinitionIds(bool set) {
+	Common::limitEvaluationToDefinitionIds = set;
+}
+
+void Common::SetDoDefinitionSchematron(bool set) {
+	Common::doDefinitionSchematron = set;
+}
+
+void Common::SetDefinitionSchematronPath(string definitionSchematronPath) {
+	Common::definitionSchematronPath = definitionSchematronPath;
+}
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  Public Members  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+
+StringVector* Common::ParseDefinitionIdsFile() {
+		
+	string definitinIdsFile = Common::GetDefinitionIdsFile();
+
+	Log::Debug("Parsing definition id file for limited definition evaluation. \"" + definitinIdsFile + "\"");
+
+	string logMessage = "     - reading input definition ids from " + definitinIdsFile + "\n";
+	cout << logMessage;
+	Log::UnalteredMessage(logMessage);
+
+	StringVector* definitionIds = NULL;
+	if(definitinIdsFile.compare("") == 0) {
+		throw Exception("Error: An empty string was provided as the path to the definition ids file to parse.");
+	} else {
+		
+		// parse the file to get the set of ids
+		DOMElement* definitionsElm = XmlCommon::FindElementNS(DocumentManager::GetEvaluationIdDocument(), "evalutation-definition-ids");
+		if(definitionsElm != NULL) {
+			
+			definitionIds = new StringVector();
+
+			DOMNodeList* definitionElms = definitionsElm->getChildNodes();
+			unsigned int i = 0;
+			while(i < definitionElms->getLength()) {
+				DOMNode* tmpNode = definitionElms->item(i);
+				if (tmpNode->getNodeType() == DOMNode::ELEMENT_NODE) {
+					DOMElement *definitionElm = (DOMElement*)tmpNode;
+					
+					// get the definition id and check the cache
+					string definitionId = XmlCommon::GetDataNodeValue(definitionElm);
+					definitionIds->push_back(definitionId);
+				}
+				i++;
+			}
+		}
+	}
+
+	return definitionIds;
+}
+
+StringVector* Common::ParseDefinitionIdsString() {
+	string definitionIdsString = Common::GetDefinitionIdsString();
+
 	Log::Debug("Parsing definition id string for limited definition evaluation. \"" + definitionIdsString + "\"");
 
+	string logMessage = "     - parsing input definition ids to evaluate\n";
+	cout << logMessage;
+	Log::UnalteredMessage(logMessage);
+
 	// validate the format of the string
 	REGEX* regex = new REGEX();
 	string pattern = "oval:[A-Za-z0-9_\\-\\.]+:def:[1-9][0-9]*(,oval:[A-Za-z0-9_\\-\\.]+:def:[1-9][0-9]*)*";
@@ -236,8 +309,8 @@
 		throw Exception("Error: Invalid parameter format. Expected a comma seperated list of definition ids. No spaces are allowed.");
 	}
 
-	// break the comma seperated string into defintion ids.
-	Common::definitionIds = new StringVector();
+	// break the comma seperated string into definition ids.
+	StringVector* definitionIds = new StringVector();
 	char delm = ',';
 
 	char* theString = (char*)malloc(sizeof(char*)*(definitionIdsString.length()));
@@ -274,33 +347,11 @@
 	if(theString != NULL) {
 		free(theString);
 	}
-}
 
-void Common::SetLimitEvaluationToDefinitionIds(bool set) {
-	Common::limitEvaluationToDefinitionIds = set;
+	return definitionIds;
 }
 
-void Common::SetDoDefinitionSchematron(bool set) {
-	Common::doDefinitionSchematron = set;
-}
-
-void Common::SetDefinitionSchematronPath(string definitionSchematronPath) {
-	Common::definitionSchematronPath = definitionSchematronPath;
-}
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  Public Members  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
-
-string Common::PadString(string strIn, unsigned int desiredLength)
-{
-	//------------------------------------------------------------------------------------//
-	//  ABSTRACT
-	//
-	//  Pad the provided string with spaces so that it is the desired length.
-	//
-	//------------------------------------------------------------------------------------//
-
+string Common::PadString(string strIn, unsigned int desiredLength) {
 	while(strIn.length() < desiredLength) {
 		strIn.append(" ");
 	}
@@ -309,12 +360,6 @@
 }
 
 string Common::PadStringWithChar(string strIn, char pad, unsigned int desiredLength) {
-	//------------------------------------------------------------------------------------//
-	//  ABSTRACT
-	//
-	//  Pad the provided string with the specified char so that it is the desired length.
-	//
-	//------------------------------------------------------------------------------------//
 
 	while(strIn.length() < desiredLength) {
 		strIn = strIn + pad;

Modified: trunk/ovalint/src/Common.h
===================================================================
--- trunk/ovalint/src/Common.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Common.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Common.h 4196 2007-06-26 20:08:22Z bakerj $
+// $Id: Common.h 4646 2008-01-15 14:25:59Z bworrell $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -42,10 +42,13 @@
 #include "Exception.h"
 #include "Log.h"
 #include "REGEX.h"
+#include "XmlCommon.h"
+#include "DocumentManager.h"
 
 #include <iostream>
 #include <string>
 #include <vector>
+#include <set>
 #include <time.h>
 #include <sstream>
 #include <algorithm>
@@ -58,7 +61,9 @@
 */
 typedef vector < string, allocator<string> > StringVector;
 
-/**  */
+typedef set < string > StringSet;
+
+
 class UniqueStringVector {
 
 public:
@@ -73,6 +78,7 @@
 	StringVector* uniqueStrings;
 };
 
+
 /**
 	A vector for storing integers.
 */
@@ -106,10 +112,11 @@
 		static string	GetXSLFilename();
 		static string	GetXSLOutputFilename();
 		static bool     GetNoXsl();
-		static StringVector* GetDefinitionIds();
+		static string   GetDefinitionIdsString();
 		static bool     GetLimitEvaluationToDefinitionIds();
 		static bool     GetDoDefinitionSchematron();
 		static string   GetDefinitionSchematronPath();
+		static string   GetDefinitionIdsFile();
 
 		static void		SetDataFile(string);
 		static void		SetGenerateMD5(bool);
@@ -123,13 +130,17 @@
 		static void 	SetXSLFilename(string);
 		static void		SetXSLOutputFilename(string);
 		static void     SetNoXsl(bool);
-		static void     SetDefinitionIds(string definitionIdsString);
+		static void     SetDefinitionIdsString(string definitionIdsString);
 		static void     SetLimitEvaluationToDefinitionIds(bool set);
 		static void     SetDoDefinitionSchematron(bool set);
 		static void     SetDefinitionSchematronPath(string definitionSchematronPath);
+		static void     SetDefinitionIdsFile(string definitionIdsFile);
 
-
+		static StringVector* ParseDefinitionIdsFile();
+		static StringVector* ParseDefinitionIdsString();
+		/** Pad the provided string with spaces so that it is the desired length. */
 		static string	PadString(string, unsigned int);
+		/** Pad the provided string with the specified char so that it is the desired length. */
 		static string	PadStringWithChar(string, char, unsigned int);
 		static string	SwitchChar(string stringIn, string oldChr, string newChr);
 		static string	ToString(int);
@@ -156,9 +167,10 @@
 		static bool useProvidedData;
 		static bool verifyXMLfile;
 		static bool limitEvaluationToDefinitionIds;
-		static StringVector* definitionIds;
+		static string definitionIds;
 		static bool doDefinitionSchematron;
 		static string definitionSchematronPath;
+		static string definitionIdsFile;
 };
 
 /** 

Modified: trunk/ovalint/src/ComponentFactory.cpp
===================================================================
--- trunk/ovalint/src/ComponentFactory.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ComponentFactory.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ComponentFactory.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ComponentFactory.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ComponentFactory.h
===================================================================
--- trunk/ovalint/src/ComponentFactory.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ComponentFactory.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ComponentFactory.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ComponentFactory.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ComponentValue.cpp
===================================================================
--- trunk/ovalint/src/ComponentValue.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ComponentValue.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ComponentValue.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ComponentValue.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -35,12 +35,6 @@
 //								ComponentValue Class									  //	
 //****************************************************************************************//
 ComponentValue::ComponentValue(OvalEnum::Flag flag, StringVector* values, StringVector* msgs) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a compelete ComponentValue object
-	//
-	// -----------------------------------------------------------------------
 
 	this->SetFlag(flag);
 	this->SetValues(values);
@@ -48,15 +42,11 @@
 }
 
 ComponentValue::~ComponentValue() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	make sure the vectors are deleted
-	//
-	// -----------------------------------------------------------------------
 
 	delete values;
+	values = NULL;
 	delete msgs;
+	msgs = NULL;
 
 }
 
@@ -163,4 +153,6 @@
 	for(iterator = newMsgs->begin(); iterator != newMsgs->end(); iterator++) {
 		this->AppendMessage((*iterator));
 	}
-}
\ No newline at end of file
+}
+
+

Modified: trunk/ovalint/src/ComponentValue.h
===================================================================
--- trunk/ovalint/src/ComponentValue.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ComponentValue.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ComponentValue.h 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: ComponentValue.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -40,13 +40,15 @@
 
 /**
 	This class represents a the value of a variable component.
-	Component values are used in when computing teh values of Variables.
+	Component values are used in when computing the values of Variables.
 	Each Component has a Vector of string values and a flag used to indicate 
 	the status of the component.
 */
 class ComponentValue {
 public:
+	/** Create a complete ComponentValue object */
 	ComponentValue(OvalEnum::Flag flag = OvalEnum::FLAG_ERROR, StringVector* value = new StringVector(), StringVector* msgs = new StringVector());
+	/** make sure the vectors are deleted. */
 	~ComponentValue();
 
 	StringVector* GetValues();

Modified: trunk/ovalint/src/ConcatFunction.cpp
===================================================================
--- trunk/ovalint/src/ConcatFunction.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ConcatFunction.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ConcatFunction.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ConcatFunction.cpp 4588 2008-01-03 16:28:44Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete ConcatFunction object
+	//	Create a complete ConcatFunction object
 	//
 	// -----------------------------------------------------------------------
 }
@@ -160,7 +160,9 @@
 		for(varIterator = tmp->begin(); varIterator != tmp->end(); varIterator++) {
 			values->push_back((*varIterator));
 		}
-		// TODO - do i need this delete call
+		// BUG - These can ot currenrtly be deleted. 
+		// The code is no consistant here. In places a new vector is returned
+		// in others a reference to a vector that is managed by other code is returned.
 		//delete tmp;
 		//tmp = NULL;
 	}

Modified: trunk/ovalint/src/ConcatFunction.h
===================================================================
--- trunk/ovalint/src/ConcatFunction.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ConcatFunction.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ConcatFunction.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ConcatFunction.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ConstantVariable.cpp
===================================================================
--- trunk/ovalint/src/ConstantVariable.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ConstantVariable.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ConstantVariable.cpp 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: ConstantVariable.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete ConstantVariable
+	//	Create a complete ConstantVariable
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/ConstantVariable.h
===================================================================
--- trunk/ovalint/src/ConstantVariable.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ConstantVariable.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ConstantVariable.h 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: ConstantVariable.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Criteria.cpp
===================================================================
--- trunk/ovalint/src/Criteria.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Criteria.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Criteria.cpp 3870 2007-03-29 18:11:35Z bakerj $
+// $Id: Criteria.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete Criteria object
+	//	Create a complete Criteria object
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/Criteria.h
===================================================================
--- trunk/ovalint/src/Criteria.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Criteria.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Criteria.h 4122 2007-06-22 14:02:20Z bakerj $
+// $Id: Criteria.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Criterion.cpp
===================================================================
--- trunk/ovalint/src/Criterion.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Criterion.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Criterion.cpp 3897 2007-04-18 14:25:34Z bakerj $
+// $Id: Criterion.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Criterion.h
===================================================================
--- trunk/ovalint/src/Criterion.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Criterion.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Criterion.h 4125 2007-06-22 14:05:38Z bakerj $
+// $Id: Criterion.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -43,12 +43,12 @@
 class AbsCriteria;
 
 /**
-	This class represenets a criterion in an oval defintion.
+	This class represenets a criterion in an oval definition.
 */
 class Criterion : public AbsCriteria {
 
 public:
-	/** Create a compelete Criterion object. */
+	/** Create a complete Criterion object. */
 	Criterion(bool negate = false, OvalEnum::ResultEnumeration result = OvalEnum::RESULT_ERROR, Test* testRef = NULL);
 	/** Empty destructor. */
 	~Criterion();

Modified: trunk/ovalint/src/Definition.cpp
===================================================================
--- trunk/ovalint/src/Definition.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Definition.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Definition.cpp 4125 2007-06-22 14:05:38Z bakerj $
+// $Id: Definition.cpp 4604 2008-01-04 13:47:42Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -31,19 +31,12 @@
 
 #include "Definition.h"
 
-//DefinitionVector Definition::processedDefinitions;
 DefinitionMap Definition::processedDefinitionsMap;
 
 //****************************************************************************************//
 //								Definition Class										  //	
 //****************************************************************************************//
 Definition::Definition() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a compelete Definition object
-	//
-	// -----------------------------------------------------------------------
 
 	this->SetId("");
 	this->SetCriteria(NULL);
@@ -55,12 +48,6 @@
 }
 
 Definition::~Definition() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Call delete on the criteria element
-	//
-	// -----------------------------------------------------------------------
 
 	delete this->GetCriteria();
 }
@@ -70,178 +57,79 @@
 // ***************************************************************************************	//
 
 Criteria* Definition::GetCriteria() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the criteria field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->criteria;
 }
 
 void Definition::SetCriteria(Criteria* criteria) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the criteria field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->criteria = criteria;
 }
 
 string Definition::GetId() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the id field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->id;
 }
 
 void Definition::SetId(string id) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the id field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->id = id;
 }
 
 OvalEnum::ResultEnumeration Definition::GetResult() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the result field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->result;
 }
 
 void Definition::SetResult(OvalEnum::ResultEnumeration result) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the result field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->result = result;
 }
 
 int Definition::GetVariableInstance() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the variableInstance field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->variableInstance;
 }
 
 void Definition::SetVariableInstance(int variableInstance) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the variableInstance field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->variableInstance = variableInstance;
 }
 
 int Definition::GetVersion() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the version field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->version;
 }
 
 void Definition::SetVersion(int version) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the version field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->version = version;
 }
 
 bool Definition::GetWritten() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the written field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->written;
 }
 
 void Definition::SetWritten(bool written) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the written field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->written = written;
 }
 
 bool Definition::GetAnalyzed() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the analyzed field's value
-	//
-	// -----------------------------------------------------------------------
 
 	return this->analyzed;
 }
 
 void Definition::SetAnalyzed(bool analyzed) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return the analyzed field's value
-	//
-	// -----------------------------------------------------------------------
 
 	this->analyzed = analyzed;
 }
 
 Definition* Definition::SearchCache(string id) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	search the cache of definition for the specifed definition. 
-	//	return NULL if not found
-	//
-	// -----------------------------------------------------------------------
 
 	Definition* cachedDef = NULL;
 
-	//DefinitionVector::iterator iterator;
-	//for(iterator = Definition::processedDefinitions.begin(); iterator != Definition::processedDefinitions.end(); iterator++) {
-	//	if((*iterator)->GetId().compare(id) == 0) {
-	//		cachedDef = (*iterator);
-	//		break;
-	//	}
-	//}
-
 	DefinitionMap::iterator iterator;
 	iterator = Definition::processedDefinitionsMap.find(id);
 	if(iterator != Definition::processedDefinitionsMap.end()) {
@@ -252,20 +140,7 @@
 }
 
 void Definition::ClearCache() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	clear the cahce of processed defintions
-	// -----------------------------------------------------------------------
 
-	//Definition* def = NULL;
-	//while(Definition::processedDefinitions.size() != 0) {
-	//  	def = Definition::processedDefinitions[Definition::processedDefinitions.size()-1];
-	//  	Definition::processedDefinitions.pop_back();
-	//  	delete def;
-	//  	def = NULL;
-	//}
-
 	DefinitionMap::iterator iterator;
 	for(iterator = Definition::processedDefinitionsMap.begin(); iterator != Definition::processedDefinitionsMap.end(); iterator++) {
 		
@@ -277,13 +152,6 @@
 }
 
 void Definition::Write(DOMElement* parentElm) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	writes a Definition element
-	//	calls criteria->Write() 
-	//
-	// -----------------------------------------------------------------------
 
 	if(!this->GetWritten()) {
 		this->SetWritten(true);
@@ -311,14 +179,6 @@
 }
 
 void Definition::Parse(DOMElement* definitionElm) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Make sure a definition is only parsed once.
-	//	parses Definition elm to a Definition obj
-	//	calls Criteria->Parse() on the Criteria elm
-	//
-	// -----------------------------------------------------------------------
 
 	// get id
 	string id = XmlCommon::GetAttributeByName(definitionElm, "id");
@@ -344,13 +204,6 @@
 }
 
 OvalEnum::ResultEnumeration Definition::Analyze() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	make sure not previously analyzed.
-	//	calls Criteria->Analyze()
-	//	saves and returns the result
-	// -----------------------------------------------------------------------
 
 	if(!this->GetAnalyzed()) {
 
@@ -383,11 +236,6 @@
 }
 
 OvalEnum::ResultEnumeration Definition::NotEvaluated() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the result to NOT_EVALUATED
-	// -----------------------------------------------------------------------
 
 	if(!this->GetAnalyzed()) {
 

Modified: trunk/ovalint/src/Definition.h
===================================================================
--- trunk/ovalint/src/Definition.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Definition.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Definition.h 3872 2007-03-29 18:13:38Z bakerj $
+// $Id: Definition.h 4604 2008-01-04 13:47:42Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -64,42 +64,87 @@
 /**
 	This class represents an oval definition.
 	The Definition class provides methods for parsing a definition in an
-	oval defintions files, analyzing that definitions, and then writing that defition
+	oval definitions files, analyzing that definitions, and then writing that defition
 	with its analysis result to an oval results file.
 */
 class Definition {
 
 public:
+
+	/** Create a complete Definition object */
 	Definition();
+	/** 
+		Destroy the object. 
+		Call delete on the criteria element.
+	*/
 	~Definition();
 
+	/** 
+		Writes a Definition element to the results document.
+		Calls criteria->Write()
+	*/
 	void Write(DOMElement* parent);
+	/**
+		Parses a definition from a oval-definitions document.
+		Make sure a definition is only parsed once.
+		parses Definition elm to a Definition obj
+		calls Criteria->Parse() on the Criteria elm
+	*/
 	void Parse(DOMElement* DefinitionElm);
+
+	/** 
+		Analyze the definition and return the result.
+		Make sure not previously analyzed.
+		calls Criteria->Analyze()
+		saves and returns the result.
+	*/
 	OvalEnum::ResultEnumeration Analyze();
+
+	/** Set the result to NOT_EVALUATED. */
 	OvalEnum::ResultEnumeration NotEvaluated();
 
+	/** Return the version field's value. */
 	int GetVersion();
+	/** Set the version field's value. */
 	void SetVersion(int version);
 	
+	/** Return the variableInstance field's value. */
 	int GetVariableInstance();
+	/** Set the variableInstance field's value. */
 	void SetVariableInstance(int variableInstance);
     
+	/** Return the result field's value. */
 	OvalEnum::ResultEnumeration GetResult();
+	/** Set the result field's value .*/
 	void SetResult(OvalEnum::ResultEnumeration result);
 
+	/** Return the criteria field's value. */
 	Criteria* GetCriteria();
+	/** Set the criteria field's value. */
 	void SetCriteria(Criteria* criteria);
     
+	/** Return the id field's value. */
 	string GetId();
+	/** Set the id field's value. */
 	void SetId(string id);
 
+	/** Return the written field's value. */
 	bool GetWritten();
+	/** Set the written field's value. */
 	void SetWritten(bool written);
 
+	/** Return the analyzed field's value. */
 	bool GetAnalyzed();
+	/** Set the analyzed field's value. */
 	void SetAnalyzed(bool analyzed);
 
+	/** 
+		Search the cache of definitions for the specifed definition. 
+		@return Returns the cached Definition or NULL if not found.
+	*/
 	static Definition* SearchCache(string id);
+
+	/** Clear the cache of processed definitions. */
 	static void ClearCache();
 
 private:

Modified: trunk/ovalint/src/DocumentManager.cpp
===================================================================
--- trunk/ovalint/src/DocumentManager.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/DocumentManager.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: DocumentManager.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: DocumentManager.cpp 4600 2008-01-03 16:49:12Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,6 +39,7 @@
 XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* DocumentManager::systemCharacterisitcsDoc = NULL;
 XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* DocumentManager::resultDoc = NULL;
 XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* DocumentManager::externalVariableDoc = NULL;
+XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* DocumentManager::evaluationIdDoc = NULL;
 
 // ***************************************************************************************	//
 //								Public members												//
@@ -101,6 +102,24 @@
 	return DocumentManager::externalVariableDoc;
 }
 
+XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* DocumentManager::GetEvaluationIdDocument() {
+
+	if(DocumentManager::evaluationIdDoc == NULL) {
+		try {
+			XmlProcessor *processor = XmlProcessor::Instance();
+			DocumentManager::evaluationIdDoc = processor->ParseFile(Common::GetDefinitionIdsFile());
+		} catch (Exception ex) {
+			Log::Debug("Error while parsing evaluation id file: " + Common::GetDefinitionIdsFile() + " " + ex.GetErrorMessage());
+			throw ex;
+		} catch (...) {
+			Log::Debug("An unknown error occured while parsing evaluation id file: " + Common::GetDefinitionIdsFile());
+			throw Exception("An unknown error occured while parsing evaluation id file: " + Common::GetDefinitionIdsFile());
+		}
+	}
+
+	return DocumentManager::evaluationIdDoc;
+}
+
 void DocumentManager::SetSystemCharacterisitcsDocument(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* sc) {
 	// -----------------------------------------------------------------------
 	//	Abstract

Modified: trunk/ovalint/src/DocumentManager.h
===================================================================
--- trunk/ovalint/src/DocumentManager.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/DocumentManager.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: DocumentManager.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: DocumentManager.h 4602 2008-01-03 17:29:35Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -58,6 +58,12 @@
 	static XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* GetResultDocument();
 	static XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* GetExternalVariableDocument();
 
+	/** Get the evaluation id docuement.
+		If the evaluation id doc has not been parsed parse it.
+		@return Returns a DOMDocument.
+	*/
+	static XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* GetEvaluationIdDocument();
+
 	static void SetDefinitionDocument(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument*);
 	static void SetSystemCharacterisitcsDocument(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument*);
 	static void SetResultDocument(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument*);
@@ -68,6 +74,7 @@
 	static XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* definitionDoc;
 	static XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* resultDoc;
 	static XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* externalVariableDoc;
+	static XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* evaluationIdDoc;
 };
 
 #endif

Modified: trunk/ovalint/src/EntityComparator.cpp
===================================================================
--- trunk/ovalint/src/EntityComparator.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/EntityComparator.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: EntityComparator.cpp 4200 2007-06-26 20:38:26Z bakerj $
+// $Id: EntityComparator.cpp 4623 2008-01-09 15:07:03Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -485,11 +485,7 @@
 }
 
 OvalEnum::ResultEnumeration EntityComparator::CompareVersion(OvalEnum::Operation op, string defValue, string scValue) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	compare two version values based on the specified operation
-	// -----------------------------------------------------------------------
+
 	OvalEnum::ResultEnumeration result = OvalEnum::RESULT_ERROR;
 	
 	// Invalid ops first
@@ -597,6 +593,10 @@
 		}
 	}
 
+	// delete the vectors of integers
+	delete defValues;
+	delete scValues;
+
 	return result;
 }
 
@@ -608,7 +608,7 @@
 	
 	IntVector* tokens = new IntVector();
 
-	unsigned int index = versionStr.find_first_not_of("0123456789");
+	int index = versionStr.find_first_not_of("0123456789");
 	if(index == string::npos) {
 		// no delmiter found and not an empty string.
 		// simply try to convert the versionStr to an int and return it as the only token.
@@ -635,7 +635,7 @@
 				string tokenStr = token;
 				
 				// check that the token is an integer
-				unsigned int nonInt = tokenStr.find_first_not_of("0123456789");
+				int nonInt = tokenStr.find_first_not_of("0123456789");
 				if(nonInt != string::npos) {
 					if(theString != NULL) {
 						free(theString);
@@ -654,7 +654,6 @@
 			}
 		}
 
-
 		if(theString != NULL) {
 			free(theString);
 		}

Modified: trunk/ovalint/src/EntityComparator.h
===================================================================
--- trunk/ovalint/src/EntityComparator.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/EntityComparator.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: EntityComparator.h 4200 2007-06-26 20:38:26Z bakerj $
+// $Id: EntityComparator.h 4623 2008-01-09 15:07:03Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 using namespace std;
 
 /**
-	This class is a container for all comparison methods between defintion entities and item entities.
+	This class is a container for all comparison methods between definition entities and item entities.
 */
 class EntityComparator {
 public:
@@ -53,6 +53,10 @@
 	static OvalEnum::ResultEnumeration CompareInteger(OvalEnum::Operation op, string defValue, string scValue);
 	static OvalEnum::ResultEnumeration CompareIosVersion(OvalEnum::Operation op, string defValue, string scValue);
 	static OvalEnum::ResultEnumeration CompareString(OvalEnum::Operation op, string defValue, string scValue);
+
+	/** Compare two version strings based on the input operation. 
+		@return Returns the result of the comparison.
+	*/
 	static OvalEnum::ResultEnumeration CompareVersion(OvalEnum::Operation op, string defValue, string scValue);
 
 private:

Modified: trunk/ovalint/src/Exception.cpp
===================================================================
--- trunk/ovalint/src/Exception.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Exception.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Exception.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: Exception.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//  ABSTRACT
 	//
-	//  A simple constructor that sets the error message and the severity ot
+	//  A simple constructor that sets the error message and the severity of
 	//	this exception to the specified values
 	//
 	// -----------------------------------------------------------------------

Modified: trunk/ovalint/src/Exception.h
===================================================================
--- trunk/ovalint/src/Exception.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Exception.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Exception.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: Exception.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ExtendedDefinition.cpp
===================================================================
--- trunk/ovalint/src/ExtendedDefinition.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ExtendedDefinition.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ExtendedDefinition.cpp 3874 2007-03-29 18:15:33Z bakerj $
+// $Id: ExtendedDefinition.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete ExtendedDefinition object
+	//	Create a complete ExtendedDefinition object
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/ExtendedDefinition.h
===================================================================
--- trunk/ovalint/src/ExtendedDefinition.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ExtendedDefinition.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ExtendedDefinition.h 4140 2007-06-22 14:13:33Z bakerj $
+// $Id: ExtendedDefinition.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ExternalVariable.cpp
===================================================================
--- trunk/ovalint/src/ExternalVariable.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ExternalVariable.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ExternalVariable.cpp 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: ExternalVariable.cpp 4607 2008-01-04 18:02:14Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,17 +39,13 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete ExternalVariable
+	//	Create a complete ExternalVariable
 	//
 	// -----------------------------------------------------------------------
 
 }
 
 ExternalVariable::~ExternalVariable() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	// -----------------------------------------------------------------------
 
 }
 
@@ -127,14 +123,6 @@
 }
 
 void ExternalVariable::ComputeValue() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Fetch the variable from the external-variables.xml file.
-	//	Then get each value associated with the variable.
-	//	Then validate each value then create a VariableValue.
-	//	
-	// -----------------------------------------------------------------------
 
 	// get the external variables file
 	XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* externalVariableDoc = NULL;
@@ -162,7 +150,7 @@
 		if(this->GetDatatype() != externalDatatype) {
 			
 			this->SetFlag(OvalEnum::FLAG_ERROR);
-			this->AppendMessage("Error, the specified external variable has the wrong datatype. Expected datatype=" + OvalEnum::DatatypeToString(this->GetDatatype()) + " found datatype=" + OvalEnum::DatatypeToString(externalDatatype) + ".");
+			this->AppendMessage("Error, the specified external variable (" + this->GetId() + ") in the supplied external variable document has the wrong datatype. The variable in the oval-definition document expected datatype=" + OvalEnum::DatatypeToString(this->GetDatatype()) + ". The external variable in the supplied variable document has datatype=" + OvalEnum::DatatypeToString(externalDatatype) + ".");
 			return;
 
 		} else {
@@ -198,7 +186,6 @@
 			this->SetFlag(OvalEnum::FLAG_COMPLETE);
 		}
 	}
-
 }
 
 bool ExternalVariable::ValidateValue(OvalEnum::Datatype datatype, string externalValue) {

Modified: trunk/ovalint/src/ExternalVariable.h
===================================================================
--- trunk/ovalint/src/ExternalVariable.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ExternalVariable.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ExternalVariable.h 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: ExternalVariable.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -50,6 +50,10 @@
 
 	void Parse(DOMElement* externalVariableElm);
 
+	/** Fetch the variable from the external-variables.xml file.
+		Then get each value associated with the variable.
+		Then validate each value then create a VariableValue. 
+	*/
 	void ComputeValue();
 
 	/** Validate that a given external variable value matches the possible values and possible restrictions for this ExternalVariable. */

Modified: trunk/ovalint/src/Filter.cpp
===================================================================
--- trunk/ovalint/src/Filter.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Filter.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Filter.cpp 4140 2007-06-22 14:13:33Z bakerj $
+// $Id: Filter.cpp 4596 2008-01-03 16:44:54Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -37,12 +37,6 @@
 //									Filter Class										  //	
 //****************************************************************************************//
 Filter::Filter(string id) : AbsState() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a compelete State object
-	//
-	// -----------------------------------------------------------------------
 
 	// get the specified state element
 	DOMElement* statesElm = XmlCommon::FindElementNS(DocumentManager::GetDefinitionDocument(), "states");
@@ -51,34 +45,31 @@
 }
 
 Filter::Filter(OvalEnum::Operator myOperator, int version) : AbsState(myOperator, version)  {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a compelete State object
-	//
-	// -----------------------------------------------------------------------
 
 }
 
 Filter::Filter(string id, string name, string xmlns, OvalEnum::Operator myOperator, int version) : AbsState(id, name, xmlns, myOperator, version) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a compelete State object
-	//
-	// -----------------------------------------------------------------------
 
 }
 
 Filter::~Filter() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//
-	// -----------------------------------------------------------------------
+
 }
 
 // ***************************************************************************************	//
+//								 Public static members										//
+// ***************************************************************************************	//
+Filter* Filter::GetFilter(string stateId) {
+	
+	Filter* tmpFilter = Filter::SearchCache(stateId);
+	if(tmpFilter == NULL) {
+		tmpFilter = new Filter(stateId);
+		Filter::Cache(tmpFilter);
+	}
+	return tmpFilter;
+}
+
+// ***************************************************************************************	//
 //								 Public members												//
 // ***************************************************************************************	//
 bool Filter::Analyze(Item* item) {
@@ -129,6 +120,8 @@
 					// call FilterEntity->analyze method
 					filterElmResults.push_back(filterElm->Analyze(scElm));
 				}
+				scElements->clear();
+				delete scElements;
 
 				// compute the overall filter result
 				OvalEnum::ResultEnumeration filterResult = OvalEnum::RESULT_UNKNOWN; // default to unknown;
@@ -156,12 +149,6 @@
 }
 
 void Filter::Parse(DOMElement* stateElm) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Parse the provided state from a defintion file into an Filter object
-	//
-	// -----------------------------------------------------------------------
 
 	this->SetName(XmlCommon::GetElementName(stateElm));
 	this->SetId(XmlCommon::GetAttributeByName(stateElm, "id"));
@@ -199,24 +186,9 @@
 }
 
 Filter* Filter::SearchCache(string id) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	search the cache of Filters for the specifed filter. 
-	//	return NULL if not found
-	//
-	// -----------------------------------------------------------------------
 
 	AbsState* cachedFilter = NULL;
 
-	//AbsStateVector::iterator iterator;
-	//for(iterator = Filter::processedFilters.begin(); iterator != Filter::processedFilters.end(); iterator++) {
-	//	if((*iterator)->GetId().compare(id) == 0) {
-	//		cachedFilter = (*iterator);
-	//		break;
-	//	}
-	//}
-
 	AbsStateMap::iterator iterator;
 	iterator = Filter::processedFiltersMap.find(id);
 	if(iterator != Filter::processedFiltersMap.end()) {
@@ -227,12 +199,6 @@
 }
 
 void Filter::ClearCache() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	delete all items in the cache
-	//
-	// -----------------------------------------------------------------------
 
 	AbsStateMap::iterator iterator;
 	for(iterator = Filter::processedFiltersMap.begin(); iterator != Filter::processedFiltersMap.end(); iterator++) {
@@ -244,13 +210,8 @@
 }
 
 void Filter::Cache(Filter* filter) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	cache the specified filter
+
 	//	TODO - do i need to add protection to this cache
-	// -----------------------------------------------------------------------
-	
-	//Filter::processedFilters.push_back(filter);
+
 	Filter::processedFiltersMap.insert(AbsStatePair(filter->GetId(), filter));
 }

Modified: trunk/ovalint/src/Filter.h
===================================================================
--- trunk/ovalint/src/Filter.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Filter.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Filter.h 4122 2007-06-22 14:02:20Z bakerj $
+// $Id: Filter.h 4596 2008-01-03 16:44:54Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -48,23 +48,44 @@
 class Filter : public AbsState {
 
 public:
+	~Filter();
+
+	/** Get a Filter object for the specified state id.
+		Manages the cache of filters.
+	*/
+	static Filter* GetFilter(string statieId);
+
+	/** Analyze the specified Item return the boolean result for the Item. */
+	bool Analyze(Item* item);	
+
+	/** Parse the provided state from a definition file into an Filter object. */
+	void Parse(DOMElement* stateElm);
+
+	/** Delete all items in the cache. */
+	static void ClearCache();
+
+private:
+
+	/** Create a Filter object setting only the operator and version properties. */
 	Filter(OvalEnum::Operator myOperator = OvalEnum::OPERATOR_AND, int version = 1);
+
 	/**
 		Parse the state element with the specified id into a Filter object.
 		@param id a string that hold the id of a state in an oval definition file to be parsed.
 	*/
 	Filter(string id);
+
+	/** Create a complete Filter object setting all properties. */
 	Filter(string id, string name, string xmlns, OvalEnum::Operator myOperator = OvalEnum::OPERATOR_AND, int version = 1);
-	~Filter();
 
-	bool Analyze(Item* item);	
-	void Parse(DOMElement* stateElm);
+	/** Cache the specified filter. */
+	static void Cache(Filter* filter);
 
+	/** Search the cache of Filters for the specifed filter. 
+		@return Returns a filter object with the specified id or NULL if not found
+	*/
 	static Filter* SearchCache(string id);
-	static void ClearCache();
-	static void Cache(Filter* filter);
 
-private:
 	static AbsStateMap processedFiltersMap;
 };
 

Modified: trunk/ovalint/src/FilterEntity.cpp
===================================================================
--- trunk/ovalint/src/FilterEntity.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/FilterEntity.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FilterEntity.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: FilterEntity.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	//	Abstract
 	//
 	//	Copy constructor.
-	//	Create a compelete FilterEntity object based on the specified obj.
+	//	Create a complete FilterEntity object based on the specified obj.
 	//
 	// -----------------------------------------------------------------------
 
@@ -59,7 +59,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete FilterEntity object
+	//	Create a complete FilterEntity object
 	//
 	// -----------------------------------------------------------------------
 
@@ -104,7 +104,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Return true iff this FilterEntity is equal to the provided FilterEntity
+	//	Return true if this FilterEntity is equal to the provided FilterEntity
 	// -----------------------------------------------------------------------
 	FilterEntity* filterEntity = (FilterEntity*)entity;
 	bool isEqual = false;

Modified: trunk/ovalint/src/FilterEntity.h
===================================================================
--- trunk/ovalint/src/FilterEntity.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/FilterEntity.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FilterEntity.h 4123 2007-06-22 14:03:41Z bakerj $
+// $Id: FilterEntity.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Item.cpp
===================================================================
--- trunk/ovalint/src/Item.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Item.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Item.cpp 3897 2007-04-18 14:25:34Z bakerj $
+// $Id: Item.cpp 4597 2008-01-03 16:45:30Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,12 +39,6 @@
 //									Item Class											  //	
 //****************************************************************************************//
 Item::Item(int id , string xmlns, string xmlnsAlias, string schemaLocation, OvalEnum::SCStatus status, string name) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a compelete Entity object
-	//
-	// -----------------------------------------------------------------------
 
 	this->SetId(id);
 	this->SetXmlns(xmlns);
@@ -56,12 +50,6 @@
 }
 
 Item::~Item() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	clean up all the elements
-	//
-	// -----------------------------------------------------------------------
 	
 	this->DeleteElements();
 }
@@ -70,13 +58,7 @@
 //								 Static Public members										//
 // ***************************************************************************************	//
 int Item::AssignId() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Assign a new Item Id
-	//
-	// -----------------------------------------------------------------------
-	
+
 	return Item::idCounter++;
 }
 
@@ -155,7 +137,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Set the messages field's value
+	//	Get the messages field's value
 	//
 	// -----------------------------------------------------------------------
 	return &this->messages;
@@ -390,11 +372,6 @@
 }
 
 ItemEntityVector* Item::GetElementsByName(string elementName) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return all elements with the specified name
-	// -----------------------------------------------------------------------
 
 	ItemEntityVector* matchingElements = new ItemEntityVector();
 
@@ -409,12 +386,6 @@
 	return matchingElements;
 }
 void Item::Parse(DOMElement* scItemElm) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Parse the provided item from an sc file into an Item object
-	//
-	// -----------------------------------------------------------------------
 
 	this->SetName(XmlCommon::GetElementName(scItemElm));
 	this->SetId(atoi((XmlCommon::GetAttributeByName(scItemElm, "id")).c_str()));
@@ -444,17 +415,10 @@
 			}
 		}
 		index ++;
-	}
-	
+	}	
 }
 
 void Item::Write(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* scFile, DOMElement* itemsElm) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Write this item to a sc file. Make sure the item has not already been 
-	//	written to the sc file
-	// -----------------------------------------------------------------------
 
 	if(!this->GetIsWritten()) {
 		this->SetIsWritten(true);
@@ -503,12 +467,7 @@
 //								 Private members											//
 // ***************************************************************************************	//
 void Item::DeleteElements() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Delete all the elements in the item entity vector.
-	//
-	// -----------------------------------------------------------------------
+	
 	ItemEntity* currentElement = NULL;
 	while(elements.size() != 0) {
 	  	currentElement = elements[elements.size()-1];
@@ -527,23 +486,9 @@
 }
 
 Item* Item::SearchCache(int id) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	search the cache of Items for the specifed Item. 
-	//	return NULL if not found
-	//
-	// -----------------------------------------------------------------------
 
 	Item* cachedItem = NULL;
 
-	/*ItemVector::iterator iterator;
-	for(iterator = Item::processedItems.begin(); iterator != Item::processedItems.end(); iterator++) {
-		if((*iterator)->GetId() == id) {
-			cachedItem = (*iterator);
-			break;
-		}
-	}*/
 	ItemMap::iterator iterator;
 	iterator = Item::processedItemsMap.find(id);
 	if(iterator != Item::processedItemsMap.end()) {
@@ -554,21 +499,7 @@
 }
 
 void Item::ClearCache() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	delete all items in the cache
-	//
-	// -----------------------------------------------------------------------
 
-	//Item* item = NULL;
-	//while(Item::processedItems.size() != 0) {
-	//  	item = Item::processedItems[Item::processedItems.size()-1];
-	//  	Item::processedItems.pop_back();
-	//  	delete item;
-	//  	item = NULL;
-	//}
-
 	ItemMap::iterator iterator;
 	for(iterator = Item::processedItemsMap.begin(); iterator != Item::processedItemsMap.end(); iterator++) {
 		
@@ -581,37 +512,18 @@
 }
 
 void Item::Cache(Item* item) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	cache the specified filter
+
 	//	TODO - do i need to add protection to this cache
-	// -----------------------------------------------------------------------
-	
+
 	Item::processedItemsMap.insert(ItemPair(item->GetId(), item));
 }
 //****************************************************************************************//
 //								ItemException Class										  //	
 //****************************************************************************************//
 ItemException::ItemException(string errMsgIn, int severity, Exception* ex) : Exception(errMsgIn, severity, ex) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the error message and then set the severity to ERROR_FATAL. This is 
-	//	done with the explicit call to the Exception class constructor that 
-	//	takes a single string param.
-	//
-	// -----------------------------------------------------------------------
 
 }
 
 ItemException::~ItemException() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Do nothing for now
-	//
-	// -----------------------------------------------------------------------
 
 }
-

Modified: trunk/ovalint/src/Item.h
===================================================================
--- trunk/ovalint/src/Item.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Item.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Item.h 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: Item.h 4594 2008-01-03 16:40:17Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -81,18 +81,32 @@
 	This class represents an Item in a sytem characteristics file.
     Items must be unique. The Item::Equals() method and the caching methods
 	provided in this class should be utilized to ensure uniqueness. This class also
-	provides staticv methods for assigning Item ids.
+	provides static methods for assigning Item ids.
 */
 class Item {
 public:
+	/** Create a complete Item object. */
 	Item(int id = 0, string xmlns = "", string xmlnsAlias = "", string schemaLocation = "", OvalEnum::SCStatus status = OvalEnum::STATUS_EXISTS, string name = "");
+	
+	/** Clean up all the elements. */
 	~Item();
 
+	/** Assign a new Item Id. */
 	static int AssignId();
 
 	bool Equals(Item* Item);
+
+	/** Return all elements with the specified name.
+		@return Returns a vector of elements with a matching name. If no mathes are found the vector is empty. The caller should delete the returned vector but not its contents.
+	*/
 	ItemEntityVector* GetElementsByName(string elementName);
+
+	/** Parse the provided item element from an sc file into an Item object. */
 	void Parse(DOMElement* scItemElm);
+
+	/** Write this item to a sc file. 
+		Make sure the item has not already been written to the sc file.
+	*/
 	void Write(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* scFile, DOMElement* itemsElm);
 
 	ItemEntityVector* GetElements();
@@ -127,11 +141,20 @@
 
 	ItemEntityVector* GetObjectElements();
     
+	/** Search the cache of Items for the specifed Item. 
+		@return Returns the item with the specified id or NULL if not found.
+	*/
 	static Item* SearchCache(int id);
+
+	/** Delete all items in the cache. */
 	static void ClearCache();
+
+	/** Cache the specified item. */
 	static void Cache(Item* item);
 
 private:
+
+	/** Delete all the elements in the item entity vector. */
 	void DeleteElements();
 
 	ItemEntityVector elements;

Modified: trunk/ovalint/src/ItemEntity.cpp
===================================================================
--- trunk/ovalint/src/ItemEntity.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ItemEntity.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ItemEntity.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ItemEntity.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete ItemEntity object
+	//	Create a complete ItemEntity object
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/ItemEntity.h
===================================================================
--- trunk/ovalint/src/ItemEntity.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ItemEntity.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ItemEntity.h 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: ItemEntity.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/LiteralComponent.cpp
===================================================================
--- trunk/ovalint/src/LiteralComponent.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/LiteralComponent.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: LiteralComponent.cpp 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: LiteralComponent.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete LiteralComponent object
+	//	Create a complete LiteralComponent object
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/LiteralComponent.h
===================================================================
--- trunk/ovalint/src/LiteralComponent.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/LiteralComponent.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: LiteralComponent.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: LiteralComponent.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/LocalVariable.cpp
===================================================================
--- trunk/ovalint/src/LocalVariable.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/LocalVariable.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: LocalVariable.cpp 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: LocalVariable.cpp 4593 2008-01-03 16:39:57Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -36,20 +36,10 @@
 //****************************************************************************************//
 
 LocalVariable::LocalVariable(string id, string name, int version, OvalEnum::Datatype datatype, StringVector* msgs) : AbsVariable (id, name, version, datatype, msgs) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a compelete LocalVariable
-	//
-	// -----------------------------------------------------------------------
 
 }
 
 LocalVariable::~LocalVariable() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	// -----------------------------------------------------------------------
 
 }
 
@@ -66,7 +56,7 @@
 	return this->component;
 }
 
-void LocalVariable::SetComponent(AbsComponent* component)  {
+void LocalVariable::SetComponent(AbsComponent* component) {
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
@@ -93,7 +83,7 @@
 	// set the error message for this varaible
 	this->AppendMessages(value->GetMessages());
 
-	// if flag is compelete or incomplete create VariableValues for each value.
+	// if flag is complete or incomplete create VariableValues for each value.
 	if(value->GetFlag() == OvalEnum::FLAG_COMPLETE || value->GetFlag() == OvalEnum::FLAG_INCOMPLETE) {
 		StringVector::iterator iterator;
 		for(iterator = value->GetValues()->begin(); iterator != value->GetValues()->end(); iterator++) {
@@ -149,7 +139,7 @@
 	//	in this case just return the values used by the component.
 	// -----------------------------------------------------------------------
 	
-	VariableValueVector* values;
+	VariableValueVector* values = NULL;
 
 	values = this->GetComponent()->GetVariableValues();
 

Modified: trunk/ovalint/src/LocalVariable.h
===================================================================
--- trunk/ovalint/src/LocalVariable.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/LocalVariable.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: LocalVariable.h 4137 2007-06-22 14:12:09Z bakerj $
+// $Id: LocalVariable.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -44,6 +44,7 @@
 class LocalVariable : public AbsVariable {
 public:
 
+	/** Create a complete LocalVariable. */
 	LocalVariable(string id = "", string name = "local_variable", int version = 1, OvalEnum::Datatype datatype = OvalEnum::DATATYPE_STRING, StringVector* msgs = new StringVector());
 	~LocalVariable();
 

Modified: trunk/ovalint/src/Log.cpp
===================================================================
--- trunk/ovalint/src/Log.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Log.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Log.cpp 3867 2007-03-29 18:09:24Z bakerj $
+// $Id: Log.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -101,7 +101,7 @@
 		throw Exception("The loging system must first be initialized.");
 
 	if(Log::IsDebug()) {
-		msg = Common::GetTimeStamp() + " : " + Log::LevelToString(Log::GetLevel()) + " : " + msg;
+		msg = Common::GetTimeStamp() + " : DEBUG : " + msg;
 		Log::WriteLog(msg, fileOnly);
 	}
 }
@@ -111,7 +111,7 @@
 		throw Exception("The loging system must first be initialized.");
 
 	if(Log::IsInfo()) {
-		msg = Common::GetTimeStamp() + " : " + Log::LevelToString(Log::GetLevel()) + " : " + msg;
+		msg = Common::GetTimeStamp() + " : INFO : " + msg;
 		Log::WriteLog(msg);
 	}
 }
@@ -121,7 +121,7 @@
 		throw Exception("The loging system must first be initialized.");
 
 	if(Log::IsMessage()) {
-		msg = Common::GetTimeStamp() + " : " + Log::LevelToString(Log::GetLevel()) + " : " + msg;
+		msg = Common::GetTimeStamp() + " : MESSAGE : " + msg;
 		Log::WriteLog(msg);
 	}
 }
@@ -131,7 +131,7 @@
 		throw Exception("The loging system must first be initialized.");
 
 	if(Log::IsFatal()) {
-		msg = Common::GetTimeStamp() + " : " + Log::LevelToString(Log::GetLevel()) + " : " + msg;
+		msg = Common::GetTimeStamp() + " : FATAL : " + msg;
 		Log::WriteLog(msg);
 	}
 }

Modified: trunk/ovalint/src/Log.h
===================================================================
--- trunk/ovalint/src/Log.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Log.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Log.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: Log.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/MD5.cpp
===================================================================
--- trunk/ovalint/src/MD5.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/MD5.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: MD5.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: MD5.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/MD5.h
===================================================================
--- trunk/ovalint/src/MD5.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/MD5.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: MD5.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: MD5.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Main.cpp
===================================================================
--- trunk/ovalint/src/Main.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Main.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Main.cpp 4237 2007-06-28 16:02:55Z bakerj $
+// $Id: Main.cpp 4647 2008-01-15 14:35:33Z bworrell $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -83,7 +83,7 @@
 	headerMessage.append("OVAL Definition Interpreter\n");
     headerMessage.append("Version: " + Version::GetVersion() + " Build: " + Version::GetBuild() +"\n");
     headerMessage.append("Build date: " + Version::GetBuildDate() + "\n");
-	headerMessage.append("Copyright (c) 2002-2007 - The MITRE Corporation\n");
+	headerMessage.append("Copyright (c) 2002-2008 - The MITRE Corporation\n");
 	headerMessage.append("----------------------------------------------------\n");
 	headerMessage.append("\n");
 	headerMessage.append(timeBuffer);
@@ -377,7 +377,18 @@
 		
 		//	run the analyzer
 		if(Common::GetLimitEvaluationToDefinitionIds()){
-			analyzer->Run(Common::GetDefinitionIds());
+			string idFile = Common::GetDefinitionIdsFile();
+
+			StringVector* ids = NULL;
+
+			if(idFile.compare("") != 0) {
+				ids = Common::ParseDefinitionIdsFile();	
+			} else {
+				ids = Common::ParseDefinitionIdsString();				
+			}				
+
+			analyzer->Run(ids);
+			
 		} else {
 			analyzer->Run();
 		}
@@ -523,7 +534,7 @@
 					Usage();
 					exit(0);
 				} else {
-					Common::SetDefinitionIds(argv[2]);
+					Common::SetDefinitionIdsString(argv[2]);
 					Common::SetLimitEvaluationToDefinitionIds(true);
 					++argv;
 					--argc;
@@ -531,6 +542,21 @@
 
 				break;
 
+			// **********  file containing definition ids to evaluate  ********** //
+			case 'f':
+
+				if ((argc < 3) || (argv[2][0] == '-')) {
+					Usage();
+					exit(0);
+				} else {
+					Common::SetDefinitionIdsFile(argv[2]);
+					Common::SetLimitEvaluationToDefinitionIds(true);
+					++argv;
+					--argc;
+				}
+
+				break;
+
 			// ********  do oval definition schematron validation  ******** //
 			case 'n':
 
@@ -685,29 +711,40 @@
 	//------------------------------------------------------------------------------------//
 
 	cout << endl;
-	cout << "Command Line: >ovaldi [option] MD5Hash" << endl;
+	cout << "Command Line: ovaldi [options] MD5Hash" << endl;
 	cout << endl;
 	cout << "Options:" << endl;
-	cout << "   -h           = show options available from command line" << endl;
+	cout << "   -h           = show options available from command line." << endl;
 	cout << "\n";
-	cout << "   -o <string>  = path to the oval-definitions xml file DEFAULT=\"definitions.xml\"" << endl;
-	cout << "   -d <string>  = save data to the specified XML file DEFAULT=\"system-characteristics.xml\"" << endl;
-	cout << "   -r <string>  = save results to the specified XML file DEFAULT=\"oval-results.xml\"" << endl;
-	cout << "   -v <string>  = get external variable values from the specified XML file. DEFAULT=\"external-variables.xml\"" << endl;
+	
+	cout << "Definition Evaluation Options:" << endl;
+	cout << "   -o <string>  = path to the oval-definitions xml file. DEFAULT=\"definitions.xml\"" << endl;
+	cout << "   -v <string>  = path to external variable values file. DEFAULT=\"external-variables.xml\"" << endl;
 	cout << "   -e <string>  = evaluate the specified list of definitions. Supply definition ids as a comma seperated list like: oval:com.example:def:123" << endl;
+	cout << "   -f <string>  = path to a file containing a list of definitions to be evaluated. The file must comply with the evaluation-id schema." << endl;
 	cout << "\n";
-	cout << "   -i <string>  = use data from input System Characteristics file" << endl;
+	
+	cout << "Input Validation Options:" << endl;
+	cout << "   -m           = do not verify the oval-definitions file with an MD5 hash." << endl;
+	cout << "   -n           = perform Schematron validation of the oval-definitions file." << endl;
+	cout << "   -c <string>  = path to xsl for oval-definitions Schematron validation. DEFAULT=\"oval-definitions-schematron.xsl\"" << endl;
 	cout << "\n";
-	cout << "   -n           = perform Schematron validation of the oval-defiitions file." << endl;
-	cout << "   -c <string>  = use the specified xsl for oval-definitions Schematron validation. DEFAULT=\"oval-definitions-schematron.xsl\"" << endl;
+
+	cout << "Data Collection Options:" << endl;
+	cout << "   -i <string>  = path to input System Characteristics file. Evaluation will be based on the contents of the file." << endl;
 	cout << "\n";
-	cout << "   -m           = do not verify the oval.xml file with an MD5 hash" << endl;
-	cout << "   -p           = print all information and error messages" << endl;
-	cout << "\n";
+
+	cout << "Result Output Options:" << endl;	
+	cout << "   -d <string>  = save data to the specified XML file. DEFAULT=\"system-characteristics.xml\"" << endl;	
+	cout << "   -r <string>  = save results to the specified XML file. DEFAULT=\"oval-results.xml\"" << endl;
 	cout << "   -s           = do not apply a stylesheet to the results xml." << endl;
 	cout << "   -t <string>  = apply the sepcified xsl to the results xml. DEFAULT=\"results_to_html.xsl\"" << endl;
 	cout << "   -x <string>  = output xsl transform results to the specified file. DEFAULT=\"results.html\"" << endl;
 	cout << "\n";
-	cout << "   -z           = return md5 of current definitions.xml" << endl;
+	
+	cout << "Other Options:" << endl;
+	//cout << "   -l <string>  = save log to the specified file DEFAULT=\"ovaldi.log\"" << endl;
+	cout << "   -p           = print all information and error messages." << endl;
+	cout << "   -z           = return md5 of current oval-definitions file." << endl;
 	cout << endl;
 }

Modified: trunk/ovalint/src/Main.h
===================================================================
--- trunk/ovalint/src/Main.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Main.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Main.h 3897 2007-04-18 14:25:34Z bakerj $
+// $Id: Main.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Object.cpp
===================================================================
--- trunk/ovalint/src/Object.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Object.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Object.cpp 3897 2007-04-18 14:25:34Z bakerj $
+// $Id: Object.cpp 4601 2008-01-03 16:50:21Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete object
+	//	Create a complete object
 	//
 	// -----------------------------------------------------------------------
 
@@ -146,7 +146,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Return a vector of variable values that were used for this object
+	//	Return a vector of variable values that were used for this object.
 	//
 	// -----------------------------------------------------------------------
 
@@ -162,9 +162,9 @@
 			VariableValue* var = (*varValueIt);
 			varValues->push_back(var);
 		}
-		// TODO - do i need this delete call here
-		//delete values;
-		//values = NULL;
+
+		delete values;
+		values = NULL;
 	}
 
 	return varValues;

Modified: trunk/ovalint/src/Object.h
===================================================================
--- trunk/ovalint/src/Object.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Object.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Object.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: Object.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ObjectComponent.cpp
===================================================================
--- trunk/ovalint/src/ObjectComponent.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ObjectComponent.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectComponent.cpp 4136 2007-06-22 14:11:50Z bakerj $
+// $Id: ObjectComponent.cpp 4598 2008-01-03 16:46:45Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete ObjectComponent object
+	//	Create a complete ObjectComponent object
 	//
 	// -----------------------------------------------------------------------
 
@@ -160,6 +160,8 @@
 					}
 					foundElm = true;
 				}
+				elements->clear();
+				delete elements;
 			}
 
 			if(!foundElm) {

Modified: trunk/ovalint/src/ObjectComponent.h
===================================================================
--- trunk/ovalint/src/ObjectComponent.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ObjectComponent.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectComponent.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectComponent.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ObjectEntity.cpp
===================================================================
--- trunk/ovalint/src/ObjectEntity.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ObjectEntity.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectEntity.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectEntity.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	//	Abstract
 	//
 	//	Copy constructor.
-	//	Create a compelete ObjectEntity object based on the specified obj.
+	//	Create a complete ObjectEntity object based on the specified obj.
 	//
 	// -----------------------------------------------------------------------
 
@@ -58,7 +58,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete ObjectEntity object
+	//	Create a complete ObjectEntity object
 	//
 	// -----------------------------------------------------------------------
 }
@@ -79,7 +79,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Return true iff this ObjectEntity is equal to the provided ObjectEntity
+	//	Return true if this ObjectEntity is equal to the provided ObjectEntity
 	// -----------------------------------------------------------------------
 	ObjectEntity* objectEntity = (ObjectEntity*)entity;
 	bool isEqual = false;

Modified: trunk/ovalint/src/ObjectEntity.h
===================================================================
--- trunk/ovalint/src/ObjectEntity.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ObjectEntity.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectEntity.h 4123 2007-06-22 14:03:41Z bakerj $
+// $Id: ObjectEntity.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -41,7 +41,7 @@
 class ObjectEntity;
 
 /**
-	This class represents an entity in an Object as definted in the oval defintion schema. 
+	This class represents an entity in an Object as definted in the oval definition schema. 
 	All new instances of this class are create with the AbsEntity::isObjectEntity flag set to true.
 */
 class ObjectEntity : public AbsEntity {

Modified: trunk/ovalint/src/ObjectFactory.cpp
===================================================================
--- trunk/ovalint/src/ObjectFactory.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ObjectFactory.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectFactory.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectFactory.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ObjectFactory.h
===================================================================
--- trunk/ovalint/src/ObjectFactory.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ObjectFactory.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectFactory.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectFactory.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ObjectReader.cpp
===================================================================
--- trunk/ovalint/src/ObjectReader.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ObjectReader.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectReader.cpp 4136 2007-06-22 14:11:50Z bakerj $
+// $Id: ObjectReader.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/ObjectReader.h
===================================================================
--- trunk/ovalint/src/ObjectReader.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/ObjectReader.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectReader.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectReader.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/OvalEnum.cpp
===================================================================
--- trunk/ovalint/src/OvalEnum.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/OvalEnum.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: OvalEnum.cpp 4229 2007-06-28 14:38:07Z bakerj $
+// $Id: OvalEnum.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/OvalEnum.h
===================================================================
--- trunk/ovalint/src/OvalEnum.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/OvalEnum.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: OvalEnum.h 4131 2007-06-22 14:09:46Z bakerj $
+// $Id: OvalEnum.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/OvalMessage.cpp
===================================================================
--- trunk/ovalint/src/OvalMessage.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/OvalMessage.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: OvalMessage.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: OvalMessage.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete OvalMessage object
+	//	Create a complete OvalMessage object
 	//
 	// -----------------------------------------------------------------------
 
@@ -106,7 +106,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Set the Level field's value
+	//	Make string representation of object
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/OvalMessage.h
===================================================================
--- trunk/ovalint/src/OvalMessage.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/OvalMessage.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: OvalMessage.h 4136 2007-06-22 14:11:50Z bakerj $
+// $Id: OvalMessage.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/PossibleRestrictionType.cpp
===================================================================
--- trunk/ovalint/src/PossibleRestrictionType.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/PossibleRestrictionType.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: PossibleRestrictionType.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: PossibleRestrictionType.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/PossibleRestrictionType.h
===================================================================
--- trunk/ovalint/src/PossibleRestrictionType.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/PossibleRestrictionType.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: PossibleRestrictionType.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: PossibleRestrictionType.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/PossibleValueType.cpp
===================================================================
--- trunk/ovalint/src/PossibleValueType.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/PossibleValueType.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: PossibleValueType.cpp 4130 2007-06-22 14:09:11Z bakerj $
+// $Id: PossibleValueType.cpp 4613 2008-01-08 13:57:21Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -74,15 +74,9 @@
 }
 
 bool PossibleValueType::ValidateValue(OvalEnum::Datatype datatype, string externalValue) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Ensure that the specified value matches the criteria 
-	//	specified by this possible_value element.
-	//	
-	// ----------------------------------------------------------------------
 
 	OvalEnum::ResultEnumeration result = OvalEnum::RESULT_ERROR;
+
 	// do comparison based on datatype
 	if(datatype == OvalEnum::DATATYPE_BINARY) {
 		result = EntityComparator::CompareBinary(OvalEnum::OPERATION_EQUALS, this->GetValue(), externalValue);

Modified: trunk/ovalint/src/PossibleValueType.h
===================================================================
--- trunk/ovalint/src/PossibleValueType.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/PossibleValueType.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: PossibleValueType.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: PossibleValueType.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/REGEX.cpp
===================================================================
--- trunk/ovalint/src/REGEX.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/REGEX.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: REGEX.cpp 3876 2007-03-29 18:16:55Z bakerj $
+// $Id: REGEX.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -31,41 +31,15 @@
 
 #include "REGEX.h"
 
-REGEX::REGEX()
-{
-	// -----------------------------------------------------------------------
-	//  ABSTRACT
-	//
-	//  Simple constructor to initialize the matchCount memebr variable
-	//
-	// -----------------------------------------------------------------------
-
+REGEX::REGEX() {
 	this->matchCount = 0;
 }
 
-REGEX::~REGEX()
-{
-	// -----------------------------------------------------------------------
-	//  ABSTRACT
-	//
-	//  Do nothing for now
-	//
-	// -----------------------------------------------------------------------
+REGEX::~REGEX() {
 
 }
 
-
-string REGEX::EscapeRegexChars(string stringIn)
-{
-	// -----------------------------------------------------------------------
-	//  ABSTRACT
-	//
-	//  This function takes a string and searches for all regular expression characters. If
-	//	one is found and it is not already escaped it is escaped with a '\' The regular 
-	//	expression chars are stored in a string. The following chars need to be escaped:
-	//	^ $ \ . [ ] ( ) * + ? 
-	//
-	// -----------------------------------------------------------------------
+string REGEX::EscapeRegexChars(string stringIn) {
 	
 	string regexChars ="^$\\.[](){}*+?";
 	string fixedString = stringIn;
@@ -89,19 +63,7 @@
 	return fixedString;	
 }
 
-int REGEX::FindFirstRegexChar(const string stringIn)
-{
-	// -----------------------------------------------------------------------
-	//  ABSTRACT
-	//
-	//  This function takes a string and searches for the first regular 
-	//	expression character that is not escaped. If one is found its 
-	//	location is returned. If none are found -1 is returned. Only regular
-	//  expression chars that are not escaped are considered. The following 
-	//	are considered regular expression chars if they are not escaped:
-	//	^ $ \ . [ ] ( ) * + ? 
-	//
-	// -----------------------------------------------------------------------
+int REGEX::FindFirstRegexChar(const string stringIn) {
 	
 	string regexChars	= "^$\\.[](){}*+?";
 	string prevChar		= "";
@@ -161,21 +123,7 @@
 	return pos;	
 }
 
-int REGEX::FindLastRegexChar(const string stringIn)
-{
-	//------------------------------------------------------------------------------------//
-	//
-	//  ABSTRACT
-	//
-	//  This function takes a string and searches for the last regular 
-	//	expression character. If one is found its location is returned. If none
-	//	are found -1 is returned. Only regular expression chars that are not
-	//	escaped are considered. The following are considered regular expression
-	//	chars if they are not escaped:
-	//
-	//                 ^ $ \ . [ ] ( ) { } * + ?
-	//
-	//------------------------------------------------------------------------------------//
+int REGEX::FindLastRegexChar(const string stringIn) {
 
 	string regexChars	= "^$\\.[](){}*+?";
 	string prevChar		= "";
@@ -226,26 +174,8 @@
 	return pos;	
 }
 
-void REGEX::GetConstantPortion(string patternIn, string delimIn, string *patternOut, string *constOut)
-{
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return both the constant portion of a string and the remaining
-	//	pattern. If no constant portion is found set constOut to "" If the
-	//	entire string is constant set patternOut to "". The input delimiter
-	//	is used to ensure that constant strings are treated as a unit. 
-	//
-	//	Loop through the provided pattern breaking it down by removing constant
-	//	pieces from the start of the pattern. Build the constant string out of
-	//	the pieces. Each piece is determined by looking for the next occurance
-	//	of the specified delimiter. As the constatn string is built the 
-	//	delimiter is added back in to the string.
-	//
-	//	If an error occures an exception is thrown
-	//
-	// -----------------------------------------------------------------------
-
+void REGEX::GetConstantPortion(string patternIn, string delimIn, string *patternOut, string *constOut) {
+	
 	unsigned int nextDelim = string::npos;
 	int delimLen = delimIn.length();
 	(*patternOut) = patternIn;
@@ -311,15 +241,8 @@
 	}
 }
 
-bool REGEX::IsConstant(string pattern)
-{
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return true if the specified pattern is constant. If the string is of
-	//	length = 0 return true.
-	//
-	// -----------------------------------------------------------------------
+bool REGEX::IsConstant(string pattern) {
+
 	int regexChar = string::npos;
 	bool constant = true;
 	
@@ -400,7 +323,7 @@
 					strlen(searchStringIn),	// the length of the subject string	
 					0,						// start at offset 0 in the subject	
 					0,						// default options					
-					ovector,				// vector for substring information	
+					ovector,				// vector of integers for substring information	
 					30);					// number of elements in the vector	
 
 	//	Test the return value of the pattern match 
@@ -420,6 +343,116 @@
 	return(result);
 }
 
+bool REGEX::GetMatchingSubstrings(const char *patternIn, const char *searchStringIn, StringVector* substrings) {
+
+	bool		result				= false;
+	pcre		*compiledPattern;
+	const char	*error;
+	int			erroffset = -1;
+
+	//	Test the match count
+	if(this->matchCount >= MAXMATCHES) {
+		string errMsg = "Warning: The specified pattern has matched more than the supported number of items.";
+		errMsg.append("\nPattern: ");
+		errMsg.append(patternIn);
+		throw REGEXException(errMsg, ERROR_WARN);	
+	}
+		
+	//	Compile the pattern
+	compiledPattern = pcre_compile(	patternIn,			// the pattern					
+									0,					// default options				
+									&error,				// for error message			
+									&erroffset,			// for error offset				
+									NULL);				// use default character tables	
+
+	//	Check for compile errors
+	if(compiledPattern == NULL) {
+
+		string errMsg = "Error: Failed to compile the specifed regular expression pattern.\n\tPattern: ";
+		errMsg.append(patternIn);
+		errMsg.append("\n\tOffset: ");
+		
+		ostringstream erroffsetStr;
+		erroffsetStr << erroffset;
+		
+		errMsg.append(erroffsetStr.str());
+		errMsg.append("\n\tMessage: ");
+		errMsg.append(error);
+		throw REGEXException(errMsg);
+	}
+ 
+
+	//	Match a pattern
+	int rc;
+	int ovector[60];
+	for(int i = 0; i < 60; i++) {
+		ovector[i] = -1;
+	}
+	rc = pcre_exec(	compiledPattern,		// result of pcre_compile()			
+					NULL,					// we didn't study the pattern		
+					searchStringIn,			// the subject string				
+					strlen(searchStringIn),	// the length of the subject string	
+					0,						// start at offset 0 in the subject	
+					0,						// default options					
+					ovector,				// vector of integers for substring information	
+					60);					// number of elements in the vector	
+
+	//	Test the return value of the pattern match 
+	//	and increment the match count if a match was found
+	if(rc == 0) {
+		result = false;
+	} else if (rc == -1) {
+		result = false;
+	} else if (rc < -1) {
+		
+		// An error occured
+		string errMsg = "Error: PCRE returned error code (" + rc;
+		errMsg.append(") While evaluating the following regex: ");
+		errMsg.append(patternIn);
+		errMsg.append(" against this string: ");
+		errMsg.append(searchStringIn);
+		throw REGEXException(errMsg);
+
+	} else if (rc > 0) {
+		// The string did match
+		result = true;
+		this->matchCount++;
+
+		// next extract any matching substrings
+		if(rc > 1) {
+
+			const char **stringlist;
+			int res = pcre_get_substring_list(searchStringIn, ovector, rc, &stringlist);
+
+			if (rc < 0) {
+				string error = "get substring list failed " + rc;
+				error.append(" unalbe to get memory for the result set.");
+				throw REGEXException(error);
+			} else {
+				int i = 0;
+				for (i = 0; i < rc; i++) {
+					string str = "";
+					str.append(stringlist[i]);
+					if(i > 0)
+						substrings->push_back(str);
+				}
+				
+				if (stringlist[i] != NULL) {
+					pcre_free_substring_list(stringlist);
+					string error = "string list not terminated by NULL";
+					throw REGEXException(error);
+				}
+
+				pcre_free_substring_list(stringlist);				
+			}
+		}
+	}
+
+	//free(compiledPattern);
+
+	return(result);
+}
+
 //string REGEX::StrToNegativePattern(string strIn) {
 //	// -----------------------------------------------------------------------
 //	//  ABSTRACT
@@ -431,15 +464,7 @@
 //	return ("!^" + strIn + "$");
 //}
 
-string REGEX::RemoveExtraSlashes(string strIn)
-{
-	// -----------------------------------------------------------------------
-	//  ABSTRACT
-	//
-	//  This function takes a string and searches for all the double '\'s. 
-	//	Each double '\' //	is converted to a single '\' 
-	//
-	// -----------------------------------------------------------------------
+string REGEX::RemoveExtraSlashes(string strIn) {
 
 	string doubleSlash ="\\\\";
 
@@ -453,43 +478,20 @@
 	return strIn;	
 }
 
-void REGEX::Reset()
-{	// -----------------------------------------------------------------------
-	//  ABSTRACT
-	//
-	//  Set the match count back to zero
-	//
-	// -----------------------------------------------------------------------
+void REGEX::Reset() {
 
 	this->matchCount = 0;
 
 }
 
-
 //****************************************************************************************//
 //								REGEXException Class									  //	
 //****************************************************************************************//
-REGEXException::REGEXException(string errMsgIn, int severity) : Exception(errMsgIn, severity)
-{
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the error message and the severity to the specified values. This is 
-	//	done with the explicit call to the Exception class constructor that 
-	//	takes a string msg and an int severity param.
-	//
-	// -----------------------------------------------------------------------
+REGEXException::REGEXException(string errMsgIn, int severity) : Exception(errMsgIn, severity) {
 
 }
 
-REGEXException::~REGEXException()
-{
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Do nothing for now
-	//
-	// -----------------------------------------------------------------------
+REGEXException::~REGEXException() {
 
 }
 

Modified: trunk/ovalint/src/REGEX.h
===================================================================
--- trunk/ovalint/src/REGEX.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/REGEX.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: REGEX.h 3876 2007-03-29 18:16:55Z bakerj $
+// $Id: REGEX.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -32,16 +32,20 @@
 #ifndef REGEX_H
 #define REGEX_H
 
-#include "Exception.h"
+//#include "Exception.h"
+#include "Common.h"
 
 //	required regex include
 #include <pcre.h> 
 
 #include <sstream>
 #include <string>
+#include <vector>
 
 using namespace std;
 
+typedef vector < string, allocator<string> > StringVector;
+
 /**	The MAXMATCHES constant should be used by any search method to ensure that
 	endless/excessive matching searching doesn't occure. With out some sort of 
 	maximum it is possible to match so many items that the system would run out 
@@ -56,26 +60,90 @@
 */
 class REGEX {
 public:
+
+	/** Simple constructor to initialize the matchCount member variable. */
 	REGEX();
+
 	~REGEX();
 
-	string	EscapeRegexChars(string);
-	int		FindFirstRegexChar(const string stringIn);
-	int		FindLastRegexChar(const string stringIn);
-	void	GetConstantPortion(string patternIn, string delimIn, string *patternOut, string *constOut);
+	/** 
+		This function takes a string and searches for all regular expression characters. 
+		If one is found and it is not already escaped it is escaped with a '\' The regular
+		expression chars are stored in a string. The following chars need to be escaped:
+		^ $ \ . [ ] ( ) * + ? 
+	*/
+	string EscapeRegexChars(string);
+
+	/**
+		This function takes a string and searches for the first regular	expression character that is not escaped. 
+		If one is found its location is returned. If none are found -1 is returned. Only 
+		regular expression chars that are not escaped are considered. The following are 
+		considered regular expression chars if they are not escaped:
+		^ $ \ . [ ] ( ) * + ?
+	*/
+	int FindFirstRegexChar(const string stringIn);
+
+	/**
+		This function takes a string and searches for the last regular expression character. 
+		If one is found its location is returned. If none are found -1 is returned. Only
+		regular expression chars that are not escaped are considered. The following are
+		considered regular expression chars if they are not escaped:
+        ^ $ \ . [ ] ( ) { } * + ?
+	*/
+	int FindLastRegexChar(const string stringIn);
+
+	/**
+		Return both the constant portion of a string and the remaining pattern. 
+		If no constant portion is found set constOut to "" If the entire string
+		is constant set patternOut to "". The input delimiter is used to ensure
+		that constant strings are treated as a unit. 
+
+		Loop through the provided pattern breaking it down by removing constant
+		pieces from the start of the pattern. Build the constant string out of
+		the pieces. Each piece is determined by looking for the next occurance
+		of the specified delimiter. As the constatn string is built the 
+		delimiter is added back in to the string.
 	
-	/**	Return true if the searchString matches the specifed pattern
+		If an error occures an exception is thrown
+	*/
+	void GetConstantPortion(string patternIn, string delimIn, string *patternOut, string *constOut);
+	
+	/**	Return true if the searchString matches the specifed pattern.
+
 		Regular expression support is provided by the REGEX library package,
 		which is open source software, written by Philip Hazel, and copyright
 		by the University of Cambridge, England. 
 
 		Download site:	ftp://ftp.csx.cam.ac.uk/pub/software/programming/REGEX/
 	*/
-	bool	IsMatch(const char *patternIn, const char *searchStringIn);
+	bool IsMatch(const char *patternIn, const char *searchStringIn);
+
+	/**	Return true if the searchString matches the specifed pattern including the set of matched substrings.
+		If the input regex identifies any subexpressions the matching substrings for those subexpressions
+		are pushed onto the substrings input parameter.
+
+		Regular expression support is provided by the REGEX library package,
+		which is open source software, written by Philip Hazel, and copyright
+		by the University of Cambridge, England. 
+
+		Download site:	ftp://ftp.csx.cam.ac.uk/pub/software/programming/REGEX/
+	*/
+	bool GetMatchingSubstrings(const char *patternIn, const char *searchStringIn, StringVector* substrings);
+
+	/** 
+		This function takes a string and searches for all the double '\'s. 
+		Each double '\' //	is converted to a single '\'
+	*/
 	string	RemoveExtraSlashes(string);
+
+	/** Set the match count back to zero */
 	void	Reset();
 
 private:
+	/**
+		Return true if the specified pattern is constant. 
+		If the string is of length = 0 return true.
+	*/
 	bool IsConstant(string);
 
 	int matchCount;
@@ -86,7 +154,13 @@
 */
 class REGEXException : public Exception {
 public:
+	/** 
+		Set the error message and the severity to the specified values. 
+		This is done with the explicit call to the Exception class constructor that 
+		takes a string msg and an int severity param.
+	*/
 	REGEXException(string errMsgIn = "", int severity = ERROR_FATAL);
+
 	~REGEXException();
 };
 

Modified: trunk/ovalint/src/RestrictionType.cpp
===================================================================
--- trunk/ovalint/src/RestrictionType.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/RestrictionType.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: RestrictionType.cpp 4129 2007-06-22 14:08:57Z bakerj $
+// $Id: RestrictionType.cpp 4614 2008-01-08 13:57:43Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete RestrictionType
+	//	Create a complete RestrictionType
 	//
 	// -----------------------------------------------------------------------
 	this->datatype = datatype;
@@ -93,15 +93,9 @@
 }
 
 bool RestrictionType::ValidateValue(OvalEnum::Datatype datatype, string externalValue) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Ensure that the specified value matches the criteria 
-	//	specified by this restriction
-	//	
-	// ----------------------------------------------------------------------
 
 	OvalEnum::ResultEnumeration result = OvalEnum::RESULT_ERROR;
+
 	// do comparison based on datatype
 	if(datatype == OvalEnum::DATATYPE_BINARY) {
 		result = EntityComparator::CompareBinary(this->GetOperation(), this->GetValue(), externalValue);

Modified: trunk/ovalint/src/RestrictionType.h
===================================================================
--- trunk/ovalint/src/RestrictionType.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/RestrictionType.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: RestrictionType.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: RestrictionType.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Set.cpp
===================================================================
--- trunk/ovalint/src/Set.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Set.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Set.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: Set.cpp 4599 2008-01-03 16:47:09Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -35,13 +35,7 @@
 //									Set Class											  //	
 //****************************************************************************************//
 Set::Set(DOMElement* setElm) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Parse the set element and populate this object with its data
-	//
-	// -----------------------------------------------------------------------
-	
+
 	this->SetReferenceOne(NULL);
 	this->SetReferenceTwo(NULL);
 	this->SetSetOne(NULL);
@@ -51,12 +45,6 @@
 }
 
 Set::Set() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Initialize the simple set flag to true
-	//
-	// -----------------------------------------------------------------------
 
 	this->SetReferenceOne(NULL);
 	this->SetReferenceTwo(NULL);
@@ -66,19 +54,16 @@
 }
 
 Set::~Set() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	clean up all the elements
-	//
-	// -----------------------------------------------------------------------
-	
+
 	Filter* filter = NULL;
 	while(filters.size() != 0) {
 	  	filter = (Filter*)filters[filters.size()-1];
 	  	filters.pop_back();
-	  	delete filter;
-	  	filter = NULL;
+
+		// JB - Removed because filters are now cached. 
+		// The cache is managed by the Filter class.
+	  	//delete filter;
+	  	//filter = NULL;
 	}
 
 	if(this->referenceOne != NULL) {
@@ -288,9 +273,9 @@
 				varValue = (*vit);
 				varValues->push_back(varValue);
 			}
-			// TODO - do i need this delete call here
-			//delete filterVarValues;
-			//filterVarValues = NULL;
+			
+			delete filterVarValues;
+			filterVarValues = NULL;
 		}
 
 		// get the variable values used by reference one if it exists
@@ -303,12 +288,12 @@
 				varValue = (*rit);
 				varValues->push_back(varValue);
 			}
-			// TODO - do i need this delete call here
-			//delete refVarValues;
-			//refVarValues = NULL;
+			
+			delete refVarValues;
+			refVarValues = NULL;
 		}
 
-		// get teh variable values used by reference 2 if it exists
+		// get the variable values used by reference 2 if it exists
 		if(this->GetReferenceTwo() != NULL) {
 			refVarValues = this->GetReferenceTwo()->GetVariableValues();
 			// copy the reference's var values to the set's vector of var values
@@ -316,9 +301,9 @@
 				varValue = (*rit);
 				varValues->push_back(varValue);
 			}
-			// TODO - do i need this delete call here
-			//delete refVarValues;
-			//refVarValues = NULL;
+			
+			delete refVarValues;
+			refVarValues = NULL;
 		}
 
 	} else {
@@ -333,9 +318,9 @@
 				varValue = (*sit);
 				varValues->push_back(varValue);
 			}
-			// TODO - do i need thid delete call
-			//delete setVarValues;
-			//setVarValues = NULL;
+			
+			delete setVarValues;
+			setVarValues = NULL;
 		}
 
 		// Get the variable values used by set two if it exists
@@ -346,9 +331,9 @@
 				varValue = (*sit);
 				varValues->push_back(varValue);
 			}
-			// TODO - do i need this delete call 
-			//delete setVarValues;
-			//setVarValues = NULL;
+			
+			delete setVarValues;
+			setVarValues = NULL;
 		}
 	}
 
@@ -356,12 +341,6 @@
 }
 
 void Set::Parse(DOMElement* setObjectElm) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Parse the provided Set object element
-	//
-	// -----------------------------------------------------------------------
 
 	string setOperatorStr = XmlCommon::GetAttributeByName(setObjectElm, "set_operator");
 	this->SetSetOperator(OvalEnum::ToSetOperator(setOperatorStr));
@@ -405,15 +384,15 @@
 			} else if(childName.compare("filter") == 0) {
 				this->SetIsSimpleSet(true);
 				string stateId = XmlCommon::GetDataNodeValue(setChild);
-				this->AppendFilter(new Filter(stateId));
 
-				// TODO caching below is not currently used.
-				/*Filter* tmpFilter = Filter::SearchCache(stateId);
-				if(tmpFilter == NULL) {
-					tmpFilter = new Filter(stateId);
-					Filter::Cache(tmpFilter);
-				}
-				this->AppendFilter(tmpFilter);*/
+
+				Filter* tmpFilter = Filter::GetFilter(stateId);
+				//Filter* tmpFilter = Filter::SearchCache();
+				//if(tmpFilter == NULL) {
+				//	tmpFilter = new Filter(stateId);
+				//	Filter::Cache(tmpFilter);
+				//}
+				this->AppendFilter(tmpFilter);
 			}
 		}
 
@@ -425,24 +404,10 @@
 //								SetException Class										  //	
 //****************************************************************************************//
 SetException::SetException(string errMsgIn, int severity, Exception* ex) : Exception(errMsgIn, severity, ex) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Set the error message and then set the severity to ERROR_FATAL. This is 
-	//	done with the explicit call to the Exception class constructor that 
-	//	takes a single string param.
-	//
-	// -----------------------------------------------------------------------
 
 }
 
 SetException::~SetException() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Do nothing for now
-	//
-	// -----------------------------------------------------------------------
 
 }
 

Modified: trunk/ovalint/src/Set.h
===================================================================
--- trunk/ovalint/src/Set.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Set.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Set.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: Set.h 4591 2008-01-03 16:29:59Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -62,11 +62,18 @@
 class Set {
 
 public:
+	/** Parse the set element and populate this object with its data.*/
 	Set(DOMElement* setElm);
+
+	/** Initialize the set and set the simple set flag to true */
 	Set();
+
+	/** Clean up all the set elements. */
 	~Set();
 
+	/** Parse the provided Set object element. */
 	void Parse(DOMElement* setElm);
+
 	VariableValueVector* GetVariableValues();
 	
 	AbsStateVector* GetFilters();
@@ -107,7 +114,12 @@
 */
 class SetException : public Exception {
 	public:
+		/** Set the error message and then set the severity to ERROR_FATAL. This is 
+			done with the explicit call to the Exception class constructor that 
+			takes a single string param.
+		*/
 		SetException(string errMsgIn = "", int severity = ERROR_FATAL, Exception *ex = NULL);
+
 		~SetException();
 };
 

Modified: trunk/ovalint/src/SetObject.cpp
===================================================================
--- trunk/ovalint/src/SetObject.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/SetObject.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SetObject.cpp 3897 2007-04-18 14:25:34Z bakerj $
+// $Id: SetObject.cpp 4590 2008-01-03 16:29:32Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete SetObject
+	//	Create a complete SetObject
 	//
 	// -----------------------------------------------------------------------
 
@@ -90,8 +90,10 @@
 	//
 	// -----------------------------------------------------------------------
 	
-	VariableValueVector* varValues = new VariableValueVector();
+	VariableValueVector* varValues = NULL;
 
+	// This call is ok because the Set creates a new VariableValueVector 
+	// and returns it to the caller 
 	varValues = this->GetSet()->GetVariableValues();
 
 	return varValues;

Modified: trunk/ovalint/src/SetObject.h
===================================================================
--- trunk/ovalint/src/SetObject.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/SetObject.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SetObject.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: SetObject.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/State.cpp
===================================================================
--- trunk/ovalint/src/State.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/State.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: State.cpp 4140 2007-06-22 14:13:33Z bakerj $
+// $Id: State.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete State object
+	//	Create a complete State object
 	//
 	// -----------------------------------------------------------------------
 
@@ -53,7 +53,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete State object
+	//	Create a complete State object
 	//
 	// -----------------------------------------------------------------------
 }
@@ -62,7 +62,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete State object
+	//	Create a complete State object
 	//
 	// -----------------------------------------------------------------------
 }
@@ -71,7 +71,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	AbsState class handles deleteing all elements
+	//	AbsState class handles deleting all elements
 	// -----------------------------------------------------------------------
 }
 
@@ -144,7 +144,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Parse the provided state from a defintion file into an State object
+	//	Parse the provided state from a definition file into an State object
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/State.h
===================================================================
--- trunk/ovalint/src/State.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/State.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: State.h 4140 2007-06-22 14:13:33Z bakerj $
+// $Id: State.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -44,7 +44,7 @@
 
 /**
 	This class represents a state in the oval definition schema.
-	States are used by tests for analysis pruposes. The State 
+	States are used by tests for analysis purposes. The State 
 	declares what an expected condition is for some item on a system.
 */
 class State : public AbsState {

Modified: trunk/ovalint/src/StateEntity.cpp
===================================================================
--- trunk/ovalint/src/StateEntity.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/StateEntity.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: StateEntity.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: StateEntity.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 	//	Abstract
 	//
 	//	Copy constructor.
-	//	Create a compelete StateEntity object based on the specified obj.
+	//	Create a complete StateEntity object based on the specified obj.
 	//
 	// -----------------------------------------------------------------------
 
@@ -59,7 +59,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete StateEntity object
+	//	Create a complete StateEntity object
 	//
 	// -----------------------------------------------------------------------
 
@@ -104,7 +104,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Return true iff this StateEntity is equal to the provided StateEntity
+	//	Return true if this StateEntity is equal to the provided StateEntity
 	// -----------------------------------------------------------------------
 	StateEntity* stateEntity = (StateEntity*)entity;
 	bool isEqual = false;

Modified: trunk/ovalint/src/StateEntity.h
===================================================================
--- trunk/ovalint/src/StateEntity.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/StateEntity.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: StateEntity.h 4123 2007-06-22 14:03:41Z bakerj $
+// $Id: StateEntity.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -39,7 +39,7 @@
 using namespace std;
 
 /**
-	This class represents an entity in the State as definted in the oval defintion schema. 
+	This class represents an entity in the State as definted in the oval definition schema. 
 	StateEntities have an entityCheck attribute in additional to all attributes defined in the 
 	AbsEntity class.
 */

Modified: trunk/ovalint/src/SubstringFunction.cpp
===================================================================
--- trunk/ovalint/src/SubstringFunction.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/SubstringFunction.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SubstringFunction.cpp 4135 2007-06-22 14:10:55Z bakerj $
+// $Id: SubstringFunction.cpp 4589 2008-01-03 16:29:12Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete Component object
+	//	Create a complete Component object
 	//
 	// -----------------------------------------------------------------------
 
@@ -149,7 +149,7 @@
 	//	parse the component element
 	// -----------------------------------------------------------------------
 
-	// get teh start and length attrs
+	// get the start and length attrs
 	string start = XmlCommon::GetAttributeByName(componentElm, "substring_start");
 	this->SetStart(atoi(start.c_str()));
 	string length = XmlCommon::GetAttributeByName(componentElm, "substring_length");
@@ -190,7 +190,9 @@
 		for(varIterator = tmp->begin(); varIterator != tmp->end(); varIterator++) {
 			values->push_back((*varIterator));
 		}
-		// TODO - do i need this delte call?
+		// BUG - These can not currenrtly be deleted. 
+		// The code is no consistant here. In places a new vector is returned
+		// in others a reference to a vector that is managed by other code is returned.
 		//delete tmp;
 		//tmp = NULL;
 	}

Modified: trunk/ovalint/src/SubstringFunction.h
===================================================================
--- trunk/ovalint/src/SubstringFunction.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/SubstringFunction.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SubstringFunction.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: SubstringFunction.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Test.cpp
===================================================================
--- trunk/ovalint/src/Test.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Test.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Test.cpp 4142 2007-06-22 15:37:13Z bakerj $
+// $Id: Test.cpp 4608 2008-01-04 18:03:02Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -31,7 +31,6 @@
 
 #include "Test.h"
 
-//TestVector Test::processedTests;
 TestMap Test::processedTestsMap;
 //****************************************************************************************//
 //								Test Class												  //	
@@ -375,7 +374,6 @@
 	//	Abstract
 	//
 	//	parses Test elm to a Test obj
-	//	calls Criteria->Parse() on the Criteria elm
 	//
 	// -----------------------------------------------------------------------
 
@@ -435,7 +433,7 @@
 
 		// Does the test have a object ref?
 		if(this->GetObjectId().compare("") == 0) {
-			// Assumes it is only unknowns tests that do not have an object specifier and sets result to unknown
+			// Assumes it is only unknown tests that do not have an object specifier and sets result to unknown
 			this->SetResult(OvalEnum::RESULT_UNKNOWN);
 		} else {
 			// get the collected object from the sc file
@@ -734,9 +732,9 @@
 			existenceResult = OvalEnum::RESULT_FALSE;
 		} else if(existsCount == 0 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount == 0) {
 			existenceResult = OvalEnum::RESULT_FALSE;
-		} else if((existsCount == 0 || existsCount >= 2) && doesNotExistCount >= 0 && errorCount >= 1 && notCollectedCount >= 0) {
+		} else if(existsCount >= 0 && doesNotExistCount >= 0 && errorCount >= 1 && notCollectedCount >= 0) {
 			existenceResult = OvalEnum::RESULT_ERROR;
-		} else if((existsCount == 0 || existsCount >= 2) && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount >= 1) {
+		} else if(existsCount >= 0 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount >= 1) {
 			existenceResult = OvalEnum::RESULT_UNKNOWN;
 		}
 

Modified: trunk/ovalint/src/Test.h
===================================================================
--- trunk/ovalint/src/Test.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Test.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Test.h 4142 2007-06-22 15:37:13Z bakerj $
+// $Id: Test.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -65,7 +65,7 @@
 class Test {
 
 public:
-	/** Create a compelete Test object **/
+	/** Create a complete Test object **/
 	Test();
 	~Test();
 

Modified: trunk/ovalint/src/TestedItem.cpp
===================================================================
--- trunk/ovalint/src/TestedItem.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/TestedItem.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: TestedItem.cpp 4140 2007-06-22 14:13:33Z bakerj $
+// $Id: TestedItem.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete Test object
+	//	Create a complete Test object
 	//
 	// -----------------------------------------------------------------------
 
@@ -74,7 +74,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Return the item field's value
+	//	Set the item field's value
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/TestedItem.h
===================================================================
--- trunk/ovalint/src/TestedItem.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/TestedItem.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: TestedItem.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: TestedItem.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/VariableComponent.cpp
===================================================================
--- trunk/ovalint/src/VariableComponent.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/VariableComponent.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: VariableComponent.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: VariableComponent.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete VariableComponent object
+	//	Create a complete VariableComponent object
 	//
 	// -----------------------------------------------------------------------
 
@@ -46,12 +46,7 @@
 }
 
 VariableComponent::~VariableComponent() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Do nothing for now
-	//
-	// -----------------------------------------------------------------------
+
 }
 
 // ***************************************************************************************	//
@@ -94,9 +89,17 @@
 		values->push_back((*iterator)->GetValue());
 	}
 
+	// need to create a copy of the messages.
+	StringVector* msg = this->GetVarRef()->GetMessages();
+	StringVector* messages = new StringVector();
+	StringVector::iterator iterator1;
+	for(iterator1 = msg->begin(); iterator1 != msg->end(); iterator1++) {
+		messages->push_back((*iterator1));
+	}
+
 	// create the ComponentValue to return. 
 	// Always passing the flag associated with this var ref and the values
-	ComponentValue* result = new ComponentValue(this->GetVarRef()->GetFlag(), values, this->GetVarRef()->GetMessages());
+	ComponentValue* result = new ComponentValue(this->GetVarRef()->GetFlag(), values, messages);
 
 	return result;
 }

Modified: trunk/ovalint/src/VariableComponent.h
===================================================================
--- trunk/ovalint/src/VariableComponent.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/VariableComponent.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: VariableComponent.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: VariableComponent.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/VariableFactory.cpp
===================================================================
--- trunk/ovalint/src/VariableFactory.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/VariableFactory.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: VariableFactory.cpp 4134 2007-06-22 14:10:38Z bakerj $
+// $Id: VariableFactory.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -46,7 +46,7 @@
 	//	Return a AbsVariable object for the specified id. 
 	//	- check to see if the variable has already been processed.
 	//	- determine what type of variable to process based on its element name
-	//	- call the appropriate varaible constructor
+	//	- call the appropriate variable constructor
 	//	- cache any newly parsed variable
 	//
 	// -----------------------------------------------------------------------

Modified: trunk/ovalint/src/VariableFactory.h
===================================================================
--- trunk/ovalint/src/VariableFactory.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/VariableFactory.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: VariableFactory.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: VariableFactory.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/VariableValue.cpp
===================================================================
--- trunk/ovalint/src/VariableValue.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/VariableValue.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: VariableValue.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: VariableValue.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -40,7 +40,7 @@
 	// -----------------------------------------------------------------------
 	//	Abstract
 	//
-	//	Create a compelete VariableValue object
+	//	Create a complete VariableValue object
 	//
 	// -----------------------------------------------------------------------
 
@@ -50,12 +50,6 @@
 }
 
 VariableValue::~VariableValue() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Do nothing for now
-	//
-	// -----------------------------------------------------------------------
 
 }
 

Modified: trunk/ovalint/src/VariableValue.h
===================================================================
--- trunk/ovalint/src/VariableValue.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/VariableValue.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: VariableValue.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: VariableValue.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/Version.cpp
===================================================================
--- trunk/ovalint/src/Version.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Version.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Version.cpp 4241 2007-06-28 18:29:01Z bakerj $
+// $Id: Version.cpp 4625 2008-01-09 15:10:01Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -38,7 +38,7 @@
 #define MAJOR_VERSION "5"
 #define MIN_COMPATIBLE_VERSION "5.0"
 #define VERSION "5.3"
-#define BUILD 20
+#define BUILD 40
 
 string Version::GetMinumumCompatibleVersion() {
 

Modified: trunk/ovalint/src/Version.h
===================================================================
--- trunk/ovalint/src/Version.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/Version.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: Version.h 3897 2007-04-18 14:25:34Z bakerj $
+// $Id: Version.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/XmlCommon.cpp
===================================================================
--- trunk/ovalint/src/XmlCommon.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/XmlCommon.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: XmlCommon.cpp 3897 2007-04-18 14:25:34Z bakerj $
+// $Id: XmlCommon.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/XmlCommon.h
===================================================================
--- trunk/ovalint/src/XmlCommon.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/XmlCommon.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: XmlCommon.h 3897 2007-04-18 14:25:34Z bakerj $
+// $Id: XmlCommon.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -146,7 +146,7 @@
 };
 
 /** 
-	This class represents an Exception that occured using one of teh XmlCommon functions.
+	This class represents an Exception that occured using one of the XmlCommon functions.
 */
 class XmlCommonException : public Exception {
 	public:

Modified: trunk/ovalint/src/XmlProcessor.cpp
===================================================================
--- trunk/ovalint/src/XmlProcessor.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/XmlProcessor.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: XmlProcessor.cpp 3690 2007-01-17 18:36:43Z bakerj $
+// $Id: XmlProcessor.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/XmlProcessor.h
===================================================================
--- trunk/ovalint/src/XmlProcessor.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/XmlProcessor.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: XmlProcessor.h 3694 2007-01-18 18:15:21Z bakerj $
+// $Id: XmlProcessor.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source	and	binary forms, with or without modification,	are

Modified: trunk/ovalint/src/XslCommon.cpp
===================================================================
--- trunk/ovalint/src/XslCommon.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/XslCommon.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: XslCommon.cpp 4127 2007-06-22 14:08:26Z bakerj $
+// $Id: XslCommon.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/XslCommon.h
===================================================================
--- trunk/ovalint/src/XslCommon.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/XslCommon.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: XslCommon.h 4133 2007-06-22 14:10:23Z bakerj $
+// $Id: XslCommon.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/linux/DataCollector.cpp
===================================================================
--- trunk/ovalint/src/linux/DataCollector.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/DataCollector.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: DataCollector.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: DataCollector.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/linux/DataCollector.h
===================================================================
--- trunk/ovalint/src/linux/DataCollector.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/DataCollector.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: DataCollector.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: DataCollector.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/linux/FileFinder.cpp
===================================================================
--- trunk/ovalint/src/linux/FileFinder.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/FileFinder.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileFinder.cpp 3722 2007-01-24 16:30:56Z brendandg $
+// $Id: FileFinder.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -32,27 +32,64 @@
 #include "FileFinder.h"
 
 FileFinder::FileFinder() {
-	// -----------------------------------------------------------------------
-	//
-	//  ABSTRACT
-	//
-	// -----------------------------------------------------------------------
 
 }
 
 FileFinder::~FileFinder() {
-	// -----------------------------------------------------------------------
-	//
-	//  ABSTRACT
-	//
-	//	Do nothing for now
-	// -----------------------------------------------------------------------
 
 }
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  Private Members  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+
+StringVector* FileFinder::ProcessPathBehaviors(StringVector* paths, BehaviorVector* behaviors) {
+	
+	// Process the behaviors to identify any additional paths.
+	// initialize these default values based on the defaults 
+	// set in the oval definitions schema
+	string recurseDirection = Behavior::GetBehaviorValue(behaviors, "recurse_direction");
+	if(recurseDirection.compare("") == 0) {
+		recurseDirection = "none";
+	}
+
+	string maxDepthStr = Behavior::GetBehaviorValue(behaviors, "max_depth");
+	int maxDepth = -1;
+	if(maxDepthStr.compare("") != 0) {
+		maxDepth = atoi(maxDepthStr.c_str());
+		if(maxDepth < -1) 
+			maxDepth = -1;
+	}
+
+	string recurseStr = Behavior::GetBehaviorValue(behaviors, "recurse");
+	if(recurseStr.compare("") != 0) {
+		throw ProbeException("Unsupported behavior: recurse");
+	}
+
+	string recurse_file_systemStr = Behavior::GetBehaviorValue(behaviors, "recurse_file_system");
+	if(recurse_file_systemStr.compare("") != 0) {
+		throw ProbeException("Unsupported behavior: recurse_file_system");
+	}
+
+
+	// only need to address recurseDirection up & down if maxDepth is not 0
+	StringVector* behaviorPaths = new StringVector();
+	if(recurseDirection.compare("up") == 0 && maxDepth != 0) {
+		StringVector::iterator path;
+		for(path = paths->begin(); path != paths->end(); path++) {
+			this->UpwardPathRecursion(behaviorPaths, (*path), maxDepth);
+		}
+
+	} else if(recurseDirection.compare("down") == 0 && maxDepth != 0) {
+		StringVector::iterator path;
+		for(path = paths->begin(); path != paths->end(); path++) {
+			this->DownwardPathRecursion(behaviorPaths, (*path), maxDepth);
+		}
+	}
+
+	return behaviorPaths;
+}
+
 void FileFinder::FindPaths(string regex, StringVector* paths, bool isRegex) {
 	// -----------------------------------------------------------------------
 	//

Modified: trunk/ovalint/src/linux/FileFinder.h
===================================================================
--- trunk/ovalint/src/linux/FileFinder.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/FileFinder.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileFinder.h 3686 2007-01-16 20:09:36Z bakerj $
+// $Id: FileFinder.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -45,20 +45,29 @@
 using namespace std;
 
 /**
-	This class is the red hat file searching implmentation used by this application
+	This class is the linux file searching implmentation used by this application
 */
 class FileFinder : public AbsFileFinder {
 public:
 	FileFinder();
 	~FileFinder();
 
-protected:
+private:
+	/** Return the set of matching paths after applying behaviors.
+	    The only defined behaviors for unix files are:
+		recurse_direction, max_depth, recurse, and recurse_file_system
+		Currently only recurse_direction and max_depth are implemented.
+	*/
+	StringVector* ProcessPathBehaviors(StringVector* paths, BehaviorVector* behaviors);
+
 	bool PathExists(string path);
 	bool FileNameExists(string path, string fileName);
 	void FindPaths(string regex, StringVector* paths, bool isRegex = true);
 	void GetFilesForPattern(string path, string pattern, StringVector* fileNames, bool isRegex = true);
 	void GetPathsForPattern(string dirIn, string pattern, StringVector* pathVector, bool isRegex = true);	
-	/** Get the full path of all child directories as a StringVector. */
+	/** Get the full path of all child directories as a StringVector. 
+	    The caller is responsible for deleting the StringVector* of child paths.
+	*/
 	StringVector* GetChildDirectories(string path);
 };
 

Modified: trunk/ovalint/src/linux/ObjectCollector.cpp
===================================================================
--- trunk/ovalint/src/linux/ObjectCollector.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/ObjectCollector.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectCollector.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectCollector.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -51,7 +51,7 @@
 	//
 	//	Nothing for now
 	// -----------------------------------------------------------------------
-
+	
 	ProbeFactory::Shutdown();
 }
 

Modified: trunk/ovalint/src/linux/ObjectCollector.h
===================================================================
--- trunk/ovalint/src/linux/ObjectCollector.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/ObjectCollector.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectCollector.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectCollector.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/linux/ProbeFactory.cpp
===================================================================
--- trunk/ovalint/src/linux/ProbeFactory.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/ProbeFactory.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ProbeFactory.cpp 3687 2007-01-16 20:20:32Z bakerj $
+// $Id: ProbeFactory.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -35,12 +35,6 @@
 //								 Public members												//
 // ***************************************************************************************	//
 AbsProbe* ProbeFactory::GetProbe(string objectName) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Based on the provided object return the appropriate probe.
-	//	If a Probe is not found return null
-	// -----------------------------------------------------------------------
 
 	AbsProbe* probe = NULL;
 
@@ -54,7 +48,7 @@
 	} else if(objectName.compare("environmentvariable_object") == 0) {
 		probe = EnvironmentVariableProbe::Instance();
 	} else if(objectName.compare("textfilecontent_object") == 0) {
-		//probe = TextFileContentProbe::Instance();
+		probe = TextFileContentProbe::Instance();
 	} else if(objectName.compare("variable_object") == 0) {
 		probe = VariableProbe::Instance();
 	} else if(objectName.compare("xmlfilecontent_object") == 0) {
@@ -81,23 +75,22 @@
 		probe = UnameProbe::Instance();
 
 // here are the objects defined in the linux schema
+#ifdef PACKAGE_DPKG
 	} else if(objectName.compare("dpkginfo_object") == 0) {
-		// Not currently implemented
+		probe = DPKGInfoProbe::Instance();
+#endif
 	} else if(objectName.compare("inetlisteningservers_object") == 0) {
 		probe = InetListeningServersProbe::Instance();
+#ifdef PACKAGE_RPM
 	} else if(objectName.compare("rpminfo_object") == 0) {
 		probe = RPMInfoProbe::Instance();
+#endif
 	}
 
 	return probe;
 }
 
 void ProbeFactory::Shutdown() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Shutdown all probes
-	// -----------------------------------------------------------------------
 
 	AbsProbe* probe = NULL;
 
@@ -107,8 +100,15 @@
 	probe = UnameProbe::Instance();
 	delete probe;
 
-	probe = RPMInfoProbe::Instance();
-	delete probe;
+#ifdef PACKAGE_RPM
+ 	probe = RPMInfoProbe::Instance();
+ 	delete probe;
+#endif
+ 	
+#ifdef PACKAGE_DPKG
+ 	probe = DPKGInfoProbe::Instance();
+ 	delete probe;
+#endif
 
 	probe = ProcessProbe::Instance();
 	delete probe;

Modified: trunk/ovalint/src/linux/ProbeFactory.h
===================================================================
--- trunk/ovalint/src/linux/ProbeFactory.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/ProbeFactory.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ProbeFactory.h 3686 2007-01-16 20:09:36Z bakerj $
+// $Id: ProbeFactory.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -46,7 +46,13 @@
 #include "FileHashProbe.h"
 #include "FamilyProbe.h"
 #include "UnameProbe.h"
-#include "RPMInfoProbe.h"
+#ifdef PACKAGE_RPM
+ #include "RPMInfoProbe.h"
+#endif
+#ifdef PACKAGE_DPKG
+ #include "DPKGInfoProbe.h"
+#endif
+
 #include "InetListeningServersProbe.h"
 #include "ProcessProbe.h"
 //#include "ShadowProbe.h"
@@ -75,7 +81,7 @@
 public:
 	/**
 		Factory method. Based on the specifed object name return the appropriate probe.
-		@param objectName a string taht corresponds to the name of an object in the oval defintion schema.
+		@param objectName a string taht corresponds to the name of an object in the oval definition schema.
 		@return The probe for the specifed object or NULL.
 	*/
 	static AbsProbe* GetProbe(string objectName);

Modified: trunk/ovalint/src/linux/SystemInfo.cpp
===================================================================
--- trunk/ovalint/src/linux/SystemInfo.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/SystemInfo.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SystemInfo.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: SystemInfo.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/linux/SystemInfo.h
===================================================================
--- trunk/ovalint/src/linux/SystemInfo.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/linux/SystemInfo.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SystemInfo.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: SystemInfo.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -102,8 +102,8 @@
 typedef vector < IfData*, allocator<IfData*> > IfDataVector;
 
 /**
-	This class stores system info as defined in teh oval system characteristics schema.
-	A write method is provide for writing out the system infor element as defined in teh oval 
+	This class stores system info as defined in the oval system characteristics schema.
+	A write method is provide for writing out the system infor element as defined in the oval 
 	system characteristics schema.
 */
 class SystemInfo {

Modified: trunk/ovalint/src/probes/independent/EnvironmentVariableProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/independent/EnvironmentVariableProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/EnvironmentVariableProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: EnvironmentVariableProbe.cpp 4148 2007-06-22 16:39:44Z bakerj $
+// $Id: EnvironmentVariableProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/EnvironmentVariableProbe.h
===================================================================
--- trunk/ovalint/src/probes/independent/EnvironmentVariableProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/EnvironmentVariableProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: EnvironmentVariableProbe.h 4148 2007-06-22 16:39:44Z bakerj $
+// $Id: EnvironmentVariableProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/FamilyProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/independent/FamilyProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/FamilyProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FamilyProbe.cpp 4147 2007-06-22 16:36:36Z bakerj $
+// $Id: FamilyProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/FamilyProbe.h
===================================================================
--- trunk/ovalint/src/probes/independent/FamilyProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/FamilyProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FamilyProbe.h 4147 2007-06-22 16:36:36Z bakerj $
+// $Id: FamilyProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/FileHashProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/independent/FileHashProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/FileHashProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileHashProbe.cpp 4231 2007-06-28 14:45:34Z bakerj $
+// $Id: FileHashProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/FileHashProbe.h
===================================================================
--- trunk/ovalint/src/probes/independent/FileHashProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/FileHashProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileHashProbe.h 4167 2007-06-25 17:19:42Z bakerj $
+// $Id: FileHashProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/FileMd5Probe.cpp
===================================================================
--- trunk/ovalint/src/probes/independent/FileMd5Probe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/FileMd5Probe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileMd5Probe.cpp 4231 2007-06-28 14:45:34Z bakerj $
+// $Id: FileMd5Probe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/FileMd5Probe.h
===================================================================
--- trunk/ovalint/src/probes/independent/FileMd5Probe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/FileMd5Probe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileMd5Probe.h 4166 2007-06-25 17:15:11Z bakerj $
+// $Id: FileMd5Probe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/TextFileContentProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/independent/TextFileContentProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/TextFileContentProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: TextFileContentProbe.cpp 4231 2007-06-28 14:45:34Z bakerj $
+// $Id: TextFileContentProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -65,6 +65,13 @@
 	ObjectEntity* fileName = object->GetElementByName("filename");
 	ObjectEntity* line = object->GetElementByName("line");
 
+	if (line->GetDatatype() != OvalEnum::DATATYPE_STRING) {
+		throw ProbeException("Error: invalid datatype specified on line. Found: " + OvalEnum::DatatypeToString(line->GetDatatype()));
+	}
+	if (line->GetOperation() != OvalEnum::OPERATION_PATTERN_MATCH) {
+		throw ProbeException("Error: invalid operation specified on line. Found: " + OvalEnum::OperationToString(line->GetOperation()));
+	}
+
 	FileFinder fileFinder;
 	StringPairVector* filePaths = fileFinder.SearchFiles(path, fileName, object->GetBehaviors());
 
@@ -103,18 +110,14 @@
 
 			} else {
 
-				Item* item = this->GetLines(fp->first, fp->second, line);
-				if(item != NULL) {
-					collectedItems->push_back(item);
-				}
-				item = NULL;
-
+				this->GetLines(fp->first, fp->second, line, collectedItems);
 			}
 
 			delete fp;
 		}
 
 	} else {
+
 		// if no filepaths check if the code should report that the path does not exist
 		StringVector paths;
 		if(fileFinder.ReportPathDoesNotExist(path, &paths)) {
@@ -150,7 +153,7 @@
 	return item;
 }
 
-Item* TextFileContentProbe::GetLines(string path, string fileName, ObjectEntity* line) {
+void TextFileContentProbe::GetLines(string path, string fileName, ObjectEntity* line, ItemVector* collectedItems) {
 
 	Item *item = NULL;
 
@@ -166,13 +169,46 @@
 	}
 
 	// read the file line by line
+	string buffer;
+	ifstream infile;
+	infile.open (filePath.c_str());
+	if (infile.is_open()) {
 
-	// call the GetSubstrings method	
+		while (!infile.eof()) {
+			
+			StringVector* results = new StringVector();
+			
+			// call the GetSubstrings method	
+			getline (infile, buffer);
+			if (this->GetSubstrings (buffer, line, results)) {
 
-	return item;
+				// create one item if there were any matching substrings
+				item = this->CreateItem();
+				collectedItems->push_back(item);
+				item->SetStatus(OvalEnum::STATUS_EXISTS);
+				item->AppendElement(new ItemEntity("path", path, OvalEnum::DATATYPE_STRING, true, OvalEnum::STATUS_EXISTS));
+				item->AppendElement(new ItemEntity("filename", fileName, OvalEnum::DATATYPE_STRING, true, OvalEnum::STATUS_EXISTS));
+				item->AppendElement(new ItemEntity("line", buffer, OvalEnum::DATATYPE_STRING, true, OvalEnum::STATUS_EXISTS));
+
+				StringVector::iterator iterator;
+				for (iterator = results->begin(); iterator != results->end(); iterator++) {
+					// add a line for each matching subexpression
+					item->AppendElement(new ItemEntity("subexpression", (*iterator), OvalEnum::DATATYPE_STRING, true, OvalEnum::STATUS_EXISTS));					
+				}
+			} 
+		}
+		infile.close();
+	}
 }
 
-bool TextFileContentProbe::GetSubsrtings(string lineFromFile, ObjectEntity* line, StringVector* substrings) {
+bool TextFileContentProbe::GetSubstrings(string lineFromFile, ObjectEntity* line, StringVector* substrings) {
 
-	return false;
-}
\ No newline at end of file
+	bool retVal = false;
+	string pattern = line->GetValue();
+
+	if (this->myMatcher->GetMatchingSubstrings(pattern.c_str(), lineFromFile.c_str(), substrings) ) {
+		retVal = true;
+	}
+
+	return retVal;
+}

Modified: trunk/ovalint/src/probes/independent/TextFileContentProbe.h
===================================================================
--- trunk/ovalint/src/probes/independent/TextFileContentProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/TextFileContentProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: TextFileContentProbe.h 4177 2007-06-25 18:57:36Z bakerj $
+// $Id: TextFileContentProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -34,6 +34,7 @@
 
 #include "FileFinder.h"
 #include "AbsProbe.h"
+#include <fstream>
 
 #ifdef WIN32
 	#define SNPRINTF _snprintf
@@ -44,8 +45,44 @@
 using namespace std;
 
 /**
-	This class is responsible for collecting date for the :ind-sctextfilecontent_item definied OVAL System Characteristics Schema.
-	This class should be platform independant.
+	This class is responsible for collecting data for the ind-sc:textfilecontent_item defined OVAL System Characteristics Schema.
+	This class should be platform independent.
+
+	--- SCHEMA BUG AND RELATED INTERPRETER BUG ---
+	There is a known issue with the schema definition of this object in the oval-definitions-schema and corresponding
+	item in the oval-system-characteristics-schema. There are three key issues and a pending feature request related to
+	this object. Each is described below:
+
+	- Feature Request - Allow matching to occur over multiple lines. When checking system configurations contained 
+	in text files sections of the text file must frequently first be identified before looking for a particular 
+	setting. A request was made to allow for regular expressions that would match multi lines at once.
+
+	- BUG - If a pattern used in a textfilecontent_object identifies two identical lines in a file only one item will
+	be written to the system characteristics file. This is due to the fact that all items must be unique. The only way 
+	to uniquely identify a line in a text file is line number and/or character position. One possible fix to this bug would
+	be to add a position element to the textfilecontent_object. This solution would allow lines to be uniquely identified.
+
+	- BUG - If 2 different textfilecontent_objects identify the same file and the regular expressions identified by the 
+	2 objects' line entity identify overlapping lines only the first set of subexpressions for the overlapping line matches
+	will be recorded in the item. This is due to the fact that collection efforts for one regex are not currently seperable
+	from collection efforts for another regex.
+
+	- BUG - If a textfilecontent_object has a line regular expression which identifies more than one substring in a line
+	it is not possible to know which resulting substrings in the item correspond with which subexpression in the line regex. 
+	When one or more of the subexpressions in the line regex do not match any substring it is not possible to convey that
+	no substring was matched for a specific subexpression.
+
+	Below is a proposed change tot he textfilecontent object and state:
+	<textfilecontent_object ...>
+      <path>C:\mydir</path>
+      <filename>myfile.txt</filename>
+      <position>6:0</position><!-- line:char index possibly to include length too -->
+      <pattern>(ol).+(ak)\.\n(ok).</pattern><!-- defined in schema to be a regular expression only that identifies one substring -->
+	</textfilecontent_object>
+	<textfilecontent_state ...>
+      <substring>ol</substring><!-- one substring -->
+    </textfilecontent_state>
+
 */
 class TextFileContentProbe : public AbsProbe {
 
@@ -68,20 +105,15 @@
 
 	/** Return true if the specified line matches the criteria in the ObjectEntity. 
 		If true any resulting substrings are returned on the substrings vector. 
-
-		TODO: need to implement
 	*/
-	bool GetSubsrtings(string lineFromFile, ObjectEntity* line, StringVector* substrings);
+	bool GetSubstrings(string lineFromFile, ObjectEntity* line, StringVector* substrings);
 
-	/** Read the specified file one line at time and add matching lines to the resultiong Item.
-		Call out to the GetSubstrings function to determine if a given line in a file matches the criteria
-		specified in the ObjectEntity. 
-
-		TODO: need to implement
+	/** Read the specified file one line at time if any matching line is found with matching 
+		subexpressions create a new item and add it topt he set of collectedItems. If none 
+		are found the set is returned empty. Calls out to the GetSubstrings function to 
+		determine if a given line in a file matches the criteria specified in the ObjectEntity. 
 	*/
-	Item* GetLines(string path, string fileName, ObjectEntity* line);
-
-
+	void GetLines(string path, string fileName, ObjectEntity* line, ItemVector* collectedItems);
 };
 
 #endif

Modified: trunk/ovalint/src/probes/independent/VariableProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/independent/VariableProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/VariableProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: VariableProbe.cpp 4147 2007-06-22 16:36:36Z bakerj $
+// $Id: VariableProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -188,7 +188,7 @@
 
 Item* VariableProbe::GetItemForVarId(string varId) {
 
-	// not that if the oval-definitions docuemnt is valid the variable id will always exist. 
+	// not that if the oval-definitions document is valid the variable id will always exist. 
 	// So an item should always be returned
 
 	Item* item = NULL;

Modified: trunk/ovalint/src/probes/independent/VariableProbe.h
===================================================================
--- trunk/ovalint/src/probes/independent/VariableProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/VariableProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: VariableProbe.h 4147 2007-06-22 16:36:36Z bakerj $
+// $Id: VariableProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/XmlFileContentProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/independent/XmlFileContentProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/XmlFileContentProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: XmlFileContentProbe.cpp 4231 2007-06-28 14:45:34Z bakerj $
+// $Id: XmlFileContentProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/independent/XmlFileContentProbe.h
===================================================================
--- trunk/ovalint/src/probes/independent/XmlFileContentProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/independent/XmlFileContentProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: XmlFileContentProbe.h 4178 2007-06-25 19:05:04Z bakerj $
+// $Id: XmlFileContentProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Added: trunk/ovalint/src/probes/linux/DPKGInfoProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/linux/DPKGInfoProbe.cpp	                        (rev 0)
+++ trunk/ovalint/src/probes/linux/DPKGInfoProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -0,0 +1,381 @@
+//
+// $Id: DPKGInfoProbe.cpp 4194 2007-07-10 15:33:35Z blaze $
+//
+//****************************************************************************************//
+// Copyright (c) 2002-2008, The MITRE Corporation
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+//     * Redistributions of source code must retain the above copyright notice, this list
+//       of conditions and the following disclaimer.
+//     * 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.
+//     * Neither the name of The MITRE Corporation 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+//
+//****************************************************************************************//
+
+#include "DPKGInfoProbe.h"
+
+//****************************************************************************************//
+//				DPKGInfoProbe Class					  //	
+//****************************************************************************************//
+DPKGInfoProbe *DPKGInfoProbe::instance = NULL;
+
+DPKGInfoProbe::DPKGInfoProbe() {
+	this->StatusFile = "/var/lib/dpkg/status";
+}
+
+DPKGInfoProbe::~DPKGInfoProbe() {
+
+}
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  Public Members  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+AbsProbe* DPKGInfoProbe::Instance() {
+
+	// Use lazy initialization
+	if(instance == NULL) 
+		instance = new DPKGInfoProbe();
+
+	return instance;	
+}
+
+//bad
+ItemVector* DPKGInfoProbe::CollectItems(Object* object) {
+
+	ItemVector *collectedItems = new ItemVector();
+
+	ObjectEntity* name = object->GetElementByName("name");
+
+	// check datatypes - only allow string
+	if(name->GetDatatype() != OvalEnum::DATATYPE_STRING) {
+		throw ProbeException("Error: invalid data type specified on name. Found: " + OvalEnum::DatatypeToString(name->GetDatatype()));
+	}
+
+	// check operation - only allow  equals, not equals and pattern match
+	if(name->GetOperation() != OvalEnum::OPERATION_EQUALS && name->GetOperation() != OvalEnum::OPERATION_PATTERN_MATCH && name->GetOperation() != OvalEnum::OPERATION_NOT_EQUAL) {
+		throw ProbeException("Error: invalid operation specified on name. Found: " + OvalEnum::OperationToString(name->GetOperation()));
+	}
+
+	StringVector* names = this->GetDPKGNames(name);
+	if(names->size() > 0) {
+		StringVector::iterator iterator;
+		for(iterator = names->begin(); iterator != names->end(); iterator++) {		
+			this->GetDPKGInfo((*iterator), collectedItems);
+		}
+	} else {
+
+		if(name->GetOperation() == OvalEnum::OPERATION_EQUALS) {
+
+			if(name->GetVarRef() == NULL) {
+
+				Item* item = this->CreateItem();
+				item->SetStatus(OvalEnum::STATUS_DOES_NOT_EXIST);
+				item->AppendElement(new ItemEntity("name",  name->GetValue(), OvalEnum::DATATYPE_STRING, true, OvalEnum::STATUS_DOES_NOT_EXIST));
+				collectedItems->push_back(item);
+
+			} else {
+
+				VariableValueVector::iterator iterator;
+				for(iterator = name->GetVarRef()->GetValues()->begin(); iterator != name->GetVarRef()->GetValues()->end(); iterator++) {
+
+					Item* item = this->CreateItem();
+					item->SetStatus(OvalEnum::STATUS_DOES_NOT_EXIST);
+					item->AppendElement(new ItemEntity("name",  (*iterator)->GetValue(), OvalEnum::DATATYPE_STRING, true, OvalEnum::STATUS_DOES_NOT_EXIST));
+					collectedItems->push_back(item);
+				}
+			}
+		}
+	}
+	names->clear();
+	delete names;
+
+	return collectedItems;
+}  
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  Private Members  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+Item* DPKGInfoProbe::CreateItem() {
+	// -----------------------------------------------------------------------
+	//
+	//  ABSTRACT
+	//
+	//  Return a new Item created for storing file information
+	//
+	// -----------------------------------------------------------------------
+
+	Item* item = new Item(0, 
+						"http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#linux", 
+						"linux-sc", 
+						"http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#linux linux-system-characteristics-schema.xsd", 
+						OvalEnum::STATUS_ERROR, 
+						"dpkginfo_item");
+
+	return item;
+}
+
+StringVector* DPKGInfoProbe::GetDPKGNames(ObjectEntity* name) {
+	// -----------------------------------------------------------------------
+	//
+	//  ABSTRACT
+	//
+	//  Get the set of all rpm names on the system that match the object
+	//
+	// -----------------------------------------------------------------------
+	StringVector* names = NULL;
+
+	// does this name use variables?
+	if(name->GetVarRef() == NULL) {
+		
+		// proceed based on operation
+		if(name->GetOperation() == OvalEnum::OPERATION_EQUALS) {
+			names = new StringVector();
+			// if the name exists add it to the list 
+			if(this->DPKGExists(name->GetValue())) {
+				names->push_back(name->GetValue());
+			}
+
+		} else if(name->GetOperation() == OvalEnum::OPERATION_NOT_EQUAL) {
+			
+			names = this->GetMatchingDPKGNames(name->GetValue(), false);
+
+		} else if(name->GetOperation() == OvalEnum::OPERATION_PATTERN_MATCH) {
+			names = this->GetMatchingDPKGNames(name->GetValue(), true);
+		}		
+
+	} else {
+
+		names = new StringVector();
+
+		// Get all names
+		StringVector allNames;
+
+		if(name->GetOperation() == OvalEnum::OPERATION_EQUALS) {
+			// in the case of equals simply loop through all the 
+			// variable values and add them to the set of all names
+			// if they exist on the system
+			VariableValueVector::iterator iterator;
+			for(iterator = name->GetVarRef()->GetValues()->begin(); iterator != name->GetVarRef()->GetValues()->end(); iterator++) {
+				
+				if(this->DPKGExists((*iterator)->GetValue())) {
+					allNames.push_back((*iterator)->GetValue());
+				}
+			}
+
+		} else {
+            		this->GetMatchingDPKGNames(".*", &allNames);
+		}
+	
+		// loop through all names on the system
+		// only keep names that match operation and value and var check
+		ItemEntity* tmp = this->CreateItemEntity(name);
+		StringVector::iterator it;
+		for(it = allNames.begin(); it != allNames.end(); it++) {
+			tmp->SetValue((*it));
+			
+			if(name->Analyze(tmp) == OvalEnum::RESULT_TRUE) {
+				names->push_back((*it));
+			}
+		}
+	}
+
+	return names;
+}
+
+//bad
+StringVector* DPKGInfoProbe::GetMatchingDPKGNames(string pattern, bool isRegex) {
+	// -----------------------------------------------------------------------
+	//
+	//  ABSTRACT
+	//
+	//  Get the set of all rpm names on the system that match the pattern
+	//
+	// -----------------------------------------------------------------------
+	
+	string installed_dpkg_name;
+	string installed_dpkg_status;
+
+	StringVector* names = new StringVector ();
+
+	FileFd Fd(this->StatusFile, FileFd::ReadOnly);
+	pkgTagFile Tags(&Fd);
+
+	if (_error->PendingError() == true)
+		throw ProbeException("Error: (DPKGInfoProbe) Could not read DPKG status file, which is necessary to read the packages status.");
+   
+	pkgTagSection Section;
+		
+	while (Tags.Step(Section) == true)
+   	{
+		/* Fetch the name, auto-detecting if this is a source file or a package file */
+		installed_dpkg_name = readHeaderString (Section, "Package");
+      		installed_dpkg_status = readHeaderString (Section, "Status");
+		if ( installed_dpkg_status.compare ("install ok installed") == 0 ) 
+		{
+			if (this->IsMatch (pattern, installed_dpkg_name, isRegex))
+				names->push_back (installed_dpkg_name);
+		}
+   	}
+	
+   	if (_error->PendingError() == true)
+   		throw ProbeException("Error: (DPKGInfoProbe) Error while walking DPKG database.");
+
+	return names;
+}
+
+bool DPKGInfoProbe::DPKGExists(string name) {
+	// -----------------------------------------------------------------------
+	//
+	//  ABSTRACT
+	//
+	//  return true if the specifeid deb exists
+	//
+	// -----------------------------------------------------------------------
+	bool exist = false;
+	bool found = false;
+	
+	FileFd Fd(this->StatusFile, FileFd::ReadOnly);
+	pkgTagFile Tags(&Fd);
+
+	if (_error->PendingError() == true) {
+		throw ProbeException("Error: (DPKGInfoProbe) Could not read DPKG status file, which is necessary to read the DPKG database.");
+	}
+   
+	pkgTagSection Section;
+	
+	while (Tags.Step(Section) == true && found == false)
+   	{
+    		/* Fetch the name, auto-detecting if this is a source file or a package file */
+      		string installed_dpkg_name = readHeaderString (Section, "Package");
+      		string installed_dpkg_status = readHeaderString (Section, "Status");
+      		
+      		if (installed_dpkg_name.empty() == true)
+      			throw ProbeException("Error: (DPKGInfoProbe) Error while walking DPKG database.");
+      
+      		if ( installed_dpkg_name.compare (name) == 0 ) 
+      		{
+      			if (installed_dpkg_status.compare ("install ok installed") == 0 ) 
+      			{
+      				exist = true;
+	      		}	
+	      		found = true; 
+      		}
+		}
+	
+   	if (_error->PendingError() == true)
+   		throw ProbeException("Error: (DPKGInfoProbe) Error while walking DPKG database.");
+   	
+   	return exist;
+}
+
+//bad
+void DPKGInfoProbe::GetDPKGInfo(string name, ItemVector* items) {
+  //------------------------------------------------------------------------------------//
+  //
+  //  ABSTRACT
+  //
+  //  Get the data for all packages that have the name that matches dpkg_name.  
+  //
+  //------------------------------------------------------------------------------------//
+
+  /* Get the dpkg_name form the data object. */
+  const char *dpkg_name = name.c_str();
+
+  /* Create a tmp data object reference. */
+  Item *item = NULL;
+
+  /* Epoch, version, release and architecture data for output. */
+  string installed_epoch, installed_version, installed_release,installed_architecture, installed_evr;
+  string installedEpochEvr;
+
+    /* Header object for the installed package. */
+  pkgTagSection section;
+
+  /* Read in the DPKG status files */
+  FileFd Fd(this->StatusFile, FileFd::ReadOnly);
+  pkgTagFile Tags(&Fd);
+
+  if (_error->PendingError() == true) {
+	  throw ProbeException("Error: (DPKGInfoProbe) Could not read DPKG status file, which is necessary to read the DPKG database.");
+  }
+
+  while (Tags.Step(section) == true)
+  {
+	  /* Fetch the name, auto-detecting if this is a source file or a package file */
+	  string installed_dpkg_name = readHeaderString (section, "Package");
+	  string installed_dpkg_status = readHeaderString (section, "Status");
+    		
+	  if ( installed_dpkg_name.compare (dpkg_name) == 0 ) 
+	  {
+		  if (installed_dpkg_status.compare ("install ok installed") == 0 ) 
+		  {
+			  /* epoch is an int_32 -- we'll display a string to handle the None case well. */
+			  /*    char intermediate_string[11];
+			      int_32 epoch = readHeaderInt32(header, RPMTAG_EPOCH);
+			  	string installedEpochEvr;
+			  	if (epoch == -1 ) {
+			        installed_epoch = "(none)";
+			  		installedEpochEvr = "0";
+			  	} else {
+			        snprintf(intermediate_string,11,"%d",epoch);
+			        installed_epoch = intermediate_string;
+			  	  installedEpochEvr = installed_epoch;
+			      }
+			*/
+			  	//installed_epoch = "(none)";
+				installed_epoch = "0";
+			  	installedEpochEvr = installed_epoch;
+			  /* the remaining arguments are all normal strings */
+				string version = this->readHeaderString(section, "Version");
+				string::size_type find = version.rfind('-');
+				if (find != string::npos) {
+					installed_version = version.substr(0, find);
+					installed_release = version.substr(find+1, version.length());
+				} else {
+					installed_version = version;
+					installed_release = "0";
+				}
+			    	installed_architecture = this->readHeaderString(section, "Architecture");
+				installed_evr = installedEpochEvr + ":" + installed_version + "-" + installed_release;
+
+			    /* Put the data in a data object. */
+			    item = this->CreateItem();
+			    item->SetStatus(OvalEnum::STATUS_EXISTS);
+				item->AppendElement(new ItemEntity("name",  name, OvalEnum::DATATYPE_STRING, true, OvalEnum::STATUS_EXISTS));
+				item->AppendElement(new ItemEntity("arch",  installed_architecture, OvalEnum::DATATYPE_STRING, false, OvalEnum::STATUS_EXISTS));
+				item->AppendElement(new ItemEntity("epoch",  installed_epoch, OvalEnum::DATATYPE_STRING, false, OvalEnum::STATUS_EXISTS));
+				item->AppendElement(new ItemEntity("release",  installed_release, OvalEnum::DATATYPE_STRING, false, OvalEnum::STATUS_EXISTS));
+				item->AppendElement(new ItemEntity("version",  installed_version, OvalEnum::DATATYPE_STRING, false, OvalEnum::STATUS_EXISTS));
+				item->AppendElement(new ItemEntity("evr",  installed_evr, OvalEnum::DATATYPE_STRING, false, OvalEnum::STATUS_EXISTS));
+
+			    /* add the new item to the vector. */
+			    items->push_back(item);
+		  }
+	  }
+  }
+}
+
+string DPKGInfoProbe::readHeaderString(pkgTagSection Section, char* sectionName) {
+	string value;
+
+	value = Section.FindS(sectionName);
+
+	return (value);
+}

Added: trunk/ovalint/src/probes/linux/DPKGInfoProbe.h
===================================================================
--- trunk/ovalint/src/probes/linux/DPKGInfoProbe.h	                        (rev 0)
+++ trunk/ovalint/src/probes/linux/DPKGInfoProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -0,0 +1,109 @@
+//
+// $Id: DPKGInfoProbe.h 4194 2007-07-03 15:33:35Z blaze $
+//
+//****************************************************************************************//
+// Copyright (c) 2002-2008, The MITRE Corporation
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+//     * Redistributions of source code must retain the above copyright notice, this list
+//       of conditions and the following disclaimer.
+//     * 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.
+//     * Neither the name of The MITRE Corporation 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+//
+//****************************************************************************************//
+
+#ifndef DPKGInfoProbe_H
+#define DPKGInfoProbe_H
+
+#include "AbsProbe.h"
+
+#include <apt-pkg/progress.h> 	//OpTextProgress
+#include <apt-pkg/cachefile.h> 	//pkgCacheFile
+#include <apt-pkg/configuration.h> //_config
+#include <apt-pkg/tagfile.h>	//pkgTagFile, pkgTagSection 
+#include <apt-pkg/error.h> 	//_error
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/termios.h>
+#include <sys/wait.h>
+
+#include <fcntl.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+using namespace std;
+/**
+	Data collector for dpkg info test.
+*/
+class DPKGInfoProbe : public AbsProbe {
+public:
+	~DPKGInfoProbe();       
+
+	ItemVector* CollectItems(Object* object);
+	Item* CreateItem();
+
+	/** Ensure that the DPKGInfoProbe is a singleton. */
+	static AbsProbe* Instance();
+
+private:
+	string StatusFile;
+
+	DPKGInfoProbe();
+
+	/**
+		Return the name of all debs on the system that match the specirfied Object entity's criteria.
+		All names that are return have been checked and exist on the system.
+		@param name an ObjectEntity* that represents the objects to collect on the system
+		@return The matching names
+	*/
+	StringVector* GetDPKGNames(ObjectEntity* name);
+
+	/**
+		Get all deb names on the system that match the specified pattern.
+		@param pattern a string used that deb names are compared against.
+		@param isRegex a bool that is indicates how system deb names should be compared against the specifed pattern
+		@return The set of matching names.
+	*/
+	StringVector* GetMatchingDPKGNames(string pattern, bool isRegex);
+
+	/**
+		Return true if the specifeid deb exists on the system.
+		@param name a string that hold the name of the deb to check for.
+		@result The result of checking for the specifed deb on the system.
+	*/
+	bool DPKGExists(string name);
+
+	/**
+		Get all the information for the named deb.
+		@param name a string representing the name of an deb on the system.
+		@param items a vector of items that matched the deb name.
+	*/
+	void GetDPKGInfo(string name, ItemVector* items);
+
+	string readHeaderString(pkgTagSection section, char* sectionName);
+
+	static DPKGInfoProbe *instance;
+};
+
+#endif
+

Modified: trunk/ovalint/src/probes/linux/InetListeningServersProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/linux/InetListeningServersProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/linux/InetListeningServersProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: InetListeningServersProbe.cpp 4193 2007-06-26 14:45:58Z bakerj $
+// $Id: InetListeningServersProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -737,7 +737,7 @@
   buf = (char*)malloc(sizeof(char*)*1024);
   if(buf == NULL) {
 
-    // Wait for the child process to compelete
+    // Wait for the child process to complete
     waitpid (pid, NULL, 0);
       
     // Close the pipes
@@ -794,7 +794,7 @@
     }
   }
   
-  // Wait for the child process to compelete
+  // Wait for the child process to complete
   if(waitpid (pid, NULL, 0) == -1) {
     result->errText.append("Execution of netstat in child process failed.");
     return result;

Modified: trunk/ovalint/src/probes/linux/InetListeningServersProbe.h
===================================================================
--- trunk/ovalint/src/probes/linux/InetListeningServersProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/linux/InetListeningServersProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: InetListeningServersProbe.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: InetListeningServersProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/linux/RPMInfoProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/linux/RPMInfoProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/linux/RPMInfoProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: RPMInfoProbe.cpp 4194 2007-06-26 15:33:35Z bakerj $
+// $Id: RPMInfoProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -534,7 +534,7 @@
   buf = (char*)malloc(sizeof(char*)*1024);
   if(buf == NULL) {
 
-    // Wait for the child process to compelete
+    // Wait for the child process to complete
     waitpid (pid, NULL, 0);
       
     // Close the pipes
@@ -588,7 +588,7 @@
     }
   }
   
-  // Wait for the child process to compelete
+  // Wait for the child process to complete
   if(waitpid (pid, NULL, 0) == -1) {
     errText.append("Execution of rpm query in child process failed.");
     throw ProbeException(errText);

Modified: trunk/ovalint/src/probes/linux/RPMInfoProbe.h
===================================================================
--- trunk/ovalint/src/probes/linux/RPMInfoProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/linux/RPMInfoProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: RPMInfoProbe.h 4194 2007-06-26 15:33:35Z bakerj $
+// $Id: RPMInfoProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/unix/FileProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/unix/FileProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/unix/FileProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileProbe.cpp 4232 2007-06-28 14:46:38Z bakerj $
+// $Id: FileProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/unix/FileProbe.h
===================================================================
--- trunk/ovalint/src/probes/unix/FileProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/unix/FileProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileProbe.h 4182 2007-06-25 19:55:21Z bakerj $
+// $Id: FileProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/unix/ProcessProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/unix/ProcessProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/unix/ProcessProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ProcessProbe.cpp 4189 2007-06-26 14:38:19Z bakerj $
+// $Id: ProcessProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/unix/ProcessProbe.h
===================================================================
--- trunk/ovalint/src/probes/unix/ProcessProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/unix/ProcessProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ProcessProbe.h 4181 2007-06-25 19:31:55Z bakerj $
+// $Id: ProcessProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/unix/UnameProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/unix/UnameProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/unix/UnameProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: UnameProbe.cpp 4188 2007-06-26 14:32:39Z bakerj $
+// $Id: UnameProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/unix/UnameProbe.h
===================================================================
--- trunk/ovalint/src/probes/unix/UnameProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/unix/UnameProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: UnameProbe.h 4180 2007-06-25 19:23:29Z bakerj $
+// $Id: UnameProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/AccessTokenProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/AccessTokenProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/AccessTokenProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AccessTokenProbe.cpp 4173 2007-06-25 18:46:05Z bakerj $
+// $Id: AccessTokenProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -80,12 +80,16 @@
 		BehaviorVector::iterator iterator;
 		for(iterator = behaviors->begin(); iterator != behaviors->end(); iterator++) {
 			Behavior* behavior = (*iterator);
-			if(behavior->GetName().compare("include_group") == 0 && behavior->GetValue().compare("false") == 0) {
-				includeGroupBehavior = false;
-			} else if(behavior->GetName().compare("resolve_group") == 0 && behavior->GetValue().compare("true") == 0) {
-				resolveGroupBehavior = true;
+			if(behavior->GetName().compare("include_group") == 0) {
+				if(behavior->GetValue().compare("false") == 0) {
+					includeGroupBehavior = false;
+				}
+			} else if(behavior->GetName().compare("resolve_group") == 0) {
+				if(behavior->GetValue().compare("true") == 0) {
+					resolveGroupBehavior = true;
+				}
 			} else {
-				Log::Info("Unsupported behavior found when collecting " + object->GetId());
+				Log::Info("Unsupported behavior found when collecting " + object->GetId() + " behavior: " + behavior->GetName());
 			}
 		}		
 	}

Modified: trunk/ovalint/src/probes/windows/AccessTokenProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/AccessTokenProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/AccessTokenProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AccessTokenProbe.h 4155 2007-06-22 18:02:12Z bakerj $
+// $Id: AccessTokenProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -48,6 +48,7 @@
 class AccessTokenProbe : public AbsProbe {
 public:
 	~AccessTokenProbe();
+
 	/** Run the access token probe. 
 		Return a vector of Items. 
 

Modified: trunk/ovalint/src/probes/windows/AuditEventPolicyProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/AuditEventPolicyProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/AuditEventPolicyProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AuditEventPolicyProbe.cpp 4234 2007-06-28 14:48:07Z bakerj $
+// $Id: AuditEventPolicyProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/AuditEventPolicyProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/AuditEventPolicyProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/AuditEventPolicyProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: AuditEventPolicyProbe.h 4156 2007-06-22 18:10:52Z bakerj $
+// $Id: AuditEventPolicyProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/FileEffectiveRightsProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/FileEffectiveRightsProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/FileEffectiveRightsProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileEffectiveRightsProbe.cpp 4233 2007-06-28 14:47:36Z bakerj $
+// $Id: FileEffectiveRightsProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -158,7 +158,7 @@
 									collectedItems->push_back(item);
 								}
 							} catch (Exception ex) {
-								Log::Debug("Error while getting effictive rights for file. Path: " + fp->first + " Name: " + fp->second + ex.GetErrorMessage());
+								Log::Debug("Error while getting effective rights for file. Path: " + fp->first + " Name: " + fp->second + " " + ex.GetErrorMessage());
 							}
 						}
 						delete trusteeNames;
@@ -418,7 +418,7 @@
 									accessRights);
 	if (res != ERROR_SUCCESS) {
 		LocalFree(pSD);
-		throw ProbeException("Error unable to get effictive rights for trustee: " + trusteeName + " from dacl for file: " + filePath); 
+		throw ProbeException("Error unable to get effective rights for trustee: " + trusteeName + " from dacl for file: " + filePath); 
 	} 
 		
 	// Convert access mask to binary.

Modified: trunk/ovalint/src/probes/windows/FileEffectiveRightsProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/FileEffectiveRightsProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/FileEffectiveRightsProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileEffectiveRightsProbe.h 4171 2007-06-25 18:07:47Z bakerj $
+// $Id: FileEffectiveRightsProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/FileProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/FileProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/FileProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileProbe.cpp 4233 2007-06-28 14:47:36Z bakerj $
+// $Id: FileProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/FileProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/FileProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/FileProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileProbe.h 4113 2007-06-22 13:45:01Z bakerj $
+// $Id: FileProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/GroupProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/GroupProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/GroupProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: GroupProbe.cpp 4145 2007-06-22 16:01:52Z bakerj $
+// $Id: GroupProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -80,7 +80,7 @@
 	// get the group data
 	if(group->GetVarRef() == NULL) {
 		if(group->GetOperation() == OvalEnum::OPERATION_EQUALS) {
-			// simply get the members of teh group if it exists
+			// simply get the members of the group if it exists
 			Item* item =  this->GetGroupMembers(group->GetValue());
 			if(item != NULL) {
 				collectedItems->push_back(item);

Modified: trunk/ovalint/src/probes/windows/GroupProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/GroupProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/GroupProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: GroupProbe.h 4145 2007-06-22 16:01:52Z bakerj $
+// $Id: GroupProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/LockoutPolicyProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/LockoutPolicyProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/LockoutPolicyProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: LockoutPolicyProbe.cpp 4154 2007-06-22 17:54:54Z bakerj $
+// $Id: LockoutPolicyProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/LockoutPolicyProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/LockoutPolicyProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/LockoutPolicyProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: LockoutPolicyProbe.h 4154 2007-06-22 17:54:54Z bakerj $
+// $Id: LockoutPolicyProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/PasswordPolicyProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/PasswordPolicyProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/PasswordPolicyProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: PasswordPolicyProbe.cpp 4144 2007-06-22 15:58:44Z bakerj $
+// $Id: PasswordPolicyProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -136,7 +136,7 @@
 	//
 	//  ABSTRACT
 	//
-	//  Return a string representation of teh DWORD
+	//  Return a string representation of the DWORD
 	//
 	// -----------------------------------------------------------------------
 

Modified: trunk/ovalint/src/probes/windows/PasswordPolicyProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/PasswordPolicyProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/PasswordPolicyProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: PasswordPolicyProbe.h 4144 2007-06-22 15:58:44Z bakerj $
+// $Id: PasswordPolicyProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/RegistryProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/RegistryProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/RegistryProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: RegistryProbe.cpp 4173 2007-06-25 18:46:05Z bakerj $
+// $Id: RegistryProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/RegistryProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/RegistryProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/RegistryProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: RegistryProbe.h 4162 2007-06-25 13:16:56Z bakerj $
+// $Id: RegistryProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/SidProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/SidProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/SidProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SidProbe.cpp 4160 2007-06-25 12:44:00Z bakerj $
+// $Id: SidProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/SidProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/SidProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/SidProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SidProbe.h 4160 2007-06-25 12:44:00Z bakerj $
+// $Id: SidProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/UserProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/UserProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/UserProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: UserProbe.cpp 4143 2007-06-22 15:56:20Z bakerj $
+// $Id: UserProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/UserProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/UserProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/UserProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: UserProbe.h 4143 2007-06-22 15:56:20Z bakerj $
+// $Id: UserProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/WMIProbe.cpp
===================================================================
--- trunk/ovalint/src/probes/windows/WMIProbe.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/WMIProbe.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: WMIProbe.cpp 4161 2007-06-25 12:55:27Z bakerj $
+// $Id: WMIProbe.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/probes/windows/WMIProbe.h
===================================================================
--- trunk/ovalint/src/probes/windows/WMIProbe.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/probes/windows/WMIProbe.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: WMIProbe.h 4161 2007-06-25 12:55:27Z bakerj $
+// $Id: WMIProbe.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/solaris/DataCollector.cpp
===================================================================
--- trunk/ovalint/src/solaris/DataCollector.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/DataCollector.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: DataCollector.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: DataCollector.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/solaris/DataCollector.h
===================================================================
--- trunk/ovalint/src/solaris/DataCollector.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/DataCollector.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: DataCollector.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: DataCollector.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/solaris/FileFinder.cpp
===================================================================
--- trunk/ovalint/src/solaris/FileFinder.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/FileFinder.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileFinder.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: FileFinder.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/solaris/FileFinder.h
===================================================================
--- trunk/ovalint/src/solaris/FileFinder.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/FileFinder.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileFinder.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: FileFinder.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/solaris/ObjectCollector.cpp
===================================================================
--- trunk/ovalint/src/solaris/ObjectCollector.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/ObjectCollector.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectCollector.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectCollector.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/solaris/ObjectCollector.h
===================================================================
--- trunk/ovalint/src/solaris/ObjectCollector.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/ObjectCollector.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectCollector.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectCollector.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/solaris/ProbeFactory.cpp
===================================================================
--- trunk/ovalint/src/solaris/ProbeFactory.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/ProbeFactory.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ProbeFactory.cpp 3686 2007-01-16 20:09:36Z bakerj $
+// $Id: ProbeFactory.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -32,7 +32,7 @@
 //SOLARIS PORT NOTICE:
 
 //This code is copied from the linux version of this file. This code currently provides stubs for
-// inserting teh probes that might be needed by a solaris port of the interpreter. When a port to solaris
+// inserting the probes that might be needed by a solaris port of the interpreter. When a port to solaris
 //is provide this code needs to be both completed and tested.
 
 #include "ProbeFactory.h"
@@ -64,12 +64,10 @@
 	} else if(objectName.compare("environmentvariable_object") == 0) {
 		// SOLARIS PORT NOTICE: This probe was written for linux and windows systems and needs to be tested on solaris systems
 		probe = EnvironmentVariableProbe::Instance();
-	} else if(objectName.compare("textfilecontent_object") == 0) {
-		// not currently implemented
 	} else if(objectName.compare("variable_object") == 0) {
 		// SOLARIS PORT NOTICE: This probe was written for linux and windows systems and needs to be tested on solaris systems
 		probe = VariableProbe::Instance();
-	} else if(objectName.compare("testfilecontent_object") == 0) {
+	} else if(objectName.compare("textfilecontent_object") == 0) {
 		// SOLARIS PORT NOTICE: This probe was written for linux and windows systems and needs to be tested on solaris systems
 		probe = TextFileContentProbe::Instance();
 	} else if(objectName.compare("xmlfilecontent_object") == 0) {

Modified: trunk/ovalint/src/solaris/ProbeFactory.h
===================================================================
--- trunk/ovalint/src/solaris/ProbeFactory.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/ProbeFactory.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ProbeFactory.h 3686 2007-01-16 20:09:36Z bakerj $
+// $Id: ProbeFactory.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -76,7 +76,7 @@
 public:
 	/**
 		Factory method. Based on the specifed object name return the appropriate probe.
-		@param objectName a string taht corresponds to the name of an object in the oval defintion schema.
+		@param objectName a string taht corresponds to the name of an object in the oval definition schema.
 		@return The probe for the specifed object or NULL.
 	*/
 	static AbsProbe* GetProbe(string objectName);

Modified: trunk/ovalint/src/solaris/SystemInfo.cpp
===================================================================
--- trunk/ovalint/src/solaris/SystemInfo.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/SystemInfo.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SystemInfo.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: SystemInfo.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/solaris/SystemInfo.h
===================================================================
--- trunk/ovalint/src/solaris/SystemInfo.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/solaris/SystemInfo.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SystemInfo.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: SystemInfo.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -114,8 +114,8 @@
 typedef vector < IfData*, allocator<IfData*> > IfDataVector;
 
 /**
-	This class stores system info as defined in teh oval system characteristics schema.
-	A write method is provide for writing out the system infor element as defined in teh oval 
+	This class stores system info as defined in the oval system characteristics schema.
+	A write method is provide for writing out the system infor element as defined in the oval 
 	system characteristics schema.
 */
 class SystemInfo {

Modified: trunk/ovalint/src/windows/DataCollector.cpp
===================================================================
--- trunk/ovalint/src/windows/DataCollector.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/DataCollector.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: DataCollector.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: DataCollector.cpp 4595 2008-01-03 16:41:17Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -35,33 +35,17 @@
 //								DataCollector Class										  //	
 //****************************************************************************************//
 DataCollector::DataCollector() : AbsDataCollector() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//
-	// -----------------------------------------------------------------------
+
 }
 
 DataCollector::~DataCollector() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Nothing for now
-	// -----------------------------------------------------------------------
+
 }
 
 // ***************************************************************************************	//
 //								Static Public members										//
 // ***************************************************************************************	//
 void DataCollector::Init() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a new instance of the data collector
-	//	Set the oval and sc document references
-	//	Add the System info for this platform
-	//
-	// -----------------------------------------------------------------------
 
 	AbsDataCollector* odc = new DataCollector();
 	odc->InitBase(new ObjectCollector());
@@ -69,21 +53,8 @@
 	AbsDataCollector::instance = odc;
 }
 
-
 void DataCollector::WriteSystemInfo() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Create a new instance of the data collector
-	//	Set the oval and sc document references
-	//	Add the System info for this platform
-	//
-	// -----------------------------------------------------------------------
 
 	SystemInfo* systemInfo = SystemInfoCollector::CollectSystemInfo();
 	systemInfo->Write(DocumentManager::GetSystemCharacterisitcsDocument());
 }
-
-
-
-

Modified: trunk/ovalint/src/windows/DataCollector.h
===================================================================
--- trunk/ovalint/src/windows/DataCollector.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/DataCollector.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: DataCollector.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: DataCollector.h 4595 2008-01-03 16:41:17Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -50,10 +50,18 @@
 public:
 
 	~DataCollector();
+
+	/** Initialize the concrete DataCollector
+		Set the value of the instance variable in the AbsDataCollector.
+		Setup the sc document and add the System info for this platform 
+	*/
 	static void Init();
 
 protected:
 	DataCollector();
+
+	/** Write the system_info element for the sc docuemnet.
+	*/
 	void WriteSystemInfo();
 };
 

Modified: trunk/ovalint/src/windows/FileFinder.cpp
===================================================================
--- trunk/ovalint/src/windows/FileFinder.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/FileFinder.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileFinder.cpp 4164 2007-06-25 16:47:54Z bakerj $
+// $Id: FileFinder.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -42,6 +42,43 @@
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  Private Members  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
+
+StringVector* FileFinder::ProcessPathBehaviors(StringVector* paths, BehaviorVector* behaviors) {
+	
+	// Process the behaviors to identify any additional paths.
+	// initialize these default values based on the defaults 
+	// set in the oval definitions schema
+	string recurseDirection = Behavior::GetBehaviorValue(behaviors, "recurse_direction");
+	if(recurseDirection.compare("") == 0) {
+		recurseDirection = "none";
+	}
+
+	string maxDepthStr = Behavior::GetBehaviorValue(behaviors, "max_depth");
+	int maxDepth = -1;
+	if(maxDepthStr.compare("") != 0) {
+		maxDepth = atoi(maxDepthStr.c_str());
+		if(maxDepth < -1) 
+			maxDepth = -1;
+	}
+
+	// only need to address recurseDirection up & down if maxDepth is not 0
+	StringVector* behaviorPaths = new StringVector();
+	if(recurseDirection.compare("up") == 0 && maxDepth != 0) {
+		StringVector::iterator path;
+		for(path = paths->begin(); path != paths->end(); path++) {
+			this->UpwardPathRecursion(behaviorPaths, (*path), maxDepth);
+		}
+
+	} else if(recurseDirection.compare("down") == 0 && maxDepth != 0) {
+		StringVector::iterator path;
+		for(path = paths->begin(); path != paths->end(); path++) {
+			this->DownwardPathRecursion(behaviorPaths, (*path), maxDepth);
+		}
+	}
+
+	return behaviorPaths;
+}
+
 void FileFinder::FindPaths(string regex, StringVector* paths, bool isRegex) {
 
 	StringVector* drives;

Modified: trunk/ovalint/src/windows/FileFinder.h
===================================================================
--- trunk/ovalint/src/windows/FileFinder.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/FileFinder.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: FileFinder.h 4095 2007-06-22 13:16:39Z bakerj $
+// $Id: FileFinder.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -52,6 +52,14 @@
 	~FileFinder();
 
 private:
+
+	/** Return the set of matching paths after applying behaviors.
+	    Currently the only defined behaviors on windows are:
+		recurse_direction and max_depth
+		Both of these are implemented.
+	*/
+	StringVector* ProcessPathBehaviors(StringVector* paths, BehaviorVector* behaviors);
+
 	/** Return true if the specified path exists. */
 	bool PathExists(string path);
 

Modified: trunk/ovalint/src/windows/ObjectCollector.cpp
===================================================================
--- trunk/ovalint/src/windows/ObjectCollector.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/ObjectCollector.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectCollector.cpp 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectCollector.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -36,21 +36,11 @@
 //****************************************************************************************//
 
 ObjectCollector::ObjectCollector() : AbsObjectCollector() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Initialize the instance of the oval object collector
-	// -----------------------------------------------------------------------
-	
+
 	AbsObjectCollector::instance = this;
 }
 
 ObjectCollector::~ObjectCollector() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Nothing for now
-	// -----------------------------------------------------------------------
 
 	ProbeFactory::Shutdown();
 }
@@ -59,13 +49,6 @@
 //								Public members												//
 // ***************************************************************************************	//
 bool ObjectCollector::IsApplicable(AbsObject* object) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return true if the specified object is applicable to this object 
-	//	collector. All objects defined in the windows and independent schemas
-	//	are applocable
-	// -----------------------------------------------------------------------
 
 	bool isApplicable = false;
 
@@ -79,13 +62,7 @@
 }
 
 bool ObjectCollector::IsSupported(AbsObject* object) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return true if the specified object is supported by this object 
-	//	collector. 
-	// -----------------------------------------------------------------------
-
+	
 	bool isSupported = false;
 
 	if(ProbeFactory::GetProbe(object->GetName()) != NULL) {
@@ -96,12 +73,6 @@
 }
 
 AbsProbe* ObjectCollector::GetProbe(Object* object) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Return true if the specified object is supported to this object 
-	//	collector
-	// -----------------------------------------------------------------------
 
 	return ProbeFactory::GetProbe(object->GetName());
 }
\ No newline at end of file

Modified: trunk/ovalint/src/windows/ObjectCollector.h
===================================================================
--- trunk/ovalint/src/windows/ObjectCollector.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/ObjectCollector.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ObjectCollector.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: ObjectCollector.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -51,12 +51,26 @@
 class ObjectCollector : public AbsObjectCollector {
 public:
 
+	/** Initialize the instance of the oval object collector. */
 	ObjectCollector();
+
+	/** Destroy the object.
+		Shut down the ProbeFactory.
+	*/
 	~ObjectCollector();
 
 protected:
+	/** 
+		Return true if the input object is applicable on the host being evaluated.
+		Return true if the specified object is applicable to this object 
+		collector. All objects defined in the windows and independent schemas 
+		are applicable
+	*/
 	bool IsApplicable(AbsObject* object);
+	
+	
 	bool IsSupported(AbsObject* object);
+	
 	AbsProbe* GetProbe(Object* object);
 };
 

Modified: trunk/ovalint/src/windows/ProbeFactory.cpp
===================================================================
--- trunk/ovalint/src/windows/ProbeFactory.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/ProbeFactory.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ProbeFactory.cpp 4230 2007-06-28 14:41:31Z bakerj $
+// $Id: ProbeFactory.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -35,15 +35,10 @@
 //								 Public members												//
 // ***************************************************************************************	//
 AbsProbe* ProbeFactory::GetProbe(string objectName) {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Based on the provided object return the appropriate probe.
-	//	If a Probe is not found return null
-	// -----------------------------------------------------------------------
 
 	AbsProbe* probe = NULL;
 
+// windows schema objects
 	if(objectName.compare("file_object") == 0) {
 		probe = FileProbe::Instance();
 	} else if(objectName.compare("registry_object") == 0) {
@@ -54,20 +49,6 @@
 //		probe = MetabaseProbe::Instance();
 	} else if(objectName.compare("wmi_object") == 0) {
 		probe = WMIProbe::Instance();
-	} else if(objectName.compare("family_object") == 0) {
-		probe = FamilyProbe::Instance();
-	} else if(objectName.compare("environmentvariable_object") == 0) {
-		probe = EnvironmentVariableProbe::Instance();
-	} else if(objectName.compare("variable_object") == 0) {
-		probe = VariableProbe::Instance();
-	} else if(objectName.compare("textfilecontent_object") == 0) {
-		//probe = TextFileContentProbe::Instance();
-	} else if(objectName.compare("xmlfilecontent_object") == 0) {
-		probe = XmlFileContentProbe::Instance();
-	} else if(objectName.compare("filehash_object") == 0) {
-		probe = FileHashProbe::Instance();
-	} else if(objectName.compare("filemd5_object") == 0) {
-		probe = FileMd5Probe::Instance();
 	} else if(objectName.compare("passwordpolicy_object") == 0) {
 		probe = PasswordPolicyProbe::Instance();
 	} else if(objectName.compare("lockoutpolicy_object") == 0) {
@@ -85,17 +66,28 @@
 		probe = GroupProbe::Instance();
 	} else if(objectName.compare("user_object") == 0) {
 		probe = UserProbe::Instance();
+
+// independent schema objects
+	} else if(objectName.compare("family_object") == 0) {
+		probe = FamilyProbe::Instance();
+	} else if(objectName.compare("environmentvariable_object") == 0) {
+		probe = EnvironmentVariableProbe::Instance();
+	} else if(objectName.compare("variable_object") == 0) {
+		probe = VariableProbe::Instance();
+	} else if(objectName.compare("textfilecontent_object") == 0) {
+		probe = TextFileContentProbe::Instance();
+	} else if(objectName.compare("xmlfilecontent_object") == 0) {
+		probe = XmlFileContentProbe::Instance();
+	} else if(objectName.compare("filehash_object") == 0) {
+		probe = FileHashProbe::Instance();
+	} else if(objectName.compare("filemd5_object") == 0) {
+		probe = FileMd5Probe::Instance();
 	}	
 
 	return probe;
 }
 
 void ProbeFactory::Shutdown() {
-	// -----------------------------------------------------------------------
-	//	Abstract
-	//
-	//	Shutdown all probes
-	// -----------------------------------------------------------------------
 
 	AbsProbe* probe = NULL;
 
@@ -149,5 +141,8 @@
 
 	probe = FileEffectiveRightsProbe::Instance();
 	delete probe;
+
+	probe = TextFileContentProbe::Instance();
+	delete probe;
 }
 

Modified: trunk/ovalint/src/windows/ProbeFactory.h
===================================================================
--- trunk/ovalint/src/windows/ProbeFactory.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/ProbeFactory.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: ProbeFactory.h 3686 2007-01-16 20:09:36Z bakerj $
+// $Id: ProbeFactory.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -82,7 +82,7 @@
 public:
 	/** \callgraph
 		Factory method. Based on the specifed object name return the appropriate probe.
-		@param objectName a string taht corresponds to the name of an object in the oval defintion schema.
+		@param objectName a string taht corresponds to the name of an object in the oval definition schema.
 		@return The probe for the specifed object or NULL.
 	*/
 	static AbsProbe* GetProbe(string objectName);

Modified: trunk/ovalint/src/windows/SystemInfo.cpp
===================================================================
--- trunk/ovalint/src/windows/SystemInfo.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/SystemInfo.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SystemInfo.cpp 3801 2007-02-01 19:29:45Z bakerj $
+// $Id: SystemInfo.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/src/windows/SystemInfo.h
===================================================================
--- trunk/ovalint/src/windows/SystemInfo.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/SystemInfo.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: SystemInfo.h 3659 2007-01-09 17:43:02Z bakerj $
+// $Id: SystemInfo.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -88,8 +88,8 @@
 typedef vector < IfData*, allocator<IfData*> > IfDataVector;
 
 /**
-	This class stores system info as defined in teh oval system characteristics schema.
-	A write method is provide for writing out the system infor element as defined in teh oval 
+	This class stores system info as defined in the oval system characteristics schema.
+	A write method is provide for writing out the system infor element as defined in the oval 
 	system characteristics schema.
 */
 class SystemInfo {

Modified: trunk/ovalint/src/windows/WindowsCommon.cpp
===================================================================
--- trunk/ovalint/src/windows/WindowsCommon.cpp	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/WindowsCommon.cpp	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: WindowsCommon.cpp 4094 2007-06-22 13:12:33Z bakerj $
+// $Id: WindowsCommon.cpp 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are
@@ -378,7 +378,7 @@
 			throw Exception("Unable to expand local group: " + groupName + ". The computer name is invalid.");
 		} else if(res == ERROR_MORE_DATA) {
 			// throw this error
-			throw Exception("Unable to expand local group: " + groupName + ". More entries are available. Specify a large enough buffer to receive all entries. This error message should never occure since the api call is made with MAX_PREFERRED_LENGTH for the size of teh buffer.");
+			throw Exception("Unable to expand local group: " + groupName + ". More entries are available. Specify a large enough buffer to receive all entries. This error message should never occure since the api call is made with MAX_PREFERRED_LENGTH for the size of the buffer.");
 		} else if(res == ERROR_NO_SUCH_ALIAS || res == NERR_GroupNotFound) {
 			// ignore this error
 			//cout << "The specified local group " + groupName + " does not exist." << endl;
@@ -449,7 +449,7 @@
 			throw Exception("Unable to expand global group: " + groupName + ". The computer name is invalid.");
 		} else if(res == ERROR_MORE_DATA) {
 			// throw this error
-			throw Exception("Unable to expand global group: " + groupName + ". More entries are available. Specify a large enough buffer to receive all entries. This error message should never occure since the api call is made with MAX_PREFERRED_LENGTH for the size of teh buffer.");
+			throw Exception("Unable to expand global group: " + groupName + ". More entries are available. Specify a large enough buffer to receive all entries. This error message should never occure since the api call is made with MAX_PREFERRED_LENGTH for the size of the buffer.");
 		} else if(res == NERR_GroupNotFound) {
 			groupExists = false;
 			// no action here

Modified: trunk/ovalint/src/windows/WindowsCommon.h
===================================================================
--- trunk/ovalint/src/windows/WindowsCommon.h	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/src/windows/WindowsCommon.h	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,8 +1,8 @@
 //
-// $Id: WindowsCommon.h 4094 2007-06-22 13:12:33Z bakerj $
+// $Id: WindowsCommon.h 4579 2008-01-02 17:39:07Z bakerj $
 //
 //****************************************************************************************//
-// Copyright (c) 2002-2007, The MITRE Corporation
+// Copyright (c) 2002-2008, The MITRE Corporation
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without modification, are

Modified: trunk/ovalint/xml/results_to_html.xsl
===================================================================
--- trunk/ovalint/xml/results_to_html.xsl	2007-12-16 09:15:34 UTC (rev 312)
+++ trunk/ovalint/xml/results_to_html.xsl	2008-01-23 19:30:41 UTC (rev 313)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-$Id: results_to_html.xsl 3988 2007-05-21 12:29:17Z bakerj $
+$Id: results_to_html.xsl 4294 2007-08-23 17:02:36Z bakerj $
 
 ****************************************************************************************
  Copyright (c) 2002-2007, The MITRE Corporation
@@ -44,6 +44,10 @@
    	   * Allowing for references other than CVE such as Red Hat patches
 	DATE: 18 May 2007
 
+	Modified by Vladimir Giszpenc, DSCI Contractor Supporting CERDEC S&TCD IAD
+   	   * Added some aggregate data in the Systems Analysed section
+	DATE: 20 Aug 2007
+
 	The results_to_html stylesheet converts an OVAL Results document into a more readable html format.
 	General information about the source of the OVAL Definitions being reported on, and the OVAL Results
 	producer is displayed. Next general information about each system analyzed is presented including a 
@@ -191,11 +195,24 @@
 					create anchors to each system in the results file
 					if only one systen leave out the anchors
 				-->
+				<!-- 2007-08-20 Added aggregate result detail-->
 				<xsl:if test="not(count(./oval-res:results/oval-res:system) = 1)">
 					<table border="1" cellpadding="0" cellspacing="0">
 						<tr>
-							<td class="title">Systems Analyzed</td>
+							<td class="title" colspan="7">Systems Analyzed</td>
 						</tr>
+						<!-- display the result color coding table -->
+						<tr><td colspan="7"><xsl:call-template name="ResultColorTable"/></td></tr>
+						
+						<tr>
+							<td class="label" align="center">System</td>
+							<td class="label" align="center">Trues</td>
+							<td class="label" align="center">Falses</td>
+							<td class="label" align="center">Errors</td>
+							<td class="label" align="center">Unknown</td>
+							<td class="label" align="center">Not Applicables</td>
+							<td class="label" align="center">Not Evaluateds</td>
+						</tr>
 						<xsl:for-each select="./oval-res:results/oval-res:system">
 							<tr>
 								<td class="label">
@@ -203,7 +220,74 @@
 										<xsl:value-of select="./oval-sc:oval_system_characteristics/oval-sc:system_info/oval-sc:primary_host_name"/>
 									</a>
 								</td>
+								<td width="10">
+									<xsl:choose>
+										<xsl:when test="position() mod 2 = 1">
+											<xsl:attribute name="class">trueA</xsl:attribute>	
+										</xsl:when>
+										<xsl:when test="position() mod 2 = 0">
+											<xsl:attribute name="class">trueB</xsl:attribute>
+										</xsl:when>
+									</xsl:choose>
+									<xsl:value-of select="count(./oval-res:definitions/oval-res:definition[@result='true'])"/>
+								</td>
+								<td width="10">
+									<xsl:choose>
+										<xsl:when test="position() mod 2 = 1">
+											<xsl:attribute name="class">falseA</xsl:attribute>	
+										</xsl:when>
+										<xsl:when test="position() mod 2 = 0">
+											<xsl:attribute name="class">falseB</xsl:attribute>
+										</xsl:when>
+									</xsl:choose>
+									<xsl:value-of select="count(./oval-res:definitions/oval-res:definition[@result='false'])"/>
+								</td>
+								<td width="10">
+									<xsl:choose>
+										<xsl:when test="position() mod 2 = 1">
+											<xsl:attribute name="class">errorA</xsl:attribute>	
+										</xsl:when>
+										<xsl:when test="position() mod 2 = 0">
+											<xsl:attribute name="class">errorB</xsl:attribute>
+										</xsl:when>
+									</xsl:choose>
+									<xsl:value-of select="count(./oval-res:definitions/oval-res:definition[@result='error'])"/>
+								</td>
+								<td width="10">
+									<xsl:choose>
+										<xsl:when test="position() mod 2 = 1">
+											<xsl:attribute name="class">unknownA</xsl:attribute>	
+										</xsl:when>
+										<xsl:when test="position() mod 2 = 0">
+											<xsl:attribute name="class">unknownB</xsl:attribute>
+										</xsl:when>
+									</xsl:choose>
+									<xsl:value-of select="count(./oval-res:definitions/oval-res:definition[@result='unknown'])"/>
+								</td>
+								<td width="10">
+									<xsl:choose>
+										<xsl:when test="position() mod 2 = 1">
+											<xsl:attribute name="class">naA</xsl:attribute>	
+										</xsl:when>
+										<xsl:when test="position() mod 2 = 0">
+											<xsl:attribute name="class">naB</xsl:attribute>
+										</xsl:when>
+									</xsl:choose>
+									<xsl:value-of select="count(./oval-res:definitions/oval-res:definition[@result='not applicable'])"/>
+								</td>
+								<td width="10">
+									<xsl:choose>
+										<xsl:when test="position() mod 2 = 1">
+											<xsl:attribute name="class">neA</xsl:attribute>	
+										</xsl:when>
+										<xsl:when test="position() mod 2 = 0">
+											<xsl:attribute name="class">neB</xsl:attribute>
+										</xsl:when>
+									</xsl:choose>
+									<xsl:value-of select="count(./oval-res:definitions/oval-res:definition[@result='not evaluated'])"/>
+								</td>
 							</tr>
+							<!-- 2007-08-20 Added aggregate result detail-->
 						</xsl:for-each>
 					</table>
 					<br/>




More information about the Oval-commits mailing list