[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, debian, updated. debian/0.24.5-2-107-g5352531

Micah Anderson micah at riseup.net
Fri Jan 23 14:14:41 UTC 2009


The following commit has been merged in the debian branch:
commit b55ae00c47bc95647b513f641cc0329e3eb89ca8
Author: Micah Anderson <micah at riseup.net>
Date:   Fri Jan 23 07:40:09 2009 -0500

    remove non-debian related things

diff --git a/CHANGELOG b/CHANGELOG
deleted file mode 100644
index d3a2ef2..0000000
--- a/CHANGELOG
+++ /dev/null
@@ -1,1486 +0,0 @@
-0.24.6
-    Adding support to the user type for: profiles, auths, project, 
-    key/value pairs (extension to Solaris RBAC support added in
-    0.24.6)
-
-    Fixed #1662 - Configuration Reference still references 'section'
-
-    Fixed #1460 - enhance redhat puppetmaster init.d script to easy start puppetmaster as a mongrel cluster
-
-    Fixed #1663 - Regression relating to facter fact naming from 0.24.5
-
-    Fixed #1655 - Provider::Confine::Variable tests are broken
-
-    Fixed #1646 - service puppet status does not work as non-root 
-    on redhat system
-
-    Fixed #1649 - Updated OSX package cleanup
-  
-    Fixed #1647 - puppetdoc -r providers now working again
-
-    Fixed #1639 - uninitialized constant Puppet::Type::User::ProviderUseradd
-
-    Fixed #1637 - With an inexistant (global) templatedir, modules 
-    can't access their templates
-
-    Fixed #1202 - Collection attribute matching doesn't parse arrays
-
-    Fixed #1473 - Puppetd stops with error after puppetmasterd 
-    is unavailable
-
-    Fixed #1354 - yum provider problems with RHEL 3
-
-    Fixed #1633 - Added support for --detailed-exits to bin/puppet
-
-    Fixed #381 - Allow Allow multiple overrides in one statement
-
-    Fixing #947 - pluginsync no longer fails poorly when no plugins exist
-
-    Fixed #981 - Removed 'Adding aliases' info message
-    
-    Fixing #1089 - Log messages are now tagged with the log level,
-    making it easier to match messages in the 'tagmail' report.
-    
-    Fixing #1098 - Multiline strings now correctly increment the line count
-
-    Fixing #1614 - Environments no longer have to be listed out
-
-    Fixed #1628 - Changed node search to use certname rather than Facter 
-    hostname
-    
-    Fixed #1613 - The client environment will be substituted when looking 
-    up settings.
-
-    Updated puppet binary documentation 
-
-    Feature #1624 - Added RBAC roles to solaris user provider
-
-    Fixed #1586 - Specifying "fully qualified" package names in Gentoo
-
-    Fixed #1620 - Add 'sles' to Puppet confines when 'suse' is used
-
-    Fixed #1585 - Allow complex 'if' and variable expressions
-
-    Fixed #1564 - Saving File#checksum to state.yaml broken
-
-    Fixed #1603 - Added support for running Puppet inside a Rack application
-    (mod_rails) with Passenger and Apache
-
-    Fixed #1596 - Deploying file resources with ++ generates error
-
-    Modified the group and zone resource types to no longer call
-    'currentpropvalues' as a means of setting all values to absent.
-    There should be no behaviour change from this change.
-
-    Modified the behaviour of resource-level 'retrieve' -- it only
-    calls 'retrieve' on each property if the resource exists.
-
-    Fixed #1622 - Users and their groups should again add in one transaction
-
-    Fixed #791 - You should now be able to create and find a user/group in one transaction.
-
-    Fixed #1610 - Raise "Filebucketed" messages to Notice priority
-    
-    FIxed #1530 - ssh_authorized_keys provider does not crash anymore on SSH type 1 keys
-
-    Added a number of confines to package providers
-
-    Fixed #1609 - Added confines for the Gentoo, FreeBSD and 
-    SMF (Solaris) service providers 
-
-    Fixed #1608 - Added ubuntu to defaultfor for apt provider
-
-    Fixed #1607 - Added ubuntu to defaultfor for Debian service
-    provider
-
-    Fixed #1045 - Multiple metaparams all get added to resources.
-    
-    Fixed #1472 -- defined, exported resources in the current compile 
-    now get expanded correctly.
-
-    Fixed #1595 - Internally, Property#retrieve is no longer called
-    when no 'should' value is available for a resource.
-
-    Fixed #1588 - Fixed puppetca --clean --all 
-
-    Fixed #1584 - Added support for appended variables
-
-    Fixed #1554 - Added support for multiple template directories
-
-    Fixed #1500 - puppetrun not working
-
-    Fixed #1579 and #1580 - errors in the Puppet RPM spec file
-
-    Fixed #1572 -- file purging now fails if remote sources do not exist.
-    
-    Fixed #1521 -- ldap user and password are now used with the default connection.
-
-    Fixed issues with file descriptors leaking into subprocesses
-
-    Fixed #1568 - createpackage.sh
-
-    Fixed #1571 - Puppet::Util::binary returns incorrect results
-
-    Fixed #1553 - Puppet and Facter cannot both install the plist module into two different locations
-
-    Adjusted hpuxuseradd user provider to confine to HP-UX and fixed HP-UX user provider path regression
-
-    Fixed debug messages in package type - thanks to Todd Zullinger for this fix
-    
-    Fixed #1566 - changed password property of the user type
-
-    Fixed debug messages in package type
-
-    Updated Red Hat spec file
-
-    Fixes #1455 - Adds HP-UX support for user type
-
-    Fixes #1551 puppetmaster.freshness xmlrpc call returns incorrect type
-
-    Fixes #1554 - Fix exception for undefined hostname
-
-    Fixed #1533 - changed permissions for man directory
-
-    Added daemontools and runit providers for service type
-
-    Added simple rake task for running unit tests
-
-    Added spec Rake task
-
-    Fixed #1526 - Fixed leak in template
-
-    Fixed #1506 - Removed storeconfig duplicate indexes
-    
-    Fixed #1457 - case insensitive match for error
-    
-    Fixed #1488 - Moved individual functions out of functions.rb into 
-    lib/puppet/parser/functions directory.  New functions should be create     in this directory.
-
-    Fixed #1508 - Added HP-UX package provider
-
-    Fixed #1502 - Fixed poor stored configuration performance
-
-    Fixed #1510 - Storeconfiguration fixed for Rails 2.1
-
-    Add the -P/--ping option to puppetrun, fixes #1501
-
-    Fixed #1394 - Added stored configuration clearing script to /ext
-    
-    Fixed #1442 - replaced use of Facter for report titling with certname
-
-    Fixed $1456 - add proxy configuration capability to yum repo
-
-    Fixed #1457 - removed confine warning
-
-    A working script to create an OS X pkg out of the Puppet repository
-
-    Fixed #1441 - Updated console colours
-
-    Expose all puppet variables as instance member variables of the template wrapper.
-    This helps resolve redmine #1427, by providing a safe mechanism to access variables.
-    
-     * Implement Puppet::Parser::Scope#to_hash, which returns a hash containing all the
-       variable bindings in the current and, optionally, parent scope.
-     * Use that to set instance member variables into Puppet::Parser::Templatewrapper
-     * Report the time taken for variable binding at debug level, to help identify any
-       performance regression that is encountered in the real world.
-     * Rename the @scope and @file members of the template wrapper, to avoid clashing
-       with a scope variable exposed within puppet.
-
-    Ensure that we consistently use either string #{} interpolation or String.%
-    interpolation, not both, to avoid issues where a #{} interpolated value
-    contains a % character.
-
-    Feature #1476: Allow specification of --bindir --sbindir --sitelibdir --mandir --destdir 
-    in installation
-    
-    Added feature #1241 : Improve performance of group lookups
-
-    Fixed bug #1448: Puppet CA incorrectly writes out all certs to inventory .txt on each 
-    certificate signing
-
-    Fixing puppetlast to make it work with 0.24.5 / 0.25.  Made puppetlast work on 0.24.5 
-    by using the YAML indirector
- 
-0.24.5
-    You can now select the encoding format when transferring the catalog,
-    with 'yaml' still being the default but 'marshal' being an option.
-    This is because testing has shown drastic performance differences
-    between the two, with up to 70% of compile time being spent
-    in YAML code.  Use the 'catalog_format' setting to choose your format,
-    and the setting must be set on the client.
-
-    Fixed #1431 - Provider confines must now specify similar tests in one call.
-    I.e., you can't do confine :operatingsystem => %w{a b} and then
-    confine :operatingsystem => %w{b c}; you'd need to do them in one command.
-    This now-obsolete behaviour does not seem to be used anywhere.
-    The fix for #1431 is actually just removing the tests that exposed
-    this change; the change happened when I refactored how confines work.
-
-    Removed faulty interface type
-
-    Updated /spec/unit/rails.rb test
-
-    Fix #1426 - services on redhat are restarted again and status is 
-    called from the Red Hat provider
-
-    Fixed #1414 - Return code from waitpid now right shifted 8 bits
-
-    Fixed #174 - a native type type for managing ssh authorized_keys 
-    files is available.
-
-    Further moves from the examples directory and ext directory
-
-    Fixed #1397 One line fix, fail instead of log
-
-    Moved debian to conf and updated examples directory
-
-    Fixed #1368 - updated Red Hat init scripts
- 
-    Added message referencing ReductiveLabs build library
-
-    Fixed #1396 - Added sha1 function from DavidS to core
-    
-    Fixed #1399 - the ldap user provider now knows it can manage
-    passwords.
-    
-    Fixed #1272 - if you provide a group name as the gid to an ldap
-    user, the name will be converted to a gid.  Note that this only
-    looks up ldap groups, at this point; if you want to set an ldap
-    user's primary group to a local group, you have to specify the GID.
-
-    Fixed #1226 - gems can now specify source repositories.
-
-    Fixed #1232 - the rundir no longer specifies a user/group,
-    and there are now client- and server-specific yaml directories.
-
-    Fixed 1240 - puppet will function more like puppetd if graphing
-    or reporting are enabled.
-    
-    Fixed #1231 - Exceptions during initialization should now be clearer.
-
-    Fixed #1006 - puppetrun --class works again.  I added the class
-    membership testing to the Ldap node terminus, and added tests,
-    so it shouldn't break again.
-
-    Fixed #1114 - Facts in plugin directories should now be autoloaded,
-    as long as you're using Facter 1.5.
-
-    Fixed #1195 - Updated Gentoo init scripts
-
-    Fixed #1367 - Updated Rakefile for new daily builds
-
-    Fixed #1370 - removed test/util/loadedfile.rb tests
-    
-    Fixed #1221 - aliases to titles now work for resources.
-    
-    Fixed #1012 - templates in the templatedir are preferred to module templates.
-
-    Fixed #707 - special '@reboot'-style cron jobs work again.
-
-    Fixed #1360 - allowdupe works on groups again.
-
-    Fixed #1369 - the init service provider now supports HP-UX.
-
-    Removed support for the 'node_name' setting in LDAP and external node 
-    lookups.
-
-    Also removed support for 'default' nodes in external nodes.
-    LDAP nodes now use the certificate name, the short name, and 'default',
-    but external nodes just use the certificate name and any custom terminus
-    types will use just the certificate name.
-    
-    Fixing #1168 (for 0.24.x) -- automatically downcasing the fqdn.
-    Also requiring that passed in certnames be downcased; the setting
-    system isn't currently flexible enough to automatically downcase
-    it for the user.
-
-    Adding a ResourceTemplate class for using templates directly
-    within resources (i.e., client-side templates).  This would really
-    only be used for composite resources that pass the results of the
-    template on to generated resources.
-
-    Exporting or collecting resources no longer raises an exception
-    when no storeconfigs is enabled, it just produces a warning.
-
-    Always using the cert name to store yaml files, which fixes #1178.
-    The Master handler previously provided the support for the :node_name
-    setting, and that functionality has now been moved into the Node
-    class.  At the same time, the names to search through have been
-    changed somewhat:  Previously, the certificate name and the 
-    hostname were both used for searching, but now, the cert name
-    is always searched first (unless node_name == facter), but only
-    the Facter hostname, domain, and fqdn are used otherwise.  We no
-    longer split the cert name, only the hostname/domain/fqdn.
-
-    Fixing transaction support for prefetching generated resources.
-
-    Adding support for settings within the existing Facter provider confines.
-
-    Moving all confine code out of the Provider class, and fixing #1197. 
-    Created a Confiner module for the Provider class methods, enhanced 
-    the interface between it and the Confine class to make sure binary 
-    paths are searched for fresh each time.
-
-    Modified the 'factpath' setting to automatically configure
-    Facter to load facts there if a new enough version of
-    Facter is used.
-
-    Crontab provider: fix a parse error when a line begins with a space 
-    character (fixes #1216)
-
-    Instead of deleting the init scripts (with --del) we should simply 
-    disable it with chkconfig service off, and respectfully do the same 
-    for enable => true;
- 
-    Added ldap providers for users and groups.
-
-    Added support for the --all option to puppetca --clean.  If
-    puppetca --clean --all is issued then all client certificates
-    are removed.
- 
-    Resources now return the 'should' value for properties from
-    the [] accessor method (they previously threw an exception when
-    this method was used with properties).  This shouldn't have any
-    affect functionally; it just makes the method equivalent to 'should'
-    for properties, but it works for all attribute types now.
-
-    Modified the 'master' handler to use the Catalog class to
-    compile node configurations, rather than using the Configuration
-    handler, which was never used directly.  I removed the Configuration
-    handler as a result.
-
-    Modified the 'master' handler (responsible for sending configurations
-    to clients) to always return Time.now as its compile date, so
-    configurations will always get recompiled.
-
-    Fixed #1184 -- definitions now autoload correctly all of the time.
-
-    Removed the code from the client that tries to avoid recompiling
-    the catalog. The client will now always recompile, assuming it
-    can reach the server.  It will still use the cached config if
-    there's a failure.
-
-    Fixing #1173 -- classes and definitions can now have the same
-    name as a directory with no failures.
-
-    Saving new facts now expires any cached node information.
-
-    Switching how caching is handled, so that objects now all
-    have an expiration date associated with them.  This makes it
-    much easier to know whether a given cached object should be used
-    or if it should be regenerated.
-
-    Changing the default environment to production.
-
-0.24.4
-    Pass source to pkg_add via the PKG_PATH environment variable if
-    it ends in a '/' indicating it is a directory. Allows pkg_add
-    to resolve dependancies, and make it possible to specify packages
-    without version numbers.
-
-    Fixing #571 -- provider suitability is now checked at resource
-    evaluation time, rather than resource instantiation time.  This
-    means that you don't catch your "errors" as early, but it also
-    means you should be able to realistically configure a whole host
-    in one run.
-
-    Moved the configuration of the Node cache to the puppetmasterd
-    executable, since it otherwise causes caches to be used in all
-    cases, which we don't want (e.g., bin/puppet was using them).
-
-    Ported #198 man page creation functionality to 0.24.x branch and
-    added man pages and man page creation logic to install.rb.  The
-    man pages are stored in man/man8 and will install to config::CONFIG
-    mandir/man8.
-
-    Fixing #1138 -- the yamldir is automatically created by the
-    server now that it's in the :puppetmasterd section rather than
-    a separate :yaml section.
-
-    Disabling http keep-alive as a means of preventing #1010.
-    There is now a constant in Puppet::Network::HttpPool that will
-    disable or enable this feature, but note that we determined
-    that it can cause corruption, especially in file serving (but
-    it's client-side corruption).
-
-    Applying patch by Ryan McBride to fix OpenBSD package 
-    matching.  The actual problem was caused by the fix to #1001.
-
-    Found all instances of methods where split() is used without
-    any local variables and added a local variable -- see
-    http://snurl.com/21zf8.  My own testing showed that this
-    caused memory growth to level off at a reasonable level.
-    Note that the link above says the problem is only with class
-    methods, but my own testing showed that it's any method that
-    meets these criteria.  This is not a functional change, but
-    should hopefully be the last nail in the coffin of #1131.
-
-    Found an array that leaked pretty quickly between reparsing
-    files, thanks to work by Adam Jacob and Arjuna Christenson
-    (the finding, not the leak).  I'm going to act like this
-    fixes #1131, at least for now, but I doubt it does,
-    since that shows general memory growth over time, whereas
-    the leak here should go away as soon as files are reparsed
-    (because the parser is holding the reference to the leaking
-    array).
-
-    Fixed #1147: Cached nodes are correctly considered out of
-    date if the node facts have been updated (thus causing
-    node facts to again be available in manifests, for those
-    cases where they were not).
-
-    Fixed #1137: The certificate name is correctly being added
-    to the facts hash.
-
-    Fixed #1136: Verbose and Debug no longer clobber each other.
-
-    Hopefully *finally* fixed the "already being managed" problem
-    (#1036).  The problem only cropped up if there was a failure
-    when trying to manage the system -- this would cause the
-    setting-based resources not to get cleaned up.
-
-0.24.3
-    Modified the ldap node terminus to also use the facts version
-    as the version for a node, which should similarly encourage the
-    use of the yaml cache.  (Related to #1130)
-
-    Caching node information in yaml (I figured caching in memory will
-    cause ever-larger memory growth), and changing the external node
-    terminus to use the version of the facts as their version.  This
-    will usually result in the cached node information being used,
-    instead of always hitting the external node app during file
-    serving. Note that if the facts aren't changed by the client,
-    then this will result in the cached node being used, but at this
-    point, the client always updates its facts.  (#1130)
-
-    Fixing #1132 -- host names can now have dashes anywhere.
-    (Patch by freiheit.)
-
-    Fixing #1118 -- downloading plugins and facts now ignores noop.
-    Note that this changes the behaviour a bit -- the resource's
-    noop setting always beats the global setting (previously,
-    whichever was true would win).
-
-    The change in checksums from 'timestamp' to 'mtime' no longer
-    result in updates on every run (#1116).
-
-    Aliases again work in relationships (#1094).
-
-    The CA serial file will no longer ever be owned by
-    root (#1041).
-
-    Fixing the rest of #1113: External node commands can specify
-    an environment and Puppet will now use it.
-
-    Partially fixing #1113: LDAP nodes now support environments,
-    and the schema has been updated accordingly.
-
-    Always duplicating resource defaults in the parser, so that
-    stacked metaparameter values do not result in all resources
-    that receive a given default also getting those stacked
-    values.
-
-0.24.2
-    Fixing #1062 by moving the yamldir setting to its own yaml
-    section.  This should keep the yamldir from being created
-    on clients.
-
-    Fixed #1047 -- Puppet's parser no longer changes the order
-    in which statements are evaluated, which means that case
-    statements can now set variables that are used by other
-    variables.
-
-    Fixed #1063 -- the master correctly logs syntax errors when
-    reparsing during a single run.
-
-    Removed the loglevels from the valid values for `logoutput`
-    in the Exec resource type -- the log levels are specified
-    using the `loglevel` parameter, not `logoutput`.  This never
-    worked, or at least hasn`t for ages, and now the docs are
-    just correct.
-
-    Somewhat refactored fileserving so that it no longer caches
-    any objects, nor does it use Puppet's RAL resources.  In the
-    process, I fixed #894 (you can now copy links) and refactored
-    other classes as necessary.  Mostly it was fixing tests.
-
-    Hopefully partially fixed #1010 -- clients should now fail
-    to install files whose checksums do not match the checksum
-    from the server.
-
-    Fixed #1018 -- resources now have their namevars added as
-    aliases in the resource catalog, just like they were added
-    in the resource classes.
-
-    Fixed #1037 -- remote unreadable files no longer have the
-    permission denied exceptions caught, thus forbidding them
-    from being replaced with 'nil'.
-
-    Fixed #1043 -- autoloading now searches the plugins directory
-    in each module, in addition to the lib directory.  The 'lib'
-    directory is also deprecated, but supported for now to give
-    people a chance to convert.
-
-    Fixed #1003 -- Applying DavidS's patch to fix searching for
-    tags in sql.
-
-    Fixed #992 -- Puppet is now compatible with gems 1.0.1.
-
-    Fixed #968 again, this time with tests -- parseonly works,
-    including not compiling the configurations, and also storeconfigs
-    is no longer required during parse-testing.
-
-    Fixed #1021 -- the problem was that my method of determining
-    the in-degree sometimes resulted in a lower number than the
-    number of in-edges.
-
-    Fixed #997 -- virtual defined types are no longer evaluated.
-    NOTE: This introduces a behaviour change, in that you previously
-    could realize a resource within a virtual defined resource, and now
-    you must realize the entire defined resource, rather than just
-    the contained resource.
-
-    Fixed #1030 - class and definition evaluation has been significantly
-    refactored, fixing this problem and making the whole interplay
-    between the classes, definitions, and nodes, and the Compile class much
-    cleaner.
-
-    Exec resources must now have unique names, although the commands can still
-    be duplicated.  This is easily accomplished by just specifying a unique
-    name with whatever (unique or otherwise) command you need.
-
-    Fixed #989 -- missing CRL files are correctly ignored, and the
-    value should be set to 'false' to explicitly not look for these
-    files.
-
-    Fixed #1017 -- environment-specific modulepath is no longer ignored.
-
-    Fixing #794 -- consolidating the gentoo configuration files.
-
-    Fixing #976 -- both the full name of qualified classes and
-    the class parts are now added as tags.  I've also
-    created a Tagging module that we should push throughout
-    the rest of the system that uses tags.
-
-    Fixing #995 -- puppetd no longer dies at startup if the server
-    is not running.
-
-    Fixing #977 -- the rundir is again set to 1777.
-
-    Fixed #971 -- classes can once again be included multiple
-    times.
-
-    Added builtin support for Nagios types using
-    Naginator to parse and generate the files.
-
-0.24.1
-    Updated vim filetype detection. (#900 and #963)
-
-    Default resources like schedules no longer conflict with
-    managed resources. (#965)
-
-    Removing the ability to disable http keep-alive, since
-    it didn't really work anyway and it should no longer
-    be necessary.
-
-    Refactored http keep-alive so it actually works again.
-    This should be sufficient enough that we no longer need the
-    ability to disable keep-alive.  There is now a central
-    module responsible for managing HTTP instances, along with
-    all certificates in those instances.
-
-    Fixed a backward compatibility issue when running 0.23.x
-    clients against 0.24.0 servers -- relationships would
-    consistently not work. (#967)
-
-    Closing existing http connections when opening a new one,
-    and closing all connections after each run. (#961)
-
-    Removed warning about deprecated explicit plugins mounts.
-
-0.24.0 (misspiggy)
-    Modifying the behaviour of the certdnsnames setting.  It now defaults
-    to an empty string, and will only be used if it is set to something
-    else.  If it is set, then the host's FQDN will also be added as
-    an alias.  The default behaviour is now to add 'puppet' and
-    'puppet.$domain' as DNS aliases when the name for the cert being
-    signed is equal to the signing machine's name, which will only
-    be the case for CA servers.  This should result in servers always
-    having the alias set up and no one else, but you can still override
-    the aliases if you want.
-
-    External node support now requires that you set the 'node_terminus'
-    setting to 'exec'.  See the IndirectionReference on the wiki for more
-    information.
-
-    http_enable_post_connection_check added as a configuration
-    option for puppetd.  This defaults to true, which validates the server
-    SSL certificate against the requested host name in new versions of ruby.
-    See #896 for more information.
-
-    Mounts no longer remount swap filesystems.
-
-    Slightly modifying how services manage their list of paths
-    (and adding documention for it).  Services now default
-    to the paths specified by the provider classes.
-
-    Removed 'type' as a valid attribute for services, since it's been
-    deprecated since the creation of providers.
-
-    Removed 'running' as a valid attribute for services, since it's
-    been deprecated since February 2006.
-
-    Added modified patch by Matt Palmer which adds a 'plugins' mount,
-    fixing #891.  See PluginsInModules on the wiki for information on
-    usage.
-
-    Empty dbserver and dbpassword settings will now be ignored when
-    initializing Rails connections (patch by womble).
-
-    Configuration settings can now be blank (patch by womble).
-
-    Added calls to endpwent/endgrent when searching for user and group IDs,
-    which fixes #791.
-
-    Obviated 'target' in interfaces, as all file paths were automatically
-    calculated anyway.  The parameter is still there, but it's
-    not used and just generates a warning.
-
-    Fixing some of the problems with interface management on Red Hat.
-    Puppet now uses the :netmask property and does not try to set
-    the bootproto (#762).
-
-    You now must specify an environment and you are required to specify
-    the valid environments for your site. (#911) 
-
-    Certificates now always specify a subjectAltName, but it defaults
-    to '*', meaning that it doesn't require DNS names to match.  You
-    can override that behaviour by specifying a value for
-    'certdnsnames', which will then require that hostname as a match (#896).
-
-    Relationship metaparams (:notify, :require, :subscribe, and
-    :before) now stack when they are collecting metaparam values
-    from their containers (#446).  For instance, if a resource
-    inside a definition has a value set for 'require', and you call
-    the definition with 'require', the resource gets both requires,
-    where before it would only retain its initial value.
-
-    Changed the behavior of --debug to include Mongrel client
-    debugging information.  Mongrel output will be written to
-    the terminal only, not to the puppet debug log.  This should
-    help anyone working with reverse HTTP SSL proxies. (#905)
-
-    Fixed #800 -- invalid configurations are no longer
-    cached.  This was done partially by adding a relationship
-    validation step once the entire configuration is created,
-    but it also required the previously-mentioned changes
-    to how the configuration retrieval process works.
-
-    Removed some functionality from the Master client,
-    since the local functionality has been replaced
-    with the Indirector already, and rearranging how configuration
-    retrieval is done to fix ordering and caching bugs.
-
-    The node scope is now above all other scopes besides
-    the 'main' scope, which should help make its variables
-    visible to other classes, assuming those classes were
-    not included in the node's parent.
-
-    Replaced GRATR::Digraph with Puppet::SimpleGraph as
-    the base class for Puppet's graphing.  Functionality
-    should be equivalent but with dramatically better
-    performance.
-
-    The --use-nodes and --no-nodes options are now obsolete.
-    Puppet automatically detects when nodes are defined, and if
-    they are defined it will require that a node be found,
-    else it will not look for a node nor will it fail if it
-    fails to find one.
-
-    Fixed #832. Added the '--no-daemonize' option to puppetd and
-    puppetmasterd.  NOTE: The default behavior of 'verbose' and
-    'debug' no longer cause puppetd and puppetmasterd to not
-    daemonize.
-
-    Added k5login type. (#759)
-
-    Fixed CA race condition. (#693)
-
-    Added shortname support to config.rb and refactored addargs
-
-0.23.2
-    Fixed the problem in cron jobs where environment settings
-    tended to multiple. (#749)
-
-    Collection of resources now correctly only collects exported
-    resources again.  This was broken in 0.23.0. (#731)
-
-    'gen_config' now generates a configuration with
-    all parameters under a heading that matches the
-    process name, rather than keeping section headings.
-
-    Refactored how the parser and interpreter relate,
-    so parsing is now effectively an atomic process (thus
-    fixing #314 and #729).  This makes the interpreter less
-    prone to error and less prone to show the error to the
-    clients.  Note that this means that if a configuration
-    fails to parse, then the previous, parseable configuration
-    will be used instead, so the client will not know that
-    the configuration failed to parse.
-
-    Added support for managing interfaces, thanks to work
-    by Paul Rose.
-
-    Fixed #652, thanks to a patch by emerose; --fqdn again
-    works with puppetd.
-
-    Added an extra check to the Mongrel support so that
-    Apache can be used with optional cert checking, instead
-    of mandatory, thus allowing Mongrel to function as the CA.
-    This is thanks to work done by Marcin Owsiany.
-
-0.23.1 (beaker)
-    You can now specify relationships to classes, which work
-    exactly like relationships to defined types:
-        require => Class[myclass]
-    This works with qualified classes, too.
-
-    You can now do simple queries in a collection of
-    exported resources.  You still cannot do multi-condition queries,
-    though. (#703)
-
-    puppetca now exits with a non-zero code if it cannot
-    find any host certificates to clean. (Patch by Dean
-    Wilson.)
-
-    Fully-qualified resources can now have defaults. (#589)
-
-    Resource references can now be fully-qualified names,
-    meaning you can list definitions with a namespace as
-    dependencies.  (#468)
-
-    Files modified using a FileType instance, as ParsedFile
-    does, will now automatically get backed up to the filebucket
-    named "puppet".
-
-    Added a 'maillist' type for managing mailing lists.
-
-    Added a 'mailalias' type for managing mail aliases.
-
-    Added patch by Valentin Vidic that adds the '+>' syntax to
-    resources, so parameter values can be added to.
-
-    The configuration client now pulls libraries down to $libdir,
-    and all autoloading is done from there with full support
-    for any reloadable file, such as types and providers. (#621)
-    Note that this is not backward compatible -- if you're using
-    pluginsync right now, you'll need to disable it on your clients
-    until you can upgrade them.
-
-    The Rails log level can now be set via (shockingly!) the
-    'rails_loglevel' parameter (#710).  Note that this isn't
-    exactly the feature asked for, but I could not find a
-    way to directly copy ActiveRecord's concept of an environment.
-
-    External node sources can now return undefined classes (#687). 
-
-    Puppet clients now have http proxy support (#701).
-
-    The parser now throws an error when a resource reference
-    is created for an unknown type.  Also, resource references
-    look up defined types and translate their type accordingly. (#706)
-
-    Hostnames can now be double quoted.
-
-    Adding module autoloading (#596) -- you can now 'include' classes
-    from modules without ever needing to specifically load them.
-
-    Class names and node names now conflict (#620).
-
-0.23.0
-    Modified the fileserver to cache file information, so that
-    each file isn't being read on every connection.  Also,
-    added londo's patch from #678 to avoid reading entire files
-    into memory.
-
-    Fixed environment handling in the crontab provider (#669).
-
-    Added patch by trombik in #572, supporting old-style
-    freebsd init scripts with '.sh' endings.
-
-    Added fink package provider (#642), as provided by 'do'.
-
-    Marked the dpkg package provider as versionable (#647).
-
-    Applied patches by trombik to fix FreeBSD ports (#624 and #628).
-
-    Fixed the CA server so that it refuses to send back a certificate
-    whose public key doesn't match the CSR.  Instead, it tells the
-    user to run 'puppetca --clean'.
-
-    Invalid certificates are no longer written to disk (#578).
-
-    Added a package provider (appdmg) able to install .app packages
-    on .dmg files on OS X (#641).
-
-    Applied the patch from #667 to hopefully kill the client hanging
-    problems (permanently, this time).
-
-    Fixed functions so that they accept most other rvalues as valid values
-    (#548).
-
-    COMPATIBILITY ALERT:
-    Significantly reworked external node support, in a way that's NOT
-    backward-compatible:
-
-        Only ONE node source can be used -- you can use LDAP, code, or
-        an external node program, but not more than one.
-    
-        LDAP node support has two changes:  First, the "ldapattrs" attribute is
-        now used for setting the attributes to retrieve from the server (in
-        addition to required attriutes), and second, all retrieved attributes
-        are set as variables in the top scope.  This means you can set attributes
-        on your LDAP nodes and they will automatically appear as variables
-        in your configurations.
-
-        External node support has been completely rewritten.  These programs must
-        now generate a YAML dump of a hash, with "classes" and "parameters" keys.
-        The classes should be an array, and the parameters should be a hash.  The
-        external node program has no support for parent nodes -- the script must
-        handle that on its own.
-
-    Reworked the database schema used to store configurations with the
-    storeconfigs option.  
-    
-    Replaced the obsolete RRD ruby library with the maintained
-    RubyRRDtool library (which requires rrdtool2) (#659).
-
-    The Portage package provider now calls eix-update automatically
-    when eix's database is absent or out of sync (#666).
-
-    Mounts now correctly handle existing fstabs with no pass or dump values
-    (#550).
-
-    Mounts now default to 0 for pass and dump (#112).
-
-    Added urpmi support (#592).
-
-    Finishing up the type => provider interface work.  Basically, package
-    providers now return lists of provider instances.  In the proces,
-    I rewrote the interface between package types and providers, and also
-    enabled prefetching on all packages.  This should significantly speed
-    up most package operations.
-
-    Hopefully fixing the file descriptor/open port problems, with patches
-    from Valentin Vidic.
-
-    Significantly reworked the type => provider interface with respect to
-    listing existing provider instances.  The class method on both
-    class heirarchies has been renamed to 'instances', to start.  Providers
-    are now expected to return provider instances, instead of creating
-    resources, and the resource's 'instances' method is expected to
-    find the matching resource, if any, and set the resource's
-    provider appropriately.  This *significantly* reduces the reliance on
-    effectively global state (resource references in the resource classes).
-    This global state will go away soon.
-
-    Along with this change, the 'prefetch' class method on providers now
-    accepts the list of resources for prefetching.  This again reduces
-    reliance on global state, and makes the execution path much easier
-    to follow.
-
-    Fixed #532 -- reparsing config files now longer throws an exception.
-
-    Added some warnings and logs to the service type so
-    users will be encouraged to specify either "ensure"
-    or "enabled" and added debugging to indicate why
-    restarting is skipped when it is.
-
-    Changed the location of the classes.txt to the state
-    directory.
-
-    Added better error reporting on unmatched brackets.
-
-    Moved puppetd and puppetmasterd to sbin in svn and fixed install.rb
-    to copy them into sbin on the local system appropriately.  (#323)
-
-    Added a splay option (#501).  It's disabled when running under
-    --test in puppetd.  The value is random but cached.  It defaults
-    to the runinterval but can be tuned with --splaylimit
-
-    Changing the notify type so that it always uses
-    the loglevel.
-
-    Fixing #568 - nodes can inherit from quoted node names.
-
-    Tags (and thus definitions and classes) can now be a single
-    character. (#566)
-
-    Added an 'undef' keyword (#629), which will evaluate to ""
-    within strings but when used as a resource parameter value
-    will cause that parameter to be evaluated as undefined.
-
-    Changed the topological sort algorithm (#507) so it will always
-    fail on cycles.
-
-    Added a 'dynamicfacts' configuration option; any facts in that
-    comma-separated list will be ignored when comparing facts to 
-    see if they have changed and thus whether a recompile is necessary.
-
-    Renamed some poorly named internal variables:
-        @models in providers are now either @resource or
-        @resource_type (#605).
-
-        @children is no longer used except by components (#606).
-
-        @parent is now @resource within parameters (#607).
-
-    The old variables are still set for backward compatibility.
-
-    Significantly reworking configuration parsing.  Executables all now
-    look for 'puppet.conf' (#206), although they will parse the old-style
-    configuration files if they are present, although they throw a deprecation
-    warning.  Also, file parameters (owner, mode, group) are now set on the
-    same line as the parameter, in brackets. (#422)
-
-    Added transaction summaries (available with the --summarize option),
-    useful for getting a quick idea of what happened in a transaction.
-    Currently only useful on the client or with the puppet interpreter.
-
-    Changed the interal workings for retrieve and removed the :is attribute
-    from Property.  The retrieve methods now return the current value of
-    the property for the system.
-
-    Removed acts_as_taggable from the rails models.
-
-0.22.4
-    Execs now autorequire the user they run as, as long as the user
-    is specified by name. (#430)
-
-    Files on the local machine but not on the remote server during
-    a source copy are now purged if purge => true. (#594)
-
-    Providers can now specify that some commands are optional (#585).
-    Also, the 'command' method returns nil on missing commands,
-    rather than throwing an error, so the presence of commands
-    be tested.
-
-    The 'useradd' provider for Users can now manage passwords.
-    No other providers can, at this point.
-
-    Parameters can now declare a dependency on specific
-    features, and parameters that require missing features
-    will not be instantiated.  This is most useful for
-    properties.
-
-    FileParsing classes can now use instance_eval to add
-    many methods at once to a record type.
-
-    Modules no longer return directories in the list of found
-    manifests (#588).
-
-    The crontab provider now defaults to root when there is no
-    USER set in the environment.
-
-    Puppetd once again correctly responds to HUP.
-
-    Added a syntax for referring to variables defined in
-    other classes (e.g., $puppet::server).
-
-    STDIN, STDOUT, STDERR are now redirected to /dev/null in
-    service providers descending from base.
-
-    Certificates are now valid starting one day before they are
-    created, to help handle small amounts of clock skew.
-
-    Files are no longer considered out of sync if some properties
-    are out of sync but they have no properties that can create
-    the file.
-
-0.22.3
-    Fixed backward compatibility for logs and metrics from older clients.
-
-    Fixed the location of the authconfig parameters so there aren't
-    loading order issues.
-
-    Enabling attribute validation on the providers that subclass
-    'nameservice', so we can verify that an integer is passed to
-    UID and GID.
-
-    Added a stand-alone filebucket client, named 'filebucket'.
-
-    Fixed the new nested paths for filebuckets; the entire md5 sum was
-    not being stored.
-
-    Fixing #553; -M is no longer added when home directories are being
-    managed on Red Hat.
-
-0.22.2 (grover)
-    Users can now manage their home directories, using the managehome
-    parameter, partially using patches provided by Tim Stoop and
-    Matt Palmer. (#432)
-
-    Added 'ralsh' (formerly x2puppet) to the svn tree.  When possible it
-    should be added to the packages.
-
-    The 'notify' type now defaults to its message being the same as its name.
-
-    Reopening $stdin to read from /dev/null during execution, in hopes that
-    init scripts will stop hanging.
-
-    Changed the 'servername' fact set on the server to use the server's fqdn,
-    instead of the short-name.
-
-    Changing the location of the configuration cache.  It now defaults to being
-    in the state directory, rather than in the configuration directory.
-
-    All parameter instances are stored in a single @parameters instance variable
-    hash within resource type instances.  We used to use separate hashes for
-    each parameter type.
-
-    Added the concept of provider features.  Eventually these should be able
-    to express the full range of provider functionality, but for now they can
-    test a provider to see what methods it has set and determine what features it
-    provides as a result.  These features are integrated into the doc generation
-    system so that you get feature documentation automatically.
-
-    Switched apt/aptitide to using "apt-cache policy" instead of "apt-cache showpkg"
-    for determining the latest available version. (#487)
-
-    FileBuckets now use a deeply nested structure for storing files, so
-    you do not end up with hundreds or thousands of files in the same
-    directory. (#447)
-
-    Facts are now cached in the state file, and when they change the configuration
-    is always recompiled. (#519)
-
-    Added 'ignoreimport' setting for use in commit hooks.  This causes the
-    parser to ignore import statements so a single file can be parse-checked.  (#544)
-
-    Import statements can now specify multiple comma-separated arguments.
-
-    Definitions now support both 'name' and 'title', just like any other
-    resource type. (#539)
-
-    Added a generate() command, which sets values to the result of an external
-    command. (#541)
-
-    Added a file() command to read in files with no interpolation.  The first
-    found file has its content returned.
-
-    puppetd now exits if no cert is present in onetime mode. (#533)
-
-    The client configuration cache can be safely removed and the client
-    will correctly realize the client is not in sync.
-
-    Resources can now be freely deleted, thus fixing many problems introduced
-    when deletion of required resources was forbidden when purging was introduced.
-    Only resources being purged will not be deleted.
-
-    Facts and plugins now download even in noop mode (#540).
-
-    Resources in noop mode now log when they would have responded to an event (#542).
-
-    Refactored cron support entirely.  Cron now uses providers, and there
-    is a single 'crontab' provider that handles user crontabs.  While this
-    refactor does not include providers for /etc/crontab or cron.d, it should
-    now be straightforward to write those providers.
-
-    Changed the parameter sorting so that the provider parameter comes
-    right after name, so the provider is available when the other parameters
-    and properties are being created.
-
-    Redid some of the internals of the ParsedFile provider base class.
-    It now passes a FileRecord around instead of a hash.
-
-    Fixing a bug related to link recursion that caused link directories
-    to always be considered out of sync.
-
-    The bind address for puppetmasterd can now be specified with 
-    --bindaddress.
-
-    Added (probably experimental) mongrel support.  At this point you're
-    still responsible for starting each individual process, and you have to
-    set up a proxy in front of it.
-
-    Redesigned the 'network' tree to support multiple web servers, including
-    refactoring most of the structural code so it's much clearer and more
-    reusable now.
-
-    Set up the CA client to default to ca_server and ca_port, so you can
-    easily run a separate CA.
-
-    Supporting hosts with no domain name, thanks to a patch from
-    Dennis Jacobfeuerborn.
-
-    Added an 'ignorecache' option to tell puppetd to force a recompile, thanks to
-    a patch by Chris McEniry.
-
-    Made up2date the default for RHEL < 4 and yum the default for the rest.
-
-    The yum provider now supports versions.
-
-    Case statements correctly match when multiple values are provided,
-    thanks to a patch by David Schmitt.
-
-    Functions can now be called with no arguments.
-
-    String escapes parse correctly in all cases now, thanks to a patch by
-    cstorey.
-
-    Subclasses again search parent classes for defaults.
-
-    You can now purge apt and dpkg packages.
-
-    When doing file recursion, 'ensure' only affects the top-level directory.
-
-    States have been renamed to Properties.
-
-0.22.1 (kermit) -- Mostly a bugfix release
-    Compile times now persist between restarts of puppetd.
-
-    Timeouts have been added to many parts of Puppet, reducing the likelihood
-    if it hanging forever on broken scripts or servers.
-
-    All of the documentation and recipes have been moved to the wiki by Peter
-    Abrahamsen and Ben Kite has moved the FAQ to the wiki.
-
-    Explicit relationships now override automatic relationships, allowing you
-    to manually specify deletion order when removing resources.
-
-    Resources with dependencies can now be deleted as long as all of their
-    dependencies are also being deleted.
-
-    Namespaces for both classes and definitions now work much more consistently.
-    You should now be able to specify a class or definition with a namespace
-    everywhere you would normally expect to be able to specify one without.
-
-    Downcasing of facts can be selectively disabled.
-
-    Cyclic dependency graphs are now checked for and forbidden.
-
-    The netinfo mounts provider was commented out, because it really doesn't
-    work at all.  Stupid NetInfo stores mount information with the device as
-    the key, which doesn't work with my current NetInfo code.
-
-    Otherwise, lots and lots of bugfixes.  Check the tickets associated with the
-    'kermit' milestone.
-
-0.22.0
-    Integrated the GRATR graph library into Puppet, for handling resource
-    relationships.
-
-    Lots of bug-fixes (see bugs tickets associated with the 'minor' milestone).
-
-    Added new 'resources' metatype, which currently only includes the ability
-    to purge unmanaged resources.
-
-    Added better ability to generate new resource objects during transactions
-    (using 'generate' and 'eval_generate' methods).
-
-    Rewrote all Rails support with a much better database design.  Export/collect
-    now works, although the database is incompatible with previous versions.
-
-    Removed downcasing of facts and made most of the language case-insensitive.
-
-    Added support for printing the graphs built during transactions.
-
-    Reworked how paths are built for logging.
-
-    Switched all providers to directly executing commands instead of going through
-    a subshell, which removes the need to quote or escape arguments.
-
-0.20.1
-    Mostly a bug-fix release, with the most important fix being the
-    multiple-definition error.
-
-    Completely rewrote the ParsedFile system; each provider is now much
-    shorter and much more maintainable.  However, fundamental problems
-    were found with the 'port' type, so it was disabled.  Also, added
-    a NetInfo provider for 'host' and an experimental NetInfo provider
-    for 'mount'.
-
-    Made the RRDGraph report *much* better and added reference
-    generation for reports and functions.
-
-0.20.0
-    Significantly refactored the parser.  Resource overrides now consistently
-    work anywhere in a class hierarchy.
-
-    The language was also modified somewhat.  The previous export/collect syntax
-    is now used for handling virtual objects, and export/collect (which is still
-    experimental) now uses double sigils (@@ and <<| |>>).
-
-    Resource references (e.g., File["/etc/passwd"]) now have to be capitalized,
-    in fitting in with capitalizing type operations.
-
-    As usual, lots of other smaller fixes, but most of the work was in the language.
-
-0.19.3
-    Fixing a bug in server/master.rb that causes the hostname
-    not to be available in locally-executed manifests.
-
-0.19.2
-    Fixing a few smaller bugs, notably in the reports system.
-
-    Refreshed objects now generate an event, which can result in further
-    refreshes of other objects.
-
-0.19.1
-    Fixing two critical bugs:  User management works again and cron jobs are
-    no longer added to all user accounts.
-
-0.19.0
-    Added provider support.
-
-    Added support for %h, %H, and %d expansion in fileserver.conf.
-
-    Added Certificate Revocation support.
-
-    Made dynamic loading pervasive -- nearly every aspect of Puppet will now
-    automatically load new instances (e.g., types, providers, and reports).
-
-    Added support for automatic distribution of facts and plugins (custom types).
-
-0.18.4
-    Another bug-fix release.  The most import bug fixed is that
-    cronjobs again work even with initially empty crontabs.
-
-0.18.3
-    Mostly a bug-fix release; fixed small bugs in the functionality added in
-    0.18.2.
-
-0.18.2
-    Added templating support.
-
-    Added reporting.
-
-    Added gem and blastwave packaging support.
-
-0.18.1
-    Added signal handlers for HUP, so both client and server deal correctly with it.
-
-    Added signal handler for USR1, which triggers a run on the client.
-
-    As usual, fixed many bugs.
-
-    Significant fixes to puppetrun -- it should behave much more correctly now.
-
-    Added "fail" function which throws a syntax error if it's encountered.
-
-    Added plugin downloading from the central server to the client.  It must be
-    enabled with --pluginsync.
-
-    Added support for FreeBSD's special "@daily" cron schedules.
-
-    Correctly handling spaces in file sources.
-
-    Moved documentation into svn tree.
-    
-0.18.0
-    Added support for a "default" node.
-
-    When multiple nodes are specified, they must now be comma-separated (this
-    introduces a language incompatibility).
-
-    Failed dependencies cause dependent objects within the same transaction
-    not to run.
-
-    Many updates to puppetrun
-
-    Many bug fixes
-
-    Function names are no longer reserved words.
-
-    Links can now replace files.
-
-0.17.2
-    Added "puppetrun" application and associated runner server and client classes.
-
-    Fixed cron support so it better supports valid values and environment settings.
-
-0.17.1
-    Fixing a bug requiring rails on all Debian boxes
-
-    Fixing a couple of other small bugs
-
-0.17.0
-    Adding ActiveRecord integration on the server
-
-    Adding export/collect functionality
-
-    Fixing many bugs
-
-0.16.5
-    Fixing a critical bug in importing classes from other files
-
-    Fixing nodename handling to actually allow dashes
-
-0.16.4
-    Fixing a critical bug in puppetd when acquiring a certificate for the first
-    time
-
-0.16.3
-    Some significant bug fixes
-
-    Modified puppetd so that it can now function as an agent independent
-    of a puppetmasterd process, e.g., using the PuppetShow web application.
-
-0.16.2
-    Modified some of the AST classes so that class names, definition names, and
-    node names are all set within the code being evaluated, so 'tagged(name)' returns
-    true while evaluating 'name', for instance.
-
-    Added '--clean' argument to puppetca to remove all traces of a given
-    client.
-
-0.16.1
-    Added 'tagged' and 'defined' functions.
-
-    Moved all functions to a general framework that makes it very easy to add new
-    functions.
-
-0.16.0
-    Added 'tag' keyword/function.
-
-    Added FreeBSD Ports support
-
-    Added 'pelement' server for sending or receiving Puppet objects, although
-    none of the executables use it yet.
-
-0.15.3
-    Fixed many bugs in :exec, including adding support for arrays of checks
-
-    Added autoloading for types and service variants (e.g., you can now
-    just create a new type in the appropriate location and use it in Puppet,
-    without modifying the core Puppet libs).
-
-0.15.2
-    Added darwinport, Apple .pkg, and freebsd package types
-    Added 'mount type
-    Host facts are now set at the top scope (Bug #103)
-    Added -e (inline exection) flag to 'puppet' executable
-    Many small bug fixes
-
-0.15.1
-    Fixed 'yum' installs so that they successfully upgrade packages.
-    Fixed puppetmasterd.conf file so group settings take.
-
-0.15.0
-    Upped the minor release because the File server is incompatible with 0.14,
-        because it now handles links.
-
-    The 'symlink' type is deprecated (but still present), in favor of using
-        files with the 'target' parameter.
-
-    Unset variables no longer throw an error, they just return an empty string
-
-    You can now specify tags to restrict which objects run during a given run.
-
-    You can also specify to skip running against the cached copy when there's
-    a failure, which is useful for testing new configurations.
-
-    RPMs and Sun packages can now install, as long as they specify a package
-        location, and they'll automatically upgrade if you point them to a new
-        file with an upgrade.
-    Multiple bug fixes.
-
-
-0.14.1
-    Fixed a couple of small logging bugs
-    Fixed a bug with handling group ownership of links
-
-0.14.0
-    Added some ability to selectively manage symlinks when doing file management
-    Many bug fixes
-    Variables can now be used as the test values in case statements and selectors
-    Bumping a minor release number because 0.13.4 introduced a protocol
-        incompatibility and should have had a minor rev bump
-
-0.13.6
-    Many, many small bug fixes
-    FreeBSD user/group support has been added
-    The configuration system has been rewritten so that daemons can now generate
-        and repair the files and directories they need. (Fixed bug #68.)
-    Fixed the element override issues; now only subclasses can override values.
-
-0.13.5
-    Fixed packages so types can be specified
-    Added 'enable' state to services, although it does not work everywhere yet
-
-0.13.4
-    A few important bug fixes, mostly in the parser.
-
-0.13.3
-    Changed transactions to be one-stage instead of two
-    Changed all types to use self[:name] instead of self.name, to support
-        the symbolic naming implemented in 0.13.1
-
-0.13.2
-    Changed package[answerfile] to package[adminfile], and added package[responsefile]
-    Fixed a bunch of internal functions to behave more consistently and usefully
-
-0.13.1
-    Fixed RPM spec files to create puppet user and group (lutter)
-    Fixed crontab reading and writing (luke)
-    Added symbolic naming in the language (luke)
-
-0.13.0
-    Added support for configuration files.
-    Even more bug fixes, including the infamous 'frozen object' bug, which was a
-        problem with 'waitforcert'.
-    David Lutterkort got RPM into good shape.
-
-0.12.0
-    Added Scheduling, and many bug fixes, of course.
-
-0.11.2
-    Fixed bugs related to specifying arrays of requirements
-    Fixed a key bug in retrieving checksums
-    Fixed lots of usability bugs
-    Added 'fail' methods that automatically add file and line info when possible,
-    and converted many errors to use that method
-
-0.11.1
-    Fixed bug with recursive copying with 'ignore' set.
-    Added OpenBSD package support.
-
-0.11.0
-    Added 'ensure' state to many elements.
-    Modified puppetdoc to correctly handle indentation and such.
-    Significantly rewrote much of the builtin documentation to take advantage
-        of the new features in puppetdoc, including many examples.
-
-0.10.2
-    Added SMF support
-    Added autorequire functionality, with specific support for exec and file
-        Exec elements autorequire any mentioned files, including the scripts,
-        along with their CWDs.
-        Files autorequire any parent directories.
-    Added 'alias' metaparam.
-    Fixed dependencies so they don't depend on file order.
-
-0.10.1
-    Added Solaris package support and changed puppetmasterd to run as
-    a non-root user.
-
-0.10.0
-    Significant refactoring of how types, states, and parameters work, including
-    breaking out parameters into a separate class.  This refactoring did not
-    introduce much new functionality, but made extension of Puppet significantly
-    easier
-
-    Also, fixed the bug with 'waitforcert' in puppetd.
-
-0.9.4
-    Small fix to wrap the StatusServer class in the checks for required classes.
-    
-0.9.3
-    Fixed some significant bugs in cron job management.
-
-0.9.2
-    Second Public Beta
-
-0.9.0
-    First Public Beta
diff --git a/COPYING b/COPYING
deleted file mode 100644
index 3912109..0000000
--- a/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index da0aaad..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,17 +0,0 @@
-Puppet - Automating Configuration Management. Copyright (C) 2005 Reductive Labs LLC
-
-Reductive Labs can be contacted at: info at reductivelabs.com
-
-This program and entire repository is free software; you can
-redistribute it and/or modify it under the terms of the GNU 
-General Public License as published by the Free Software 
-Foundation; either version 2 of the License, or any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
diff --git a/README b/README
deleted file mode 100644
index 992ef69..0000000
--- a/README
+++ /dev/null
@@ -1,27 +0,0 @@
-Documentation (and detailed install instructions) can be found 
-online at http://reductivelabs.com/trac/puppet/wiki/DocumentationStart .
-
-Generally, you need the following things installed:
-
-* Ruby >= 1.8.1 (earlier releases might work but probably not)
-
-* The Ruby OpenSSL library.  For some reason, this often isn't included
-  in the main ruby distributions.  You can test for it by running
-  'ruby -ropenssl -e "puts :yep"'.  If that errors out, you're missing the
-  library.
-
-  If your distribution doesn't come with the necessary library (e.g., on Debian
-  and Ubuntu you need to install libopenssl-ruby), then you'll probably have to
-  compile Ruby yourself, since it's part of the standard library and not
-  available separately.  You could probably just compile and install that one
-  library, though.
-
-* The Ruby XMLRPC client and server libraries.  For some reason, this often
-  isn't included in the main ruby distributions.  You can test for it by
-  running 'ruby -rxmlrpc/client -e "puts :yep"'.  If that errors out, you're missing
-  the library.
-
-* Facter => 1.1.1
-  You can get this from < http://reductivelabs.com/projects/facter >
-
-$Id$
diff --git a/Rakefile b/Rakefile
deleted file mode 100644
index 45d3652..0000000
--- a/Rakefile
+++ /dev/null
@@ -1,199 +0,0 @@
-# Rakefile for Puppet -*- ruby -*-
-
-$: << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
-
-begin
-    require 'rake/reductive'
-rescue LoadError
-    $stderr.puts "You must have the Reductive build library in your RUBYLIB; see http://github.com/lak/reductive-build/tree/master."
-    exit(14)
-end
-
-TESTHOSTS = %w{rh3a fedora1 centos1 freebsd1 culain}
-
-project = Rake::RedLabProject.new("puppet") do |p|
-    p.summary = "System Automation and Configuration Management Software"
-    p.description = "Puppet is a declarative language for expressing system
-        configuration, a client and server for distributing it, and a library
-        for realizing the configuration."
-
-    p.filelist = [
-        'install.rb',
-        '[A-Z]*',
-        'lib/puppet.rb',
-        'lib/puppet/**/*.rb',
-        'lib/puppet/**/*.py',
-        'test/**/*',
-        'bin/**/*',
-        'ext/**/*',
-        'examples/**/*',
-        'conf/**/*',
-        'man/**/*'
-    ]
-    p.filelist.exclude("bin/pi")
-
-    p.add_dependency('facter', '1.1.0')
-
-    #p.epmhosts = %w{culain}
-    #p.sunpkghost = "sol10b"
-    #p.rpmhost = "fedora1"
-end
-
-if project.has?(:gem)
-    # Make our gem task.  This actually just fills out the spec.
-    project.mkgemtask do |task|
-
-        task.require_path = 'lib'                         # Use these for libraries.
-
-        task.bindir = "bin"                               # Use these for applications.
-        task.executables = ["puppet", "puppetd", "puppetmasterd", "puppetdoc",
-                         "puppetca", "puppetrun", "ralsh"]
-        task.default_executable = "puppet"
-        task.autorequire = 'puppet'
-
-        #### Documentation and testing.
-
-        task.has_rdoc = true
-        #s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
-        task.rdoc_options <<
-            '--title' <<  'Puppet - Configuration Management' <<
-            '--main' << 'README' <<
-            '--line-numbers'
-        task.test_file = "test/Rakefile"
-        task.author = "Luke Kanies"
-    end
-end
-
-if project.has?(:epm)
-    project.mkepmtask do |task|
-        task.bins = FileList.new("bin/puppet", "bin/puppetca")
-        task.sbins = FileList.new("bin/puppetmasterd", "bin/puppetd")
-        task.rubylibs = FileList.new('lib/**/*')
-    end
-end
-
-rule(/_is_runnable$/) do |t|
-    available = false
-    executable = t.name.sub(/_is_runnable$/, '')
-    ENV['PATH'].split(':').each do |elem|
-        available = true if File.executable? File.join(elem, executable)
-    end
-    
-    unless available
-        puts "You do not have #{executable} available in your path"
-        exit 1
-    end
-end
-
-task :check_build_deps => 'dpkg-checkbuilddeps_is_runnable' do
-    system("dpkg-checkbuilddeps") || exit(1)
-end
-
-task :debian_packages => [ "debian", :check_build_deps, :fakeroot_is_runnable ] do
-    system("fakeroot debian/rules clean") || exit(1)
-    system("fakeroot debian/rules binary") || exit(1)
-end
-
-
-def dailyfile(package)
-    "#{downdir}/#{package}/#{package}-daily-#{stamp}.tgz"
-end
-
-def daily(package)
-    edir = "/tmp/daily-export"
-    Dir.mkdir edir
-    Dir.chdir(edir) do
-        sh %{git clone git://reductivelabs.com/#{package} #{package} >/dev/null}
-        sh %{tar cf - #{package} | gzip -c > #{dailyfile(package)}}
-    end
-    FileUtils.rm_rf(edir)
-end
-
-def downdir
-    ENV['DOWNLOAD_DIR'] || "/opt/rl/docroots/reductivelabs.com/htdocs/downloads"
-end
-
-def stamp
-    [Time.now.year, Time.now.month, Time.now.day].collect { |i| i.to_s}.join
-end
-
-pdaily = dailyfile("puppet")
-fdaily = dailyfile("facter")
-
-file pdaily do
-    daily("puppet")
-end
-
-file fdaily do
-    daily("facter")
-end
-
-task :daily => [pdaily, fdaily]
-
-task :dailyclean do
-    Dir.glob("#{downdir}/*/*daily*.tgz").each do |file|
-        puts "Removing %s" % file
-        File.unlink(file)
-    end
-end
-
-task :tracdocs do
-    require 'puppet'
-    require 'puppet/util/reference'
-    Puppet::Util::Reference.references.each do |ref| 
-        sh "puppetdoc -m trac -r #{ref.to_s}"
-    end
-end
-
-desc "Run the specs under spec/"
-task :spec do
-    require 'spec'
-    require 'spec/rake/spectask'
-    require 'rcov'
-    Spec::Rake::SpecTask.new do |t|
-         #   t.rcov = true
-         t.spec_opts = ['--format','s', '--loadby','mtime']
-         t.spec_files = FileList['spec/**/*.rb']
-    end
-end
-
-desc "Run the unit tests"
-task :unit do
-    sh "cd test; rake"
-end
-
-desc "Send patch information to the puppet-dev list"
-task :mail_patches do
-    if Dir.glob("00*.patch").length > 0
-        raise "Patches already exist matching '00*.patch'; clean up first"
-    end
-
-    unless %x{git status} =~ /On branch (.+)/
-        raise "Could not get branch from 'git status'"
-    end
-    branch = $1
-    
-    unless branch =~ %r{^([^\/]+)/([^\/]+)/([^\/]+)$}
-        raise "Branch name does not follow <type>/<parent>/<name> model; cannot autodetect parent branch"
-    end
-
-    type, parent, name = $1, $2, $3
-
-    # Create all of the patches
-    sh "git-format-patch -C -M -s -n #{parent}..HEAD"
-
-    # And then mail them out.
-
-    # If we've got more than one patch, add --compose
-    if Dir.glob("00*.patch").length > 1
-        compose = "--compose"
-    else
-        compose = ""
-    end
-
-    # Now send the mail.
-    sh "git send-email #{compose} --no-chain-reply-to --no-signed-off-by-cc --suppress-from --no-thread --to puppet-dev at googlegroups.com 00*.patch"
-
-    # Finally, clean up the patches
-    sh "rm 00*.patch"
-end
diff --git a/bin/filebucket b/bin/filebucket
deleted file mode 100755
index 17e01ed..0000000
--- a/bin/filebucket
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/usr/bin/env ruby
-
-#
-# = Synopsis
-#
-# A stand-alone Puppet filebucket client.
-#
-# = Usage
-#
-#   filebucket [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose]
-#      [-l|--local] [-r|--remote]
-#      [-s|--server <server>] [-b|--bucket <directory>] <file> <file> ...
-#
-# = Description
-#
-# This is a stand-alone filebucket client for sending files to a local
-# or central filebucket.
-#
-# = Usage
-#
-# This client can operate in three modes, with only one mode per call:
-#
-# backup::
-#   Send one or more files to the specified file bucket.  Each sent file
-#   is printed with its resulting md5 sum.
-#
-# get::
-#   Return the text associated with an md5 sum.  The text is printed to
-#   stdout, and only one file can be retrieved at a time.
-#
-# restore::
-#   Given a file path and an md5 sum, store the content associated with the
-#   sum into the specified file path.  You can specify an entirely new path
-#   to this argument; you are not restricted to restoring the content to its
-#   original location.
-#
-# Note that +filebucket+ defaults to using a network-based filebucket available on
-# the server named +puppet+.  To use this, you'll have to be running as a user
-# with valid Puppet certificates.  Alternatively, you can use your local file bucket
-# by specifying +--local+.
-#
-# = Example
-#
-#   $ filebucket backup /etc/passwd
-#   /etc/passwd: 429b225650b912a2ee067b0a4cf1e949
-#   $ filebucket restore /tmp/passwd 429b225650b912a2ee067b0a4cf1e949
-#   $
-# 
-# = Options
-#
-# Note that any configuration parameter that's valid in the configuration file
-# is also a valid long argument.  For example, 'ssldir' is a valid configuration
-# parameter, so you can specify '--ssldir <directory>' as an argument.
-#
-# See the configuration file documentation at
-# http://reductivelabs.com/projects/puppet/reference/configref.html for
-# the full list of acceptable parameters. A commented list of all
-# configuration options can also be generated by running puppet with
-# '--genconfig'.
-#
-# debug::
-#   Enable full debugging.
-#
-# help::
-#   Print this help message
-#
-# local::
-#   Use the local filebucket.  This will use the default configuration
-#   information.
-#
-# remote::
-#   Use a remote filebucket.  This will use the default configuration
-#   information.
-#
-# server::
-#   The server to send the file to, instead of locally.
-#
-# verbose::
-#   Print extra information.
-#
-# version::
-#   Print version information.
-#
-# = Example
-#
-#   filebucket -b /tmp/filebucket /my/file
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-require 'puppet'
-require 'puppet/network/client'
-require 'getoptlong'
-
-options = [
-    [ "--bucket",   "-b",			GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-    [ "--help",		"-h",			GetoptLong::NO_ARGUMENT ],
-    [ "--local",	"-l",			GetoptLong::NO_ARGUMENT ],
-    [ "--remote",	"-r",			GetoptLong::NO_ARGUMENT ],
-    [ "--verbose",  "-v",			GetoptLong::NO_ARGUMENT ],
-    [ "--version",  "-V",           GetoptLong::NO_ARGUMENT ]
-]
-
-# Add all of the config parameters as valid options.
-Puppet.settings.addargs(options)
-
-result = GetoptLong.new(*options)
-
-options = {}
-
-begin
-    result.each { |opt,arg|
-        case opt
-            when "--version"
-                puts "%s" % Puppet.version
-                exit
-            when "--help"
-                if Puppet.features.usage?
-                    RDoc::usage && exit
-                else
-                    puts "No help available unless you have RDoc::usage installed"
-                    exit
-                end
-            when "--bucket"
-                options[:bucket] = arg
-            when "--verbose"
-                options[:verbose] = true
-            when "--debug"
-                options[:debug] = true
-            when "--local"
-                options[:local] = true
-            when "--remote"
-                options[:remote] = true
-            else
-                Puppet.settings.handlearg(opt, arg)
-        end
-    }
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts "Try '#{$0} --help'"
-    exit(1)
-end
-
-Puppet::Log.newdestination(:console)
-
-client = nil
-server = nil
-
-Puppet.settraps
-
-if options[:debug]
-    Puppet::Log.level = :debug
-elsif options[:verbose]
-    Puppet::Log.level = :info
-end
-
-# Now parse the config
-Puppet.parse_config
-
-if Puppet.settings.print_configs?
-        exit(Puppet.settings.print_configs ? 0 : 1)
-end
-
-begin
-    if options[:local] or options[:bucket]
-        path = options[:bucket] || Puppet[:bucketdir]
-        client = Puppet::Network::Client.dipper.new(:Path => path)
-    else
-        require 'puppet/network/handler'
-        client = Puppet::Network::Client.dipper.new(:Server => Puppet[:server])
-    end
-rescue => detail
-    $stderr.puts detail
-    if Puppet[:trace]
-        puts detail.backtrace
-    end
-    exit(1)
-end
-
-mode = ARGV.shift
-case mode
-when "get":
-    md5 = ARGV.shift
-    out = client.getfile(md5)
-    print out
-when "backup":
-    ARGV.each do |file|
-        unless FileTest.exists?(file)
-            $stderr.puts "%s: no such file" % file
-            next
-        end
-        unless FileTest.readable?(file)
-            $stderr.puts "%s: cannot read file" % file
-            next
-        end
-        md5 = client.backup(file)
-        puts "%s: %s" % [file, md5]
-    end
-when "restore":
-    file = ARGV.shift
-    md5 = ARGV.shift
-    client.restore(file, md5)
-else
-    raise "Invalid mode %s" % mode
-end
-
diff --git a/bin/puppet b/bin/puppet
deleted file mode 100755
index f3d8c25..0000000
--- a/bin/puppet
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/usr/bin/env ruby
-
-#
-# = Synopsis
-#
-# Run a stand-alone +puppet+ manifest.
-#
-# = Usage
-#
-#   puppet [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose]
-#               [--detailed-exitcodes] [-l|--logdest <file>] <file>
-#
-# = Description
-#
-# This is the standalone puppet execution tool; use it to execute
-# individual manifests that you write.  If you need to execute site-wide
-# manifests, use +puppetd+ and +puppetmasterd+.
-#
-# = Options
-#
-# Note that any configuration parameter that's valid in the configuration file
-# is also a valid long argument.  For example, 'ssldir' is a valid configuration
-# parameter, so you can specify '--ssldir <directory>' as an argument.
-#
-# See the configuration file documentation at
-# http://reductivelabs.com/projects/puppet/reference/configref.html for
-# the full list of acceptable parameters. A commented list of all
-# configuration options can also be generated by running puppet with
-# '--genconfig'.
-#
-# debug::
-#   Enable full debugging.
-#
-# detailed-exitcodes::
-#   Provide transaction information via exit codes.  If this is enabled, an exit
-#   code of '2' means there were changes, and an exit code of '4' means that there
-#   were failures during the transaction.
-#
-# help::
-#   Print this help message
-#
-# loadclasses::
-#   Load any stored classes.  +puppetd+ caches configured classes (usually at
-#   /etc/puppet/classes.txt), and setting this option causes all of those classes
-#   to be set in your +puppet+ manifest.
-#
-# logdest::
-#   Where to send messages.  Choose between syslog, the console, and a log file.
-#   Defaults to sending messages to the console.
-#
-# verbose::
-#   Print extra information.
-#
-# = Example
-#
-#   puppet -l /tmp/manifest.log manifest.pp
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-require 'puppet'
-require 'puppet/network/handler'
-require 'puppet/network/client'
-require 'getoptlong'
-
-options = [
-    [ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-    [ "--help",		"-h",			GetoptLong::NO_ARGUMENT ],
-    [ "--logdest",	"-l",			GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--execute",	"-e",			GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--loadclasses", "-L",		GetoptLong::NO_ARGUMENT ],
-    [ "--verbose",  "-v",			GetoptLong::NO_ARGUMENT ],
-    [ "--use-nodes",    			GetoptLong::NO_ARGUMENT ],
-    [ "--detailed-exitcodes",		GetoptLong::NO_ARGUMENT ],
-    [ "--version",  "-V",           GetoptLong::NO_ARGUMENT ]
-]
-
-# Add all of the config parameters as valid options.
-Puppet.settings.addargs(options)
-
-result = GetoptLong.new(*options)
-
-options = {
-    :debug => false,
-    :verbose => false,
-    :noop => false,
-    :logfile => false,
-    :loadclasses => false,
-    :logset => false,
-    :code => nil,
-    :detailed_exits => false,
-}
-
-
-master = {
-    :Local => true
-}
-
-begin
-    result.each { |opt,arg|
-        case opt
-            when "--version"
-                puts "%s" % Puppet.version
-                exit
-            when "--help"
-                if Puppet.features.usage?
-                    RDoc::usage && exit
-                else
-                    puts "No help available unless you have RDoc::usage installed"
-                    exit
-                end
-            when "--use-nodes"
-                options[:UseNodes] = true
-            when "--verbose"
-                options[:verbose] = true
-            when "--debug"
-                options[:debug] = true
-            when "--execute"
-                options[:code] = arg
-            when "--loadclasses"
-                options[:loadclasses] = true
-            when "--detailed-exitcodes"
-                options[:detailed_exits] = true
-            when "--logdest"
-                begin
-                    Puppet::Util::Log.newdestination(arg)
-                    options[:logset] = true
-                rescue => detail
-                    $stderr.puts detail.to_s
-                end
-            else
-                Puppet.settings.handlearg(opt, arg)
-        end
-    }
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts "Try '#{$0} --help'"
-    exit(1)
-end
-
-Puppet.parse_config
-
-# Now parse the config
-if Puppet[:config] and File.exists? Puppet[:config]
-    Puppet.settings.parse(Puppet[:config])
-end
-
-if Puppet.settings.print_configs?
-    exit(Puppet.settings.print_configs ? 0 : 1)
-end
-
-# If noop is set, then also enable diffs
-if Puppet[:noop]
-    Puppet[:show_diff] = true
-end
-
-unless options[:logset]
-    Puppet::Util::Log.newdestination(:console)
-end
-
-client = nil
-server = nil
-
-Puppet.settraps
-
-if options[:debug]
-    Puppet::Util::Log.level = :debug
-elsif options[:verbose]
-    Puppet::Util::Log.level = :info
-end
-
-# Set our code or file to use.
-if options[:code] or ARGV.length == 0
-    Puppet[:code] = options[:code] || STDIN.read
-else
-    Puppet[:manifest] = ARGV.shift
-end
-
-if Puppet[:parseonly]
-    begin
-        Puppet::Parser::Interpreter.new.parser(Puppet[:environment])
-    rescue => detail
-        Puppet.err detail
-        exit 1
-    end
-    exit 0
-end
-
-# Collect our facts.
-facts = Puppet::Node::Facts.find(Puppet[:certname])
-
-# Find our Node
-unless node = Puppet::Node.find(Puppet[:certname])
-    raise "Could not find node %s" % Puppet[:certname]
-end
-
-# Merge in the facts.
-node.merge(facts.values)
-
-# Allow users to load the classes that puppetd creates.
-if options[:loadclasses]
-    file = Puppet[:classfile]
-    if FileTest.exists?(file)
-        unless FileTest.readable?(file)
-            $stderr.puts "%s is not readable" % file
-            exit(63)
-        end
-
-        node.classes = File.read(file).split(/[\s\n]+/)
-    end
-end
-
-begin
-    # Compile our catalog
-    starttime = Time.now
-    catalog = Puppet::Node::Catalog.find(node.name, :use_node => node)
-
-    # Translate it to a RAL catalog
-    catalog = catalog.to_ral
-
-    catalog.host_config = true if Puppet[:graph] or Puppet[:report]
-
-    catalog.finalize
-
-    catalog.retrieval_duration = Time.now - starttime
-
-    # And apply it
-    transaction = catalog.apply
-
-    status = 0
-    if not Puppet[:noop] and options[:detailed_exits] then
-        transaction.generate_report
-    	status |= 2 if transaction.report.metrics["changes"][:total] > 0
-        status |= 4 if transaction.report.metrics["resources"][:failed] > 0
-    end
-    exit(status)
-rescue => detail
-    if Puppet[:trace]
-        puts detail.backtrace
-    end
-    if detail.is_a?(XMLRPC::FaultException)
-        $stderr.puts detail.message
-    else
-        $stderr.puts detail
-    end
-    exit(1)
-end
diff --git a/bin/puppetca b/bin/puppetca
deleted file mode 100755
index 84c1599..0000000
--- a/bin/puppetca
+++ /dev/null
@@ -1,362 +0,0 @@
-#!/usr/bin/env ruby
-
-#
-# = Synopsis
-#
-# Stand-alone certificate authority.  Capable of generating certificates
-# but mostly meant for signing certificate requests from puppet clients.
-#
-# = Usage
-#
-#   puppetca [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose]
-#               [-g|--generate] [-l|--list] [-s|--sign] [-r|--revoke]
-#               [-p|--print] [-c|--clean] [--verify] [host]
-#
-# = Description
-#
-# Because the puppetmasterd daemon defaults to not signing client certificate
-# requests, this script is available for signing outstanding requests.  It
-# can be used to list outstanding requests and then either sign them individually
-# or sign all of them.
-#
-# = Options
-#
-# Note that any configuration parameter that's valid in the configuration file
-# is also a valid long argument.  For example, 'ssldir' is a valid configuration
-# parameter, so you can specify '--ssldir <directory>' as an argument.
-#
-# See the configuration file documentation at
-# http://reductivelabs.com/projects/puppet/reference/configref.html for
-# the full list of acceptable parameters. A commented list of all
-# configuration options can also be generated by running puppetca with
-# '--genconfig'.
-#
-# all::
-#   Operate on all items.  Currently only makes sense with '--sign',
-#   '--clean', or '--list'.
-#
-# clean::
-#    Remove all files related to a host from puppetca's storage. This is 
-#    useful when rebuilding hosts, since new certificate signing requests
-#    will only be honored if puppetca does not have a copy of a signed
-#    certificate for that host. The certificate of the host remains valid.
-#    If '--all' is specified then all host certificates, both signed and
-#    unsigned, will be removed.
-#
-# debug::
-#   Enable full debugging.
-#
-# generate::
-#   Generate a certificate for a named client.  A certificate/keypair will be
-#   generated for each client named on the command line.
-#
-# help::
-#   Print this help message
-#
-# list::
-#   List outstanding certificate requests.  If '--all' is specified, 
-#   signed certificates are also listed, prefixed by '+'.
-#
-# print::
-#   Print the full-text version of a host's certificate.
-#
-# revoke::
-#   Revoke the certificate of a client. The certificate can be specified
-#   either by its serial number, given as a decimal number or a hexadecimal
-#   number prefixed by '0x', or by its hostname. The certificate is revoked
-#   by adding it to the Certificate Revocation List given by the 'cacrl'
-#   config parameter. Note that the puppetmasterd needs to be restarted
-#   after revoking certificates.
-#
-# sign::
-#   Sign an outstanding certificate request.  Unless '--all' is specified,
-#   hosts must be listed after all flags.
-#
-# verbose::
-#   Enable verbosity.
-#
-# version::
-#   Print the puppet version number and exit.
-#
-# verify::
-#   Verify the named certificate against the local CA certificate.
-#
-# = Example
-#
-#   $ puppetca -l
-#   culain.madstop.com
-#   $ puppetca -s culain.madstop.com
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-require 'puppet'
-require 'puppet/sslcertificates'
-require 'getoptlong'
-
-options = [
-    [ "--all",      "-a",  GetoptLong::NO_ARGUMENT ],
-    [ "--clean",    "-c",  GetoptLong::NO_ARGUMENT ],
-    [ "--debug",    "-d",  GetoptLong::NO_ARGUMENT ],
-    [ "--generate", "-g",  GetoptLong::NO_ARGUMENT ],
-    [ "--help",     "-h",  GetoptLong::NO_ARGUMENT ],
-    [ "--list",     "-l",  GetoptLong::NO_ARGUMENT ],
-    [ "--print",    "-p",  GetoptLong::NO_ARGUMENT ],
-    [ "--revoke",   "-r",  GetoptLong::NO_ARGUMENT ],
-    [ "--sign",     "-s",  GetoptLong::NO_ARGUMENT ],
-    [ "--verify",          GetoptLong::NO_ARGUMENT ],
-	[ "--version",	"-V",  GetoptLong::NO_ARGUMENT ],
-    [ "--verbose",  "-v",  GetoptLong::NO_ARGUMENT ]
-]
-
-# Add all of the config parameters as valid options.
-Puppet.settings.addargs(options)
-
-result = GetoptLong.new(*options)
-
-mode = nil
-all = false
-generate = nil
-
-modes = [:clean, :list, :revoke, :generate, :sign, :print, :verify]
-
-begin
-    result.each { |opt,arg|
-        case opt
-            when "--all"
-                all = true
-            when "--debug"
-                Puppet::Util::Log.level = :debug
-            when "--generate"
-                generate = arg
-                mode = :generate
-            when "--help"
-                if Puppet.features.usage?
-                    RDoc::usage && exit
-                else
-                    puts "No help available unless you have RDoc::usage installed"
-                    exit
-                end
-            when "--list"
-                mode = :list
-            when "--revoke"
-                mode = :revoke
-            when "--sign"
-                mode = :sign
-            when "--version"
-                puts "%s" % Puppet.version
-                exit
-            when "--verbose"
-                Puppet::Util::Log.level = :info
-            else
-                tmp = opt.sub("--", '').to_sym
-                if modes.include?(tmp)
-                    mode = tmp
-                else
-                    Puppet.settings.handlearg(opt, arg)
-                end
-        end
-    }
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts "Try '#{$0} --help'"
-    exit(1)
-end
-
-# Now parse the config
-Puppet.parse_config
-
-if Puppet.settings.print_configs?
-    exit(Puppet.settings.print_configs ? 0 : 1)
-end
-
-begin
-    ca = Puppet::SSLCertificates::CA.new()
-rescue => detail
-    if Puppet[:debug]
-        puts detail.backtrace
-    end
-    puts detail.to_s
-    exit(23)
-end
-
-unless mode
-    $stderr.puts "You must specify a mode; see the output from --help"
-    exit(12)
-end
-
-if [:verify, :print, :generate, :clean, :revoke, :list].include?(mode)
-    hosts = ARGV.collect { |h| h.downcase }
-end
-
-if [:sign, :list].include?(mode)
-    waiting = ca.list
-    unless waiting.length > 0 or (mode == :list and all)
-        puts "No certificates to sign"
-        if ARGV.length > 0
-            exit(17)
-        else
-            exit(0)
-        end
-    end
-end
-
-case mode
-when :list
-    waiting = ca.list
-    if waiting.length > 0
-        puts waiting.join("\n")
-    end
-    if all
-        puts ca.list_signed.collect { |cert | cert.sub(/^/,"+ ") }.join("\n")
-    end
-when :clean
-    if hosts.empty? and all == false
-        $stderr.puts "You must specify one or more hosts to clean or --all to clean all host certificates"
-        exit(24)
-    end
-
-    cleaned = false
-
-    if all
-        certs = ca.list
-        certs |= ca.list_signed
-            if certs.empty?
-                $stderr.puts "No certificates to clean"
-                exit(24)
-            end
-            certs.each do |c|
-                ca.clean(c)
-            end
-        cleaned = true
-    else
-        hosts.each do |host|
-            cert = ca.getclientcert(host)[0]
-                if cert.nil?
-                    $stderr.puts "Could not find client certificate for %s" % host
-                    next
-                end
-            ca.clean(host)
-            cleaned = true
-        end
-    end
- 
-    unless cleaned
-        exit(27)
-    end
-when :sign
-    to_sign = ARGV.collect { |h| h.downcase }
-    unless to_sign.length > 0 or all
-        $stderr.puts(
-            "You must specify one or more hosts to sign certificates for or --all to sign all certificates"
-        )
-        exit(24)
-    end
-
-    unless all
-        to_sign.each { |host|
-            unless waiting.include?(host)
-                $stderr.puts "No waiting request for %s" % host
-            end
-        }
-        waiting = waiting.find_all { |host|
-            to_sign.include?(host)
-        }
-    end
-
-    waiting.each { |host|
-        begin
-            csr = ca.getclientcsr(host)
-        rescue => detail
-            $stderr.puts "Could not retrieve request for %s: %s" % [host, detail]
-        end
-
-        begin
-            ca.sign(csr)
-            $stderr.puts "Signed %s" % host
-        rescue => detail
-            $stderr.puts "Could not sign request for %s: %s" % [host, detail]
-        end
-
-        begin
-            ca.removeclientcsr(host)
-        rescue => detail
-            $stderr.puts "Could not remove request for %s: %s" % [host, detail]
-        end
-    }
-when :generate
-    # we need to generate a certificate for a host
-    hosts.each { |host|
-        puts "Generating certificate for %s" % host
-        cert = Puppet::SSLCertificates::Certificate.new(
-            :name => host
-        )
-        cert.mkcsr
-        signedcert, cacert = ca.sign(cert.csr)
-
-        cert.cert = signedcert
-        cert.cacert = cacert
-        cert.write
-    }
-when :print
-    hosts.each { |h|
-        cert = ca.getclientcert(h)[0]
-        puts cert.to_text
-    }
-when :revoke
-    hosts.each { |h|
-        serial = nil
-        if h =~ /^0x[0-9a-f]+$/
-            serial = h.to_i(16)
-        elsif h =~ /^[0-9]+$/
-            serial = h.to_i
-        else
-            cert = ca.getclientcert(h)[0]
-            if cert.nil?
-                $stderr.puts "Could not find client certificate for %s" % h
-            else
-                serial = cert.serial
-            end
-        end
-        unless serial.nil?
-            ca.revoke(serial)
-            puts "Revoked certificate with serial #{serial}"
-        end
-    }
-when :verify
-    unless ssl = %x{which openssl}.chomp
-        raise "Can't verify certificates without the openssl binary and could not find one"
-    end
-    success = true
-
-    cacert = Puppet[:localcacert]
-
-    hosts.each do |host|
-        print "%s: " % host
-        file = ca.host2certfile(host)
-        unless FileTest.exist?(file)
-            puts "no certificate found"
-            success = false
-            next
-        end
-
-
-        command = %{#{ssl} verify -CAfile #{cacert} #{file}}
-        output = %x{#{command}}
-        if $? == 0
-            puts "valid"
-        else
-            puts output
-            success = false
-        end
-    end
-else
-    $stderr.puts "Invalid mode %s" % mode
-    exit(42)
-end
-
diff --git a/bin/puppetd b/bin/puppetd
deleted file mode 100755
index 0813745..0000000
--- a/bin/puppetd
+++ /dev/null
@@ -1,439 +0,0 @@
-#!/usr/bin/env ruby
-# == Synopsis 
-#
-# Retrieve the client configuration from the central puppet server and apply
-# it to the local host.
-#
-# Currently must be run out periodically, using cron or something similar.
-#
-# = Usage
-#
-#   puppetd  [-D|--daemonize|--no-daemonize] [-d|--debug] [--disable] [--enable]
-#       [-h|--help] [--fqdn <host name>] [-l|--logdest syslog|<file>|console]
-#       [-o|--onetime] [--serve <handler>] [-t|--test] [--noop]
-#       [-V|--version] [-v|--verbose] [-w|--waitforcert <seconds>]
-#
-# = Description
-#
-# This is the main puppet client.  Its job is to retrieve the local machine's
-# configuration from a remote server and apply it.  In order to successfully
-# communicate with the remote server, the client must have a certificate signed
-# by a certificate authority that the server trusts; the recommended method
-# for this, at the moment, is to run a certificate authority as part of the
-# puppet server (which is the default).  The client will connect and request
-# a signed certificate, and will continue connecting until it receives one.
-#
-# Once the client has a signed certificate, it will retrieve its configuration
-# and apply it.
-#
-# = Usage Notes
-#
-# +puppetd+ does its best to find a compromise between interactive use and
-# daemon use.  Run with no arguments and no configuration, it will go into the
-# backgroun, attempt to get a signed certificate, and retrieve and apply its
-# configuration every 30 minutes.
-#
-# Some flags are meant specifically for interactive use -- in particular,
-# +test+ and +tags+ are useful.  +test+ enables verbose logging, causes
-# the daemon to stay in the foreground, exits if the server's configuration is
-# invalid (this happens if, for instance, you've left a syntax error on the
-# server), and exits after running the configuration once (rather than hanging
-# around as a long-running process).
-#
-# +tags+ allows you to specify what portions of a configuration you want to apply.
-# Puppet elements are tagged with all of the class or definition names that
-# contain them, and you can use the +tags+ flag to specify one of these names,
-# causing only configuration elements contained within that class or definition
-# to be applied.  This is very useful when you are testing new configurations --
-# for instance, if you are just starting to manage +ntpd+, you would put all of
-# the new elements into an +ntpd+ class, and call puppet with +--tags ntpd+,
-# which would only apply that small portion of the configuration during your
-# testing, rather than applying the whole thing.
-#
-# = Options
-#
-# Note that any configuration parameter that's valid in the configuration file
-# is also a valid long argument.  For example, 'server' is a valid configuration
-# parameter, so you can specify '--server <servername>' as an argument.
-#
-# See the configuration file documentation at
-# http://reductivelabs.com/trac/puppet/wiki/ConfigurationReference for
-# the full list of acceptable parameters. A commented list of all
-# configuration options can also be generated by running puppetd with
-# '--genconfig'.
-#
-# daemonize::
-#   Send the process into the background.  This is the default.
-#
-# no-daemonize::
-#   Do not send the process into the background.
-#
-# debug::
-#   Enable full debugging.
-#
-# disable::
-#   Disable working on the local system.  This puts a lock file in place,
-#   causing +puppetd+ not to work on the system until the lock file is removed.
-#   This is useful if you are testing a configuration and do not want the central
-#   configuration to override the local state until everything is tested and
-#   committed.
-#
-#   +puppetd+ uses the same lock file while it is running, so no more than one
-#   +puppetd+ process is working at a time.
-#
-#   +puppetd+ exits after executing this.
-#
-# enable::
-#   Enable working on the local system.  This removes any lock file, causing
-#   +puppetd+ to start managing the local system again (although it will continue
-#   to use its normal scheduling, so it might not start for another half hour).
-#
-#   +puppetd+ exits after executing this.
-#
-# fqdn::
-#   Set the fully-qualified domain name of the client.  This is only used for
-#   certificate purposes, but can be used to override the discovered hostname.
-#   If you need to use this flag, it is generally an indication of a setup problem.
-#
-# help::
-#   Print this help message
-#
-# logdest::
-#   Where to send messages.  Choose between syslog, the console, and a log file.
-#   Defaults to sending messages to syslog, or the console if debugging or
-#   verbosity is enabled.
-#
-# no-client::
-#   Do not create a config client.  This will cause the daemon to run
-#   without ever checking for its configuration automatically, and only
-#   makes sense when used in conjunction with --listen.
-#
-# onetime::
-#   Run the configuration once, rather than as a long-running daemon.  This is
-#   useful for interactively running puppetd.
-#
-# serve::
-#   Start another type of server.  By default, +puppetd+ will start
-#   a service handler that allows authenticated and authorized remote nodes to
-#   trigger the configuration to be pulled down and applied.  You can specify
-#   any handler here that does not require configuration, e.g., filebucket, ca,
-#   or resource.  The handlers are in +lib/puppet/network/handler+, and the names
-#   must match exactly, both in the call to +serve+ and in +namespaceauth.conf+.
-#
-# test::
-#   Enable the most common options used for testing.  These are +onetime+,
-#   +verbose+, +ignorecache, and +no-usecacheonfailure+.
-#
-# noop::
-#   Use +noop+ mode where the daemon runs in a no-op or dry-run mode.  This is useful
-#   for seeing what changes Puppet will make without actually executing the changes.
-#
-# verbose::
-#   Turn on verbose reporting.
-#
-# version::
-#   Print the puppet version number and exit.
-#
-# waitforcert::
-#   This option only matters for daemons that do not yet have certificates
-#   and it is enabled by default, with a value of 120 (seconds).  This causes
-#   +puppetd+ to connect to the server every 2 minutes and ask it to sign a
-#   certificate request.  This is useful for the initial setup of a puppet
-#   client.  You can turn off waiting for certificates by specifying a time
-#   of 0.
-#
-# = Example
-#
-#   puppetd --server puppet.domain.com
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005, 2006 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-# Do an initial trap, so that cancels don't get a stack trace.
-trap(:INT) do
-    $stderr.puts "Cancelling startup"
-    exit(0)
-end
-
-require 'puppet'
-require 'puppet/executables/client/certhandler'
-require 'puppet/network/client'
-require 'getoptlong'
-
-options = [
-	[ "--centrallogging",			GetoptLong::NO_ARGUMENT ],
-	[ "--disable",	    			GetoptLong::NO_ARGUMENT ],
-	[ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-	[ "--enable",	    			GetoptLong::NO_ARGUMENT ],
-	[ "--fqdn",     "-f",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--help",		"-h",			GetoptLong::NO_ARGUMENT ],
-	[ "--logdest",	"-l",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--onetime",  "-o",			GetoptLong::NO_ARGUMENT ],
-	[ "--test",	    "-t",			GetoptLong::NO_ARGUMENT ],
-	[ "--serve",    "-s",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--no-client",       			GetoptLong::NO_ARGUMENT ],
-	[ "--verbose",	"-v",			GetoptLong::NO_ARGUMENT ],
-	[ "--version",	"-V",			GetoptLong::NO_ARGUMENT ],
-	[ "--waitforcert",	"-w",		GetoptLong::REQUIRED_ARGUMENT ]
-]
-
-# Add all of the config parameters as valid options.
-Puppet.settings.addargs(options)
-
-result = GetoptLong.new(*options)
-
-args = {}
-
-options = {
-    :waitforcert => 120,  # Default to checking for certs every 5 minutes
-    :onetime => false,
-    :verbose => false,
-    :debug => false,
-    :centrallogs => false,
-    :setdest => false,
-    :enable => false,
-    :disable => false,
-    :client => true,
-    :fqdn => nil,
-    :serve => {}
-}
-
-begin
-    explicit_waitforcert = false
-    result.each { |opt,arg|
-        case opt
-            # First check to see if the argument is a valid configuration parameter;
-            # if so, set it. NOTE: there is a catch-all at the bottom for defaults.rb
-            when "--disable"
-                options[:disable] = true
-            when "--serve"
-                if Puppet::Network::Handler.handler(arg)
-                    options[:serve][arg.to_sym] = {}
-                else
-                    raise "Could not find handler for %s" % arg
-                end
-            when "--enable"
-                options[:enable] = true
-            when "--test"
-                options[:test] = true
-            when "--centrallogging"
-                options[:centrallogs] = true
-            when "--help"
-                if Puppet.features.usage?
-                    RDoc::usage && exit
-                else
-                    puts "No help available unless you have RDoc::usage installed"
-                    exit
-                end
-            when "--version"
-                puts "%s" % Puppet.version
-                exit
-            when "--verbose"
-                options[:verbose] = true
-            when "--debug"
-                options[:debug] = true
-            when "--fqdn"
-                options[:fqdn] = arg
-            when "--no-client"
-                options[:client] = false
-            when "--onetime"
-                options[:onetime] = true
-                options[:waitforcert] = 0 unless explicit_waitforcert
-            when "--port"
-                args[:Port] = arg
-            when "--logdest"
-                begin
-                    Puppet::Util::Log.newdestination(arg)
-                    options[:setdest] = true
-                rescue => detail
-                    if Puppet[:debug]
-                        puts detail.backtrace
-                    end
-                    $stderr.puts detail.to_s
-                end
-            when "--waitforcert"
-                options[:waitforcert] = arg.to_i
-                explicit_waitforcert = true
-            else
-                Puppet.settings.handlearg(opt, arg)
-        end
-    }
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts detail
-    $stderr.puts "Try '#{$0} --help'"
-    exit(1)
-end
-
-# Now parse the config
-Puppet.parse_config
-
-if options[:test]
-    # Enable all of the most common test options.
-    Puppet.settings.handlearg("--ignorecache")
-    Puppet.settings.handlearg("--no-usecacheonfailure")
-    Puppet.settings.handlearg("--no-splay")
-    Puppet.settings.handlearg("--show_diff")
-    Puppet.settings.handlearg("--no-daemonize")
-    options[:verbose] = true
-    options[:onetime] = true
-    options[:waitforcert] = 0
-end
-
-# Handle the logging settings.
-if options[:debug] or options[:verbose]
-    Puppet::Util::Log.newdestination(:console)
-    if options[:debug]
-        Puppet::Util::Log.level = :debug
-    else
-        Puppet::Util::Log.level = :info
-    end
-end
-
-unless options[:setdest]
-    Puppet::Util::Log.newdestination(:syslog)
-end
-
-if Puppet.settings.print_configs?
-    exit(Puppet.settings.print_configs ? 0 : 1)
-end
-
-# If noop is set, then also enable diffs
-if Puppet[:noop]
-    Puppet[:show_diff] = true
-end
-
-args[:Server] = Puppet[:server]
-if options[:fqdn]
-    args[:FQDN] = options[:fqdn]
-    Puppet[:certname] = options[:fqdn] 
-end
-
-if options[:centrallogs]
-    logdest = args[:Server]
-
-    if args.include?(:Port)
-        logdest += ":" + args[:Port]
-    end
-    Puppet::Util::Log.newdestination(logdest)
-end
-
-# We need tomake the client either way, we just don't start it
-# if --no-client is set.
-client = Puppet::Network::Client.master.new(args)
-if options[:enable]
-    client.enable
-elsif options[:disable]
-    client.disable
-end
-
-if options[:enable] or options[:disable]
-    exit(0)
-end
-
-server = nil
-
-# It'd be nice to daemonize later, but we have to daemonize before the
-# waitforcert happens.
-if Puppet[:daemonize]
-    client.daemonize
-end
-
-unless Puppet::Executables::Client::CertHandler.new(options[:waitforcert], options[:onetime]).read_retrieve
-    client.recycle_connection
-end
-
-objects = []
-
-# This has to go after the certs are dealt with.
-if Puppet[:listen] and ! options[:onetime]
-    unless FileTest.exists?(Puppet[:authconfig])
-        Puppet.err "Will not start without authorization file %s" %
-            Puppet[:authconfig]
-        exit(14)
-    end
-
-    # FIXME: we should really figure out how to distribute the CRL
-    # to clients. In the meantime, we just disable CRL checking if
-    # the CRL file doesn't exist
-    unless File::exist?(Puppet[:cacrl])
-        Puppet[:cacrl] = 'false' 
-    end
-
-    handlers = nil
-
-    if options[:serve].empty?
-        handlers = {:Runner => {}}
-    else
-        handlers = options[:serve]
-    end
-
-    handlers.each do |name, hash|
-        Puppet.info "Starting handler for %s" % name
-    end
-
-    args[:Handlers] = handlers
-    args[:Port] = Puppet[:puppetport]
-
-    require 'puppet/network/http_server/webrick'
-
-    begin
-        server = Puppet::Network::HTTPServer::WEBrick.new(args)
-    rescue => detail
-        $stderr.puts detail
-        puts detail.backtrace
-        exit(1)
-    end
-
-    objects << server
-elsif options[:onetime] and Puppet[:listen]
-    Puppet.notice "Ignoring --listen on onetime run"
-end
-
-if options[:client]
-    objects << client
-end
-
-# Set traps for INT and TERM
-Puppet.settraps
-
-# If --onetime is specified, we don't run 'start', which means we don't
-# create a pidfile.
-if options[:onetime]
-    unless options[:client]
-        $stderr.puts "onetime is specified but there is no client"
-        exit(43)
-    end
-
-    # Add the service, so the traps work correctly.
-    Puppet.newservice(client)
-
-    begin
-        client.run
-    rescue => detail
-        if Puppet[:trace]
-            puts detail.backtrace
-        end
-        Puppet.err detail.to_s
-    end
-    exit(0)
-else
-    if server
-        Puppet.newservice(server)
-    end
-
-    if options[:client]
-        Puppet.notice "Starting Puppet client version %s" % [Puppet.version]
-        Puppet.newservice(client)
-    end
-
-    Puppet.settraps
-
-    Puppet.start
-end
-
diff --git a/bin/puppetdoc b/bin/puppetdoc
deleted file mode 100755
index 82e4c07..0000000
--- a/bin/puppetdoc
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/usr/bin/env ruby
-
-#
-# = Synopsis
-#
-# Generate a reference for all Puppet types.  Largely meant for internal Reductive
-# Labs use.
-#
-# = Usage
-#
-#   puppetdoc [-a|--all] [-h|--help] [-m|--mode <text|pdf|trac> [-r|--reference <[type]|configuration|..>]
-#
-# = Description
-#
-# This command generates a restructured-text document describing all installed
-# Puppet types or all allowable arguments to puppet executables.  It is largely
-# meant for internal use and is used to generate the reference document
-# available on the Reductive Labs web site.
-#
-# = Options
-#
-# all::
-#   Output the docs for all of the reference types.
-#
-# help::
-#   Print this help message
-#
-# mode::
-#   Determine the output mode.  Valid modes are 'text', 'trac', and 'pdf'.  Note that 'trac' mode only works on Reductive Labs servers.  The default mode is 'text'.
-#
-# reference::
-#   Build a particular reference.  Get a list of references by running +puppetdoc --list+.
-#
-# = Example
-#
-#   $ puppetdoc -r type > /tmp/type_reference.rst
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005-2007 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-require 'puppet'
-require 'puppet/util/reference'
-require 'puppet/network/handler'
-require 'getoptlong'
-
-result = GetoptLong.new(
-	[ "--all",	"-a",			GetoptLong::NO_ARGUMENT ],
-	[ "--list",	"-l",			GetoptLong::NO_ARGUMENT ],
-	[ "--format",	"-f",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--mode",	"-m",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--reference",	"-r",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--help",		"-h",			GetoptLong::NO_ARGUMENT ]
-)
-
-debug = false
-
-$tab = "    "
-options = {:references => [], :mode => :text, :format => :to_rest}
-
-Reference = Puppet::Util::Reference
-
-begin
-    result.each { |opt,arg|
-        case opt
-        when "--all"
-            options[:all] = true
-        when "--format"
-            method = "to_%s" % arg
-            if Reference.method_defined?(method)
-                options[:format] = method
-            else
-                raise "Invalid output format %s" % arg
-            end
-        when "--mode"
-            if Reference.modes.include?(arg)
-                options[:mode] = arg.intern
-            else
-                raise "Invalid output mode %s" % arg
-            end
-        when "--list"
-            puts Reference.references.collect { |r| Reference.reference(r).doc }.join("\n")
-            exit(0)
-        when "--reference"
-            options[:references] << arg.intern
-        when "--help"
-            if Puppet.features.usage?
-                RDoc::usage && exit
-            else
-                puts "No help available unless you have RDoc::usage installed"
-                exit
-            end
-        end
-    }
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts "Try '#{$0} --help'"
-    exit(1)
-end
-
-if options[:all]
-    # Don't add dynamic references to the "all" list.
-    options[:references] = Reference.references.reject do |ref|
-        Reference.reference(ref).dynamic?
-    end
-end
-
-if options[:references].empty?
-    options[:references] << :type
-end
-
-case options[:mode]
-when :trac
-    options[:references].each do |name|
-        section = Puppet::Util::Reference.reference(name) or raise "Could not find section %s" % name
-        unless options[:mode] == :pdf
-            section.trac
-        end
-    end
-else
-    text = ""
-    if options[:references].length > 1
-        with_contents = false
-    else
-        with_contents = true
-    end
-    exit_code = 0
-    options[:references].sort { |a,b| a.to_s <=> b.to_s }.each do |name|
-        raise "Could not find reference %s" % name unless section = Puppet::Util::Reference.reference(name)
-
-        begin
-            # Add the per-section text, but with no ToC
-            text += section.send(options[:format], with_contents)
-        rescue => detail
-            puts detail.backtrace
-            $stderr.puts "Could not generate reference %s: %s" % [name, detail]
-            exit_code = 1
-            next
-        end
-    end
-
-    unless with_contents # We've only got one reference
-        text += Puppet::Util::Reference.footer
-    end
-
-    # Replace the trac links, since they're invalid everywhere else
-    text.gsub!(/`\w+\s+([^`]+)`:trac:/) { |m| $1 }
-
-    if options[:mode] == :pdf
-        Puppet::Util::Reference.pdf(text)
-    else
-        puts text
-    end
-
-    exit exit_code
-end
-
-
diff --git a/bin/puppetmasterd b/bin/puppetmasterd
deleted file mode 100755
index 03bd784..0000000
--- a/bin/puppetmasterd
+++ /dev/null
@@ -1,289 +0,0 @@
-#!/usr/bin/env ruby
-
-#
-# = Synopsis
-#
-# The central puppet server.  Functions as a certificate authority by default.
-#
-# = Usage
-#
-#   puppetmasterd [-D|--daemonize|--no-daemonize] [-d|--debug] [-h|--help]
-#       [-l|--logdest <file>|console|syslog] [--nobucket] [--nonodes]
-#       [-v|--verbose] [-V|--version]
-#
-# = Description
-#
-# This is the puppet central daemon.
-#
-# = Options
-#
-# Note that any configuration parameter that's valid in the configuration file
-# is also a valid long argument.  For example, 'ssldir' is a valid configuration
-# parameter, so you can specify '--ssldir <directory>' as an argument.
-#
-# See the configuration file documentation at
-# http://reductivelabs.com/projects/puppet/reference/configref.html for
-# the full list of acceptable parameters. A commented list of all
-# configuration options can also be generated by running puppetmasterdd with
-# '--genconfig'.
-#
-# daemonize::
-#   Send the process into the background.  This is the default.
-#
-# no-daemonize::
-#   Do not send the process into the background.
-#
-# debug::
-#   Enable full debugging.
-#
-# help::
-#   Print this help message.
-#
-# logdest::
-#   Where to send messages.  Choose between syslog, the console, and a log file.
-#   Defaults to sending messages to syslog, or the console
-#   if debugging or verbosity is enabled.
-#
-# nobucket::
-#   Do not function as a file bucket.
-#
-# nonodes::
-#   Do not use individual node designations; each node will receive the result
-#   of evaluating the entire configuration.
-#
-# noreports::
-#   Do not start the reports server.
-#
-# verbose::
-#   Enable verbosity.
-#
-# version::
-#   Print the puppet version number and exit.
-#
-# = Example
-#
-#   puppetmasterd
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-# Do an initial trap, so that cancels don't get a stack trace.
-trap(:INT) do
-    $stderr.puts "Cancelling startup"
-    exit(0)
-end
-
-require 'getoptlong'
-require 'puppet'
-require 'puppet/network/handler'
-require 'puppet/sslcertificates'
-
-options = [
-	[ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-	[ "--help",		"-h",			GetoptLong::NO_ARGUMENT ],
-	[ "--logdest",	"-l",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--nobucket",        			GetoptLong::NO_ARGUMENT ],
-	[ "--noreports",       			GetoptLong::NO_ARGUMENT ],
-	[ "--nonodes",         			GetoptLong::NO_ARGUMENT ],
-	[ "--verbose",	"-v",			GetoptLong::NO_ARGUMENT ],
-    [ "--version",  "-V",           GetoptLong::NO_ARGUMENT ]
-]
-
-# Add all of the config parameters as valid options.
-Puppet.settings.addargs(options)
-
-result = GetoptLong.new(*options)
-
-master = {}
-ca = {}
-report = {}
-bucket = {}
-
-options = {
-    :havereport => true,
-    :havebucket => true,
-    :havemaster => true,
-    :setdest => false,
-    :verbose => false,
-    :debug => false
-}
-
-begin
-    result.each { |opt,arg|
-        case opt
-            # First check to see if the argument is a valid configuration parameter;
-            # if so, set it. NOTE: there is a catch-all at the bottom for defaults.rb
-            when "--debug"
-                options[:debug] = true
-            when "--help"
-                if Puppet.features.usage?
-                    RDoc::usage && exit
-                else
-                    puts "No help available unless you have RDoc::usage installed"
-                    exit
-                end
-            when "--noreports"
-                options[:havereport] = false
-            when "--nomaster"
-                options[:havemaster] = false
-            when "--nobucket"
-                options[:havebucket] = false
-            when "--nonodes"
-                master[:UseNodes] = false
-            when "--logdest"
-                begin
-                    Puppet::Util::Log.newdestination(arg)
-                    options[:setdest] = true
-                rescue => detail
-                    if Puppet[:debug]
-                        puts detail.backtrace
-                    end
-                    $stderr.puts detail.to_s
-                end
-            when "--version"
-                puts "%s" % Puppet.version
-                exit
-            when "--verbose"
-                options[:verbose] = true
-            else
-                Puppet.settings.handlearg(opt, arg)
-        end
-    }
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts "Try '#{$0} --help'"
-    #$stderr.puts detail
-    exit(1)
-end
-
-# Now parse the config
-Puppet.parse_config
-
-# Handle the logging settings.
-if options[:debug] or options[:verbose]
-    if options[:debug]
-        Puppet::Util::Log.level = :debug
-    else
-        Puppet::Util::Log.level = :info
-    end
-
-    unless Puppet[:daemonize]
-        Puppet::Util::Log.newdestination(:console)
-        options[:setdest] = true
-    end
-end
-
-unless options[:setdest]
-    Puppet::Util::Log.newdestination(:syslog)
-end
-
-if Puppet.settings.print_configs?
-    exit(Puppet.settings.print_configs ? 0 : 1)
-end
-
-# A temporary solution, to at least make the master work for now.
-Puppet::Node::Facts.terminus_class = :yaml
-
-# Cache our nodes in yaml.  Currently not configurable.
-Puppet::Node.cache_class = :yaml
-
-require 'etc'
-
-handlers = {
-    :Status => {},
-    :FileServer => {}
-}
-
-if options[:havemaster]
-    handlers[:Master] = master
-end
-
-if options[:havereport]
-    handlers[:Report] = report
-end
-
-if Puppet[:ca]
-    handlers[:CA] = ca
-end
-
-if options[:havebucket]
-    handlers[:FileBucket] = bucket
-end
-
-if Puppet[:parseonly]
-    begin
-        Puppet::Network::Handler.master.new(master)
-    rescue => detail
-        if Puppet[:trace]
-            puts detail.backtrace
-        end
-        $stderr.puts detail
-        exit(32)
-    end
-    # we would have already exited if the file weren't syntactically correct
-    exit(0)
-end
-
-webserver = server = nil
-begin
-    case Puppet[:servertype]
-    when "webrick"
-        # use the default, um, everything
-        require 'puppet/network/http_server/webrick'
-        webserver = server = Puppet::Network::HTTPServer::WEBrick.new(:Handlers => handlers)
-    when "mongrel":
-        require 'puppet/network/http_server/mongrel'
-        server = Puppet::Network::HTTPServer::Mongrel.new(handlers)
-        addr = Puppet[:bindaddress]
-        if addr == ""
-            addr =  "127.0.0.1"
-        end
-        webserver = Mongrel::HttpServer.new(addr, Puppet[:masterport])
-        webserver.register("/", server)
-    else
-        Puppet.err "Invalid server type %s" % Puppet[:servertype]
-        exit(45)
-    end
-rescue => detail
-    if Puppet[:trace]
-        puts detail.backtrace
-    end
-    $stderr.puts detail
-    exit(1)
-end
-
-if Process.uid == 0
-    begin
-        Puppet::Util.chuser
-    rescue => detail
-        if Puppet[:debug]
-            puts detail.backtrace
-        end
-        $stderr.puts "Could not change user to %s: %s" % [Puppet[:user], detail]
-        exit(39)
-    end
-end
-
-# Mongrel doesn't shut down like webrick; we really need to write plugins for it.
-if Puppet[:servertype] == "webrick"
-    Puppet.newservice(server)
-end
-Puppet.settraps
-
-if Puppet[:daemonize]
-    server.daemonize
-end
-
-Puppet.notice "Starting Puppet server version %s" % [Puppet.version]
-case Puppet[:servertype]
-when "webrick"
-    Puppet.start
-when "mongrel":
-    webserver.run.join
-end
-
diff --git a/bin/puppetrun b/bin/puppetrun
deleted file mode 100755
index 28f72d9..0000000
--- a/bin/puppetrun
+++ /dev/null
@@ -1,369 +0,0 @@
-#!/usr/bin/env ruby
-
-#
-# = Synopsis
-#
-# Trigger a puppetd run on a set of hosts.
-#
-# = Usage
-#
-#   puppetrun [-a|--all] [-c|--class <class>] [-d|--debug] [-f|--foreground]
-#       [-h|--help] [--host <host>] [--no-fqdn] [--ignoreschedules]
-#       [-t|--tag <tag>] [--test] [-p|--ping]
-#
-# = Description
-#
-# This script can be used to connect to a set of machines running +puppetd+
-# and trigger them to run their configurations.  The most common usage would
-# be to specify a class of hosts and a set of tags, and +puppetrun+ would
-# look up in LDAP all of the hosts matching that class, then connect to
-# each host and trigger a run of all of the objects with the specified tags.
-#
-# If you are not storing your host configurations in LDAP, you can specify
-# hosts manually.
-#
-# You will most likely have to run +puppetrun+ as root to get access to
-# the SSL certificates.
-#
-# +puppetrun+ reads +puppetmaster+'s configuration file, so that it can copy
-# things like LDAP settings.
-#
-# = Usage Notes
-#
-# +puppetrun+ is useless unless +puppetd+ is listening.  See its documentation
-# for more information, but the gist is that you must enable +listen+ on the
-# +puppetd+ daemon, either using +--listen+ on the command line or adding
-# 'listen: true' in its config file.  In addition, you need to set the daemons
-# up to specifically allow connections by creating the +namespaceauth+ file,
-# normally at '/etc/puppet/namespaceauth.conf'.  This file specifies who has
-# access to each namespace; if you create the file you must add every namespace
-# you want any Puppet daemon to allow -- it is currently global to all Puppet
-# daemons.
-#
-# An example file looks like this::
-#
-#     [fileserver]
-#         allow *.madstop.com
-# 
-#     [puppetmaster]
-#         allow *.madstop.com
-# 
-#     [puppetrunner]
-#         allow culain.madstop.com
-#
-# This is what you would install on your Puppet master; non-master hosts could
-# leave off the 'fileserver' and 'puppetmaster' namespaces.
-#
-# Expect more documentation on this eventually.
-#
-# = Options
-#
-# Note that any configuration parameter that's valid in the configuration file
-# is also a valid long argument.  For example, 'ssldir' is a valid configuration
-# parameter, so you can specify '--ssldir <directory>' as an argument.
-#
-# See the configuration file documentation at
-# http://reductivelabs.com/projects/puppet/reference/configref.html for
-# the full list of acceptable parameters. A commented list of all
-# configuration options can also be generated by running puppetmasterdd with
-# '--genconfig'.
-#
-#
-# all::
-#   Connect to all available hosts.  Requires LDAP support at this point.
-#
-# class::
-#   Specify a class of machines to which to connect.  This only works if you
-#   have LDAP configured, at the moment.
-#
-# debug::
-#   Enable full debugging.
-#
-# foreground::
-#   Run each configuration in the foreground; that is, when connecting to a host,
-#   do not return until the host has finished its run.  The default is false.
-#
-# help::
-#   Print this help message
-#
-# host::
-#   A specific host to which to connect.  This flag can be specified more
-#   than once.
-#
-# ignoreschedules::
-#   Whether the client should ignore schedules when running its configuration.
-#   This can be used to force the client to perform work it would not normally
-#   perform so soon.  The default is false.
-#
-# parallel::
-#   How parallel to make the connections.  Parallelization is provided by forking
-#   for each client to which to connect.  The default is 1, meaning serial execution.
-#
-# tag::
-#   Specify a tag for selecting the objects to apply. Does not work with the
-#   --test option.
-#
-#
-# test::
-#   Print the hosts you would connect to but do not actually connect. This
-#   option requires LDAP support at this point.
-#
-# ping::
-#   
-#   Do a ICMP echo against the target host. Skip hosts that don't respond to ping.
-#
-# = Example
-#
-#   sudo puppetrun -p 10 --host host1 --host host2 -t remotefile -t webserver
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-[:INT, :TERM].each do |signal|
-    trap(signal) do
-        $stderr.puts "Cancelling"
-        exit(1)
-    end
-end
-
-begin
-    require 'rubygems'
-rescue LoadError
-    # Nothing; we were just doing this just in case
-end
-
-begin
-    require 'ldap'
-rescue LoadError
-    $stderr.puts "Failed to load ruby LDAP library. LDAP functionality will not be available"
-end
-
-require 'puppet'
-require 'puppet/network/client'
-require 'puppet/util/ldap/connection'
-require 'getoptlong'
-
-flags = [
-    [ "--all",      "-a",	        GetoptLong::NO_ARGUMENT ],
-    [ "--tag",      "-t",           GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--class",	"-c",			GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--foreground", "-f",	        GetoptLong::NO_ARGUMENT ],
-    [ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-    [ "--help",		"-h",			GetoptLong::NO_ARGUMENT ],
-    [ "--host",         			GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--parallel", "-p",			GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--ping", "-P",			GetoptLong::NO_ARGUMENT ],
-    [ "--no-fqdn",  "-n",			GetoptLong::NO_ARGUMENT ],
-    [ "--test",                     GetoptLong::NO_ARGUMENT ],
-    [ "--version",  "-V",           GetoptLong::NO_ARGUMENT ]
-]
-
-# Add all of the config parameters as valid options.
-Puppet.settings.addargs(flags)
-
-result = GetoptLong.new(*flags)
-
-options = {
-    :ignoreschedules => false,
-    :foreground => false,
-    :parallel => 1,
-    :ping => false,
-    :debug => false,
-    :test => false,
-    :all => false,
-    :verbose => true,
-    :fqdn => true
-}
-
-hosts = []
-classes = []
-tags = []
-
-Puppet::Util::Log.newdestination(:console)
-
-begin
-    result.each { |opt,arg|
-        case opt
-            when "--version"
-                puts "%s" % Puppet.version
-                exit
-            when "--ignoreschedules"
-                options[:ignoreschedules] = true
-            when "--no-fqdn"
-                options[:fqdn] = false
-            when "--all"
-                options[:all] = true
-            when "--test"
-                options[:test] = true
-            when "--tag"
-                tags << arg
-            when "--class"
-                classes << arg
-            when "--host"
-                hosts << arg
-            when "--help"
-                if Puppet.features.usage?
-                    RDoc::usage && exit
-                else
-                    puts "No help available unless you have RDoc::usage installed"
-                    exit
-                end
-            when "--parallel"
-                begin
-                    options[:parallel] = Integer(arg)
-                rescue
-                    $stderr.puts "Could not convert %s to an integer" % arg.inspect
-                    exit(23)
-                end
-            when "--ping"
-                 options[:ping] = true 
-            when "--foreground"
-                options[:foreground] = true
-            when "--debug"
-                options[:debug] = true
-            else
-                Puppet.settings.handlearg(opt, arg)
-        end
-    }
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts "Try '#{$0} --help'"
-    exit(1)
-end
-
-if options[:debug]
-    Puppet::Util::Log.level = :debug
-else
-    Puppet::Util::Log.level = :info
-end
-
-# Now parse the config
-Puppet.parse_config
-
-if Puppet[:node_terminus] == "ldap" and (options[:all] or classes)
-    if options[:all]
-        hosts = Puppet::Node.search("whatever").collect { |node| node.name }
-        puts "all: %s" % hosts.join(", ")
-    else
-        hosts = []
-        classes.each do |klass|
-            list = Puppet::Node.search("whatever", :class => klass).collect { |node| node.name }
-            puts "%s: %s" % [klass, list.join(", ")]
-
-            hosts += list
-        end
-    end
-elsif ! classes.empty?
-    $stderr.puts "You must be using LDAP to specify host classes"
-    exit(24)
-end
-
-if tags.empty?
-    tags = ""
-else
-    tags = tags.join(",")
-end
-
-children = {}
-
-# If we get a signal, then kill all of our children and get out.
-[:INT, :TERM].each do |signal|
-    trap(signal) do
-        Puppet.notice "Caught #{signal}; shutting down"
-        children.each do |pid, host|
-            Process.kill("INT", pid)
-        end
-
-        waitall
-
-        exit(1)
-    end
-end
-
-if options[:test]
-    puts "Skipping execution in test mode"
-    exit(0)
-end
-
-todo = hosts.dup
-
-failures = []
-
-# Now do the actual work
-go = true
-while go
-    # If we don't have enough children in process and we still have hosts left to
-    # do, then do the next host.
-    if children.length < options[:parallel] and ! todo.empty?
-        host = todo.shift
-        pid = fork do
-            if options[:ping]
-              out = %x{ping -c 1 #{host}}
-              unless $? == 0
-                  $stderr.print "Could not contact %s\n" % host
-                  next
-              end
-            end
-            client = Puppet::Network::Client.runner.new(
-                :Server => host,
-                :Port => Puppet[:puppetport]
-            )
-
-            print "Triggering %s\n" % host
-            begin
-                result = client.run(tags, options[:ignoreschedules], options[:foreground])
-            rescue => detail
-                $stderr.puts "Host %s failed: %s\n" % [host, detail]
-                exit(2)
-            end
-            
-            case result
-            when "success": exit(0)
-            when "running":
-                $stderr.puts "Host %s is already running" % host
-                exit(3)
-            else
-                $stderr.puts "Host %s returned unknown answer '%s'" % [host, result]
-                exit(12)
-            end
-        end
-        children[pid] = host
-    else
-        # Else, see if we can reap a process.
-        begin
-            pid = Process.wait
-
-            if host = children[pid]
-                # Remove our host from the list of children, so the parallelization
-                # continues working.
-                children.delete(pid)
-                if $?.exitstatus != 0
-                    failures << host
-                end
-                print "%s finished with exit code %s\n" % [host, $?.exitstatus]
-            else
-                $stderr.puts "Could not find host for PID %s with status %s" %
-                    [pid, $?.exitstatus]
-            end
-        rescue Errno::ECHILD
-            # There are no children left, so just exit unless there are still
-            # children left to do.
-            next unless todo.empty?
-
-            if failures.empty?
-                puts "Finished"
-                exit(0)
-            else
-                puts "Failed: %s" % failures.join(", ")
-                exit(3)
-            end
-        end
-    end
-end
-
-
diff --git a/bin/ralsh b/bin/ralsh
deleted file mode 100755
index 3cbfcad..0000000
--- a/bin/ralsh
+++ /dev/null
@@ -1,270 +0,0 @@
-#!/usr/bin/env ruby
-# vim: softtabstop=4 shiftwidth=4 expandtab
-#
-# = Synopsis
-#
-# Use the Puppet RAL to directly interact with the system.
-#
-# = Usage
-#
-#   ralsh [-h|--help] [-d|--debug] [-v|--verbose] [-e|--edit] [-H|--host <host>]
-#           [-p|--param <param>] [-t|--types] type <name>
-#
-# = Description
-#
-# This command provides simple facilities for converting current system state
-# into Puppet code, along with some ability to use Puppet to affect the current
-# state.
-#
-# By default, you must at least provide a type to list, which case ralsh
-# will tell you everything it knows about all instances of that type.  You can
-# optionally specify an instance name, and ralsh will only describe that single
-# instance.
-#
-# You can also add +--edit+ as an argument, and ralsh will write its output
-# to a file, open that file in an editor, and then apply the file as a Puppet
-# transaction.  You can easily use this to use Puppet to make simple changes to
-# a system.
-#
-# = Options
-#
-# Note that any configuration parameter that's valid in the configuration file
-# is also a valid long argument.  For example, 'ssldir' is a valid configuration
-# parameter, so you can specify '--ssldir <directory>' as an argument.
-#
-# See the configuration file documentation at
-# http://reductivelabs.com/projects/puppet/reference/configref.html for
-# the full list of acceptable parameters. A commented list of all
-# configuration options can also be generated by running puppet with
-# '--genconfig'.
-#
-# debug::
-#   Enable full debugging.
-#
-# edit:
-#   Write the results of the query to a file, open the file in an editor,
-#   and read the file back in as an executable Puppet manifest.
-#
-# host:
-#   When specified, connect to the resource server on the named host
-#   and retrieve the list of resouces of the type specified.
-#
-# help:
-#   Print this help message.
-#
-# param:
-#   Add more parameters to be outputted from queries.
-#
-# types:
-#   List all available types.
-#
-# verbose::
-#   Print extra information.
-#
-# = Example
-#
-# This example uses ``ralsh`` to return Puppet configuration for the user ``luke``::
-#   
-#    $ ralsh user luke
-#    user { 'luke':
-#      home => '/home/luke',
-#      uid => '100',
-#      ensure => 'present',
-#      comment => 'Luke Kanies,,,',
-#      gid => '1000',
-#      shell => '/bin/bash',
-#      groups => ['sysadmin','audio','video','puppet']
-#    }
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005-2007 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-
-require 'getoptlong'
-require 'puppet'
-
-options = [
-    [ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-    [ "--verbose",  "-v",			GetoptLong::NO_ARGUMENT ],
-    [ "--types",    "-t",                   GetoptLong::NO_ARGUMENT ],
-    [ "--param",    "-p",                   GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--host",     "-H",                   GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--edit",             "-e",                   GetoptLong::NO_ARGUMENT ],
-    [ "--help",             "-h",                   GetoptLong::NO_ARGUMENT ]
-]
-
-# Add all of the config parameters as valid options.
-Puppet.settings.addargs(options)
-
-result = GetoptLong.new(*options)
-
-debug = false
-verbose = false
-edit = false
-extra_params = []
-host = nil
-
-result.each { |opt,arg|
-    case opt
-    when "--host"
-        host = arg
-    when "--types"
-        types = []
-        Puppet::Type.loadall
-        Puppet::Type.eachtype do |t|
-            next if t.name == :component
-            types << t.name.to_s
-        end
-        puts types.sort
-        exit
-    when "--param"
-        extra_params << arg.to_sym
-    when "--edit"
-        edit = true
-    when "--help"
-        if Puppet.features.usage?
-            RDoc::usage
-        else
-            puts "install RDoc:usage for help"
-        end
-        exit
-    when "--verbose"
-        verbose = true
-    when "--debug"
-        debug = true
-    else
-        # Anything else is handled by the config stuff
-        Puppet.settings.handlearg(opt, arg)
-    end
-}
-
-Puppet::Util::Log.newdestination(:console)
-
-# Now parse the config
-Puppet.parse_config
-
-if debug
-    Puppet::Util::Log.level = :debug
-elsif verbose
-    Puppet::Util::Log.level = :info
-end
-
-
-if ARGV.length > 0
-    type = ARGV.shift
-else
-    raise "You must specify the type to display"
-end
-
-name = nil
-params = {}
-if ARGV.length > 0
-    name = ARGV.shift
-end
-
-if ARGV.length > 0
-    ARGV.each do |setting|
-        if setting =~ /^(\w+)=(.+)$/
-            params[$1] = $2
-        else
-            raise "Invalid parameter setting %s" % setting
-        end
-    end
-end
-
-if edit and host
-    raise "You cannot edit a remote host"
-end
-
-typeobj = nil
-
-unless typeobj = Puppet::Type.type(type)
-    raise "Could not find type %s" % type
-end
-
-properties = typeobj.properties.collect { |s| s.name }
-
-format = proc {|trans|
-    trans.dup.collect do |param, value|
-        if value == "" or value == []
-            trans.delete(param)
-        end
-
-        unless properties.include?(param) or extra_params.include?(param)
-            trans.delete(param)
-        end
-    end
-    trans.to_manifest
-}
-
-text = if host
-    client = Puppet::Network::Client.resource.new(:Server => host, :Port => Puppet[:puppetport])
-    unless client.read_cert
-        raise "client.read_cert failed"
-    end
-    begin
-        # They asked for a single resource.
-        if name
-            transbucket = [client.describe(type, name)]
-        else
-            # Else, list the whole thing out.
-            transbucket = client.instances(type)
-        end
-    rescue Puppet::Network::XMLRPCClientError => exc
-        raise "client.list(#{type}) failed: #{exc.message}"
-    end
-    transbucket.sort { |a,b| a.name <=> b.name }.collect(&format)
-else
-    if name
-        obj = typeobj.create(:name => name, :check => properties)
-        vals = obj.retrieve
-
-        unless params.empty?
-            params.each do |param, value|
-                obj[param] = value
-            end
-            catalog = Puppet::Node::Catalog.new
-            catalog.add_resource obj
-            begin
-                catalog.apply
-            rescue => detail
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-            end
-
-        end
-        [format.call(obj.to_trans(true))]
-    else
-        typeobj.instances.collect do |obj|
-            next if ARGV.length > 0 and ! ARGV.include? obj.name
-            trans = obj.to_trans(true)
-            format.call(trans)
-        end
-    end
-end.compact.join("\n")
-
-if edit
-    file = "/tmp/x2puppet-#{Process.pid}.pp"
-    begin
-        File.open(file, "w") do |f|
-            f.puts text
-        end
-        ENV["EDITOR"] ||= "vi"
-        system(ENV["EDITOR"], file)
-        system("puppet -v " + file)
-    ensure
-        #if FileTest.exists? file
-        #    File.unlink(file)
-        #end
-    end
-else
-    puts text
-end
-
diff --git a/conf/debian/README.source b/conf/debian/README.source
deleted file mode 100644
index fd91552..0000000
--- a/conf/debian/README.source
+++ /dev/null
@@ -1,2 +0,0 @@
-The debian directory is now maintained on Alioth in git. 
-See http://pkg-puppet.alioth.debian.org/ for more information.
diff --git a/conf/debian/TODO.Debian b/conf/debian/TODO.Debian
deleted file mode 100644
index ac70b97..0000000
--- a/conf/debian/TODO.Debian
+++ /dev/null
@@ -1 +0,0 @@
-* clean up initscripts per http://mail.madstop.com/pipermail/puppet-dev/2006-June/001069.html
diff --git a/conf/debian/changelog b/conf/debian/changelog
deleted file mode 100644
index 69984d6..0000000
--- a/conf/debian/changelog
+++ /dev/null
@@ -1,257 +0,0 @@
-puppet (0.24.1-2) unstable; urgency=low
-
-  * Set rundir correctly (Closes: #460203, #459579)
-  * Apply patch for puppet#1003 to enable collection of tagged resources
-
- -- Thom May <thom at debian.org>  Wed, 16 Jan 2008 11:08:55 +0100
-
-puppet (0.24.1-1) unstable; urgency=low
-
-  * New upstream release (Closes: #445626)
-  * Set maintainer to pkg-puppet-devel
-
- -- Thom May <thom at debian.org>  Sun, 30 Dec 2007 19:13:47 +0100
-
-puppet (0.24.0-1) unstable; urgency=low
-
-  * New upstream release
-
- -- Thom May <thom at debian.org>  Wed, 19 Dec 2007 16:00:34 +0100
-
-puppet (0.23.2-15) unstable; urgency=low
-
-  * No change upload setting maintainer to me whilst waiting for an alioth
-    project.
-
- -- Thom May <thom at debian.org>  Thu, 29 Nov 2007 10:44:50 +0100
-
-puppet (0.23.2-14) unstable; urgency=low
-
-  * Orphaning.
-  * Create /var/lib/puppet in the puppet package.  Closes: #452506.
-  * Start the puppet init script after puppetmaster, to silence whiny bug
-    reports.  Closes: #452064.
-  * Add a reload command to the Puppet init script.  Closes: #452060.
-
- -- Matthew Palmer <mpalmer at debian.org>  Thu, 29 Nov 2007 10:48:21 +1100
-
-puppet (0.23.2-13) unstable; urgency=low
-
-  * Drop quotes from an already-quoted value in a query.  Closes: #448179.
-  * Remove excessive quoting from puppet/network/handler/master.rb.
-    Closes: #448221.
-  * Force removal of directories during pluginsync.  Closes: #448180.
-
- -- Matthew Palmer <mpalmer at debian.org>  Tue, 30 Oct 2007 14:55:19 +1100
-
-puppet (0.23.2-12) unstable; urgency=low
-
-  * Create /var/run/puppet and set the perms in the various initscripts, as
-    well as hardcoding the rundir better in configuration.rb and removing
-    the explicit rundir setting from puppet.conf.  Closes: #447314.
-  * Apply additional patch given (backwards) to fix export/collect on some
-    database backends.  Closes: #445591 (again!)
-
- -- Matthew Palmer <mpalmer at debian.org>  Sat, 20 Oct 2007 11:28:50 +1000
-
-puppet (0.23.2-11) unstable; urgency=low
-
-  * Apply patch from puppet#786 to fix a problem with exported resources not
-    being properly detected as needing a rerun.  Closes: #445591.
-  * Fix ignore handling for the plugins mount.  Closes: #446390.
-
- -- Matthew Palmer <mpalmer at debian.org>  Mon, 15 Oct 2007 09:11:25 +1000
-
-puppet (0.23.2-10) unstable; urgency=low
-
-  * Recycle connections when we change (or get) certs.
-  * Catch and retry more transient errors in the XMLRPC wrapper.
-
- -- Matthew Palmer <mpalmer at debian.org>  Thu, 27 Sep 2007 15:06:11 +1000
-
-puppet (0.23.2-9) unstable; urgency=low
-
-  * Recycle the HTTP connection if we get an EPIPE during a request. 
-    Closes: #444177.  Thanks to Jos Backus for helping with testing.
-
- -- Matthew Palmer <mpalmer at debian.org>  Thu, 27 Sep 2007 09:55:34 +1000
-
-puppet (0.23.2-8) unstable; urgency=low
-
-  * Remove extraneous debugging output accidentally left behind in the last
-    release.
-  * Fix spelling mistakes in debian/control and debian/puppet.preinst. 
-    Closes: #444158.
-
- -- Matthew Palmer <mpalmer at debian.org>  Thu, 27 Sep 2007 07:45:07 +1000
-
-puppet (0.23.2-7) unstable; urgency=low
-
-  * Ignore ENOENT errors in the module plugin syncing code, since they're
-    innocuous and expected.
-  * Allow facts that are downloaded through pluginsync to be used like any
-    other fact.
-  * Allow users to still have an old-style plugins mount if they want, by
-    specifying a path for the mount.  Also track down a fault in old-style
-    fileserving which did strange slash-stripping.  Closes: #443932.
-
- -- Matthew Palmer <mpalmer at debian.org>  Tue, 25 Sep 2007 16:41:32 +1000
-
-puppet (0.23.2-6) unstable; urgency=low
-
-  * Patch rails/param_name.rb to stop query failures, as per puppet#784.
-  * Actually honour namevar.
-  * Only set dbuser if explicitly asked for.
-  * Fix annoying database deletion error for ParamValue objects.
-  * Add an accessor for ca_file, since older openssl-ruby only had a writer.
-  * Fix the fileserver to honour ignore.  Thanks to Nathan Ward for the
-    bug report on IRC.
-
- -- Matthew Palmer <mpalmer at debian.org>  Thu, 20 Sep 2007 16:10:41 +1000
-
-puppet (0.23.2-5) unstable; urgency=low
-
-  * Add some NEWS for the ssldir transition.  Should have done that earlier.
-  * Remove the explicit mode change for vardir, and fix up the mode on
-    statedir, as well.  Closes: #425496.
-  * Only set some database parameters if they're explicitly set; this makes
-    life easier for PgSQL ident auth.
-  * Allow empty config options.
-
- -- Matthew Palmer <mpalmer at debian.org>  Thu, 13 Sep 2007 11:09:59 +1000
-
-puppet (0.23.2-4) unstable; urgency=low
-
-  * Fix puppet#776 in a slightly better way by only flushing the cache when
-    a value is changed, rather than whenever a value is read.
-  * Apply patch from puppet#755 to cache connections to the Puppetmaster,
-    which improves performance by more than a little.
-  * Modify the fileserver so that it provides a 'plugins' mount which
-    exports the union of the plugins directory of all modules.
-
- -- Matthew Palmer <mpalmer at debian.org>  Fri, 31 Aug 2007 15:32:04 +1000
-
-puppet (0.23.2-3) unstable; urgency=low
-
-  * Clear the config value cache every time.  This is a titchy little
-    performance hit, but it works around puppet#776 rather nicely.
-
- -- Matthew Palmer <mpalmer at debian.org>  Fri, 24 Aug 2007 16:08:04 +1000
-
-puppet (0.23.2-2) unstable; urgency=low
-
-  * Move the SSL state directory to a more policy-friendly location,
-    /var/lib/puppet/ssl.
-
- -- Matthew Palmer <mpalmer at debian.org>  Tue, 21 Aug 2007 12:54:40 +1000
-
-puppet (0.23.2-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Matthew Palmer <mpalmer at debian.org>  Tue,  7 Aug 2007 12:47:49 +1000
-
-puppet (0.23.1-1) unstable; urgency=low
-
-  * New upstream release.
-  * Switch primary maintainer to me.  Thanks jaq.
-  * Make the recommendation for rails >= 1.2.3-2, to avoid
-    incompatibilities.  This breaks compatibility with stable, but the rails
-    package from unstable should install cleanly in stable.  Closes: #433999
-
- -- Matthew Palmer <mpalmer at debian.org>  Sat, 21 Jul 2007 16:34:36 +1000
-
-puppet (0.23.0-1) unstable; urgency=low
-
-  * New upstream release.
-    - Includes a new configuration file handling system; see NEWS.Debian.
-
- -- Matthew Palmer <mpalmer at debian.org>  Mon, 25 Jun 2007 09:55:12 +1000
-
-puppet (0.22.4-2) unstable; urgency=low
-
-  * Depend on libshadow-ruby1.8, for new password modification functionality
-    added to upstream 0.22.4.
-  * Several improvements from Micah Anderson:
-    - Better vim syntax installation process.
-    - Install Emacs syntax highlighting.
-    - Install logcheck rules.  Closes: #421851.
-
- -- Matthew Palmer <mpalmer at debian.org>  Thu,  3 May 2007 15:04:15 +1000
-
-puppet (0.22.4-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Matthew Palmer <mpalmer at debian.org>  Wed,  2 May 2007 12:20:15 +1000
-
-puppet (0.22.3-1) unstable; urgency=low
-
-  * New upstream release.  Closes: #415773.
-  * Switch to using our own logrotate config, and enhance it as per
-    David Schmitt's suggestions.  Closes: #414282.
-  * Add puppetrun to the puppetmaster package, and actually put puppetdoc
-    into the puppet package.  Closes: #419273.
-  * Copy vim syntax highlighting file into the puppet package, and add a
-    stanza to have Vim automatically highlight .pp files.  Closes: #412868.
-    Thanks to David Schmitt for researching how to do all of that.
-  * Add a templatedir setting to the default puppetmasterd.conf to make it
-    obvious that it can be changed.  Closes: #407506.
-
- -- Matthew Palmer <mpalmer at debian.org>  Wed, 18 Apr 2007 14:03:33 +1000
-
-puppet (0.22.1-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Matthew Palmer <mpalmer at debian.org>  Fri,  2 Feb 2007 09:06:46 +1100
-
-puppet (0.22.0-1) unstable; urgency=low
-
-  * New upstream release.
-  * Use --startas instead of --init in init scripts, which (according to
-    Paul Hampson) makes checking for already-running instances work.
-    Closes: #405912.
-
- -- Matthew Palmer <mpalmer at debian.org>  Mon,  8 Jan 2007 08:41:35 +1100
-
-puppet (0.20.1-1) unstable; urgency=low
-
-  * New upstream release.  (Closes: #387674)
-  * Rationalise the puppetmasterd init script.
-  * Add inclusion of /etc/default files for init scripts.  (Closes: #388178)
-  * Add puppet.conf to match puppetd.conf.  (Closes: #385646)
-
- -- Matthew Palmer <mpalmer at debian.org>  Thu, 30 Nov 2006 10:54:19 +1100
-
-puppet (0.18.4-1) unstable; urgency=low
-
-  * New upstream release.
-    - Properly detect all services, including those in rcS.d.
-      (Closes: #378351)
-  * Add Homepage: to the long description.  (Closes: #377896)
-  
- -- Matthew Palmer <mpalmer at debian.org>  Mon, 24 Jul 2006 19:46:06 +1000
-
-puppet (0.18.3-1) unstable; urgency=low
-
-  * New upstream version.
-    - Set DEBIAN_FRONTEND=noninteractive when installing Debian packages.
-      (Closes: #378338)
-
- -- Matthew Palmer <mpalmer at debian.org>  Sun, 16 Jul 2006 10:58:50 +1000
-
-puppet (0.18.1-1) unstable; urgency=low
-
-  * Make Puppet not wait for a cert at all (to prevent startup hangs).
-  * Cleanup the init scripts to not have NO_START detritus.
-  * Apply puppet.debian-frontend, to set DEBIAN_FRONTEND=noninteractive on
-    package installation.
-
- -- Matthew Palmer <mpalmer at debian.org>  Tue, 27 Jun 2006 15:05:32 +1000
-
-puppet (0.18.0-1) unstable; urgency=low
-
-  * Initial release.  (Closes: #348625)
-
- -- Matthew Palmer <mpalmer at debian.org>  Wed, 24 May 2006 13:10:01 +1000
diff --git a/conf/debian/compat b/conf/debian/compat
deleted file mode 100644
index b8626c4..0000000
--- a/conf/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-4
diff --git a/conf/debian/control b/conf/debian/control
deleted file mode 100644
index 8b0e92e..0000000
--- a/conf/debian/control
+++ /dev/null
@@ -1,45 +0,0 @@
-Source: puppet
-Section: admin
-Priority: optional
-Maintainer: Puppet Package Maintainers <pkg-puppet-devel at lists.alioth.debian.org>
-Uploaders: Thom May <thom at debian.org>
-Build-Depends-Indep: debhelper (>= 4.0.0), ruby (>= 1.8.1)
-Standards-Version: 3.6.2
-
-Package: puppet
-Architecture: all
-Depends: ruby (>= 1.8.1), libxmlrpc-ruby, libopenssl-ruby, libshadow-ruby1.8, adduser, facter, lsb-base
-Recommends: rdoc
-Description: centralised configuration management for networks
- Puppet lets you centrally manage every important aspect of your system
- using a cross-platform specification language that manages all the
- separate elements normally aggregated in different files, like users,
- cron jobs, and hosts, along with obviously discrete elements like
- packages, services, and files.
- .
- Puppet's simple declarative specification language provides powerful
- classing abilities for drawing out the similarities between hosts while
- allowing them to be as specific as necessary, and it handles dependency
- and prerequisite relationships between objects clearly and explicitly.
- .
- Homepage: http://reductivelabs.com/projects/puppet
-
-Package: puppetmaster
-Architecture: all
-Depends: ruby (>= 1.8.1), puppet (= ${Source-Version}), facter, lsb-base
-Recommends: rails (>= 1.2.3-2), rdoc
-Description: centralised configuration management control daemon
- Puppet lets you centrally manage every important aspect of your system
- using a cross-platform specification language that manages all the
- separate elements normally aggregated in different files, like users,
- cron jobs, and hosts, along with obviously discrete elements like
- packages, services, and files.
- .
- Puppet's simple declarative specification language provides powerful
- classing abilities for drawing out the similarities between hosts while
- allowing them to be as specific as necessary, and it handles dependency
- and prerequisite relationships between objects clearly and explicitly.
- .
- This package contains the manifest server, 'puppetmaster'.
- .
- Homepage: http://reductivelabs.com/projects/puppet
diff --git a/conf/debian/copyright b/conf/debian/copyright
deleted file mode 100644
index 06bdcab..0000000
--- a/conf/debian/copyright
+++ /dev/null
@@ -1,17 +0,0 @@
-This package was debianized by Jamie Wilkinson <jaq at debian.org> on
-Thu, 27 Apr 2006 10:18:04 +1000.
-
-It was downloaded from http://reductivelabs.com/downloads/puppet
-
-Copyright Holder: Luke Kanies <luke at madstop.com>
-
-License:
-
-From
-http://reductivelabs.com/documents/faq#what-license-is-puppet-released-under:
-
-Puppet is open source and is released under the GNU Public License.
-
-On Debian systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-licenses/GPL'.
-
diff --git a/conf/debian/docs b/conf/debian/docs
deleted file mode 100644
index e845566..0000000
--- a/conf/debian/docs
+++ /dev/null
@@ -1 +0,0 @@
-README
diff --git a/conf/debian/fileserver.conf b/conf/debian/fileserver.conf
deleted file mode 100644
index 04a51c0..0000000
--- a/conf/debian/fileserver.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# This file consists of arbitrarily named sections/modules
-# defining where files are served from and to whom
-
-# Define a section 'files'
-# Adapt the allow/deny settings to your needs. Order
-# for allow/deny does not matter, allow always takes precedence
-# over deny
-[files]
-  path /etc/puppet/files
-#  allow *.example.com
-#  deny *.evil.example.com
-#  allow 192.168.0.0/24
diff --git a/conf/debian/puppet.NEWS b/conf/debian/puppet.NEWS
deleted file mode 100644
index a712aaf..0000000
--- a/conf/debian/puppet.NEWS
+++ /dev/null
@@ -1,63 +0,0 @@
-puppet (0.23.2-12) unstable; urgency=low
-
-  * Handling of the rundir setting has been changed; we now store PID files
-    in /var/run/puppet, and the initscripts have been modified to ensure
-    that this directory exists on startup.  It is no longer necessary to set
-    rundir explicitly in /etc/puppet/puppet.conf, and you should ensure that
-    you have no explicit rundir setting in your puppet.conf unless you want
-    to use a custom rundir setting for your own local purposes.
-
- -- Matthew Palmer <mpalmer at debian.org>  Sat, 20 Oct 2007 11:58:58 +1000
-
-puppet (0.23.2-3) unstable; urgency=low
-
-  * This version of Puppet makes a fairly major change to the location of
-    the CA and certificates, from /etc/puppet/ssl to the more FHS-compliant
-    location /var/lib/puppet/ssl.  This is to be both policy-compliant and
-    to match the location of the ssldir in other distributions.
-    
-    If you have transitioned to using the consolidated puppet.conf config
-    file, there should be no problems.  If you are using a stock
-    puppet.conf, the change should be made for you automatically, while if
-    you've customised puppet.conf the ssldir will be left where it is and
-    you should transition to the new location manually.
-
-    The only source of problems is if you're still using per-program config
-    files (puppetd.conf, puppetmasterd.conf, etc).  I haven't been able to
-    work out a damage-free way of transitioning to the new location, so
-    things will likely break for you -- ssldir will have been moved to
-    /var/lib/puppet/ssl, but your puppet programs will use the
-    old config file (with the default ssldir of /etc/puppet/ssl.  In this
-    case, you'll likely get all sorts of certificate-related problems.
-    
-    The solution is to either switch to using puppet.conf (which is
-    necessary anyway because support for the deprecated per-program config
-    files will be going away sometime) with the new ssldir setting, or add
-    the ssldir setting to all your per-program config files (this includes
-    creating them for programs that don't already have a config file, like
-    puppetca.conf).  Then delete /etc/puppet/ssl (since it's not needed) and
-    use the existing SSL data that was moved to /var/lib/puppet/ssl.
-
- -- Matthew Palmer <mpalmer at debian.org>  Fri, 24 Aug 2007 16:08:04 +1000
-
-puppet (0.23.0-1) unstable; urgency=low
-
-  * As of upstream 0.23.0, the configuration file layout has been largely
-    revamped.  Now, instead of having one file per program, there is now
-    a single file, /etc/puppet/puppet.conf, which contains sections for
-    each program, as well as a "main" section that sets global config
-    options relevant for all programs.
-    
-    See http://reductivelabs.com/trac/puppet/wiki/ConfigurationReference for
-    more info.
-    
-    For backwards compatibility, all programs still read the per-program
-    configuration files, and will ignore the generic puppet.conf file if the
-    per-program file still exists.  To prevent accidents, you will need to
-    do the configuration change manually, by rewriting puppet.conf to match
-    your local configuration parameters and then deleting the old files.  If
-    you haven't changed any config parameters, then it should be as simple
-    as deleting puppetd.conf and puppetmasterd.conf and restarting the
-    daemons, as the configuration itself hasn't changed between versions.
-
- -- Matthew Palmer <mpalmer at debian.org>  Mon, 25 Jun 2007 10:43:53 +1000
diff --git a/conf/debian/puppet.conf b/conf/debian/puppet.conf
deleted file mode 100644
index c541c74..0000000
--- a/conf/debian/puppet.conf
+++ /dev/null
@@ -1,8 +0,0 @@
-[main]
-logdir=/var/log/puppet
-vardir=/var/lib/puppet
-ssldir=/var/lib/puppet/ssl
-rundir=/var/run/puppet
-
-[puppetmasterd]
-templatedir=/var/lib/puppet/templates
diff --git a/conf/debian/puppet.dirs b/conf/debian/puppet.dirs
deleted file mode 100644
index 9ce18f8..0000000
--- a/conf/debian/puppet.dirs
+++ /dev/null
@@ -1,7 +0,0 @@
-usr/sbin
-usr/lib/ruby/1.8
-var/log/puppet
-etc/puppet/files
-usr/share/vim/addons/ftdetect
-usr/share/vim/vim71/syntax
-var/lib/puppet
diff --git a/conf/debian/puppet.files b/conf/debian/puppet.files
deleted file mode 100644
index d92ac32..0000000
--- a/conf/debian/puppet.files
+++ /dev/null
@@ -1,6 +0,0 @@
-usr/bin/puppet
-usr/bin/puppetdoc
-usr/sbin/puppetd
-usr/lib/ruby/1.8/
-var/log/puppet
-etc/puppet/puppet.conf
diff --git a/conf/debian/puppet.init b/conf/debian/puppet.init
deleted file mode 100644
index 063f927..0000000
--- a/conf/debian/puppet.init
+++ /dev/null
@@ -1,64 +0,0 @@
-#! /bin/sh
-
-PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
-DAEMON=/usr/sbin/puppetd
-DAEMON_OPTS="-w 0"
-NAME=puppetd
-DESC="puppet configuration management tool"
-
-test -x $DAEMON || exit 0
-
-[ -r /etc/default/puppet ] && . /etc/default/puppet
-
-. /lib/lsb/init-functions
-
-reload_puppet() {
-	start-stop-daemon --stop --quiet --signal HUP --pidfile /var/run/puppet/$NAME.pid
-}
-
-start_puppet() {
-	start-stop-daemon --start --quiet --pidfile /var/run/puppet/$NAME.pid \
-		--startas $DAEMON -- $DAEMON_OPTS
-}
-
-stop_puppet() {
-	start-stop-daemon --stop --quiet --pidfile /var/run/puppet/$NAME.pid
-}
-
-if [ ! -d /var/run/puppet ]; then
-	rm -rf /var/run/puppet
-	mkdir -p /var/run/puppet
-fi
-
-chown puppet:puppet /var/run/puppet
-
-case "$1" in
-    start)
-	log_begin_msg "Starting $DESC"
-	start_puppet
-	log_end_msg 0
-	;;
-    stop)
-	log_begin_msg "Stopping $DESC"
-	stop_puppet
-	log_end_msg 0
-	;;
-    reload)
-    	log_begin_msg "Reloading $DESC"
-    	reload_puppet
-    	log_end_msg 0
-    	;;
-    restart|force-reload)
-	log_begin_msg "Restarting $DESC"
-	stop_puppet
-	sleep 1
-	start_puppet
-	log_end_msg 0
-	;;
-  *)
-	echo "Usage: $0 {start|stop|restart|force-reload|reload}" >&2
-	exit 1
-	;;
-esac
-
-exit 0
diff --git a/conf/debian/puppet.logrotate b/conf/debian/puppet.logrotate
deleted file mode 100644
index 3864e39..0000000
--- a/conf/debian/puppet.logrotate
+++ /dev/null
@@ -1,11 +0,0 @@
-/var/log/puppet/*log {
-  missingok
-  create 0644 puppet puppet
-  compress
-  rotate 4
-  
-  postrotate
-    [ -e /etc/init.d/puppetmaster ] && /etc/init.d/puppetmaster restart >/dev/null 2>&1 || true
-    [ -e /etc/init.d/puppet ] && /etc/init.d/puppet reload > /dev/null 2>&1 || true
-  endscript
-}
diff --git a/conf/debian/puppet.postinst b/conf/debian/puppet.postinst
deleted file mode 100644
index ac765ba..0000000
--- a/conf/debian/puppet.postinst
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh -e
-
-if [ "$1" = "configure" ]; then
-	if [ -d /etc/puppet/ssl ] && [ ! -e /var/lib/puppet/ssl ] && grep -q 'ssldir=/var/lib/puppet/ssl' /etc/puppet/puppet.conf; then
-		mv /etc/puppet/ssl /var/lib/puppet/ssl
-	fi
-fi
-
-#DEBHELPER#
diff --git a/conf/debian/puppet.postrm b/conf/debian/puppet.postrm
deleted file mode 100644
index da994c3..0000000
--- a/conf/debian/puppet.postrm
+++ /dev/null
@@ -1,21 +0,0 @@
-#! /bin/sh
-
-case "$1" in
-    purge)
-	rm -rf /var/lib/puppet
-	/usr/sbin/deluser --system puppet
-	;;
-    remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
-
-
-        ;;
-
-    *)
-        echo "postrm called with unknown argument \`$1'" >&2
-        exit 1
-
-esac
-
-#DEBHELPER#
-
-exit 0
diff --git a/conf/debian/puppet.preinst b/conf/debian/puppet.preinst
deleted file mode 100644
index ce8e760..0000000
--- a/conf/debian/puppet.preinst
+++ /dev/null
@@ -1,25 +0,0 @@
-#! /bin/sh
-
-case "$1" in
-    install|upgrade)
-	/usr/sbin/adduser --system \
-	    --group \
-	    --home /var/lib/puppet \
-	    --gecos "Puppet configuration management daemon" \
-	    puppet > /dev/null
-    ;;
-
-    abort-upgrade)
-    ;;
-
-    *)
-        echo "preinst called with unknown argument \`$1'" >&2
-        exit 1
-    ;;
-esac
-
-#DEBHELPER#
-
-exit 0
-
-
diff --git a/conf/debian/puppetmaster.files b/conf/debian/puppetmaster.files
deleted file mode 100644
index 15bc694..0000000
--- a/conf/debian/puppetmaster.files
+++ /dev/null
@@ -1,4 +0,0 @@
-usr/sbin/puppetmasterd
-usr/sbin/puppetca
-usr/sbin/puppetrun
-etc/puppet/
diff --git a/conf/debian/puppetmaster.init b/conf/debian/puppetmaster.init
deleted file mode 100644
index ea5c1ba..0000000
--- a/conf/debian/puppetmaster.init
+++ /dev/null
@@ -1,58 +0,0 @@
-#! /bin/sh
-
-PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
-DAEMON=/usr/sbin/puppetmasterd
-DAEMON_OPTS=""
-NAME=puppetmasterd
-DESC="puppet configuration management tool master server"
-
-test -x $DAEMON || exit 0
-
-[ -r /etc/default/puppetmaster ] && . /etc/default/puppetmaster
-
-. /lib/lsb/init-functions
-
-if [ ! -d /var/run/puppet ]; then
-	rm -rf /var/run/puppet
-	mkdir -p /var/run/puppet
-fi
-
-chown puppet:puppet /var/run/puppet
-
-start_puppetmaster() {
-	start-stop-daemon --start --quiet --pidfile /var/run/puppet/$NAME.pid \
-		--startas $DAEMON -- $DAEMON_OPTS
-}
-
-stop_puppetmaster() {
-	start-stop-daemon --stop --quiet --pidfile /var/run/puppet/$NAME.pid
-}
-
-case "$1" in
-    start)
-	log_begin_msg "Starting $DESC"
-	start_puppetmaster
-	log_end_msg $?
-	;;
-    stop)
-	log_begin_msg "Stopping $DESC"
-	stop_puppetmaster
-	log_end_msg $?
-	;;
-  reload)
-  	# Do nothing, as Puppetmaster rechecks its config automatically
-        ;;
-  restart|force-reload)
-	log_begin_msg "Restarting $DESC"
-	stop_puppetmaster
-	sleep 1
-	start_puppetmaster
-	log_end_msg 0
-	;;
-  *)
-	echo "Usage: $0 {start|stop|restart|force-reload}" >&2
-	exit 1
-	;;
-esac
-
-exit 0
diff --git a/conf/debian/rules b/conf/debian/rules
deleted file mode 100755
index ecabcba..0000000
--- a/conf/debian/rules
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/make -f
-# -*- makefile -*-
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-INSTALL=install -Dp
-
-prefix := $(CURDIR)/debian/tmp
-bindir := $(prefix)/usr/bin
-sbindir := $(prefix)/usr/sbin
-libdir := $(prefix)/usr/lib
-localstatedir := $(prefix)/var
-rubylibdir := $(libdir)/ruby/1.8
-sysconfdir := $(prefix)/etc
-pkgconfdir := $(sysconfdir)/puppet
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-	CFLAGS += -O0
-else
-	CFLAGS += -O2
-endif
-
-configure: configure-stamp
-configure-stamp:
-	dh_testdir
-	touch configure-stamp
-
-
-build: build-stamp
-build-stamp: configure-stamp 
-	dh_testdir
-	touch build-stamp
-
-clean:
-	dh_testdir
-	dh_testroot
-	rm -f build-stamp configure-stamp
-	dh_clean 
-
-install: build
-	dh_testdir
-	dh_testroot
-	dh_clean -k 
-	dh_installdirs
-
-	# ripped from the redhat spec
-	# this sucks, who wants to maintain this?
-	# note to self, fix the install.rb to handle DESTDIR and change
-	# library path
-	install -d -m0755 $(sbindir)
-	install -d -m0755 $(bindir)
-	install -d -m0755 $(rubylibdir)
-	install -d -m0755 $(pkgconfdir)/manifests
-	install -d -m0755 $(localstatedir)/lib/puppet
-	install -d -m0755 $(localstatedir)/run
-	install -d -m0755 $(localstatedir)/log/puppet
-
-	$(INSTALL) -m0755 bin/puppet bin/puppetdoc $(bindir)
-	$(INSTALL) -m0755 bin/puppetd bin/puppetmasterd bin/puppetca bin/puppetrun $(sbindir)
-	$(INSTALL) -m0644 lib/puppet.rb $(rubylibdir)/puppet.rb
-	cp -a lib/puppet $(rubylibdir)
-	find $(rubylibdir) -type f -perm +ugo+x -exec chmod a-x {} \;
-
-	$(INSTALL) -m0644 debian/fileserver.conf $(pkgconfdir)/fileserver.conf
-	$(INSTALL) -m0644 debian/puppet.conf $(pkgconfdir)/puppet.conf
-
-	# Vim auto-syntax-highlighting stuff
-	$(INSTALL) -m0644 ext/vim/syntax/puppet.vim				\
-		$(CURDIR)/debian/puppet/usr/share/vim/vim71/syntax/
-	$(INSTALL) -m0644 ext/vim/ftdetect/puppet.vim				\
-		$(CURDIR)/debian/puppet/usr/share/vim/addons/ftdetect/
-
-	# Emacs keeping up with the Joneses
-	$(INSTALL) -m0644 ext/emacs/puppet-mode-init.el			\
-		$(CURDIR)/debian/puppet/etc/emacs/site-start.d/50puppet-mode-init.el
-	$(INSTALL) -m0644 ext/emacs/puppet-mode.el			\
-		$(CURDIR)/debian/puppet/usr/share/emacs/site-lisp/puppet-mode.el
-
-	dh_installexamples examples/*
-
-	# Logcheck rules.  Gee I wish you could specify a file to source
-	# in dh_installlogcheck.
-	cp ext/logcheck/puppet debian/puppet.logcheck.ignore.server
-	cp ext/logcheck/puppet debian/puppet.logcheck.ignore.workstation
-	dh_installlogcheck
-	rm debian/puppet.logcheck.*
-
-	# Clean out any SVN cruft that may still be lingering in our
-	# packages
-	find debian/tmp debian/puppet debian/puppetmaster -name .svn |xargs rm -rf
-
-# Build architecture-dependent files here.
-binary-arch: build install
-
-# Build architecture-independent files here.
-binary-indep: build install
-	dh_testdir
-	dh_testroot
-	dh_movefiles -i
-	dh_installchangelogs -i CHANGELOG
-	dh_installdocs -i
-	dh_installinit -ppuppetmaster
-	dh_installinit -ppuppet -- defaults 21
-	dh_installlogrotate -i
-	dh_compress -i
-	dh_fixperms -i
-	dh_installdeb -i
-	dh_shlibdeps -i
-	dh_gencontrol -i
-	dh_md5sums -i
-	dh_builddeb -i
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/conf/debian/watch b/conf/debian/watch
deleted file mode 100644
index 29d439f..0000000
--- a/conf/debian/watch
+++ /dev/null
@@ -1,2 +0,0 @@
-version=3
-http://reductivelabs.com/downloads/puppet/puppet-([0-9]+\..*)\.tgz
diff --git a/conf/epm.list b/conf/epm.list
deleted file mode 100644
index d7d7b40..0000000
--- a/conf/epm.list
+++ /dev/null
@@ -1,8 +0,0 @@
-%product Puppet
-%copyright 2004-2005 by Reductive Labs, All Rights Reserved
-%vendor Reductive Labs
-%license COPYING
-%readme README
-%description System Automation and Configuration Management Software
-%version 0.15.0
-%requires facter 1.1
diff --git a/conf/freebsd/puppetd b/conf/freebsd/puppetd
deleted file mode 100644
index 4a5ae59..0000000
--- a/conf/freebsd/puppetd
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-#
-
-# PROVIDE: puppetd
-# REQUIRE: NETWORK
-# KEYWORD: FreeBSD shutdown
-
-. /etc/rc.subr
-
-name=puppetd
-rcvar=`set_rcvar`
-
-# set defaults
-command=/usr/local/bin/puppetd
-pidfile="/var/run/$name.pid"
-#required_files="/usr/local/etc/$name.conf"
-
-# read configuration and set defaults
-load_rc_config "$name"
-: ${puppetd_enable="NO"}
-: ${puppetd_config="/usr/local/etc/puppet.conf"}
-: ${puppetd_flags=""}
-
-command_args="--config $puppetd_config $puppetd_flags"
-
-run_rc_command "$1"
diff --git a/conf/freebsd/puppetmasterd b/conf/freebsd/puppetmasterd
deleted file mode 100644
index d41e003..0000000
--- a/conf/freebsd/puppetmasterd
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-#
-
-# PROVIDE: puppetmasterd
-# REQUIRE: NETWORK
-# KEYWORD: FreeBSD shutdown
-
-. /etc/rc.subr
-
-name=puppetmasterd
-rcvar=`set_rcvar`
-
-# set defaults
-command=/usr/local/bin/puppetmasterd
-pidfile="/var/run/$name.pid"
-#required_files="/usr/local/etc/$name.conf"
-
-# read configuration and set defaults
-load_rc_config "$name"
-: ${puppetmasterd_enable="NO"}
-: ${puppetmasterd_config="/usr/local/etc/puppet.conf"}
-: ${puppetmasterd_flags=""}
-
-command_args="--config $puppetmasterd_config $puppetmasterd_flags"
-
-run_rc_command "$1"
diff --git a/conf/gentoo/conf.d/puppet b/conf/gentoo/conf.d/puppet
deleted file mode 100644
index e7e6257..0000000
--- a/conf/gentoo/conf.d/puppet
+++ /dev/null
@@ -1,5 +0,0 @@
-# Location of PID files
-PUPPET_PID_DIR="/var/run/puppet"
-
-# You may specify other parameters to the puppet client here
-#PUPPET_EXTRA_OPTS=""
diff --git a/conf/gentoo/conf.d/puppetmaster b/conf/gentoo/conf.d/puppetmaster
deleted file mode 100644
index 462ad19..0000000
--- a/conf/gentoo/conf.d/puppetmaster
+++ /dev/null
@@ -1,12 +0,0 @@
-# Location of PID files
-PUPPETMASTER_PID_DIR="/var/run/puppet"
-
-# Location of the main manifest
-#PUPPETMASTER_MANIFEST="/etc/puppet/manifests/site.pp"
-
-# Where to log general messages to.
-# Specify syslog to send log messages to the system log.
-#PUPPETMASTER_LOG="syslog"
-
-# You may specify other parameters to the puppetmaster here
-#PUPPETMASTER_EXTRA_OPTS="--noca"
diff --git a/conf/gentoo/init.d/puppet b/conf/gentoo/init.d/puppet
deleted file mode 100644
index 83d30b0..0000000
--- a/conf/gentoo/init.d/puppet
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/sbin/runscript
-# Copyright 1999-2004 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header$
-
-depend() {
-        need net
-        use dns logger
-}
-
-checkconfig() {
-        if [[ ! -d "${PUPPET_PID_DIR}" ]] ; then
-               eerror "Please make sure PUPPET_PID_DIR is defined and points to a existing directory"
-               return 1
-        fi
-
-        return 0
-}
-
-start() {
-        checkconfig || return $?
-
-        local options=""
-        [[ -n "${PUPPET_EXTRA_OPTS}" ]] && options="${options} ${PUPPET_EXTRA_OPTS}"
-
-        ebegin "Starting puppet"
-        start-stop-daemon --start --quiet --exec /usr/bin/ruby /usr/bin/puppetd -- ${options}
-        eend $? "Failed to start puppet"
-}
-
-stop() {
-        ebegin "Stopping puppet"
-        start-stop-daemon --stop --quiet --pidfile ${PUPPET_PID_DIR}/puppetd.pid
-        local ret=$?
-        eend ${ret} "Failed to stop puppet"
-        rm -f ${PUPPET_PID_DIR}/puppetd.pid
-        return ${ret}
-}
diff --git a/conf/gentoo/init.d/puppetmaster b/conf/gentoo/init.d/puppetmaster
deleted file mode 100755
index 438ac21..0000000
--- a/conf/gentoo/init.d/puppetmaster
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/sbin/runscript
-# Copyright 1999-2008 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-depend() {
-	need net
-	before puppet
-	use dns logger
-}
-
-checkconfig() {
-	if [[ ! -d "${PUPPETMASTER_PID_DIR}" ]] ; then
-		eerror "Please make sure PUPPETMASTER_PID_DIR is defined and points to a existing directory"
-		return 1
-	fi
-
-	local site_manifest="/etc/puppet/manifests/site.pp"
-	[[ -n "${PUPPETMASTER_MANIFEST}" ]] && site_manifest="${PUPPETMASTER_MANIFEST}"
-
-	if [ ! -f "${site_manifest}" ] ; then
-		eerror "Please create ${site_manifest} before running puppet"
-		return 1
-	fi
-
-	return 0
-}
-
-start() {
-	checkconfig || return $?
-
-	local options=""
-	[[ -n "${PUPPETMASTER_MANIFEST}" ]]   && options="${options} --manifest=${PUPPETMASTER_MANIFEST}"
-	[[ -n "${PUPPETMASTER_LOG}" ]]        && options="${options} --logdest=${PUPPETMASTER_LOG}"
-	[[ -n "${PUPPETMASTER_EXTRA_OPTS}" ]] && options="${options} ${PUPPETMASTER_EXTRA_OPTS}"
-
-	ebegin "Starting puppetmaster"
-	start-stop-daemon --start --quiet --exec /usr/bin/ruby /usr/bin/puppetmasterd \
-		-- ${options}
-	eend $? "Failed to start puppetmaster"
-}
-
-stop() {
-	ebegin "Stopping puppetmaster"
-	start-stop-daemon --stop --quiet \
-		--pidfile ${PUPPETMASTER_PID_DIR}/puppetmasterd.pid
-	local ret=$?
-	eend ${ret} "Failed to stop puppetmaster"
-	rm -f ${PUPPETMASTER_PID_DIR}/puppetmasterd.pid
-	return ${ret}
-}
-
diff --git a/conf/gentoo/puppet/fileserver.conf b/conf/gentoo/puppet/fileserver.conf
deleted file mode 100644
index f38aed7..0000000
--- a/conf/gentoo/puppet/fileserver.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# This file consists of arbitrarily named sections/modules
-# defining where files are served from and to whom
-
-# Define a section 'files'
-# Adapt the allow/deny settings to your needs. Order
-# for allow/deny does not matter, allow always takes precedence
-# over deny
-[files]
-  path /var/lib/puppet/files
-#  allow *.example.com
-#  deny *.evil.example.com
-#  allow 192.168.0.0/24
diff --git a/conf/gentoo/puppet/puppet.conf b/conf/gentoo/puppet/puppet.conf
deleted file mode 100644
index 70dcb02..0000000
--- a/conf/gentoo/puppet/puppet.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-[main]
-    # Where Puppet stores dynamic and growing data.
-    # The default value is '/var/puppet'.
-    vardir = /var/lib/puppet
-
-    # The Puppet log directory.
-    # The default value is '$vardir/log'.
-    logdir = /var/log/puppet
-
-    # Where Puppet PID files are kept.
-    # The default value is '$vardir/run'.
-    rundir = /var/run/puppet
-
-    # Where SSL certificates are kept.
-    # The default value is '$confdir/ssl'.
-    ssldir = $vardir/ssl
-
-[puppetd]
-    # The file in which puppetd stores a list of the classes
-    # associated with the retrieved configuratiion.  Can be loaded in
-    # the separate ``puppet`` executable using the ``--loadclasses``
-    # option.
-    # The default value is '$confdir/classes.txt'.
-    classfile = $vardir/classes.txt
-
-    # Where puppetd caches the local configuration.  An
-    # extension indicating the cache format is added automatically.
-    # The default value is '$confdir/localconfig'.
-    localconfig = $vardir/localconfig
diff --git a/conf/namespaceauth.conf b/conf/namespaceauth.conf
deleted file mode 100644
index 8372357..0000000
--- a/conf/namespaceauth.conf
+++ /dev/null
@@ -1,20 +0,0 @@
-# This is an example namespaceauth.conf file,
-# which you'll need if you want to start a client
-# in --listen mode.
-[fileserver]
-    allow *.domain.com
-
-[puppetmaster]
-    allow *.domain.com
-
-[puppetrunner]
-    allow culain.domain.com
-
-[puppetbucket]
-    allow *.domain.com
-
-[puppetreports]
-    allow *.domain.com
-
-[resource]
-    allow server.domain.com
diff --git a/conf/osx/PackageInfo.plist b/conf/osx/PackageInfo.plist
deleted file mode 100644
index 9706a80..0000000
--- a/conf/osx/PackageInfo.plist
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleIdentifier</key>
-	<string>com.reductivelabs.puppet</string>
-	<key>CFBundleShortVersionString</key>
-	<string>{SHORTVERSION}</string>
-	<key>IFMajorVersion</key>
-	<integer>{MAJORVERSION}</integer>
-	<key>IFMinorVersion</key>
-	<integer>{MINORVERSION}</integer>
-	<key>IFPkgFlagAllowBackRev</key>
-	<false/>
-	<key>IFPkgFlagAuthorizationAction</key>
-	<string>RootAuthorization</string>
-	<key>IFPkgFlagDefaultLocation</key>
-	<string>/</string>
-	<key>IFPkgFlagFollowLinks</key>
-	<true/>
-	<key>IFPkgFlagInstallFat</key>
-	<false/>
-	<key>IFPkgFlagIsRequired</key>
-	<false/>
-	<key>IFPkgFlagOverwritePermissions</key>
-	<false/>
-	<key>IFPkgFlagRelocatable</key>
-	<false/>
-	<key>IFPkgFlagRestartAction</key>
-	<string>None</string>
-	<key>IFPkgFlagRootVolumeOnly</key>
-	<true/>
-	<key>IFPkgFlagUpdateInstalledLanguages</key>
-	<false/>
-</dict>
-</plist>
diff --git a/conf/osx/createpackage.sh b/conf/osx/createpackage.sh
deleted file mode 100755
index 32cbebf..0000000
--- a/conf/osx/createpackage.sh
+++ /dev/null
@@ -1,167 +0,0 @@
-#!/bin/bash
-#
-# Script to build an "old style" not flat pkg out of the puppet repository.
-#
-# Author: Nigel Kersten (nigelk at google.com)
-#
-# Last Updated: 2008-07-31
-#
-# Copyright 2008 Google Inc.
-# 
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License
-
-
-INSTALLRB="install.rb"
-BINDIR="/usr/bin"
-SITELIBDIR="/usr/lib/ruby/site_ruby/1.8"
-PACKAGEMAKER="/Developer/usr/bin/packagemaker"
-PROTO_PLIST="PackageInfo.plist"
-PREFLIGHT="preflight"
-
-
-function find_installer() {
-  # we walk up three directories to make this executable from the root, 
-  # root/conf or root/conf/osx
-  if [ -f "./${INSTALLRB}" ]; then
-    installer="$(pwd)/${INSTALLRB}"
-  elif [ -f "../${INSTALLRB}" ]; then
-    installer="$(pwd)/../${INSTALLRB}"
-  elif [ -f "../../${INSTALLRB}" ]; then
-    installer="$(pwd)/../${INSTALLRB}"
-  else
-    installer=""
-  fi
-}
-
-function find_puppet_root() {
-  puppet_root=$(dirname "${installer}")
-}
-
-function install_puppet() {
-  echo "Installing Puppet to ${pkgroot}"
-  "${installer}" --destdir="${pkgroot}" --bindir="${BINDIR}" --sitelibdir="${SITELIBDIR}"
-  chown -R root:admin "${pkgroot}"
-}
-
-function get_puppet_version() {
-  puppet_version=$(RUBYLIB="${pkgroot}/${SITELIBDIR}:${RUBYLIB}" ruby -e "require 'puppet'; puts Puppet.version")
-}
-
-function prepare_package() {
-  # As we can't specify to follow symlinks from the command line, we have
-  # to go through the hassle of creating an Info.plist file for packagemaker
-  # to look at for package creation and substitue the version strings out.
-  # Major/Minor versions can only be integers, so we have "0" and "245" for
-  # puppet version 0.24.5
-  # Note too that for 10.5 compatibility this Info.plist *must* be set to 
-  # follow symlinks.
-  VER1=$(echo ${puppet_version} | awk -F "." '{print $1}')
-  VER2=$(echo ${puppet_version} | awk -F "." '{print $2}')
-  VER3=$(echo ${puppet_version} | awk -F "." '{print $3}')
-  major_version="${VER1}"
-  minor_version="${VER2}${VER3}"
-  cp "${puppet_root}/conf/osx/${PROTO_PLIST}" "${pkgtemp}"
-  sed -i '' "s/{SHORTVERSION}/${puppet_version}/g" "${pkgtemp}/${PROTO_PLIST}"
-  sed -i '' "s/{MAJORVERSION}/${major_version}/g" "${pkgtemp}/${PROTO_PLIST}"
-  sed -i '' "s/{MINORVERSION}/${minor_version}/g" "${pkgtemp}/${PROTO_PLIST}"
-  
-  # We need to create a preflight script to remove traces of previous
-  # puppet installs due to limitations in Apple's pkg format.
-  mkdir "${pkgtemp}/scripts"
-  cp "${puppet_root}/conf/osx/${PREFLIGHT}" "${pkgtemp}/scripts"
-  
-  # substitute in the sitelibdir specified above on the assumption that this
-  # is where any previous puppet install exists that should be cleaned out.
-  sed -i '' "s|{SITELIBDIR}|${SITELIBDIR}|g" "${pkgtemp}/scripts/${PREFLIGHT}"
-  chmod 0755 "${pkgtemp}/scripts/${PREFLIGHT}"
-}
-
-function create_package() {
-  rm -fr "$(pwd)/puppet-${puppet_version}.pkg"
-  echo "Building package"
-  echo "Note that packagemaker is reknowned for spurious errors. Don't panic."
-  "${PACKAGEMAKER}" --root "${pkgroot}" \
-                    --info "${pkgtemp}/${PROTO_PLIST}" \
-                    --scripts ${pkgtemp}/scripts \
-                    --out "$(pwd)/puppet-${puppet_version}.pkg"
-  if [ $? -ne 0 ]; then
-    echo "There was a problem building the package."
-    cleanup_and_exit 1
-    exit 1
-  else
-    echo "The package has been built at:"
-    echo "$(pwd)/puppet-${puppet_version}.pkg"
-  fi
-}
-
-function cleanup_and_exit() {
-  if [ -d "${pkgroot}" ]; then
-    rm -fr "${pkgroot}"
-  fi
-  if [ -d "${pkgtemp}" ]; then
-    rm -fr "${pkgtemp}"
-  fi
-  exit $1
-}
-
-# Program entry point
-function main() {
-
-  if [ $(whoami) != "root" ]; then
-    echo "This script needs to be run as root via su or sudo."
-    cleanup_and_exit 1
-  fi
-
-  find_installer
-  
-  if [ ! "${installer}" ]; then
-    echo "Unable to find ${INSTALLRB}"
-    cleanup_and_exit 1
-  fi
-
-  find_puppet_root
-  
-  if [ ! "${puppet_root}" ]; then
-    echo "Unable to find puppet repository root."
-    cleanup_and_exit 1
-  fi
-  
-  pkgroot=$(mktemp -d -t puppetpkg)
-  
-  if [ ! "${pkgroot}" ]; then
-    echo "Unable to create temporary package root."
-    cleanup_and_exit 1
-  fi
-  
-  pkgtemp=$(mktemp -d -t puppettmp)
-  
-  if [ ! "${pkgtemp}" ]; then
-    echo "Unable to create temporary package root."
-    cleanup_and_exit 1
-  fi
-  
-  install_puppet
-  get_puppet_version
-  
-  if [ ! "${puppet_version}" ]; then
-    echo "Unable to retrieve puppet version"
-    cleanup_and_exit 1
-  fi
-  
-  prepare_package
-  create_package
-  
-  cleanup_and_exit 0
-}
-
-main "$@"
diff --git a/conf/osx/preflight b/conf/osx/preflight
deleted file mode 100755
index cde682b..0000000
--- a/conf/osx/preflight
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-#
-# Make sure that old puppet cruft is removed
-# This also allows us to downgrade puppet as
-# it's more likely that installing old versions
-# over new will cause issues.
-#
-# ${3} is the destination volume so that this works correctly
-# when being installed to volumes other than the current OS.
-
-/bin/rm -Rf "${3}{SITELIBDIR}/puppet"
-/bin/rm -Rf "${3}{SITELIBDIR}/puppet.rb"
diff --git a/conf/redhat/client.init b/conf/redhat/client.init
deleted file mode 100644
index 44caab1..0000000
--- a/conf/redhat/client.init
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/bin/bash
-# puppet        Init script for running the puppet client daemon
-#
-# Author:       Duane Griffin <d.griffin at psenterprise.com>
-#               David Lutterkort <dlutter at redhat.com>
-#
-# chkconfig: - 98 02
-#
-# description: Enables periodic system configuration checks through puppet.
-# processname: puppet
-# config: /etc/sysconfig/puppet
-
-PATH=/usr/bin:/sbin:/bin:/usr/sbin
-export PATH
-
-[ -f /etc/sysconfig/puppet ] && . /etc/sysconfig/puppet
-lockfile=${LOCKFILE-/var/lock/subsys/puppet}
-pidfile=${PIDFILE-/var/run/puppet/puppetd.pid}
-puppetd=${PUPPETD-/usr/sbin/puppetd}
-RETVAL=0
-
-# Source function library.
-. /etc/rc.d/init.d/functions
-
-PUPPET_OPTS=""
-[ -n "${PUPPET_SERVER}" ] && PUPPET_OPTS="--server=${PUPPET_SERVER}"
-[ -n "$PUPPET_LOG" ] && PUPPET_OPTS="${PUPPET_OPTS} --logdest=${PUPPET_LOG}"
-[ -n "$PUPPET_PORT" ] && PUPPET_OPTS="${PUPPET_OPTS} --port=${PUPPET_PORT}"
-
-# Figure out if the system just booted. Let's assume
-# boot doesn't take longer than 5 minutes
-## Not used for now
-##[ -n "$INIT_VERSION" ] && PUPPET_OPTS="${PUPPET_OPTS} --fullrun"
-
-start() {
-	echo -n $"Starting puppet: "
-        daemon $puppetd ${PUPPET_OPTS} ${PUPPET_EXTRA_OPTS}
-	RETVAL=$?
-	echo
-        [ $RETVAL = 0 ] && touch ${lockfile}
-        return $RETVAL
-}
-
-stop() {
-	echo -n $"Stopping puppet: "
-        killproc $puppetd
-	RETVAL=$?
-	echo
-	[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
-}
-
-reload() {
-	echo -n $"Restarting puppet: "
-        killproc $puppetd -HUP
-	RETVAL=$?
-	echo
-	return $RETVAL
-}
-
-restart() {
-    stop
-    start
-}
-
-genconfig() {
-  echo -n $"Generate configuration puppet: "
-  $puppetd ${PUPPET_OPTS} ${PUPPET_EXTRA_OPTS} --genconfig
-}
-
-case "$1" in
-  start)
-	start
-	;;
-  stop) 
-	stop
-	;;
-  restart)
-	restart
-	;;
-  reload|force-reload)
-        reload
-	;;
-  condrestart|try-restart)
-	[ -f "$pidfile" ] && restart
-	;;
-  status)
-        status -p "$pidfile" $puppetd
-        RETVAL=$?
-	;;
-  once)
-        shift
-        $puppetd -o ${PUPPET_OPTS} ${PUPPET_EXTRA_OPTS} $@
-        ;;
-  genconfig)
-	genconfig
-	;;
-  *)
-	echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|once|genconfig}"
-	exit 1
-esac
-
-exit $RETVAL
diff --git a/conf/redhat/client.sysconfig b/conf/redhat/client.sysconfig
deleted file mode 100644
index 3befdd4..0000000
--- a/conf/redhat/client.sysconfig
+++ /dev/null
@@ -1,11 +0,0 @@
-# The puppetmaster server
-#PUPPET_SERVER=puppet
-
-# If you wish to specify the port to connect to do so here
-#PUPPET_PORT=8140
-
-# Where to log to. Specify syslog to send log messages to the system log.
-#PUPPET_LOG=/var/log/puppet/puppet.log
-
-# You may specify other parameters to the puppet client here
-#PUPPET_EXTRA_OPTS=--waitforcert=500
diff --git a/conf/redhat/fileserver.conf b/conf/redhat/fileserver.conf
deleted file mode 100644
index 67e387c..0000000
--- a/conf/redhat/fileserver.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# This file consists of arbitrarily named sections/modules
-# defining where files are served from and to whom
-
-# Define a section 'files'
-# Adapt the allow/deny settings to your needs. Order
-# for allow/deny does not matter, allow always takes precedence
-# over deny
-# [files]
-#  path /var/lib/puppet/files
-#  allow *.example.com
-#  deny *.evil.example.com
-#  allow 192.168.0.0/24
diff --git a/conf/redhat/logrotate b/conf/redhat/logrotate
deleted file mode 100644
index e336d60..0000000
--- a/conf/redhat/logrotate
+++ /dev/null
@@ -1,8 +0,0 @@
-/var/log/puppet/*log {
-  missingok
-  create 0644 puppet puppet
-  postrotate
-    [ -e /etc/init.d/puppetmaster ] && /etc/init.d/puppetmaster condrestart >/dev/null 2>&1 || true
-    [ -e /etc/init.d/puppet ] && /etc/init.d/puppet reload > /dev/null 2>&1 || true
-  endscript
-}
diff --git a/conf/redhat/lsb-config.patch b/conf/redhat/lsb-config.patch
deleted file mode 100644
index 7a18cd3..0000000
--- a/conf/redhat/lsb-config.patch
+++ /dev/null
@@ -1,51 +0,0 @@
---- puppet-0.18.0/conf/redhat/fileserver.conf.orig	2006-06-20 12:13:49.000000000 -0700
-+++ puppet-0.18.0/conf/redhat/fileserver.conf	2006-06-20 12:14:03.000000000 -0700
-@@ -6,7 +6,7 @@
- # for allow/deny does not matter, allow always takes precedence
- # over deny
- [files]
--  path /var/puppet/files
-+  path /var/lib/puppet/files
- #  allow *.example.com
- #  deny *.evil.example.com
- #  allow 192.168.0.0/24
---- puppet-0.18.0/conf/redhat/puppetd.conf.orig	2006-06-20 12:12:01.000000000 -0700
-+++ puppet-0.18.0/conf/redhat/puppetd.conf	2006-06-20 12:14:37.000000000 -0700
-@@ -1,5 +1,33 @@
-+[puppet]
-+    # Where Puppet stores dynamic and growing data.
-+    # The default value is '/var/puppet'.
-+    vardir = /var/lib/puppet
-+
-+    # The Puppet log directory.
-+    # The default value is '$vardir/log'.
-+    logdir = /var/log/puppet
-+
-+    # Where Puppet PID files are kept.
-+    # The default value is '$vardir/run'.
-+    rundir = /var/run/puppet
-+
-+    # Where lock files are kept.
-+    # The default value is '$vardir/locks'.
-+    lockdir = /var/lock
-+
-+    # Where SSL certificates are kept.
-+    # The default value is '$confdir/ssl'.
-+    ssldir = $vardir/ssl
-+
- [puppetd]
--# Make sure all log messages are sent to the right directory
--# This directory must be writable by the puppet user
--logdir=/var/log/puppet
--rundir=/var/run
-+    # The file in which puppetd stores a list of the classes
-+    # associated with the retrieved configuratiion.  Can be loaded in
-+    # the separate ``puppet`` executable using the ``--loadclasses``
-+    # option.
-+    # The default value is '$confdir/classes.txt'.
-+    classfile = $vardir/classes.txt
-+
-+    # Where puppetd caches the local configuration.  An
-+    # extension indicating the cache format is added automatically.
-+    # The default value is '$confdir/localconfig'.
-+    localconfig = $vardir/localconfig
diff --git a/conf/redhat/no-chuser-0.15.1.patch b/conf/redhat/no-chuser-0.15.1.patch
deleted file mode 100644
index e19bc7c..0000000
--- a/conf/redhat/no-chuser-0.15.1.patch
+++ /dev/null
@@ -1,38 +0,0 @@
---- puppet-0.15.1/bin/puppetmasterd.orig	2006-03-15 08:33:45.000000000 -0800
-+++ puppet-0.15.1/bin/puppetmasterd	2006-03-22 13:07:54.000000000 -0800
-@@ -210,14 +210,15 @@
-     exit(1)
- end
- 
--if Process.uid == 0
--    begin
--        Puppet::Util.chuser
--    rescue => detail
--        $stderr.puts "Could not change user to %s: %s" % [Puppet[:user], detail]
--        exit(39)
--    end
--end
-+# FIXME: Running as non-root is not ready for primetime
-+# if Process.uid == 0
-+#     begin
-+#         Puppet::Util.chuser
-+#     rescue => detail
-+#         $stderr.puts "Could not change user to %s: %s" % [Puppet[:user], detail]
-+#         exit(39)
-+#     end
-+# end
- 
- if Puppet[:parseonly]
-     # we would have already exited if the file weren't syntactically correct
---- puppet-0.15.1/bin/puppetca.orig	2006-02-07 15:12:39.000000000 -0800
-+++ puppet-0.15.1/bin/puppetca	2006-03-22 13:07:56.000000000 -0800
-@@ -138,7 +138,8 @@
- Puppet.genconfig
- Puppet.genmanifest
- 
--Puppet::Util.chuser
-+# FIXME: Running as non-root is not ready for primetime
-+# Puppet::Util.chuser
- 
- begin
-     ca = Puppet::SSLCertificates::CA.new()
diff --git a/conf/redhat/no-lockdir.patch b/conf/redhat/no-lockdir.patch
deleted file mode 100644
index 899a202..0000000
--- a/conf/redhat/no-lockdir.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- puppet-0.22.1/conf/redhat/puppetd.conf.orig	2006-09-27 10:30:35.000000000 -0700
-+++ puppet-0.22.1/conf/redhat/puppetd.conf	2007-02-11 13:27:04.000000000 -0800
-@@ -11,10 +11,6 @@
-     # The default value is '$vardir/run'.
-     rundir = /var/run/puppet
- 
--    # Where lock files are kept.
--    # The default value is '$vardir/locks'.
--    lockdir = /var/lock
--
-     # Where SSL certificates are kept.
-     # The default value is '$confdir/ssl'.
-     ssldir = $vardir/ssl
diff --git a/conf/redhat/puppet.conf b/conf/redhat/puppet.conf
deleted file mode 100644
index 70dcb02..0000000
--- a/conf/redhat/puppet.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-[main]
-    # Where Puppet stores dynamic and growing data.
-    # The default value is '/var/puppet'.
-    vardir = /var/lib/puppet
-
-    # The Puppet log directory.
-    # The default value is '$vardir/log'.
-    logdir = /var/log/puppet
-
-    # Where Puppet PID files are kept.
-    # The default value is '$vardir/run'.
-    rundir = /var/run/puppet
-
-    # Where SSL certificates are kept.
-    # The default value is '$confdir/ssl'.
-    ssldir = $vardir/ssl
-
-[puppetd]
-    # The file in which puppetd stores a list of the classes
-    # associated with the retrieved configuratiion.  Can be loaded in
-    # the separate ``puppet`` executable using the ``--loadclasses``
-    # option.
-    # The default value is '$confdir/classes.txt'.
-    classfile = $vardir/classes.txt
-
-    # Where puppetd caches the local configuration.  An
-    # extension indicating the cache format is added automatically.
-    # The default value is '$confdir/localconfig'.
-    localconfig = $vardir/localconfig
diff --git a/conf/redhat/puppet.spec b/conf/redhat/puppet.spec
deleted file mode 100644
index d71b862..0000000
--- a/conf/redhat/puppet.spec
+++ /dev/null
@@ -1,339 +0,0 @@
-%{!?ruby_sitelibdir: %define ruby_sitelibdir %(ruby -rrbconfig -e 'puts Config::CONFIG["sitelibdir"]')}
-%define pbuild %{_builddir}/%{name}-%{version}
-%define confdir conf/redhat
-
-%define has_ruby_abi 0%{?fedora:%fedora} >= 5 || 0%{?rhel:%rhel} >= 5 || 0%{?centos:%centos} >= 5
-%define has_ruby_noarch %has_ruby_abi
-
-Summary: A network tool for managing many disparate systems
-Name: puppet
-Version: 0.24.6
-Release: 1%{?dist}
-License: GPLv2+
-Group: System Environment/Base
-
-URL: http://puppet.reductivelabs.com/
-Source: http://reductivelabs.com/downloads/puppet/%{name}-%{version}.tgz
-
-Requires: ruby >= 1.8.1
-%if %has_ruby_abi
-Requires: ruby(abi) = 1.8
-%endif
-Requires: facter >= 1.1.4
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-%if %has_ruby_noarch
-BuildArchitectures: noarch
-%endif
-BuildRequires: ruby >= 1.8.1
-
-%description
-Puppet lets you centrally manage every important aspect of your system using a 
-cross-platform specification language that manages all the separate elements 
-normally aggregated in different files, like users, cron jobs, and hosts, 
-along with obviously discrete elements like packages, services, and files.
-
-%package server
-Group: System Environment/Base
-Summary: Server for the puppet system management tool
-Requires: puppet = %{version}-%{release}
-
-%description server
-Provides the central puppet server daemon which provides manifests to clients.
-The server can also function as a certificate authority and file server.
-
-%prep
-%setup -q
-
-%build
-for f in bin/* ; do 
-  sed -i -e '1c#!/usr/bin/ruby' $f
-done
-# Fix some rpmlint complaints
-for f in mac_dscl.pp mac_dscl_revert.pp \
-         mac_netinfo.pp mac_pkgdmg.pp ; do
-  sed -i -e'1d' examples/$f
-  chmod a-x examples/$f
-done
-
-find examples/ -type f -empty | xargs rm
-find examples/ -type f | xargs chmod a-x
-
-%install
-rm -rf %{buildroot}
-install -d -m0755 %{buildroot}%{_sbindir}
-install -d -m0755 %{buildroot}%{_bindir}
-install -d -m0755 %{buildroot}%{ruby_sitelibdir}
-install -d -m0755 %{buildroot}%{_sysconfdir}/puppet/manifests
-install -d -m0755 %{buildroot}%{_docdir}/%{name}-%{version}
-install -d -m0755 %{buildroot}%{_mandir}/man8
-install -d -m0755 %{buildroot}%{_localstatedir}/lib/puppet
-install -d -m0755 %{buildroot}%{_localstatedir}/run/puppet
-install -d -m0755 %{buildroot}%{_localstatedir}/log/puppet
-install -Dp -m0755 %{pbuild}/bin/* %{buildroot}%{_sbindir}
-mv %{buildroot}%{_sbindir}/puppet %{buildroot}%{_bindir}/puppet
-mv %{buildroot}%{_sbindir}/ralsh %{buildroot}%{_bindir}/ralsh
-mv %{buildroot}%{_sbindir}/filebucket %{buildroot}%{_bindir}/filebucket
-mv %{buildroot}%{_sbindir}/puppetrun %{buildroot}%{_bindir}/puppetrun
-mv %{buildroot}%{_sbindir}/puppetdoc %{buildroot}%{_bindir}/puppetdoc
-install -Dp -m0644 %{pbuild}/lib/puppet.rb %{buildroot}%{ruby_sitelibdir}/puppet.rb
-cp -a %{pbuild}/lib/puppet %{buildroot}%{ruby_sitelibdir}
-find %{buildroot}%{ruby_sitelibdir} -type f -perm +ugo+x -print0 | xargs -0 -r chmod a-x
-install -Dp -m0644 %{confdir}/client.sysconfig %{buildroot}%{_sysconfdir}/sysconfig/puppet
-install -Dp -m0755 %{confdir}/client.init %{buildroot}%{_initrddir}/puppet
-install -Dp -m0644 %{confdir}/server.sysconfig %{buildroot}%{_sysconfdir}/sysconfig/puppetmaster
-install -Dp -m0755 %{confdir}/server.init %{buildroot}%{_initrddir}/puppetmaster
-install -Dp -m0644 %{confdir}/fileserver.conf %{buildroot}%{_sysconfdir}/puppet/fileserver.conf
-install -Dp -m0644 %{confdir}/puppet.conf %{buildroot}%{_sysconfdir}/puppet/puppet.conf
-install -Dp -m0644 %{confdir}/logrotate %{buildroot}%{_sysconfdir}/logrotate.d/puppet
-install -Dp -m0644 man/man8/* %{buildroot}%{_mandir}/man8
-# We need something for these ghosted files, otherwise rpmbuild
-# will complain loudly. They won't be included in the binary packages
-touch %{buildroot}%{_sysconfdir}/puppet/puppetmasterd.conf
-touch %{buildroot}%{_sysconfdir}/puppet/puppetca.conf
-touch %{buildroot}%{_sysconfdir}/puppet/puppetd.conf
-
-%files
-%defattr(-, root, root, 0755)
-%{_bindir}/puppet
-%{_bindir}/ralsh
-%{_bindir}/filebucket
-%{_bindir}/puppetdoc
-%exclude %{_mandir}/man8/pi.8.gz
-%{_sbindir}/puppetd
-%{ruby_sitelibdir}/*
-%{_initrddir}/puppet
-%dir %{_sysconfdir}/puppet
-%config(noreplace) %{_sysconfdir}/sysconfig/puppet
-%config(noreplace) %{_sysconfdir}/puppet/puppet.conf
-%ghost %config(noreplace,missingok) %{_sysconfdir}/puppet/puppetd.conf
-%doc CHANGELOG COPYING LICENSE README examples
-%config(noreplace) %{_sysconfdir}/logrotate.d/puppet
-# These need to be owned by puppet so the server can
-# write to them
-%attr(-, puppet, puppet) %{_localstatedir}/run/puppet
-%attr(-, puppet, puppet) %{_localstatedir}/log/puppet
-%attr(-, puppet, puppet) %{_localstatedir}/lib/puppet
-%doc %{_mandir}/man8/puppet.8.gz
-%doc %{_mandir}/man8/puppet.conf.8.gz
-%doc %{_mandir}/man8/puppetd.8.gz
-%doc %{_mandir}/man8/ralsh.8.gz
-%doc %{_mandir}/man8/puppetdoc.8.gz
-
-%files server
-%defattr(-, root, root, 0755)
-%{_sbindir}/puppetmasterd
-%{_bindir}/puppetrun
-%{_initrddir}/puppetmaster
-%config(noreplace) %{_sysconfdir}/puppet/fileserver.conf
-%dir %{_sysconfdir}/puppet/manifests
-%config(noreplace) %{_sysconfdir}/sysconfig/puppetmaster
-%ghost %config(noreplace,missingok) %{_sysconfdir}/puppet/puppetca.conf
-%ghost %config(noreplace,missingok) %{_sysconfdir}/puppet/puppetmasterd.conf
-%{_sbindir}/puppetca
-%doc %{_mandir}/man8/filebucket.8.gz
-%doc %{_mandir}/man8/puppetca.8.gz
-%doc %{_mandir}/man8/puppetmasterd.8.gz
-%doc %{_mandir}/man8/puppetrun.8.gz
-
-%pre
-/usr/sbin/groupadd -r puppet 2>/dev/null || :
-/usr/sbin/useradd -g puppet -c "Puppet" \
-    -s /sbin/nologin -r -d /var/lib/puppet puppet 2> /dev/null || :
-if [ $1 -gt 1 ] ; then
-  /usr/sbin/usermod -d /var/lib/puppet puppet || :
-fi
-%post
-/sbin/chkconfig --add puppet
-exit 0
-
-%post server
-/sbin/chkconfig --add puppetmaster
-
-%preun
-if [ "$1" = 0 ] ; then
-  /sbin/service puppet stop > /dev/null 2>&1
-  /sbin/chkconfig --del puppet
-fi
-
-%preun server
-if [ "$1" = 0 ] ; then
-  /sbin/service puppetmaster stop > /dev/null 2>&1
-  /sbin/chkconfig --del puppetmaster
-fi
-
-%postun server
-if [ "$1" -ge 1 ]; then
-  /sbin/service puppetmaster condrestart > /dev/null 2>&1
-fi
-
-%clean
-rm -rf %{buildroot}
-
-%changelog
-* Mon Jul 28 2008 David Lutterkort <dlutter at redhat.com> - 0.24.5-1
-- Add /usr/bin/puppetdoc
-
-* Thu Jul 24 2008 Brenton Leanhardt <bleanhar at redhat.com>
-- New version
-- man pages now ship with tarball
-- examples/code moved to root examples dir in upstream tarball
-
-* Tue Mar 25 2008 David Lutterkort <dlutter at redhat.com> - 0.24.4-1
-- Add man pages (from separate tarball, upstream will fix to
-  include in main tarball)
-
-* Mon Mar 24 2008 David Lutterkort <dlutter at redhat.com> - 0.24.3-1
-- New version
-
-* Wed Mar  5 2008 David Lutterkort <dlutter at redhat.com> - 0.24.2-1
-- New version
-
-* Sat Dec 22 2007 David Lutterkort <dlutter at redhat.com> - 0.24.1-1
-- New version
-
-* Mon Dec 17 2007 David Lutterkort <dlutter at redhat.com> - 0.24.0-2
-- Use updated upstream tarball that contains yumhelper.py
-
-* Fri Dec 14 2007 David Lutterkort <dlutter at redhat.com> - 0.24.0-1
-- Fixed license
-- Munge examples/ to make rpmlint happier
-
-* Wed Aug 22 2007 David Lutterkort <dlutter at redhat.com> - 0.23.2-1
-- New version
-
-* Thu Jul 26 2007 David Lutterkort <dlutter at redhat.com> - 0.23.1-1
-- Remove old config files
-
-* Wed Jun 20 2007 David Lutterkort <dlutter at redhat.com> - 0.23.0-1
-- Install one puppet.conf instead of old config files, keep old configs 
-  around to ease update
-- Use plain shell commands in install instead of macros
-
-* Wed May  2 2007 David Lutterkort <dlutter at redhat.com> - 0.22.4-1
-- New version
-
-* Thu Mar 29 2007 David Lutterkort <dlutter at redhat.com> - 0.22.3-1
-- Claim ownership of _sysconfdir/puppet (bz 233908)
-
-* Mon Mar 19 2007 David Lutterkort <dlutter at redhat.com> - 0.22.2-1
-- Set puppet's homedir to /var/lib/puppet, not /var/puppet
-- Remove no-lockdir patch, not needed anymore
-
-* Mon Feb 12 2007 David Lutterkort <dlutter at redhat.com> - 0.22.1-2
-- Fix bogus config parameter in puppetd.conf
-
-* Sat Feb  3 2007 David Lutterkort <dlutter at redhat.com> - 0.22.1-1
-- New version
-
-* Fri Jan  5 2007 David Lutterkort <dlutter at redhat.com> - 0.22.0-1
-- New version
-
-* Mon Nov 20 2006 David Lutterkort <dlutter at redhat.com> - 0.20.1-2
-- Make require ruby(abi) and buildarch: noarch conditional for fedora 5 or
-  later to allow building on older fedora releases
-
-* Mon Nov 13 2006 David Lutterkort <dlutter at redhat.com> - 0.20.1-1
-- New version
-
-* Mon Oct 23 2006 David Lutterkort <dlutter at redhat.com> - 0.20.0-1
-- New version
-
-* Tue Sep 26 2006 David Lutterkort <dlutter at redhat.com> - 0.19.3-1
-- New version
-
-* Mon Sep 18 2006 David Lutterkort <dlutter at redhat.com> - 0.19.1-1
-- New version
-
-* Thu Sep  7 2006 David Lutterkort <dlutter at redhat.com> - 0.19.0-1
-- New version
-
-* Tue Aug  1 2006 David Lutterkort <dlutter at redhat.com> - 0.18.4-2
-- Use /usr/bin/ruby directly instead of /usr/bin/env ruby in
-  executables. Otherwise, initscripts break since pidof can't find the
-  right process
-
-* Tue Aug  1 2006 David Lutterkort <dlutter at redhat.com> - 0.18.4-1
-- New version
-
-* Fri Jul 14 2006 David Lutterkort <dlutter at redhat.com> - 0.18.3-1
-- New version
-
-* Wed Jul  5 2006 David Lutterkort <dlutter at redhat.com> - 0.18.2-1
-- New version
-
-* Wed Jun 28 2006 David Lutterkort <dlutter at redhat.com> - 0.18.1-1
-- Removed lsb-config.patch and yumrepo.patch since they are upstream now
-
-* Mon Jun 19 2006 David Lutterkort <dlutter at redhat.com> - 0.18.0-1
-- Patch config for LSB compliance (lsb-config.patch)
-- Changed config moves /var/puppet to /var/lib/puppet, /etc/puppet/ssl 
-  to /var/lib/puppet, /etc/puppet/clases.txt to /var/lib/puppet/classes.txt,
-  /etc/puppet/localconfig.yaml to /var/lib/puppet/localconfig.yaml
-
-* Fri May 19 2006 David Lutterkort <dlutter at redhat.com> - 0.17.2-1
-- Added /usr/bin/puppetrun to server subpackage
-- Backported patch for yumrepo type (yumrepo.patch)
-
-* Wed May  3 2006 David Lutterkort <dlutter at redhat.com> - 0.16.4-1
-- Rebuilt
-
-* Fri Apr 21 2006 David Lutterkort <dlutter at redhat.com> - 0.16.0-1
-- Fix default file permissions in server subpackage
-- Run puppetmaster as user puppet
-- rebuilt for 0.16.0
-
-* Mon Apr 17 2006 David Lutterkort <dlutter at redhat.com> - 0.15.3-2
-- Don't create empty log files in post-install scriptlet
-
-* Fri Apr  7 2006 David Lutterkort <dlutter at redhat.com> - 0.15.3-1
-- Rebuilt for new version
-
-* Wed Mar 22 2006 David Lutterkort <dlutter at redhat.com> - 0.15.1-1
-- Patch0: Run puppetmaster as root; running as puppet is not ready 
-  for primetime
-
-* Mon Mar 13 2006 David Lutterkort <dlutter at redhat.com> - 0.15.0-1
-- Commented out noarch; requires fix for bz184199
-
-* Mon Mar  6 2006 David Lutterkort <dlutter at redhat.com> - 0.14.0-1
-- Added BuildRequires for ruby
-
-* Wed Mar  1 2006 David Lutterkort <dlutter at redhat.com> - 0.13.5-1
-- Removed use of fedora-usermgmt. It is not required for Fedora Extras and
-  makes it unnecessarily hard to use this rpm outside of Fedora. Just
-  allocate the puppet uid/gid dynamically
-
-* Sun Feb 19 2006 David Lutterkort <dlutter at redhat.com> - 0.13.0-4
-- Use fedora-usermgmt to create puppet user/group. Use uid/gid 24. Fixed 
-problem with listing fileserver.conf and puppetmaster.conf twice
-
-* Wed Feb  8 2006 David Lutterkort <dlutter at redhat.com> - 0.13.0-3
-- Fix puppetd.conf
-
-* Wed Feb  8 2006 David Lutterkort <dlutter at redhat.com> - 0.13.0-2
-- Changes to run puppetmaster as user puppet
-
-* Mon Feb  6 2006 David Lutterkort <dlutter at redhat.com> - 0.13.0-1
-- Don't mark initscripts as config files
-
-* Mon Feb  6 2006 David Lutterkort <dlutter at redhat.com> - 0.12.0-2
-- Fix BuildRoot. Add dist to release
-
-* Tue Jan 17 2006 David Lutterkort <dlutter at redhat.com> - 0.11.0-1
-- Rebuild
-
-* Thu Jan 12 2006 David Lutterkort <dlutter at redhat.com> - 0.10.2-1
-- Updated for 0.10.2 Fixed minor kink in how Source is given
-
-* Wed Jan 11 2006 David Lutterkort <dlutter at redhat.com> - 0.10.1-3
-- Added basic fileserver.conf
-
-* Wed Jan 11 2006 David Lutterkort <dlutter at redhat.com> - 0.10.1-1
-- Updated. Moved installation of library files to sitelibdir. Pulled 
-initscripts into separate files. Folded tools rpm into server
-
-* Thu Nov 24 2005 Duane Griffin <d.griffin at psenterprise.com>
-- Added init scripts for the client
-
-* Wed Nov 23 2005 Duane Griffin <d.griffin at psenterprise.com>
-- First packaging
diff --git a/conf/redhat/server.init b/conf/redhat/server.init
deleted file mode 100644
index 6871b9a..0000000
--- a/conf/redhat/server.init
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/bin/bash
-# puppetmaster  This shell script enables the puppetmaster server.
-#
-# Authors:       Duane Griffin <d.griffin at psenterprise.com>
-#                Peter Meier <peter.meier at immerda.ch> (Mongrel enhancements)
-#
-# chkconfig: - 65 45
-#
-# description: Server for the puppet system management tool.
-# processname: puppetmaster
-
-PATH=/usr/bin:/sbin:/bin:/usr/sbin
-export PATH
-
-lockfile=/var/lock/subsys/puppetmaster
-
-# Source function library.
-. /etc/rc.d/init.d/functions
-
-if [ -f /etc/sysconfig/puppetmaster ]; then
-	. /etc/sysconfig/puppetmaster
-fi
-
-PUPPETMASTER_OPTS=""
-[ -n "$PUPPETMASTER_MANIFEST" ] && PUPPETMASTER_OPTS="--manifest=${PUPPETMASTER_MANIFEST}"
-if [ -n "$PUPPETMASTER_PORTS" ] && [ ${#PUPPETMASTER_PORTS[@]} -gt 1 ]; then
-    PUPPETMASTER_OPTS="$PUPPETMASTER_OPTS --servertype=mongrel"
-elif [ -n "$PUPPETMASTER_PORTS" ] && [ ${#PUPPETMASTER_PORTS[@]} -eq 1 ]; then
-    PUPPETMASTER_OPTS="${PUPPETMASTER_OPTS} --masterport=${PUPPETMASTER_PORTS[0]}" 
-fi
-[ -n "$PUPPETMASTER_LOG" ] && PUPPETMASTER_OPTS="${PUPPETMASTER_OPTS} --logdest=${PUPPETMASTER_LOG}"
-PUPPETMASTER_OPTS="${PUPPETMASTER_OPTS} \
-	${PUPPETMASTER_EXTRA_OPTS}"
-
-RETVAL=0
-
-prog=puppetmasterd
-PUPPETMASTER=/usr/sbin/$prog
-
-start() {
-	echo -n $"Starting puppetmaster: "
-
-	# Confirm the manifest exists
-	if [ -r $PUPPETMASTER_MANIFEST ]; then
-        if [ -n "$PUPPETMASTER_PORTS" ] && [ ${#PUPPETMASTER_PORTS[@]} -gt 1 ]; then
-            for ((i=0; i<${#PUPPETMASTER_PORTS[@]}; i++)); do
-                echo -en "\nPort: ${PUPPETMASTER_PORTS[$i]}"
-                daemon $PUPPETMASTER $PUPPETMASTER_OPTS --masterport=${PUPPETMASTER_PORTS[$i]} --pidfile=/var/run/puppet/puppetmaster.${PUPPETMASTER_PORTS[$i]}.pid
-                ret=$?; [ $ret != 0 ] && RETVAL=$ret
-            done
-        else
-            daemon $PUPPETMASTER $PUPPETMASTER_OPTS
-            RETVAL=$?
-        fi
-	else
-		failure $"Manifest does not exist: $PUPPETMASTER_MANIFEST"
-		echo
-		return 1
-	fi
-	[ $RETVAL -eq 0 ] && touch "$lockfile"
-	echo
-	return $RETVAL
-}
-
-stop() {
-	echo -n  $"Stopping puppetmaster: "
-    if [ -n "$PUPPETMASTER_PORTS" ] && [ ${#PUPPETMASTER_PORTS[@]} -gt 1 ]; then
-        for ((i=0; i<${#PUPPETMASTER_PORTS[@]}; i++)); do
-            echo -en "\nPort: ${PUPPETMASTER_PORTS[$i]}"
-            killproc -p /var/run/puppet/puppetmaster.${PUPPETMASTER_PORTS[$i]}.pid puppetmaster 
-            ret=$?; [ $ret != 0 ] && RETVAL=$ret
-        done
-    else
-       killproc $PUPPETMASTER
-       RETVAL=$?
-    fi
-	echo
-	[ $RETVAL -eq 0 ] && rm -f "$lockfile"
-	return $RETVAL
-}
-
-restart() {
-  stop
-  start
-}
-
-genconfig() {
-  echo -n $"Generate configuration puppetmaster: "
-  $PUPPETMASTER $PUPPETMASTER_OPTS --genconfig
-}
-
-puppetmaster_status() {
-    if [ -n "$PUPPETMASTER_PORTS" ] && [ ${#PUPPETMASTER_PORTS[@]} -gt 1 ]; then
-        for ((i=0; i<${#PUPPETMASTER_PORTS[@]}; i++)); do
-            echo -en "Port ${PUPPETMASTER_PORTS[$i]}: "
-            status -p /var/run/puppet/puppetmaster.${PUPPETMASTER_PORTS[$i]}.pid puppetmaster 
-            ret=$?; [ $ret != 0 ] && RETVAL=$ret
-        done 
-    else
-	    status $PUPPETMASTER
-        RETVAL=$?
-    fi
-    return $RETVAL
-}
-
-case "$1" in
-  start)
-	start
-	;;
-  stop) 
-	stop
-	;;
-  restart|reload|force-reload)
-        restart
-	;;
-  condrestart)
-	[ -f "$lockfile" ] && restart
-	;;
-  status)
-    puppetmaster_status
-	;;
-  genconfig)
-	genconfig
-	;;
-  *)
-	echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|genconfig}"
-	exit 1
-esac
-
-exit $RETVAL
diff --git a/conf/redhat/server.sysconfig b/conf/redhat/server.sysconfig
deleted file mode 100644
index befb40f..0000000
--- a/conf/redhat/server.sysconfig
+++ /dev/null
@@ -1,31 +0,0 @@
-# Location of the main manifest
-#PUPPETMASTER_MANIFEST=/etc/puppet/manifests/site.pp
-
-# Where to log general messages to.
-# Specify syslog to send log messages to the system log.
-#PUPPETMASTER_LOG=syslog
-
-# You may specify an alternate port or an array of ports on which 
-# puppetmaster should listen. Default is: 8140
-# If you specify more than one port, the puppetmaster ist automatically
-# started with the servertype set to mongrel. This might be interesting
-# if you'd like to run your puppetmaster in a loadbalanced cluster.
-# Please note: this won't setup nor start any loadbalancer. 
-# If you'd like to run puppetmaster with mongrel as servertype but only
-# on one (specified) port, you have to add --servertype=mongrel to
-# PUPPETMASTER_EXTRA_OPTS.
-# Default: Empty (Puppetmaster isn't started with mongrel, nor on a 
-# specific port)
-#
-# Please note: Due to reduced options in the rc-functions lib in RHEL/Centos
-# versions prior to 5, this feature won't work. Fedora versions >= 8 are 
-# known to work.
-#PUPPETMASTER_PORTS=""
-# Puppetmaster on a different port, run with standard webrick servertype
-#PUPPETMASTER_PORTS="8141"
-# Example with multiple ports which will start puppetmaster with mongrel
-# as a servertype
-#PUPPETMASTER_PORTS=( 18140 18141 18142 18143 )
-
-# You may specify other parameters to the puppetmaster here
-#PUPPETMASTER_EXTRA_OPTS=--noca
diff --git a/conf/solaris/pkginfo b/conf/solaris/pkginfo
deleted file mode 100644
index 7f7bb97..0000000
--- a/conf/solaris/pkginfo
+++ /dev/null
@@ -1,7 +0,0 @@
-PKG=CSWpuppet
-NAME=puppet - System Automation Framework
-VERSION=0.23.0
-CATEGORY=application
-VENDOR=http://reductivelabs.com/projects/puppet
-HOTLINE=http://reductivelabs.com/cgi-bin/puppet.cgi
-EMAIL=luke at madstop.com
diff --git a/conf/solaris/smf/puppetd.xml b/conf/solaris/smf/puppetd.xml
deleted file mode 100644
index ad1b452..0000000
--- a/conf/solaris/smf/puppetd.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
-
-<!-- Puppetd Manifest: Luke Kanies - reductivelabs.com -->
-
-<service_bundle type='manifest' name='puppetd'>
-
-
-<service
-	name='network/puppetd'
-	type='service'
-	version='1'>
-
-        <create_default_instance enabled='true'/>
-        <single_instance/>
-
-        <dependency name='config-file'
-                    grouping='require_all'
-                    restart_on='none'
-                    type='path'>
-                <service_fmri value='file:///etc/puppet/puppet.conf'/>
-        </dependency>
-        
-	<dependency name='loopback'
-		    grouping='require_all'
-		    restart_on='error'
-		    type='service'>
-		<service_fmri value='svc:/network/loopback:default'/>
-	</dependency>
-
-	<dependency name='physical'
-		    grouping='require_all'
-		    restart_on='error'
-		    type='service'>
-		<service_fmri value='svc:/network/physical:default'/>
-	</dependency>
-
-	<dependency name='fs-local'
-		    grouping='require_all'
-		    restart_on='none'
-		    type='service'>
-		<service_fmri value='svc:/system/filesystem/local'/>
-	</dependency>
-
-	<exec_method
-		type='method'
-		name='start'
-        exec='/opt/csw/lib/svc/method/svc-puppetd start'
-		timeout_seconds='60' />
-
-	<exec_method
-		type='method'
-		name='stop'
-        exec='/opt/csw/lib/svc/method/svc-puppetd stop'
-		timeout_seconds='60' />
-
-	<exec_method
-		type='method'
-		name='refresh'
-        exec='/opt/csw/lib/svc/method/svc-puppetd reload'
-		timeout_seconds='60' />
-
-	<stability value='Unstable' />
-
-	<template>
-		<common_name>
-			<loctext xml:lang='C'>Puppet Client Daemon</loctext>
-		</common_name>
-		<documentation>
-			<manpage title='puppetd' section='1' />
-			<doc_link name='reductivelabs.com'
-				uri='http://www.reductivelabs.com/projects/puppet' />
-		</documentation>
-	</template>
-</service>
-
-</service_bundle>
diff --git a/conf/solaris/smf/puppetmasterd.xml b/conf/solaris/smf/puppetmasterd.xml
deleted file mode 100644
index 17c5291..0000000
--- a/conf/solaris/smf/puppetmasterd.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
-
-<!-- PuppetMasterd Manifest: Luke Kanies - reductivelabs.com -->
-
-<service_bundle type='manifest' name='puppetmasterd'>
-
-
-<service
-	name='network/puppetmasterd'
-	type='service'
-	version='1'>
-
-        <create_default_instance enabled='true'/>
-        <single_instance/>
-
-        <dependency name='config-file'
-                    grouping='require_all'
-                    restart_on='none'
-                    type='path'>
-                <service_fmri value='file:///etc/puppet/puppet.conf'/>
-        </dependency>
-        
-	<dependency name='loopback'
-		    grouping='require_all'
-		    restart_on='error'
-		    type='service'>
-		<service_fmri value='svc:/network/loopback:default'/>
-	</dependency>
-
-	<dependency name='physical'
-		    grouping='require_all'
-		    restart_on='error'
-		    type='service'>
-		<service_fmri value='svc:/network/physical:default'/>
-	</dependency>
-
-	<dependency name='fs-local'
-		    grouping='require_all'
-		    restart_on='none'
-		    type='service'>
-		<service_fmri value='svc:/system/filesystem/local'/>
-	</dependency>
-
-	<exec_method
-		type='method'
-		name='start'
-        exec='/opt/csw/lib/svc/method/svc-puppetmasterd start'
-		timeout_seconds='60' />
-
-	<exec_method
-		type='method'
-		name='stop'
-        exec='/opt/csw/lib/svc/method/svc-puppetmasterd stop'
-		timeout_seconds='60' />
-
-	<exec_method
-		type='method'
-		name='refresh'
-        exec='/opt/csw/lib/svc/method/svc-puppetmasterd reload'
-		timeout_seconds='60' />
-
-	<stability value='Unstable' />
-
-	<template>
-		<common_name>
-			<loctext xml:lang='C'>Puppet Server Daemon</loctext>
-		</common_name>
-		<documentation>
-			<manpage title='puppetmasterd' section='1' />
-			<doc_link name='reductivelabs.com'
-				uri='http://www.reductivelabs.com/projects/puppet' />
-		</documentation>
-	</template>
-</service>
-
-</service_bundle>
diff --git a/conf/solaris/smf/svc-puppetd b/conf/solaris/smf/svc-puppetd
deleted file mode 100755
index a89f03f..0000000
--- a/conf/solaris/smf/svc-puppetd
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/bin/sh
-# This is the /etc/init.d file for puppetd
-# Modified for CSW
-#
-# description: puppetd - Puppet Automation Client
-#
-
-. /lib/svc/share/smf_include.sh
-
-prefix=/opt/csw
-exec_prefix=/opt/csw
-sysconfdir=/opt/csw/etc
-sbindir=/opt/csw/bin
-
-pidfile=/var/puppet/run/puppetd.pid
-
-case "$1" in
-start)
-    cd /
-    # Start daemons.
-
-    printf "Starting Puppet client services:"
-
-    /opt/csw/bin/puppetd
-
-    printf " puppetd"
-    echo ""
-    ;;
-stop)
-    printf "Stopping Puppet client services:"
-    kill `cat $pidfile`
-
-    printf " puppetd"
-    echo ""
-    ;;
-restart)
-    printf "Restarting Puppet client services:"
-    kill -HUP `cat $pidfile`
-
-    printf " puppetd"
-    echo ""
-    ;;
-reload)
-    printf "Reloading Puppet client services:"
-
-    kill -HUP `cat $pidfile`
-
-	printf " puppetd"
-	echo ""
-    ;;
-status)
-    if [ -f $pidfile ]; then
-        pid=`cat $pidfile`
-        curpid=`pgrep puppetd`
-        if [ "$pid" -eq "$curpid" ]; then
-            exit 0
-        else
-            exit 1
-        fi
-    else
-        exit 1
-    fi
-esac
-exit 0
-
-# $Id$
diff --git a/conf/solaris/smf/svc-puppetmasterd b/conf/solaris/smf/svc-puppetmasterd
deleted file mode 100755
index e1a8d85..0000000
--- a/conf/solaris/smf/svc-puppetmasterd
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/sh
-#
-
-. /lib/svc/share/smf_include.sh
-
-prefix=/opt/csw
-exec_prefix=/opt/csw
-sysconfdir=/opt/csw/etc
-sbindir=/opt/csw/sbin
-
-pidfile=/var/puppet/run/puppetmasterd.pid
-
-case "$1" in
-start)
-    cd /
-    # Start daemons.
-
-    printf "Starting Puppet server services:"
-
-    /opt/csw/bin/puppetmasterd
-
-    printf " puppetmaster"
-    echo ""
-    ;;
-stop)
-    printf "Stopping Puppet server services:"
-    kill `cat $pidfile`
-
-    printf " puppetmasterd"
-    echo ""
-    ;;
-restart)
-    printf "Restarting Puppet server services:"
-    kill -HUP `cat $pidfile`
-
-    printf " puppetmasterd"
-    echo ""
-    ;;
-reload)
-    printf "Reloading Puppet server services:"
-
-    kill -HUP `cat $pidfile`
-
-	printf " puppetmasterd"
-	echo ""
-    ;;
-status)
-    if [ -f $pidfile ]; then
-        pid=`cat $pidfile`
-        curpid=`pgrep puppetmasterd`
-        if [ "$pid" -eq "$curpid" ]; then
-            exit 0
-        else
-            exit 1
-        fi
-    else
-        exit 1
-    fi
-esac
-exit 0
-
-# $Id$
diff --git a/conf/suse/client.init b/conf/suse/client.init
deleted file mode 100644
index 1edd5ef..0000000
--- a/conf/suse/client.init
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/bin/bash
-# puppet        Init script for running the puppet client daemon
-#
-# Author:       Duane Griffin <d.griffin at psenterprise.com>
-#               David Lutterkort <dlutter at redhat.com>
-#               Martin Vuk <martin.vuk at fri.uni-lj.si> (SuSE support)
-#
-# chkconfig: - 98 02
-#
-# description: Enables periodic system configuration checks through puppet.
-# processname: puppet
-# config: /etc/sysconfig/puppet
-
-### BEGIN INIT INFO
-# Provides: puppet
-# Required-Start: $local_fs $network $syslog
-# Should-Start: 
-# Required-Stop:
-# Default-Start: 3 4 5
-# Default-Stop: 0 1 2 6
-# Short-Description: puppet
-# Description: Enables periodic system configuration checks through puppet.
-### END INIT INFO
-
-# Shell functions sourced from /etc/rc.status:
-#      rc_check         check and set local and overall rc status
-#      rc_status        check and set local and overall rc status
-#      rc_status -v     ditto but be verbose in local rc status
-#      rc_status -v -r  ditto and clear the local rc status
-#      rc_failed        set local and overall rc status to failed
-#      rc_reset         clear local rc status (overall remains)
-#      rc_exit          exit appropriate to overall rc status
-[ -f /etc/rc.status ] && . /etc/rc.status
-[ -f /etc/sysconfig/puppet ] && . /etc/sysconfig/puppet
-lockfile=${LOCKFILE-/var/lock/subsys/puppet}
-pidfile=${PIDFILE-/var/run/puppet.pid}
-puppetd=${PUPPETD-/usr/sbin/puppetd}
-
-PUPPET_OPTS=""
-[ -n "${PUPPET_SERVER}" ] && PUPPET_OPTS="--server=${PUPPET_SERVER}"
-[ -n "$PUPPET_LOG" ] && PUPPET_OPTS="${PUPPET_OPTS} --logdest=${PUPPET_LOG}"
-[ -n "$PUPPET_PORT" ] && PUPPET_OPTS="${PUPPET_OPTS} --port=${PUPPET_PORT}"
-
-# First reset status of this service
-rc_reset
-
-# Return values acc. to LSB for all commands but status:
-# 0 - success
-# 1 - misc error
-# 2 - invalid or excess args
-# 3 - unimplemented feature (e.g. reload)
-# 4 - insufficient privilege
-# 5 - program not installed
-# 6 - program not configured
-#
-# Note that starting an already running service, stopping
-# or restarting a not-running service as well as the restart
-# with force-reload (in case signalling is not supported) are
-# considered a success.
-
-case "$1" in
-    start)
-        echo -n "Starting puppet services."
-        ## Start daemon with startproc(8). If this fails
-        ## the echo return value is set appropriate.
-
-        # startproc should return 0, even if service is
-        # already running to match LSB spec.
-	startproc $puppetd ${PUPPET_OPTS} ${PUPPET_EXTRA_OPTS} && touch ${lockfile}
-        # Remember status and be verbose
-        rc_status -v
-        ;;
-    stop)
-        echo -n "Shutting down puppet:"
-        ## Stop daemon with killproc(8) and if this fails
-        ## set echo the echo return value.
-
-        killproc -QUIT $puppetd && rm -f ${lockfile} ${pidfile}
-
-        # Remember status and be verbose
-        rc_status -v
-        ;;
-    try-restart)
-        ## Stop the service and if this succeeds (i.e. the
-        ## service was running before), start it again.
-        $0 status >/dev/null &&  $0 restart
-
-        # Remember status and be quiet
-        rc_status
-        ;;
-    restart)
-        ## Stop the service and regardless of whether it was
-        ## running or not, start it again.
-        $0 stop
-        $0 start
-
-        # Remember status and be quiet
-        rc_status
-        ;;
-    force-reload)
-        ## Signal the daemon to reload its config. Most daemons
-        ## do this on signal 1 (SIGHUP).
-        ## If it does not support it, restart.
-
-        echo -n "Reload service puppet"
-        ## if it supports it:
-        killproc -HUP $puppetd
-        rc_status -v
-        ;;
-    reload)
-        ## Like force-reload, but if daemon does not support
-        ## signalling, do nothing (!)
-
-        # If it supports signalling:
-	echo -n "Reload puppet services."
-	killproc -HUP  $puppetd
-        rc_status -v
-        ;;
-    status)
-        echo -n "Checking for service puppetd: "
-        ## Check status with checkproc(8), if process is running
-        ## checkproc will return with exit status 0.
-
-        # Status has a slightly different for the status command:
-        # 0 - service running
-        # 1 - service dead, but /var/run/  pid  file exists
-        # 2 - service dead, but /var/lock/ lock file exists
-        # 3 - service not running
-
-        # NOTE: checkproc returns LSB compliant status values.
-        checkproc $puppetd
-        rc_status -v
-        ;;
-    once)
-        shift
-        $puppetd -o ${PUPPET_OPTS} ${PUPPET_EXTRA_OPTS} $@
-        ;;
-    *)
-        echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|once}"
-        exit 1
-esac
-rc_exit
diff --git a/conf/suse/puppet.spec b/conf/suse/puppet.spec
deleted file mode 100644
index f1fa0ba..0000000
--- a/conf/suse/puppet.spec
+++ /dev/null
@@ -1,223 +0,0 @@
-%{!?ruby_sitelibdir: %define ruby_sitelibdir %(ruby -rrbconfig -e 'puts Config::CONFIG["sitelibdir"]')}
-%define pbuild %{_builddir}/%{name}-%{version}
-%define suseconfdir conf/suse
-%define confdir conf/redhat
-
-Summary: A network tool for managing many disparate systems
-Name: puppet
-Version: 0.24.1
-Release: 3%{?dist}
-License: GPL
-Group: System Environment/Base
-
-URL: http://reductivelabs.com/projects/puppet/
-Source: http://reductivelabs.com/downloads/puppet/%{name}-%{version}.tgz
-Patch0: puppet.suse.patch
-Patch1: puppet.service.patch
-
-Requires: ruby >= 1.8.6
-Requires: facter >= 1.3.7
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildArchitectures: noarch
-BuildRequires: ruby >= 1.8.6
-
-%description
-Puppet lets you centrally manage every important aspect of your system using a 
-cross-platform specification language that manages all the separate elements 
-normally aggregated in different files, like users, cron jobs, and hosts, 
-along with obviously discrete elements like packages, services, and files.
-
-%package server
-Group: System Environment/Base
-Summary: Server for the puppet system management tool
-Requires: puppet = %{version}-%{release}
-
-%description server
-Provides the central puppet server daemon which provides manifests to clients.
-The server can also function as a certificate authority and file server.
-
-%prep
-%setup -q
-%patch0 -p1
-%patch1 -p1
-
-%build
-for f in bin/* ; do
- sed -i -e '1c#!/usr/bin/ruby' $f
-done
-
-%install
-%{__rm} -rf %{buildroot}
-%{__install} -d -m0755 %{buildroot}%{_sbindir}
-%{__install} -d -m0755 %{buildroot}%{_bindir}
-%{__install} -d -m0755 %{buildroot}%{ruby_sitelibdir}
-%{__install} -d -m0755 %{buildroot}%{_sysconfdir}/puppet/manifests
-%{__install} -d -m0755 %{buildroot}%{_docdir}/%{name}-%{version}
-%{__install} -d -m0755 %{buildroot}%{_localstatedir}/lib/puppet
-%{__install} -d -m0755 %{buildroot}%{_localstatedir}/run/puppet
-%{__install} -d -m0755 %{buildroot}%{_localstatedir}/log/puppet
-%{__install} -Dp -m0755 %{pbuild}/bin/* %{buildroot}%{_sbindir}
-%{__mv} %{buildroot}%{_sbindir}/puppet %{buildroot}%{_bindir}/puppet
-%{__mv} %{buildroot}%{_sbindir}/puppetrun %{buildroot}%{_bindir}/puppetrun
-%{__install} -Dp -m0644 %{pbuild}/lib/puppet.rb %{buildroot}%{ruby_sitelibdir}/puppet.rb
-%{__cp} -a %{pbuild}/lib/puppet %{buildroot}%{ruby_sitelibdir}
-find %{buildroot}%{ruby_sitelibdir} -type f -perm +ugo+x -print0 | xargs -0 -r %{__chmod} a-x
-%{__install} -Dp -m0644 %{confdir}/client.sysconfig %{buildroot}%{_sysconfdir}/sysconfig/puppet
-%{__install} -Dp -m0755 %{suseconfdir}/client.init %{buildroot}%{_initrddir}/puppet
-%{__install} -Dp -m0644 %{confdir}/server.sysconfig %{buildroot}%{_sysconfdir}/sysconfig/puppetmaster
-%{__install} -Dp -m0755 %{suseconfdir}/server.init %{buildroot}%{_initrddir}/puppetmaster
-%{__install} -Dp -m0644 %{confdir}/fileserver.conf %{buildroot}%{_sysconfdir}/puppet/fileserver.conf
-%{__install} -Dp -m0644 %{confdir}/puppet.conf %{buildroot}%{_sysconfdir}/puppet/puppet.conf
-%{__install} -Dp -m0644 %{confdir}/logrotate %{buildroot}%{_sysconfdir}/logrotate.d/puppet
-
-%files
-%defattr(-, root, root, 0755)
-%{_bindir}/puppet
-%{_sbindir}/puppetd
-%{ruby_sitelibdir}/*
-%{_initrddir}/puppet
-%config(noreplace) %{_sysconfdir}/sysconfig/puppet
-%config(noreplace) %{_sysconfdir}/puppet/puppet.conf
-%doc CHANGELOG COPYING LICENSE README TODO examples
-%exclude %{_sbindir}/puppetdoc
-%config(noreplace) %{_sysconfdir}/logrotate.d/puppet
-# These need to be owned by puppet so the server can
-# write to them
-%attr(-, puppet, puppet) %{_localstatedir}/run/puppet
-%attr(-, puppet, puppet) %{_localstatedir}/log/puppet
-%attr(-, puppet, puppet) %{_localstatedir}/lib/puppet
-
-%files server
-%defattr(-, root, root, 0755)
-%{_sbindir}/puppetmasterd
-%{_bindir}/puppetrun
-%{_initrddir}/puppetmaster
-%config(noreplace) %{_sysconfdir}/puppet/*
-%config(noreplace) %{_sysconfdir}/sysconfig/puppetmaster
-%{_sbindir}/puppetca
-
-%pre
-/usr/sbin/groupadd -r puppet 2>/dev/null || :
-/usr/sbin/useradd -g puppet -c "Puppet" \
-    -s /sbin/nologin -r -d /var/puppet puppet 2> /dev/null || :
-
-%post
-/sbin/chkconfig --add puppet
-exit 0
-
-%post server
-/sbin/chkconfig --add puppetmaster
-
-%preun
-if [ "$1" = 0 ] ; then
-	/sbin/service puppet stop > /dev/null 2>&1
-	/sbin/chkconfig --del puppet
-fi
-
-%preun server
-if [ "$1" = 0 ] ; then
-	/sbin/service puppetmaster stop > /dev/null 2>&1
-	/sbin/chkconfig --del puppetmaster
-fi
-
-%postun server
-if [ "$1" -ge 1 ]; then
-	 /sbin/service puppetmaster try-restart > /dev/null 2>&1
-fi
-
-%clean
-%{__rm} -rf %{buildroot}
-
-%changelog
-* Sat Feb 16 2008 James Turnbull <james at lovedthanlost.net> - 0.24.1-1
-- Fixed puppet configuation file references to match single puppet.conf file
-- Update versions for 0.24.1 release
- 
-* Tue Aug  3 2006 Martin Vuk <martin.vuk at fri.uni-lj.si> - 0.18.4-3
-- Replaced puppet-bin.patch with %build section from David's spec
-
-* Tue Aug  1 2006 Martin Vuk <martin.vuk at fri.uni-lj.si> - 0.18.4-2
-- Added supprot for enabling services in SuSE
- 
-* Tue Aug  1 2006 Martin Vuk <martin.vuk at fri.uni-lj.si> - 0.18.4-1
-- New version and support for SuSE
-
-* Wed Jul  5 2006 David Lutterkort <dlutter at redhat.com> - 0.18.2-1
-- New version
-
-* Wed Jun 28 2006 David Lutterkort <dlutter at redhat.com> - 0.18.1-1
-- Removed lsb-config.patch and yumrepo.patch since they are upstream now
-
-* Mon Jun 19 2006 David Lutterkort <dlutter at redhat.com> - 0.18.0-1
-- Patch config for LSB compliance (lsb-config.patch)
-- Changed config moves /var/puppet to /var/lib/puppet, /etc/puppet/ssl 
-  to /var/lib/puppet, /etc/puppet/clases.txt to /var/lib/puppet/classes.txt,
-  /etc/puppet/localconfig.yaml to /var/lib/puppet/localconfig.yaml
-
-* Fri May 19 2006 David Lutterkort <dlutter at redhat.com> - 0.17.2-1
-- Added /usr/bin/puppetrun to server subpackage
-- Backported patch for yumrepo type (yumrepo.patch)
-
-* Wed May  3 2006 David Lutterkort <dlutter at redhat.com> - 0.16.4-1
-- Rebuilt
-
-* Fri Apr 21 2006 David Lutterkort <dlutter at redhat.com> - 0.16.0-1
-- Fix default file permissions in server subpackage
-- Run puppetmaster as user puppet
-- rebuilt for 0.16.0
-
-* Mon Apr 17 2006 David Lutterkort <dlutter at redhat.com> - 0.15.3-2
-- Don't create empty log files in post-install scriptlet
-
-* Fri Apr  7 2006 David Lutterkort <dlutter at redhat.com> - 0.15.3-1
-- Rebuilt for new version
-
-* Wed Mar 22 2006 David Lutterkort <dlutter at redhat.com> - 0.15.1-1
-- Patch0: Run puppetmaster as root; running as puppet is not ready 
-  for primetime
-
-* Mon Mar 13 2006 David Lutterkort <dlutter at redhat.com> - 0.15.0-1
-- Commented out noarch; requires fix for bz184199
-
-* Mon Mar  6 2006 David Lutterkort <dlutter at redhat.com> - 0.14.0-1
-- Added BuildRequires for ruby
-
-* Wed Mar  1 2006 David Lutterkort <dlutter at redhat.com> - 0.13.5-1
-- Removed use of fedora-usermgmt. It is not required for Fedora Extras and
-  makes it unnecessarily hard to use this rpm outside of Fedora. Just
-  allocate the puppet uid/gid dynamically
-
-* Sun Feb 19 2006 David Lutterkort <dlutter at redhat.com> - 0.13.0-4
-- Use fedora-usermgmt to create puppet user/group. Use uid/gid 24. Fixed 
-problem with listing fileserver.conf and puppetmaster.conf twice
-
-* Wed Feb  8 2006 David Lutterkort <dlutter at redhat.com> - 0.13.0-3
-- Fix puppetd.conf
-
-* Wed Feb  8 2006 David Lutterkort <dlutter at redhat.com> - 0.13.0-2
-- Changes to run puppetmaster as user puppet
-
-* Mon Feb  6 2006 David Lutterkort <dlutter at redhat.com> - 0.13.0-1
-- Don't mark initscripts as config files
-
-* Mon Feb  6 2006 David Lutterkort <dlutter at redhat.com> - 0.12.0-2
-- Fix BuildRoot. Add dist to release
-
-* Tue Jan 17 2006 David Lutterkort <dlutter at redhat.com> - 0.11.0-1
-- Rebuild
-
-* Thu Jan 12 2006 David Lutterkort <dlutter at redhat.com> - 0.10.2-1
-- Updated for 0.10.2 Fixed minor kink in how Source is given
-
-* Wed Jan 11 2006 David Lutterkort <dlutter at redhat.com> - 0.10.1-3
-- Added basic fileserver.conf
-
-* Wed Jan 11 2006 David Lutterkort <dlutter at redhat.com> - 0.10.1-1
-- Updated. Moved installation of library files to sitelibdir. Pulled 
-initscripts into separate files. Folded tools rpm into server
-
-* Thu Nov 24 2005 Duane Griffin <d.griffin at psenterprise.com>
-- Added init scripts for the client
-
-* Wed Nov 23 2005 Duane Griffin <d.griffin at psenterprise.com>
-- First packaging
diff --git a/conf/suse/server.init b/conf/suse/server.init
deleted file mode 100644
index 34200af..0000000
--- a/conf/suse/server.init
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/bin/bash
-# puppetmaster  This shell script enables the puppetmaster server.
-#
-# Author:       Duane Griffin <d.griffin at psenterprise.com>
-#               Martin Vuk <martin.vuk at fri.uni-lj.si> (SuSE support)
-#
-# chkconfig: - 65 45
-#
-# description: Server for the puppet system management tool.
-# processname: puppetmaster
-
-### BEGIN INIT INFO
-# Provides: puppetmaster
-# Required-Start: $local_fs $network $syslog
-# Should-Start: 
-# Required-Stop:
-# Default-Start: 3 4 5
-# Default-Stop: 0 1 2 6
-# Short-Description: puppetmaster
-# Description: Server for the puppet system management tool.
-### END INIT INFO
-
-# Shell functions sourced from /etc/rc.status:
-#      rc_check         check and set local and overall rc status
-#      rc_status        check and set local and overall rc status
-#      rc_status -v     ditto but be verbose in local rc status
-#      rc_status -v -r  ditto and clear the local rc status
-#      rc_failed        set local and overall rc status to failed
-#      rc_reset         clear local rc status (overall remains)
-#      rc_exit          exit appropriate to overall rc status
-
-lockfile=/var/lock/subsys/puppetmaster
-pidfile=/var/run/puppet/puppetmasterd.pid
-
-# Source function library.
-[ -f /etc/rc.status ] && . /etc/rc.status
-
-if [ -f /etc/sysconfig/puppetmaster ]; then
-	. /etc/sysconfig/puppetmaster
-fi
-
-[ -z "$PUPPETMASTER_MANIFEST" ] && PUPPETMASTER_MANIFEST=/etc/puppet/manifests/site.pp
-[ -z "$PUPPETMASTER_LOG" ] && PUPPETMASTER_LOG="/var/log/puppet/puppetmaster.log"
-PUPPETMASTER_OPTS="
-	--manifest=$PUPPETMASTER_MANIFEST \
-	--logdest=${PUPPETMASTER_LOG} \
-	${PUPPETMASTER_EXTRA_OPTS}"
-PUPPET_OPTS=""
-[ -n "${PUPPET_SERVER}" ] && PUPPET_OPTS="--server=${PUPPET_SERVER}"
-[ -n "$PUPPET_LOG" ] && PUPPET_OPTS="${PUPPET_OPTS} --logdest=${PUPPET_LOG}"
-[ -n "$PUPPET_PORT" ] && PUPPET_OPTS="${PUPPET_OPTS} --port=${PUPPET_PORT}"
-
-prog=puppetmasterd
-PUPPETMASTER=/usr/sbin/$prog
-
-start() {
-	echo -n $"Starting puppetmaster: "
-
-	echo
-	return $RETVAL
-}
-# First reset status of this service
-rc_reset
-
-# Return values acc. to LSB for all commands but status:
-# 0 - success
-# 1 - misc error
-# 2 - invalid or excess args
-# 3 - unimplemented feature (e.g. reload)
-# 4 - insufficient privilege
-# 5 - program not installed
-# 6 - program not configured
-#
-# Note that starting an already running service, stopping
-# or restarting a not-running service as well as the restart
-# with force-reload (in case signalling is not supported) are
-# considered a success.
-
-case "$1" in
-    start)
-        echo -n "Starting puppetmaster services."
-        ## Start daemon with startproc(8). If this fails
-        ## the echo return value is set appropriate.
-
-        # startproc should return 0, even if service is
-        # already running to match LSB spec.
-	# Confirm the manifest exists
-	if [ -r $PUPPETMASTER_MANIFEST ]; then
-		startproc $PUPPETMASTER $PUPPETMASTER_OPTS && touch "$lockfile"
-	else
-		rc_failed 
-		echo "Manifest does not exist: $PUPPETMASTER_MANIFEST"
-	fi
-        # Remember status and be verbose
-        rc_status -v
-        ;;
-    stop)
-        echo -n "Shutting down puppetmaster:"
-        ## Stop daemon with killproc(8) and if this fails
-        ## set echo the echo return value.
-
-        killproc -QUIT $PUPPETMASTER && rm -f ${lockfile} ${pidfile}
-
-        # Remember status and be verbose
-        rc_status -v
-        ;;
-    try-restart)
-        ## Stop the service and if this succeeds (i.e. the
-        ## service was running before), start it again.
-        $0 status >/dev/null &&  $0 restart
-
-        # Remember status and be quiet
-        rc_status
-        ;;
-    restart)
-        ## Stop the service and regardless of whether it was
-        ## running or not, start it again.
-        $0 stop
-        $0 start
-
-        # Remember status and be quiet
-        rc_status
-        ;;
-    force-reload)
-        ## Signal the daemon to reload its config. Most daemons
-        ## do this on signal 1 (SIGHUP).
-        ## If it does not support it, restart.
-
-        echo -n "Reload service puppet"
-        ## if it supports it:
-        killproc -HUP $PUPPETMASTER
-        rc_status -v
-        ;;
-    reload)
-        ## Like force-reload, but if daemon does not support
-        ## signalling, do nothing (!)
-
-        # If it supports signalling:
-	echo -n "Reload puppet services."
-	killproc -HUP  $PUPPETMASTER
-        rc_status -v
-        ;;
-    status)
-        echo -n "Checking for service puppetmaster: "
-        ## Check status with checkproc(8), if process is running
-        ## checkproc will return with exit status 0.
-
-        # Status has a slightly different for the status command:
-        # 0 - service running
-        # 1 - service dead, but /var/run/  pid  file exists
-        # 2 - service dead, but /var/lock/ lock file exists
-        # 3 - service not running
-
-        # NOTE: checkproc returns LSB compliant status values.
-        checkproc $PUPPETMASTER
-        rc_status -v
-        ;;
-    *)
-        echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
-        exit 1
-esac
-rc_exit
diff --git a/examples/allatonce b/examples/allatonce
deleted file mode 100644
index 8912ec4..0000000
--- a/examples/allatonce
+++ /dev/null
@@ -1,13 +0,0 @@
-# $Id$
-
-define thingie {
-    file { "/tmp/classtest": ensure => file, mode => 755 }
-    #testing {}
-}
-
-class testing {
-    thingie { "componentname": }
-}
-
-#component {}
-testing { "testingname": }
diff --git a/examples/assignments b/examples/assignments
deleted file mode 100644
index 3edcef8..0000000
--- a/examples/assignments
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-$goodness = sunos
-
-$subvariable = $goodness
-
-$yayness = "this is a string of text"
-
-#$sleeper = service { sleeper:
-#    running => "1"
-#}
diff --git a/examples/components b/examples/components
deleted file mode 100644
index 3da43c5..0000000
--- a/examples/components
+++ /dev/null
@@ -1,73 +0,0 @@
-# $Id$
-
-# i still have no 'require'-like functionality, and i should also
-# have 'recommend'-like functionality...
-define apache(php,docroot,user,group) {
-    package { apache:
-        version => "2.0.53"
-    }
-    service { apache:
-        running => true
-    }
-
-
-    # this definitely won't parse
-    #if $php == "true" {
-    #    # this needs to do two things:
-    #    # - mark a dependency
-    #    # - cause this apache component to receive refresh events generated by php
-    #    #require("php")
-    #    $var = value
-    #}
-
-    #file { "../examples/root/etc/configfile":
-    #    owner => $user
-    #}
-}
-
-define sudo() {
-    package { sudo:
-        version => "1.6.8p7"
-    }
-    file { "/etc/sudoers":
-        owner => root,
-        group => root,
-        mode => "440"
-    }
-}
-
-define ssh {
-    package { ssh:
-        version => "3.4.4.4"
-    }
-    service { "sshd":
-        running => true
-    }
-}
-
-define sleeper(path,mode) {
-    Service {
-        path => "../examples/root/etc/init.d"
-    }
-
-    service { sleeper:
-        running => true,
-        path => "../examples/root/etc/init.d"
-    }
-    file { $path:
-        mode => $mode
-    }
-    $files = ["/tmp/testness","/tmp/funtest"]
-    file { $files:
-        ensure => file
-    }
-}
-
-#apache { "test":
-#    php => false,
-#    docroot => "/export/html",
-#    user => "www-data",
-#    group => "www-data"
-#}
-
-#ssh { "yucko":}
diff --git a/examples/etc/init.d/sleeper b/examples/etc/init.d/sleeper
deleted file mode 100755
index 6da5eae..0000000
--- a/examples/etc/init.d/sleeper
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-
-# $Id$
-
-script=$0
-path=`echo $script | sed 's/etc..*/bin/'`
-
-PATH=$PATH:$path
-
-ps=`facter ps`
-
-if [ -z "$ps" ]; then
-    ps="ps -ef"
-fi
-
-function start
-{
-    cd $path
-    ./sleeper
-}
-
-function stop
-{
-    #if [ -n `which pgrep` ]; then
-    #    pid=`pgrep sleeper`
-    #else
-        pid=`$ps | grep -v grep | grep sleeper | grep ruby | awk '{print $2}'`
-    #fi
-    if [ -n "$pid" ]; then
-        kill $pid
-    fi
-}
-
-function restart
-{
-    stop
-    start
-}
-
-function status
-{
-    #if [ -n `which pgrep` ]; then
-    #    cmd="pgrep sleeper"
-    #else
-        #cmd="$ps | grep -v grep | grep sleeper | grep ruby | awk '{print $2}'"
-    #fi
-    #$cmd
-    $ps | grep -v grep | grep sleeper | grep ruby
-}
-
-case "$1" in
-    start)
-        start
-	;;
-    stop)
-        stop
-	;;
-    restart)
-        stop; start
-	;;
-    status)
-        output=`status`
-        #status
-        exit $?
-	;;
-  *)
-	echo "Usage: $N {start|stop|restart|force-reload}" >&2
-	exit 1
-	;;
-esac
-
-exit 0
diff --git a/examples/etc/otherfile b/examples/etc/otherfile
deleted file mode 100644
index e69de29..0000000
diff --git a/examples/etc/puppet/fileserver.conf b/examples/etc/puppet/fileserver.conf
deleted file mode 100644
index 32dfcdd..0000000
--- a/examples/etc/puppet/fileserver.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-# $Id$
-
-[dist]
-    path /dist
-    allow *.madstop.com
-
-[plugins]
-    path /var/puppet/plugins
-    allow *.madstop.com
-
-[facts]
-    path /var/puppet/facts
-    allow *.madstop.com
diff --git a/examples/etc/puppet/namespaceauth.conf b/examples/etc/puppet/namespaceauth.conf
deleted file mode 100644
index fb08d42..0000000
--- a/examples/etc/puppet/namespaceauth.conf
+++ /dev/null
@@ -1,20 +0,0 @@
-# This file is only necessary if your clients listen.
-# Note that it affects all puppet daemons, including puppetmasterd,
-# which is why puppetmaster is in there.
-[fileserver]
-    allow *.madstop.com
-
-[puppetmaster]
-    allow *.madstop.com
-
-[pelementserver]
-    allow puppet.madstop.com
-
-[puppetrunner]
-    allow culain.madstop.com
-
-[puppetbucket]
-    allow *.madstop.com
-
-[puppetreports]
-    allow *.madstop.com
diff --git a/examples/etc/puppet/puppet.conf b/examples/etc/puppet/puppet.conf
deleted file mode 100644
index 151364e..0000000
--- a/examples/etc/puppet/puppet.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-[puppetd]
-report = true
-factsync = true
-pluginsync = true
-
-[puppetmasterd]
-reports = store,rrdgraph,tagmail,log
-node_terminus = ldap
-ldapserver = culain.madstop.com
-ldapbase = dc=madstop,dc=com
diff --git a/examples/etc/puppet/tagmail.conf b/examples/etc/puppet/tagmail.conf
deleted file mode 100644
index 31c77f4..0000000
--- a/examples/etc/puppet/tagmail.conf
+++ /dev/null
@@ -1 +0,0 @@
-all: user at domain.com
diff --git a/examples/execs b/examples/execs
deleted file mode 100644
index 44f1330..0000000
--- a/examples/execs
+++ /dev/null
@@ -1,16 +0,0 @@
-$path = "/usr/bin:/bin"
-
-exec { "mkdir -p /tmp/fakedir":
-    path => $path
-}
-
-exec { "rm -rf /tmp/fakedir":
-    path => $path
-}
-
-exec { "touch /this/directory/does/not/exist":
-    path => $path,
-    returns => 1
-}
-
-
diff --git a/examples/file.bl b/examples/file.bl
deleted file mode 100644
index ef46ba2..0000000
--- a/examples/file.bl
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-file {
-    "/tmp/atest": ensure => file, mode => 755;
-    "/tmp/btest": ensure => file, mode => 755
-}
-
-file {
-    "/tmp/ctest": ensure => file;
-    "/tmp/dtest": ensure => file;
-}
diff --git a/examples/filedefaults b/examples/filedefaults
deleted file mode 100644
index 56cf76a..0000000
--- a/examples/filedefaults
+++ /dev/null
@@ -1,10 +0,0 @@
-# $Id$
-
-File {
-    mode => 755,
-    recurse => true
-}
-
-file { "/tmp/filedefaultstest":
-    ensure => file
-}
diff --git a/examples/fileparsing b/examples/fileparsing
deleted file mode 100644
index f9766b9..0000000
--- a/examples/fileparsing
+++ /dev/null
@@ -1,116 +0,0 @@
-# $Id$
-
-# this will eventually parse different config files
-
-# this creates the 'passwd' type, but it does not create any instances
-filetype { "passwd":
-    linesplit => "\n",
-    escapednewlines => false
-}
-
-
-# this creates the 'PasswdUser' type, but again, no instances
-filerecord { "user":
-    filetype => passwd,
-    fields => [name, password, uid, gid, gcos, home, shell],
-    namevar => name,
-    splitchar => ":"
-
-}
-
-filetype { ini:
-    linesplit => "\n\n"
-}
-
-# ini files are different because we don't really care about validating fields
-# or at least, we can't do it for most files...
-filerecord { "initrecord":
-    filetype => ini,
-    fields => [name, password, uid, gid, gcos, home, shell],
-    namevar => name,
-    splitchar => ":"
-
-}
-
-# this won't work for multiple record types, will it?
-# or at least, it requires that we specify multiple times
-# ah, and it doesn't specify which of the available record types
-# it works for...
-passwd { user:
-    complete => true, # manage the whole file
-    path => "/etc/passwd"
-}
-
-user { yaytest:
-    password => x,
-    uid => 10000,
-    gid => 10000,
-    home => "/home/yaytest",
-    gcos => "The Yaytest",
-    shell => "/bin/sh"
-}
-    # there seems to be an intrinsic problem here -- i've got subtypes that only
-    # make sense when an instance of the super type already exists, and i need
-    # to associate the instances of the subtype with the instances of the supertype
-    # even if i created the parsers manually, I'd have the same problem
-
-# this is the crux of it -- i want to be able to say 'user' here without having
-# to specify the file, which leaves two options:
-#   1) associate the record type with a filetype instance (BAD)
-#   2) once the filetype and record type are created, have another command
-#       that specifically creates a filetype instance and gives names for instances
-#       of its record types
-
-define syslog {
-
-    # create a new type, with all defaults
-    filetype { "syslog":
-        escapednewlines => true
-    }
-
-    filerecord { "log":
-        filetype => syslog,
-        regex => "^([^#\s]+)\s+(\S+)$",
-        joinchar => "\t",
-        fields => [logs, dest]
-    }
-
-    # these two should just be supported within the filetypes
-    filerecord { "comment":
-        filetype => syslog,
-        regex => "^(#.*)$",
-        joinchar => "s",
-        fields => [comment]
-    }
-
-    filerecord { "blank":
-        filetype => syslog,
-        regex => "^(\s*)$",
-        joinchar => "s",
-        fields => blank
-    }
-}
-
-define cron {
-    filetype { "usercrontab":
-    }
-
-    # this won't actually work, of course
-    filerecord { "cronjob":
-        filetype => crontab,
-        regex => "^([^#\s]+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.+)$",
-        joinchar => " ",
-        fields => [minute, hour, day, month, weekday, command],
-        defaults => ["*", "*", "*", "*", "*", nil],
-        optional => [minute, hour, day, month, weekday]
-    }
-
-    crontab { "luke":
-    }
-}
-
-# XXX this doesn't work in the slightest
-define crontab(name,path) {
-    usercrontab { "${path}/${name}":
-    }
-}
diff --git a/examples/filerecursion b/examples/filerecursion
deleted file mode 100644
index b7d8278..0000000
--- a/examples/filerecursion
+++ /dev/null
@@ -1,15 +0,0 @@
-# $Id$
-
-file { "/tmp/dirtest/b/a":
-    mode => 755,
-}
-
-file { "/tmp/dirtest":
-    mode => 755,
-    recurse => true,
-}
-
-file { "/tmp/dirtest/b/b":
-    mode => 644,
-}
-
diff --git a/examples/functions b/examples/functions
deleted file mode 100644
index 8e95c3a..0000000
--- a/examples/functions
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-$yaytest = fact("operatingsystem")
diff --git a/examples/groups b/examples/groups
deleted file mode 100644
index 35505a2..0000000
--- a/examples/groups
+++ /dev/null
@@ -1,7 +0,0 @@
-# $Id$
-
-# there need to be two forms of adding to groups:
-# add the current host to a group, and add a list of hosts to a
-# group by name
-
-$group = "crap"
diff --git a/examples/head b/examples/head
deleted file mode 100644
index 59cbb65..0000000
--- a/examples/head
+++ /dev/null
@@ -1,30 +0,0 @@
-# $Id$
-
-# this file is responsible for importing all of the files we want to actually test
-
-# these are all of the simple tests
-import "simpletests"
-import "assignments"
-import "selectors"
-#import "iftest"
-import "importing"
-import "execs"
-import "filedefaults"
-
-# facts are now imported into the top of the namespace
-#import "facts"
-
-# obsoleted
-#import "functions"
-
-# files we no longer need to import directly, or at all in some cases
-#import "one"
-#import "classing"
-#import "components"
-#import "file.bl"
-#import "fileparsing.disabled"
-#import "groups"
-
-# this imports the more complex files
-import "allatonce" # imports classing and components
-import "nodes" # imports classing and components
diff --git a/examples/importing b/examples/importing
deleted file mode 100644
index f026041..0000000
--- a/examples/importing
+++ /dev/null
@@ -1,8 +0,0 @@
-# $Id$
-
-#import "groups"
-# testing import loops
-import "importing"
-
-$name = "value"
-$system = $operatingsystem
diff --git a/examples/mac_automount.pp b/examples/mac_automount.pp
deleted file mode 100644
index bab0136..0000000
--- a/examples/mac_automount.pp
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env puppet
-# Jeff McCune <mccune at math.ohio-state.edu>
-#
-# Apple's Automounter spawns a child that sends the parent
-# a SIGTERM.  This makes it *very* difficult to figure out
-# if the process started correctly or not.
-#
-
-service {"automount-test":
-    provider => base,
-    hasrestart => false,
-    pattern => '/tmp/hometest',
-    start => "/usr/sbin/automount -m /tmp/home /dev/null -mnt /tmp/hometest",
-    stop => "ps auxww | grep '/tmp/hometest' | grep -v grep | awk '{print \$2}' | xargs kill",
-    ensure => running
-}
diff --git a/examples/mac_dscl.pp b/examples/mac_dscl.pp
deleted file mode 100755
index ff59f9d..0000000
--- a/examples/mac_dscl.pp
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env puppet --debug --verbose --trace
-#
-# Jeff McCune: I use this for developing and testing the directory service
-#              provider.
-
-User  { provider => "directoryservice" }
-Group { provider => "directoryservice" }
-
-user {
-    "testgone": 
-        ensure => absent,
-        uid => 550;
-    "testhere":
-        ensure => present,
-        password => "foobar",
-        shell => "/bin/bash",
-        uid => 551;
-}
-
-group {
-    "testgone":
-        ensure => absent,
-        gid => 550;
-    "testhere":
-        ensure => present,
-        gid => 551;
-
-}
\ No newline at end of file
diff --git a/examples/mac_dscl_revert.pp b/examples/mac_dscl_revert.pp
deleted file mode 100755
index c9bd2b5..0000000
--- a/examples/mac_dscl_revert.pp
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env puppet --debug --verbose --trace
-#
-# Jeff McCune: I use this for developing and testing the directory service
-#              provider.
-
-User  { provider => "directoryservice" }
-Group { provider => "directoryservice" }
-
-user {
-    "testgone": 
-        ensure => absent,
-        uid => 550;
-    "testhere":
-        ensure => absent,
-        uid => 551;
-}
-
-group {
-    "testgone":
-        ensure => absent,
-        gid => 550;
-    "testhere":
-        ensure => absent,
-        gid => 551;
-
-}
diff --git a/examples/mac_netinfo.pp b/examples/mac_netinfo.pp
deleted file mode 100755
index 544b648..0000000
--- a/examples/mac_netinfo.pp
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env puppet --debug
-
-user {
-    "jmccune": provider => "netinfo", ensure => present;
-}
diff --git a/examples/mac_pkgdmg.pp b/examples/mac_pkgdmg.pp
deleted file mode 100755
index a2499e8..0000000
--- a/examples/mac_pkgdmg.pp
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env puppet
-#
-
-package
-{
-    "Foobar.pkg.dmg": ensure => present, provider => pkgdmg;
-}
diff --git a/examples/modules/sample-module.pp b/examples/modules/sample-module.pp
deleted file mode 100644
index 57079a0..0000000
--- a/examples/modules/sample-module.pp
+++ /dev/null
@@ -1,10 +0,0 @@
-# Jeff McCune <jeff.mccune at northstarlabs.net>
-# 2007-08-14
-#
-# Use:
-# puppet --verbose --debug --modulepath=`pwd` ./sample-module.pp
-#
-# sample-module demonstrates the use of a custom language function
-# included within the module bundle.
-
-include sample-module
diff --git a/examples/modules/sample-module/README.txt b/examples/modules/sample-module/README.txt
deleted file mode 100644
index ee4b820..0000000
--- a/examples/modules/sample-module/README.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-Jeff McCune <jeff.mccune at northstarlabs.net>
-2007-08-14
-
-This small, sample module demonstrates how to extend the puppet language
-with a new parser function.
-
-See:
-manifests/init.pp
-lib/puppet/parser/functions/hostname_to_dn.rb
-templates/sample.erb
-
-Note the consistent naming of files for Puppet::Util::Autoload
-
-Reference Documents:
-http://reductivelabs.com/trac/puppet/wiki/ModuleOrganisation
-http://reductivelabs.com/trac/puppet/wiki/WritingYourOwnFunctions
-http://reductivelabs.com/trac/puppet/wiki/FunctionReference
diff --git a/examples/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb b/examples/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb
deleted file mode 100644
index 9f732b5..0000000
--- a/examples/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) David Schmitt <david at schmitt.edv-bus.at>
-# All rights reserved.
-# 
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-# 3. Neither the name of the Author nor the names of its contributors
-#    may be used to endorse or promote products derived from this software
-#    without specific prior written permission.
-# 
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 REGENTS 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.
-
-# Jeff McCune <jeff.mccune at northstarlabs.net>
-# 2007-08-14
-# See: http://reductivelabs.com/trac/puppet/wiki/WritingYourOwnFunctions
-
-module Puppet::Parser::Functions
-	newfunction(:hostname_to_dn, :type => :rvalue, :doc => "Given 'foo.bar.com', return 'dc=foo,dc=bar,dc=com'.") do |args|
-		args[0].split(/\./).map do |s| "dc=%s"%[s] end.join(",")
-	end
-end
diff --git a/examples/modules/sample-module/manifests/init.pp b/examples/modules/sample-module/manifests/init.pp
deleted file mode 100644
index 1af8dff..0000000
--- a/examples/modules/sample-module/manifests/init.pp
+++ /dev/null
@@ -1,12 +0,0 @@
-# Jeff McCune <jeff.mccune at northstarlabs.net>
-# 
-# Demonstration of a custom parser function and erb template within
-# a module, working in concert.
-
-class sample-module {
-  $fqdn_to_dn = hostname_to_dn($domain)
-  $sample_template = template("sample-module/sample.erb")
-  
-  notice("hostname_to_dn module function returned: [$fqdn_to_dn]")
-  info("sample.erb looks like:\n$sample_template")
-}
diff --git a/examples/modules/sample-module/templates/sample.erb b/examples/modules/sample-module/templates/sample.erb
deleted file mode 100644
index b13561b..0000000
--- a/examples/modules/sample-module/templates/sample.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-
-## Jeff McCune <jeff.mccune at northstarlabs.net>
-fqdn:   <%= fqdn %>
-basedn: <%= fqdn_to_dn %>
-## end sample.erb ##
diff --git a/examples/nodes b/examples/nodes
deleted file mode 100644
index 42488e6..0000000
--- a/examples/nodes
+++ /dev/null
@@ -1,20 +0,0 @@
-# $Id$
-
-# define nodes
-
-#service.setpath("../examples/root/etc/init.d")
-
-Service {
-    path => "../examples/root/etc/init.d"
-}
-
-import "classing"
-
-sleepserver {
-    path => $operatingsystem ? {
-        sunos => "../examples/root/etc/configfile",
-        hpux => "../examples/other/etc/configfile",
-        default => "../examples/root/etc/configfile"
-    },
-    schedule => true
-}
diff --git a/examples/one b/examples/one
deleted file mode 100644
index 452d32f..0000000
--- a/examples/one
+++ /dev/null
@@ -1,8 +0,0 @@
-# $Id$
-
-# this service doesn't actually exist, so we noop it
-# and this way, we can test noop :)
-service { "funtest":
-    running => "0",
-    noop => true
-}
diff --git a/examples/relationships b/examples/relationships
deleted file mode 100644
index 7957889..0000000
--- a/examples/relationships
+++ /dev/null
@@ -1,34 +0,0 @@
-# $Id$
-
-#service.setpath("../examples/root/etc/init.d")
-#puppet.statefile("/tmp/puppetstate")
-$path = "../examples/root/etc/configfile"
-    path => "../examples/root/etc/init.d"
-
-
-define files {
-    file { "/tmp/yaytest":
-        ensure => file,
-        mode => 755
-    }
-    file { "/tmp/exists":
-        checksum => md5
-    }
-}
-
-define sleeper {
-    file { $path:
-        mode => 755
-    }
-    service { sleeper:
-        path => "../examples/root/etc/init.d",
-        running => 1
-    }
-}
-
-files { }
-
-sleeper { 
-    require => files["yay"],
-    schedule => true
-}
diff --git a/examples/selectors b/examples/selectors
deleted file mode 100644
index a70399b..0000000
--- a/examples/selectors
+++ /dev/null
@@ -1,28 +0,0 @@
-# $Id$
-#
-
-$platform = SunOS
-
-$funtest = $platform ? {
-    SunOS => yayness,
-    AIX => goodness,
-    default => badness
-}
-
-# this is a comment
-
-$filename = "/tmp/yayness"
-
-$sleeper = file { $filename:
-    mode => $platform ? {
-        SunOS => 644,
-        default => 755
-    },
-    create => $platform ? "SunOS" => true
-}
-
-# i guess it has to be solved this way...
-
-#$platform ? sunos => file { $filename:
-#    mode => 644
-#}
diff --git a/examples/simpletests b/examples/simpletests
deleted file mode 100644
index b4fd323..0000000
--- a/examples/simpletests
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-file {
-    "/tmp/atest": ensure => file;
-    "/tmp/btest": ensure => file
-}
-
-file {
-    "/tmp/ctest": ensure => file;
-    "/tmp/dtest": ensure => file;
-}
diff --git a/examples/svncommit b/examples/svncommit
deleted file mode 100644
index 350cd85..0000000
--- a/examples/svncommit
+++ /dev/null
@@ -1,13 +0,0 @@
-$path = "/usr/bin:/bin"
-
-file { "/tmp/svntests":
-    recurse => true,
-    checksum => md5
-}
-
-exec { "echo 'files have been updated'":
-    cwd => "/tmp/svntests",
-    refreshonly => true,
-    require => file["/tmp/svntests"],
-    path => $path
-}
diff --git a/ext/autotest/Rakefile b/ext/autotest/Rakefile
deleted file mode 100644
index 86327c0..0000000
--- a/ext/autotest/Rakefile
+++ /dev/null
@@ -1,8 +0,0 @@
-dest = File.expand_path("~/.autotest")
-file dest => ["config", "Rakefile"] do
-    sh "cp config #{dest}"
-end
-
-task :install => dest
-
-task :default => :install
diff --git a/ext/autotest/config b/ext/autotest/config
deleted file mode 100644
index d37c1b2..0000000
--- a/ext/autotest/config
+++ /dev/null
@@ -1,43 +0,0 @@
-# vim: syntax=ruby
-# From http://pastie.caboo.se/115692, linked from rickbradley
-
-require 'autotest/redgreen'
-require 'autotest/timestamp'
-
-Autotest.send(:alias_method, :real_find_files, :find_files)
-Autotest.send(:define_method, :find_files) do |*args| 
-  real_find_files.reject do |k, v|
-    if (ENV['AUTOTEST'] and !ENV['AUTOTEST'].empty?)
-      !Regexp.new(ENV['AUTOTEST']).match(k)
-    end
-  end
-end
-
-module Autotest::Growl
-
-  def self.growl title, msg, img, pri=0, sticky="" 
-    system "growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}" 
-  end
-
-  Autotest.add_hook :ran_command do |at|
-    image_root = "~/.autotest_images" 
-    results = [at.results].flatten.join("\n")
-    output = results.slice(/(\d+)\stests,\s(\d+)\sassertions,\s(\d+)\sfailures,\s(\d+)\serrors/)
-    if output
-      if $~[3].to_i > 0 || $~[4].to_i > 0
-        growl "FAIL", "#{output}", "#{image_root}/fail.png", 2
-      else
-        growl "Pass", "#{output}", "#{image_root}/pass.png" 
-      end
-    end
-
-    output = results.slice(/(\d+)\sexamples,\s(\d+)\sfailures?(,\s+\d+\s+pending)?/)
-    if output
-      if $~[2].to_i > 0 || $~[4].to_i > 0
-        growl "FAIL", "#{output}", "#{image_root}/fail.png", 2
-      else
-        growl "Pass", "#{output}", "#{image_root}/pass.png" 
-      end
-    end
-  end
-end
diff --git a/ext/autotest/readme.rst b/ext/autotest/readme.rst
deleted file mode 100644
index 93d9ed2..0000000
--- a/ext/autotest/readme.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-Autotest is a simple tool that automatically links tests with the files being
-tested, and runs tests automatically when either the test or code has changed.
-
-If you are running on a Mac and have growlnotify_ installed, install the
-ZenTest_ gem, then copy the ``config`` file to ``~/.autotest`` (or just
-run ``rake`` in this directory).
-
-Once you have ``autotest`` installed, change to the root of your Puppet
-git repository and run ``autotest`` with no arguments.  To refresh the list
-of files to scan, hit ``^c`` (that is, control-c).
-
-It's recommended you leave this running in another terminal during all
-development, preferably on another monitor.
-
-.. _zentest: http://www.zenspider.com/ZSS/Products/ZenTest/
-.. _growlnotify: http://growl.info/extras.php
diff --git a/ext/bin/sleeper b/ext/bin/sleeper
deleted file mode 100755
index 980d66a..0000000
--- a/ext/bin/sleeper
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env ruby -w
-
-###
-# sleep indefinitely as a debug
-
-require 'getoptlong'
-
-#-----------------------------------------------------------------
-def daemonize
-     outfile = "/tmp/sleeperout"
-     if pid = fork()
-        Process.detach(pid)
-        sleep 1
-        # verify that we didn't have any problems starting the daemon
-        if FileTest.exists?(outfile)
-            $stderr.puts "Sleeper failed: %s" % File.read(outfile)
-            File.unlink(outfile)
-            exit(14)
-        else
-            exit(0)
-        end
-     end
-     Process.setsid
-     Dir.chdir("/")
-     begin
-         $stdin.reopen "/dev/null"
-         $stdout.reopen "/dev/null", "a"
-         $stderr.reopen $stdin
-     rescue => detail
-        File.open(outfile, "w") { |f|
-            f.puts detail
-        }
-        exit(12)
-     end
-end
-#-----------------------------------------------------------------
-
-debug = false
-
-result = GetoptLong.new(
-	[ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-	[ "--help",		"-h",			GetoptLong::NO_ARGUMENT ]
-)
-
-result.each { |opt,arg|
-	case opt
-		when "--help"
-			puts "There is no help yet"
-			exit
-		when "--debug"
-			debug = true
-		else
-			raise "Invalid option '#{opt}'"
-	end
-}
-
-trap(:INT) {
-    exit
-}
-
-unless debug
-	daemonize()
-end
-
-# Sleep for no more than two minutes
-sleep 120
-exit
diff --git a/ext/emacs/puppet-mode-init.el b/ext/emacs/puppet-mode-init.el
deleted file mode 100644
index 9ac47ff..0000000
--- a/ext/emacs/puppet-mode-init.el
+++ /dev/null
@@ -1,6 +0,0 @@
-;;
-;; Setup puppet-mode for autoloading
-;;
-(autoload 'puppet-mode "puppet-mode" "Major mode for editing puppet manifests")
-
-(add-to-list 'auto-mode-alist '("\\.pp$" . puppet-mode))
diff --git a/ext/emacs/puppet-mode.el b/ext/emacs/puppet-mode.el
deleted file mode 100644
index 11fcfea..0000000
--- a/ext/emacs/puppet-mode.el
+++ /dev/null
@@ -1,358 +0,0 @@
-;;;
-;;; puppet-mode.el
-;;; 
-;;; Author: lutter
-;;; Author: Russ Allbery <rra at stanford.edu>
-;;;
-;;; Description: A simple mode for editing puppet manifests
-
-(defconst puppet-mode-version "0.2")
-
-(defvar puppet-mode-abbrev-table nil
-  "Abbrev table in use in puppet-mode buffers.")
-
-(define-abbrev-table 'puppet-mode-abbrev-table ())
-
-(defcustom puppet-indent-level 2
-  "*Indentation of Puppet statements."
-  :type 'integer :group 'puppet)
-
-(defcustom puppet-include-indent 2
-  "*Indentation of continued Puppet include statements."
-  :type 'integer :group 'puppet)
-
-(defvar puppet-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-j" 'newline-and-indent)
-    (define-key map "\C-m" 'newline-and-indent)
-    map)
-  "Key map used in puppet-mode buffers.")
-
-(defvar puppet-mode-syntax-table
-  (let ((table (make-syntax-table)))
-    (modify-syntax-entry ?\' "\"" table)
-    (modify-syntax-entry ?\" "\"" table)
-    (modify-syntax-entry ?#  "<"  table)
-    (modify-syntax-entry ?\n ">"  table)
-    (modify-syntax-entry ?\\ "\\" table)
-    (modify-syntax-entry ?$  "."  table)
-    (modify-syntax-entry ?-  "_"  table)
-    (modify-syntax-entry ?>  "."  table)
-    (modify-syntax-entry ?=  "."  table)
-    (modify-syntax-entry ?\; "."  table)
-    (modify-syntax-entry ?\( "()" table)
-    (modify-syntax-entry ?\) ")(" table)
-    (modify-syntax-entry ?\{ "(}" table)
-    (modify-syntax-entry ?\} "){" table)
-    (modify-syntax-entry ?\[ "(]" table)
-    (modify-syntax-entry ?\] ")[" table)
-    table)
-  "Syntax table in use in puppet-mode buffers.")
-
-(defcustom puppet-indent-tabs-mode nil
-  "*Indentation can insert tabs in puppet mode if this is non-nil."
-  :type 'boolean :group 'puppet)
-
-(defcustom puppet-comment-column 32
-  "*Indentation column of comments."
-  :type 'integer :group 'puppet)
-
-(defun puppet-count-matches (re start end)
-  "The same as Emacs 22 count-matches, for portability to other versions
-of Emacs."
-  (save-excursion
-    (let ((n 0))
-      (goto-char start)
-      (while (re-search-forward re end t) (setq n (1+ n)))
-      n)))
-
-(defun puppet-comment-line-p ()
-  "Return non-nil iff this line is a comment."
-  (save-excursion
-    (save-match-data
-      (beginning-of-line)
-      (looking-at (format "\\s-*%s" comment-start)))))
-
-(defun puppet-block-indent ()
-  "If point is in a block, return the indentation of the first line of that
-block (the line containing the opening brace).  Used to set the indentation
-of the closing brace of a block."
-  (save-excursion
-    (save-match-data
-      (let ((opoint (point))
-            (apoint (search-backward "{" nil t)))
-        (when apoint
-          ;; This is a bit of a hack and doesn't allow for strings.  We really
-          ;; want to parse by sexps at some point.
-          (let ((close-braces (puppet-count-matches "}" apoint opoint))
-                (open-braces 0))
-            (while (and apoint (> close-braces open-braces))
-              (setq apoint (search-backward "{" nil t))
-              (when apoint
-                (setq close-braces (puppet-count-matches "}" apoint opoint))
-                (setq open-braces (1+ open-braces)))))
-          (if apoint
-              (current-indentation)
-            nil))))))
-
-(defun puppet-in-array ()
-  "If point is in an array, return the position of the opening '[' of
-that array, else return nil."
-  (save-excursion
-    (save-match-data
-      (let ((opoint (point))
-            (apoint (search-backward "[" nil t)))
-        (when apoint
-          ;; This is a bit of a hack and doesn't allow for strings.  We really
-          ;; want to parse by sexps at some point.
-          (let ((close-brackets (puppet-count-matches "]" apoint opoint))
-                (open-brackets 0))
-            (while (and apoint (> close-brackets open-brackets))
-              (setq apoint (search-backward "[" nil t))
-              (when apoint
-                (setq close-brackets (puppet-count-matches "]" apoint opoint))
-                (setq open-brackets (1+ open-brackets)))))
-          apoint)))))
-
-(defun puppet-in-include ()
-  "If point is in a continued list of include statements, return the position
-of the initial include plus puppet-include-indent."
-  (save-excursion
-    (save-match-data
-      (let ((include-column nil)
-            (not-found t))
-        (while not-found
-          (forward-line -1)
-          (cond
-           ((bobp)
-            (setq not-found nil))
-           ((looking-at "^\\s-*include\\s-+.*,\\s-*$")
-            (setq include-column
-                  (+ (current-indentation) puppet-include-indent))
-            (setq not-found nil))
-           ((not (looking-at ".*,\\s-*$"))
-            (setq not-found nil))))
-        include-column))))
-
-(defun puppet-indent-line ()
-  "Indent current line as puppet code."
-  (interactive)
-  (beginning-of-line)
-  (if (bobp)
-      (indent-line-to 0)                ; First line is always non-indented
-    (let ((not-indented t)
-          (array-start (puppet-in-array))
-          (include-start (puppet-in-include))
-          (block-indent (puppet-block-indent))
-          cur-indent)
-      (cond
-       (array-start
-        ;; This line probably starts with an element from an array.
-        ;; Indent the line to the same indentation as the first
-        ;; element in that array.  That is, this...
-        ;;
-        ;;    exec {     
-        ;;      "add_puppetmaster_mongrel_startup_links":
-        ;;      command => "string1",
-        ;;      creates => [ "string2", "string3", 
-        ;;      "string4", "string5", 
-        ;;      "string6", "string7",
-        ;;      "string3" ],
-        ;;      refreshonly => true,
-        ;;    }
-        ;; 
-        ;; ...should instead look like this:
-        ;;
-        ;;    exec {     
-        ;;      "add_puppetmaster_mongrel_startup_links":
-        ;;      command => "string1",
-        ;;      creates => [ "string2", "string3", 
-        ;;                   "string4", "string5", 
-        ;;                   "string6", "string7",
-        ;;                   "string8" ],
-        ;;      refreshonly => true,
-        ;;    }
-        (save-excursion
-          (goto-char array-start)
-          (forward-char 1)
-          (re-search-forward "\\S-")
-          (forward-char -1)
-          (setq cur-indent (current-column))))
-       (include-start
-        (setq cur-indent include-start))
-       ((and (looking-at "^\\s-*}\\s-*$") block-indent)
-        ;; This line contains only a closing brace and we're at the inner
-        ;; block, so we should indent it matching the indentation of the
-        ;; opening brace of the block.
-        (setq cur-indent block-indent))
-       (t
-        ;; Otherwise, we did not start on a block-ending-only line.
-        (save-excursion
-          ;; Iterate backwards until we find an indentation hint
-          (while not-indented
-            (forward-line -1)
-            (cond
-             ;; Comment lines are ignored unless we're at the start of the
-             ;; buffer.
-             ((puppet-comment-line-p)
-              (if (bobp)
-                  (setq not-indented nil)))
-
-             ;; Brace or paren on a line by itself will already be indented to
-             ;; the right level, so we can cheat and stop there.
-             ((looking-at "^\\s-*[\)}]\\s-*")
-              (setq cur-indent (current-indentation))
-              (setq not-indented nil))
-
-             ;; Brace or paren not on a line by itself will be indented one
-             ;; level too much, but don't catch cases where the block is
-             ;; started and closed on the same line.
-             ((looking-at "^[^\n\({]*[\)}]\\s-*$")
-              (setq cur-indent (- (current-indentation) puppet-indent-level))
-              (setq not-indented nil))
-
-             ;; Indent by one level more than the start of our block.  We lose
-             ;; if there is more than one block opened and closed on the same
-             ;; line but it's still unbalanced; hopefully people don't do that.
-             ((looking-at "^.*{[^\n}]*$")
-              (setq cur-indent (+ (current-indentation) puppet-indent-level)) 
-              (setq not-indented nil))
-
-             ;; Indent by one level if the line ends with an open paren.
-             ((looking-at "^.*\(\\s-*$")
-              (setq cur-indent (+ (current-indentation) puppet-indent-level)) 
-              (setq not-indented nil))
-
-             ;; Semicolon ends a block for a resource when multiple resources
-             ;; are defined in the same block, but try not to get the case of
-             ;; a complete resource on a single line wrong.
-             ((looking-at "^\\([^'\":\n]\\|\"[^\n\"]*\"\\|'[^\n']'\\)**;\\s-*$")
-              (setq cur-indent (- (current-indentation) puppet-indent-level))
-              (setq not-indented nil))
-
-             ;; Indent an extra level after : since it introduces a resource.
-             ((looking-at "^.*:\\s-*$")
-              (setq cur-indent (+ (current-indentation) puppet-indent-level))
-              (setq not-indented nil))
-
-             ;; Start of buffer.
-             ((bobp)
-              (setq not-indented nil)))))
-
-        ;; If this line contains only a closing paren, we should lose one
-        ;; level of indentation.
-        (if (looking-at "^\\s-*\)\\s-*$")
-            (setq cur-indent (- cur-indent puppet-indent-level)))))
-
-      ;; We've figured out the indentation, so do it.
-      (if (and cur-indent (> cur-indent 0))
-          (indent-line-to cur-indent)
-        (indent-line-to 0)))))
-
-(defvar puppet-font-lock-syntax-table
-  (let* ((tbl (copy-syntax-table puppet-mode-syntax-table)))
-    (modify-syntax-entry ?_ "w" tbl)
-    tbl))
-
-(defvar puppet-font-lock-keywords
-  (list
-   ;; defines, classes, and nodes
-   '("^\\s *\\(class\\|define\\|node\\)\\s +\\([^( \t\n]+\\)"
-     2 font-lock-function-name-face)
-   ;; inheritence
-   '("\\s +inherits\\s +\\([^( \t\n]+\\)"
-     1 font-lock-function-name-face)
-   ;; include
-   '("\\(^\\|\\s +\\)include\\s +\\(\\([a-zA-Z0-9:_-]+\\(,[ \t\n]*\\)?\\)+\\)"
-     2 font-lock-reference-face)
-   ;; keywords
-   (cons (concat
-          "\\b\\(\\("
-          (mapconcat
-           'identity
-           '("alert"
-             "case"
-             "class"
-             "crit"
-             "debug"
-             "default"
-             "define"
-             "defined"
-             "else"
-             "emerg"
-             "err"
-             "fail"
-             "false"
-             "file"
-             "filebucket"
-             "generate"
-             "if"
-             "import"
-             "include"
-             "info"
-             "inherits"
-             "node"
-             "notice"
-             "realize"
-             "search"
-             "tag"
-             "tagged"
-             "template"
-             "true"
-             "warning"
-             )
-           "\\|")
-          "\\)\\>\\)")
-         1)
-     ;; variables
-     '("\\(^\\|[^_:.@$]\\)\\b\\(true\\|false\\)\\>"
-       2 font-lock-variable-name-face)
-     '("\\(\\$\\([^a-zA-Z0-9 \n]\\|[0-9]\\)\\)\\W"
-       1 font-lock-variable-name-face)
-     '("\\(\\$\\|@\\|@@\\)\\(\\w\\|_\\|:\\)+"
-       0 font-lock-variable-name-face)
-     ;; usage of types
-     '("^\\s *\\([a-zA-Z_-]+\\)\\s +{"
-       1 font-lock-type-face)
-     ;; overrides and type references
-     '("\\s +\\([A-Z][a-zA-Z_:-]*\\)\\["
-       1 font-lock-type-face)
-     ;; general delimited string
-     '("\\(^\\|[[ \t\n<+(,=]\\)\\(%[xrqQwW]?\\([^<[{(a-zA-Z0-9 \n]\\)[^\n\\\\]*\\(\\\\.[^\n\\\\]*\\)*\\(\\3\\)\\)"
-       (2 font-lock-string-face)))
-  "*Additional expressions to highlight in puppet mode.")
-
-;;;###autoload
-(defun puppet-mode ()
-  "Major mode for editing puppet manifests.
-
-The variable puppet-indent-level controls the amount of indentation.
-\\{puppet-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (use-local-map puppet-mode-map)
-  (setq mode-name "Puppet")
-  (setq major-mode 'puppet-mode)
-  (set-syntax-table puppet-mode-syntax-table)
-  (set (make-local-variable 'local-abbrev-table) puppet-mode-abbrev-table)
-  (set (make-local-variable 'comment-start) "# ")
-  (set (make-local-variable 'comment-start-skip) "#+ *")
-  (set (make-local-variable 'comment-end) "")
-  (set (make-local-variable 'comment-column) puppet-comment-column)
-  (set (make-local-variable 'indent-line-function) 'puppet-indent-line)
-  (set (make-local-variable 'indent-tabs-mode) puppet-indent-tabs-mode)
-  (set (make-local-variable 'require-final-newline) t)
-  (set (make-local-variable 'paragraph-ignore-fill-prefix) t)
-  (set (make-local-variable 'paragraph-start) "\f\\|[ 	]*$")
-  (set (make-local-variable 'paragraph-separate) "[ 	\f]*$")
-  (or (boundp 'font-lock-variable-name-face)
-      (setq font-lock-variable-name-face font-lock-type-face))
-  (set (make-local-variable 'font-lock-keywords) puppet-font-lock-keywords)
-  (set (make-local-variable 'font-lock-multiline) t)
-  (set (make-local-variable 'font-lock-defaults)
-       '((puppet-font-lock-keywords) nil nil))
-  (set (make-local-variable 'font-lock-syntax-table)
-       puppet-font-lock-syntax-table)
-  (run-hooks 'puppet-mode-hook))
-
-(provide 'puppet-mode)
diff --git a/ext/ldap/puppet.schema b/ext/ldap/puppet.schema
deleted file mode 100644
index a7a5f46..0000000
--- a/ext/ldap/puppet.schema
+++ /dev/null
@@ -1,27 +0,0 @@
-# These OIDs are all fake.  No guarantees there won't be conflicts.
-#
-# $Id$
-
-attributetype ( 1.1.3.10 NAME 'puppetclass'
-	DESC 'Puppet Node Class'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-attributetype ( 1.1.3.9 NAME 'parentnode'
-	DESC 'Puppet Parent Node'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-attributetype ( 1.1.3.11 NAME 'environment'
-	DESC 'Puppet Node Environment'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-attributetype ( 1.1.3.12 NAME 'puppetvar'
-	DESC 'A variable setting for puppet'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-objectclass ( 1.1.1.2 NAME 'puppetClient' SUP top AUXILIARY
-	DESC 'Puppet Client objectclass'
-	MAY ( puppetclass $ parentnode $ environment $ puppetvar ))
diff --git a/ext/logcheck/puppet b/ext/logcheck/puppet
deleted file mode 100644
index 449ec70..0000000
--- a/ext/logcheck/puppet
+++ /dev/null
@@ -1,22 +0,0 @@
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetmasterd\[[0-9]+\]: Starting Puppet server version [.0-9]+$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetmasterd\[[0-9]+\]: Compiled configuration for [._[:alnum:]-]+ in [.0-9]+ seconds$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetmasterd\[[0-9]+\]: Caught TERM; shutting down$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetmasterd\[[0-9]+\]: Shutting down$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Starting Puppet client version [.0-9]+$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: getting config$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Caching configuration at [\/._[:alnum:]-]+$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Loaded state in [.0-9]+ seconds$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Calling puppetmaster.getconfig$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Retrieved configuration in [.0-9]+ seconds$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Starting configuration run$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Finished configuration run in [.0-9]+ seconds$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Caught (TERM|INT); shutting down$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Shutting down$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Restarting with .*$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Starting catalog run$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Finished catalog run in [.0-9]+ seconds$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Loading fact .*$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Ignoring cache$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Ignoring --listen on onetime run$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ puppetd\[[0-9]+\]: Retrieving plugins$
-
diff --git a/ext/module_puppet b/ext/module_puppet
deleted file mode 100755
index 8609e44..0000000
--- a/ext/module_puppet
+++ /dev/null
@@ -1,209 +0,0 @@
-#!/usr/bin/env ruby
-
-#
-# = Synopsis
-#
-# Run a +puppet+ script as a cfengine module.
-#
-# = Usage
-#
-#   puppet_module [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose]
-#               [-l|--logdest <file>]<file>
-#
-# = Description
-#
-# This is the standalone puppet execution script; use it to execute
-# individual scripts that you write.  If you need to execute site-wide
-# scripts, use +puppetd+ and +puppetmasterd+.
-#
-# = Options
-#
-# Note that any configuration parameter that's valid in the configuration file
-# is also a valid long argument.  For example, 'ssldir' is a valid configuration
-# parameter, so you can specify '--ssldir <directory>' as an argument.
-#
-# See the configuration file for the full list of acceptable parameters.
-#
-# debug::
-#   Enable full debugging.
-#
-# help::
-#   Print this help message
-#
-# logdest::
-#   Where to send messages.  Choose between syslog, the console, and a log file.
-#   Defaults to sending messages to the console.
-#
-# verbose::
-#   Print extra information.
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-require 'puppet'
-require 'puppet/network/handler'
-require 'puppet/network/client'
-require 'getoptlong'
-
-options = [
-    [ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-    [ "--help",		"-h",			GetoptLong::NO_ARGUMENT ],
-    [ "--logdest",	"-l",			GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--verbose",  "-v",			GetoptLong::NO_ARGUMENT ],
-    [ "--use-nodes",    			GetoptLong::NO_ARGUMENT ],
-    [ "--version",  "-V",           GetoptLong::NO_ARGUMENT ]
-]
-
-# Add all of the config parameters as valid options.
-Puppet.settings.addargs(options)
-
-result = GetoptLong.new(*options)
-
-debug = false
-verbose = false
-noop = false
-logfile = false
-parseonly = false
-
-master = {
-    :Local => true
-}
-
-setdest = false
-
-begin
-    result.each { |opt,arg|
-        case opt
-            when "--version"
-                puts "%s" % Puppet.version
-                exit
-            when "--help"
-                if Puppet.features.usage?
-                    RDoc::usage && exit
-                else
-                    puts "No help available unless you have RDoc::usage installed"
-                    exit
-                end
-            when "--use-nodes"
-                master[:UseNodes] = true
-            when "--verbose"
-                Puppet::Util::Log.level = :info
-                Puppet::Util::Log.newdestination(:console)
-                verbose = true
-            when "--debug"
-                Puppet::Util::Log.level = :debug
-                Puppet::Util::Log.newdestination(:console)
-                debug = true
-            when "--logdest"
-                begin
-                    Puppet::Util::Log.newdestination arg
-                    setdest=true
-                rescue => detail
-                    $stderr.puts detail.to_s
-                end
-            else
-                Puppet.settings.handlearg(opt, arg)
-        end
-    }
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts "Try '#{$0} --help'"
-    if Puppet.features.usage?
-        RDoc::usage(1,'usage')
-    end
-    exit(1)
-end
-
-# Now parse the config
-if Puppet[:config] and File.exists? Puppet[:config]
-    Puppet.settings.parse(Puppet[:config])
-end
-
-client = nil
-server = nil
-
-[:INT, :TERM].each do |signal|
-    trap(signal) do
-        Puppet.notice "Caught #{signal}; shutting down"
-        [client, server].each { |obj|
-            if obj
-                obj.shutdown
-            end
-        }
-    end
-end
-
-if Puppet.settings.print_configs?
-        exit(Puppet.settings.print_configs ? 0 : 1)
-end
-
-unless ARGV.length > 0
-    $stderr.puts "You must pass a script to parse"
-    exit(14)
-end
-
-unless setdest
-    Puppet::Util::Log.newdestination(:syslog)
-end
-
-Puppet[:manifest] = ARGV.shift
-
-unless ENV.include?("CFALLCLASSES")
-    $stderr.puts "Cfengine classes must be passed to the module"
-    exit(15)
-end
-
-# Collect our facts.
-Puppet::Node::Facts.terminus_class = :facter
-facts = Puppet::Node::Facts.find("me")
-facts.name = facts.values["hostname"]
-
-# Create our Node
-node = Puppet::Node.new(facts.name)
-
-# Merge in the facts.
-node.merge(facts.values)
-
-classes = ENV["CFALLCLASSES"].split(":")
-
-if classes.empty?
-    $stderr.puts "Could not find any cfengine classes"
-    exit(16)
-end
-
-node.classes = classes
-
-begin
-    # Compile our configuration
-    catalog = Puppet::Node::Catalog.find(node.name, :use_node => node)
-rescue => detail
-    if Puppet[:trace]
-        puts detail.backtrace
-    end
-    if detail.is_a?(XMLRPC::FaultException)
-        $stderr.puts detail.message
-    else
-        $stderr.puts detail
-    end
-    exit(1)
-end
-
-if parseonly
-    exit(0)
-end
-
-begin
-    # Translate it to a RAL configuration
-    catalog = catalog.to_ral
-
-    # And apply it
-    catalog.apply
-rescue => detail
-    Puppet.err detail
-    exit(1)
-end
diff --git a/ext/nagios/check_puppet.rb b/ext/nagios/check_puppet.rb
deleted file mode 100755
index b65ede3..0000000
--- a/ext/nagios/check_puppet.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'optparse'
-require 'sys/proctable'
-include Sys
-
-class CheckPuppet
-
-  VERSION = '0.1'
-  script_name = File.basename($0)
-
-  # default options
-  OPTIONS = {
-     :statefile   => "/var/puppet/state/state.yaml",
-     :process     => "puppetd",
-     :interval    => 30,
-  }
-
-  o = OptionParser.new do |o|    
-    o.set_summary_indent('  ')
-    o.banner =    "Usage: #{script_name} [OPTIONS]"
-    o.define_head "The check_puppet Nagios plug-in checks that specified " +
-                  "Puppet process is running and the state file is no " +
-                  "older than specified interval."
-    o.separator   ""
-    o.separator   "Mandatory arguments to long options are mandatory for " +
-                  "short options too."
-  
-    o.on("-s", "--statefile=statefile", String, "The state file",
-         "Default: #{OPTIONS[:statefile]}") { |OPTIONS[:statefile]| }
-    o.on("-p", "--process=processname", String, "The process to check",
-         "Default: #{OPTIONS[:process]}")   { |OPTIONS[:process]| }
-    o.on("-i", "--interval=value", Integer, 
-         "Default: #{OPTIONS[:interval]} minutes")  { |OPTIONS[:interval]| }
-     
-    o.separator ""
-    o.on_tail("-h", "--help", "Show this help message.") do 
-      puts o
-      exit  
-    end
-  
-    o.parse!(ARGV)
-   end
-
-  def check_proc
-
-    unless ProcTable.ps.find { |p| p.name == OPTIONS[:process]}
-      @proc = 2
-    else
-      @proc = 0 
-    end
-  
-  end
-
-  def check_state
-
-    # Set variables
-    curt = Time.now
-    intv = OPTIONS[:interval] * 60
-
-    # Check file time
-    begin
-      @modt = File.mtime("#{OPTIONS[:statefile]}")
-    rescue
-      @file = 3
-    end
- 
-    diff = (curt - @modt).to_i
-
-    if diff > intv
-      @file = 2
-    else
-      @file = 0
-    end
-
-  end
-
-  def output_status
-   
-    case @file
-    when 0
-      state = "state file status okay updated on " + @modt.strftime("%m/%d/%Y at %H:%M:%S")
-    when 2
-      state = "state fille is not up to date and is older than #{OPTIONS[:interval]} minutes"
-    when 3
-      state = "state file status unknown"
-    end
-
-    case @proc
-    when 0
-      process = "process #{OPTIONS[:process]} is running"
-    when 2
-      process = "process #{OPTIONS[:process]} is not running" 
-    end
-
-    case @proc or @file
-    when 0
-      status = "OK"
-      exitcode = 0
-    when 2
-      status = "CRITICAL"
-      exitcode = 2
-    when 3
-      status = "UNKNOWN"
-      exitcide = 3
-    end
-
-    puts "PUPPET " + status + ": " + process + ", " + state
-    exit(exitcode)
- end
-end
-
-cp = CheckPuppet.new
-cp.check_proc
-cp.check_state
-cp.output_status
-
diff --git a/ext/passenger/README b/ext/passenger/README
deleted file mode 100644
index fcdcb91..0000000
--- a/ext/passenger/README
+++ /dev/null
@@ -1,63 +0,0 @@
-
-PUPPETMASTER INSIDE APACHE & PASSENGER
-======================================
-
-This is about running a puppetmaster inside Apache.
-
-Please also see the docs at http://reductivelabs.com/trac/puppet/wiki/UsingPassenger
-for further information.
-
-
-WHAT IS IT?
-===========
-
-Passenger [1] (AKA mod_rails or mod_rack) is an Apache 2.x Extension for 
-serving Rails or Rack applications.
-
-This extension allows running a puppetmasterd as a Rack application;
-it has only been tested with Passenger.
-
-
-SHORT INSTALLATION INSTRUCTIONS
-===============================
-
-Make sure puppetmasterd ran at least once, so the SSL certificates
-got set up. 
-
-Install Rack:
-  gem install -v 0.4.0 rack
-
-Install Apache and Passenger:
-  apt-get install apache2
-  gem install passenger
-  passenger-install-apache2-module
-  (See the Passenger installation instructions [2] for details.)
-
-Enable Apache modules:
-  a2enmod ssl
-  a2enmod headers
-
-Configure Apache:
-  cp apache2.conf /etc/apache2/conf.d/puppetmasterd
-  vim /etc/apache2/conf.d/puppetmasterd (replace the server hostnames)
-
-Install the rack application [3]:
-  mkdir -p /usr/share/puppet/rack/puppetmasterd
-  mkdir /usr/share/puppet/rack/puppetmasterd/public /usr/share/puppet/rack/puppetmasterd/tmp
-  cp config.ru /usr/share/puppet/rack/puppetmasterd
-  chown puppet /usr/share/puppet/rack/puppetmasterd/config.ru
-
-Go:
-/etc/init.d/apache2 restart
-
-
-
-[1] http://www.modrails.com/
-
-[2] http://www.modrails.com/install.html
-
-[3] Passenger will not let applications run as root or the Apache user, 
-instead an implicit setuid will be done, to the user whom owns 
-config.ru. Therefore, config.ru shall be owned by the puppet user.
-
-
diff --git a/ext/passenger/apache2.conf b/ext/passenger/apache2.conf
deleted file mode 100644
index 6a8a974..0000000
--- a/ext/passenger/apache2.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-Listen 8140
-<VirtualHost *:8140>
-	SSLEngine on
-	SSLCipherSuite SSLv2:-LOW:-EXPORT:RC4+RSA
-	SSLCertificateFile      /var/lib/puppet/ssl/certs/puppet-server.inqnet.at.pem
-	SSLCertificateKeyFile   /var/lib/puppet/ssl/private_keys/puppet-server.inqnet.at.pem
-	SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
-	SSLCACertificateFile    /var/lib/puppet/ssl/ca/ca_crt.pem
-	# If Apache complains about invalid signatures on the CRL, you can try disabling
-	# CRL checking by commenting the next line.
-	SSLCARevocationFile     /var/lib/puppet/ssl/ca/ca_crl.pem
-	SSLVerifyClient optional
-	SSLVerifyDepth  1
-	SSLOptions +StdEnvVars
-
-	# The following client headers allow the same configuration to work with Pound.
-	RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e
-	RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
-	RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
-
-	RackAutoDetect On
-	DocumentRoot /usr/share/puppet/rack/puppetmasterd/public/
-	<Directory /usr/share/puppet/rack/puppetmasterd/>
-		Options None
-		AllowOverride None
-		Order allow,deny
-		allow from all
-	</Directory>
-</VirtualHost>
diff --git a/ext/passenger/config.ru b/ext/passenger/config.ru
deleted file mode 100644
index 8608292..0000000
--- a/ext/passenger/config.ru
+++ /dev/null
@@ -1,40 +0,0 @@
-# Author: Christian Hofstaedtler <hofstaedtler at inqnet.at>
-# Copyright (c) 2007 Luke Kanies, 2008 Christian Hofstaedtler
-#
-# This file is mostly based on puppetmasterd, which is part of
-# the standard puppet distribution.
-
-require 'rack'
-require 'puppet'
-require 'puppet/network/http_server/rack'
-
-# startup code from bin/puppetmasterd
-Puppet.parse_config
-Puppet::Util::Log.level = :info
-Puppet::Util::Log.newdestination(:syslog)
-# A temporary solution, to at least make the master work for now.
-Puppet::Node::Facts.terminus_class = :yaml
-# Cache our nodes in yaml.  Currently not configurable.
-Puppet::Node.cache_class = :yaml
-
-# The list of handlers running inside this puppetmaster
-handlers = {
-	:Status => {},
-	:FileServer => {},
-	:Master => {},
-	:CA => {},
-	:FileBucket => {},
-	:Report => {}
-}
-
-# Fire up the Rack-Server instance
-server = Puppet::Network::HTTPServer::Rack.new(handlers)
-
-# prepare the rack app
-app = proc do |env|
-	server.process(env)
-end
-
-# Go.
-run app
-
diff --git a/ext/puppet-test b/ext/puppet-test
deleted file mode 100755
index dc0aeca..0000000
--- a/ext/puppet-test
+++ /dev/null
@@ -1,485 +0,0 @@
-#!/usr/bin/env ruby
-# == Synopsis 
-#
-# Test individual client performance.  Can compile configurations, describe
-# files, or retrieve files.
-#
-# = Usage
-#
-#   puppet-test  [-c|--compile] [-D|--describe <file>] [-d|--debug]
-#       [--fork <num>] [-h|--help] [-H|--hostname <host name>] [-l|--list] [-r|--repeat <number=1>]
-#       [-R|--retrieve <file>] [-t|--test <test>] [-V|--version] [-v|--verbose]
-#
-# = Description
-#
-# This is a simple script meant for doing performance tests with Puppet.  By
-# default it pulls down a compiled configuration, but it supports multiple
-# other tests.
-#
-# = Options
-#
-# Note that any configuration parameter that's valid in the configuration file
-# is also a valid long argument.  For example, 'server' is a valid configuration
-# parameter, so you can specify '--server <servername>' as an argument.
-#
-# See the configuration file documentation at
-# http://reductivelabs.com/projects/puppet/reference/configref.html for
-# the full list of acceptable parameters. A commented list of all
-# configuration $options can also be generated by running puppetd with
-# '--genconfig'.
-#
-# compile::
-#   Compile the client's configuration.  The default.
-#
-# debug::
-#   Enable full debugging.
-#
-# describe::
-#   Describe the file being tested.  This is a query to get information about
-#   the file from the server, to determine if it should be copied, and is the
-#   first half of every file transfer.
-#
-# fork::
-#   Fork the specified number of times, thus acting as multiple clients.
-#
-# fqdn::
-#   Set the fully-qualified domain name of the client.  This is only used for
-#   certificate purposes, but can be used to override the discovered hostname.
-#   If you need to use this flag, it is generally an indication of a setup problem.
-#
-# help::
-#   Print this help message
-#
-# list::
-#   List all available tests.
-#
-# pause::
-#  Pause before starting test (useful for testing with dtrace).
-#
-# repeat::
-#  How many times to perform the test.
-#
-# retrieve::
-#   Test file retrieval performance.  Retrieves the specified file from the
-#   remote system.  Note that the server should be specified via --server,
-#   so the argument to this option is just the remote module name and path,
-#   e.g., "/dist/apps/myapp/myfile", where "dist" is the module and
-#   "apps/myapp/myfile" is the path to the file relative to the module.
-#
-# test::
-#   Specify the test to run.  You can see the list of tests by running this command with --list.
-#
-# verbose::
-#   Turn on verbose reporting.
-#
-# version::
-#   Print the puppet version number and exit.
-#
-# = Example
-#
-#   puppet-test --retrieve /module/path/to/file
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005, 2006 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-# Do an initial trap, so that cancels don't get a stack trace.
-trap(:INT) do
-    $stderr.puts "Cancelling startup"
-    exit(1)
-end
-
-require 'puppet'
-require 'puppet/network/client'
-require 'getoptlong'
-
-class Suite
-    attr_reader :name, :doc
-
-    @@suites = {}
-    @@tests = {}
-
-    def self.[](name)
-        @@suites[name]
-    end
-
-    # Run a test by first finding the suite then running the appropriate test.
-    def self.run(test)
-        unless suite_name = @@tests[test]
-            raise "Unknown test %s" % test
-
-        end
-        unless suite = @@suites[suite_name]
-            raise "Unknown test suite %s from test %s" % [suite_name, test]
-        end
-
-        suite.run(test)
-    end
-
-    # What suites are available?
-    def self.suites
-        @@suites.keys
-    end
-
-    def forked?
-        defined? @forking
-    end
-
-    # Create a new test suite.
-    def initialize(name, doc, &block)
-        @name = name
-        @doc = doc
-
-        @tests = {}
-
-        @@suites[name] = self
-
-        raise "You must pass a block to the Test" unless block_given?
-        instance_eval(&block)
-    end
-
-    # Define a new type of test on this suite.
-    def newtest(name, doc, &block)
-        @tests[name] = doc
-
-        if @@tests[name]
-            raise "Test names must be unique; cannot redefine %s" % name
-        end
-
-        @@tests[name] = @name
-
-        meta_def(name, &block)
-    end
-
-    # Run the actual test.
-    def run(test)
-        unless doc = @tests[test]
-            raise "Suite %s only supports tests %s; not %s" % [@name, @tests.keys.collect { |k| k.to_s }.join(","), test]
-        end
-        puts "Running %s %s test" % [@name, test]
-
-        prepare() if respond_to?(:prepare)
-
-        if $options[:pause]
-            puts "Hit any key to continue"
-            $stdin.readline
-            puts "Continuing with test"
-        end
-
-        if $options[:fork] > 0
-            @forking = true
-            $options[:fork].times {
-                if pid = fork
-                    $pids << pid
-                else
-                    break
-                end
-            }
-        end
-
-        $options[:repeat].times do |i|
-            @count = i
-            if forked?
-                msg = doc + " in PID %s" % Process.pid
-            else
-                msg = doc
-            end
-            Puppet::Util.benchmark(:notice, msg) do
-                begin
-                    send(test)
-                rescue => detail
-                    puts detail.backtrace if Puppet[:trace]
-                    Puppet.err "%s failed: %s" % [@name, detail.to_s]
-                end
-            end
-        end
-    end
-
-    # What tests are available on this suite?
-    def tests
-        @tests.keys
-    end
-end
-
-Suite.new :parser, "Manifest parsing" do
-    newtest :parse, "Parsed files" do
-        @parser = Puppet::Parser::Parser.new(:environment => Puppet[:environment])
-        @parser.file = Puppet[:manifest]
-        @parser.parse
-    end
-end
-
-Suite.new :local_catalog, "Local catalog handling" do
-    def prepare
-        @node = Puppet::Node.find(Puppet[:certname])
-    end
-
-    newtest :compile, "Compiled catalog" do
-        Puppet::Node::Catalog.find(@node)
-    end
-end
-
-Suite.new :remote_catalog, "Remote catalog handling" do
-    def prepare
-        $args[:cache] = false
-        # Create a config client and pull the config down
-        @client = Puppet::Network::Client.master.new($args)
-        unless @client.read_cert
-            fail "Could not read client certificate"
-        end
-
-        # Use the facts from the cache, to skip the time it takes
-        # to load them.
-        @client.dostorage
-        @facts = Puppet::Util::Storage.cache(:configuration)[:facts] || {}
-
-        if @facts.empty?
-            if tmp = Puppet::Node::Facts.find("me")
-                @facts = tmp.values
-            end
-        end
-
-        if host = $options[:fqdn]
-            @facts["fqdn"] = host
-            @facts["hostname"] = host.sub(/\..+/, '')
-            @facts["domain"] = host.sub(/^[^.]+\./, '')
-        end
-
-        @facts = YAML.dump(@facts)
-    end
-
-    newtest :getconfig, "Compiled catalog" do
-        @client.driver.getconfig(@facts, "yaml")
-    end
-
-    # This test will always force a false answer.
-    newtest :fresh, "Checked freshness" do
-        @client.driver.freshness
-    end
-end
-
-Suite.new :file, "File interactions" do
-    def prepare
-        unless $options[:file]
-            fail "You must specify a file (using --file <file>) to interact with on the server"
-        end
-        @client = Puppet::Network::Client.file.new($args)
-        unless @client.read_cert
-            fail "Could not read client certificate"
-        end
-    end
-
-    newtest :describe, "Described file" do
-        @client.describe($options[:file], :ignore)
-    end
-
-    newtest :retrieve, "Retrieved file" do
-        @client.retrieve($options[:file], :ignore)
-    end
-end
-
-Suite.new :filebucket, "Filebucket interactions" do
-    def prepare
-        require 'tempfile'
-        @client = Puppet::Network::Client.dipper.new($args)
-    end
-
-    newtest :backup, "Backed up file" do
-        Tempfile.open("bucket_testing") do |f|
-            f.print rand(1024)
-            f.close
-            @client.backup(f.path)
-        end
-    end
-end
-
-# Note that this uses an env variable to determine how many resources per
-# host to create (with a default of 10).  'repeat' determines how
-# many hosts to create.  You probably will get mad failures if you
-# use forking and sqlite.
-# Here's an example run of this test, using sqlite:
-#   RESOURCE_COUNT=50 ext/puppet-test --suite rails --test storage --confdir /tmp/storagetesting --vardir /tmp/storagetesting --repeat 10
-Suite.new :rails, "Rails Interactions" do
-    def prepare
-        Puppet::Rails.init
-        @facts = Facter.to_hash
-
-        if num = ENV["RESOURCECOUNT"] 
-            @resources = Integer(num)
-        else
-            @resources = 10
-        end
-    end
-
-    Resource = Puppet::Parser::Resource
-
-    def execute(test, msg)
-        begin
-            send(test)
-        rescue => detail
-            puts detail.backtrace if Puppet[:trace]
-            Puppet.err "%s failed: %s" % [@name, detail.to_s]
-        end
-    end
-
-    def mkresource(type, title, parameters)
-        source = "fakesource"
-        res = Resource.new(:type => type, :title => title, :source => source, :scope => "fakescope")
-
-        parameters.each do |param, value|
-            res.set(param, value, source)
-        end
-        res
-    end
-
-    def ref(type, title)
-        Resource::Reference.new(:type => type, :title => title)
-    end
-
-    newtest :storage, "Stored resources" do
-        hostname = "host%s" % @count
-        @facts["hostname"] = hostname
-        args = {:facts => @facts, :name => hostname}
-
-        # Make all of the resources we want.  Make them at least slightly complex,
-        # so we model real resources as close as we can.
-        resources = []
-        args[:resources] = resources
-        @resources.times do |resnum|
-            exec = mkresource("exec", "exec%s" % resnum, :command => "/bin/echo do something %s" % resnum)
-            exec.tags = %w{exec one} << "exec%s" % resnum
-            user = mkresource("user", "user%s" % resnum, :uid => resnum.to_s, :require => ref("exec", "exec%s" % resnum))
-            user.tags = %w{user one two} << "user%s" % resnum
-            file = mkresource("file", "/tmp/file%s" % resnum, :owner => resnum.to_s, :require => [ref("exec", "exec%s" % resnum), ref("user", "user%s" % resnum)])
-            file.tags = %w{file one three} << "file%s" % resnum
-            file.exported = true
-            resources << exec << user << file
-        end
-        Puppet::Rails::Host.store(args)
-    end
-end
-
-$cmdargs = [
-	[ "--compile",    "-c",			GetoptLong::NO_ARGUMENT ],
-	[ "--describe",     			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--retrieve",  "-R",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--fork",          			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--fqdn",      "-F",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--suite",     "-s",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--test",      "-t",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--pause",	 "-p",			GetoptLong::NO_ARGUMENT ],
-	[ "--repeat",    "-r",			GetoptLong::REQUIRED_ARGUMENT ],
-	[ "--debug",	 "-d",			GetoptLong::NO_ARGUMENT ],
-	[ "--help",		 "-h",			GetoptLong::NO_ARGUMENT ],
-	[ "--list",	     "-l",			GetoptLong::NO_ARGUMENT ],
-	[ "--verbose",	 "-v",			GetoptLong::NO_ARGUMENT ],
-	[ "--version",	 "-V",			GetoptLong::NO_ARGUMENT ],
-]
-
-# Add all of the config parameters as valid $options.
-Puppet.settings.addargs($cmdargs)
-Puppet::Util::Log.newdestination(:console)
-
-result = GetoptLong.new(*$cmdargs)
-
-$args = {}
-
-$options = {:repeat => 1, :fork => 0, :pause => false}
-
-begin
-    explicit_waitforcert = false
-    result.each { |opt,arg|
-        case opt
-            # First check to see if the argument is a valid configuration parameter;
-            # if so, set it.
-            when "--compile"
-                $options[:suite] = :configuration
-                $options[:test] = :compile
-            when "--retrieve"
-                $options[:suite] = :file
-                $options[:test] = :retrieve
-                $options[:file] = arg
-            when "--fork"
-                begin
-                    $options[:fork] = Integer(arg)
-                rescue => detail
-                    $stderr.puts "The argument to 'fork' must be an integer"
-                    exit(14)
-                end
-            when "--describe"
-                $options[:suite] = :file
-                $options[:test] = :describe
-                $options[:file] = arg
-            when "--fqdn"
-                $options[:fqdn] = arg
-            when "--repeat"
-                $options[:repeat] = Integer(arg)
-            when "--help"
-                if Puppet.features.usage?
-                    RDoc::usage && exit
-                else
-                    puts "No help available unless you have RDoc::usage installed"
-                    exit
-                end
-            when "--version"
-                puts "%s" % Puppet.version
-                exit
-            when "--verbose"
-                Puppet::Util::Log.level = :info
-                Puppet::Util::Log.newdestination(:console)
-            when "--debug"
-                Puppet::Util::Log.level = :debug
-                Puppet::Util::Log.newdestination(:console)
-            when "--suite"
-                $options[:suite] = arg.intern
-            when "--test"
-                $options[:test] = arg.intern
-            when "--file"
-                $options[:file] = arg
-            when "--pause"
-                $options[:pause] = true
-            when "--list"
-                Suite.suites.sort { |a,b| a.to_s <=> b.to_s }.each do |suite_name|
-                    suite = Suite[suite_name]
-                    tests = suite.tests.sort { |a,b| a.to_s <=> b.to_s }.join(", ")
-                    puts "%20s: %s" % [suite_name, tests]
-                end
-                exit(0)
-            else
-                Puppet.settings.handlearg(opt, arg)
-        end
-    }
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts detail
-    $stderr.puts "Try '#{$0} --help'"
-    exit(1)
-end
-
-# Now parse the config
-Puppet.parse_config
-
-$args[:Server] = Puppet[:server]
-
-unless $options[:test]
-    $options[:suite] = :remote_catalog
-    $options[:test] = :getconfig
-end
-
-unless $options[:test]
-    raise "A suite was specified without a test"
-end
-
-$pids = []
-
-Suite.run($options[:test])
-
-if $options[:fork] > 0
-    Process.waitall
-end
-
-# $Id$
diff --git a/ext/puppetlast b/ext/puppetlast
deleted file mode 100755
index e52529d..0000000
--- a/ext/puppetlast
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env ruby
-# Puppetlast, a script to output the last check-in time of nodes. Also outputs the cached configuration state, if expired or not.
-#
-# AJ "Fujin" Christensen <aj at junglist.gen.nz>
-#
-require 'puppet'
-
-Puppet[:config] = "/etc/puppet/puppet.conf"
-Puppet.parse_config
-Puppet[:name] = "puppetmasterd"
-Puppet::Node::Facts.terminus_class = :yaml
-
-Puppet::Node::Facts.search("*").sort { |a,b| a.name <=> b.name }.each do |node|
-  puts "#{node.name} #{node.expired? ? 'cached expired, ' : ''}checked in #{((Time.now - node.values[:_timestamp]) / 60).floor} minutes ago"
-end
diff --git a/ext/puppetstoredconfigclean.rb b/ext/puppetstoredconfigclean.rb
deleted file mode 100644
index f286df2..0000000
--- a/ext/puppetstoredconfigclean.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env ruby
-
-# Script to clean up stored configs for (a) given host(s)
-#
-# Credits:
-# Script was taken from http://reductivelabs.com/trac/puppet/attachment/wiki/UsingStoredConfiguration/kill_node_in_storedconfigs_db.rb
-# which haven been initially posted by James Turnbull
-# duritong adapted and improved the script a bit.
-
-require 'getoptlong'
-config = '/etc/puppet/puppet.conf'
-
-def printusage(error_code)
-	puts "Usage: #{$0} [ list of hostnames as stored in hosts table ]"
-	puts "\n Options:"
-	puts "--config <puppet config file>"
-	exit(error_code)
-end
-
-opts = GetoptLong.new(
-        [ "--config",     "-c",   GetoptLong::REQUIRED_ARGUMENT ],	
-        [ "--help",        "-h",   GetoptLong::NO_ARGUMENT ],
-        [ "--usage",       "-u",   GetoptLong::NO_ARGUMENT ],
-        [ "--version",     "-v",   GetoptLong::NO_ARGUMENT ]
-)
-
-begin
-	opts.each do |opt, arg|
-    	case opt
-        	when "--config"
-				config = arg
-
-            when "--help"
-            	printusage(0)
-
-            when "--usage"
-            	printusage(0)
-
-            when "--version"
-        		puts "%s" % Puppet.version
-				exit
-		end
-	end
-rescue GetoptLong::InvalidOption => detail
-    $stderr.puts "Try '#{$0} --help'"
-    exit(1)
-end
-
-printusage(1) unless ARGV.size > 0
-
-require 'puppet/rails'
-Puppet[:config] = config
-Puppet.parse_config
-pm_conf = Puppet.settings.instance_variable_get(:@values)[:puppetmasterd]
-
-adapter = pm_conf[:dbadapter]
-args = {:adapter => adapter, :log_level => pm_conf[:rails_loglevel]}
-
-case adapter
-  when "sqlite3":
-    args[:dbfile] = pm_conf[:dblocation]
-  when "mysql", "postgresql":
-    args[:host]     = pm_conf[:dbserver] unless pm_conf[:dbserver].to_s.empty?
-    args[:username] = pm_conf[:dbuser] unless pm_conf[:dbuser].to_s.empty?
-    args[:password] = pm_conf[:dbpassword] unless pm_conf[:dbpassword].to_s.empty?
-    args[:database] = pm_conf[:dbname] unless pm_conf[:dbname].to_s.empty?
-    socket          = pm_conf[:dbsocket]
-    args[:socket]   = socket unless socket.to_s.empty?
-  else
-    raise ArgumentError, "Invalid db adapter %s" % adapter
-end
-
-args[:database] = "puppet" unless not args[:database].to_s.empty?
-
-ActiveRecord::Base.establish_connection(args)
-
-ARGV.each { |hostname|
-    if @host = Puppet::Rails::Host.find_by_name(hostname.strip)
-        print "Killing #{hostname}..."
-        $stdout.flush
-        @host.destroy
-        puts "done."
-    else
-        puts "Can't find host #{hostname}."
-    end
-}
-exit 0
diff --git a/ext/vim/README b/ext/vim/README
deleted file mode 100644
index 776bb1e..0000000
--- a/ext/vim/README
+++ /dev/null
@@ -1,2 +0,0 @@
-To install these files, copy them into ~/.vim, or the relevant
-system-wide location.
diff --git a/ext/vim/ftdetect/puppet.vim b/ext/vim/ftdetect/puppet.vim
deleted file mode 100644
index c9d15ea..0000000
--- a/ext/vim/ftdetect/puppet.vim
+++ /dev/null
@@ -1,2 +0,0 @@
-" detect puppet filetype
-au BufRead,BufNewFile *.pp              set filetype=puppet
diff --git a/ext/vim/syntax/puppet.vim b/ext/vim/syntax/puppet.vim
deleted file mode 100644
index a29e368..0000000
--- a/ext/vim/syntax/puppet.vim
+++ /dev/null
@@ -1,89 +0,0 @@
-" puppet syntax file
-" Filename:     puppet.vim
-" Language:     puppet configuration file 
-" Maintainer:   Luke Kanies <luke at madstop.com>
-" URL:          
-" Last Change: 
-" Version:      
-"
-
-" Copied from the cfengine, ruby, and perl syntax files
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
-  finish
-endif
-
-syn region  puppetDefine        start="^\s*\(class\|define\|site\|node\)" end="{" contains=puppetDefType,puppetDefName,puppetDefArguments
-syn keyword puppetDefType       class define site node inherits contained
-syn keyword puppetInherits      inherits contained
-syn region  puppetDefArguments  start="(" end=")" contains=puppetArgument
-syn match   puppetArgument      "\w\+" contained
-syn match   puppetArgument      "\$\w\+" contained
-syn match   puppetArgument      "'[^']+'" contained
-syn match   puppetArgument      '"[^"]+"' contained
-syn match   puppetDefName     "\w\+" contained
-
-syn match   puppetInstance           "\w\+\s*{" contains=puppetTypeBrace,puppetTypeName,puppetTypeDefault
-syn match   puppetTypeBrace       "{" contained
-syn match   puppetTypeName       "[a-z]\w*" contained
-syn match   puppetTypeDefault    "[A-Z]\w*" contained
-
-syn match   puppetParam           "\w\+\s*=>" contains=puppetTypeRArrow,puppetParamName
-syn match   puppetParamRArrow       "=>" contained
-syn match   puppetParamName       "\w\+" contained
-syn match   puppetVariable           "$\w\+"
-syn match   puppetVariable           "${\w\+}"
-syn match   puppetParen           "("
-syn match   puppetParen           ")"
-syn match   puppetBrace           "{"
-syn match   puppetBrace           "}"
-
-syn region  puppetString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=puppetVariable
-
-syn keyword puppetBoolean    true false 
-syn keyword puppetKeyword    import inherits include
-syn keyword puppetControl    case default 
-
-" comments last overriding everything else
-syn match   puppetComment            "\s*#.*$" contains=puppetTodo
-syn keyword puppetTodo               TODO NOTE FIXME XXX contained
-
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_puppet_syn_inits")
-  if version < 508
-    let did_puppet_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-
-  HiLink puppetVariable             Identifier
-  HiLink puppetBoolean              Boolean
-  HiLink puppetType                 Identifier
-  HiLink puppetDefault              Identifier
-  HiLink puppetKeyword              Define
-  HiLink puppetTypeDefs             Define
-  HiLink puppetComment              Comment
-  HiLink puppetString               String
-  HiLink puppetTodo                 Todo
-"  HiLink puppetBrace                Delimiter
-"  HiLink puppetTypeBrace            Delimiter
-"  HiLink puppetParen                Delimiter
-  HiLink puppetDelimiter            Delimiter
-  HiLink puppetControl              Statement
-  HiLink puppetDefType              Define
-  HiLink puppetDefName              Type
-  HiLink puppetTypeName             Statement
-  HiLink puppetTypeDefault          Type
-  HiLink puppetParamName            Identifier
-  HiLink puppetArgument             Identifier
-
-  delcommand HiLink
-endif
-
-let b:current_syntax = "puppet"
diff --git a/install.rb b/install.rb
deleted file mode 100755
index 3fa3822..0000000
--- a/install.rb
+++ /dev/null
@@ -1,448 +0,0 @@
-#! /usr/bin/env ruby
-#--
-# Copyright 2004 Austin Ziegler <ruby-install at halostatue.ca>
-#   Install utility. Based on the original installation script for rdoc by the
-#   Pragmatic Programmers.
-#
-# This program is free software. It may be redistributed and/or modified under
-# the terms of the GPL version 2 (or later) or the Ruby licence.
-#
-# Usage
-# -----
-# In most cases, if you have a typical project layout, you will need to do
-# absolutely nothing to make this work for you. This layout is:
-#
-#   bin/    # executable files -- "commands"
-#   lib/    # the source of the library
-#   tests/  # unit tests
-#
-# The default behaviour:
-# 1) Run all unit test files (ending in .rb) found in all directories under
-#    tests/.
-# 2) Build Rdoc documentation from all files in bin/ (excluding .bat and .cmd),
-#    all .rb files in lib/, ./README, ./ChangeLog, and ./Install.
-# 3) Build ri documentation from all files in bin/ (excluding .bat and .cmd),
-#    and all .rb files in lib/. This is disabled by default on Win32.
-# 4) Install commands from bin/ into the Ruby bin directory. On Windows, if a
-#    if a corresponding batch file (.bat or .cmd) exists in the bin directory,
-#    it will be copied over as well. Otherwise, a batch file (always .bat) will
-#    be created to run the specified command.
-# 5) Install all library files ending in .rb from lib/ into Ruby's
-#    site_lib/version directory.
-#
-#++
-
-require 'rbconfig'
-require 'find'
-require 'fileutils'
-require 'ftools' # apparently on some system ftools doesn't get loaded
-require 'optparse'
-require 'ostruct'
-
-begin
-    require 'rdoc/rdoc'
-    $haverdoc = true
-rescue LoadError
-    puts "Missing rdoc; skipping documentation"
-    $haverdoc = false
-end
-
-begin
-    if $haverdoc
-       rst2man = %x{which rst2man.py}
-       $haveman = true
-    else
-       $haveman = false
-    end
-rescue
-    puts "Missing rst2man; skipping man page creation"
-    $haveman = false
-end
-
-PREREQS = %w{openssl facter xmlrpc/client xmlrpc/server cgi}
-MIN_FACTER_VERSION = 1.5
-
-InstallOptions = OpenStruct.new
-
-def glob(list)
-    g = list.map { |i| Dir.glob(i) }
-    g.flatten!
-    g.compact!
-    g.reject! { |e| e =~ /\.svn/ }
-    g
-end
-
-# Set these values to what you want installed.
-sbins = glob(%w{sbin/*})
-bins  = glob(%w{bin/*})
-rdoc  = glob(%w{bin/* sbin/* lib/**/*.rb README README-library CHANGELOG TODO Install}).reject { |e| e=~ /\.(bat|cmd)$/ }
-ri    = glob(%w(bin/*.rb sbin/* lib/**/*.rb)).reject { |e| e=~ /\.(bat|cmd)$/ }
-man   = glob(%w{man/man8/*})
-libs  = glob(%w{lib/**/*.rb lib/**/*.py})
-tests = glob(%w{test/**/*.rb})
-
-def do_bins(bins, target, strip = 's?bin/')
-  bins.each do |bf|
-    obf = bf.gsub(/#{strip}/, '')
-    install_binfile(bf, obf, target)
-  end
-end
-
-def do_libs(libs, strip = 'lib/')
-  libs.each do |lf|
-    olf = File.join(InstallOptions.site_dir, lf.gsub(/#{strip}/, ''))
-    op = File.dirname(olf)
-    File.makedirs(op, true)
-    File.chmod(0755, op)
-    File.install(lf, olf, 0755, true)
-  end
-end
-
-def do_man(man, strip = 'man/')
-  man.each do |mf|
-    omf = File.join(InstallOptions.man_dir, mf.gsub(/#{strip}/, ''))
-    om = File.dirname(omf)
-    File.makedirs(om, true)
-    File.chmod(0755, om)
-    File.install(mf, omf, 0644, true)
-    gzip = %x{which gzip}
-    gzip.chomp!
-    %x{#{gzip} -f #{omf}}
-  end
-end
-
-# Verify that all of the prereqs are installed
-def check_prereqs
-    PREREQS.each { |pre|
-        begin
-            require pre
-            if pre == "facter"
-              # to_f isn't quite exact for strings like "1.5.1" but is good
-              # enough for this purpose.
-              facter_version = Facter.version.to_f
-              if facter_version < MIN_FACTER_VERSION
-                puts "Facter version: %s; minimum required: %s; cannot install" % [facter_version, MIN_FACTER_VERSION]
-                exit -1
-              end
-            end
-        rescue LoadError
-            puts "Could not load %s; cannot install" % pre
-            exit -1
-        end
-    }
-end
-
-##
-# Prepare the file installation.
-#
-def prepare_installation
-  # Only try to do docs if we're sure they have rdoc
-  if $haverdoc
-      InstallOptions.rdoc  = true
-      if RUBY_PLATFORM == "i386-mswin32"
-        InstallOptions.ri  = false
-      else
-        InstallOptions.ri  = true
-      end
-  else
-      InstallOptions.rdoc  = false
-      InstallOptions.ri  = false
-  end
-
-
-  if $haveman
-      InstallOptions.man = true
-      if RUBY_PLATFORM == "i386-mswin32"
-        InstallOptions.man  = false
-      end
-  else
-      InstallOptions.man = false
-  end
-
-  InstallOptions.tests = true
-
-  ARGV.options do |opts|
-    opts.banner = "Usage: #{File.basename($0)} [options]"
-    opts.separator ""
-    opts.on('--[no-]rdoc', 'Prevents the creation of RDoc output.', 'Default on.') do |onrdoc|
-      InstallOptions.rdoc = onrdoc
-    end
-    opts.on('--[no-]ri', 'Prevents the creation of RI output.', 'Default off on mswin32.') do |onri|
-      InstallOptions.ri = onri
-    end
-    opts.on('--[no-]man', 'Presents the creation of man pages.', 'Default on.') do |onman|
-    InstallOptions.man = onman
-    end
-    opts.on('--[no-]tests', 'Prevents the execution of unit tests.', 'Default on.') do |ontest|
-      InstallOptions.tests = ontest
-    end
-    opts.on('--destdir[=OPTIONAL]', 'Installation prefix for all targets', 'Default essentially /') do |destdir|
-      InstallOptions.destdir = destdir
-    end
-    opts.on('--bindir[=OPTIONAL]', 'Installation directory for binaries', 'overrides Config::CONFIG["bindir"]') do |bindir|
-      InstallOptions.bindir = bindir
-    end
-    opts.on('--sbindir[=OPTIONAL]', 'Installation directory for system binaries', 'overrides Config::CONFIG["sbindir"]') do |sbindir|
-      InstallOptions.sbindir = sbindir
-    end
-    opts.on('--sitelibdir[=OPTIONAL]', 'Installation directory for libraries', 'overrides Config::CONFIG["sitelibdir"]') do |sitelibdir|
-      InstallOptions.sitelibdir = sitelibdir
-    end
-    opts.on('--mandir[=OPTIONAL]', 'Installation directory for man pages', 'overrides Config::CONFIG["mandir"]') do |mandir|
-      InstallOptions.mandir = mandir
-    end
-    opts.on('--quick', 'Performs a quick installation. Only the', 'installation is done.') do |quick|
-      InstallOptions.rdoc   = false
-      InstallOptions.ri     = false
-      InstallOptions.tests  = false
-    end
-    opts.on('--full', 'Performs a full installation. All', 'optional installation steps are run.') do |full|
-      InstallOptions.rdoc   = true
-      InstallOptions.ri     = true
-      InstallOptions.tests  = true
-    end
-    opts.separator("")
-    opts.on_tail('--help', "Shows this help text.") do
-      $stderr.puts opts
-      exit
-    end
-
-    opts.parse!
-  end
-
-  tmpdirs = [".", ENV['TMP'], ENV['TEMP'], "/tmp", "/var/tmp"]
-
-  version = [Config::CONFIG["MAJOR"], Config::CONFIG["MINOR"]].join(".")
-  libdir = File.join(Config::CONFIG["libdir"], "ruby", version)
-
-  # Mac OS X 10.5 declares bindir and sbindir as
-  # /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin
-  # /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/sbin
-  # which is not generally where people expect executables to be installed
-  if RUBY_PLATFORM == "universal-darwin9.0"
-    Config::CONFIG['bindir'] = "/usr/bin"
-    Config::CONFIG['sbindir'] = "/usr/sbin"
-  end
-  
-  if not InstallOptions.bindir.nil?
-    bindir = InstallOptions.bindir
-  else
-    bindir = Config::CONFIG['bindir']
-  end
-  
-  if not InstallOptions.sbindir.nil?
-    sbindir = InstallOptions.sbindir
-  else
-    sbindir = Config::CONFIG['sbindir']
-  end
-  
-  if not InstallOptions.sitelibdir.nil?
-    sitelibdir = InstallOptions.sitelibdir
-  else
-    sitelibdir = Config::CONFIG["sitelibdir"]
-    if sitelibdir.nil?
-      sitelibdir = $:.find { |x| x =~ /site_ruby/ }
-      if sitelibdir.nil?
-        sitelibdir = File.join(libdir, "site_ruby")
-      elsif sitelibdir !~ Regexp.quote(version)
-        sitelibdir = File.join(sitelibdir, version)
-      end
-    end
-  end
-  
-  if not InstallOptions.mandir.nil?
-    mandir = InstallOptions.mandir
-  else
-    mandir = Config::CONFIG['mandir'] 
-  end
-
-  # To be deprecated once people move over to using --destdir option
-  if (destdir = ENV['DESTDIR'])
-    bindir = "#{destdir}#{bindir}"
-    sbindir = "#{destdir}#{sbindir}"
-    mandir = "#{destdir}#{mandir}"
-    sitelibdir = "#{destdir}#{sitelibdir}"
-
-    FileUtils.makedirs(bindir)
-    FileUtils.makedirs(sbindir)
-    FileUtils.makedirs(mandir)
-    FileUtils.makedirs(sitelibdir)
-  # This is the new way forward
-  elsif (destdir = InstallOptions.destdir)
-    bindir = "#{destdir}#{bindir}"
-    sbindir = "#{destdir}#{sbindir}"
-    mandir = "#{destdir}#{mandir}"
-    sitelibdir = "#{destdir}#{sitelibdir}"
-
-    FileUtils.makedirs(bindir)
-    FileUtils.makedirs(sbindir)
-    FileUtils.makedirs(mandir)
-    FileUtils.makedirs(sitelibdir)
-  end
-
-  tmpdirs << bindir
-
-  InstallOptions.tmp_dirs = tmpdirs.compact
-  InstallOptions.site_dir = sitelibdir
-  InstallOptions.bin_dir  = bindir
-  InstallOptions.sbin_dir = sbindir
-  InstallOptions.lib_dir  = libdir
-  InstallOptions.man_dir  = mandir
-end
-
-##
-# Build the rdoc documentation. Also, try to build the RI documentation.
-#
-def build_rdoc(files)
-    return unless $haverdoc
-    begin
-        r = RDoc::RDoc.new
-        r.document(["--main", "README", "--title",
-            "Puppet -- Site Configuration Management", "--line-numbers"] + files)
-    rescue RDoc::RDocError => e
-        $stderr.puts e.message
-    rescue Exception => e
-        $stderr.puts "Couldn't build RDoc documentation\n#{e.message}"
-    end
-end
-
-def build_ri(files)
-    return unless $haverdoc
-    begin
-        ri = RDoc::RDoc.new
-        #ri.document(["--ri-site", "--merge"] + files)
-        ri.document(["--ri-site"] + files)
-    rescue RDoc::RDocError => e
-        $stderr.puts e.message
-    rescue Exception => e
-        $stderr.puts "Couldn't build Ri documentation\n#{e.message}"
-        $stderr.puts "Continuing with install..."
-    end
-end
-
-def build_man(bins)
-    return unless $haveman
-    begin
-        # Locate rst2man
-        rst2man = %x{which rst2man.py}
-        rst2man.chomp!
-        # Create puppet.conf.8 man page
-        %x{bin/puppetdoc --reference configuration > ./puppet.conf.rst}
-        %x{#{rst2man} ./puppet.conf.rst ./man/man8/puppet.conf.8}
-        File.unlink("./puppet.conf.rst")
-
-        # Create binary man pages
-        bins.each do |bin|
-          b = bin.gsub( "bin/", "")
-          %x{#{bin} --help > ./#{b}.rst}
-          %x{#{rst2man} ./#{b}.rst ./man/man8/#{b}.8}
-          File.unlink("./#{b}.rst")
-        end
-    rescue SystemCallError
-        $stderr.puts "Couldn't build man pages: " + $!
-        $stderr.puts "Continuing with install..."
-    end
-end
-
-def run_tests(test_list)
-	begin
-		require 'test/unit/ui/console/testrunner'
-		$:.unshift "lib"
-		test_list.each do |test|
-		next if File.directory?(test)
-		require test
-		end
-
-		tests = []
-		ObjectSpace.each_object { |o| tests << o if o.kind_of?(Class) } 
-		tests.delete_if { |o| !o.ancestors.include?(Test::Unit::TestCase) }
-		tests.delete_if { |o| o == Test::Unit::TestCase }
-
-		tests.each { |test| Test::Unit::UI::Console::TestRunner.run(test) }
-		$:.shift
-	rescue LoadError
-		puts "Missing testrunner library; skipping tests"
-	end
-end
-
-##
-# Install file(s) from ./bin to Config::CONFIG['bindir']. Patch it on the way
-# to insert a #! line; on a Unix install, the command is named as expected
-# (e.g., bin/rdoc becomes rdoc); the shebang line handles running it. Under
-# windows, we add an '.rb' extension and let file associations do their stuff.
-def install_binfile(from, op_file, target)
-  tmp_dir = nil
-  InstallOptions.tmp_dirs.each do |t|
-    if File.directory?(t) and File.writable?(t)
-      tmp_dir = t
-      break
-    end
-  end
-  
-  fail "Cannot find a temporary directory" unless tmp_dir
-  tmp_file = File.join(tmp_dir, '_tmp')
-  ruby = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
-
-  File.open(from) do |ip|
-    File.open(tmp_file, "w") do |op|
-      ruby = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
-      op.puts "#!#{ruby}"
-      contents = ip.readlines
-      if contents[0] =~ /^#!/
-          contents.shift
-      end
-      op.write contents.join()
-    end
-  end
-
-  if Config::CONFIG["target_os"] =~ /win/io and Config::CONFIG["target_os"] !~ /darwin/io
-    installed_wrapper = false
-
-    if File.exists?("#{from}.bat")
-      FileUtils.install("#{from}.bat", File.join(target, "#{op_file}.bat"), :mode => 0755, :verbose => true)
-      installed_wrapper = true
-    end
-
-    if File.exists?("#{from}.cmd")
-      FileUtils.install("#{from}.cmd", File.join(target, "#{op_file}.cmd"), :mode => 0755, :verbose => true)
-      installed_wrapper = true
-    end
-
-    if not installed_wrapper
-      tmp_file2 = File.join(tmp_dir, '_tmp_wrapper')
-      cwn = File.join(Config::CONFIG['bindir'], op_file)
-      cwv = CMD_WRAPPER.gsub('<ruby>', ruby.gsub(%r{/}) { "\\" }).gsub!('<command>', cwn.gsub(%r{/}) { "\\" } )
-
-      File.open(tmp_file2, "wb") { |cw| cw.puts cwv }
-      FileUtils.install(tmp_file2, File.join(target, "#{op_file}.bat"), :mode => 0755, :verbose => true)
-
-      File.unlink(tmp_file2)
-      installed_wrapper = true
-    end
-  end
-  FileUtils.install(tmp_file, File.join(target, op_file), :mode => 0755, :verbose => true)
-  File.unlink(tmp_file)
-end
-
-CMD_WRAPPER = <<-EOS
- at echo off
-if "%OS%"=="Windows_NT" goto WinNT
-<ruby> -x "<command>" %1 %2 %3 %4 %5 %6 %7 %8 %9
-goto done
-:WinNT
-<ruby> -x "<command>" %*
-goto done
-:done
-EOS
-
-check_prereqs
-prepare_installation
-
-#run_tests(tests) if InstallOptions.tests
-#build_rdoc(rdoc) if InstallOptions.rdoc
-#build_ri(ri) if InstallOptions.ri
-#build_man(bins) if InstallOptions.man
-do_bins(sbins, InstallOptions.sbin_dir)
-do_bins(bins, InstallOptions.bin_dir)
-do_libs(libs)
-do_man(man)
diff --git a/lib/puppet.rb b/lib/puppet.rb
deleted file mode 100644
index acf3246..0000000
--- a/lib/puppet.rb
+++ /dev/null
@@ -1,390 +0,0 @@
-# Try to load rubygems.  Hey rubygems, I hate you.
-begin
-    require 'rubygems'
-rescue LoadError
-end
-
-# see the bottom of the file for further inclusions
-require 'singleton'
-require 'facter'
-require 'puppet/error'
-require 'puppet/external/event-loop'
-require 'puppet/util'
-require 'puppet/util/log'
-require 'puppet/util/autoload'
-require 'puppet/util/settings'
-require 'puppet/util/feature'
-require 'puppet/util/suidmanager'
-
-#------------------------------------------------------------
-# the top-level module
-#
-# all this really does is dictate how the whole system behaves, through
-# preferences for things like debugging
-#
-# it's also a place to find top-level commands like 'debug'
-
-module Puppet
-    PUPPETVERSION = '0.24.6'
-
-    def Puppet.version
-        return PUPPETVERSION
-    end
-
-    class << self
-        # So we can monitor signals and such.
-        include SignalObserver
-
-        include Puppet::Util
-
-        # To keep a copy of arguments.  Set within Config#addargs, because I'm
-        # lazy.
-        attr_accessor :args
-        attr_reader :features
-        attr_writer :name
-    end
-
-    # the hash that determines how our system behaves
-    @@settings = Puppet::Util::Settings.new
-
-    # The services running in this process.
-    @services ||= []
-
-    # define helper messages for each of the message levels
-    Puppet::Util::Log.eachlevel { |level|
-        define_method(level,proc { |args|
-            if args.is_a?(Array)
-                args = args.join(" ")
-            end
-            Puppet::Util::Log.create(
-                :level => level,
-                :message => args
-            )
-        })
-        module_function level
-    }
-
-    # I keep wanting to use Puppet.error
-    # XXX this isn't actually working right now
-    alias :error :err
-    
-    # The feature collection
-    @features = Puppet::Util::Feature.new('puppet/feature')
-
-    # Load the base features.
-    require 'puppet/feature/base'
-
-    # Store a new default value.
-    def self.setdefaults(section, hash)
-        @@settings.setdefaults(section, hash)
-    end
-
-	# configuration parameter access and stuff
-	def self.[](param)
-        case param
-        when :debug:
-            if Puppet::Util::Log.level == :debug
-                return true
-            else
-                return false
-            end
-        else
-            return @@settings[param]
-        end
-	end
-
-	# configuration parameter access and stuff
-	def self.[]=(param,value)
-        @@settings[param] = value
-	end
-
-    def self.clear
-        @@settings.clear
-    end
-
-    def self.debug=(value)
-        if value
-            Puppet::Util::Log.level=(:debug)
-        else
-            Puppet::Util::Log.level=(:notice)
-        end
-    end
-
-    def self.settings
-        @@settings
-    end
-
-    # Load all of the configuration parameters.
-    require 'puppet/defaults'
-
-
-    def self.genmanifest
-        if Puppet[:genmanifest]
-            puts Puppet.settings.to_manifest
-            exit(0)
-        end
-    end
-
-    # Run all threads to their ends
-    def self.join
-        defined? @threads and @threads.each do |t| t.join end
-    end
-
-    # Create a new service that we're supposed to run
-    def self.newservice(service)
-        @services ||= []
-
-        @services << service
-    end
-
-    def self.newthread(&block)
-        @threads ||= []
-
-        @threads << Thread.new do
-            yield
-        end
-    end
-
-    def self.newtimer(hash, &block)
-        timer = nil
-        threadlock(:timers) do
-            @timers ||= []
-            timer = EventLoop::Timer.new(hash)
-            @timers << timer
-
-            if block_given?
-                observe_signal(timer, :alarm, &block)
-            end
-        end
-
-        # In case they need it for something else.
-        timer
-    end
-
-    # Parse the config file for this process.
-    def self.parse_config(oldconfig = nil)
-        # First look for the old configuration file.
-        oldconfig ||= File.join(Puppet[:confdir], Puppet[:name].to_s + ".conf")
-        if FileTest.exists?(oldconfig) and Puppet[:name] != "puppet"
-            Puppet.warning "Individual config files are deprecated; remove %s and use puppet.conf" % oldconfig
-            Puppet.settings.old_parse(oldconfig)
-            return
-        end
-
-        # Now check for the normal config.
-        if Puppet[:config] and File.exists? Puppet[:config]
-            Puppet.debug "Parsing %s" % Puppet[:config]
-            Puppet.settings.parse(Puppet[:config])
-        end
-    end
-
-    # Relaunch the executable.
-    def self.restart
-        command = $0 + " " + self.args.join(" ")
-        Puppet.notice "Restarting with '%s'" % command
-        Puppet.shutdown(false)
-        Puppet::Util::Log.reopen
-        exec(command)
-    end
-
-    # Trap a couple of the main signals.  This should probably be handled
-    # in a way that anyone else can register callbacks for traps, but, eh.
-    def self.settraps
-        [:INT, :TERM].each do |signal|
-            trap(signal) do
-                Puppet.notice "Caught #{signal}; shutting down"
-                Puppet.debug "Signal caught here:"
-                caller.each { |l| Puppet.debug l }
-                Puppet.shutdown
-            end
-        end
-
-        # Handle restarting.
-        trap(:HUP) do
-            if client = @services.find { |s| s.is_a? Puppet::Network::Client.master } and client.running?
-                client.restart
-            else
-                Puppet.restart
-            end
-        end
-
-        # Provide a hook for running clients where appropriate
-        trap(:USR1) do
-            done = 0
-            Puppet.notice "Caught USR1; triggering client run"
-            @services.find_all { |s| s.is_a? Puppet::Network::Client }.each do |client|
-                if client.respond_to? :running?
-                    if client.running?
-                        Puppet.info "Ignoring running %s" % client.class
-                    else
-                        done += 1
-                        begin
-                            client.runnow
-                        rescue => detail
-                            Puppet.err "Could not run client: %s" % detail
-                        end
-                    end
-                else
-                    Puppet.info "Ignoring %s; cannot test whether it is running" %
-                        client.class
-                end
-            end
-
-            unless done > 0
-                Puppet.notice "No clients were run"
-            end
-        end
-
-        trap(:USR2) do
-            Puppet::Util::Log.reopen
-        end
-    end
-
-    # Shutdown our server process, meaning stop all services and all threads.
-    # Optionally, exit.
-    def self.shutdown(leave = true)
-        Puppet.notice "Shutting down"
-        # Unmonitor our timers
-        defined? @timers and @timers.each do |timer|
-            EventLoop.current.ignore_timer timer
-        end
-
-        # This seems to exit the process, although I can't find where it does
-        # so.  Leaving it out doesn't seem to hurt anything.
-        #if EventLoop.current.running?
-        #    EventLoop.current.quit
-        #end
-
-        # Stop our services
-        defined? @services and @services.each do |svc|
-            next unless svc.respond_to?(:shutdown)
-            begin
-                timeout(20) do
-                    svc.shutdown
-                end
-            rescue TimeoutError
-                Puppet.err "%s could not shut down within 20 seconds" % svc.class
-            end
-        end
-
-        # And wait for them all to die, giving a decent amount of time
-        defined? @threads and @threads.each do |thr|
-            begin
-                timeout(20) do
-                    thr.join
-                end
-            rescue TimeoutError
-                # Just ignore this, since we can't intelligently provide a warning
-            end
-        end
-
-        if leave
-            exit(0)
-        end
-    end
-
-    # Start all of our services and optionally our event loop, which blocks,
-    # waiting for someone, somewhere, to generate events of some kind.
-    def self.start(block = true)
-        # Starting everything in its own thread, fwiw
-        defined? @services and @services.dup.each do |svc|
-            newthread do
-                begin
-                    svc.start
-                rescue => detail
-                    if Puppet[:trace]
-                        puts detail.backtrace
-                    end
-                    @services.delete svc
-                    Puppet.err "Could not start %s: %s" % [svc.class, detail]
-                end
-            end
-        end
-
-        # We need to give the services a chance to register their timers before
-        # we try to start monitoring them.
-        sleep 0.5
-
-        unless @services.length > 0
-            Puppet.notice "No remaining services; exiting"
-            exit(1)
-        end
-
-        if defined? @timers and ! @timers.empty?
-            @timers.each do |timer|
-                EventLoop.current.monitor_timer timer
-            end
-        end
-
-        if block
-            EventLoop.current.run
-        end
-    end
-
-    # Create the timer that our different objects (uh, mostly the client)
-    # check.
-    def self.timer
-        unless defined? @timer
-            #Puppet.info "Interval is %s" % Puppet[:runinterval]
-            #@timer = EventLoop::Timer.new(:interval => Puppet[:runinterval])
-            @timer = EventLoop::Timer.new(
-                :interval => Puppet[:runinterval],
-                :tolerance => 1,
-                :start? => true
-            )
-            EventLoop.current.monitor_timer @timer
-        end
-        @timer
-    end
-
-    # XXX this should all be done using puppet objects, not using
-    # normal mkdir
-    def self.recmkdir(dir,mode = 0755)
-        if FileTest.exist?(dir)
-            return false
-        else
-            tmp = dir.sub(/^\//,'')
-            path = [File::SEPARATOR]
-            tmp.split(File::SEPARATOR).each { |dir|
-                path.push dir
-                if ! FileTest.exist?(File.join(path))
-                    begin
-                        Dir.mkdir(File.join(path), mode)
-                    rescue Errno::EACCES => detail
-                        Puppet.err detail.to_s
-                        return false
-                    rescue => detail
-                        Puppet.err "Could not create %s: %s" % [path, detail.to_s]
-                        return false
-                    end
-                elsif FileTest.directory?(File.join(path))
-                    next
-                else FileTest.exist?(File.join(path))
-                    raise Puppet::Error, "Cannot create %s: basedir %s is a file" %
-                        [dir, File.join(path)]
-                end
-            }
-            return true
-        end
-    end
-
-    # Create a new type.  Just proxy to the Type class.
-    def self.newtype(name, options = {}, &block)
-        Puppet::Type.newtype(name, options, &block)
-    end
-
-    # Retrieve a type by name.  Just proxy to the Type class.
-    def self.type(name)
-        Puppet::Type.type(name)
-    end
-end
-
-require 'puppet/type'
-require 'puppet/network'
-require 'puppet/module'
-require 'puppet/util/storage'
-require 'puppet/parser/interpreter'
-if Puppet[:storeconfigs]
-    require 'puppet/rails'
-end
-
diff --git a/lib/puppet/checksum.rb b/lib/puppet/checksum.rb
deleted file mode 100644
index 27f08aa..0000000
--- a/lib/puppet/checksum.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-9-22.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet'
-require 'puppet/util/checksums'
-require 'puppet/indirector'
-
-# A checksum class to model translating checksums to file paths.  This
-# is the new filebucket.
-class Puppet::Checksum
-    include Puppet::Util::Checksums
-
-    extend Puppet::Indirector
-
-    indirects :checksum
-
-    attr_reader :algorithm, :content
-
-    def algorithm=(value)
-        unless respond_to?(value)
-            raise ArgumentError, "Checksum algorithm %s is not supported" % value
-        end
-        value = value.intern if value.is_a?(String)
-        @algorithm = value
-        # Reset the checksum so it's forced to be recalculated.
-        @checksum = nil
-    end
-
-    # Calculate (if necessary) and return the checksum
-    def checksum
-        unless @checksum
-            @checksum = send(algorithm, content)
-        end
-        @checksum
-    end
-
-    def initialize(content, algorithm = "md5")
-        raise ArgumentError.new("You must specify the content") unless content
-
-        @content = content
-
-        # Init to avoid warnings.
-        @checksum = nil
-
-        self.algorithm = algorithm
-    end
-
-    # This is here so the Indirector::File terminus works correctly.
-    def name
-        checksum
-    end
-
-    def to_s
-        "Checksum<{%s}%s>" % [algorithm, checksum]
-    end
-end
diff --git a/lib/puppet/config_stores/rest.rb b/lib/puppet/config_stores/rest.rb
deleted file mode 100644
index bb3d937..0000000
--- a/lib/puppet/config_stores/rest.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-Puppet::Util::SettingsStore.newstore(:rest) do
-    desc "Store client configurations via a REST web service."
-
-    require 'net/http'
- 
-    # Get a client's config. (called in collector?)
-    def get(client, config)
-        # Assuming this comes in as Puppet::Parser objects
-        # we may need way to choose which transport data type we use.
-       
-        # hmm.. is this even useful for stored configs? I suppose there could
-        # be scenarios where it'd be cool, like ralsh or something.
-    end
-
-    def initialize
-        @host = Puppet[:puppetstorehost]
-        @port = Puppet[:puppetstoreport]
-
-	# Not sure if this is bad idea to share.
-        @http = Net::HTTP.new(@host, @port)
-    end
-
-    # Store config to the web service. (called in getconfig?)
-    def store(client, config)
-        # Probably store as yaml...
-        puppetstore = Thread.new do
-            benchmark(:notice, "Stored configuration for %s" % client) do
-                begin
-		    # config should come from elsewhere; probably in getconfig I assume.
-                    # should probably allow a config option for the serialization type.
-                    yaml = YAML.dump(config)
-                    url = "/collector/create"
-                    @http.post(url, yaml, { 'Content-Type' => 'text/yaml' })
-                rescue => detail
-                    Puppet.err("ERROR: storeconfig failed: ", detail.to_s)
-                end
-            end
-        end
-        puppetstore.run
-    end
-
-    # Rough first try... assuming the calling method handles the data type conversion
-    # Can we use a thread here? Probably needs to be the caller's thread.
-    def collect_exported(client, conditions)
-        begin
-            # Gotta be a better way... seems goofy to me.
-            # maybe using a nested rails rest route...
-           
-            # filterhost so we don't get exported resources for the current client
-            url = "/resources?restype=exported&filterhost=#{client}"
-            conditions.each_pair {|k,v| url << "&#{k}=#{v}"}
-            res = @http.get(url)
-        rescue => detail
-            Puppet.err("ERROR: collect_exported failed: ", detail.to_s)
-        end
-
-        return res.body unless !res.is_a?(Net::HTTPOK)
-    end
-
-end
diff --git a/lib/puppet/daemon.rb b/lib/puppet/daemon.rb
deleted file mode 100755
index 24d7437..0000000
--- a/lib/puppet/daemon.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-require 'puppet'
-require 'puppet/util/pidlock'
-
-# A module that handles operations common to all daemons.  This is included
-# into the Server and Client base classes.
-module Puppet::Daemon
-    include Puppet::Util
-
-    def daemonname
-        Puppet[:name]
-    end
-
-    # Put the daemon into the background.
-    def daemonize
-        if pid = fork()
-            Process.detach(pid)
-            exit(0)
-        end
-        
-        setpidfile()
-
-        # Get rid of console logging
-        Puppet::Util::Log.close(:console)
-
-        Process.setsid
-        Dir.chdir("/")
-        begin
-            $stdin.reopen "/dev/null"
-            $stdout.reopen "/dev/null", "a"
-            $stderr.reopen $stdout
-            Puppet::Util::Log.reopen
-        rescue => detail
-            File.open("/tmp/daemonout", "w") { |f|
-                f.puts "Could not start %s: %s" % [Puppet[:name], detail]
-            }
-            Puppet.err "Could not start %s: %s" % [Puppet[:name], detail]
-            exit(12)
-        end
-    end
-
-    # The path to the pid file for this server
-    def pidfile
-        if Puppet[:pidfile] != ""
-            Puppet[:pidfile]
-        else
-            File.join(Puppet[:rundir], daemonname() + ".pid")
-        end
-    end
-
-    # Remove the pid file
-    def rmpidfile
-        threadlock(:pidfile) do
-            locker = Puppet::Util::Pidlock.new(pidfile)
-            if locker.locked?
-                locker.unlock or Puppet.err "Could not remove PID file %s" % [pidfile]
-            end
-        end
-    end
-
-    # Create the pid file.
-    def setpidfile
-        threadlock(:pidfile) do
-            unless Puppet::Util::Pidlock.new(pidfile).lock
-                Puppet.err("Could not create PID file: %s" % [pidfile])
-                exit(74)
-            end
-        end
-    end
-
-    # Shut down our server
-    def shutdown
-        # Remove our pid file
-        rmpidfile()
-
-        # And close all logs except the console.
-        Puppet::Util::Log.destinations.reject { |d| d == :console }.each do |dest|
-            Puppet::Util::Log.close(dest)
-        end
-
-        super
-    end
-end
-
diff --git a/lib/puppet/defaults.rb b/lib/puppet/defaults.rb
deleted file mode 100644
index e1b6dc4..0000000
--- a/lib/puppet/defaults.rb
+++ /dev/null
@@ -1,688 +0,0 @@
-# The majority of the system configuration parameters are set in this file.
-module Puppet
-    # If we're running the standalone puppet process as a non-root user,
-    # use basedirs that are in the user's home directory.
-    conf = nil
-    var = nil
-    name = $0.gsub(/.+#{File::SEPARATOR}/,'').sub(/\.rb$/, '')
-
-    # Make File.expand_path happy
-    require 'etc'
-    ENV["HOME"] ||= Etc.getpwuid(Process.uid).dir
-
-    if name != "puppetmasterd" and Puppet::Util::SUIDManager.uid != 0
-        conf = File.expand_path("~/.puppet")
-        var = File.expand_path("~/.puppet/var")
-    else
-        # Else, use system-wide directories.
-        conf = "/etc/puppet"
-        var = "/var/puppet"
-    end
-
-    self.setdefaults(:main,
-        :confdir => [conf, "The main Puppet configuration directory.  The default for this parameter is calculated based on the user.  If the process
-        is runnig as root or the user that ``puppetmasterd`` is supposed to run as, it defaults to a system directory, but if it's running as any other user,
-        it defaults to being in ``~``."],
-        :vardir => [var, "Where Puppet stores dynamic and growing data.  The default for this parameter is calculated specially, like `confdir`_."],
-        :name => [name, "The name of the service, if we are running as one.  The
-            default is essentially $0 without the path or ``.rb``."]
-    )
-
-    if name == "puppetmasterd"
-        logopts = {:default => "$vardir/log",
-            :mode => 0750,
-            :owner => "$user",
-            :group => "$group",
-            :desc => "The Puppet log directory."
-        }
-    else
-        logopts = ["$vardir/log", "The Puppet log directory."]
-    end
-    setdefaults(:main, :logdir => logopts)
-    
-    # This name hackery is necessary so that the rundir is set reasonably during
-    # unit tests.
-    if Process.uid == 0 and %w{puppetd puppetmasterd}.include?(self.name)
-        rundir = "/var/run/puppet"
-    else
-        rundir = "$vardir/run"
-    end
-
-    self.setdefaults(:main,
-        :trace => [false, "Whether to print stack traces on some errors"],
-        :autoflush => [false, "Whether log files should always flush to disk."],
-        :syslogfacility => ["daemon", "What syslog facility to use when logging to
-            syslog.  Syslog has a fixed list of valid facilities, and you must
-            choose one of those; you cannot just make one up."],
-        :statedir => { :default => "$vardir/state",
-            :mode => 01755,
-            :desc => "The directory where Puppet state is stored.  Generally,
-                this directory can be removed without causing harm (although it
-                might result in spurious service restarts)."
-        },
-        :ssldir => {
-            :default => "$confdir/ssl",
-            :mode => 0771,
-            :owner => "root",
-            :desc => "Where SSL certificates are kept."
-        },
-        :rundir => { 
-            :default => rundir,
-            :mode => 01777,
-            :desc => "Where Puppet PID files are kept."
-        },
-        :genconfig => [false,
-            "Whether to just print a configuration to stdout and exit.  Only makes
-            sense when used interactively.  Takes into account arguments specified
-            on the CLI."],
-        :genmanifest => [false,
-            "Whether to just print a manifest to stdout and exit.  Only makes
-            sense when used interactively.  Takes into account arguments specified
-            on the CLI."],
-        :configprint => ["",
-            "Print the value of a specific configuration parameter.  If a
-            parameter is provided for this, then the value is printed and puppet
-            exits.  Comma-separate multiple values.  For a list of all values,
-            specify 'all'.  This feature is only available in Puppet versions
-            higher than 0.18.4."],
-        :color => ["ansi", "Whether to use colors when logging to the console.
-            Valid values are ``ansi`` (equivalent to ``true``), ``html`` (mostly
-            used during testing with TextMate), and ``false``, which produces
-            no color."],
-        :mkusers => [false,
-            "Whether to create the necessary user and group that puppetd will
-            run as."],
-        :path => {:default => "none",
-            :desc => "The shell search path.  Defaults to whatever is inherited
-                from the parent process.",
-            :hook => proc do |value|
-                ENV["PATH"] = value unless value == "none"
-            end
-        },
-        :libdir => {:default => "$vardir/lib",
-            :desc => "An extra search path for Puppet.  This is only useful
-                for those files that Puppet will load on demand, and is only
-                guaranteed to work for those cases.  In fact, the autoload
-                mechanism is responsible for making sure this directory
-                is in Ruby's search path",
-            :call_on_define => true, # Call our hook with the default value, so we always get the libdir set.
-            :hook => proc do |value|
-                if defined? @oldlibdir and $:.include?(@oldlibdir)
-                    $:.delete(@oldlibdir)
-                end
-                @oldlibdir = value
-                $: << value
-            end
-        },
-        :ignoreimport => [false, "A parameter that can be used in commit
-            hooks, since it enables you to parse-check a single file rather
-            than requiring that all files exist."],
-        :authconfig => [ "$confdir/namespaceauth.conf",
-            "The configuration file that defines the rights to the different
-            namespaces and methods.  This can be used as a coarse-grained
-            authorization system for both ``puppetd`` and ``puppetmasterd``."
-        ],
-        :environment => {:default => "production", :desc => "The environment Puppet is running in.  For clients
-            (e.g., ``puppetd``) this determines the environment itself, which
-            is used to find modules and much more.  For servers (i.e.,
-            ``puppetmasterd``) this provides the default environment for nodes
-            we know nothing about."
-        },
-        :diff_args => ["", "Which arguments to pass to the diff command when printing differences between files."],
-        :diff => ["diff", "Which diff command to use when printing differences between files."],
-        :show_diff => [false, "Whether to print a contextual diff when files are being replaced.  The diff
-            is printed on stdout, so this option is meaningless unless you are running Puppet interactively.
-            This feature currently requires the ``diff/lcs`` Ruby library."],
-        :daemonize => { :default => true,
-            :desc => "Send the process into the background.  This is the default.",
-            :short => "D"
-        },
-        :maximum_uid => [4294967290, "The maximum allowed UID.  Some platforms use negative UIDs
-            but then ship with tools that do not know how to handle signed ints, so the UIDs show up as
-            huge numbers that can then not be fed back into the system.  This is a hackish way to fail in a
-            slightly more useful way when that happens."],
-        :node_terminus => ["plain", "Where to find information about nodes."]
-    )
-
-    hostname = Facter["hostname"].value
-    domain = Facter["domain"].value
-    if domain and domain != ""
-        fqdn = [hostname, domain].join(".")
-    else
-        fqdn = hostname
-    end
-
-    Puppet.setdefaults(:ssl,
-        # We have to downcase the fqdn, because the current ssl stuff (as oppsed to in master) doesn't have good facilities for 
-        # manipulating naming.
-        :certname => {:default => fqdn.downcase, :desc => "The name to use when handling certificates.  Defaults
-            to the fully qualified domain name.",
-            :call_on_define => true, # Call our hook with the default value, so we're always downcased
-            :hook => proc { |value| raise(ArgumentError, "Certificate names must be lower case; see #1168") unless value == value.downcase }},
-        :certdnsnames => ['', "The DNS names on the Server certificate as a colon-separated list.
-            If it's anything other than an empty string, it will be used as an alias in the created
-            certificate.  By default, only the server gets an alias set up, and only for 'puppet'."],
-        :certdir => ["$ssldir/certs", "The certificate directory."],
-        :publickeydir => ["$ssldir/public_keys", "The public key directory."],
-        :privatekeydir => { :default => "$ssldir/private_keys",
-            :mode => 0750,
-            :desc => "The private key directory."
-        },
-        :privatedir => { :default => "$ssldir/private",
-            :mode => 0750,
-            :desc => "Where the client stores private certificate information."
-        },
-        :passfile => { :default => "$privatedir/password",
-            :mode => 0640,
-            :desc => "Where puppetd stores the password for its private key.
-                Generally unused."
-        },
-        :hostcsr => { :default => "$ssldir/csr_$certname.pem",
-            :mode => 0644,
-            :desc => "Where individual hosts store and look for their certificates."
-        },
-        :hostcert => { :default => "$certdir/$certname.pem",
-            :mode => 0644,
-            :desc => "Where individual hosts store and look for their certificates."
-        },
-        :hostprivkey => { :default => "$privatekeydir/$certname.pem",
-            :mode => 0600,
-            :desc => "Where individual hosts store and look for their private key."
-        },
-        :hostpubkey => { :default => "$publickeydir/$certname.pem",
-            :mode => 0644,
-            :desc => "Where individual hosts store and look for their public key."
-        },
-        :localcacert => { :default => "$certdir/ca.pem",
-            :mode => 0644,
-            :desc => "Where each client stores the CA certificate."
-        }
-    )
-
-    setdefaults(:ca,
-        :cadir => {  :default => "$ssldir/ca",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0770,
-            :desc => "The root directory for the certificate authority."
-        },
-        :cacert => { :default => "$cadir/ca_crt.pem",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0660,
-            :desc => "The CA certificate."
-        },
-        :cakey => { :default => "$cadir/ca_key.pem",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0660,
-            :desc => "The CA private key."
-        },
-        :capub => { :default => "$cadir/ca_pub.pem",
-            :owner => "$user",
-            :group => "$group",
-            :desc => "The CA public key."
-        },
-        :cacrl => { :default => "$cadir/ca_crl.pem",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0664,
-            :desc => "The certificate revocation list (CRL) for the CA. Set this to 'false' if you do not want to use a CRL."
-        },
-        :caprivatedir => { :default => "$cadir/private",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0770,
-            :desc => "Where the CA stores private certificate information."
-        },
-        :csrdir => { :default => "$cadir/requests",
-            :owner => "$user",
-            :group => "$group",
-            :desc => "Where the CA stores certificate requests"
-        },
-        :signeddir => { :default => "$cadir/signed",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0770,
-            :desc => "Where the CA stores signed certificates."
-        },
-        :capass => { :default => "$caprivatedir/ca.pass",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0660,
-            :desc => "Where the CA stores the password for the private key"
-        },
-        :serial => { :default => "$cadir/serial",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0600,
-            :desc => "Where the serial number for certificates is stored."
-        },
-        :autosign => { :default => "$confdir/autosign.conf",
-            :mode => 0644,
-            :desc => "Whether to enable autosign.  Valid values are true (which
-                autosigns any key request, and is a very bad idea), false (which
-                never autosigns any key request), and the path to a file, which
-                uses that configuration file to determine which keys to sign."},
-        :ca_days => ["", "How long a certificate should be valid. 
-                 This parameter is deprecated, use ca_ttl instead"],
-        :ca_ttl => ["5y", "The default TTL for new certificates; valid values 
-                must be an integer, optionally followed by one of the units 
-                'y' (years of 365 days), 'd' (days), 'h' (hours), or 
-                's' (seconds). The unit defaults to seconds. If this parameter
-                is set, ca_days is ignored. Examples are '3600' (one hour) 
-                and '1825d', which is the same as '5y' (5 years) "],
-        :ca_md => ["md5", "The type of hash used in certificates."],
-        :req_bits => [2048, "The bit length of the certificates."],
-        :keylength => [1024, "The bit length of keys."],
-        :cert_inventory => {
-            :default => "$cadir/inventory.txt",
-            :mode => 0644,
-            :owner => "$user",
-            :group => "$group",
-            :desc => "A Complete listing of all certificates"
-        }
-    )
-
-    # Define the config default.
-    self.setdefaults(self.settings[:name],
-        :config => ["$confdir/puppet.conf",
-            "The configuration file for #{Puppet[:name]}."],
-        :pidfile => ["", "The pid file"],
-        :bindaddress => ["", "The address to bind to.  Mongrel servers
-            default to 127.0.0.1 and WEBrick defaults to 0.0.0.0."],
-        :servertype => ["webrick", "The type of server to use.  Currently supported
-            options are webrick and mongrel.  If you use mongrel, you will need
-            a proxy in front of the process or processes, since Mongrel cannot
-            speak SSL."]
-    )
-
-    self.setdefaults(:puppetmasterd,
-        :user => ["puppet", "The user puppetmasterd should run as."],
-        :group => ["puppet", "The group puppetmasterd should run as."],
-        :manifestdir => ["$confdir/manifests",
-            "Where puppetmasterd looks for its manifests."],
-        :manifest => ["$manifestdir/site.pp",
-            "The entry-point manifest for puppetmasterd."],
-        :code => ["", "Code to parse directly.  This is essentially only used
-            by ``puppet``, and should only be set if you're writing your own Puppet
-            executable"],
-        :masterlog => { :default => "$logdir/puppetmaster.log",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0660,
-            :desc => "Where puppetmasterd logs.  This is generally not used,
-                since syslog is the default log destination."
-        },
-        :masterhttplog => { :default => "$logdir/masterhttp.log",
-            :owner => "$user",
-            :group => "$group",
-            :mode => 0660,
-            :create => true,
-            :desc => "Where the puppetmasterd web server logs."
-        },
-        :masterport => [8140, "Which port puppetmasterd listens on."],
-        :parseonly => [false, "Just check the syntax of the manifests."],
-        :node_name => ["cert", "How the puppetmaster determines the client's identity 
-           and sets the 'hostname', 'fqdn' and 'domain' facts for use in the manifest, 
-           in particular for determining which 'node' statement applies to the client. 
-           Possible values are 'cert' (use the subject's CN in the client's 
-           certificate) and 'facter' (use the hostname that the client 
-           reported in its facts)"],
-        :bucketdir => {
-            :default => "$vardir/bucket",
-            :mode => 0750,
-            :owner => "$user",
-            :group => "$group",
-            :desc => "Where FileBucket files are stored."
-        },
-        :ca => [true, "Wether the master should function as a certificate authority."],
-        :modulepath => [ "$confdir/modules:/usr/share/puppet/modules",
-           "The search path for modules as a colon-separated list of
-            directories." ],
-        :ssl_client_header => ["HTTP_X_CLIENT_DN", "The header containing an authenticated
-            client's SSL DN.  Only used with Mongrel.  This header must be set by the proxy
-            to the authenticated client's SSL DN (e.g., ``/CN=puppet.reductivelabs.com``).
-            See http://reductivelabs.com/puppet/trac/wiki/UsingMongrel for more information."],
-        :ssl_client_verify_header => ["HTTP_X_CLIENT_VERIFY", "The header containing the status
-            message of the client verification. Only used with Mongrel.  This header must be set by the proxy
-            to 'SUCCESS' if the client successfully authenticated, and anything else otherwise.
-            See http://reductivelabs.com/puppet/trac/wiki/UsingMongrel for more information."],
-        # To make sure this directory is created before we try to use it on the server, we need
-        # it to be in the server section (#1138).
-        :yamldir => {:default => "$vardir/yaml", :owner => "$user", :group => "$user", :mode => "750",
-            :desc => "The directory in which YAML data is stored, usually in a subdirectory."},
-        :clientyamldir => {:default => "$vardir/client_yaml", :mode => "750",
-            :desc => "The directory in which client-side YAML data is stored."}
-    )
-
-    self.setdefaults(:puppetd,
-        :localconfig => { :default => "$statedir/localconfig",
-            :owner => "root",
-            :mode => 0660,
-            :desc => "Where puppetd caches the local configuration.  An
-                extension indicating the cache format is added automatically."},
-        :statefile => { :default => "$statedir/state.yaml",
-            :mode => 0660,
-            :desc => "Where puppetd and puppetmasterd store state associated
-                with the running configuration.  In the case of puppetmasterd,
-                this file reflects the state discovered through interacting
-                with clients."
-            },
-        :classfile => { :default => "$statedir/classes.txt",
-            :owner => "root",
-            :mode => 0644,
-            :desc => "The file in which puppetd stores a list of the classes
-                associated with the retrieved configuration.  Can be loaded in
-                the separate ``puppet`` executable using the ``--loadclasses``
-                option."},
-        :puppetdlog => { :default => "$logdir/puppetd.log",
-            :owner => "root",
-            :mode => 0640,
-            :desc => "The log file for puppetd.  This is generally not used."
-        },
-        :httplog => { :default => "$logdir/http.log",
-            :owner => "root",
-            :mode => 0640,
-            :desc => "Where the puppetd web server logs."
-        },
-        :http_proxy_host => ["none",
-            "The HTTP proxy host to use for outgoing connections.  Note: You
-            may need to use a FQDN for the server hostname when using a proxy."],
-        :http_proxy_port => [3128,
-            "The HTTP proxy port to use for outgoing connections"],
-        :http_enable_post_connection_check => [true,
-            "Boolean; wheter or not puppetd should validate the server
-            SSL certificate against the request hostname."],
-        :server => ["puppet",
-            "The server to which server puppetd should connect"],
-        :ignoreschedules => [false,
-            "Boolean; whether puppetd should ignore schedules.  This is useful
-            for initial puppetd runs."],
-        :puppetport => [8139, "Which port puppetd listens on."],
-        :noop => [false, "Whether puppetd should be run in noop mode."],
-        :runinterval => [1800, # 30 minutes
-            "How often puppetd applies the client configuration; in seconds."],
-        :listen => [false, "Whether puppetd should listen for
-            connections.  If this is true, then by default only the
-            ``runner`` server is started, which allows remote authorized
-            and authenticated nodes to connect and trigger ``puppetd``
-            runs."],
-        :ca_server => ["$server", "The server to use for certificate
-            authority requests.  It's a separate server because it cannot
-            and does not need to horizontally scale."],
-        :ca_port => ["$masterport", "The port to use for the certificate authority."],
-        :catalog_format => ["yaml", "What format to use to dump the catalog.  Only supports
-            'marshal' and 'yaml'.  Only matters on the client, since it asks the server
-            for a specific format."]
-    )
-        
-    self.setdefaults(:filebucket,
-        :clientbucketdir => {
-            :default => "$vardir/clientbucket",
-            :mode => 0750,
-            :desc => "Where FileBucket files are stored locally."
-        }
-    )
-    self.setdefaults(:fileserver,
-        :fileserverconfig => ["$confdir/fileserver.conf",
-            "Where the fileserver configuration is stored."]
-    )
-    self.setdefaults(:reporting,
-        :reports => ["store",
-            "The list of reports to generate.  All reports are looked for
-            in puppet/reports/<name>.rb, and multiple report names should be
-            comma-separated (whitespace is okay)."
-        ],
-        :reportdir => {:default => "$vardir/reports",
-                :mode => 0750,
-                :owner => "$user",
-                :group => "$group",
-                :desc => "The directory in which to store reports
-                    received from the client.  Each client gets a separate
-                    subdirectory."}
-    )
-    self.setdefaults(:puppetd,
-        :puppetdlockfile => [ "$statedir/puppetdlock",
-            "A lock file to temporarily stop puppetd from doing anything."],
-        :usecacheonfailure => [true,
-            "Whether to use the cached configuration when the remote
-            configuration will not compile.  This option is useful for testing
-            new configurations, where you want to fix the broken configuration
-            rather than reverting to a known-good one."
-        ],
-        :ignorecache => [false,
-            "Ignore cache and always recompile the configuration.  This is
-            useful for testing new configurations, where the local cache may in
-            fact be stale even if the timestamps are up to date - if the facts
-            change or if the server changes."
-        ],
-        :downcasefacts => [false,
-            "Whether facts should be made all lowercase when sent to the server."],
-        :dynamicfacts => ["memorysize,memoryfree,swapsize,swapfree",
-            "Facts that are dynamic; these facts will be ignored when deciding whether
-            changed facts should result in a recompile.  Multiple facts should be
-            comma-separated."],
-        :splaylimit => ["$runinterval",
-            "The maximum time to delay before runs.  Defaults to being the same as the
-            run interval."],
-        :splay => [false,
-            "Whether to sleep for a pseudo-random (but consistent) amount of time before
-            a run."]
-    )
-
-    self.setdefaults(:puppetd,
-        :configtimeout => [120,
-            "How long the client should wait for the configuration to be retrieved
-            before considering it a failure.  This can help reduce flapping if too
-            many clients contact the server at one time."
-        ],
-        :reportserver => ["$server",
-            "The server to which to send transaction reports."
-        ],
-        :report => [false,
-            "Whether to send reports after every transaction."
-        ]
-    )
-
-    # Plugin information.
-    self.setdefaults(:main,
-        :pluginpath => ["$vardir/plugins",
-            "Where Puppet should look for plugins.  Multiple directories should
-            be colon-separated, like normal PATH variables.  As of 0.23.1, this
-            option is deprecated; download your custom libraries to the $libdir
-            instead."],
-        :plugindest => ["$libdir",
-            "Where Puppet should store plugins that it pulls down from the central
-            server."],
-        :pluginsource => ["puppet://$server/plugins",
-            "From where to retrieve plugins.  The standard Puppet ``file`` type
-             is used for retrieval, so anything that is a valid file source can
-             be used here."],
-        :pluginsync => [false,
-            "Whether plugins should be synced with the central server."],
-        :pluginsignore => [".svn CVS",
-            "What files to ignore when pulling down plugins."]
-    )
-
-    # Central fact information.
-    self.setdefaults(:main,
-        :factpath => {:default => "$vardir/facts",
-            :desc => "Where Puppet should look for facts.  Multiple directories should
-                be colon-separated, like normal PATH variables.",
-            :call_on_define => true, # Call our hook with the default value, so we always get the value added to facter.
-            :hook => proc { |value| Facter.search(value) if Facter.respond_to?(:search) }},
-        :factdest => ["$vardir/facts",
-            "Where Puppet should store facts that it pulls down from the central
-            server."],
-        :factsource => ["puppet://$server/facts",
-            "From where to retrieve facts.  The standard Puppet ``file`` type
-             is used for retrieval, so anything that is a valid file source can
-             be used here."],
-        :factsync => [false,
-            "Whether facts should be synced with the central server."],
-        :factsignore => [".svn CVS",
-            "What files to ignore when pulling down facts."]
-    )
-
-    self.setdefaults(:tagmail,
-        :tagmap => ["$confdir/tagmail.conf",
-            "The mapping between reporting tags and email addresses."],
-        :sendmail => [%x{which sendmail 2>/dev/null}.chomp,
-            "Where to find the sendmail binary with which to send email."],
-        :reportfrom => ["report@" + [Facter["hostname"].value, Facter["domain"].value].join("."),
-            "The 'from' email address for the reports."],
-        :smtpserver => ["none",
-            "The server through which to send email reports."]
-    )
-
-    self.setdefaults(:rails,
-        :dblocation => { :default => "$statedir/clientconfigs.sqlite3",
-            :mode => 0660,
-            :owner => "$user",
-            :group => "$group",
-            :desc => "The database cache for client configurations.  Used for
-                querying within the language."
-        },
-        :dbadapter => [ "sqlite3", "The type of database to use." ],
-        :dbmigrate => [ false, "Whether to automatically migrate the database." ],
-        :dbname => [ "puppet", "The name of the database to use." ],
-        :dbserver => [ "localhost", "The database server for Client caching. Only
-            used when networked databases are used."],
-        :dbuser => [ "puppet", "The database user for Client caching. Only
-            used when networked databases are used."],
-        :dbpassword => [ "puppet", "The database password for Client caching. Only
-            used when networked databases are used."],
-        :dbsocket => [ "", "The database socket location. Only used when networked
-            databases are used.  Will be ignored if the value is an empty string."],
-        :railslog => {:default => "$logdir/rails.log",
-            :mode => 0600,
-            :owner => "$user",
-            :group => "$group",
-            :desc => "Where Rails-specific logs are sent"
-        },
-        :rails_loglevel => ["info", "The log level for Rails connections.  The value must be
-            a valid log level within Rails.  Production environments normally use ``info``
-            and other environments normally use ``debug``."]
-    )
-
-    setdefaults(:graphing,
-        :graph => [false, "Whether to create dot graph files for the different
-            configuration graphs.  These dot files can be interpreted by tools
-            like OmniGraffle or dot (which is part of ImageMagick)."],
-        :graphdir => ["$statedir/graphs", "Where to store dot-outputted graphs."]
-    )
-
-    setdefaults(:transaction,
-        :tags => ["", "Tags to use to find resources.  If this is set, then
-            only resources tagged with the specified tags will be applied.
-            Values must be comma-separated."],
-        :evaltrace => [false, "Whether each resource should log when it is
-            being evaluated.  This allows you to interactively see exactly
-            what is being done."],
-        :summarize => [false,
-            "Whether to print a transaction summary."
-        ]
-    )
-
-    setdefaults(:parser,
-        :typecheck => [true, "Whether to validate types during parsing."],
-        :paramcheck => [true, "Whether to validate parameters during parsing."]
-    )
-    
-    setdefaults(:main,
-        :casesensitive => [false,
-            "Whether matching in case statements and selectors
-            should be case-sensitive.  Case insensitivity is
-            handled by downcasing all values before comparison."],
-        :external_nodes => ["none",
-            "An external command that can produce node information.  The output
-            must be a YAML dump of a hash, and that hash must have one or both of
-            ``classes`` and ``parameters``, where ``classes`` is an array and
-            ``parameters`` is a hash.  For unknown nodes, the commands should
-            exit with a non-zero exit code.
-
-            This command makes it straightforward to store your node mapping
-            information in other data sources like databases."])
-
-    setdefaults(:ldap,
-        :ldapnodes => [false,
-            "Whether to search for node configurations in LDAP.  See
-            http://reductivelabs.com/puppet/trac/wiki/LdapNodes/ for more information."],
-        :ldapssl => [false,
-            "Whether SSL should be used when searching for nodes.
-            Defaults to false because SSL usually requires certificates
-            to be set up on the client side."],
-        :ldaptls => [false,
-            "Whether TLS should be used when searching for nodes.
-            Defaults to false because TLS usually requires certificates
-            to be set up on the client side."],
-        :ldapserver => ["ldap",
-            "The LDAP server.  Only used if ``ldapnodes`` is enabled."],
-        :ldapport => [389,
-            "The LDAP port.  Only used if ``ldapnodes`` is enabled."],
-        :ldapstring => ["(&(objectclass=puppetClient)(cn=%s))",
-            "The search string used to find an LDAP node."],
-        :ldapclassattrs => ["puppetclass",
-            "The LDAP attributes to use to define Puppet classes.  Values
-            should be comma-separated."],
-        :ldapstackedattrs => ["puppetvar",
-            "The LDAP attributes that should be stacked to arrays by adding
-            the values in all hierarchy elements of the tree.  Values
-            should be comma-separated."],
-        :ldapattrs => ["all",
-            "The LDAP attributes to include when querying LDAP for nodes.  All
-            returned attributes are set as variables in the top-level scope.
-            Multiple values should be comma-separated.  The value 'all' returns
-            all attributes."],
-        :ldapparentattr => ["parentnode",
-            "The attribute to use to define the parent node."],
-        :ldapuser => ["",
-            "The user to use to connect to LDAP.  Must be specified as a
-            full DN."],
-        :ldappassword => ["",
-            "The password to use to connect to LDAP."],
-        :ldapbase => ["",
-            "The search base for LDAP searches.  It's impossible to provide
-            a meaningful default here, although the LDAP libraries might
-            have one already set.  Generally, it should be the 'ou=Hosts'
-            branch under your main directory."]
-    )
-
-    setdefaults(:puppetmasterd,
-        :storeconfigs => [false,
-            "Whether to store each client's configuration.  This
-             requires ActiveRecord from Ruby on Rails."]
-    )
-
-    # This doesn't actually work right now.
-    setdefaults(:parser,
-        :lexical => [false, "Whether to use lexical scoping (vs. dynamic)."],
-        :templatedir => ["$vardir/templates",
-            "Where Puppet looks for template files.  Can be a list of colon-seperated
-             directories."
-        ]
-    )
-
-    setdefaults(:main,
-        :filetimeout => [ 15,
-            "The minimum time to wait (in seconds) between checking for updates in
-            configuration files.  This timeout determines how quickly Puppet checks whether
-            a file (such as manifests or templates) has changed on disk."
-        ]
-    )
-
-    setdefaults(:metrics,
-        :rrddir => {:default => "$vardir/rrd",
-            :owner => "$user",
-            :group => "$group",
-            :desc => "The directory where RRD database files are stored.
-                Directories for each reporting host will be created under
-                this directory."
-        },
-        :rrdgraph => [false, "Whether RRD information should be graphed."],
-        :rrdinterval => ["$runinterval", "How often RRD should expect data.
-            This should match how often the hosts report back to the server."]
-    )
-end
-
diff --git a/lib/puppet/dsl.rb b/lib/puppet/dsl.rb
deleted file mode 100644
index 714b350..0000000
--- a/lib/puppet/dsl.rb
+++ /dev/null
@@ -1,275 +0,0 @@
-# Just quick mess-around to see what a DSL would look like.
-# 
-# This is what the executable could look like:
-##!/usr/bin/env ruby
-#
-#require 'puppet'
-#require 'puppet/dsl'
-#
-#Puppet::DSL.import(ARGV[0])
-#
-#bucket = Puppet::TransBucket.new
-#bucket.type = "top"
-#bucket.keyword = "class"
-#
-#Puppet::DSL.find_all do |name, sub|
-#    sub.included
-#end.each do |name, sub|
-#    bucket.push sub.export
-#end
-#
-#puts bucket.to_manifest
-#
-# And here's what an example config could look like:
-#
-
-##!/usr/bin/env ruby
-#
-#
-# require 'puppet'
-# require 'puppet/dsl'
-# 
-# include Puppet::DSL
-# init()
-# 
-# aspect :webserver do
-#     file "/tmp/testone", :content => "yaytest"
-# 
-#     exec "testing", :command => "/bin/echo this is a test"
-# end
-# 
-# aspect :other, :inherits => :webserver do
-#     file "/tmp/testone", :mode => "755"
-# end
-# 
-# acquire :other
-# 
-# apply
-
-require 'puppet'
-
-# Provide the actual commands for acting like a language.
-module Puppet::DSL
-    def aspect(name, options = {}, &block)
-        Puppet::DSL::Aspect.new(name, options, &block)
-    end
-
-    def acquire(*names)
-        names.each do |name|
-            if aspect = Puppet::DSL::Aspect[name]
-                unless aspect.evaluated?
-                    aspect.evaluate
-                end
-            else
-                raise "Could not find aspect %s" % name
-            end
-        end
-    end
-
-    def apply
-        bucket = export()
-        catalog = bucket.to_catalog
-        catalog.apply
-    end
-
-    def export
-        objects = Puppet::DSL::Aspect.collect do |name, aspect|
-            if aspect.evaluated?
-                aspect.export
-            end
-        end.reject { |a| a.nil? }.flatten.collect do |obj|
-            obj.to_trans
-        end
-        bucket = Puppet::TransBucket.new(objects)
-        bucket.name = "top"
-        bucket.type = "class"
-
-        return bucket
-    end
-
-    def init
-        unless Process.uid == 0
-            Puppet[:confdir] = File.expand_path("~/.puppet")
-            Puppet[:vardir] = File.expand_path("~/.puppet/var")
-        end
-        Puppet[:user] = Process.uid
-        Puppet[:group] = Process.gid
-        Puppet::Util::Log.newdestination(:console)
-        Puppet::Util::Log.level = :info
-    end
-
-    class Aspect
-        Resource = Puppet::Parser::Resource
-
-        include Puppet::Util
-        include Puppet::DSL
-        extend Puppet::Util
-        extend Enumerable
-        attr_accessor :parent, :name, :evaluated
-
-        @aspects = {}
-
-        @@objects = Hash.new do |hash, key|
-            hash[key] = {}
-        end
-
-        # Create an instance method for every type
-        Puppet::Type.loadall
-        Puppet::Type.eachtype do |type|
-            define_method(type.name) do |*args|
-                newresource(type, *args)
-            end
-        end
-
-        def self.[]=(name, aspect)
-            name = symbolize(name)
-            @aspects[name] = aspect
-        end
-
-        def self.[](name)
-            name = symbolize(name)
-
-            # Make sure there's always a main.  This can get deleted in testing.
-            if name == :main and ! @aspects[name]
-                new(:main) {}
-            end
-            @aspects[name]
-        end
-
-        def self.clear
-            @aspects.clear
-            @@objects.clear
-        end
-
-        def self.delete(name)
-            name = symbolize(name)
-            if @aspects.has_key?(name)
-                @aspects.delete(name)
-            end
-        end
-
-        def self.each
-            @aspects.each do |name, a|
-                yield name, a
-            end
-        end
-
-        def child_of?(aspect)
-            unless aspect.is_a?(self.class)
-                obj = self.class[aspect]
-                unless obj
-                    raise "Could not find aspect %s" % aspect
-                end
-                aspect = obj
-            end
-            if self.parent
-                if self.parent == aspect
-                    return true
-                elsif self.parent.child_of?(aspect)
-                    return true
-                else
-                    return false
-                end
-            else
-                return false
-            end
-        end
-
-        def evaluate
-            if self.parent and ! self.parent.evaluated?
-                self.parent.evaluate
-            end
-
-            unless evaluated?
-                if defined? @block
-                    instance_eval(&@block)
-                end
-                @evaluated = true
-            end
-        end
-
-        def evaluated?
-            if self.evaluated
-                true
-            else
-                false
-            end
-        end
-
-        def export
-            @resources.dup
-        end
-
-        def initialize(name, options = {}, &block)
-            name = symbolize(name)
-            @name = name
-            if block
-                @block = block
-            end
-            if pname = options[:inherits]
-                if pname.is_a?(self.class)
-                    @parent = pname
-                elsif parent = self.class[pname]
-                    @parent = parent
-                else
-                    raise "Could not find parent aspect %s" % pname
-                end
-            end
-
-            @resources = []
-
-            self.class[name] = self
-        end
-
-        def newresource(type, name, params = {})
-            if self.is_a?(Puppet::DSL::Aspect)
-                source = self
-            else
-                source = Puppet::DSL::Aspect[:main]
-            end
-            unless obj = @@objects[type][name]
-                obj = Resource.new :title => name, :type => type.name,
-                    :source => source, :scope => scope
-                @@objects[type][name] = obj
-
-                @resources << obj
-            end
-
-            params.each do |name, value|
-                param = Resource::Param.new(
-                    :name => name,
-                    :value => value,
-                    :source => source
-                )
-
-                obj.send(:set_parameter, param)
-            end
-
-            obj
-        end
-
-        def scope
-            unless defined?(@scope)
-                # Set the code to something innocuous; we just need the
-                # scopes, not the interpreter.  Hackish, but true.
-                Puppet[:code] = " "
-                @interp = Puppet::Parser::Interpreter.new
-                require 'puppet/node'
-                @node = Puppet::Node.new(Facter.value(:hostname))
-                if env = Puppet[:environment] and env == ""
-                    env = nil
-                end
-                @node.parameters = Facter.to_hash
-                @compile = Puppet::Parser::Compiler.new(@node, @interp.send(:parser, env))
-                @scope = @compile.topscope
-            end
-            @scope
-        end
-
-        def type
-            self.name
-        end
-    end
-end
-
- at aspects = {}
diff --git a/lib/puppet/error.rb b/lib/puppet/error.rb
deleted file mode 100644
index 971b311..0000000
--- a/lib/puppet/error.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-module Puppet # :nodoc:
-    # The base class for all Puppet errors.  We want to make it easy to add
-    # line and file information.  This probably isn't necessary for all
-    # errors, but...
-    class Error < RuntimeError
-        attr_accessor :line, :file
-
-        def backtrace
-            if defined? @backtrace
-                return @backtrace
-            else
-                return super
-            end
-        end
-
-        def initialize(message, line = nil, file = nil)
-            @message = message
-
-            @line = line if line
-            @file = file if file
-        end
-
-        def to_s
-            str = nil
-            if self.file and self.line
-                str = "%s at %s:%s" %
-                    [@message.to_s, @file, @line]
-            elsif self.line
-                str = "%s at line %s" %
-                    [@message.to_s, @line]
-            elsif self.file
-                str = "%s in %s" % [@message.to_s, self.file]
-            else
-                str = @message.to_s
-            end
-
-            return str
-        end
-    end
-
-    # An error class for when I don't know what happened.  Automatically
-    # prints a stack trace when in debug mode.
-    class DevError < Puppet::Error
-    end
-end
diff --git a/lib/puppet/executables/client/certhandler.rb b/lib/puppet/executables/client/certhandler.rb
deleted file mode 100644
index b041397..0000000
--- a/lib/puppet/executables/client/certhandler.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-
-module Puppet
-    module Executables
-        module Client
-            class CertHandler
-                attr_writer :wait_for_cert, :one_time
-                attr_reader :new_cert
-                
-                def initialize(wait_time, is_one_time)
-                    @wait_for_cert = wait_time
-                    @one_time = is_one_time
-                    @new_cert = false
-                end
-
-                # Did we just read a cert?
-                def new_cert?
-                    new_cert
-                end
-                
-                # Read, or retrieve if necessary, our certificate.  Returns true if we retrieved
-                # a new cert, false if the cert already exists.
-                def read_retrieve 
-                    #NOTE: ACS this is checking that a file exists, maybe next time just do that?
-                    unless read_cert 
-                        # If we don't already have the certificate, then create a client to
-                        # request one.  Use the special ca stuff, don't use the normal server and port.
-                        retrieve_cert
-                    end
-
-                    ! new_cert?
-                end
-
-                def retrieve_cert
-                    caclient = Puppet::Network::Client.ca.new()
-
-                    while true do
-                       begin
-                           if caclient.request_cert 
-                               break if read_new_cert
-                           else
-                               Puppet.notice "Did not receive certificate"
-                               if @one_time 
-                                   Puppet.notice "Set to run 'one time'; exiting with no certificate"
-                                   exit(1)
-                               end
-                           end
-                       rescue StandardError => detail
-                          Puppet.err "Could not request certificate: %s" % detail.to_s
-                          exit(23) if @one_time
-                       end
-
-                       sleep @wait_for_cert 
-                    end
-                end
-
-                def read_cert
-                    Puppet::Network::HttpPool.read_cert
-                end
-
-                def read_new_cert
-                    if Puppet::Network::HttpPool.read_cert
-                        # If we read it in, then we need to get rid of our existing http connection.
-                        # The @new_cert flag will help us do that, in that it provides a way
-                        # to notify that the cert status has changed.
-                        @new_cert = true
-                        Puppet.notice "Got signed certificate"
-                    else
-                        Puppet.err "Could not read certificates after retrieving them"
-                        exit(34) if @one_time
-                    end
-
-                    return @new_cert
-                end
-            end
-        end
-    end
-end
diff --git a/lib/puppet/external/base64.rb b/lib/puppet/external/base64.rb
deleted file mode 100755
index 4030ad3..0000000
--- a/lib/puppet/external/base64.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# a stupid hack class to get rid of all of the warnings but
-# still make the encode/decode methods available
-
-# 1.8.2 has a Base64 class, but 1.8.1 just imports the methods directly
-# into Object
-
-require 'base64'
-
-unless defined? Base64
-    class Base64
-        def Base64.encode64(*args)
-            Object.method(:encode64).call(*args)
-        end
-
-        def Base64.decode64(*args)
-            Object.method(:decode64).call(*args)
-        end
-    end
-end
diff --git a/lib/puppet/external/dot.rb b/lib/puppet/external/dot.rb
deleted file mode 100644
index b94568c..0000000
--- a/lib/puppet/external/dot.rb
+++ /dev/null
@@ -1,326 +0,0 @@
-# rdot.rb
-# 
-#
-# This is a modified version of dot.rb from Dave Thomas's rdoc project.  I [Horst Duchene]
-# renamed it to rdot.rb to avoid collision with an installed rdoc/dot.
-#
-# It also supports undirected edges.
-
-module DOT
-    
-  # These glogal vars are used to make nice graph source.
-
-  $tab  = '    '
-  $tab2 = $tab * 2
-    
-  # if we don't like 4 spaces, we can change it any time
-
-  def change_tab (t)
-    $tab  = t
-    $tab2 = t * 2
-  end
-    
-  # options for node declaration
-
-  NODE_OPTS = [
-    # attributes due to
-    # http://www.graphviz.org/Documentation/dotguide.pdf
-    # March, 26, 2005
-    'bottomlabel', # auxiliary label for nodes of shape M*
-    'color', # default: black; node shape color
-    'comment', # any string (format-dependent)
-    'distortion', # default: 0.0; node distortion for shape=polygon
-    'fillcolor', # default: lightgrey/black; node fill color
-    'fixedsize', # default: false; label text has no affect on node size
-    'fontcolor', # default: black; type face color
-    'fontname', # default: Times-Roman; font family
-    'fontsize', #default: 14; point size of label
-    'group', # name of node’s group
-    'height', # default: .5; height in inches
-    'label', # default: node name; any string
-    'layer', # default: overlay range; all, id or id:id
-    'orientation', # dafault: 0.0; node rotation angle
-    'peripheries', # shape-dependent number of node boundaries
-    'regular', # default:  false; force polygon to be regular
-    'shape', # default: ellipse; node shape; see Section 2.1 and Appendix E
-    'shapefile', # external EPSF or SVG custom shape file
-    'sides', # default: 4; number of sides for shape=polygon
-    'skew' , # default: 0.0; skewing of node for shape=polygon
-    'style', # graphics options, e.g. bold, dotted, filled; cf. Section 2.3
-    'toplabel', # auxiliary label for nodes of shape M*
-    'URL', # URL associated with node (format-dependent)
-    'width', # default: .75; width in inches
-    'z', #default: 0.0; z coordinate for VRML output
-
-    # maintained for backward compatibility or rdot internal
-    'bgcolor',
-    'rank'
-  ]
-    
-  # options for edge declaration
-
-  EDGE_OPTS = [
-    'arrowhead', # default: normal; style of arrowhead at head end
-    'arrowsize', # default: 1.0; scaling factor for arrowheads
-    'arrowtail', # default: normal; style of arrowhead at tail end
-    'color', # default: black; edge stroke color
-    'comment', # any string (format-dependent)
-    'constraint', # default: true use edge to affect node ranking
-    'decorate', # if set, draws a line connecting labels with their edges
-    'dir', # default: forward; forward, back, both, or none
-    'fontcolor', # default: black type face color
-    'fontname', # default: Times-Roman; font family
-    'fontsize', # default: 14; point size of label
-    'headlabel', # label placed near head of edge
-    'headport', # n,ne,e,se,s,sw,w,nw
-    'headURL', # URL attached to head label if output format is ismap
-    'label', # edge label
-    'labelangle', # default: -25.0; angle in degrees which head or tail label is rotated off edge
-    'labeldistance', # default: 1.0; scaling factor for distance of head or tail label from node
-    'labelfloat', # default: false; lessen constraints on edge label placement
-    'labelfontcolor', # default: black; type face color for head and tail labels
-    'labelfontname', # default: Times-Roman; font family for head and tail labels
-    'labelfontsize', # default: 14 point size for head and tail labels
-    'layer', # default: overlay range; all, id or id:id
-    'lhead', # name of cluster to use as head of edge
-    'ltail', # name of cluster to use as tail of edge
-    'minlen', # default: 1 minimum rank distance between head and tail
-    'samehead', # tag for head node; edge heads with the same tag are merged onto the same port
-    'sametail', # tag for tail node; edge tails with the same tag are merged onto the same port
-    'style', # graphics options, e.g. bold, dotted, filled; cf. Section 2.3
-    'taillabel', # label placed near tail of edge
-    'tailport', # n,ne,e,se,s,sw,w,nw
-    'tailURL', # URL attached to tail label if output format is ismap
-    'weight', # default: 1; integer cost of stretching an edge
-
-    # maintained for backward compatibility or rdot internal
-    'id'
-  ]
-    
-  # options for graph declaration
-
-  GRAPH_OPTS = [
-    'bgcolor',
-    'center', 'clusterrank', 'color', 'concentrate',
-    'fontcolor', 'fontname', 'fontsize',
-    'label', 'layerseq',
-    'margin', 'mclimit',
-    'nodesep', 'nslimit',
-    'ordering', 'orientation',
-    'page',
-    'rank', 'rankdir', 'ranksep', 'ratio',
-    'size'
-  ]
-    
-  # a root class for any element in dot notation
-
-  class DOTSimpleElement
-
-    attr_accessor :name
-
-    def initialize (params = {})
-      @label = params['name'] ? params['name'] : ''
-    end
-
-    def to_s
-      @name
-    end
-  end
-    
-  # an element that has options ( node, edge, or graph )
-
-  class DOTElement < DOTSimpleElement
-
-    # attr_reader :parent
-    attr_accessor :name, :options
-
-    def initialize (params = {}, option_list = [])
-      super(params)
-      @name   = params['name']   ? params['name']   : nil 
-      @parent = params['parent'] ? params['parent'] : nil
-      @options = {}
-      option_list.each{ |i|
-        @options[i] = params[i] if params[i]
-      }
-      @options['label'] ||= @name if @name != 'node'
-    end
-        
-    def each_option
-      @options.each{ |i| yield i }
-    end
-
-    def each_option_pair
-      @options.each_pair{ |key, val| yield key, val }
-    end
-
-    #def parent=( thing )
-    #    @parent.delete( self ) if defined?( @parent ) and @parent
-    #    @parent = thing
-    #end
-
-  end
-    
-    
-  # This is used when we build nodes that have shape=record
-  # ports don't have options :)
-
-  class DOTPort < DOTSimpleElement
-
-    attr_accessor :label
-        
-    def initialize (params = {})
-      super(params)
-      @name = params['label'] ? params['label'] : ''
-    end
-
-    def to_s
-      ( @name && @name != "" ? "<#{@name}>" : "" ) + "#{@label}"
-    end
-  end
-    
-  # node element
-
-  class DOTNode < DOTElement
-
-    @ports
-
-    def initialize (params = {}, option_list = NODE_OPTS)
-      super(params, option_list)
-      @ports = params['ports'] ? params['ports'] : []
-    end
-
-    def each_port
-      @ports.each { |i| yield i }
-    end
-
-    def << (thing)
-      @ports << thing
-    end
-
-    def push (thing)
-      @ports.push(thing)
-    end
-
-    def pop
-      @ports.pop
-    end
-
-    def to_s (t = '')
-
-      # This code is totally incomprehensible; it needs to be replaced!
-
-      label = @options['shape'] != 'record' && @ports.length == 0 ?
-                @options['label'] ? 
-                    t + $tab + "label = \"#{@options['label']}\"\n" :
-                    '' :
-                t + $tab + 'label = "' + " \\\n" +
-                t + $tab2 + "#{@options['label']}| \\\n" +
-                @ports.collect{ |i|
-                    t + $tab2 + i.to_s
-                }.join( "| \\\n" ) + " \\\n" +
-                t + $tab + '"' + "\n"
-            
-            t + "#{@name} [\n" +
-            @options.to_a.collect{ |i|
-                i[1] && i[0] != 'label' ? 
-                    t + $tab + "#{i[0]} = #{i[1]}" : nil
-            }.compact.join( ",\n" ) + ( label != '' ? ",\n" : "\n" ) + 
-            label +
-            t + "]\n" 
-      end
-
-  end		# class DOTNode
-
-  # A subgraph element is the same to graph, but has another header in dot
-  # notation.
-
-  class DOTSubgraph < DOTElement
-
-    @nodes
-    @dot_string
-
-    def initialize (params = {}, option_list = GRAPH_OPTS)
-      super(params, option_list)
-      @nodes      = params['nodes'] ? params['nodes'] : []
-      @dot_string = 'graph'
-    end
-
-    def each_node
-      @nodes.each{ |i| yield i }
-    end
-
-    def << (thing)
-      @nodes << thing
-    end
-       
-    def push (thing)
-      @nodes.push( thing )
-    end
-
-    def pop
-      @nodes.pop
-    end
-
-    def to_s (t = '')
-      hdr = t + "#{@dot_string} #{@name} {\n"
-
-      options = @options.to_a.collect{ |name, val|
-        val && name != 'label' ? 
-          t + $tab + "#{name} = #{val}" : 
-          name ? t + $tab + "#{name} = \"#{val}\"" : nil
-      }.compact.join( "\n" ) + "\n"
-
-      nodes = @nodes.collect{ |i|
-        i.to_s( t + $tab )
-      }.join( "\n" ) + "\n" 
-      hdr + options + nodes + t + "}\n"
-    end
-
-  end		# class DOTSubgraph
-
-  # This is a graph.
-
-  class DOTDigraph < DOTSubgraph
-
-    def initialize (params = {}, option_list = GRAPH_OPTS)
-      super(params, option_list)
-      @dot_string = 'digraph'
-    end
-
-  end		# class DOTDigraph
-
-  # This is an edge.
-
-  class DOTEdge < DOTElement
-
-    attr_accessor :from, :to
-
-    def initialize (params = {}, option_list = EDGE_OPTS)
-      super(params, option_list)
-      @from = params['from'] ? params['from'] : nil
-      @to   = params['to'] ? params['to'] : nil
-    end
-       
-    def edge_link
-      '--'
-    end
-
-    def to_s (t = '')
-      t + "#{@from} #{edge_link} #{to} [\n" +
-          @options.to_a.collect{ |i|
-            i[1] && i[0] != 'label' ? 
-              t + $tab + "#{i[0]} = #{i[1]}" : 
-              i[1] ? t + $tab + "#{i[0]} = \"#{i[1]}\"" : nil
-          }.compact.join( "\n" ) + "\n" + t + "]\n"
-    end
-
-  end		# class DOTEdge
-          
-  class DOTDirectedEdge < DOTEdge
-
-    def edge_link
-      '->'
-    end
-
-  end                           # class DOTDirectedEdge
-end                             # module DOT
diff --git a/lib/puppet/external/event-loop.rb b/lib/puppet/external/event-loop.rb
deleted file mode 100644
index 476fb0b..0000000
--- a/lib/puppet/external/event-loop.rb
+++ /dev/null
@@ -1 +0,0 @@
-require "puppet/external/event-loop/event-loop"
diff --git a/lib/puppet/external/event-loop/better-definers.rb b/lib/puppet/external/event-loop/better-definers.rb
deleted file mode 100644
index 0af37da..0000000
--- a/lib/puppet/external/event-loop/better-definers.rb
+++ /dev/null
@@ -1,367 +0,0 @@
-## better-definers.rb --- better attribute and method definers
-# Copyright (C) 2005  Daniel Brockman
-
-# This program is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation;
-# either version 2 of the License, or (at your option) any
-# later version.
-
-# This file is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public
-# License along with this program; if not, write to the Free
-# Software Foundation, 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301, USA.
-
-class Symbol
-  def predicate?
-    to_s.include? "?" end
-  def imperative?
-    to_s.include? "!" end
-  def writer?
-    to_s.include? "=" end
-
-  def punctuated?
-    predicate? or imperative? or writer? end
-  def without_punctuation
-    to_s.delete("?!=").to_sym end
-
-  def predicate
-    without_punctuation.to_s + "?" end
-  def imperative
-    without_punctuation.to_s + "!" end
-  def writer
-    without_punctuation.to_s + "=" end
-end
-
-class Hash
-  def collect! (&block)
-    replace Hash[*collect(&block).flatten]
-  end
-
-  def flatten
-    to_a.flatten
-  end
-end
-
-module Kernel
-  def returning (value)
-    yield value ; value
-  end
-end
-
-class Module
-  def define_hard_aliases (name_pairs)
-    for new_aliases, existing_name in name_pairs do
-      new_aliases.kind_of? Array or new_aliases = [new_aliases]
-      for new_alias in new_aliases do
-        alias_method(new_alias, existing_name)
-      end
-    end
-  end
-
-  def define_soft_aliases (name_pairs)
-    for new_aliases, existing_name in name_pairs do
-      new_aliases.kind_of? Array or new_aliases = [new_aliases]
-      for new_alias in new_aliases do
-        class_eval %{def #{new_alias}(*args, &block)
-                       #{existing_name}(*args, &block) end}
-      end
-    end
-  end
-
-  define_soft_aliases \
-    :define_hard_alias => :define_hard_aliases,
-    :define_soft_alias => :define_soft_aliases
-
-  # This method lets you define predicates like :foo?,
-  # which will be defined to return the value of @foo.
-  def define_readers (*names)
-    for name in names.map { |x| x.to_sym } do
-      if name.punctuated?
-        # There's no way to define an efficient reader whose
-        # name is different from the instance variable.
-        class_eval %{def #{name} ; @#{name.without_punctuation} end}
-      else
-        # Use `attr_reader' to define an efficient method.
-        attr_reader(name)
-      end
-    end
-  end
-
-  def writer_defined? (name)
-    method_defined? name.to_sym.writer
-  end
-
-  # If you pass a predicate symbol :foo? to this method, it'll first
-  # define a regular writer method :foo, without a question mark.
-  # Then it'll define an imperative writer method :foo! as a shorthand
-  # for setting the property to true.
-  def define_writers (*names, &body)
-    for name in names.map { |x| x.to_sym } do
-      if block_given?
-        define_method(name.writer, &body)
-      else
-        attr_writer(name.without_punctuation)
-      end
-      if name.predicate?
-        class_eval %{def #{name.imperative}
-                       self.#{name.writer} true end}
-      end
-    end
-  end
-
-  define_soft_aliases \
-    :define_reader => :define_readers,
-    :define_writer => :define_writers
-
-  # We don't need a singular alias for `define_accessors',
-  # because it always defines at least two methods.
-
-  def define_accessors (*names)
-    define_readers(*names)
-    define_writers(*names)
-  end
-
-  def define_opposite_readers (name_pairs)
-    name_pairs.collect! { |k, v| [k.to_sym, v.to_sym] }
-    for opposite_name, name in name_pairs do
-      define_reader(name) unless method_defined? name
-      class_eval %{def #{opposite_name} ; not #{name} end}
-    end
-  end
-
-  def define_opposite_writers (name_pairs)
-    name_pairs.collect! { |k, v| [k.to_sym, v.to_sym] }
-    for opposite_name, name in name_pairs do
-      define_writer(name) unless writer_defined? name
-      class_eval %{def #{opposite_name.writer} x
-                     self.#{name.writer} !x end} 
-      class_eval %{def #{opposite_name.imperative}
-                     self.#{name.writer} false end}
-    end
-  end
-
-  define_soft_aliases \
-    :define_opposite_reader => :define_opposite_readers,
-    :define_opposite_writer => :define_opposite_writers
-
-  def define_opposite_accessors (name_pairs)
-    define_opposite_readers name_pairs
-    define_opposite_writers name_pairs
-  end
-
-  def define_reader_with_opposite (name_pair, &body)
-    name, opposite_name = name_pair.flatten.collect { |x| x.to_sym }
-    define_method(name, &body)
-    define_opposite_reader(opposite_name => name)
-  end
-
-  def define_writer_with_opposite (name_pair, &body)
-    name, opposite_name = name_pair.flatten.collect { |x| x.to_sym }
-    define_writer(name, &body)
-    define_opposite_writer(opposite_name => name)
-  end
-
-  public :define_method
-
-  def define_methods (*names, &body)
-    names.each { |name| define_method(name, &body) }
-  end
-  
-  def define_private_methods (*names, &body)
-    define_methods(*names, &body)
-    names.each { |name| private name }
-  end
-
-  def define_protected_methods (*names, &body)
-    define_methods(*names, &body)
-    names.each { |name| protected name }
-  end
-
-  def define_private_method (name, &body)
-    define_method(name, &body)
-    private name
-  end
-
-  def define_protected_method (name, &body)
-    define_method(name, &body)
-    protected name
-  end
-end
-
-class ImmutableAttributeError < StandardError
-  def initialize (attribute=nil, message=nil)
-    super message
-    @attribute = attribute
-  end
-
-  define_accessors :attribute
-
-  def to_s
-    if @attribute and @message
-      "cannot change the value of `#@attribute': #@message"
-    elsif @attribute
-      "cannot change the value of `#@attribute'"
-    elsif @message
-      "cannot change the value of attribute: #@message"
-    else
-      "cannot change the value of attribute"
-    end
-  end
-end
-
-class Module
-  # Guard each of the specified attributes by replacing the writer
-  # method with a proxy that asks the supplied block before proceeding
-  # with the change.
-  #
-  # If it's okay to change the attribute, the block should return
-  # either nil or the symbol :mutable.  If it isn't okay, the block
-  # should return a string saying why the attribute can't be changed.
-  # If you don't want to provide a reason, you can have the block
-  # return just the symbol :immutable.
-  def guard_writers(*names, &predicate)
-    for name in names.map { |x| x.to_sym } do
-      define_hard_alias("__unguarded_#{name.writer}" => name.writer)
-      define_method(name.writer) do |new_value|
-        case result = predicate.call
-        when :mutable, nil
-          __send__("__unguarded_#{name.writer}", new_value)
-        when :immutable
-          raise ImmutableAttributeError.new(name)
-        else
-          raise ImmutableAttributeError.new(name, result)
-        end
-      end
-    end
-  end
-
-  def define_guarded_writers (*names, &block)
-    define_writers(*names)
-    guard_writers(*names, &block)
-  end
-
-  define_soft_alias :guard_writer => :guard_writers
-  define_soft_alias :define_guarded_writer => :define_guarded_writers
-end
-
-if __FILE__ == $0
-  require "test/unit"
-
-  class DefineAccessorsTest < Test::Unit::TestCase
-    def setup
-      @X = Class.new
-      @Y = Class.new @X
-      @x = @X.new
-      @y = @Y.new
-    end
-
-    def test_define_hard_aliases
-      @X.define_method(:foo) { 123 }
-      @X.define_method(:baz) { 321 }
-      @X.define_hard_aliases :bar => :foo, :quux => :baz
-      assert_equal @x.foo, 123
-      assert_equal @x.bar, 123
-      assert_equal @y.foo, 123
-      assert_equal @y.bar, 123
-      assert_equal @x.baz, 321
-      assert_equal @x.quux, 321
-      assert_equal @y.baz, 321
-      assert_equal @y.quux, 321
-      @Y.define_method(:foo) { 456 }
-      assert_equal @y.foo, 456
-      assert_equal @y.bar, 123
-      @Y.define_method(:quux) { 654 }
-      assert_equal @y.baz, 321
-      assert_equal @y.quux, 654
-    end
-    
-    def test_define_soft_aliases
-      @X.define_method(:foo) { 123 }
-      @X.define_method(:baz) { 321 }
-      @X.define_soft_aliases :bar => :foo, :quux => :baz
-      assert_equal @x.foo, 123
-      assert_equal @x.bar, 123
-      assert_equal @y.foo, 123
-      assert_equal @y.bar, 123
-      assert_equal @x.baz, 321
-      assert_equal @x.quux, 321
-      assert_equal @y.baz, 321
-      assert_equal @y.quux, 321
-      @Y.define_method(:foo) { 456 }
-      assert_equal @y.foo, @y.bar, 456
-      @Y.define_method(:quux) { 654 }
-      assert_equal @y.baz, 321
-      assert_equal @y.quux, 654
-    end
-
-    def test_define_readers
-      @X.define_readers :foo, :bar
-      assert !@x.respond_to?(:foo=)
-      assert !@x.respond_to?(:bar=)
-      @x.instance_eval { @foo = 123 ; @bar = 456 }
-      assert_equal @x.foo, 123
-      assert_equal @x.bar, 456
-      @X.define_readers :baz?, :quux?
-      assert !@x.respond_to?(:baz=)
-      assert !@x.respond_to?(:quux=)
-      @x.instance_eval { @baz = false ; @quux = true }
-      assert !@x.baz?
-      assert @x.quux?
-    end
-
-    def test_define_writers
-      assert !@X.writer_defined?(:foo)
-      assert !@X.writer_defined?(:bar)
-      @X.define_writers :foo, :bar
-      assert @X.writer_defined?(:foo)
-      assert @X.writer_defined?(:bar)
-      assert @X.writer_defined?(:foo=)
-      assert @X.writer_defined?(:bar=)
-      assert @X.writer_defined?(:foo?)
-      assert @X.writer_defined?(:bar?)
-      assert !@x.respond_to?(:foo)
-      assert !@x.respond_to?(:bar)
-      @x.foo = 123
-      @x.bar = 456
-      assert_equal @x.instance_eval { @foo }, 123
-      assert_equal @x.instance_eval { @bar }, 456
-      @X.define_writers :baz?, :quux?
-      assert !@x.respond_to?(:baz?)
-      assert !@x.respond_to?(:quux?)
-      @x.baz = true
-      @x.quux = false
-      assert_equal @x.instance_eval { @baz }, true
-      assert_equal @x.instance_eval { @quux }, false
-    end
-
-    def test_define_accessors
-      @X.define_accessors :foo, :bar
-      @x.foo = 123 ; @x.bar = 456
-      assert_equal @x.foo, 123
-      assert_equal @x.bar, 456
-    end
-
-    def test_define_opposite_readers
-      @X.define_opposite_readers :foo? => :bar?, :baz? => :quux?
-      assert !@x.respond_to?(:foo=)
-      assert !@x.respond_to?(:bar=)
-      assert !@x.respond_to?(:baz=)
-      assert !@x.respond_to?(:quux=)
-      @x.instance_eval { @bar = true ; @quux = false }
-      assert !@x.foo?
-      assert @x.bar?
-      assert @x.baz?
-      assert !@x.quux?
-    end
-
-    def test_define_opposite_writers
-      @X.define_opposite_writers :foo? => :bar?, :baz => :quux
-    end
-  end
-end
diff --git a/lib/puppet/external/event-loop/event-loop.rb b/lib/puppet/external/event-loop/event-loop.rb
deleted file mode 100644
index 17a520e..0000000
--- a/lib/puppet/external/event-loop/event-loop.rb
+++ /dev/null
@@ -1,359 +0,0 @@
-## event-loop.rb --- high-level IO multiplexer
-# Copyright (C) 2005  Daniel Brockman
-
-# This program is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation;
-# either version 2 of the License, or (at your option) any
-# later version.
-
-# This file is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public
-# License along with this program; if not, write to the Free
-# Software Foundation, 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301, USA.
-
-require "puppet/external/event-loop/better-definers"
-require "puppet/external/event-loop/signal-system"
-
-require "fcntl"
-
-class EventLoop
-  include SignalEmitter
-
-  IO_STATES = [:readable, :writable, :exceptional]
-
-  class << self
-    def default ; @default ||= new end
-    def default= x ; @default = x end
-
-    def current
-      Thread.current["event-loop::current"] || default end
-    def current= x
-      Thread.current["event-loop::current"] = x end
-
-    def with_current (new)
-      if current == new
-        yield
-      else
-        begin
-          old = self.current
-          self.current = new
-          yield
-        ensure
-          self.current = old
-        end
-      end
-    end
-
-    def method_missing (name, *args, &block)
-      if current.respond_to? name
-        current.__send__(name, *args, &block)
-      else
-        super
-      end
-    end
-  end
-
-  define_signals :before_sleep, :after_sleep
-
-  def initialize
-    @running = false
-    @awake = false
-    @wakeup_time = nil
-    @timers = []
-
-    @io_arrays = [[], [], []]
-    @ios = Hash.new do |h, k| raise ArgumentError,
-      "invalid IO event: #{k}", caller(2) end
-    IO_STATES.each_with_index { |x, i| @ios[x] = @io_arrays[i] }
-
-    @notify_src, @notify_snk = IO.pipe
-
-    # prevent file descriptor leaks
-    @notify_src.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
-    @notify_snk.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
-
-    @notify_src.will_block = false
-    @notify_snk.will_block = false
-
-    # Each time a byte is sent through the notification pipe
-    # we need to read it, or IO.select will keep returning.
-    monitor_io(@notify_src, :readable)
-    @notify_src.extend(Watchable)
-    @notify_src.on_readable do
-      begin
-        @notify_src.sysread(256)
-      rescue Errno::EAGAIN
-        # The pipe wasn't readable after all.
-      end
-    end
-  end
-
-  define_opposite_accessors \
-    :stopped?  => :running?,
-    :sleeping? => :awake?
-
-  def run
-    if block_given?
-      thread = Thread.new { run }
-      yield ; quit ; thread.join
-    else
-      running!
-      iterate while running?
-    end
-  ensure
-    quit
-  end
-
-  def iterate (user_timeout=nil)
-    t1, t2 = user_timeout, max_timeout
-    timeout = t1 && t2 ? [t1, t2].min : t1 || t2
-    select(timeout).zip(IO_STATES) do |ios, state|
-      ios.each { |x| x.signal(state) } if ios
-    end
-  end
-
- private
-
-  def select (timeout)
-    @wakeup_time = timeout ? Time.now + timeout : nil
-    # puts "waiting: #{timeout} seconds"
-    signal :before_sleep ; sleeping!
-    IO.select(*@io_arrays + [timeout]) || []
-  ensure
-    awake! ; signal :after_sleep
-    @timers.each { |x| x.sound_alarm if x.ready? }
-  end
-
- public
-
-  def quit ; stopped! ; wake_up ; self end
-
-  def monitoring_io? (io, event)
-    @ios[event].include? io end
-  def monitoring_timer? (timer)
-    @timers.include? timer end
-
-  def monitor_io (io, *events)
-    for event in events do
-      unless monitoring_io?(io, event)
-        @ios[event] << io ; wake_up
-      end
-    end
-  end
-
-  def monitor_timer (timer)
-    unless monitoring_timer? timer
-      @timers << timer
-    end
-  end
-
-  def check_timer (timer)
-    wake_up if timer.end_time < @wakeup_time
-  end
-
-  def ignore_io (io, *events)
-    events = IO_STATES if events.empty?
-    for event in events do
-      wake_up if @ios[event].delete(io)
-    end
-  end
-
-  def ignore_timer (timer)
-    # Don't need to wake up for this.
-    @timers.delete(timer)
-  end
-
-  def max_timeout
-    return nil if @timers.empty?
-    [@timers.collect { |x| x.time_left }.min, 0].max
-  end
-
-  def wake_up
-    @notify_snk.write('.') if sleeping?
-  end
-end
-
-class Symbol
-  def io_state?
-    EventLoop::IO_STATES.include? self
-  end
-end
-
-module EventLoop::Watchable
-  include SignalEmitter
-
-  define_signals :readable, :writable, :exceptional
-
-  def monitor_events (*events)
-    EventLoop.monitor_io(self, *events) end
-  def ignore_events (*events)
-    EventLoop.ignore_io(self, *events) end
-
-  define_soft_aliases \
-    :monitor_event => :monitor_events,
-    :ignore_event  => :ignore_events
-
-  def close ; super
-    ignore_events end
-  def close_read ; super
-    ignore_event :readable end
-  def close_write ; super
-    ignore_event :writable end
-
-  module Automatic
-    include EventLoop::Watchable
-
-    def add_signal_handler (name, &handler) super
-      monitor_event(name) if name.io_state?
-    end
-
-    def remove_signal_handler (name, handler) super
-      if @signal_handlers[name].empty?
-        ignore_event(name) if name.io_state?
-      end
-    end
-  end
-end
-
-class IO
-  def on_readable &block
-    extend EventLoop::Watchable::Automatic
-    on_readable(&block)
-  end
-
-  def on_writable &block
-    extend EventLoop::Watchable::Automatic
-    on_writable(&block)
-  end
-
-  def on_exceptional &block
-    extend EventLoop::Watchable::Automatic
-    on_exceptional(&block)
-  end
-
-  def will_block?
-    require "fcntl"
-    fcntl(Fcntl::F_GETFL, 0) & Fcntl::O_NONBLOCK == 0
-  end
-
-  def will_block= (wants_blocking)
-    require "fcntl"
-    flags = fcntl(Fcntl::F_GETFL, 0)
-    if wants_blocking
-      flags &= ~Fcntl::O_NONBLOCK
-    else
-      flags |= Fcntl::O_NONBLOCK
-    end
-    fcntl(Fcntl::F_SETFL, flags)
-  end
-end
-
-class EventLoop::Timer
-  include SignalEmitter
-
-  DEFAULT_INTERVAL = 0.0
-  DEFAULT_TOLERANCE = 0.001
-
-  def initialize (options={}, &handler)
-    @running = false
-    @start_time = nil
-
-    if options.kind_of? Numeric
-      options = { :interval => options }
-    end
-
-    if options[:interval]
-      @interval = options[:interval].to_f
-    else
-      @interval = DEFAULT_INTERVAL
-    end
-
-    if options[:tolerance]
-      @tolerance = options[:tolerance].to_f
-    elsif DEFAULT_TOLERANCE < @interval
-      @tolerance = DEFAULT_TOLERANCE
-    else
-      @tolerance = 0.0
-    end
-
-    @event_loop = options[:event_loop] || EventLoop.current
-
-    if block_given?
-      add_signal_handler(:alarm, &handler)
-      start unless options[:start?] == false
-    else
-      start if options[:start?]
-    end
-  end
-
-  define_readers :interval, :tolerance
-  define_signal :alarm
-
-  def stopped? ; @start_time == nil end
-  def running? ; @start_time != nil end
-
-  def interval= (new_interval)
-    old_interval = @interval
-    @interval = new_interval
-    if new_interval < old_interval
-      @event_loop.check_timer(self)
-    end
-  end
-
-  def end_time
-    @start_time + @interval end
-  def time_left
-    end_time - Time.now end
-  def ready?
-    time_left <= @tolerance end
-
-  def restart
-    @start_time = Time.now
-  end
-
-  def sound_alarm
-    signal :alarm
-    restart if running?
-  end
-
-  def start
-    @start_time = Time.now
-    @event_loop.monitor_timer(self)
-  end
-
-  def stop
-    @start_time = nil
-    @event_loop.ignore_timer(self)
-  end
-end
-
-if __FILE__ == $0
-  require "test/unit"
-
-  class TimerTest < Test::Unit::TestCase
-    def setup
-      @timer = EventLoop::Timer.new(:interval => 0.001)
-    end
-
-    def test_timer
-      @timer.on_alarm do
-        puts "[#{@timer.time_left} seconds left after alarm]"
-        EventLoop.quit
-      end
-      8.times do
-        t0 = Time.now
-        @timer.start ; EventLoop.run
-        t1 = Time.now
-        assert(t1 - t0 > @timer.interval - @timer.tolerance)
-      end
-    end
-  end
-end
-
-## event-loop.rb ends here.
diff --git a/lib/puppet/external/event-loop/signal-system.rb b/lib/puppet/external/event-loop/signal-system.rb
deleted file mode 100644
index 2ca61e2..0000000
--- a/lib/puppet/external/event-loop/signal-system.rb
+++ /dev/null
@@ -1,220 +0,0 @@
-## signal-system.rb --- simple intra-process signal system
-# Copyright (C) 2005  Daniel Brockman
-
-# This program is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation;
-# either version 2 of the License, or (at your option) any
-# later version.
-
-# This file is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public
-# License along with this program; if not, write to the Free
-# Software Foundation, 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301, USA.
-
-require "puppet/external/event-loop/better-definers"
-
-module SignalEmitterModule
-  def self.extended (object)
-    if object.kind_of? Module and not object < SignalEmitter
-      if object.respond_to? :fcall
-        # This is the way to call private methods
-        # in Ruby 1.9 as of November 16.
-        object.fcall :include, SignalEmitter
-      else
-        object.__send__ :include, SignalEmitter
-      end
-    end
-  end
-
-  def define_signal (name, slot=:before, &body)
-    # Can't use `define_method' and take a block pre-1.9.
-    class_eval %{ def on_#{name} &block
-                    add_signal_handler(:#{name}, &block) end }
-    define_signal_handler(name, :before, &lambda {|*a|})
-    define_signal_handler(name, :after, &lambda {|*a|})
-    define_signal_handler(name, slot, &body) if block_given?
-  end
-
-  def define_signals (*names, &body)
-    names.each { |x| define_signal(x, &body) }
-  end
-
-  def define_signal_handler (name, slot=:before, &body)
-    case slot
-    when :before
-      define_protected_method "handle_#{name}", &body
-    when :after
-      define_protected_method "after_handle_#{name}", &body
-    else
-      raise ArgumentError, "invalid slot `#{slot.inspect}'; " +
-        "should be `:before' or `:after'", caller(1)
-    end
-  end
-end
-
-# This is an old name for the same thing.
-SignalEmitterClass = SignalEmitterModule
-
-module SignalEmitter
-  def self.included (includer)
-    if not includer.kind_of? SignalEmitterClass
-      includer.extend SignalEmitterClass
-    end
-  end
-
-  def __maybe_initialize_signal_emitter
-    @signal_handlers ||= Hash.new { |h, k| h[k] = Array.new }
-    @allow_dynamic_signals ||= false
-  end
-
-  define_accessors :allow_dynamic_signals?
-
-  def add_signal_handler (name, &handler)
-    __maybe_initialize_signal_emitter
-    @signal_handlers[name] << handler
-    return handler
-  end
-
-  define_soft_aliases [:on, :on_signal] => :add_signal_handler
-
-  def remove_signal_handler (name, handler)
-    __maybe_initialize_signal_emitter
-    @signal_handlers[name].delete(handler)
-  end
-
-  def __signal__ (name, *args, &block)
-    __maybe_initialize_signal_emitter
-    respond_to? "on_#{name}" or allow_dynamic_signals? or
-      fail "undefined signal `#{name}' for #{self}:#{self.class}"
-    __send__("handle_#{name}", *args, &block) if
-      respond_to? "handle_#{name}"
-    @signal_handlers[name].each { |x| x.call(*args, &block) }
-    __send__("after_handle_#{name}", *args, &block) if
-      respond_to? "after_handle_#{name}"
-  end
-
-  define_soft_alias :signal => :__signal__
-end
-
-# This module is indended to be a convenience mixin to be used by
-# classes whose objects need to observe foreign signals.  That is,
-# if you want to observe some signals coming from an object, *you*
-# should mix in this module.
-#
-# You cannot use this module at two different places of the same
-# inheritance chain to observe signals coming from the same object.
-#
-# XXX: This has not seen much use, and I'd like to provide a
-#      better solution for the problem in the future.
-module SignalObserver
-  def __maybe_initialize_signal_observer
-    @observed_signals ||= Hash.new do |signals, object|
-      signals[object] = Hash.new do |handlers, name|
-        handlers[name] = Array.new
-      end
-    end
-  end
-
-  def observe_signal (subject, name, &handler)
-    __maybe_initialize_signal_observer
-    @observed_signals[subject][name] << handler
-    subject.add_signal_handler(name, &handler)
-  end
-
-  def map_signals (source, pairs={})
-    pairs.each do |src_name, dst_name|
-      observe_signal(source, src_name) do |*args|
-        __signal__(dst_name, *args)
-      end
-    end
-  end
-
-  def absorb_signals (subject, *names)
-    names.each do |name|
-      observe_signal(subject, name) do |*args|
-        __signal__(name, *args)
-      end
-    end
-  end
-
-  define_soft_aliases \
-    :map_signal    => :map_signals,
-    :absorb_signal => :absorb_signals
-
-  def ignore_signal (subject, name)
-    __maybe_initialize_signal_observer
-    __ignore_signal_1(subject, name)
-    @observed_signals.delete(subject) if
-      @observed_signals[subject].empty?
-  end
-
-  def ignore_signals (subject, *names)
-    __maybe_initialize_signal_observer
-    names = @observed_signals[subject] if names.empty?
-    names.each { |x| __ignore_signal_1(subject, x) }
-  end
-
- private
-
-  def __ignore_signal_1(subject, name)
-    @observed_signals[subject][name].each do |handler|
-      subject.remove_signal_handler(name, handler) end
-    @observed_signals[subject].delete(name)
-  end
-end
-
-if __FILE__ == $0
-  require "test/unit"
-  class SignalEmitterTest < Test::Unit::TestCase
-    class X
-      include SignalEmitter
-      define_signal :foo
-    end
-
-    def setup
-      @x = X.new
-    end
-
-    def test_on_signal
-      moomin = 0
-      @x.on_signal(:foo) { moomin = 1 }
-      @x.signal :foo
-      assert moomin == 1
-    end
-
-    def test_on_foo
-      moomin = 0
-      @x.on_foo { moomin = 1 }
-      @x.signal :foo
-      assert moomin == 1
-    end
-
-    def test_multiple_on_signal
-      moomin = 0
-      @x.on_signal(:foo) { moomin += 1 }
-      @x.on_signal(:foo) { moomin += 2 }
-      @x.on_signal(:foo) { moomin += 4 }
-      @x.on_signal(:foo) { moomin += 8 }
-      @x.signal :foo
-      assert moomin == 15
-    end
-
-    def test_multiple_on_foo
-      moomin = 0
-      @x.on_foo { moomin += 1 }
-      @x.on_foo { moomin += 2 }
-      @x.on_foo { moomin += 4 }
-      @x.on_foo { moomin += 8 }
-      @x.signal :foo
-      assert moomin == 15
-    end
-  end
-end
-
-## application-signals.rb ends here.
diff --git a/lib/puppet/external/lock.rb b/lib/puppet/external/lock.rb
deleted file mode 100644
index 5213f56..0000000
--- a/lib/puppet/external/lock.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-require 'thread'
-require 'sync'
-
-# Gotten from:
-# http://path.berkeley.edu/~vjoel/ruby/solaris-bug.rb
-
-# Extensions to the File class for exception-safe file locking in a
-# environment with multiple user threads.
-
-# This is here because closing a file on solaris unlocks any locks that
-# other threads might have. So we have to make sure that only the last
-# reader thread closes the file.
-#
-# The hash maps inode number to a count of reader threads
-$reader_count = Hash.new(0)
-
-class File
-    # Get an exclusive (i.e., write) lock on the file, and yield to the block.
-    # If the lock is not available, wait for it without blocking other ruby
-    # threads.
-    def lock_exclusive
-        if Thread.list.size == 1
-            flock(LOCK_EX)
-        else
-            # ugly hack because waiting for a lock in a Ruby thread blocks the
-            # process
-            period = 0.001
-            until flock(LOCK_EX|LOCK_NB)
-                sleep period
-                period *= 2 if period < 1
-            end
-        end
-
-        yield self
-    ensure
-        flush
-        flock(LOCK_UN)
-    end
-  
-    # Get a shared (i.e., read) lock on the file, and yield to the block.
-    # If the lock is not available, wait for it without blocking other ruby
-    # threads.
-    def lock_shared
-        if Thread.list.size == 1
-            flock(LOCK_SH)
-        else
-            # ugly hack because waiting for a lock in a Ruby thread blocks the
-            # process
-            period = 0.001
-            until flock(LOCK_SH|LOCK_NB)
-                sleep period
-                period *= 2 if period < 1
-            end
-        end
-
-        yield self
-    ensure
-        Thread.exclusive {flock(LOCK_UN) if $reader_count[self.stat.ino] == 1}
-        ## for solaris, no need to unlock here--closing does it
-        ## but this has no effect on the bug
-    end
-end
-
diff --git a/lib/puppet/external/nagios.rb b/lib/puppet/external/nagios.rb
deleted file mode 100755
index 0dcae4c..0000000
--- a/lib/puppet/external/nagios.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env ruby -w
-
-#--------------------
-# A script to retrieve hosts from ldap and create an importable
-# cfservd file from them
-#
-# $Id: nagios.rb,v 1.3 2004/06/09 20:32:46 luke Exp $
-
-require 'digest/md5'
-#require 'ldap'
-require 'puppet/external/nagios/parser.rb'
-require 'puppet/external/nagios/base.rb'
-
-module Nagios
-    NAGIOSVERSION = '1.1'
-    # yay colors
-    PINK = ""
-    GREEN = ""
-    YELLOW = ""
-    SLATE = ""
-    ORANGE = ""
-    BLUE = ""
-    NOCOLOR = ""
-    RESET = ""
-
-    def self.version
-        NAGIOSVERSION
-    end
-
-	class Config
-		def Config.import(config)
-
-			text = String.new
-
-			File.open(config) { |file|
-				file.each { |line|
-					text += line
-				}
-			}
-			parser = Nagios::Parser.new
-			return parser.parse(text)
-		end
-		
-		def Config.each
-			Nagios::Object.objects.each { |object|
-				yield object
-			}
-		end
-	end
-end
diff --git a/lib/puppet/external/nagios/base.rb b/lib/puppet/external/nagios/base.rb
deleted file mode 100755
index 25c6895..0000000
--- a/lib/puppet/external/nagios/base.rb
+++ /dev/null
@@ -1,435 +0,0 @@
-# The base class for all of our Nagios object types.  Everything else
-# is mostly just data.
-class Nagios::Base
-
-    class UnknownNagiosType < RuntimeError # When an unknown type is asked for by name.
-    end
-
-    include Enumerable
-
-    class << self
-        attr_accessor :parameters, :derivatives, :ocs, :name, :att
-        attr_accessor :ldapbase
-
-        attr_writer :namevar
-
-        attr_reader :superior
-    end
-
-    # Attach one class to another.
-    def self.attach(hash)
-        @attach ||= {}
-        hash.each do |n, v| @attach[n] = v end
-    end
-
-    # Convert a parameter to camelcase
-    def self.camelcase(param)
-        param.gsub(/_./) do |match|
-            match.sub(/_/,'').capitalize
-        end
-    end
-
-    # Uncamelcase a parameter.
-    def self.decamelcase(param)
-        param.gsub(/[A-Z]/) do |match|
-            "_" + match.downcase
-        end
-    end
-
-    # Create a new instance of a given class.
-    def self.create(name, args = {})
-        name = name.intern if name.is_a? String
-
-        if @types.include?(name)
-            @types[name].new(args)
-        else
-            raise UnknownNagiosType, "Unknown type %s" % name
-        end
-    end
-
-    # Yield each type in turn.
-    def self.eachtype
-        @types.each do |name, type|
-            yield [name, type]
-        end
-    end
-
-    # Create a mapping.
-    def self.map(hash)
-        @map ||= {}
-        hash.each do |n, v| @map[n] = v end
-    end
-
-    # Return a mapping (or nil) for a param
-    def self.mapping(name)
-        name = name.intern if name.is_a? String
-        if defined? @map
-            @map[name]
-        else
-            nil
-        end
-    end
-
-    # Return the namevar for the canonical name.
-    def self.namevar
-        if defined? @namevar
-            return @namevar
-        else
-            if parameter?(:name)
-                return :name
-            elsif tmp = (self.name.to_s + "_name").intern and parameter?(tmp)
-                @namevar = tmp
-                return @namevar
-            else
-                raise "Type %s has no name var" % self.name
-            end
-        end
-    end
-
-    # Create a new type.
-    def self.newtype(name, &block)
-        name = name.intern if name.is_a? String
-
-        @types ||= {}
-
-        # Create the class, with the correct name.
-        t = Class.new(self)
-        t.name = name
-
-        # Everyone gets this.  There should probably be a better way, and I
-        # should probably hack the attribute system to look things up based on
-        # this "use" setting, but, eh.
-        t.parameters = [:use]
-
-        const_set(name.to_s.capitalize,t)
-
-        # Evaluate the passed block.  This should usually define all of the work.
-        t.class_eval(&block)
-
-        @types[name] = t
-    end
-
-    # Define both the normal case and camelcase method for a parameter
-    def self.paramattr(name)
-        camel = camelcase(name)
-        param = name
-
-        [name, camel].each do |method|
-            define_method(method) do
-                @parameters[param]
-            end
-
-            define_method(method.to_s + "=") do |value|
-                @parameters[param] = value
-            end
-        end
-
-    end
-
-    # Is the specified name a valid parameter?
-    def self.parameter?(name)
-        name = name.intern if name.is_a? String
-        return @parameters.include?(name)
-    end
-
-    # Manually set the namevar
-    def self.setnamevar(name)
-        name = name.intern if name.is_a? String
-        @namevar = name
-    end
-
-    # Set the valid parameters for this class
-    def self.setparameters(*array)
-        @parameters += array
-    end
-
-    # Set the superior ldap object class.  Seems silly to include this
-    # in this class, but, eh.
-    def self.setsuperior(name)
-        @superior = name
-    end
-
-    # Parameters to suppress in output.
-    def self.suppress(name)
-        @suppress ||= []
-        @suppress << name
-    end
-
-    # Whether a given parameter is suppressed.
-    def self.suppress?(name)
-        defined? @suppress and @suppress.include?(name)
-    end
-
-    # Return our name as the string.
-    def self.to_s
-        self.name.to_s
-    end
-
-    # Return a type by name.
-    def self.type(name)
-        name = name.intern if name.is_a? String
-
-        @types[name]
-    end
-
-    # Convenience methods.
-    def [](param)
-        send(param)
-    end
-
-    # Convenience methods.
-    def []=(param,value)
-        send(param.to_s + "=", value)
-    end
-
-    # Iterate across all ofour set parameters.
-    def each
-        @parameters.each { |param,value|
-            yield(param,value)
-        }
-    end
-
-    # Initialize our object, optionally with a list of parameters.
-    def initialize(args = {})
-        @parameters = {}
-
-        args.each { |param,value|
-            self[param] = value
-        }
-    end
-
-    # Handle parameters like attributes.
-    def method_missing(mname, *args)
-        pname = mname.to_s
-        pname.sub!(/=/, '')
-
-        if self.class.parameter?(pname)
-            if pname =~ /A-Z/
-                pname = self.class.decamelcase(pname)
-            end
-            self.class.paramattr(pname)
-
-            # Now access the parameters directly, to make it at least less
-            # likely we'll end up in an infinite recursion.
-            if mname.to_s =~ /=$/
-                @parameters[pname] = *args
-            else
-                return @parameters[mname]
-            end
-        else
-            super
-        end
-    end
-
-    # Retrieve our name, through a bit of redirection.
-    def name
-        send(self.class.namevar)
-    end
-
-    # This is probably a bad idea.
-    def name=(value)
-        unless self.class.namevar.to_s == "name" 
-            send(self.class.namevar.to_s + "=", value) 
-        end    
-    end
-
-    def namevar
-        return (self.type + "_name").intern
-    end
-
-    def parammap(param)
-        unless defined? @map
-            map = {
-                self.namevar => "cn"
-            }
-            if self.class.map
-                map.update(self.class.map)
-            end
-        end
-        if map.include?(param)
-            return map[param]
-        else
-            return "nagios-" + param.id2name.gsub(/_/,'-')
-        end
-    end
-
-    def parent
-        unless defined? self.class.attached
-            puts "Duh, you called parent on an unattached class"
-            return
-        end
-
-        klass,param = self.class.attached
-        unless @parameters.include?(param)
-            puts "Huh, no attachment param"
-            return
-        end
-        klass[@parameters[param]]
-    end
-
-    # okay, this sucks
-    # how do i get my list of ocs?
-    def to_ldif
-        base = self.class.ldapbase
-        str = self.dn + "\n"
-        ocs = Array.new
-        if self.class.ocs
-            # i'm storing an array, so i have to flatten it and stuff
-            kocs = self.class.ocs
-            ocs.push(*kocs)
-        end
-        ocs.push "top"
-        oc = self.class.to_s
-        oc.sub!(/Nagios/,'nagios')
-        oc.sub!(/::/,'')
-        ocs.push oc
-        ocs.each { |oc|
-            str += "objectclass: " + oc + "\n"
-        }
-        @parameters.each { |name,value|
-            if self.class.suppress.include?(name)
-                next
-            end
-            ldapname = self.parammap(name)
-            str += ldapname + ": " + value + "\n"
-        }
-        str += "\n"
-        str
-    end
-
-    def to_s
-        str = "define #{self.type} {\n"
-
-        self.each { |param,value|
-            str += %{\t%-30s %s\n} % [ param,
-                if value.is_a? Array
-                    value.join(",")
-                else
-                    value
-                end
-                ]
-        }
-
-        str += "}\n"
-
-        str
-    end
-
-    # The type of object we are.
-    def type
-        self.class.name
-    end
-
-    # object types
-    newtype :command do
-        setparameters :command_name, :command_line
-    end
-
-    newtype :contact do
-        setparameters :contact_name, :alias, :host_notification_period,
-            :host_notification_commands, :service_notification_period,
-            :service_notification_commands, :register, :email, :pager, 
-            :service_notification_options, :host_notification_options
-
-        setsuperior "person"
-    end
-
-    newtype :contactgroup do
-        setparameters :contactgroup_name, :alias, :members
-    end
-
-    newtype :host do
-        setparameters :host_name, :notifications_enabled, :event_handler_enabled,
-            :flap_detection_enabled, :process_perf_data, :retain_status_information,
-            :retain_nonstatus_information, :register, :use, :alias,
-            :address, :check_command, :max_check_attempts, :notification_interval,
-            :notification_period, :notification_options, :checks_enabled,
-            :failure_prediction_enabled, :parents, :contact_groups
-
-        setsuperior "person"
-        map :address => "ipHostNumber"
-    end
-
-    newtype :hostextinfo do
-        auxiliary = true
-        setparameters :host_name, :notes_url, :icon_image, :icon_image_alt, :vrml_image,
-            "2d_coords".intern, "3d_coords".intern
-
-        setnamevar :host_name
-    end
-
-    newtype :hostgroup do
-        setparameters :hostgroup_name, :alias, :contact_groups, :members
-    end
-
-    newtype :hostescalation do
-        setparameters :name, :first_notification, :last_notification,
-            :notification_interval, :contact_groups,
-            :escalation_options, :register, :hostgroup_name
-        setnamevar :name
-    end              
-
-    newtype :hostgroupescalation do
-        auxiliary = true
-        setparameters :hostgroup_name, :first_notification, :last_notification,
-            :contact_groups, :notification_interval
-
-        setnamevar :hostgroup_name
-    end
-
-    newtype :service do
-        attach :host => :host_name
-        setparameters :name, :active_checks_enabled, :passive_checks_enabled,
-            :parallelize_check, :obsess_over_service, :check_freshness,
-            :notifications_enabled, :event_handler_enabled,
-            :flap_detection_enabled, :process_perf_data,
-            :retain_status_information, :retain_nonstatus_information, :register,
-            :is_volatile, :check_period, :max_check_attempts,
-            :normal_check_interval, :retry_check_interval, :contact_groups,
-            :notification_interval, :notification_period, :notification_options,
-            :service_description, :host_name, :freshness_threshold,
-            :check_command, :hostgroup_name, :event_handler, :servicegroups, :host
-
-        suppress :host_name
-
-        setnamevar :service_description
-    end
-
-    newtype :servicedependency do
-        auxiliary = true
-        setparameters :host_name, :service_description, :dependent_host_name,
-            :dependent_service_description, :execution_failure_criteria,
-            :notification_failure_criteria, :hostgroup_name, 
-            :dependent_hostgroup_name
-
-        setnamevar :host_name
-    end
-
-    newtype :serviceescalation do
-        setparameters :host_name, :service_description, :first_notification,
-            :last_notification, :contact_groups, :notification_interval, :hostgroup_name
-
-        setnamevar :host_name
-    end
-
-    newtype :servicegroup do
-        setparameters :servicegroup_name, :alias
-
-        setnamevar :servicegroup_name
-    end
-
-    newtype :serviceextinfo do
-        auxiliary = true
-
-        setparameters :host_name, :service_description, :icon_image, :icon_image_alt
-
-        setnamevar :host_name
-    end
-
-    newtype :timeperiod do
-        setparameters :timeperiod_name, :alias, :sunday, :monday, :tuesday,
-            :wednesday, :thursday, :friday, :saturday
-    end
-end
-
-# $Id$
diff --git a/lib/puppet/external/nagios/parser.rb b/lib/puppet/external/nagios/parser.rb
deleted file mode 100644
index b7e2c21..0000000
--- a/lib/puppet/external/nagios/parser.rb
+++ /dev/null
@@ -1,816 +0,0 @@
-#
-# DO NOT MODIFY!!!!
-# This file is automatically generated by racc 1.4.4
-# from racc grammer file "grammar.ry".
-#
-#
-# parser.rb: generated by racc (runtime embedded)
-#
-
-###### racc/parser.rb
-
-unless $".index 'racc/parser.rb'
-$".push 'racc/parser.rb'
-
-self.class.module_eval <<'..end /usr/lib/ruby/1.8/racc/parser.rb modeval..id1306b79176', '/usr/lib/ruby/1.8/racc/parser.rb', 1
-#
-# parser.rb
-#
-# Copyright (c) 1999-2003 Minero Aoki <aamine at loveruby.net>
-#
-# This program is free software.
-# You can distribute/modify this program under the same terms of ruby.
-#
-# As a special exception, when this code is copied by Racc
-# into a Racc output file, you may use that output file
-# without restriction.
-#
-# $raccId: parser.rb,v 1.4 2003/11/03 13:41:47 aamine Exp $
-#
-
-unless defined?(NotImplementedError)
-  NotImplementedError = NotImplementError
-end
-
-module Racc
-  class ParseError < StandardError; end
-end
-unless defined?(::ParseError)
-  ParseError = Racc::ParseError
-end
-
-
-module Racc
-
-  unless defined?(Racc_No_Extentions)
-    Racc_No_Extentions = false
-  end
-
-  class Parser
-
-    Racc_Runtime_Version = '1.4.4'
-    Racc_Runtime_Revision = '$raccRevision: 1.4 $'.split[1]
-
-    Racc_Runtime_Core_Version_R = '1.4.4'
-    Racc_Runtime_Core_Revision_R = '$raccRevision: 1.4 $'.split[1]
-    begin
-      require 'racc/cparse'
-    # Racc_Runtime_Core_Version_C  = (defined in extension)
-      Racc_Runtime_Core_Revision_C = Racc_Runtime_Core_Id_C.split[2]
-      unless new.respond_to?(:_racc_do_parse_c, true)
-        raise LoadError, 'old cparse.so'
-      end
-      if Racc_No_Extentions
-        raise LoadError, 'selecting ruby version of racc runtime core'
-      end
-
-      Racc_Main_Parsing_Routine    = :_racc_do_parse_c
-      Racc_YY_Parse_Method         = :_racc_yyparse_c
-      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_C
-      Racc_Runtime_Core_Revision   = Racc_Runtime_Core_Revision_C
-      Racc_Runtime_Type            = 'c'
-    rescue LoadError
-      Racc_Main_Parsing_Routine    = :_racc_do_parse_rb
-      Racc_YY_Parse_Method         = :_racc_yyparse_rb
-      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_R
-      Racc_Runtime_Core_Revision   = Racc_Runtime_Core_Revision_R
-      Racc_Runtime_Type            = 'ruby'
-    end
-
-    def Parser.racc_runtime_type
-      Racc_Runtime_Type
-    end
-
-    private
-
-    def _racc_setup
-      @yydebug = false unless self.class::Racc_debug_parser
-      @yydebug = false unless defined?(@yydebug)
-      if @yydebug
-        @racc_debug_out = $stderr unless defined?(@racc_debug_out)
-        @racc_debug_out ||= $stderr
-      end
-      arg = self.class::Racc_arg
-      arg[13] = true if arg.size < 14
-      arg
-    end
-
-    def _racc_init_sysvars
-      @racc_state  = [0]
-      @racc_tstack = []
-      @racc_vstack = []
-
-      @racc_t = nil
-      @racc_val = nil
-
-      @racc_read_next = true
-
-      @racc_user_yyerror = false
-      @racc_error_status = 0
-    end
-
-    ###
-    ### do_parse
-    ###
-
-    def do_parse
-      __send__(Racc_Main_Parsing_Routine, _racc_setup(), false)
-    end
-
-    def next_token
-      raise NotImplementedError, "#{self.class}\#next_token is not defined"
-    end
-
-    def _racc_do_parse_rb( arg, in_debug )
-      action_table, action_check, action_default, action_pointer,
-      goto_table,   goto_check,   goto_default,   goto_pointer,
-      nt_base,      reduce_table, token_table,    shift_n,
-      reduce_n,     use_result,   * = arg
-
-      _racc_init_sysvars
-      tok = act = i = nil
-      nerr = 0
-
-      catch(:racc_end_parse) {
-        while true
-          if i = action_pointer[@racc_state[-1]]
-            if @racc_read_next
-              if @racc_t != 0   # not EOF
-                tok, @racc_val = next_token()
-                unless tok      # EOF
-                  @racc_t = 0
-                else
-                  @racc_t = (token_table[tok] or 1)   # error token
-                end
-                racc_read_token(@racc_t, tok, @racc_val) if @yydebug
-                @racc_read_next = false
-              end
-            end
-            i += @racc_t
-            unless i >= 0 and
-                   act = action_table[i] and
-                   action_check[i] == @racc_state[-1]
-              act = action_default[@racc_state[-1]]
-            end
-          else
-            act = action_default[@racc_state[-1]]
-          end
-          while act = _racc_evalact(act, arg)
-            ;
-          end
-        end
-      }
-    end
-
-    ###
-    ### yyparse
-    ###
-
-    def yyparse( recv, mid )
-      __send__(Racc_YY_Parse_Method, recv, mid, _racc_setup(), true)
-    end
-
-    def _racc_yyparse_rb( recv, mid, arg, c_debug )
-      action_table, action_check, action_default, action_pointer,
-      goto_table,   goto_check,   goto_default,   goto_pointer,
-      nt_base,      reduce_table, token_table,    shift_n,
-      reduce_n,     use_result,   * = arg
-
-      _racc_init_sysvars
-      tok = nil
-      act = nil
-      i = nil
-      nerr = 0
-
-      catch(:racc_end_parse) {
-        until i = action_pointer[@racc_state[-1]]
-          while act = _racc_evalact(action_default[@racc_state[-1]], arg)
-            ;
-          end
-        end
-        recv.__send__(mid) do |tok, val|
-# $stderr.puts "rd: tok=#{tok}, val=#{val}"
-          unless tok
-            @racc_t = 0
-          else
-            @racc_t = (token_table[tok] or 1)   # error token
-          end
-          @racc_val = val
-          @racc_read_next = false
-
-          i += @racc_t
-          unless i >= 0 and
-                 act = action_table[i] and
-                 action_check[i] == @racc_state[-1]
-            act = action_default[@racc_state[-1]]
-# $stderr.puts "02: act=#{act}"
-# $stderr.puts "curstate=#{@racc_state[-1]}"
-          else
-# $stderr.puts "01: act=#{act}"
-          end
-
-          while act = _racc_evalact(act, arg)
-            ;
-          end
-
-          while not (i = action_pointer[@racc_state[-1]]) or
-                not @racc_read_next or
-                @racc_t == 0   # $
-            unless i and i += @racc_t and
-                   i >= 0 and
-                   act = action_table[i] and
-                   action_check[i] == @racc_state[-1]
-              act = action_default[@racc_state[-1]]
-# $stderr.puts "04: act=#{act}"
-            else
-# $stderr.puts "03: act=#{act}"
-            end
-            while act = _racc_evalact(act, arg)
-              ;
-            end
-          end
-        end
-      }
-    end
-
-    ###
-    ### common
-    ###
-
-    def _racc_evalact( act, arg )
-# $stderr.puts "ea: act=#{act}"
-      action_table, action_check, action_default, action_pointer,
-      goto_table,   goto_check,   goto_default,   goto_pointer,
-      nt_base,      reduce_table, token_table,    shift_n,
-      reduce_n,     use_result,   * = arg
-nerr = 0   # tmp
-
-      if act > 0 and act < shift_n
-        #
-        # shift
-        #
-        if @racc_error_status > 0
-          @racc_error_status -= 1 unless @racc_t == 1   # error token
-        end
-        @racc_vstack.push @racc_val
-        @racc_state.push act
-        @racc_read_next = true
-        if @yydebug
-          @racc_tstack.push @racc_t
-          racc_shift @racc_t, @racc_tstack, @racc_vstack
-        end
-
-      elsif act < 0 and act > -reduce_n
-        #
-        # reduce
-        #
-        code = catch(:racc_jump) {
-          @racc_state.push _racc_do_reduce(arg, act)
-          false
-        }
-        if code
-          case code
-          when 1 # yyerror
-            @racc_user_yyerror = true   # user_yyerror
-            return -reduce_n
-          when 2 # yyaccept
-            return shift_n
-          else
-            raise RuntimeError, '[Racc Bug] unknown jump code'
-          end
-        end
-
-      elsif act == shift_n
-        #
-        # accept
-        #
-        racc_accept if @yydebug
-        throw :racc_end_parse, @racc_vstack[0]
-
-      elsif act == -reduce_n
-        #
-        # error
-        #
-        case @racc_error_status
-        when 0
-          unless arg[21]    # user_yyerror
-            nerr += 1
-            on_error @racc_t, @racc_val, @racc_vstack
-          end
-        when 3
-          if @racc_t == 0   # is $
-            throw :racc_end_parse, nil
-          end
-          @racc_read_next = true
-        end
-        @racc_user_yyerror = false
-        @racc_error_status = 3
-        while true
-          if i = action_pointer[@racc_state[-1]]
-            i += 1   # error token
-            if  i >= 0 and
-                (act = action_table[i]) and
-                action_check[i] == @racc_state[-1]
-              break
-            end
-          end
-
-          throw :racc_end_parse, nil if @racc_state.size <= 1
-          @racc_state.pop
-          @racc_vstack.pop
-          if @yydebug
-            @racc_tstack.pop
-            racc_e_pop @racc_state, @racc_tstack, @racc_vstack
-          end
-        end
-        return act
-
-      else
-        raise RuntimeError, "[Racc Bug] unknown action #{act.inspect}"
-      end
-
-      racc_next_state(@racc_state[-1], @racc_state) if @yydebug
-
-      nil
-    end
-
-    def _racc_do_reduce( arg, act )
-      action_table, action_check, action_default, action_pointer,
-      goto_table,   goto_check,   goto_default,   goto_pointer,
-      nt_base,      reduce_table, token_table,    shift_n,
-      reduce_n,     use_result,   * = arg
-      state = @racc_state
-      vstack = @racc_vstack
-      tstack = @racc_tstack
-
-      i = act * -3
-      len       = reduce_table[i]
-      reduce_to = reduce_table[i+1]
-      method_id = reduce_table[i+2]
-      void_array = []
-
-      tmp_t = tstack[-len, len] if @yydebug
-      tmp_v = vstack[-len, len]
-      tstack[-len, len] = void_array if @yydebug
-      vstack[-len, len] = void_array
-      state[-len, len]  = void_array
-
-      # tstack must be updated AFTER method call
-      if use_result
-        vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0])
-      else
-        vstack.push __send__(method_id, tmp_v, vstack)
-      end
-      tstack.push reduce_to
-
-      racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug
-
-      k1 = reduce_to - nt_base
-      if i = goto_pointer[k1]
-        i += state[-1]
-        if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1
-          return curstate
-        end
-      end
-      goto_default[k1]
-    end
-
-    def on_error( t, val, vstack )
-      raise ParseError, sprintf("\nparse error on value %s (%s)",
-                                val.inspect, token_to_str(t) || '?')
-    end
-
-    def yyerror
-      throw :racc_jump, 1
-    end
-
-    def yyaccept
-      throw :racc_jump, 2
-    end
-
-    def yyerrok
-      @racc_error_status = 0
-    end
-
-    #
-    # for debugging output
-    #
-
-    def racc_read_token( t, tok, val )
-      @racc_debug_out.print 'read    '
-      @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') '
-      @racc_debug_out.puts val.inspect
-      @racc_debug_out.puts
-    end
-
-    def racc_shift( tok, tstack, vstack )
-      @racc_debug_out.puts "shift   #{racc_token2str tok}"
-      racc_print_stacks tstack, vstack
-      @racc_debug_out.puts
-    end
-
-    def racc_reduce( toks, sim, tstack, vstack )
-      out = @racc_debug_out
-      out.print 'reduce '
-      if toks.empty?
-        out.print ' <none>'
-      else
-        toks.each {|t| out.print ' ', racc_token2str(t) }
-      end
-      out.puts " --> #{racc_token2str(sim)}"
-          
-      racc_print_stacks tstack, vstack
-      @racc_debug_out.puts
-    end
-
-    def racc_accept
-      @racc_debug_out.puts 'accept'
-      @racc_debug_out.puts
-    end
-
-    def racc_e_pop( state, tstack, vstack )
-      @racc_debug_out.puts 'error recovering mode: pop token'
-      racc_print_states state
-      racc_print_stacks tstack, vstack
-      @racc_debug_out.puts
-    end
-
-    def racc_next_state( curstate, state )
-      @racc_debug_out.puts  "goto    #{curstate}"
-      racc_print_states state
-      @racc_debug_out.puts
-    end
-
-    def racc_print_stacks( t, v )
-      out = @racc_debug_out
-      out.print '        ['
-      t.each_index do |i|
-        out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')'
-      end
-      out.puts ' ]'
-    end
-
-    def racc_print_states( s )
-      out = @racc_debug_out
-      out.print '        ['
-      s.each {|st| out.print ' ', st }
-      out.puts ' ]'
-    end
-
-    def racc_token2str( tok )
-      self.class::Racc_token_to_s_table[tok] or
-          raise RuntimeError, "[Racc Bug] can't convert token #{tok} to string"
-    end
-
-    def token_to_str( t )
-      self.class::Racc_token_to_s_table[t]
-    end
-
-  end
-
-end
-..end /usr/lib/ruby/1.8/racc/parser.rb modeval..id1306b79176
-end   # end of racc/parser.rb
-
-
-module Nagios
-
-  class Parser < Racc::Parser
-
-module_eval <<'..end grammar.ry modeval..id458299781d', 'grammar.ry', 57
-
-def parse(src)
-	@src = src
-
-	# state variables
-	@invar = false
-	@inobject = false
-	@done = false
-
-	@line = 0
-	@yydebug = true
-
-    begin
-        do_parse
-    rescue SyntaxError
-        $stderr.print "#{$!}\n"
-        exit
-    end
-end
-
-# The lexer.  Very simple.
-def token
-	@src.sub!(/\A\n/,'')
-	if $&
-		@line += 1
-		return [ :RETURN, "\n" ]
-	end
-
-	if @done
-		return nil
-	end
-	yytext = String.new
-
-
-	# remove comments from this line
-	@src.sub!(/\A[ \t]*;.*\n/,"\n")
-	if $&
-		return [:INLINECOMMENT, ""]
-	end
-
-	@src.sub!(/\A#.*\n/,"\n")
-	if $&
-		return [:COMMENT, ""]
-	end
-
-	@src.sub!(/#.*/,'')
-
-	if @src.length == 0
-		@done = true
-		return [false, '$']
-	end
-
-	if @invar
-		@src.sub!(/\A[ \t]+/,'')
-		@src.sub!(/\A([^;\n]+)(\n|;)/,'\2')
-		if $1
-			yytext += $1
-		end
-		@invar = false
-		return [:VALUE, yytext]
-	else
-		@src.sub!(/\A[\t ]*(\S+)([\t ]*|$)/,'')
-        if $1
-            yytext = $1
-            case yytext
-            when 'define'
-                #puts "got define"
-                return [:DEFINE, yytext]
-            when '{'
-                #puts "got {"
-                @inobject = true
-                return [:LCURLY, yytext]
-            else
-                unless @inobject
-                    #puts "got type: #{yytext}"
-                    if yytext =~ /\W/
-                        giveback = yytext.dup
-                        giveback.sub!(/^\w+/,'')
-                        #puts "giveback " + giveback
-                        #puts "yytext " + yytext
-                        yytext.sub!(/\W.*$/,'')
-                        #puts "yytext " + yytext
-                        #puts "all [#{giveback} #{yytext} #{orig}]"
-                        @src = giveback + @src
-                    end
-                    return [:NAME, yytext]
-                else
-                    if yytext == '}'
-                        #puts "got closure: #{yytext}"
-                        @inobject = false
-                        return [:RCURLY, '}']
-                    end
-
-                    unless @invar
-                        @invar = true
-                        return [:PARAM, $1]
-                    else
-                    end
-                end
-            end
-        end
-	end
-end
-
-def next_token
-	token
-end
-
-def yydebug
-    1
-end
-
-def yywrap
-    0
-end
-
-def on_error(token, value, vstack )
-	msg = ""
-	unless value.nil?
-		msg = "line #{@line}: syntax error at '#{value}'"
-	else
-		msg = "line #{@line}: syntax error at '#{token}'"
-	end
-	unless @src.size > 0
-		msg = "line #{@line}: Unexpected end of file"
-	end
-	if token == '$end'.intern
-		puts "okay, this is silly"
-	else
-		raise SyntaxError, msg
-	end
-end
-..end grammar.ry modeval..id458299781d
-
-##### racc 1.4.4 generates ###
-
-racc_reduce_table = [
- 0, 0, :racc_error,
- 1, 13, :_reduce_1,
- 2, 13, :_reduce_2,
- 1, 14, :_reduce_3,
- 1, 14, :_reduce_4,
- 1, 14, :_reduce_none,
- 2, 16, :_reduce_6,
- 6, 15, :_reduce_7,
- 1, 17, :_reduce_none,
- 2, 17, :_reduce_9,
- 4, 18, :_reduce_10,
- 1, 20, :_reduce_none,
- 2, 20, :_reduce_none,
- 0, 19, :_reduce_none,
- 1, 19, :_reduce_none ]
-
-racc_reduce_n = 15
-
-racc_shift_n = 26
-
-racc_action_table = [
-     9,    15,     1,    20,     1,    14,    12,    13,    11,     6,
-     7,     6,     7,    15,    18,     8,    21,    23,    25 ]
-
-racc_action_check = [
-     2,    16,     2,    16,     0,    12,     8,     9,     7,     2,
-     2,     0,     0,    14,    15,     1,    18,    22,    24 ]
-
-racc_action_pointer = [
-     2,    12,     0,   nil,   nil,   nil,   nil,    -1,     0,     7,
-   nil,   nil,    -4,   nil,     8,     6,    -4,   nil,     5,   nil,
-   nil,   nil,     8,   nil,     9,   nil ]
-
-racc_action_default = [
-   -15,   -15,   -15,    -1,    -3,    -5,    -4,   -15,   -15,   -15,
-    -2,    -6,   -15,    26,   -15,   -15,   -15,    -8,   -13,    -9,
-    -7,   -14,   -15,   -11,   -10,   -12 ]
-
-racc_goto_table = [
-    17,     3,    19,    10,     2,    16,    22,    24 ]
-
-racc_goto_check = [
-     6,     2,     6,     2,     1,     5,     7,     8 ]
-
-racc_goto_pointer = [
-   nil,     4,     1,   nil,   nil,    -9,   -14,   -12,   -15 ]
-
-racc_goto_default = [
-   nil,   nil,   nil,     4,     5,   nil,   nil,   nil,   nil ]
-
-racc_token_table = {
- false => 0,
- Object.new => 1,
- :DEFINE => 2,
- :NAME => 3,
- :STRING => 4,
- :PARAM => 5,
- :LCURLY => 6,
- :RCURLY => 7,
- :VALUE => 8,
- :RETURN => 9,
- :COMMENT => 10,
- :INLINECOMMENT => 11 }
-
-racc_use_result_var = true
-
-racc_nt_base = 12
-
-Racc_arg = [
- racc_action_table,
- racc_action_check,
- racc_action_default,
- racc_action_pointer,
- racc_goto_table,
- racc_goto_check,
- racc_goto_default,
- racc_goto_pointer,
- racc_nt_base,
- racc_reduce_table,
- racc_token_table,
- racc_shift_n,
- racc_reduce_n,
- racc_use_result_var ]
-
-Racc_token_to_s_table = [
-'$end',
-'error',
-'DEFINE',
-'NAME',
-'STRING',
-'PARAM',
-'LCURLY',
-'RCURLY',
-'VALUE',
-'RETURN',
-'COMMENT',
-'INLINECOMMENT',
-'$start',
-'decls',
-'decl',
-'object',
-'comment',
-'vars',
-'var',
-'icomment',
-'returns']
-
-Racc_debug_parser = false
-
-##### racc system variables end #####
-
- # reduce 0 omitted
-
-module_eval <<'.,.,', 'grammar.ry', 6
-  def _reduce_1( val, _values, result )
- return val[0] if val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ry', 18
-  def _reduce_2( val, _values, result )
-		if val[1].nil?
-			result = val[0]
-		else
-			if val[0].nil?
-				result = val[1]
-			else
-				result = [ val[0], val[1] ].flatten
-			end
-		end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ry', 20
-  def _reduce_3( val, _values, result )
- result = [val[0]]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ry', 21
-  def _reduce_4( val, _values, result )
- result = nil
-   result
-  end
-.,.,
-
- # reduce 5 omitted
-
-module_eval <<'.,.,', 'grammar.ry', 25
-  def _reduce_6( val, _values, result )
- result = nil
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ry', 31
-  def _reduce_7( val, _values, result )
-		result = Nagios::Base.create(val[1],val[4])
-   result
-  end
-.,.,
-
- # reduce 8 omitted
-
-module_eval <<'.,.,', 'grammar.ry', 40
-  def _reduce_9( val, _values, result )
-		val[1].each {|p,v|
-			val[0][p] = v
-		}
-		result = val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ry', 42
-  def _reduce_10( val, _values, result )
- result = {val[0],val[1]}
-   result
-  end
-.,.,
-
- # reduce 11 omitted
-
- # reduce 12 omitted
-
- # reduce 13 omitted
-
- # reduce 14 omitted
-
- def _reduce_none( val, _values, result )
-  result
- end
-
-  end   # class Parser
-
-end   # module Nagios
diff --git a/lib/puppet/feature/base.rb b/lib/puppet/feature/base.rb
deleted file mode 100644
index 518e9b4..0000000
--- a/lib/puppet/feature/base.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-#  Created by Luke Kanies on 2006-04-30.
-#  Copyright (c) 2006. All rights reserved.
-
-require 'puppet/util/feature'
-
-# Add the simple features, all in one file.
-
-# We've got LDAP available.
-Puppet.features.add(:ldap, :libs => ["ldap"])
-
-# We have the Rdoc::Usage library.
-Puppet.features.add(:usage, :libs => %w{rdoc/ri/ri_paths rdoc/usage})
-
-# We have libshadow, useful for managing passwords.
-Puppet.features.add(:libshadow, :libs => ["shadow"])
-
-# We're running as root.
-Puppet.features.add(:root) { require 'puppet/util/suidmanager'; Puppet::Util::SUIDManager.uid == 0 }
-
-# We've got mongrel available
-Puppet.features.add(:mongrel, :libs => %w{rubygems mongrel puppet/network/http_server/mongrel})
-
-# We have lcs diff
-Puppet.features.add :diff, :libs => %w{diff/lcs diff/lcs/hunk}
diff --git a/lib/puppet/feature/rails.rb b/lib/puppet/feature/rails.rb
deleted file mode 100644
index 63e6f00..0000000
--- a/lib/puppet/feature/rails.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-#  Created by Luke Kanies on 2006-11-07.
-#  Copyright (c) 2006. All rights reserved.
-
-require 'puppet/util/feature'
-
-Puppet.features.add(:rails) do
-    begin
-        require 'active_record'
-    rescue LoadError => detail
-        if Facter["operatingsystem"].value == "Debian" and
-            FileTest.exists?("/usr/share/rails")
-                count = 0
-                Dir.entries("/usr/share/rails").each do |dir|
-                    libdir = File.join("/usr/share/rails", dir, "lib")
-                    if FileTest.exists?(libdir) and ! $:.include?(libdir)
-                        count += 1
-                        $: << libdir
-                    end
-                end
-
-                if count > 0
-                    retry
-                end
-        else
-            #If ActiveRecord was installed only via rubygems this is required
-            require 'rubygems'
-            require 'active_record'
-        end
-    end
-
-    # If we couldn't find it the normal way, try using a Gem.
-    unless defined? ActiveRecord
-        begin
-            require 'rubygems'
-            require 'rails'
-        rescue LoadError
-            # Nothing
-        end
-    end
-
-    # We check a fairly specific class, so that we can be sure that we've
-    # loaded a new enough version of AR that will support the features we
-    # actually use.
-    if defined? ActiveRecord::Associations::BelongsToPolymorphicAssociation
-        require 'puppet/rails'
-        true
-    else
-        false
-    end
-end
-
diff --git a/lib/puppet/file_serving.rb b/lib/puppet/file_serving.rb
deleted file mode 100644
index e7e2b89..0000000
--- a/lib/puppet/file_serving.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-16.
-#  Copyright (c) 2007. All rights reserved.
-
-# Just a stub class.
-class Puppet::FileServing # :nodoc:
-end
diff --git a/lib/puppet/file_serving/configuration.rb b/lib/puppet/file_serving/configuration.rb
deleted file mode 100644
index ccf0957..0000000
--- a/lib/puppet/file_serving/configuration.rb
+++ /dev/null
@@ -1,129 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-16.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet'
-require 'puppet/file_serving'
-require 'puppet/file_serving/mount'
-
-class Puppet::FileServing::Configuration
-    require 'puppet/file_serving/configuration/parser'
-
-    @config_fileuration = nil
-
-    Mount = Puppet::FileServing::Mount
-
-    # Remove our singleton instance.
-    def self.clear_cache
-        @config_fileuration = nil
-    end
-
-    # Create our singleton configuration.
-    def self.create
-        unless @config_fileuration
-            @config_fileuration = new()
-        end
-        @config_fileuration
-    end
-
-    private_class_method  :new
-
-    # Verify that the client is allowed access to this file.
-    def authorized?(file, options = {})
-        mount, file_path = split_path(file, options[:node])
-        # If we're not serving this mount, then access is denied.
-        return false unless mount
-        return mount.allowed?(options[:node], options[:ipaddress])
-    end
-
-    # Search for a file.
-    def file_path(key, options = {})
-        mount, file_path = split_path(key, options[:node])
-
-        return nil unless mount
-
-        # The mount checks to see if the file exists, and returns nil
-        # if not.
-        return mount.file(file_path, options)
-    end
-
-    def initialize
-        @mounts = {}
-        @config_file = nil
-
-        # We don't check to see if the file is modified the first time,
-        # because we always want to parse at first.
-        readconfig(false)
-    end
-
-    # Is a given mount available?
-    def mounted?(name)
-        @mounts.include?(name)
-    end
-
-    def umount(name)
-        @mounts.delete(name) if @mounts.include? name
-    end
-
-    private
-
-    # Deal with ignore parameters.
-    def handleignore(children, path, ignore)            
-        ignore.each { |ignore|                
-            Dir.glob(File.join(path,ignore), File::FNM_DOTMATCH) { |match|
-                children.delete(File.basename(match))
-            }                
-        }
-        return children
-    end  
-
-    # Read the configuration file.
-    def readconfig(check = true)
-        config = Puppet[:fileserverconfig]
-
-        return unless FileTest.exists?(config)
-
-        @parser ||= Puppet::FileServing::Configuration::Parser.new(config)
-
-        if check and ! @parser.changed?
-            return
-        end
-
-        # Don't assign the mounts hash until we're sure the parsing succeeded.
-        begin
-            newmounts = @parser.parse
-            @mounts = newmounts
-        rescue => detail
-            Puppet.err "Error parsing fileserver configuration: %s; using old configuration" % detail
-        end
-    end
-
-    # Split the path into the separate mount point and path.
-    def split_path(uri, node)
-        # Reparse the configuration if necessary.
-        readconfig
-
-        raise(ArgumentError, "Cannot find file: Invalid path '%s'" % uri) unless uri =~ %r{/([-\w]+)/?}
-
-        # the dir is based on one of the mounts
-        # so first retrieve the mount path
-        mount = path = nil
-        # Strip off the mount name.
-        mount_name, path = uri.sub(%r{^/}, '').split(File::Separator, 2)
-
-        return nil unless mount = @mounts[mount_name]
-
-        if path == ""
-            path = nil
-        elsif path
-            # Remove any double slashes that might have occurred
-            path = URI.unescape(path.gsub(/\/\//, "/"))
-        end
-
-        return mount, path
-    end
-
-    def to_s
-        "fileserver"
-    end
-end
diff --git a/lib/puppet/file_serving/configuration/parser.rb b/lib/puppet/file_serving/configuration/parser.rb
deleted file mode 100644
index cda6889..0000000
--- a/lib/puppet/file_serving/configuration/parser.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-require 'puppet/file_serving/configuration'
-require 'puppet/util/loadedfile'
-
-class Puppet::FileServing::Configuration::Parser < Puppet::Util::LoadedFile
-    Mount = Puppet::FileServing::Mount
-    MODULES = 'modules'
-
-    # Parse our configuration file.
-    def parse
-        raise("File server configuration %s does not exist" % self.file) unless FileTest.exists?(self.file)
-        raise("Cannot read file server configuration %s" % self.file) unless FileTest.readable?(self.file)
-
-        @mounts = {}
-        @count = 0
-
-        File.open(self.file) { |f|
-            mount = nil
-            f.each { |line|
-                # Have the count increment at the top, in case we throw exceptions.
-                @count += 1
-
-                case line
-                when /^\s*#/: next # skip comments
-                when /^\s*$/: next # skip blank lines
-                when /\[([-\w]+)\]/:
-                    mount = newmount($1)
-                when /^\s*(\w+)\s+(.+)$/:
-                    var = $1
-                    value = $2
-                    raise(ArgumentError, "Fileserver configuration file does not use '=' as a separator") if value =~ /^=/
-                    case var
-                    when "path":
-                        path(mount, value)
-                    when "allow":
-                        allow(mount, value)
-                    when "deny":
-                        deny(mount, value)
-                    else
-                        raise ArgumentError.new("Invalid argument '%s'" % var,
-                            @count, file)
-                    end
-                else
-                    raise ArgumentError.new("Invalid line '%s'" % line.chomp,
-                        @count, file)
-                end
-            }
-        }
-
-        return @mounts
-    end
-
-    private
-
-    # Add the mount for getting files from modules.
-    def add_module_mount
-        unless @mounts[MODULES]
-            mount = Mount.new(MODULES)
-            mount.allow("*")
-            @mounts[MODULES] = mount
-        end
-    end
-
-    # Allow a given pattern access to a mount.
-    def allow(mount, value)
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = value.split(/\s*,\s*/).each { |val|
-            begin
-                mount.info "allowing %s access" % val
-                mount.allow(val)
-            rescue AuthStoreError => detail
-                raise ArgumentError.new(detail.to_s,
-                    @count, file)
-            end
-        }
-    end
-
-    # Deny a given pattern access to a mount.
-    def deny(mount, value)
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = value.split(/\s*,\s*/).each { |val|
-            begin
-                mount.info "denying %s access" % val
-                mount.deny(val)
-            rescue AuthStoreError => detail
-                raise ArgumentError.new(detail.to_s,
-                    @count, file)
-            end
-        }
-    end
-
-    # Create a new mount.
-    def newmount(name)
-        if @mounts.include?(name)
-            raise ArgumentError, "%s is already mounted at %s" %
-                [@mounts[name], name], @count, file
-        end
-        mount = Mount.new(name)
-        @mounts[name] = mount
-        return mount
-    end
-
-    # Set the path for a mount.
-    def path(mount, value)
-        if mount.name == MODULES
-            Puppet.warning "The '#{MODULES}' module can not have a path. Ignoring attempt to set it"
-        else
-            begin
-                mount.path = value
-            rescue ArgumentError => detail
-                Puppet.err "Removing mount %s: %s" %
-                    [mount.name, detail]
-                @mounts.delete(mount.name)
-            end
-        end
-    end
-
-    # Make sure all of our mounts are valid.  We have to do this after the fact
-    # because details are added over time as the file is parsed.
-    def validate
-        @mounts.each { |name, mount|
-            unless mount.valid?
-                raise ArgumentError, "No path specified for mount %s" % name
-            end
-        }
-    end
-end
diff --git a/lib/puppet/file_serving/content.rb b/lib/puppet/file_serving/content.rb
deleted file mode 100644
index 9398513..0000000
--- a/lib/puppet/file_serving/content.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-16.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/indirector'
-require 'puppet/file_serving'
-require 'puppet/file_serving/file_base'
-require 'puppet/file_serving/indirection_hooks'
-
-# A class that handles retrieving file contents.
-# It only reads the file when its content is specifically
-# asked for.
-class Puppet::FileServing::Content < Puppet::FileServing::FileBase
-    extend Puppet::Indirector
-    indirects :file_content, :extend => Puppet::FileServing::IndirectionHooks
-
-    attr_reader :path
-
-    # Read the content of our file in.
-    def content
-        # This stat can raise an exception, too.
-        raise(ArgumentError, "Cannot read the contents of links unless following links") if stat().ftype == "symlink" 
-
-        ::File.read(full_path())
-    end
-
-    # Just return the file contents as the yaml.  This allows us to
-    # avoid escaping or any such thing.  LAK:NOTE Not really sure how
-    # this will behave if the file contains yaml...  I think the far
-    # side needs to understand that it's a plain string.
-    def to_yaml
-        content
-    end
-end
diff --git a/lib/puppet/file_serving/file_base.rb b/lib/puppet/file_serving/file_base.rb
deleted file mode 100644
index e87d683..0000000
--- a/lib/puppet/file_serving/file_base.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-22.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving'
-
-# The base class for Content and Metadata; provides common
-# functionality like the behaviour around links.
-class Puppet::FileServing::FileBase
-    attr_accessor :key
-
-    # Does our file exist?
-    def exist?
-        begin
-            stat
-            return true
-        rescue => detail
-            return false
-        end
-    end
-
-    # Return the full path to our file.  Fails if there's no path set.
-    def full_path
-        raise(ArgumentError, "You must set a path to get a file's path") unless self.path
-
-        if relative_path.nil? or relative_path == ""
-            path
-        else
-            File.join(path, relative_path)
-        end
-    end
-
-    def initialize(key, options = {})
-        @key = key
-        @links = :manage
-
-        options.each do |param, value|
-            begin
-                send param.to_s + "=", value
-            rescue NoMethodError
-                raise ArgumentError, "Invalid option %s for %s" % [param, self.class]
-            end
-        end
-    end
-
-    # Determine how we deal with links.
-    attr_reader :links
-    def links=(value)
-        value = :manage if value == :ignore
-        raise(ArgumentError, ":links can only be set to :manage or :follow") unless [:manage, :follow].include?(value) 
-        @links = value
-    end
-
-    # Set our base path.
-    attr_reader :path
-    def path=(path)
-        raise ArgumentError.new("Paths must be fully qualified") unless path =~ /^#{::File::SEPARATOR}/
-        @path = path
-    end
-
-    # Set a relative path; this is used for recursion, and sets
-    # the file's path relative to the initial recursion point.
-    attr_reader :relative_path
-    def relative_path=(path)
-        raise ArgumentError.new("Relative paths must not be fully qualified") if path =~ /^#{::File::SEPARATOR}/
-        @relative_path = path
-    end
-
-    # Stat our file, using the appropriate link-sensitive method.
-    def stat
-        unless defined?(@stat_method)
-            @stat_method = self.links == :manage ? :lstat : :stat
-        end
-        File.send(@stat_method, full_path())
-    end
-end
diff --git a/lib/puppet/file_serving/fileset.rb b/lib/puppet/file_serving/fileset.rb
deleted file mode 100644
index 3cb7631..0000000
--- a/lib/puppet/file_serving/fileset.rb
+++ /dev/null
@@ -1,138 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-22.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'find'
-require 'puppet/file_serving'
-require 'puppet/file_serving/metadata'
-
-# Operate recursively on a path, returning a set of file paths.
-class Puppet::FileServing::Fileset
-    attr_reader :path, :ignore, :links
-    attr_accessor :recurse
-
-    # Return a list of all files in our fileset.  This is different from the
-    # normal definition of find in that we support specific levels
-    # of recursion, which means we need to know when we're going another
-    # level deep, which Find doesn't do.
-    def files
-        files = perform_recursion
-
-        # Now strip off the leading path, so each file becomes relative, and remove
-        # any slashes that might end up at the beginning of the path.
-        result = files.collect { |file| file.sub(%r{^#{Regexp.escape(@path)}/*}, '') }
-
-        # And add the path itself.
-        result.unshift(".")
-
-        result
-    end
-
-    # Should we ignore this path?
-    def ignore?(path)
-        # 'detect' normally returns the found result, whereas we just want true/false.
-        ! @ignore.detect { |pattern| File.fnmatch?(pattern, path) }.nil?
-    end
-
-    def ignore=(values)
-        values = [values] unless values.is_a?(Array)
-        @ignore = values
-    end
-
-    def initialize(path, options = {})
-        raise ArgumentError.new("Fileset paths must be fully qualified") unless path =~ /^#{::File::SEPARATOR}/
-
-        @path = path
-
-        # Set our defaults.
-        @ignore = []
-        @links = :manage
-        @recurse = false
-
-        options.each do |option, value|
-            method = option.to_s + "="
-            begin
-                send(method, value)
-            rescue NoMethodError
-                raise ArgumentError, "Invalid option '%s'" % option
-            end
-        end
-
-        raise ArgumentError.new("Fileset paths must exist") unless stat = stat(path)
-    end
-
-    def links=(links)
-        links = links.intern if links.is_a?(String)
-        raise(ArgumentError, "Invalid :links value '%s'" % links) unless [:manage, :follow].include?(links)
-        @links = links
-        @stat_method = links == :manage ? :lstat : :stat
-    end
-
-    # Should we recurse further?  This is basically a single
-    # place for all of the logic around recursion.
-    def recurse?(depth)
-        # If recurse is true, just return true
-        return true if self.recurse == true
-
-        # Return false if the value is false or zero.
-        return false if [false, 0].include?(self.recurse)
-
-        # Return true if our current depth is less than the allowed recursion depth.
-        return true if self.recurse.is_a?(Fixnum) and depth <= self.recurse
-
-        # Else, return false.
-        return false
-    end
-    
-    private
-
-    # Pull the recursion logic into one place.  It's moderately hairy, and this
-    # allows us to keep the hairiness apart from what we do with the files.
-    def perform_recursion
-        # Start out with just our base directory.
-        current_dirs = [@path]
-
-        next_dirs = []
-
-        depth = 1
-
-        result = []
-        return result unless recurse?(depth)
-
-        while dir_path = current_dirs.shift or ((depth += 1) and recurse?(depth) and current_dirs = next_dirs and next_dirs = [] and dir_path = current_dirs.shift)
-            next unless stat = stat(dir_path)
-            next unless stat.directory?
-
-            Dir.entries(dir_path).each do |file_path|
-                next if [".", ".."].include?(file_path)
-
-                # Note that this also causes matching directories not
-                # to be recursed into.
-                next if ignore?(file_path)
-
-                # Add it to our list of files to return
-                result << File.join(dir_path, file_path)
-
-                # And to our list of files/directories to iterate over.
-                next_dirs << File.join(dir_path, file_path)
-            end
-        end
-
-        return result
-    end
-    public
-    # Stat a given file, using the links-appropriate method.
-    def stat(path)
-        unless defined?(@stat_method)
-            @stat_method = self.links == :manage ? :lstat : :stat
-        end
-
-        begin
-            return File.send(@stat_method, path)
-        rescue
-            # If this happens, it is almost surely because we're
-            # trying to manage a link to a file that does not exist.
-            return nil
-        end
-    end
-end
diff --git a/lib/puppet/file_serving/indirection_hooks.rb b/lib/puppet/file_serving/indirection_hooks.rb
deleted file mode 100644
index 66ed169..0000000
--- a/lib/puppet/file_serving/indirection_hooks.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-18.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'uri'
-require 'puppet/file_serving'
-
-# This module is used to pick the appropriate terminus
-# in file-serving indirections.  This is necessary because
-# the terminus varies based on the URI asked for.
-module Puppet::FileServing::IndirectionHooks
-    PROTOCOL_MAP = {"puppet" => :rest, "file" => :file, "puppetmounts" => :file_server}
-
-    # Pick an appropriate terminus based on the protocol.
-    def select_terminus(request)
-        full_uri = request.key
-        # Short-circuit to :file if it's a fully-qualified path.
-        return PROTOCOL_MAP["file"] if full_uri =~ /^#{::File::SEPARATOR}/
-        begin
-            uri = URI.parse(URI.escape(full_uri))
-        rescue => detail
-            raise ArgumentError, "Could not understand URI %s: %s" % [full_uri, detail.to_s]
-        end
-
-        terminus = PROTOCOL_MAP[uri.scheme] || raise(ArgumentError, "URI protocol '%s' is not supported for file serving" % uri.scheme)
-
-        # This provides a convenient mechanism for people to write configurations work
-        # well in both a networked and local setting.
-        if uri.host.nil? and uri.scheme == "puppet" and Puppet.settings[:name] == "puppet"
-            terminus = :file_server
-        end
-
-        # This is the backward-compatible module terminus.
-        if terminus == :file_server and uri.path =~ %r{^/([^/]+)\b}
-            modname = $1
-            if modname == "modules"
-                terminus = :modules
-            elsif terminus(:modules).find_module(modname, request.options[:node])
-                Puppet.warning "DEPRECATION NOTICE: Found file '%s' in module without using the 'modules' mount; please prefix path with '/modules'" % uri.path
-                terminus = :modules
-            end
-        end
-
-        return terminus
-    end
-end
diff --git a/lib/puppet/file_serving/metadata.rb b/lib/puppet/file_serving/metadata.rb
deleted file mode 100644
index b277955..0000000
--- a/lib/puppet/file_serving/metadata.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-16.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet'
-require 'puppet/indirector'
-require 'puppet/file_serving'
-require 'puppet/file_serving/file_base'
-require 'puppet/util/checksums'
-require 'puppet/file_serving/indirection_hooks'
-
-# A class that handles retrieving file metadata.
-class Puppet::FileServing::Metadata < Puppet::FileServing::FileBase
-
-    include Puppet::Util::Checksums
-
-    extend Puppet::Indirector
-    indirects :file_metadata, :extend => Puppet::FileServing::IndirectionHooks
-
-    attr_reader :path, :owner, :group, :mode, :checksum_type, :checksum, :ftype, :destination
-
-    PARAM_ORDER = [:mode, :ftype, :owner, :group]
-
-    def attributes_with_tabs
-        desc = []
-        PARAM_ORDER.each { |check|
-            check = :ftype if check == :type
-            desc << send(check)
-        }
-
-        case ftype
-        when "file", "directory": desc << checksum
-        when "link": desc << @destination
-        else
-            raise ArgumentError, "Cannot manage files of type %s" % ftype
-        end
-
-        return desc.join("\t")
-    end
-
-    def checksum_type=(type)
-        raise(ArgumentError, "Unsupported checksum type %s" % type) unless respond_to?("%s_file" % type)
-
-        @checksum_type = type
-    end
-
-    # Retrieve the attributes for this file, relative to a base directory.
-    # Note that File.stat raises Errno::ENOENT if the file is absent and this
-    # method does not catch that exception.
-    def collect_attributes
-        real_path = full_path()
-        stat = stat()
-        @owner = stat.uid
-        @group = stat.gid
-        @ftype = stat.ftype
-
-
-        # We have to mask the mode, yay.
-        @mode = stat.mode & 007777
-
-        case stat.ftype
-        when "file":
-            @checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, real_path).to_s
-        when "directory": # Always just timestamp the directory.
-            @checksum_type = "ctime"
-            @checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, path).to_s
-        when "link":
-            @destination = File.readlink(real_path)
-        else
-            raise ArgumentError, "Cannot manage files of type %s" % stat.ftype
-        end
-    end
-
-    def initialize(*args)
-        @checksum_type = "md5"
-        super
-    end
-end
diff --git a/lib/puppet/file_serving/mount.rb b/lib/puppet/file_serving/mount.rb
deleted file mode 100644
index 8e5bd03..0000000
--- a/lib/puppet/file_serving/mount.rb
+++ /dev/null
@@ -1,186 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-16.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/network/authstore'
-require 'puppet/util/logging'
-require 'puppet/file_serving'
-require 'puppet/file_serving/metadata'
-require 'puppet/file_serving/content'
-
-# Broker access to the filesystem, converting local URIs into metadata
-# or content objects.
-class Puppet::FileServing::Mount < Puppet::Network::AuthStore
-    include Puppet::Util::Logging
-
-    @@localmap = nil
-
-    # Clear the cache.  This is only ever used for testing.
-    def self.clear_cache
-        @@localmap = nil
-    end
-
-    attr_reader :name
-
-    # Return a new mount with the same properties as +self+, except
-    # with a different name and path.
-    def copy(name, path)
-        result = self.clone
-        result.path = path
-        result.instance_variable_set(:@name, name)
-        return result
-    end
-
-    # Return an instance of the appropriate class.
-    def file(short_file, options = {})
-        file = file_path(short_file, options[:node])
-
-        return nil unless FileTest.exists?(file)
-
-        return file
-    end
-
-    # Return a fully qualified path, given a short path and
-    # possibly a client name.
-    def file_path(relative_path, node = nil)
-        full_path = path(node)
-        raise ArgumentError.new("Mounts without paths are not usable") unless full_path
-
-        # If there's no relative path name, then we're serving the mount itself.
-        return full_path unless relative_path
-
-        return File.join(full_path, relative_path)
-    end
-
-    # Create out object.  It must have a name.
-    def initialize(name, path = nil)
-        unless name =~ %r{^[-\w]+$}
-            raise ArgumentError, "Invalid mount name format '%s'" % name
-        end
-        @name = name
-
-        if path
-            self.path = path
-        else
-            @path = nil
-        end
-
-        super()
-    end
-
-    # Return the path as appropriate, expanding as necessary.
-    def path(node = nil)
-        if expandable?
-            return expand(@path, node)
-        else
-            return @path
-        end
-    end
-
-    # Set the path.
-    def path=(path)
-        # FIXME: For now, just don't validate paths with replacement
-        # patterns in them.
-        if path =~ /%./
-            # Mark that we're expandable.
-            @expandable = true
-        else
-            unless FileTest.directory?(path)
-                raise ArgumentError, "%s does not exist or is not a directory" % path
-            end
-            unless FileTest.readable?(path)
-                raise ArgumentError, "%s is not readable" % path
-            end
-            @expandable = false
-        end
-        @path = path
-    end
-
-    def sync(path)
-        @@syncs[path] ||= Sync.new
-        @@syncs[path]
-    end
-
-    def to_s
-        "mount[%s]" % @name
-    end
-
-    # Verify our configuration is valid.  This should really check to
-    # make sure at least someone will be allowed, but, eh.
-    def valid?
-        return ! @path.nil?
-    end
-
-    private
-
-    # LAK:FIXME Move this method to the REST terminus hook.
-    def authcheck(file, client, clientip)
-        raise "This method should be replaced by a REST/terminus hook"
-        # If we're local, don't bother passing in information.
-        if local?
-            client = nil
-            clientip = nil
-        end
-        unless mount.allowed?(client, clientip)
-            mount.warning "%s cannot access %s" %
-                [client, file]
-            raise Puppet::AuthorizationError, "Cannot access %s" % mount
-        end
-    end
-
-    # Create a map for a specific node.
-    def clientmap(node)
-        {
-            "h" => node.sub(/\..*$/, ""), 
-            "H" => node,
-            "d" => node.sub(/[^.]+\./, "") # domain name
-        }
-    end
-
-    # Replace % patterns as appropriate.
-    def expand(path, node = nil)
-        # This map should probably be moved into a method.
-        map = nil
-
-        if node
-            map = clientmap(node)
-        else
-            Puppet.notice "No client; expanding '%s' with local host" %
-                path
-            # Else, use the local information
-            map = localmap()
-        end
-
-        path.gsub(/%(.)/) do |v|
-            key = $1
-            if key == "%" 
-                "%"
-            else
-                map[key] || v
-            end
-        end
-    end
-
-    # Do we have any patterns in our path, yo?
-    def expandable?
-        if defined? @expandable
-            @expandable
-        else
-            false
-        end
-    end
-
-    # Cache this manufactured map, since if it's used it's likely
-    # to get used a lot.
-    def localmap
-        unless @@localmap
-            @@localmap = {
-                "h" =>  Facter.value("hostname"),
-                "H" => [Facter.value("hostname"),
-                        Facter.value("domain")].join("."),
-                "d" =>  Facter.value("domain")
-            }
-        end
-        @@localmap
-    end
-end
diff --git a/lib/puppet/file_serving/terminus_helper.rb b/lib/puppet/file_serving/terminus_helper.rb
deleted file mode 100644
index e5da0e2..0000000
--- a/lib/puppet/file_serving/terminus_helper.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-22.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving'
-require 'puppet/file_serving/fileset'
-
-# Define some common methods for FileServing termini.
-module Puppet::FileServing::TerminusHelper
-    # Create model instances for all files in a fileset.
-    def path2instances(request, path)
-        args = [:links, :ignore, :recurse].inject({}) { |hash, param| hash[param] = request.options[param] if request.options[param]; hash }
-        Puppet::FileServing::Fileset.new(path, args).files.collect do |file|
-            inst = model.new(File.join(request.key, file), :path => path, :relative_path => file)
-            inst.links = request.options[:links] if request.options[:links]
-            inst
-        end
-    end
-end
diff --git a/lib/puppet/indirector.rb b/lib/puppet/indirector.rb
deleted file mode 100644
index 2402b9c..0000000
--- a/lib/puppet/indirector.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# Manage indirections to termini.  They are organized in terms of indirections -
-# - e.g., configuration, node, file, certificate -- and each indirection has one
-# or more terminus types defined.  The indirection is configured via the
-# +indirects+ method, which will be called by the class extending itself
-# with this module.
-module Puppet::Indirector
-    # LAK:FIXME We need to figure out how to handle documentation for the
-    # different indirection types.
-
-    require 'puppet/indirector/indirection'
-    require 'puppet/indirector/terminus'
-    require 'puppet/indirector/envelope'
-
-    # Declare that the including class indirects its methods to
-    # this terminus.  The terminus name must be the name of a Puppet
-    # default, not the value -- if it's the value, then it gets
-    # evaluated at parse time, which is before the user has had a chance
-    # to override it.
-    def indirects(indirection, options = {})
-        raise(ArgumentError, "Already handling indirection for %s; cannot also handle %s" % [@indirection.name, indirection]) if defined?(@indirection) and @indirection
-        # populate this class with the various new methods
-        extend ClassMethods
-        include InstanceMethods
-        include Puppet::Indirector::Envelope
-
-        # instantiate the actual Terminus for that type and this name (:ldap, w/ args :node)
-        # & hook the instantiated Terminus into this class (Node: @indirection = terminus)
-        @indirection = Puppet::Indirector::Indirection.new(self, indirection,  options)
-        @indirection
-    end
-
-    module ClassMethods   
-        attr_reader :indirection
-
-        def cache_class=(klass)
-            indirection.cache_class = klass
-        end
-
-        def terminus_class=(klass)
-            indirection.terminus_class = klass
-        end
-         
-        # Expire any cached instance.
-        def expire(*args)
-            indirection.expire *args
-        end
-         
-        def find(*args)
-            indirection.find *args
-        end
-
-        def destroy(*args)
-            indirection.destroy *args
-        end
-
-        def search(*args)
-            indirection.search *args
-        end
-    end
-
-    module InstanceMethods
-        def save(*args)
-            self.class.indirection.save self, *args
-        end
-    end
-end
diff --git a/lib/puppet/indirector/catalog/compiler.rb b/lib/puppet/indirector/catalog/compiler.rb
deleted file mode 100644
index a6a8128..0000000
--- a/lib/puppet/indirector/catalog/compiler.rb
+++ /dev/null
@@ -1,151 +0,0 @@
-require 'puppet/node'
-require 'puppet/node/catalog'
-require 'puppet/indirector/code'
-require 'puppet/parser/interpreter'
-require 'yaml'
-
-class Puppet::Node::Catalog::Compiler < Puppet::Indirector::Code
-    desc "Puppet's catalog compilation interface, and its back-end is
-        Puppet's compiler"
-
-    include Puppet::Util
-
-    attr_accessor :code
-
-    # Compile a node's catalog.
-    def find(request)
-        unless node = request.options[:use_node] || find_node(request.key)
-            raise ArgumentError, "Could not find node '%s'; cannot compile" % request.key
-        end
-
-        if catalog = compile(node)
-            return catalog
-        else
-            # This shouldn't actually happen; we should either return
-            # a config or raise an exception.
-            return nil
-        end
-    end
-
-    def initialize
-        set_server_facts
-    end
-
-    # Create/return our interpreter.
-    def interpreter
-        unless defined?(@interpreter) and @interpreter
-            @interpreter = create_interpreter
-        end
-        @interpreter
-    end
-
-    # Is our compiler part of a network, or are we just local?
-    def networked?
-        $0 =~ /puppetmasterd/
-    end
-
-    private
-
-    # Add any extra data necessary to the node.
-    def add_node_data(node)
-        # Merge in our server-side facts, so they can be used during compilation.
-        node.merge(@server_facts)
-    end
-
-    # Compile the actual catalog.
-    def compile(node)
-        # Ask the interpreter to compile the catalog.
-        str = "Compiled catalog for %s" % node.name
-        if node.environment
-            str += " in environment %s" % node.environment
-        end
-        config = nil
-
-        loglevel = networked? ? :notice : :none
-
-        benchmark(loglevel, "Compiled catalog for %s" % node.name) do
-            begin
-                config = interpreter.compile(node)
-            rescue Puppet::Error => detail
-                Puppet.err(detail.to_s) if networked?
-                raise
-            end
-        end
-
-        return config
-    end
-
-    # Create our interpreter object.
-    def create_interpreter
-        return Puppet::Parser::Interpreter.new
-    end
-
-    # Turn our host name into a node object.
-    def find_node(key)
-        # If we want to use the cert name as our key
-        # LAK:FIXME This needs to be figured out somehow, but it requires the routing.
-        # This should be able to use the request, yay.
-        #if Puppet[:node_name] == 'cert' and client
-        #    key = client
-        #end
-
-        return nil unless node = Puppet::Node.find(key)
-
-        # Add any external data to the node.
-        add_node_data(node)
-
-        node
-    end
-
-    # Initialize our server fact hash; we add these to each client, and they
-    # won't change while we're running, so it's safe to cache the values.
-    def set_server_facts
-        @server_facts = {}
-
-        # Add our server version to the fact list
-        @server_facts["serverversion"] = Puppet.version.to_s
-
-        # And then add the server name and IP
-        {"servername" => "fqdn",
-            "serverip" => "ipaddress"
-        }.each do |var, fact|
-            if value = Facter.value(fact)
-                @server_facts[var] = value
-            else
-                Puppet.warning "Could not retrieve fact %s" % fact
-            end
-        end
-
-        if @server_facts["servername"].nil?
-            host = Facter.value(:hostname)
-            if domain = Facter.value(:domain)
-                @server_facts["servername"] = [host, domain].join(".")
-            else
-                @server_facts["servername"] = host
-            end
-        end
-    end
-
-    # Translate our catalog appropriately for sending back to a client.
-    # LAK:FIXME This method should probably be part of the protocol, but it
-    # shouldn't be here.
-    def translate(config)
-        unless networked?
-            config
-        else
-            CGI.escape(config.to_yaml(:UseBlock => true))
-        end
-    end
-
-    # Mark that the node has checked in. LAK:FIXME this needs to be moved into
-    # the Node class, or somewhere that's got abstract backends.
-    def update_node_check(node)
-        if Puppet.features.rails? and Puppet[:storeconfigs]
-            Puppet::Rails.connect
-
-            host = Puppet::Rails::Host.find_or_create_by_name(node.name)
-            host.last_freshcheck = Time.now
-            host.save
-        end
-    end
-end
diff --git a/lib/puppet/indirector/catalog/yaml.rb b/lib/puppet/indirector/catalog/yaml.rb
deleted file mode 100644
index 00241d8..0000000
--- a/lib/puppet/indirector/catalog/yaml.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require 'puppet/node/catalog'
-require 'puppet/indirector/yaml'
-
-class Puppet::Node::Catalog::Yaml < Puppet::Indirector::Yaml
-    desc "Store catalogs as flat files, serialized using YAML."
-
-    private
-
-    # Override these, because yaml doesn't want to convert our self-referential
-    # objects.  This is hackish, but eh.
-    def from_yaml(text)
-        if config = YAML.load(text)
-            # We can't yaml-dump classes.
-            #config.edgelist_class = Puppet::Relationship
-            return config
-        end
-    end
-
-    def to_yaml(config)
-        # We can't yaml-dump classes.
-        #config.edgelist_class = nil
-        YAML.dump(config)
-    end
-end
diff --git a/lib/puppet/indirector/checksum/file.rb b/lib/puppet/indirector/checksum/file.rb
deleted file mode 100644
index 5489b40..0000000
--- a/lib/puppet/indirector/checksum/file.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require 'puppet/checksum'
-require 'puppet/indirector/file'
-
-class Puppet::Checksum::File < Puppet::Indirector::File
-    desc "Store files in a directory set based on their checksums."
-
-    def initialize
-        Puppet.settings.use(:filebucket)
-    end
-
-    def path(checksum)
-        path = []
-        path << Puppet[:bucketdir]                              # Start with the base directory
-        path << checksum[0..7].split("").join(File::SEPARATOR)  # Add sets of directories based on the checksum
-        path << checksum                                        # And the full checksum name itself
-        path << "contents"                                      # And the actual file name
-
-        path.join(File::SEPARATOR)
-    end
-
-    def save(request)
-        path = File.dirname(path(request.key))
-
-        # Make the directories if necessary.
-        unless FileTest.directory?(path)
-            Puppet::Util.withumask(0007) do
-                FileUtils.mkdir_p(path)
-            end
-        end
-
-        super
-    end
-end
diff --git a/lib/puppet/indirector/code.rb b/lib/puppet/indirector/code.rb
deleted file mode 100644
index 0c0ee14..0000000
--- a/lib/puppet/indirector/code.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require 'puppet/indirector/terminus'
-
-# Do nothing, requiring that the back-end terminus do all
-# of the work.
-class Puppet::Indirector::Code < Puppet::Indirector::Terminus
-end
diff --git a/lib/puppet/indirector/direct_file_server.rb b/lib/puppet/indirector/direct_file_server.rb
deleted file mode 100644
index b3b4886..0000000
--- a/lib/puppet/indirector/direct_file_server.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-24.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving/terminus_helper'
-require 'puppet/util/uri_helper'
-require 'puppet/indirector/terminus'
-
-class Puppet::Indirector::DirectFileServer < Puppet::Indirector::Terminus
-
-    include Puppet::Util::URIHelper
-    include Puppet::FileServing::TerminusHelper
-
-    def find(request)
-        uri = key2uri(request.key)
-        return nil unless FileTest.exists?(uri.path)
-        instance = model.new(request.key, :path => uri.path)
-        instance.links = request.options[:links] if request.options[:links]
-        return instance
-    end
-
-    def search(request)
-        uri = key2uri(request.key)
-        return nil unless FileTest.exists?(uri.path)
-        path2instances(request, uri.path)
-    end
-end
diff --git a/lib/puppet/indirector/envelope.rb b/lib/puppet/indirector/envelope.rb
deleted file mode 100644
index ef7952e..0000000
--- a/lib/puppet/indirector/envelope.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'puppet/indirector'
-
-# Provide any attributes or functionality needed for indirected
-# instances.
-module Puppet::Indirector::Envelope
-    attr_accessor :expiration
-
-    def expired?
-        return false unless expiration
-        return false if expiration >= Time.now
-        return true
-    end
-end
diff --git a/lib/puppet/indirector/exec.rb b/lib/puppet/indirector/exec.rb
deleted file mode 100644
index 2462e31..0000000
--- a/lib/puppet/indirector/exec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'puppet/indirector/terminus'
-require 'puppet/util'
-
-class Puppet::Indirector::Exec < Puppet::Indirector::Terminus
-    # Look for external node definitions.
-    def find(request)
-        # Run the command.
-        unless output = query(request.key)
-            return nil
-        end
-
-        # Translate the output to ruby.
-        return output
-    end
-
-    private
-
-    # Proxy the execution, so it's easier to test.
-    def execute(command)
-        Puppet::Util.execute(command)
-    end
-
-    # Call the external command and see if it returns our output.
-    def query(name)
-        external_command = command
-
-        # Make sure it's an arry
-        unless external_command.is_a?(Array)
-            raise Puppet::DevError, "Exec commands must be an array"
-        end
-
-        # Make sure it's fully qualified.
-        unless external_command[0][0] == File::SEPARATOR[0]
-            raise ArgumentError, "You must set the exec parameter to a fully qualified command"
-        end
-
-        # Add our name to it.
-        external_command << name
-        begin
-            output = execute(external_command)
-        rescue Puppet::ExecutionFailure => detail
-            if $?.exitstatus == 1
-                return nil
-            else
-                Puppet.err "Could not retrieve external node information for %s: %s" % [name, detail]
-            end
-            return nil
-        end
-        
-        if output =~ /\A\s*\Z/ # all whitespace
-            Puppet.debug "Empty response for %s from exec %s terminus" % [name, self.name]
-            return nil
-        else
-            return output
-        end
-    end
-end
diff --git a/lib/puppet/indirector/facts/facter.rb b/lib/puppet/indirector/facts/facter.rb
deleted file mode 100644
index 6ed89da..0000000
--- a/lib/puppet/indirector/facts/facter.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-require 'puppet/node/facts'
-require 'puppet/indirector/code'
-
-class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
-    desc "Retrieve facts from Facter.  This provides a somewhat abstract interface
-        between Puppet and Facter.  It's only `somewhat` abstract because it always
-        returns the local host's facts, regardless of what you attempt to find."
-
-    def self.loaddir(dir, type)
-        return unless FileTest.directory?(dir)
-
-        Dir.entries(dir).find_all { |e| e =~ /\.rb$/ }.each do |file|
-            fqfile = ::File.join(dir, file)
-            begin
-                Puppet.info "Loading %s %s" % 
-                    [type, ::File.basename(file.sub(".rb",''))]
-                Timeout::timeout(self.timeout) do
-                    load fqfile
-                end
-            rescue => detail
-                Puppet.warning "Could not load %s %s: %s" % [type, fqfile, detail]
-            end
-        end
-    end
-
-    def self.loadfacts
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = Puppet[:factpath].split(":").each do |dir|
-            loaddir(dir, "fact")
-        end
-    end
-
-    def self.timeout
-        timeout = Puppet[:configtimeout]
-        case timeout
-        when String:
-            if timeout =~ /^\d+$/
-                timeout = Integer(timeout)
-            else
-                raise ArgumentError, "Configuration timeout must be an integer"
-            end
-        when Integer: # nothing
-        else
-            raise ArgumentError, "Configuration timeout must be an integer"
-        end
-
-        return timeout
-    end
-
-    def initialize(*args)
-        super
-        self.class.loadfacts
-    end
-
-    def destroy(facts)
-        raise Puppet::DevError, "You cannot destroy facts in the code store; it is only used for getting facts from Facter"
-    end
-
-    # Look a host's facts up in Facter.
-    def find(request)
-        Puppet::Node::Facts.new(request.key, Facter.to_hash)
-    end
-
-    def save(facts)
-        raise Puppet::DevError, "You cannot save facts to the code store; it is only used for getting facts from Facter"
-    end
-end
diff --git a/lib/puppet/indirector/facts/memory.rb b/lib/puppet/indirector/facts/memory.rb
deleted file mode 100644
index 3c10d59..0000000
--- a/lib/puppet/indirector/facts/memory.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'puppet/node/facts'
-require 'puppet/indirector/memory'
-
-class Puppet::Node::Facts::Memory < Puppet::Indirector::Memory
-    desc "Keep track of facts in memory but nowhere else.  This is used for
-        one-time compiles, such as what the stand-alone ``puppet`` does.
-        To use this terminus, you must load it with the data you want it
-        to contain."
-end
diff --git a/lib/puppet/indirector/facts/yaml.rb b/lib/puppet/indirector/facts/yaml.rb
deleted file mode 100644
index b8a8e31..0000000
--- a/lib/puppet/indirector/facts/yaml.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'puppet/node/facts'
-require 'puppet/indirector/yaml'
-
-class Puppet::Node::Facts::Yaml < Puppet::Indirector::Yaml
-    desc "Store client facts as flat files, serialized using YAML, or
-        return deserialized facts from disk."
-end
diff --git a/lib/puppet/indirector/file.rb b/lib/puppet/indirector/file.rb
deleted file mode 100644
index e538215..0000000
--- a/lib/puppet/indirector/file.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'puppet/indirector/terminus'
-
-# An empty terminus type, meant to just return empty objects.
-class Puppet::Indirector::File < Puppet::Indirector::Terminus
-    # Remove files on disk.
-    def destroy(request)
-        if respond_to?(:path)
-            path = path(request.key)
-        else
-            path = request.key
-        end
-        raise Puppet::Error.new("File %s does not exist; cannot destroy" % [request.key]) unless File.exist?(path)
-
-        begin
-            File.unlink(path)
-        rescue => detail
-            raise Puppet::Error, "Could not remove %s: %s" % [request.key, detail]
-        end
-    end
-
-    # Return a model instance for a given file on disk.
-    def find(request)
-        if respond_to?(:path)
-            path = path(request.key)
-        else
-            path = request.key
-        end
-
-        return nil unless File.exist?(path)
-
-        begin
-            content = File.read(path)
-        rescue => detail
-            raise Puppet::Error, "Could not retrieve path %s: %s" % [path, detail]
-        end
-
-        return model.new(content)
-    end
-
-    # Save a new file to disk.
-    def save(request)
-        if respond_to?(:path)
-            path = path(request.key)
-        else
-            path = request.key
-        end
-        dir = File.dirname(path)
-
-        raise Puppet::Error.new("Cannot save %s; parent directory %s does not exist" % [request.key, dir]) unless File.directory?(dir)
-
-        begin
-            File.open(path, "w") { |f| f.print request.instance.content }
-        rescue => detail
-            raise Puppet::Error, "Could not write %s: %s" % [request.key, detail]
-        end
-    end
-end
diff --git a/lib/puppet/indirector/file_content.rb b/lib/puppet/indirector/file_content.rb
deleted file mode 100644
index 5261ddc..0000000
--- a/lib/puppet/indirector/file_content.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'puppet/file_serving/content'
-
-# A stub class, so our constants work.
-class Puppet::Indirector::FileContent # :nodoc:
-end
diff --git a/lib/puppet/indirector/file_content/file.rb b/lib/puppet/indirector/file_content/file.rb
deleted file mode 100644
index 30c7958..0000000
--- a/lib/puppet/indirector/file_content/file.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-16.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving/content'
-require 'puppet/indirector/file_content'
-require 'puppet/indirector/direct_file_server'
-
-class Puppet::Indirector::FileContent::File < Puppet::Indirector::DirectFileServer
-    desc "Retrieve file contents from disk."
-end
diff --git a/lib/puppet/indirector/file_content/file_server.rb b/lib/puppet/indirector/file_content/file_server.rb
deleted file mode 100644
index 2f50fcc..0000000
--- a/lib/puppet/indirector/file_content/file_server.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-18.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving/content'
-require 'puppet/indirector/file_content'
-require 'puppet/indirector/file_server'
-
-class Puppet::Indirector::FileContent::FileServer < Puppet::Indirector::FileServer
-    desc "Retrieve file contents using Puppet's fileserver."
-end
diff --git a/lib/puppet/indirector/file_content/modules.rb b/lib/puppet/indirector/file_content/modules.rb
deleted file mode 100644
index 8563dac..0000000
--- a/lib/puppet/indirector/file_content/modules.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-18.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving/content'
-require 'puppet/indirector/file_content'
-require 'puppet/indirector/module_files'
-
-class Puppet::Indirector::FileContent::Modules < Puppet::Indirector::ModuleFiles
-    desc "Retrieve file contents from modules."
-end
diff --git a/lib/puppet/indirector/file_content/rest.rb b/lib/puppet/indirector/file_content/rest.rb
deleted file mode 100644
index 31df762..0000000
--- a/lib/puppet/indirector/file_content/rest.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-18.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving/content'
-require 'puppet/util/uri_helper'
-require 'puppet/indirector/file_content'
-require 'puppet/indirector/rest'
-
-class Puppet::Indirector::FileContent::Rest < Puppet::Indirector::REST
-    desc "Retrieve file contents via a REST HTTP interface."
-end
diff --git a/lib/puppet/indirector/file_metadata.rb b/lib/puppet/indirector/file_metadata.rb
deleted file mode 100644
index c43579d..0000000
--- a/lib/puppet/indirector/file_metadata.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'puppet/file_serving/metadata'
-
-# A stub class, so our constants work.
-class Puppet::Indirector::FileMetadata # :nodoc:
-end
diff --git a/lib/puppet/indirector/file_metadata/file.rb b/lib/puppet/indirector/file_metadata/file.rb
deleted file mode 100644
index c46015c..0000000
--- a/lib/puppet/indirector/file_metadata/file.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-16.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving/metadata'
-require 'puppet/indirector/file_metadata'
-require 'puppet/indirector/direct_file_server'
-
-class Puppet::Indirector::FileMetadata::File < Puppet::Indirector::DirectFileServer
-    desc "Retrieve file metadata directly from the local filesystem."
-
-    def find(request)
-        return unless data = super
-        data.collect_attributes
-
-        return data
-    end
-
-    def search(request)
-        return unless result = super
-
-        result.each { |instance| instance.collect_attributes }
-
-        return result
-    end
-end
diff --git a/lib/puppet/indirector/file_metadata/file_server.rb b/lib/puppet/indirector/file_metadata/file_server.rb
deleted file mode 100644
index 0b2e789..0000000
--- a/lib/puppet/indirector/file_metadata/file_server.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-18.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving/metadata'
-require 'puppet/indirector/file_metadata'
-require 'puppet/indirector/file_server'
-
-class Puppet::Indirector::FileMetadata::FileServer < Puppet::Indirector::FileServer
-    desc "Retrieve file metadata using Puppet's fileserver."
-end
diff --git a/lib/puppet/indirector/file_metadata/modules.rb b/lib/puppet/indirector/file_metadata/modules.rb
deleted file mode 100644
index 5ed7a8a..0000000
--- a/lib/puppet/indirector/file_metadata/modules.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-18.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving/metadata'
-require 'puppet/indirector/file_metadata'
-require 'puppet/indirector/module_files'
-
-class Puppet::Indirector::FileMetadata::Modules < Puppet::Indirector::ModuleFiles
-    desc "Retrieve file metadata from modules."
-
-    def find(*args)
-        return unless instance = super
-        instance.collect_attributes
-        instance
-    end
-end
diff --git a/lib/puppet/indirector/file_metadata/rest.rb b/lib/puppet/indirector/file_metadata/rest.rb
deleted file mode 100644
index 0f3d9c6..0000000
--- a/lib/puppet/indirector/file_metadata/rest.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-18.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/file_serving/metadata'
-require 'puppet/util/uri_helper'
-require 'puppet/indirector/file_metadata'
-require 'puppet/indirector/rest'
-
-class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
-    desc "Retrieve file metadata via a REST HTTP interface."
-end
diff --git a/lib/puppet/indirector/file_server.rb b/lib/puppet/indirector/file_server.rb
deleted file mode 100644
index b0df7ff..0000000
--- a/lib/puppet/indirector/file_server.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-19.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/util/uri_helper'
-require 'puppet/file_serving/configuration'
-require 'puppet/file_serving/fileset'
-require 'puppet/file_serving/terminus_helper'
-require 'puppet/indirector/terminus'
-
-# Look files up using the file server.
-class Puppet::Indirector::FileServer < Puppet::Indirector::Terminus
-    include Puppet::Util::URIHelper
-    include Puppet::FileServing::TerminusHelper
-
-    # Is the client authorized to perform this action?
-    def authorized?(request)
-        return false unless [:find, :search].include?(request.method)
-
-        uri = key2uri(request.key)
-
-        configuration.authorized?(uri.path, :node => request.node, :ipaddress => request.ip)
-    end
-
-    # Find our key using the fileserver.
-    def find(request)
-        return nil unless path = find_path(request)
-        result =  model.new(request.key, :path => path)
-        result.links = request.options[:links] if request.options[:links]
-        return result
-    end
-
-    # Search for files.  This returns an array rather than a single
-    # file.
-    def search(request)
-        return nil unless path = find_path(request)
-
-        path2instances(request, path)
-    end
-
-    private
-
-    # Our fileserver configuration, if needed.
-    def configuration
-        Puppet::FileServing::Configuration.create
-    end
-
-    # Find our path; used by :find and :search.
-    def find_path(request)
-        uri = key2uri(request.key)
-
-        return nil unless path = configuration.file_path(uri.path, :node => request.node)
-
-        return path
-    end
-end
diff --git a/lib/puppet/indirector/indirection.rb b/lib/puppet/indirector/indirection.rb
deleted file mode 100644
index 4841ec5..0000000
--- a/lib/puppet/indirector/indirection.rb
+++ /dev/null
@@ -1,302 +0,0 @@
-require 'puppet/util/docs'
-require 'puppet/indirector/envelope'
-require 'puppet/indirector/request'
-
-# The class that connects functional classes with their different collection
-# back-ends.  Each indirection has a set of associated terminus classes,
-# each of which is a subclass of Puppet::Indirector::Terminus.
-class Puppet::Indirector::Indirection
-    include Puppet::Util::Docs
-
-    @@indirections = []
-
-    # Clear all cached termini from all indirections.
-    def self.clear_cache
-        @@indirections.each { |ind| ind.clear_cache }
-    end
-
-    # Find an indirection by name.  This is provided so that Terminus classes
-    # can specifically hook up with the indirections they are associated with.
-    def self.instance(name)
-        @@indirections.find { |i| i.name == name }
-    end
-
-    # Return a list of all known indirections.  Used to generate the
-    # reference.
-    def self.instances
-        @@indirections.collect { |i| i.name }
-    end
-    
-    # Find an indirected model by name.  This is provided so that Terminus classes
-    # can specifically hook up with the indirections they are associated with.
-    def self.model(name)
-        return nil unless match = @@indirections.find { |i| i.name == name }
-        match.model
-    end
-    
-    attr_accessor :name, :model
-
-    # Create and return our cache terminus.
-    def cache
-        raise(Puppet::DevError, "Tried to cache when no cache class was set") unless cache_class
-        terminus(cache_class)
-    end
-
-    # Should we use a cache?
-    def cache?
-        cache_class ? true : false
-    end
-
-    attr_reader :cache_class
-    # Define a terminus class to be used for caching.
-    def cache_class=(class_name)
-        validate_terminus_class(class_name)
-        @cache_class = class_name
-    end
-
-    # Clear our cached list of termini, and reset the cache name
-    # so it's looked up again.
-    # This is only used for testing.
-    def clear_cache
-        @termini.clear
-    end
-
-    # This is only used for testing.
-    def delete
-        @@indirections.delete(self) if @@indirections.include?(self)
-    end
-
-    # Set the time-to-live for instances created through this indirection.
-    def ttl=(value)
-        raise ArgumentError, "Indirection TTL must be an integer" unless value.is_a?(Fixnum)
-        @ttl = value
-    end
-
-    # Default to the runinterval for the ttl.
-    def ttl
-        unless defined?(@ttl)
-            @ttl = Puppet[:runinterval].to_i
-        end
-        @ttl
-    end
-
-    # Calculate the expiration date for a returned instance.
-    def expiration
-        Time.now + ttl
-    end
-
-    # Generate the full doc string.
-    def doc
-        text = ""
-
-        if defined? @doc and @doc
-            text += scrub(@doc) + "\n\n"
-        end
-
-        if s = terminus_setting()
-            text += "* **Terminus Setting**: %s" % terminus_setting
-        end
-
-        text
-    end
-
-    def initialize(model, name, options = {})
-        @model = model
-        @name = name
-
-        @termini = {}
-        @cache_class = nil
-        @terminus_class = nil
-
-        raise(ArgumentError, "Indirection %s is already defined" % @name) if @@indirections.find { |i| i.name == @name }
-        @@indirections << self
-
-        if mod = options[:extend]
-            extend(mod)
-            options.delete(:extend)
-        end
-
-        # This is currently only used for cache_class and terminus_class.
-        options.each do |name, value|
-            begin
-                send(name.to_s + "=", value)
-            rescue NoMethodError
-                raise ArgumentError, "%s is not a valid Indirection parameter" % name
-            end
-        end
-    end
-
-    # Set up our request object.
-    def request(method, key, arguments = nil)
-        Puppet::Indirector::Request.new(self.name, method, key, arguments)
-    end
-
-    # Return the singleton terminus for this indirection.
-    def terminus(terminus_name = nil)
-        # Get the name of the terminus.
-        unless terminus_name ||= terminus_class
-            raise Puppet::DevError, "No terminus specified for %s; cannot redirect" % self.name
-        end
-        
-        return @termini[terminus_name] ||= make_terminus(terminus_name)
-    end
-
-    # This can be used to select the terminus class.
-    attr_accessor :terminus_setting
-
-    # Determine the terminus class.
-    def terminus_class
-        unless @terminus_class
-            if setting = self.terminus_setting
-                self.terminus_class = Puppet.settings[setting].to_sym
-            else
-                raise Puppet::DevError, "No terminus class nor terminus setting was provided for indirection %s" % self.name
-            end
-        end
-        @terminus_class
-    end
-
-    # Specify the terminus class to use.
-    def terminus_class=(klass)
-        validate_terminus_class(klass)
-        @terminus_class = klass
-    end
-
-    # This is used by terminus_class= and cache=.
-    def validate_terminus_class(terminus_class)
-        unless terminus_class and terminus_class.to_s != ""
-            raise ArgumentError, "Invalid terminus name %s" % terminus_class.inspect
-        end
-        unless Puppet::Indirector::Terminus.terminus_class(self.name, terminus_class)
-            raise ArgumentError, "Could not find terminus %s for indirection %s" % [terminus_class, self.name]
-        end
-    end
-
-    # Expire a cached object, if one is cached.  Note that we don't actually
-    # remove it, we expire it and write it back out to disk.  This way people
-    # can still use the expired object if they want.
-    def expire(key, *args)
-        request = request(:expire, key, *args)
-
-        return nil unless cache?
-
-        return nil unless instance = cache.find(request(:find, key, *args))
-
-        Puppet.info "Expiring the %s cache of %s" % [self.name, instance.name]
-
-        # Set an expiration date in the past
-        instance.expiration = Time.now - 60
-
-        cache.save(request(:save, instance, *args))
-    end
-
-    # Search for an instance in the appropriate terminus, caching the
-    # results if caching is configured..
-    def find(key, *args)
-        request = request(:find, key, *args)
-        terminus = prepare(request)
-
-        # See if our instance is in the cache and up to date.
-        if cache? and cached = cache.find(request)
-            if cached.expired?
-                Puppet.info "Not using expired %s for %s from cache; expired at %s" % [self.name, request.key, cached.expiration]
-            else
-                Puppet.debug "Using cached %s for %s" % [self.name, request.key]
-                return cached
-            end
-        end
-
-        # Otherwise, return the result from the terminus, caching if appropriate.
-        if result = terminus.find(request)
-            result.expiration ||= self.expiration
-            if cache?
-                Puppet.info "Caching %s for %s" % [self.name, request.key]
-                cache.save request(:save, result, *args)
-            end
-
-            return result
-        end
-
-        return nil
-    end
-
-    # Remove something via the terminus.
-    def destroy(key, *args)
-        request = request(:destroy, key, *args)
-        terminus = prepare(request)
-
-        result = terminus.destroy(request)
-
-        if cache? and cached = cache.find(request(:find, key, *args))
-            # Reuse the existing request, since it's equivalent.
-            cache.destroy(request)
-        end
-
-        result
-    end
-
-    # Search for more than one instance.  Should always return an array.
-    def search(key, *args)
-        request = request(:search, key, *args)
-        terminus = prepare(request)
-
-        if result = terminus.search(request)
-            raise Puppet::DevError, "Search results from terminus %s are not an array" % terminus.name unless result.is_a?(Array)
-            result.each do |instance|
-                instance.expiration ||= self.expiration
-            end
-            return result
-        end
-    end
-
-    # Save the instance in the appropriate terminus.  This method is
-    # normally an instance method on the indirected class.
-    def save(instance, *args)
-        request = request(:save, instance, *args)
-        terminus = prepare(request)
-
-        # If caching is enabled, save our document there
-        cache.save(request) if cache?
-        terminus.save(request)
-    end
-
-    private
-
-    # Check authorization if there's a hook available; fail if there is one
-    # and it returns false.
-    def check_authorization(request, terminus)
-        # At this point, we're assuming authorization makes no sense without
-        # client information.
-        return unless request.node
-
-        # This is only to authorize via a terminus-specific authorization hook.
-        return unless terminus.respond_to?(:authorized?)
-
-        unless terminus.authorized?(request)
-            raise ArgumentError, "Not authorized to call %s on %s with %s" % [request.method, request.key, request.options.inspect]
-        end
-    end
-
-    # Setup a request, pick the appropriate terminus, check the request's authorization, and return it.
-    def prepare(request)
-        # Pick our terminus.
-        if respond_to?(:select_terminus)
-            terminus_name = select_terminus(request)
-        else
-            terminus_name = terminus_class
-        end
-
-        check_authorization(request, terminus(terminus_name))
-
-        return terminus(terminus_name)
-    end
-
-    # Create a new terminus instance.
-    def make_terminus(terminus_class)
-        # Load our terminus class.
-        unless klass = Puppet::Indirector::Terminus.terminus_class(self.name, terminus_class)
-            raise ArgumentError, "Could not find terminus %s for indirection %s" % [terminus_class, self.name]
-        end
-        return klass.new
-    end
-end
diff --git a/lib/puppet/indirector/ldap.rb b/lib/puppet/indirector/ldap.rb
deleted file mode 100644
index 7485bd9..0000000
--- a/lib/puppet/indirector/ldap.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-require 'puppet/indirector/terminus'
-require 'puppet/util/ldap/connection'
-
-class Puppet::Indirector::Ldap < Puppet::Indirector::Terminus
-    # Perform our ldap search and process the result.
-    def find(request)
-        return ldapsearch(search_filter(request.key)) { |entry| return process(entry) } || nil
-    end
-
-    # Process the found entry.  We assume that we don't just want the
-    # ldap object.
-    def process(entry)
-        raise Puppet::DevError, "The 'process' method has not been overridden for the LDAP terminus for %s" % self.name
-    end
-
-    # Default to all attributes.
-    def search_attributes
-        nil
-    end
-
-    def search_base
-        Puppet[:ldapbase]
-    end
-
-    # The ldap search filter to use.
-    def search_filter(name)
-        raise Puppet::DevError, "No search string set for LDAP terminus for %s" % self.name
-    end
-
-    # Find the ldap node, return the class list and parent node specially,
-    # and everything else in a parameter hash.
-    def ldapsearch(filter)
-        raise ArgumentError.new("You must pass a block to ldapsearch") unless block_given?
-
-        found = false
-        count = 0
-
-        begin
-            connection.search(search_base, 2, filter, search_attributes) do |entry|
-                found = true
-                yield entry
-            end
-        rescue => detail
-            if count == 0
-                # Try reconnecting to ldap if we get an exception and we haven't yet retried.
-                count += 1
-                @connection = nil
-                Puppet.warning "Retrying LDAP connection"
-                retry
-            else
-                error = Puppet::Error.new("LDAP Search failed")
-                error.set_backtrace(detail.backtrace)
-                raise error
-            end
-        end
-
-        return found
-    end
-
-    # Create an ldap connection.
-    def connection
-        unless defined? @connection and @connection
-            unless Puppet.features.ldap?
-                raise Puppet::Error, "Could not set up LDAP Connection: Missing ruby/ldap libraries"
-            end
-            begin
-                conn = Puppet::Util::Ldap::Connection.instance
-                conn.start
-                @connection = conn.connection
-            rescue => detail
-                puts detail.backtrace if Puppet[:trace]
-                raise Puppet::Error, "Could not connect to LDAP: %s" % detail
-            end
-        end
-
-        return @connection
-    end
-end
diff --git a/lib/puppet/indirector/memory.rb b/lib/puppet/indirector/memory.rb
deleted file mode 100644
index 19acc14..0000000
--- a/lib/puppet/indirector/memory.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'puppet/indirector/terminus'
-
-# Manage a memory-cached list of instances.
-class Puppet::Indirector::Memory < Puppet::Indirector::Terminus
-    def initialize
-        @instances = {}
-    end
-
-    def destroy(request)
-        raise ArgumentError.new("Could not find %s to destroy" % request.key) unless @instances.include?(request.key)
-        @instances.delete(request.key)
-    end
-
-    def find(request)
-        @instances[request.key]
-    end
-
-    def save(request)
-        @instances[request.key] = request.instance
-    end
-end
diff --git a/lib/puppet/indirector/module_files.rb b/lib/puppet/indirector/module_files.rb
deleted file mode 100644
index cf5c29c..0000000
--- a/lib/puppet/indirector/module_files.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-19.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/util/uri_helper'
-require 'puppet/indirector/terminus'
-require 'puppet/file_serving/configuration'
-require 'puppet/file_serving/fileset'
-require 'puppet/file_serving/terminus_helper'
-
-# Look files up in Puppet modules.
-class Puppet::Indirector::ModuleFiles < Puppet::Indirector::Terminus
-    include Puppet::Util::URIHelper
-    include Puppet::FileServing::TerminusHelper
-
-    # Is the client allowed access to this key with this method?
-    def authorized?(request)
-        return false unless [:find, :search].include?(request.method)
-
-        uri = key2uri(request.key)
-
-        # Make sure our file path starts with /modules, so that we authorize
-        # against the 'modules' mount.
-        path = uri.path =~ /^\/modules/ ? uri.path : "/modules" + uri.path
-
-        configuration.authorized?(path, :node => request.node, :ipaddress => request.ip)
-    end
-
-    # Find our key in a module.
-    def find(request)
-        return nil unless path = find_path(request)
-
-        result = model.new(request.key, :path => path)
-        result.links = request.options[:links] if request.options[:links]
-        return result
-    end
-
-    # Try to find our module.
-    def find_module(module_name, node_name)
-        Puppet::Module::find(module_name, environment(node_name))
-    end
-
-    # Search for a list of files.
-    def search(request)
-        return nil unless path = find_path(request)
-        path2instances(request, path)
-    end
-
-    private
-
-    # Our fileserver configuration, if needed.
-    def configuration
-        Puppet::FileServing::Configuration.create
-    end
-    
-    # Determine the environment to use, if any.
-    def environment(node_name)
-        if node_name and node = Puppet::Node.find(node_name)
-            node.environment
-        else
-            Puppet::Node::Environment.new.name
-        end
-    end
-
-    # The abstracted method for turning a key into a path; used by both :find and :search.
-    def find_path(request)
-        uri = key2uri(request.key)
-
-        # Strip off /modules if it's there -- that's how requests get routed to this terminus.
-        # Also, strip off the leading slash if present.
-        module_name, relative_path = uri.path.sub(/^\/modules\b/, '').sub(%r{^/}, '').split(File::Separator, 2)
-
-        # And use the environment to look up the module.
-        return nil unless mod = find_module(module_name, request.node)
-
-        path = File.join(mod.files, relative_path)
-
-        return nil unless FileTest.exists?(path)
-
-        return path
-    end
-end
diff --git a/lib/puppet/indirector/node/exec.rb b/lib/puppet/indirector/node/exec.rb
deleted file mode 100644
index 52cbc37..0000000
--- a/lib/puppet/indirector/node/exec.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-require 'puppet/node'
-require 'puppet/indirector/exec'
-
-class Puppet::Node::Exec < Puppet::Indirector::Exec
-    desc "Call an external program to get node information.  See
-    the `ExternalNodes`:trac: page for more information."
-    include Puppet::Util
-
-    def command
-        command = Puppet[:external_nodes]
-        unless command != "none"
-            raise ArgumentError, "You must set the 'external_nodes' parameter to use the external node terminus"
-        end
-        command.split
-    end
-
-    # Look for external node definitions.
-    def find(request)
-        output = super or return nil
-
-        # Translate the output to ruby.
-        result = translate(request.key, output)
-
-        return create_node(request.key, result)
-    end
-
-    private
-
-    # Turn our outputted objects into a Puppet::Node instance.
-    def create_node(name, result)
-        node = Puppet::Node.new(name)
-        set = false
-        [:parameters, :classes, :environment].each do |param|
-            if value = result[param]
-                node.send(param.to_s + "=", value)
-                set = true
-            end
-        end
-
-        node.fact_merge
-        return node
-    end
-
-    # Translate the yaml string into Ruby objects.
-    def translate(name, output)
-        begin
-            YAML.load(output).inject({}) { |hash, data| hash[symbolize(data[0])] = data[1]; hash }
-        rescue => detail
-            raise Puppet::Error, "Could not load external node results for %s: %s" % [name, detail]
-        end
-    end
-end
diff --git a/lib/puppet/indirector/node/ldap.rb b/lib/puppet/indirector/node/ldap.rb
deleted file mode 100644
index 01010a2..0000000
--- a/lib/puppet/indirector/node/ldap.rb
+++ /dev/null
@@ -1,227 +0,0 @@
-require 'puppet/node'
-require 'puppet/indirector/ldap'
-
-class Puppet::Node::Ldap < Puppet::Indirector::Ldap
-    desc "Search in LDAP for node configuration information.  See
-    the `LdapNodes`:trac: page for more information.  This will first
-    search for whatever the certificate name is, then (if that name
-    contains a '.') for the short name, then 'default'."
-
-    # The attributes that Puppet class information is stored in.
-    def class_attributes
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = Puppet[:ldapclassattrs].split(/\s*,\s*/)
-    end
-
-    # Separate this out so it's relatively atomic.  It's tempting to call
-    # process() instead of name2hash() here, but it ends up being
-    # difficult to test because all exceptions get caught by ldapsearch.
-    # LAK:NOTE Unfortunately, the ldap support is too stupid to throw anything
-    # but LDAP::ResultError, even on bad connections, so we are rough handed
-    # with our error handling.
-    def name2hash(name)
-        info = nil
-        ldapsearch(search_filter(name)) { |entry| info = entry2hash(entry) }
-        return info
-    end
-
-    # Look for our node in ldap.
-    def find(request)
-        names = [request.key]
-        if request.key.include?(".") # we assume it's an fqdn
-            names << request.key.sub(/\..+/, '')
-        end
-        names << "default"
-
-        node = nil
-        names.each do |name|
-            next unless info = name2hash(name)
-
-            break if node = info2node(request.key, info)
-        end
-
-        return node
-    end
-
-    # Find more than one node.  LAK:NOTE This is a bit of a clumsy API, because the 'search'
-    # method currently *requires* a key.  It seems appropriate in some cases but not others,
-    # and I don't really know how to get rid of it as a requirement but allow it when desired.
-    def search(request)
-        if classes = request.options[:class]
-            classes = [classes] unless classes.is_a?(Array)
-            filter = "(&(objectclass=puppetClient)(puppetclass=" + classes.join(")(puppetclass=") + "))"
-        else
-            filter = "(objectclass=puppetClient)"
-        end
-
-        infos = []
-        ldapsearch(filter) { |entry| infos << entry2hash(entry) }
-
-        return infos.collect do |info|
-            info2node(info[:name], info)
-        end
-    end
-
-    # The parent attribute, if we have one.
-    def parent_attribute
-        if pattr = Puppet[:ldapparentattr] and ! pattr.empty?
-            pattr
-        else
-            nil
-        end
-    end
-
-    # The attributes that Puppet will stack as array over the full
-    # hierarchy.
-    def stacked_attributes
-        Puppet[:ldapstackedattrs].split(/\s*,\s*/)
-    end
-
-    # Convert the found entry into a simple hash.
-    def entry2hash(entry)
-        result = {}
-        result[:name] = entry.dn.split(',')[0].split("=")[1]
-        if pattr = parent_attribute
-            if values = entry.vals(pattr)
-                if values.length > 1
-                    raise Puppet::Error,
-                        "Node entry %s specifies more than one parent: %s" % [entry.dn, values.inspect]
-                end
-                unless values.empty?
-                    result[:parent] = values.shift
-                end
-            end
-        end
-
-        result[:classes] = []
-        class_attributes.each { |attr|
-            if values = entry.vals(attr)
-                values.each do |v| result[:classes] << v end
-            end
-        }
-        result[:classes].uniq!
-
-        result[:stacked] = []
-        stacked_params = stacked_attributes
-        stacked_params.each { |attr|
-            if values = entry.vals(attr)
-                result[:stacked] = result[:stacked] + values
-            end
-        }
-        
-
-        result[:parameters] = entry.to_hash.inject({}) do |hash, ary|
-            unless stacked_params.include?(ary[0]) # don't add our stacked parameters to the main param list
-                if ary[1].length == 1
-                    hash[ary[0]] = ary[1].shift
-                else
-                    hash[ary[0]] = ary[1]
-                end
-            end
-            hash
-        end
-
-        result[:environment] = result[:parameters]["environment"] if result[:parameters]["environment"]
-
-        result[:stacked_parameters] = {}
-
-        if result[:stacked]
-            result[:stacked].each do |value|
-                param = value.split('=', 2)
-                result[:stacked_parameters][param[0]] = param[1]
-            end
-        end
-
-        if result[:stacked_parameters]
-            result[:stacked_parameters].each do |param, value|
-                result[:parameters][param] = value unless result[:parameters].include?(param)
-            end
-        end
-
-        result
-    end
-
-    # Default to all attributes.
-    def search_attributes
-        ldapattrs = Puppet[:ldapattrs]
-
-        # results in everything getting returned
-        return nil if ldapattrs == "all"
-
-        search_attrs = class_attributes + ldapattrs.split(/\s*,\s*/)
-
-        if pattr = parent_attribute
-            search_attrs << pattr
-        end
-
-        search_attrs
-    end
-
-    # The ldap search filter to use.
-    def search_filter(name)
-        filter = Puppet[:ldapstring]
-
-        if filter.include? "%s"
-            # Don't replace the string in-line, since that would hard-code our node
-            # info.
-            filter = filter.gsub('%s', name)
-        end
-        filter
-    end
-
-    private
-
-    # Add our hash of ldap information to the node instance.
-    def add_to_node(node, information)
-        node.classes = information[:classes].uniq unless information[:classes].nil? or information[:classes].empty?
-        node.parameters = information[:parameters] unless information[:parameters].nil? or information[:parameters].empty?
-        node.environment = information[:environment] if information[:environment]
-    end
-
-    # Find information for our parent and merge it into the current info.
-    def find_and_merge_parent(parent, information)
-        unless parent_info = name2hash(parent)
-            raise Puppet::Error.new("Could not find parent node '%s'" % parent)
-        end
-        information[:classes] += parent_info[:classes]
-        parent_info[:parameters].each do |param, value|
-            # Specifically test for whether it's set, so false values are handled
-            # correctly.
-            information[:parameters][param] = value unless information[:parameters].include?(param)
-        end
-
-        information[:environment] ||= parent_info[:environment]
-
-        parent_info[:parent]
-    end
-
-    # Take a name and a hash, and return a node instance.
-    def info2node(name, info)
-        merge_parent(info) if info[:parent]
-
-        node = Puppet::Node.new(name)
-
-        add_to_node(node, info)
-
-        node.fact_merge
-
-        node
-    end
-
-    def merge_parent(info)
-        parent_info = nil
-        parent = info[:parent]
-
-        # Preload the parent array with the node name.
-        parents = [info[:name]]
-        while parent
-            if parents.include?(parent)
-                raise ArgumentError, "Found loop in LDAP node parents; %s appears twice" % parent
-            end
-            parents << parent
-            parent = find_and_merge_parent(parent, info)
-        end
-
-        return info
-    end
-end
diff --git a/lib/puppet/indirector/node/memory.rb b/lib/puppet/indirector/node/memory.rb
deleted file mode 100644
index de0ed8a..0000000
--- a/lib/puppet/indirector/node/memory.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'puppet/node'
-require 'puppet/indirector/memory'
-
-class Puppet::Node::Memory < Puppet::Indirector::Memory
-    desc "Keep track of nodes in memory but nowhere else.  This is used for
-        one-time compiles, such as what the stand-alone ``puppet`` does.
-        To use this terminus, you must load it with the data you want it
-        to contain; it is only useful for developers and should generally not
-        be chosen by a normal user."
-end
diff --git a/lib/puppet/indirector/node/plain.rb b/lib/puppet/indirector/node/plain.rb
deleted file mode 100644
index 37ceb06..0000000
--- a/lib/puppet/indirector/node/plain.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'puppet/node'
-require 'puppet/indirector/plain'
-
-class Puppet::Node::Plain < Puppet::Indirector::Plain
-    desc "Always return an empty node object. Assumes you keep track of nodes
-        in flat file manifests.  You should use it when you don't have some other,
-        functional source you want to use, as the compiler will not work without a
-        valid node terminus.
-
-        Note that class is responsible for merging the node's facts into the
-        node instance before it is returned."
-
-    # Just return an empty node.
-    def find(request)
-        node = super
-        node.fact_merge
-        node
-    end
-end
diff --git a/lib/puppet/indirector/node/rest.rb b/lib/puppet/indirector/node/rest.rb
deleted file mode 100644
index d8b75f6..0000000
--- a/lib/puppet/indirector/node/rest.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'puppet/node'
-require 'puppet/indirector/rest'
-
-class Puppet::Node::Rest < Puppet::Indirector::REST
-    desc "This will eventually be a REST-based mechanism for finding nodes.  It is currently non-functional."
-    # TODO/FIXME
-end
diff --git a/lib/puppet/indirector/node/yaml.rb b/lib/puppet/indirector/node/yaml.rb
deleted file mode 100644
index f287347..0000000
--- a/lib/puppet/indirector/node/yaml.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'puppet/node'
-require 'puppet/indirector/yaml'
-
-class Puppet::Node::Yaml < Puppet::Indirector::Yaml
-    desc "Store node information as flat files, serialized using YAML,
-        or deserialize stored YAML nodes."
-end
diff --git a/lib/puppet/indirector/plain.rb b/lib/puppet/indirector/plain.rb
deleted file mode 100644
index 2caa094..0000000
--- a/lib/puppet/indirector/plain.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'puppet/indirector/terminus'
-
-# An empty terminus type, meant to just return empty objects.
-class Puppet::Indirector::Plain < Puppet::Indirector::Terminus
-    # Just return nothing.
-    def find(request)
-        indirection.model.new(request.key)
-    end
-end
diff --git a/lib/puppet/indirector/report/processor.rb b/lib/puppet/indirector/report/processor.rb
deleted file mode 100644
index 135f164..0000000
--- a/lib/puppet/indirector/report/processor.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-require 'puppet/transaction/report'
-require 'puppet/indirector/code'
-require 'puppet/reports'
-
-class Puppet::Transaction::Report::Processor < Puppet::Indirector::Code
-    desc "Puppet's report processor.  Processes the report with each of
-        the report types listed in the 'reports' setting."
-
-    def initialize
-        Puppet.settings.use(:main, :reporting, :metrics)
-    end
-
-    def save(request)
-        process(request.instance)
-    end
-
-    private
-
-    # Process the report with each of the configured report types.
-    # LAK:NOTE This isn't necessarily the best design, but it's backward
-    # compatible and that's good enough for now.
-    def process(report)
-        return if Puppet[:reports] == "none"
-
-        reports().each do |name|
-            if mod = Puppet::Reports.report(name)
-                # We have to use a dup because we're including a module in the
-                # report.
-                newrep = report.dup
-                begin
-                    newrep.extend(mod)
-                    newrep.process
-                rescue => detail
-                    if Puppet[:trace]
-                        puts detail.backtrace
-                    end
-                    Puppet.err "Report %s failed: %s" %
-                        [name, detail]
-                end
-            else
-                Puppet.warning "No report named '%s'" % name
-            end
-        end
-    end
-
-    # Handle the parsing of the reports attribute.
-    def reports
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = Puppet[:reports].gsub(/(^\s+)|(\s+$)/, '').split(/\s*,\s*/)
-    end
-end
diff --git a/lib/puppet/indirector/request.rb b/lib/puppet/indirector/request.rb
deleted file mode 100644
index 98fa388..0000000
--- a/lib/puppet/indirector/request.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'puppet/indirector'
-
-# Provide any attributes or functionality needed for indirected
-# instances.
-class Puppet::Indirector::Request
-    attr_accessor :indirection_name, :key, :method, :options, :instance, :node, :ip, :authenticated
-
-    # Is this an authenticated request?
-    def authenticated?
-        # Double negative, so we just get true or false
-        ! ! authenticated
-    end
-
-    def initialize(indirection_name, method, key, options = {})
-        options ||= {}
-        raise ArgumentError, "Request options must be a hash, not %s" % options.class unless options.is_a?(Hash)
-
-        @indirection_name, @method = indirection_name, method
-
-        @options = options.inject({}) do |result, ary|
-            param, value = ary
-            if respond_to?(param.to_s + "=")
-                send(param.to_s + "=", value)
-            else
-                result[param] = value
-            end
-            result
-        end
-
-        if key.is_a?(String) or key.is_a?(Symbol)
-            @key = key
-        else
-            @instance = key
-            @key = @instance.name
-        end
-    end
-
-    # Look up the indirection based on the name provided.
-    def indirection
-        Puppet::Indirector::Indirection.instance(@indirection_name)
-    end
-end
diff --git a/lib/puppet/indirector/rest.rb b/lib/puppet/indirector/rest.rb
deleted file mode 100644
index d33150f..0000000
--- a/lib/puppet/indirector/rest.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-require 'net/http'
-require 'uri'
-
-# Access objects via REST
-class Puppet::Indirector::REST < Puppet::Indirector::Terminus
-
-    def rest_connection_details
-        { :host => Puppet[:server], :port => Puppet[:masterport].to_i }
-    end
-
-    def network_fetch(path)
-        network {|conn| conn.get("/#{path}").body }
-    end
-    
-    def network_delete(path)
-        network {|conn| conn.delete("/#{path}").body }
-    end
-    
-    def network_put(path, data)
-        network {|conn| conn.put("/#{path}", data).body }
-    end
-    
-    def find(request)
-        network_result = network_fetch("#{indirection.name}/#{request.key}")
-        raise YAML.load(network_result) if exception?(network_result)
-        indirection.model.from_yaml(network_result)
-    end
-    
-    def search(request)
-        network_results = network_fetch("#{indirection.name}s/#{request.key}")
-        raise YAML.load(network_results) if exception?(network_results)
-        YAML.load(network_results.to_s).collect {|result| indirection.model.from_yaml(result) }
-    end
-    
-    def destroy(request)
-        network_result = network_delete("#{indirection.name}/#{request.key}")
-        raise YAML.load(network_result) if exception?(network_result)
-        YAML.load(network_result.to_s)      
-    end
-    
-    def save(request)
-        network_result = network_put("#{indirection.name}/", request.instance.to_yaml)
-        raise YAML.load(network_result) if exception?(network_result)
-        indirection.model.from_yaml(network_result)
-    end
-    
-  private
-  
-    def network(&block)
-        Net::HTTP.start(rest_connection_details[:host], rest_connection_details[:port]) {|conn| yield(conn) }
-    end
-  
-    def exception?(yaml_string)
-        yaml_string =~ %r{--- !ruby/exception}
-    end
-end
diff --git a/lib/puppet/indirector/ssl_rsa.rb b/lib/puppet/indirector/ssl_rsa.rb
deleted file mode 100644
index 162d820..0000000
--- a/lib/puppet/indirector/ssl_rsa.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is a stub class
-
-class Puppet::Indirector::SslRsa #:nodoc:
-end
-
diff --git a/lib/puppet/indirector/ssl_rsa/file.rb b/lib/puppet/indirector/ssl_rsa/file.rb
deleted file mode 100644
index 435aa8f..0000000
--- a/lib/puppet/indirector/ssl_rsa/file.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require 'puppet/indirector/file'
-require 'puppet/indirector/ssl_rsa'
-
-class Puppet::Indirector::SslRsa::File < Puppet::Indirector::File
-    desc "Store SSL keys on disk."
-
-    def initialize
-        Puppet.settings.use(:ssl)
-    end
-
-    def path(name)
-        if name == :ca
-            File.join Puppet.settings[:cadir], "ca_key.pem"
-        else
-            File.join Puppet.settings[:publickeydir], name.to_s + ".pem"
-        end
-    end
-
-    def save(key)
-        File.open(path(key.name), "w") { |f| f.print key.to_pem }
-    end
-
-    def find(name)
-        return nil unless FileTest.exists?(path(name))
-        OpenSSL::PKey::RSA.new(File.read(path(name)))
-    end
-
-    def destroy(name)
-        return nil unless FileTest.exists?(path(name))
-        File.unlink(path(name)) and true
-    end
-
-end
diff --git a/lib/puppet/indirector/terminus.rb b/lib/puppet/indirector/terminus.rb
deleted file mode 100644
index 22c56a4..0000000
--- a/lib/puppet/indirector/terminus.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-require 'puppet/indirector'
-require 'puppet/indirector/indirection'
-require 'puppet/util/instance_loader'
-
-# A simple class that can function as the base class for indirected types.
-class Puppet::Indirector::Terminus
-    require 'puppet/util/docs'
-    extend Puppet::Util::Docs
-
-    class << self
-        include Puppet::Util::InstanceLoader
-
-        attr_accessor :name, :terminus_type
-        attr_reader :abstract_terminus, :indirection
-
-        # Are we an abstract terminus type, rather than an instance with an
-        # associated indirection?
-        def abstract_terminus?
-            abstract_terminus
-        end
-
-        # Convert a constant to a short name.
-        def const2name(const)
-            const.sub(/^[A-Z]/) { |i| i.downcase }.gsub(/[A-Z]/) { |i| "_" + i.downcase }.intern
-        end
-
-        # Look up the indirection if we were only provided a name.
-        def indirection=(name)
-            if name.is_a?(Puppet::Indirector::Indirection)
-                @indirection = name
-            elsif ind = Puppet::Indirector::Indirection.instance(name)
-                @indirection = ind
-            else
-                raise ArgumentError, "Could not find indirection instance %s for %s" % [name, self.name]
-            end
-        end
-
-        def indirection_name
-            @indirection.name
-        end
-
-        # Register our subclass with the appropriate indirection.
-        # This follows the convention that our terminus is named after the
-        # indirection.
-        def inherited(subclass)
-            longname = subclass.to_s
-            if longname =~ /#<Class/
-                raise Puppet::DevError, "Terminus subclasses must have associated constants"
-            end
-            names = longname.split("::")
-
-            # Convert everything to a lower-case symbol, converting camelcase to underscore word separation.
-            name = names.pop.sub(/^[A-Z]/) { |i| i.downcase }.gsub(/[A-Z]/) { |i| "_" + i.downcase }.intern
-
-            subclass.name = name
-
-            # Short-circuit the abstract types, which are those that directly subclass
-            # the Terminus class.
-            if self == Puppet::Indirector::Terminus
-                subclass.mark_as_abstract_terminus
-                return
-            end
-
-            # Set the terminus type to be the name of the abstract terminus type.
-            # Yay, class/instance confusion.
-            subclass.terminus_type = self.name
-
-            # Our subclass is specifically associated with an indirection.
-            raise("Invalid name %s" % longname) unless names.length > 0
-            indirection_name = names.pop.sub(/^[A-Z]/) { |i| i.downcase }.gsub(/[A-Z]/) { |i| "_" + i.downcase }.intern
-
-            if indirection_name == "" or indirection_name.nil?
-                raise Puppet::DevError, "Could not discern indirection model from class constant"
-            end
-
-            # This will throw an exception if the indirection instance cannot be found.
-            # Do this last, because it also registers the terminus type with the indirection,
-            # which needs the above information.
-            subclass.indirection = indirection_name
-
-            # And add this instance to the instance hash.
-            Puppet::Indirector::Terminus.register_terminus_class(subclass)
-        end
-
-        # Mark that this instance is abstract.
-        def mark_as_abstract_terminus
-            @abstract_terminus = true
-        end
-
-        def model
-            indirection.model
-        end
-
-        # Convert a short name to a constant.
-        def name2const(name)
-            name.to_s.capitalize.sub(/_(.)/) { |i| $1.upcase }
-        end
-
-        # Register a class, probably autoloaded.
-        def register_terminus_class(klass)
-            setup_instance_loading klass.indirection_name
-            instance_hash(klass.indirection_name)[klass.name] = klass
-        end
-
-        # Return a terminus by name, using the autoloader.
-        def terminus_class(indirection_name, terminus_type)
-            setup_instance_loading indirection_name
-            loaded_instance(indirection_name, terminus_type)
-        end
-
-        # Return all terminus classes for a given indirection.
-        def terminus_classes(indirection_name)
-            setup_instance_loading indirection_name
-            
-            # Load them all.
-            instance_loader(indirection_name).loadall
-
-            # And return the list of names.
-            loaded_instances(indirection_name)
-        end
-
-        private
-
-        def setup_instance_loading(type)
-            unless instance_loading?(type)
-                instance_load type, "puppet/indirector/%s" % type
-            end
-        end
-    end
-
-    def indirection
-        self.class.indirection
-    end
-
-    def initialize
-        if self.class.abstract_terminus?
-            raise Puppet::DevError, "Cannot create instances of abstract terminus types"
-        end
-    end
-    
-    def model
-        self.class.model
-    end
-    
-    def name
-        self.class.name
-    end
-    
-    def terminus_type
-        self.class.terminus_type
-    end
-end
diff --git a/lib/puppet/indirector/yaml.rb b/lib/puppet/indirector/yaml.rb
deleted file mode 100644
index 3f05ce6..0000000
--- a/lib/puppet/indirector/yaml.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-require 'puppet/indirector/terminus'
-
-# The base class for YAML indirection termini.
-class Puppet::Indirector::Yaml < Puppet::Indirector::Terminus
-    # Read a given name's file in and convert it from YAML.
-    def find(request)
-        file = path(request.key)
-        return nil unless FileTest.exist?(file)
-
-        begin
-            return from_yaml(File.read(file))
-        rescue => detail
-            raise Puppet::Error, "Could not read YAML data for %s %s: %s" % [indirection.name, request.key, detail]
-        end
-    end
-
-    # Convert our object to YAML and store it to the disk.
-    def save(request)
-        raise ArgumentError.new("You can only save objects that respond to :name") unless request.instance.respond_to?(:name)
-
-        file = path(request.key)
-
-        basedir = File.dirname(file)
-
-        # This is quite likely a bad idea, since we're not managing ownership or modes.
-        unless FileTest.exist?(basedir)
-            Dir.mkdir(basedir)
-        end
-
-        begin
-            File.open(file, "w", 0660) { |f| f.print to_yaml(request.instance) }
-        rescue TypeError => detail
-            Puppet.err "Could not save %s %s: %s" % [self.name, request.key, detail]
-        end
-    end
-
-    # Get the yaml directory
-    def base
-      (Puppet[:name] == "puppetmasterd") ? Puppet[:yamldir] : Puppet[:clientyamldir]
-    end
-
-    # Return the path to a given node's file.
-    def path(name)
-        File.join(base, self.class.indirection_name.to_s, name.to_s + ".yaml")
-    end
-    
-    # Do a glob on the yaml directory, loading each file found
-    def search(request)
-      Dir.glob(File.join(base, self.class.indirection_name.to_s, request.key)).collect { |f| YAML.load_file(f) }
-    end
-
-    private
-
-    def from_yaml(text)
-        YAML.load(text)
-    end
-
-    def to_yaml(object)
-        YAML.dump(object)
-    end
-end
diff --git a/lib/puppet/metatype/manager.rb b/lib/puppet/metatype/manager.rb
deleted file mode 100644
index 773f30b..0000000
--- a/lib/puppet/metatype/manager.rb
+++ /dev/null
@@ -1,141 +0,0 @@
-require 'puppet'
-require 'puppet/util/classgen'
-
-# Methods dealing with Type management.  This module gets included into the
-# Puppet::Type class, it's just split out here for clarity.
-module Puppet::MetaType
-module Manager
-    include Puppet::Util::ClassGen
-
-    # remove all type instances; this is mostly only useful for testing
-    def allclear
-        @types.each { |name, type|
-            type.clear
-        }
-    end
-
-    # iterate across all of the subclasses of Type
-    def eachtype
-        @types.each do |name, type|
-            # Only consider types that have names
-            #if ! type.parameters.empty? or ! type.validproperties.empty?
-                yield type 
-            #end
-        end
-    end
-
-    # Load all types.  Only currently used for documentation.
-    def loadall
-        typeloader.loadall
-    end
-
-    # Define a new type.
-    def newtype(name, options = {}, &block)
-        # Handle backward compatibility
-        unless options.is_a?(Hash)
-            Puppet.warning "Puppet::Type.newtype(%s) now expects a hash as the second argument, not %s" % [name, options.inspect]
-            options = {:parent => options}
-        end
-
-        # First make sure we don't have a method sitting around
-        name = symbolize(name)
-        newmethod = "new#{name.to_s}"
-
-        # Used for method manipulation.
-        selfobj = metaclass()
-
-        @types ||= {}
-
-        if @types.include?(name)
-            if self.respond_to?(newmethod)
-                # Remove the old newmethod
-                selfobj.send(:remove_method,newmethod)
-            end
-        end
-
-        options = symbolize_options(options)
-
-        if parent = options[:parent]
-            options.delete(:parent)
-        end
-
-        # Then create the class.
-        klass = genclass(name,
-            :parent => (parent || Puppet::Type),
-            :overwrite => true,
-            :hash => @types,
-            :attributes => options,
-            &block
-        )
-
-        # Now define a "new<type>" method for convenience.
-        if self.respond_to? newmethod
-            # Refuse to overwrite existing methods like 'newparam' or 'newtype'.
-            Puppet.warning "'new#{name.to_s}' method already exists; skipping"
-        else
-            selfobj.send(:define_method, newmethod) do |*args|
-                klass.create(*args)
-            end
-        end
-
-        # If they've got all the necessary methods defined and they haven't
-        # already added the property, then do so now.
-        if klass.ensurable? and ! klass.validproperty?(:ensure)
-            klass.ensurable
-        end
-
-        # Now set up autoload any providers that might exist for this type.
-        klass.providerloader = Puppet::Util::Autoload.new(klass,
-            "puppet/provider/#{klass.name.to_s}"
-        )
-
-        # We have to load everything so that we can figure out the default type.
-        klass.providerloader.loadall()
-
-        klass
-    end
-    
-    # Remove an existing defined type.  Largely used for testing.
-    def rmtype(name)
-        # Then create the class.
-        klass = rmclass(name,
-            :hash => @types
-        )
-        
-        if respond_to?("new" + name.to_s)
-            metaclass.send(:remove_method, "new" + name.to_s)
-        end
-    end
-
-    # Return a Type instance by name.
-    def type(name)
-        @types ||= {}
-
-        name = name.to_s.downcase.to_sym
-
-        if t = @types[name]
-            return t
-        else
-            if typeloader.load(name)
-                unless @types.include? name
-                    Puppet.warning "Loaded puppet/type/#{name} but no class was created"
-                end
-            end
-
-            return @types[name]
-        end
-    end
-
-    # Create a loader for Puppet types.
-    def typeloader
-        unless defined? @typeloader
-            @typeloader = Puppet::Util::Autoload.new(self,
-                "puppet/type", :wrap => false
-            )
-        end
-
-        @typeloader
-    end
-end
-end
-
diff --git a/lib/puppet/module.rb b/lib/puppet/module.rb
deleted file mode 100644
index 9385812..0000000
--- a/lib/puppet/module.rb
+++ /dev/null
@@ -1,171 +0,0 @@
-# Support for modules
-class Puppet::Module
-
-    TEMPLATES = "templates"
-    FILES = "files"
-    MANIFESTS = "manifests"
-    
-    # Return an array of paths by splitting the +modulepath+ config
-    # parameter. Only consider paths that are absolute and existing
-    # directories
-    def self.modulepath(environment = nil)
-        dirs = Puppet.settings.value(:modulepath, environment).split(":")
-        if ENV["PUPPETLIB"]
-            dirs = ENV["PUPPETLIB"].split(":") + dirs
-        else
-        end
-        dirs.select do |p|
-            p =~ /^#{File::SEPARATOR}/ && File::directory?(p)
-        end
-    end
-
-    # Return an array of paths by splitting the +templatedir+ config
-    # parameter.
-    def self.templatepath(environment = nil)
-        dirs = Puppet.settings.value(:templatedir, environment).split(":")
-        dirs.select do |p|
-            p =~ /^#{File::SEPARATOR}/ && File::directory?(p)
-        end
-    end
-
-    # Find and return the +module+ that +path+ belongs to. If +path+ is
-    # absolute, or if there is no module whose name is the first component
-    # of +path+, return +nil+
-    def self.find(modname, environment = nil)
-        if modname =~ %r/^#{File::SEPARATOR}/
-            return nil
-        end
-
-        modpath = modulepath(environment).collect { |path|
-            File::join(path, modname)
-        }.find { |f| File::directory?(f) }
-        return nil unless modpath
-
-        return self.new(modname, modpath)
-    end
-
-    # Return an array of the full path of every subdirectory in each
-    # directory in the modulepath.
-    def self.all(environment = nil)
-        modulepath(environment).map do |mp|
-            Dir.new(mp).map do |modfile|
-                modpath = File.join(mp, modfile)
-                unless modfile == '.' or modfile == '..' or !File.directory?(modpath)
-                    modpath
-                else
-                    nil
-                end
-            end
-        end.flatten.compact
-    end
-
-    # Instance methods
-
-    # Find the concrete file denoted by +file+. If +file+ is absolute,
-    # return it directly. Otherwise try to find it as a template in a
-    # module. If that fails, return it relative to the +templatedir+ config
-    # param.
-    # In all cases, an absolute path is returned, which does not
-    # necessarily refer to an existing file
-    def self.find_template(template, environment = nil)
-        if template =~ /^#{File::SEPARATOR}/
-            return template
-        end
-
-        template_paths = templatepath(environment)
-        if template_paths
-            # If we can find the template in :templatedir, we return that.
-            td_file = template_paths.collect { |path|
-                File::join(path, template)
-            }.find { |f| File.exists?(f) }
-
-            return td_file unless td_file == nil
-        end
-
-        td_file = find_template_for_module(template, environment)
-
-        # check in the default template dir, if there is one
-        if td_file.nil?
-            raise Puppet::Error, "No valid template directory found, please check templatedir settings" if template_paths.nil?
-            td_file = File::join(template_paths.first, template)
-        end
-        td_file
-    end
-
-    def self.find_template_for_module(template, environment = nil)
-        path, file = split_path(template)
-
-        # Because templates don't have an assumed template name, like manifests do,
-        # we treat templates with no name as being templates in the main template
-        # directory.
-        if not file.nil?
-            mod = find(path, environment)
-            if mod
-                return mod.template(file)
-            end
-        end
-        nil
-    end
-
-    # Return a list of manifests (as absolute filenames) that match +pat+
-    # with the current directory set to +cwd+. If the first component of
-    # +pat+ does not contain any wildcards and is an existing module, return
-    # a list of manifests in that module matching the rest of +pat+
-    # Otherwise, try to find manifests matching +pat+ relative to +cwd+
-    def self.find_manifests(start, options = {})
-        cwd = options[:cwd] || Dir.getwd
-        module_name, pattern = split_path(start)
-        if module_name and mod = find(module_name, options[:environment])
-            return mod.manifests(pattern)
-        else
-            abspat = File::expand_path(start, cwd)
-            files = Dir.glob(abspat).reject { |f| FileTest.directory?(f) }
-            if files.size == 0
-                files = Dir.glob(abspat + ".pp").reject { |f| FileTest.directory?(f) }
-            end
-            return files
-        end
-    end
-
-    # Split the path into the module and the rest of the path.
-    # This method can and often does return nil, so anyone calling
-    # it needs to handle that.
-    def self.split_path(path)
-        if path =~ %r/^#{File::SEPARATOR}/
-            return nil
-        end
-
-        modname, rest = path.split(File::SEPARATOR, 2)
-        return nil if modname.nil? || modname.empty?
-        return modname, rest
-    end
-
-    attr_reader :name, :path
-    def initialize(name, path)
-        @name = name
-        @path = path
-    end
-
-    def template(file)
-        return File::join(path, TEMPLATES, file)
-    end
-
-    def files
-        return File::join(path, FILES)
-    end
-
-    # Return the list of manifests matching the given glob pattern,
-    # defaulting to 'init.pp' for empty modules.
-    def manifests(rest)
-        rest ||= "init.pp"
-        p = File::join(path, MANIFESTS, rest)
-        files = Dir.glob(p).reject { |f| FileTest.directory?(f) }
-        if files.size == 0
-            files = Dir.glob(p + ".pp")
-        end
-        return files
-    end
-
-    private :initialize
-    private_class_method :find_template_for_module
-end
diff --git a/lib/puppet/network.rb b/lib/puppet/network.rb
deleted file mode 100644
index 8993b88..0000000
--- a/lib/puppet/network.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# Just a stub, so we can correctly scope other classes.
-module Puppet::Network # :nodoc:
-end
diff --git a/lib/puppet/network/authconfig.rb b/lib/puppet/network/authconfig.rb
deleted file mode 100644
index 8e37737..0000000
--- a/lib/puppet/network/authconfig.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-require 'puppet/util/loadedfile'
-require 'puppet/network/rights'
-
-module Puppet
-    class ConfigurationError < Puppet::Error; end
-    class Network::AuthConfig < Puppet::Util::LoadedFile
-
-        def self.main
-            unless defined? @main
-                @main = self.new()
-            end
-            @main
-        end
-
-        # Just proxy the setting methods to our rights stuff
-        [:allow, :deny].each do |method|
-            define_method(method) do |*args|
-                @rights.send(method, *args)
-            end         
-        end
-
-        # Here we add a little bit of semantics.  They can set auth on a whole
-        # namespace or on just a single method in the namespace.
-        def allowed?(request)
-            name        = request.call.intern
-            namespace   = request.handler.intern
-            method      = request.method.intern
-
-            read()
-
-            if @rights.include?(name)
-                return @rights[name].allowed?(request.name, request.ip)
-            elsif @rights.include?(namespace)
-                return @rights[namespace].allowed?(request.name, request.ip)
-            else
-                return false
-            end
-        end
-
-        # Does the file exist?  Puppetmasterd does not require it, but
-        # puppetd does.
-        def exists?
-            FileTest.exists?(@file)
-        end
-
-        def initialize(file = nil, parsenow = true)
-            @file ||= Puppet[:authconfig]
-
-            unless @file
-                raise Puppet::DevError, "No authconfig file defined"
-            end
-            return unless self.exists?
-            super(@file)
-            @rights = Puppet::Network::Rights.new
-            @configstamp = @configstatted = nil
-            @configtimeout = 60
-
-            if parsenow
-                read()
-            end
-        end
-
-        # Read the configuration file.
-        def read
-            return unless FileTest.exists?(@file)
-
-            if @configstamp
-                if @configtimeout and @configstatted
-                    if Time.now - @configstatted > @configtimeout
-                        @configstatted = Time.now
-                        tmp = File.stat(@file).ctime
-
-                        if tmp == @configstamp
-                            return
-                        else
-                            Puppet.notice "%s vs %s" % [tmp, @configstamp]
-                        end
-                    else
-                        return
-                    end
-                else    
-                    Puppet.notice "%s and %s" % [@configtimeout, @configstatted]
-                end
-            end
-
-            parse()
-
-            @configstamp = File.stat(@file).ctime
-            @configstatted = Time.now
-        end
-
-        private
-
-        def parse
-            newrights = Puppet::Network::Rights.new
-            begin
-                File.open(@file) { |f|
-                    right = nil
-                    count = 1
-                    f.each { |line|
-                        case line
-                        when /^\s*#/: next # skip comments
-                        when /^\s*$/: next # skip blank lines
-                        when /\[([\w.]+)\]/: # "namespace" or "namespace.method"
-                            name = $1
-                            if newrights.include?(name)
-                                raise FileServerError, "%s is already set at %s" %
-                                    [newrights[name], name]
-                            end
-                            newrights.newright(name)
-                            right = newrights[name]
-                        when /^\s*(\w+)\s+(.+)$/:
-                            var = $1
-                            value = $2
-                            case var
-                            when "allow":
-                                value.split(/\s*,\s*/).each { |val|
-                                    begin
-                                        right.info "allowing %s access" % val
-                                        right.allow(val)
-                                    rescue AuthStoreError => detail
-                                        raise ConfigurationError, "%s at line %s of %s" %
-                                            [detail.to_s, count, @config]
-                                    end
-                                }
-                            when "deny":
-                                value.split(/\s*,\s*/).each { |val|
-                                    begin
-                                        right.info "denying %s access" % val
-                                        right.deny(val)
-                                    rescue AuthStoreError => detail
-                                        raise ConfigurationError, "%s at line %s of %s" %
-                                            [detail.to_s, count, @config]
-                                    end
-                                }
-                            else
-                                raise ConfigurationError,
-                                    "Invalid argument '%s' at line %s" % [var, count]
-                            end
-                        else
-                            raise ConfigurationError, "Invalid line %s: %s" % [count, line]
-                        end
-                        count += 1
-                    }
-                }
-            rescue Errno::EACCES => detail
-                Puppet.err "Configuration error: Cannot read %s; cannot serve" % @file
-                #raise Puppet::Error, "Cannot read %s" % @config
-            rescue Errno::ENOENT => detail
-                Puppet.err "Configuration error: '%s' does not exit; cannot serve" %
-                    @file
-                #raise Puppet::Error, "%s does not exit" % @config
-            #rescue FileServerError => detail
-            #    Puppet.err "FileServer error: %s" % detail
-            end
-
-            # Verify each of the rights are valid.
-            # We let the check raise an error, so that it can raise an error
-            # pointing to the specific problem.
-            newrights.each { |name, right|
-                right.valid?
-            }
-            @rights = newrights
-        end
-    end
-end
-
diff --git a/lib/puppet/network/authorization.rb b/lib/puppet/network/authorization.rb
deleted file mode 100644
index 9ea4bf6..0000000
--- a/lib/puppet/network/authorization.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-require 'puppet/network/client_request'
-require 'puppet/network/authconfig'
-
-module Puppet::Network
-    # Most of our subclassing is just so that we can get
-    # access to information from the request object, like
-    # the client name and IP address.
-    class InvalidClientRequest < Puppet::Error; end
-    module Authorization
-        # Create our config object if necessary.  This works even if
-        # there's no configuration file.
-        def authconfig
-            unless defined? @authconfig
-                @authconfig = Puppet::Network::AuthConfig.main()
-            end
-
-            @authconfig
-        end
-
-        # Verify that our client has access.  We allow untrusted access to
-        # puppetca methods but no others.
-        def authorized?(request)
-            msg = "%s client %s access to %s" %
-                [request.authenticated? ? "authenticated" : "unauthenticated",
-                    request, request.call]
-
-            if request.authenticated?
-                if authconfig.exists?
-                    if authconfig.allowed?(request)
-                        Puppet.debug "Allowing " + msg
-                        return true
-                    else
-                        Puppet.notice "Denying " + msg
-                        return false
-                    end
-                else
-                    # This is a hack way of seeing if we're a config master.
-                    if Puppet[:name] == "puppetmasterd"
-                        Puppet.debug "Allowing " + msg
-                        return true
-                    else
-                        Puppet.notice "Denying " + msg
-                        return false
-                    end
-                end
-            else
-                if request.handler == "puppetca"
-                    Puppet.notice "Allowing " + msg
-                else
-                    Puppet.notice "Denying " + msg
-                    return false
-                end
-            end
-        end
-
-        # Is this functionality available?
-        def available?(request)
-            if handler_loaded?(request.handler)
-                return true
-            else
-                Puppet.warning "Client %s requested unavailable functionality %s" %
-                    [request, request.handler]
-                return false
-            end
-        end
-
-        # Make sure that this method is available and authorized.
-        def verify(request)
-            unless available?(request)
-                raise InvalidClientRequest.new(
-                    "Functionality %s not available" % request.handler
-                )
-            end
-            unless authorized?(request)
-                raise InvalidClientRequest.new(
-                    "Host %s not authorized to call %s" %
-                        [request, request.call]
-                )
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/network/authstore.rb b/lib/puppet/network/authstore.rb
deleted file mode 100755
index cb1fdc5..0000000
--- a/lib/puppet/network/authstore.rb
+++ /dev/null
@@ -1,297 +0,0 @@
-# standard module for determining whether a given hostname or IP has access to
-# the requested resource
-
-require 'ipaddr'
-require 'puppet/util/logging'
-
-module Puppet
-    class AuthStoreError < Puppet::Error; end
-    class AuthorizationError < Puppet::Error; end
-
-    class Network::AuthStore
-        include Puppet::Util::Logging
-
-        # Mark a given pattern as allowed.
-        def allow(pattern)
-            # a simple way to allow anyone at all to connect
-            if pattern == "*"
-                @globalallow = true
-            else
-                store(:allow, pattern)
-            end
-
-            return nil
-        end
-
-        # Is a given combination of name and ip address allowed?  If either input
-        # is non-nil, then both inputs must be provided.  If neither input
-        # is provided, then the authstore is considered local and defaults to "true".
-        def allowed?(name, ip)
-            if name or ip
-                # This is probably unnecessary, and can cause some weirdnesses in
-                # cases where we're operating over localhost but don't have a real
-                # IP defined.
-                unless name and ip
-                    raise Puppet::DevError, "Name and IP must be passed to 'allowed?'"
-                end
-                # else, we're networked and such
-            else
-                # we're local
-                return true
-            end
-
-            # yay insecure overrides
-            if globalallow?
-                return true
-            end
-
-            if decl = @declarations.find { |d| d.match?(name, ip) }
-                return decl.result
-            end
-
-            self.info "defaulting to no access for %s" % name
-            return false
-        end
-
-        # Deny a given pattern.
-        def deny(pattern)
-            store(:deny, pattern)
-        end
-
-        # Is global allow enabled?
-        def globalallow?
-            @globalallow
-        end
-
-        def initialize
-            @globalallow = nil
-            @declarations = []
-        end
-
-        def to_s
-            "authstore"
-        end
-
-        private
-
-        # Store the results of a pattern into our hash.  Basically just
-        # converts the pattern and sticks it into the hash.
-        def store(type, pattern)
-            @declarations << Declaration.new(type, pattern)
-            @declarations.sort!
-
-            return nil
-        end
-
-        # A single declaration.  Stores the info for a given declaration,
-        # provides the methods for determining whether a declaration matches,
-        # and handles sorting the declarations appropriately.
-        class Declaration
-            include Puppet::Util
-            include Comparable
-
-            # The type of declaration: either :allow or :deny
-            attr_reader :type
-
-            # The name: :ip or :domain
-            attr_accessor :name
-
-            # The pattern we're matching against.  Can be an IPAddr instance,
-            # or an array of strings, resulting from reversing a hostname
-            # or domain name.
-            attr_reader :pattern
-
-            # The length.  Only used for iprange and domain.
-            attr_accessor :length
-
-            # Sort the declarations specially.
-            def <=>(other)
-                # Sort first based on whether the matches are exact.
-                if r = compare(exact?, other.exact?)
-                    return r
-                end
-
-                # Then by type
-                if r = compare(self.ip?, other.ip?)
-                    return r
-                end
-
-                # Next sort based on length
-                unless self.length == other.length
-                    # Longer names/ips should go first, because they're more
-                    # specific.
-                    return other.length <=> self.length
-                end
-
-                # Then sort deny before allow
-                if r = compare(self.deny?, other.deny?)
-                    return r
-                end
-
-                # We've already sorted by name and length, so all that's left
-                # is the pattern
-                if ip?
-                    return self.pattern.to_s <=> other.pattern.to_s
-                else
-                    return self.pattern <=> other.pattern
-                end
-            end
-
-            def deny?
-                self.type == :deny
-            end
-
-            # Are we an exact match?
-            def exact?
-                self.length.nil?
-            end
-
-            def initialize(type, pattern)
-                self.type = type
-                self.pattern = pattern
-            end
-
-            # Are we an IP type?
-            def ip?
-                self.name == :ip
-            end
-
-            # Does this declaration match the name/ip combo?
-            def match?(name, ip)
-                if self.ip?
-                    return pattern.include?(IPAddr.new(ip))
-                else
-                    return matchname?(name)
-                end
-            end
-
-            # Set the pattern appropriately.  Also sets the name and length.
-            def pattern=(pattern)
-                parse(pattern)
-                @orig = pattern
-            end
-
-            # Mapping a type of statement into a return value.
-            def result
-                case @type
-                when :allow: true
-                else
-                    false
-                end
-            end
-
-            def to_s
-                "%s: %s" % [self.type, self.pattern]
-            end
-
-            # Set the declaration type.  Either :allow or :deny.
-            def type=(type)
-                type = symbolize(type)
-                unless [:allow, :deny].include?(type)
-                    raise ArgumentError, "Invalid declaration type %s" % type
-                end
-                @type = type
-            end
-
-            private
-
-            # Returns nil if both values are true or both are false, returns
-            # -1 if the first is true, and 1 if the second is true.  Used
-            # in the <=> operator.
-            def compare(me, them)
-                unless me and them
-                    if me
-                        return -1
-                    elsif them
-                        return 1
-                    else
-                        return false
-                    end
-                end
-                return nil
-            end
-
-            # Does the name match our pattern?
-            def matchname?(name)
-                name = munge_name(name)
-                return true if self.pattern == name
-
-                # If it's an exact match, then just return false, since the
-                # exact didn't match.
-                if exact?
-                    return false
-                end
-
-                # If every field in the pattern matches, then we consider it
-                # a match.
-                pattern.zip(name) do |p,n|
-                    unless p == n
-                        return false
-                    end
-                end
-
-                return true
-            end
-
-            # Convert the name to a common pattern.
-            def munge_name(name)
-                # LAK:NOTE http://snurl.com/21zf8  [groups_google_com]
-                x = name.downcase.split(".").reverse
-            end
-
-            # Parse our input pattern and figure out what kind of allowal
-            # statement it is.  The output of this is used for later matching.
-            def parse(value)
-                case value
-                when /^(\d+\.){1,3}\*$/: # an ip address with a '*' at the end
-                    @name = :ip
-                    match = $1
-                    match.sub!(".", '')
-                    ary = value.split(".")
-
-                    mask = case ary.index(match)
-                    when 0: 8
-                    when 1: 16
-                    when 2: 24
-                    else
-                        raise AuthStoreError, "Invalid IP pattern %s" % value
-                    end
-
-                    @length = mask
-
-                    ary.pop
-                    while ary.length < 4
-                        ary.push("0")
-                    end
-
-                    begin
-                        @pattern = IPAddr.new(ary.join(".") + "/" + mask.to_s)
-                    rescue ArgumentError => detail
-                        raise AuthStoreError, "Invalid IP address pattern %s" % value
-                    end
-                when /^([a-zA-Z][-\w]*\.)+[-\w]+$/: # a full hostname
-                    @name = :domain
-                    @pattern = munge_name(value)
-                when /^\*(\.([a-zA-Z][-\w]*)){1,}$/: # *.domain.com
-                    @name = :domain
-                    @pattern = munge_name(value)
-                    @pattern.pop # take off the '*'
-                    @length = @pattern.length
-                else
-                    # Else, use the IPAddr class to determine if we've got a
-                    # valid IP address.
-                    if value =~ /\/(\d+)$/
-                        @length = Integer($1)
-                    end
-                    begin
-                        @pattern = IPAddr.new(value)
-                    rescue ArgumentError => detail
-                        raise AuthStoreError, "Invalid pattern %s" % value
-                    end
-                    @name = :ip
-                end
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/network/client.rb b/lib/puppet/network/client.rb
deleted file mode 100644
index 4788839..0000000
--- a/lib/puppet/network/client.rb
+++ /dev/null
@@ -1,192 +0,0 @@
-# the available clients
-
-require 'puppet'
-require 'puppet/daemon'
-require 'puppet/network/xmlrpc/client'
-require 'puppet/util/subclass_loader'
-require 'puppet/util/methodhelper'
-require 'puppet/sslcertificates/support'
-
-require 'puppet/network/handler'
-
-require 'net/http'
-
-# Some versions of ruby don't have this method defined, which basically causes
-# us to never use ssl.  Yay.
-class Net::HTTP
-    def use_ssl?
-        if defined? @use_ssl
-            @use_ssl
-        else
-            false
-        end
-    end
-
-    # JJM: This is a "backport" of sorts to older ruby versions which
-    # do not have this accessor.  See #896 for more information.
-    unless Net::HTTP.instance_methods.include? "enable_post_connection_check"
-        attr_accessor :enable_post_connection_check
-    end
-end
-
-# The base class for all of the clients.  Many clients just directly
-# call methods, but some of them need to do some extra work or
-# provide a different interface.
-class Puppet::Network::Client
-    Client = self
-    include Puppet::Daemon
-    include Puppet::Util
-    extend Puppet::Util::SubclassLoader
-    include Puppet::Util::MethodHelper
-
-    # This handles reading in the key and such-like.
-    include Puppet::SSLCertificates::Support
-
-    attr_accessor :schedule, :lastrun, :local, :stopping
-
-    attr_reader :driver
-
-    # Set up subclass loading
-    handle_subclasses :client, "puppet/network/client"
-
-    # Determine what clients look for when being passed an object for local
-    # client/server stuff.  E.g., you could call Client::CA.new(:CA => ca).
-    def self.drivername
-        unless defined? @drivername
-            @drivername = self.name
-        end
-        @drivername
-    end
-
-    # Figure out the handler for our client.
-    def self.handler
-        unless defined? @handler
-            @handler = Puppet::Network::Handler.handler(self.name)
-        end
-        @handler
-    end
-
-    # The class that handles xmlrpc interaction for us.
-    def self.xmlrpc_client
-        unless defined? @xmlrpc_client
-            @xmlrpc_client = Puppet::Network::XMLRPCClient.handler_class(self.handler)
-        end
-        @xmlrpc_client
-    end
-
-    # Create our client.
-    def initialize(hash)
-        # to whom do we connect?
-        @server = nil
-
-        if hash.include?(:Cache)
-            @cache = hash[:Cache]
-        else
-            @cache = true
-        end
-
-        driverparam = self.class.drivername
-        if hash.include?(:Server)
-            args = {:Server => hash[:Server]}
-            @server = hash[:Server]
-            args[:Port] = hash[:Port] || Puppet[:masterport]
-
-            @driver = self.class.xmlrpc_client.new(args)
-
-            self.read_cert
-
-            # We have to start the HTTP connection manually before we start
-            # sending it requests or keep-alive won't work.  Note that with #1010,
-            # we don't currently actually want keep-alive.
-            @driver.start if @driver.respond_to? :start and Puppet::Network::HttpPool.keep_alive?
-
-            @local = false
-        elsif hash.include?(driverparam)
-            @driver = hash[driverparam]
-            if @driver == true
-                @driver = self.class.handler.new
-            end
-            @local = true
-        else
-            raise Puppet::Network::ClientError, "%s must be passed a Server or %s" % [self.class, driverparam]
-        end
-    end
-
-    # Are we a local client?
-    def local?
-        if defined? @local and @local
-            true
-        else
-            false
-        end
-    end
-
-    # Make sure we set the driver up when we read the cert in.
-    def recycle_connection
-        @driver.recycle_connection if @driver.respond_to?(:recycle_connection)
-    end
-
-    # A wrapper method to run and then store the last run time
-    def runnow
-        if self.stopping
-            Puppet.notice "In shutdown progress; skipping run"
-            return
-        end
-        begin
-            self.run
-            self.lastrun = Time.now.to_i
-        rescue => detail
-            puts detail.backtrace if Puppet[:trace]
-            Puppet.err "Could not run %s: %s" % [self.class, detail]
-        end
-    end
-
-    def run
-        raise Puppet::DevError, "Client type %s did not override run" %
-            self.class
-    end
-
-    def scheduled?
-        if sched = self.schedule
-            return sched.match?(self.lastrun)
-        else
-            return true
-        end
-    end
-
-    def shutdown
-        if self.stopping
-            Puppet.notice "Already in shutdown"
-        else
-            self.stopping = true
-            if self.respond_to? :running? and self.running?
-                Puppet::Util::Storage.store
-            end
-            rmpidfile()
-        end
-    end
-
-    # Start listening for events.  We're pretty much just listening for
-    # timer events here.
-    def start
-        # Create our timer.  Puppet will handle observing it and such.
-        timer = Puppet.newtimer(
-            :interval => Puppet[:runinterval],
-            :tolerance => 1,
-            :start? => true
-        ) do
-            begin
-                self.runnow if self.scheduled?
-            rescue => detail
-                puts detail.backtrace if Puppet[:trace]
-                Puppet.err "Could not run client; got otherwise uncaught exception: %s" % detail
-            end
-        end
-
-        # Run once before we start following the timer
-        self.runnow
-    end
-
-    require 'puppet/network/client/proxy'
-end
-
diff --git a/lib/puppet/network/client/ca.rb b/lib/puppet/network/client/ca.rb
deleted file mode 100644
index a2704e4..0000000
--- a/lib/puppet/network/client/ca.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-require 'puppet/network/client'
-
-# Request a certificate from the remote system.
-class Puppet::Network::Client::CA < Puppet::Network::Client
-    class InvalidCertificate < Puppet::Error; end
-
-    def initialize(options = {})
-        options = symbolize_options(options)
-        unless options.include?(:Server) or options.include?(:CA)
-            options[:Server] = Puppet[:ca_server]
-            options[:Port] = Puppet[:ca_port]
-        end
-        super(options)
-    end
-
-    # This client is really only able to request certificates for the
-    # current host.  It uses the Puppet.settings settings to figure everything out.
-    def request_cert
-        Puppet.settings.use(:main, :ssl)
-
-        if cert = read_cert
-            return cert
-        end
-
-        begin
-            cert, cacert = @driver.getcert(csr.to_pem)
-        rescue => detail
-            if Puppet[:trace]
-                puts detail.backtrace
-            end
-            raise Puppet::Error.new("Certificate retrieval failed: %s" % detail)
-        end
-
-        if cert.nil? or cert == ""
-            return nil
-        end
-
-        begin
-            @cert = OpenSSL::X509::Certificate.new(cert)
-            @cacert = OpenSSL::X509::Certificate.new(cacert)
-        rescue => detail
-            raise InvalidCertificate.new(
-                "Invalid certificate: %s" % detail
-            )
-        end
-
-        unless @cert.check_private_key(key)
-            raise InvalidCertificate, "Certificate does not match private key.  Try 'puppetca --clean %s' on the server." % Facter.value(:fqdn)
-        end
-
-        # Only write the cert out if it passes validating.
-        Puppet.settings.write(:hostcert) do |f| f.print cert end
-        Puppet.settings.write(:localcacert) do |f| f.print cacert end
-
-        return @cert
-    end
-end
-
diff --git a/lib/puppet/network/client/dipper.rb b/lib/puppet/network/client/dipper.rb
deleted file mode 100644
index 0ec7087..0000000
--- a/lib/puppet/network/client/dipper.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-# The client class for filebuckets.
-class Puppet::Network::Client::Dipper < Puppet::Network::Client
-    @handler = Puppet::Network::Handler.handler(:filebucket)
-    @drivername = :Bucket
-    
-    attr_accessor :name
-
-    # Create our bucket client
-    def initialize(hash = {})
-        if hash.include?(:Path)
-            bucket = self.class.handler.new(:Path => hash[:Path])
-            hash.delete(:Path)
-            hash[:Bucket] = bucket
-        end
-
-        super(hash)
-    end
-
-    # Back up a file to our bucket
-    def backup(file)
-        unless FileTest.exists?(file)
-            raise(ArgumentError, "File %s does not exist" % file)
-        end
-        contents = ::File.read(file)
-        unless local?
-            contents = Base64.encode64(contents)
-        end
-        return @driver.addfile(contents,file)
-    end
-
-    # Retrieve a file by sum.
-    def getfile(sum)
-        if newcontents = @driver.getfile(sum)
-            unless local?
-                newcontents = Base64.decode64(newcontents)
-            end
-            return newcontents
-        end
-        return nil
-    end
-
-    # Restore the file
-    def restore(file,sum)
-        restore = true
-        if FileTest.exists?(file)
-            cursum = Digest::MD5.hexdigest(::File.read(file))
-
-            # if the checksum has changed...
-            # this might be extra effort
-            if cursum == sum
-                restore = false
-            end
-        end
-
-        if restore
-            if newcontents = getfile(sum)
-                tmp = ""
-                newsum = Digest::MD5.hexdigest(newcontents)
-                changed = nil
-                if FileTest.exists?(file) and ! FileTest.writable?(file)
-                    changed = ::File.stat(file).mode
-                    ::File.chmod(changed | 0200, file)
-                end
-                ::File.open(file, ::File::WRONLY|::File::TRUNC|::File::CREAT) { |of|
-                    of.print(newcontents)
-                }
-                if changed
-                    ::File.chmod(changed, file)
-                end
-            else
-                Puppet.err "Could not find file with checksum %s" % sum
-                return nil
-            end
-            return newsum
-        else
-            return nil
-        end
-    end
-end
-
diff --git a/lib/puppet/network/client/file.rb b/lib/puppet/network/client/file.rb
deleted file mode 100644
index 6dd2ada..0000000
--- a/lib/puppet/network/client/file.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-class Puppet::Network::Client::File < Puppet::Network::Client::ProxyClient
-    @handler = Puppet::Network::Handler.handler(:fileserver)
-    @drivername = :FileServer
-    self.mkmethods
-end
-
diff --git a/lib/puppet/network/client/master.rb b/lib/puppet/network/client/master.rb
deleted file mode 100644
index 5e9422b..0000000
--- a/lib/puppet/network/client/master.rb
+++ /dev/null
@@ -1,524 +0,0 @@
-# The client for interacting with the puppetmaster config server.
-require 'sync'
-require 'timeout'
-require 'puppet/network/http_pool'
-
-class Puppet::Network::Client::Master < Puppet::Network::Client
-    unless defined? @@sync
-        @@sync = Sync.new
-    end
-
-    attr_accessor :catalog
-    attr_reader :compile_time
-
-    class << self
-        # Puppetd should only have one instance running, and we need a way
-        # to retrieve it.
-        attr_accessor :instance
-        include Puppet::Util
-    end
-
-    def self.facts
-        # Retrieve the facts from the central server.
-        if Puppet[:factsync]
-            self.getfacts()
-        end
-        
-        down = Puppet[:downcasefacts]
-
-        Facter.clear
-
-        # Reload everything.
-        if Facter.respond_to? :loadfacts
-            Facter.loadfacts
-        elsif Facter.respond_to? :load
-            Facter.load
-        else
-            Puppet.warning "You should upgrade your version of Facter to at least 1.3.8"
-        end
-
-        # This loads all existing facts and any new ones.  We have to remove and
-        # reload because there's no way to unload specific facts.
-        loadfacts()
-        facts = Facter.to_hash.inject({}) do |newhash, array|
-            name, fact = array
-            if down
-                newhash[name] = fact.to_s.downcase
-            else
-                newhash[name] = fact.to_s
-            end
-            newhash
-        end
-
-        # Add our client version to the list of facts, so people can use it
-        # in their manifests
-        facts["clientversion"] = Puppet.version.to_s
-
-        # And add our environment as a fact.
-        unless facts.include?("environment")
-            facts["environment"] = Puppet[:environment]
-        end
- 
-        facts
-    end
-
-    # Return the list of dynamic facts as an array of symbols
-    # NOTE:LAK(2008/04/10): This code is currently unused, since we now always
-    # recompile.
-    def self.dynamic_facts
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = Puppet.settings[:dynamicfacts].split(/\s*,\s*/).collect { |fact| fact.downcase }
-    end
-
-    # Cache the config
-    def cache(text)
-        Puppet.info "Caching catalog at %s" % self.cachefile
-        confdir = ::File.dirname(Puppet[:localconfig])
-        ::File.open(self.cachefile + ".tmp", "w", 0660) { |f|
-            f.print text
-        }
-        ::File.rename(self.cachefile + ".tmp", self.cachefile)
-    end
-
-    def cachefile
-        unless defined? @cachefile
-            @cachefile = Puppet[:localconfig] + ".yaml"
-        end
-        @cachefile
-    end
-
-    def clear
-        @catalog.clear(true) if @catalog
-        Puppet::Type.allclear
-        @catalog = nil
-    end
-
-    # Initialize and load storage
-    def dostorage
-        begin
-            Puppet::Util::Storage.load
-            @compile_time ||= Puppet::Util::Storage.cache(:configuration)[:compile_time]
-        rescue => detail
-            if Puppet[:trace]
-                puts detail.backtrace
-            end
-            Puppet.err "Corrupt state file %s: %s" % [Puppet[:statefile], detail]
-            begin
-                ::File.unlink(Puppet[:statefile])
-                retry
-            rescue => detail
-                raise Puppet::Error.new("Cannot remove %s: %s" %
-                    [Puppet[:statefile], detail])
-            end
-        end
-    end
-
-    # Let the daemon run again, freely in the filesystem.  Frolick, little
-    # daemon!
-    def enable
-        lockfile.unlock(:anonymous => true)
-    end
-
-    # Stop the daemon from making any catalog runs.
-    def disable
-        lockfile.lock(:anonymous => true)
-    end
-
-    # Retrieve the config from a remote server.  If this fails, then
-    # use the cached copy.
-    def getconfig
-        dostorage()
-
-        # Retrieve the plugins.
-        getplugins() if Puppet[:pluginsync]
-
-        facts = nil
-        Puppet::Util.benchmark(:debug, "Retrieved facts") do
-            facts = self.class.facts
-        end
-
-        raise Puppet::Network::ClientError.new("Could not retrieve any facts") unless facts.length > 0
-
-        Puppet.debug("Retrieving catalog")
-
-        # If we can't retrieve the catalog, just return, which will either
-        # fail, or use the in-memory catalog.
-        unless marshalled_objects = get_actual_config(facts)
-            use_cached_config(true)
-            return
-        end
-
-        begin
-            case Puppet[:catalog_format]
-            when "marshal": objects = Marshal.load(marshalled_objects)
-            when "yaml": objects = YAML.load(marshalled_objects)
-            else
-                raise "Invalid catalog format '%s'" % Puppet[:catalog_format]
-            end
-        rescue => detail
-            msg = "Configuration could not be translated from %s" % Puppet[:catalog_format]
-            msg += "; using cached catalog" if use_cached_config(true)
-            Puppet.warning msg
-            return
-        end
-
-        self.setclasses(objects.classes)
-
-        # Clear all existing objects, so we can recreate our stack.
-        clear() if self.catalog
-
-        # Now convert the objects to a puppet catalog graph.
-        begin
-            @catalog = objects.to_catalog
-        rescue => detail
-            clear()
-            puts detail.backtrace if Puppet[:trace]
-            msg = "Configuration could not be instantiated: %s" % detail
-            msg += "; using cached catalog" if use_cached_config(true)
-            Puppet.warning msg
-            return
-        end
-
-        if ! @catalog.from_cache
-            self.cache(marshalled_objects)
-        end
-
-        # Keep the state database up to date.
-        @catalog.host_config = true
-    end
-    
-    # A simple proxy method, so it's easy to test.
-    def getplugins
-        self.class.getplugins
-    end
-    
-    # Just so we can specify that we are "the" instance.
-    def initialize(*args)
-        Puppet.settings.use(:main, :ssl, :puppetd)
-        super
-
-        self.class.instance = self
-        @running = false
-        @splayed = false
-    end
-
-    # Mark that we should restart.  The Puppet module checks whether we're running,
-    # so this only gets called if we're in the middle of a run.
-    def restart
-        # If we're currently running, then just mark for later
-        Puppet.notice "Received signal to restart; waiting until run is complete"
-        @restart = true
-    end
-
-    # Should we restart?
-    def restart?
-        if defined? @restart
-            @restart
-        else
-            false
-        end
-    end
-
-    # Retrieve the cached config
-    def retrievecache
-        if FileTest.exists?(self.cachefile)
-            return ::File.read(self.cachefile)
-        else
-            return nil
-        end
-    end
-
-    # The code that actually runs the catalog.  
-    # This just passes any options on to the catalog,
-    # which accepts :tags and :ignoreschedules.
-    def run(options = {})
-        got_lock = false
-        splay
-        Puppet::Util.sync(:puppetrun).synchronize(Sync::EX) do
-            if !lockfile.lock
-                Puppet.notice "Lock file %s exists; skipping catalog run" %
-                    lockfile.lockfile
-            else
-                got_lock = true
-                begin
-                    duration = thinmark do
-                        self.getconfig
-                    end
-                rescue => detail
-                    puts detail.backtrace if Puppet[:trace]
-                    Puppet.err "Could not retrieve catalog: %s" % detail
-                end
-
-                if self.catalog
-                    @catalog.retrieval_duration = duration
-                    Puppet.notice "Starting catalog run" unless @local
-                    benchmark(:notice, "Finished catalog run") do
-                        @catalog.apply(options)
-                    end
-                end
-
-                # Now close all of our existing http connections, since there's no
-                # reason to leave them lying open.
-                Puppet::Network::HttpPool.clear_http_instances
-            end
-            
-            lockfile.unlock
-
-            # Did we get HUPped during the run?  If so, then restart now that we're
-            # done with the run.
-            if self.restart?
-                Process.kill(:HUP, $$)
-            end
-        end
-    ensure
-        # Just make sure we remove the lock file if we set it.
-        lockfile.unlock if got_lock and lockfile.locked?
-        clear()
-    end
-
-    def running?
-        lockfile.locked?
-    end
-
-    # Store the classes in the classfile, but only if we're not local.
-    def setclasses(ary)
-        if @local
-            return
-        end
-        unless ary and ary.length > 0
-            Puppet.info "No classes to store"
-            return
-        end
-        begin
-            ::File.open(Puppet[:classfile], "w") { |f|
-                f.puts ary.join("\n")
-            }
-        rescue => detail
-            Puppet.err "Could not create class file %s: %s" %
-                [Puppet[:classfile], detail]
-        end
-    end
-
-    private
-
-    # Download files from the remote server, returning a list of all
-    # changed files.
-    def self.download(args)
-        hash = {
-            :path => args[:dest],
-            :recurse => true,
-            :source => args[:source],
-            :tag => "#{args[:name]}s",
-            :owner => Process.uid,
-            :group => Process.gid,
-            :purge => true,
-            :force => true,
-            :backup => false,
-            :noop => false
-        }
-
-        if args[:ignore]
-            hash[:ignore] = args[:ignore].split(/\s+/)
-        end
-        downconfig = Puppet::Node::Catalog.new("downloading")
-        downconfig.add_resource Puppet::Type.type(:file).create(hash)
-        
-        Puppet.info "Retrieving #{args[:name]}s"
-
-        files = []
-        begin
-            Timeout::timeout(self.timeout) do
-                downconfig.apply do |trans|
-                    trans.changed?.find_all do |resource|
-                        yield resource if block_given?
-                        files << resource[:path]
-                    end
-                end
-            end
-        rescue Puppet::Error, Timeout::Error => detail
-            if Puppet[:debug]
-                puts detail.backtrace
-            end
-            Puppet.err "Could not retrieve %ss: %s" % [args[:name], detail]
-        end
-
-        # Now clean up after ourselves
-        downconfig.clear
-
-        return files
-    end
-
-    # Retrieve facts from the central server.
-    def self.getfacts
-        # Download the new facts
-        path = Puppet[:factpath].split(":")
-        files = []
-        download(:dest => Puppet[:factdest], :source => Puppet[:factsource],
-            :ignore => Puppet[:factsignore], :name => "fact") do |resource|
-
-            next unless path.include?(::File.dirname(resource[:path]))
-
-            files << resource[:path]
-        end
-    end
-
-    # Retrieve the plugins from the central server.  We only have to load the
-    # changed plugins, because Puppet::Type loads plugins on demand.
-    def self.getplugins
-        download(:dest => Puppet[:plugindest], :source => Puppet[:pluginsource],
-            :ignore => Puppet[:pluginsignore], :name => "plugin") do |resource|
-
-            next if FileTest.directory?(resource[:path])
-            path = resource[:path].sub(Puppet[:plugindest], '').sub(/^\/+/, '')
-            unless Puppet::Util::Autoload.loaded?(path)
-                next
-            end
-
-            begin
-                Puppet.info "Reloading downloaded file %s" % path
-                load resource[:path]
-            rescue => detail
-                Puppet.warning "Could not reload downloaded file %s: %s" %
-                    [resource[:path], detail]
-            end
-        end
-    end
-
-    def self.loaddir(dir, type)
-        return unless FileTest.directory?(dir)
-
-        Dir.entries(dir).find_all { |e| e =~ /\.rb$/ }.each do |file|
-            fqfile = ::File.join(dir, file)
-            begin
-                Puppet.info "Loading %s %s" % 
-                    [type, ::File.basename(file.sub(".rb",''))]
-                Timeout::timeout(self.timeout) do
-                    load fqfile
-                end
-            rescue => detail
-                Puppet.warning "Could not load %s %s: %s" % [type, fqfile, detail]
-            end
-        end
-    end
-
-    def self.loadfacts
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = Puppet[:factpath].split(":").each do |dir|
-            loaddir(dir, "fact")
-        end
-    end
-    
-    def self.timeout
-        timeout = Puppet[:configtimeout]
-        case timeout
-        when String:
-            if timeout =~ /^\d+$/
-                timeout = Integer(timeout)
-            else
-                raise ArgumentError, "Configuration timeout must be an integer"
-            end
-        when Integer: # nothing
-        else
-            raise ArgumentError, "Configuration timeout must be an integer"
-        end
-
-        return timeout
-    end
-
-    loadfacts()
-
-    # Actually retrieve the catalog, either from the server or from a
-    # local master.
-    def get_actual_config(facts)
-        begin
-            Timeout::timeout(self.class.timeout) do
-                return get_remote_config(facts)
-            end
-        rescue Timeout::Error
-            Puppet.err "Configuration retrieval timed out"
-            return nil
-        end
-    end
-    
-    # Retrieve a config from a remote master.
-    def get_remote_config(facts)
-        textobjects = ""
-
-        textfacts = CGI.escape(YAML.dump(facts))
-
-        benchmark(:debug, "Retrieved catalog") do
-            # error handling for this is done in the network client
-            begin
-                textobjects = @driver.getconfig(textfacts, Puppet[:catalog_format])
-                begin
-                    textobjects = CGI.unescape(textobjects)
-                rescue => detail
-                    raise Puppet::Error, "Could not CGI.unescape catalog"
-                end
-
-            rescue => detail
-                Puppet.err "Could not retrieve catalog: %s" % detail
-                return nil
-            end
-        end
-
-        return nil if textobjects == ""
-
-        @compile_time = Time.now
-        Puppet::Util::Storage.cache(:configuration)[:facts] = facts
-        Puppet::Util::Storage.cache(:configuration)[:compile_time] = @compile_time
-
-        return textobjects
-    end
-
-    def lockfile
-        unless defined?(@lockfile)
-            @lockfile = Puppet::Util::Pidlock.new(Puppet[:puppetdlockfile])
-        end
-
-        @lockfile
-    end
-
-    def splayed?
-        @splayed
-    end
-
-    # Sleep when splay is enabled; else just return.
-    def splay
-        return unless Puppet[:splay]
-        return if splayed?
-
-        time = rand(Integer(Puppet[:splaylimit]))
-        Puppet.info "Sleeping for %s seconds (splay is enabled)" % time
-        sleep(time)
-        @splayed = true
-    end
-
-    private
-
-    # Use our cached config, optionally specifying whether this is
-    # necessary because of a failure.
-    def use_cached_config(because_of_failure = false)
-        return true if self.catalog
-
-        if because_of_failure and ! Puppet[:usecacheonfailure]
-            @catalog = nil
-            Puppet.warning "Not using cache on failed catalog"
-            return false
-        end
-
-        return false unless oldtext = self.retrievecache
-
-        begin
-            @catalog = YAML.load(oldtext).to_catalog
-            @catalog.from_cache = true
-            @catalog.host_config = true
-        rescue => detail
-            puts detail.backtrace if Puppet[:trace]
-            Puppet.warning "Could not load cached catalog: %s" % detail
-            clear
-            return false
-        end
-        return true
-    end
-end
diff --git a/lib/puppet/network/client/proxy.rb b/lib/puppet/network/client/proxy.rb
deleted file mode 100644
index 17b1b0e..0000000
--- a/lib/puppet/network/client/proxy.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# unlike the other client classes (again, this design sucks) this class
-# is basically just a proxy class -- it calls its methods on the driver
-# and that's about it
-class Puppet::Network::Client::ProxyClient < Puppet::Network::Client
-    def self.mkmethods
-        interface = self.handler.interface
-        namespace = interface.prefix
-
-
-        interface.methods.each { |ary|
-            method = ary[0]
-            Puppet.debug "%s: defining %s.%s" % [self, namespace, method]
-            define_method(method) { |*args|
-                begin
-                    @driver.send(method, *args)
-                rescue XMLRPC::FaultException => detail
-                    #Puppet.err "Could not call %s.%s: %s" %
-                    #    [namespace, method, detail.faultString]
-                    #raise NetworkClientError,
-                    #    "XMLRPC Error: %s" % detail.faultString
-                    raise NetworkClientError, detail.faultString
-                end
-            }
-        }
-    end
-end
-
diff --git a/lib/puppet/network/client/report.rb b/lib/puppet/network/client/report.rb
deleted file mode 100644
index 9bd61de..0000000
--- a/lib/puppet/network/client/report.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-class Puppet::Network::Client::Report < Puppet::Network::Client
-    @handler = Puppet::Network::Handler.handler(:report)
-
-    def initialize(hash = {})
-        if hash.include?(:Report)
-            hash[:Report] = self.class.handler.new
-        end
-
-        super(hash)
-    end
-
-    # Send our report.  We get the transaction report and convert it to YAML
-    # as appropriate.
-    def report(transreport)
-        report = YAML.dump(transreport)
-
-        unless self.local
-            report = CGI.escape(report)
-        end
-
-        # Now send the report
-        file = nil
-        benchmark(:info, "Sent transaction report") do
-            file = @driver.report(report)
-        end
-
-        file
-    end
-end
-
diff --git a/lib/puppet/network/client/resource.rb b/lib/puppet/network/client/resource.rb
deleted file mode 100644
index bc4a8e5..0000000
--- a/lib/puppet/network/client/resource.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# The client for interacting with remote Puppet agents to query and modify
-# remote system state.
-class Puppet::Network::Client::Resource < Puppet::Network::Client
-    def apply(bucket)
-        case bucket
-        when Puppet::TransObject
-            tmp = Puppet::TransBucket.new
-            tmp.push bucket
-            bucket = tmp
-            bucket.name = Facter["hostname"].value
-            bucket.type = "resource"
-        when Puppet::TransBucket
-            # nothing
-        else
-            raise Puppet::DevError, "You must pass a transportable object, not a %s" %
-                bucket.class
-        end
-
-        unless @local
-            bucket = Base64.encode64(YAML::dump(bucket))
-        end
-        report = @driver.apply(bucket, "yaml")
-
-        return report
-    end
-
-    def describe(type, name, retrieve = false, ignore = false)
-        Puppet.info "Describing %s[%s]" % [type.to_s.capitalize, name]
-        text = @driver.describe(type, name, retrieve, ignore, "yaml")
-
-        object = nil
-        if @local
-            object = text
-        else
-            object = YAML::load(Base64.decode64(text))
-        end
-
-        return object
-    end
-
-    def list(type, ignore = false, base = false)
-        bucket = @driver.list(type, ignore, base, "yaml")
-
-        unless @local
-            bucket = YAML::load(Base64.decode64(bucket))
-        end
-
-        return bucket
-    end
-end
-
diff --git a/lib/puppet/network/client/runner.rb b/lib/puppet/network/client/runner.rb
deleted file mode 100644
index 5806dd3..0000000
--- a/lib/puppet/network/client/runner.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class Puppet::Network::Client::Runner < Puppet::Network::Client::ProxyClient
-    self.mkmethods
-
-    def initialize(hash = {})
-        if hash.include?(:Runner)
-            hash[:Runner] = self.class.handler.new()
-        end
-
-        super(hash)
-    end
-end
-
diff --git a/lib/puppet/network/client/status.rb b/lib/puppet/network/client/status.rb
deleted file mode 100644
index 9dc22b6..0000000
--- a/lib/puppet/network/client/status.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-class Puppet::Network::Client::Status < Puppet::Network::Client::ProxyClient
-    self.mkmethods
-end
-
diff --git a/lib/puppet/network/client_request.rb b/lib/puppet/network/client_request.rb
deleted file mode 100644
index 86dd31b..0000000
--- a/lib/puppet/network/client_request.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-module Puppet::Network # :nodoc:
-    # A struct-like class for passing around a client request.  It's mostly
-    # just used for validation and authorization.
-    class ClientRequest
-        attr_accessor :name, :ip, :authenticated, :handler, :method
-
-        def authenticated?
-            self.authenticated
-        end
-
-        # A common way of talking about the full call.  Individual servers
-        # are responsible for setting the values correctly, but this common
-        # format makes it possible to check rights.
-        def call
-            unless handler and method
-                raise ArgumentError, "Request is not set up; cannot build call"
-            end
-
-            [handler, method].join(".")
-        end
-
-        def initialize(name, ip, authenticated)
-            @name, @ip, @authenticated = name, ip, authenticated
-        end
-
-        def to_s
-            "%s(%s)" % [self.name, self.ip]
-        end
-    end
-end
-
diff --git a/lib/puppet/network/handler.rb b/lib/puppet/network/handler.rb
deleted file mode 100644
index f6a6586..0000000
--- a/lib/puppet/network/handler.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require 'puppet/util/docs'
-require 'puppet/util/subclass_loader'
-
-module Puppet::Network
-    # The base class for the different handlers.  The handlers are each responsible
-    # for separate xmlrpc namespaces.
-    class Handler
-        extend Puppet::Util::Docs
-
-        # This is so that the handlers can subclass just 'Handler', rather
-        # then having to specify the full class path.
-        Handler = self
-        attr_accessor :server, :local
-
-        extend Puppet::Util::SubclassLoader
-        extend Puppet::Util
-
-        handle_subclasses :handler, "puppet/network/handler"
-
-        # Return the xmlrpc interface.
-        def self.interface
-            if defined? @interface
-                return @interface
-            else
-                raise Puppet::DevError, "Handler %s has no defined interface" %
-                    self
-            end
-        end
-
-        # Set/Determine whether we're a client- or server-side handler.
-        def self.side(side = nil)
-            if side
-                side = side.intern if side.is_a?(String)
-                unless [:client, :server].include?(side)
-                    raise ArgumentError, "Invalid side registration '%s' for %s" % [side, self.name]
-                end
-                @side = side
-            else
-                @side ||= :server
-                return @side
-            end
-        end
-
-        # Create an empty init method with the same signature.
-        def initialize(hash = {})
-        end
-
-        def local?
-            self.local
-        end
-    end
-end
-
diff --git a/lib/puppet/network/handler/ca.rb b/lib/puppet/network/handler/ca.rb
deleted file mode 100644
index de7a976..0000000
--- a/lib/puppet/network/handler/ca.rb
+++ /dev/null
@@ -1,157 +0,0 @@
-require 'openssl'
-require 'puppet'
-require 'puppet/sslcertificates'
-require 'xmlrpc/server'
-
-# Much of this was taken from QuickCert:
-#   http://segment7.net/projects/ruby/QuickCert/
-
-class Puppet::Network::Handler
-    class CA < Handler
-        attr_reader :ca
-
-        desc "Provides an interface for signing CSRs.  Accepts a CSR and returns
-        the CA certificate and the signed certificate, or returns nil if
-        the cert is not signed."
-
-        @interface = XMLRPC::Service::Interface.new("puppetca") { |iface|
-            iface.add_method("array getcert(csr)")
-        }
-
-        def autosign
-            if defined? @autosign
-                @autosign
-            else
-                Puppet[:autosign]
-            end
-        end
-
-        # FIXME autosign? should probably accept both hostnames and IP addresses
-        def autosign?(hostname)
-            # simple values are easy
-            if autosign == true or autosign == false
-                return autosign
-            end
-
-            # we only otherwise know how to handle files
-            unless autosign =~ /^\//
-                raise Puppet::Error, "Invalid autosign value %s" %
-                    autosign.inspect
-            end
-
-            unless FileTest.exists?(autosign)
-                unless defined? @@warnedonautosign
-                    @@warnedonautosign = true
-                    Puppet.info "Autosign is enabled but %s is missing" % autosign
-                end
-                return false
-            end
-            auth = Puppet::Network::AuthStore.new
-            File.open(autosign) { |f|
-                f.each { |line|
-                    next if line =~ /^\s*#/
-                    next if line =~ /^\s*$/
-                    auth.allow(line.chomp)
-                }
-            }
-
-            # for now, just cheat and pass a fake IP address to allowed?
-            return auth.allowed?(hostname, "127.1.1.1")
-        end
-
-        def initialize(hash = {})
-            Puppet.settings.use(:main, :ssl, :ca)
-            if hash.include? :autosign
-                @autosign = hash[:autosign]
-            end
-
-            @ca = Puppet::SSLCertificates::CA.new(hash)
-        end
-
-        # our client sends us a csr, and we either store it for later signing,
-        # or we sign it right away
-        def getcert(csrtext, client = nil, clientip = nil)
-            csr = OpenSSL::X509::Request.new(csrtext)
-
-            # Use the hostname from the CSR, not from the network.
-            subject = csr.subject
-
-            nameary = subject.to_a.find { |ary|
-                ary[0] == "CN"
-            }
-
-            if nameary.nil?
-                Puppet.err(
-                    "Invalid certificate request: could not retrieve server name"
-                )
-                return "invalid"
-            end
-
-            hostname = nameary[1]
-
-            unless @ca
-                Puppet.notice "Host %s asked for signing from non-CA master" % hostname
-                return ""
-            end
-
-            # We used to save the public key, but it's basically unnecessary
-            # and it mucks with the permissions requirements.
-            # save_pk(hostname, csr.public_key)
-
-            certfile = File.join(Puppet[:certdir], [hostname, "pem"].join("."))
-
-            # first check to see if we already have a signed cert for the host
-            cert, cacert = ca.getclientcert(hostname)
-            if cert and cacert
-                Puppet.info "Retrieving existing certificate for %s" % hostname
-                unless csr.public_key.to_s == cert.public_key.to_s
-                    raise Puppet::Error, "Certificate request does not match existing certificate; run 'puppetca --clean %s'." % hostname
-                end
-                return [cert.to_pem, cacert.to_pem]
-            elsif @ca
-                if self.autosign?(hostname) or client.nil?
-                    if client.nil?
-                        Puppet.info "Signing certificate for CA server"
-                    end
-                    # okay, we don't have a signed cert
-                    # if we're a CA and autosign is turned on, then go ahead and sign
-                    # the csr and return the results
-                    Puppet.info "Signing certificate for %s" % hostname
-                    cert, cacert = @ca.sign(csr)
-                    #Puppet.info "Cert: %s; Cacert: %s" % [cert.class, cacert.class]
-                    return [cert.to_pem, cacert.to_pem]
-                else # just write out the csr for later signing
-                    if @ca.getclientcsr(hostname)
-                        Puppet.info "Not replacing existing request from %s" % hostname
-                    else
-                        Puppet.notice "Host %s has a waiting certificate request" %
-                            hostname
-                        @ca.storeclientcsr(csr)
-                    end
-                    return ["", ""]
-                end
-            else
-                raise "huh?"
-            end
-        end
-
-        private
-
-        # Save the public key.
-        def save_pk(hostname, public_key)
-            pkeyfile = File.join(Puppet[:publickeydir], [hostname, "pem"].join('.'))
-
-            if FileTest.exists?(pkeyfile)
-                currentkey = File.open(pkeyfile) { |k| k.read }
-                unless currentkey == public_key.to_s
-                    raise Puppet::Error, "public keys for %s differ" % hostname
-                end
-            else
-                File.open(pkeyfile, "w", 0644) { |f|
-                    f.print public_key.to_s
-                }
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/network/handler/filebucket.rb b/lib/puppet/network/handler/filebucket.rb
deleted file mode 100755
index 38ef7f3..0000000
--- a/lib/puppet/network/handler/filebucket.rb
+++ /dev/null
@@ -1,182 +0,0 @@
-require 'fileutils'
-require 'digest/md5'
-require 'puppet/external/base64'
-
-class Puppet::Network::Handler # :nodoc:
-    class BucketError < RuntimeError; end
-    # Accept files and store them by md5 sum, returning the md5 sum back
-    # to the client.  Alternatively, accept an md5 sum and return the
-    # associated content.
-    class FileBucket < Handler
-        desc "The interface to Puppet's FileBucket system.  Can be used to store
-        files in and retrieve files from a filebucket."
-
-        @interface = XMLRPC::Service::Interface.new("puppetbucket") { |iface|
-            iface.add_method("string addfile(string, string)")
-            iface.add_method("string getfile(string)")
-        }
-
-        Puppet::Util.logmethods(self, true)
-        attr_reader :name, :path
-
-        # this doesn't work for relative paths
-        def self.oldpaths(base,md5)
-            return [
-                File.join(base, md5),
-                File.join(base, md5, "contents"),
-                File.join(base, md5, "paths")
-            ]
-        end
-
-        # this doesn't work for relative paths
-        def self.paths(base,md5)
-            dir = File.join(md5[0..7].split(""))
-            basedir = File.join(base, dir, md5)
-            return [
-                basedir,
-                File.join(basedir, "contents"),
-                File.join(basedir, "paths")
-            ]
-        end
-
-        # Should we check each file as it comes in to make sure the md5
-        # sums match?  Defaults to false.
-        def conflict_check?
-            @confictchk
-        end
-
-        def initialize(hash)
-            if hash.include?(:ConflictCheck)
-                @conflictchk = hash[:ConflictCheck]
-                hash.delete(:ConflictCheck)
-            else
-                @conflictchk = false
-            end
-
-            if hash.include?(:Path)
-                @path = hash[:Path]
-                hash.delete(:Path)
-            else
-                if defined? Puppet
-                    @path = Puppet[:bucketdir]
-                else
-                    @path = File.expand_path("~/.filebucket")
-                end
-            end
-
-            Puppet.settings.use(:filebucket)
-
-            @name = "Filebucket[#{@path}]"
-        end
-
-        # Accept a file from a client and store it by md5 sum, returning
-        # the sum.
-        def addfile(contents, path, client = nil, clientip = nil)
-            if client
-                contents = Base64.decode64(contents)
-            end
-            md5 = Digest::MD5.hexdigest(contents)
-
-            bpath, bfile, pathpath = FileBucket.paths(@path,md5)
-
-            # If the file already exists, just return the md5 sum.
-            if FileTest.exists?(bfile)
-                # If verification is enabled, then make sure the text matches.
-                if conflict_check?
-                    verify(contents, md5, bfile)
-                end
-                return md5
-            end
-
-            # Make the directories if necessary.
-            unless FileTest.directory?(bpath)
-                Puppet::Util.withumask(0007) do
-                    FileUtils.mkdir_p(bpath)
-                end
-            end
-
-            # Write the file to disk.
-            msg = "Adding %s(%s)" % [path, md5]
-            msg += " from #{client}" if client
-            self.info msg
-
-            # ...then just create the file
-            Puppet::Util.withumask(0007) do
-                File.open(bfile, File::WRONLY|File::CREAT, 0440) { |of|
-                    of.print contents
-                }
-            end
-
-            # Write the path to the paths file.
-            add_path(path, pathpath)
-
-            return md5
-        end
-
-        # Return the contents associated with a given md5 sum.
-        def getfile(md5, client = nil, clientip = nil)
-            bpath, bfile, bpaths = FileBucket.paths(@path,md5)
-
-            unless FileTest.exists?(bfile)
-                # Try the old flat style.
-                bpath, bfile, bpaths = FileBucket.oldpaths(@path,md5)
-                unless FileTest.exists?(bfile)
-                    return false
-                end
-            end
-
-            contents = nil
-            File.open(bfile) { |of|
-                contents = of.read
-            }
-            
-            if client
-                return Base64.encode64(contents)
-            else
-                return contents
-            end
-        end
-
-        def paths(md5)
-            self.class(@path, md5)
-        end
-
-        def to_s
-            self.name
-        end
-
-        private
-
-        # Add our path to the paths file if necessary.
-        def add_path(path, file)
-            if FileTest.exists?(file)
-                File.open(file) { |of|
-                    return if of.readlines.collect { |l| l.chomp }.include?(path)
-                }
-            end
-
-            # if it's a new file, or if our path isn't in the file yet, add it
-            File.open(file, File::WRONLY|File::CREAT|File::APPEND) { |of|
-                of.puts path
-            }
-        end
-
-        # If conflict_check is enabled, verify that the passed text is
-        # the same as the text in our file.
-        def verify(content, md5, bfile)
-            curfile = File.read(bfile)
-
-            # If the contents don't match, then we've found a conflict.
-            # Unlikely, but quite bad.
-            if curfile != contents
-                raise(BucketError,
-                    "Got passed new contents for sum %s" % md5, caller)
-            else
-                msg = "Got duplicate %s(%s)" % [path, md5]
-                msg += " from #{client}" if client
-                self.info msg
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/network/handler/fileserver.rb b/lib/puppet/network/handler/fileserver.rb
deleted file mode 100755
index 815d0ba..0000000
--- a/lib/puppet/network/handler/fileserver.rb
+++ /dev/null
@@ -1,748 +0,0 @@
-require 'puppet'
-require 'puppet/network/authstore'
-require 'webrick/httpstatus'
-require 'cgi'
-require 'delegate'
-require 'sync'
-
-require 'puppet/file_serving'
-require 'puppet/file_serving/metadata'
-
-class Puppet::Network::Handler
-    AuthStoreError = Puppet::AuthStoreError
-    class FileServerError < Puppet::Error; end
-    class FileServer < Handler
-        desc "The interface to Puppet's fileserving abilities."
-
-        attr_accessor :local
-
-        CHECKPARAMS = [:mode, :type, :owner, :group, :checksum]
-
-        # Special filserver module for puppet's module system
-        MODULES = "modules"
-        PLUGINS = "plugins"
-
-        @interface = XMLRPC::Service::Interface.new("fileserver") { |iface|
-            iface.add_method("string describe(string, string)")
-            iface.add_method("string list(string, string, boolean, array)")
-            iface.add_method("string retrieve(string, string)")
-        }
-
-        def self.params
-            CHECKPARAMS.dup
-        end
-
-        # If the configuration file exists, then create (if necessary) a LoadedFile
-        # object to manage it; else, return nil.
-        def configuration
-            # Short-circuit the default case.
-            return @configuration if defined?(@configuration)
-
-            config_path = @passed_configuration_path || Puppet[:fileserverconfig]
-            return nil unless FileTest.exist?(config_path)
-
-            # The file exists but we don't have a LoadedFile instance for it.
-            @configuration = Puppet::Util::LoadedFile.new(config_path)
-        end
-
-        # Create our default mounts for modules and plugins.  This is duplicated code,
-        # but I'm not really worried about that.
-        def create_default_mounts
-            @mounts = {}
-            Puppet.debug "No file server configuration file; autocreating #{MODULES} mount with default permissions"
-            mount = Mount.new(MODULES)
-            mount.allow("*")
-            @mounts[MODULES] = mount
-            
-            Puppet.debug "No file server configuration file; autocreating #{PLUGINS} mount with default permissions"
-            mount = PluginMount.new(PLUGINS)
-            mount.allow("*")
-            @mounts[PLUGINS] = mount
-        end
-
-        # Describe a given file.  This returns all of the manageable aspects
-        # of that file.
-        def describe(url, links = :follow, client = nil, clientip = nil)
-            links = links.intern if links.is_a? String
-
-            mount, path = convert(url, client, clientip)
-
-            mount.debug("Describing %s for %s" % [url, client]) if client
-
-            # use the mount to resolve the path for us.
-            return "" unless full_path = mount.file_path(path, client)
-
-            metadata = Puppet::FileServing::Metadata.new(url, :path => full_path, :links => links)
-
-            return "" unless metadata.exist?
-
-            begin
-                metadata.collect_attributes
-            rescue => detail
-                puts detail.backtrace if Puppet[:trace]
-                Puppet.err detail
-                return ""
-            end
-
-            return metadata.attributes_with_tabs
-        end
-
-        # Create a new fileserving module.
-        def initialize(hash = {})
-            @mounts = {}
-            @files = {}
-
-            if hash[:Local]
-                @local = hash[:Local]
-            else
-                @local = false
-            end
-
-            if hash[:Config] == false
-                @noreadconfig = true
-            end
-
-            @passed_configuration_path = hash[:Config]
-
-            if hash.include?(:Mount)
-                @passedconfig = true
-                unless hash[:Mount].is_a?(Hash)
-                    raise Puppet::DevError, "Invalid mount hash %s" %
-                        hash[:Mount].inspect
-                end
-
-                hash[:Mount].each { |dir, name|
-                    if FileTest.exists?(dir)
-                        self.mount(dir, name)
-                    end
-                }
-                self.mount(nil, MODULES)
-                self.mount(nil, PLUGINS)
-            else
-                @passedconfig = false
-                if configuration
-                    readconfig(false) # don't check the file the first time.
-                else
-                    create_default_mounts()
-                end
-            end
-        end
-
-        # List a specific directory's contents.
-        def list(url, links = :ignore, recurse = false, ignore = false, client = nil, clientip = nil)
-            mount, path = convert(url, client, clientip)
-
-            mount.debug "Listing %s for %s" % [url, client] if client
-
-            return "" unless mount.path_exists?(path, client)
-
-            desc = mount.list(path, recurse, ignore, client)
-
-            if desc.length == 0
-                mount.notice "Got no information on //%s/%s" % [mount, path]
-                return ""
-            end
-
-            desc.collect { |sub| sub.join("\t") }.join("\n")
-        end
-        
-        def local?
-            self.local
-        end
-
-        # Is a given mount available?
-        def mounted?(name)
-            @mounts.include?(name)
-        end
-
-        # Mount a new directory with a name.
-        def mount(path, name)
-            if @mounts.include?(name)
-                if @mounts[name] != path
-                    raise FileServerError, "%s is already mounted at %s" %
-                        [@mounts[name].path, name]
-                else
-                    # it's already mounted; no problem
-                    return
-                end
-            end
-
-            # Let the mounts do their own error-checking.
-            @mounts[name] = Mount.new(name, path)
-            @mounts[name].info "Mounted %s" % path
-
-            return @mounts[name]
-        end
-
-        # Retrieve a file from the local disk and pass it to the remote
-        # client.
-        def retrieve(url, links = :ignore, client = nil, clientip = nil)
-            links = links.intern if links.is_a? String
-
-            mount, path = convert(url, client, clientip)
-
-            if client
-                mount.info "Sending %s to %s" % [url, client]
-            end
-
-            unless mount.path_exists?(path, client)
-                mount.debug "#{mount} reported that #{path} does not exist"
-                return ""
-            end
-
-            links = links.intern if links.is_a? String
-
-            if links == :ignore and FileTest.symlink?(path)
-                mount.debug "I think that #{path} is a symlink and we're ignoring them"
-                return ""
-            end
-
-            str = mount.read_file(path, client)
-
-            if @local
-                return str
-            else
-                return CGI.escape(str)
-            end
-        end
-
-        def umount(name)
-            @mounts.delete(name) if @mounts.include? name
-        end
-
-        private
-
-        def authcheck(file, mount, client, clientip)
-            # If we're local, don't bother passing in information.
-            if local?
-                client = nil
-                clientip = nil
-            end
-            unless mount.allowed?(client, clientip)
-                mount.warning "%s cannot access %s" %
-                    [client, file]
-                raise Puppet::AuthorizationError, "Cannot access %s" % mount
-            end
-        end
-
-        # Take a URL and some client info and return a mount and relative
-        # path pair.
-        #
-        def convert(url, client, clientip)
-            readconfig
-
-            url = URI.unescape(url)
-
-            mount, stub = splitpath(url, client)
-
-            authcheck(url, mount, client, clientip)
-
-            return mount, stub
-        end
-
-        # Return the mount for the Puppet modules; allows file copying from
-        # the modules.
-        def modules_mount(module_name, client)
-            # Find our environment, if we have one.
-            unless hostname = (client || Facter.value("hostname"))
-                raise ArgumentError, "Could not find hostname"
-            end
-            if node = Puppet::Node.find(hostname)
-                env = node.environment
-            else
-                env = nil
-            end
-
-            # And use the environment to look up the module.
-            mod = Puppet::Module::find(module_name, env)
-            if mod
-                return @mounts[MODULES].copy(mod.name, mod.files)
-            else
-                return nil
-            end
-        end
-
-        # Read the configuration file.
-        def readconfig(check = true)
-            return if @noreadconfig
-
-            return unless configuration
-
-            if check and ! @configuration.changed?
-                return
-            end
-
-            newmounts = {}
-            begin
-                File.open(@configuration.file) { |f|
-                    mount = nil
-                    count = 1
-                    f.each { |line|
-                        case line
-                        when /^\s*#/: next # skip comments
-                        when /^\s*$/: next # skip blank lines
-                        when /\[([-\w]+)\]/:
-                            name = $1
-                            if newmounts.include?(name)
-                                raise FileServerError, "%s is already mounted at %s" %
-                                    [newmounts[name], name], count, @configuration.file
-                            end
-                            mount = Mount.new(name)
-                            newmounts[name] = mount
-                        when /^\s*(\w+)\s+(.+)$/:
-                            var = $1
-                            value = $2
-                            case var
-                            when "path":
-                                if mount.name == MODULES
-                                    Puppet.warning "The '#{mount.name}' module can not have a path. Ignoring attempt to set it"
-                                else
-                                    begin
-                                        mount.path = value
-                                    rescue FileServerError => detail
-                                        Puppet.err "Removing mount %s: %s" %
-                                            [mount.name, detail]
-                                        newmounts.delete(mount.name)
-                                    end
-                                end
-                            when "allow":
-                                value.split(/\s*,\s*/).each { |val|
-                                    begin
-                                        mount.info "allowing %s access" % val
-                                        mount.allow(val)
-                                    rescue AuthStoreError => detail
-                                        raise FileServerError.new(detail.to_s,
-                                            count, @configuration.file)
-                                    end
-                                }
-                            when "deny":
-                                value.split(/\s*,\s*/).each { |val|
-                                    begin
-                                        mount.info "denying %s access" % val
-                                        mount.deny(val)
-                                    rescue AuthStoreError => detail
-                                        raise FileServerError.new(detail.to_s,
-                                            count, @configuration.file)
-                                    end
-                                }
-                            else
-                                raise FileServerError.new("Invalid argument '%s'" % var,
-                                    count, @configuration.file)
-                            end
-                        else
-                            raise FileServerError.new("Invalid line '%s'" % line.chomp,
-                                count, @configuration.file)
-                        end
-                        count += 1
-                    }
-                }
-            rescue Errno::EACCES => detail
-                Puppet.err "FileServer error: Cannot read %s; cannot serve" % @configuration
-                #raise Puppet::Error, "Cannot read %s" % @configuration
-            rescue Errno::ENOENT => detail
-                Puppet.err "FileServer error: '%s' does not exist; cannot serve" %
-                    @configuration
-            end
-
-            unless newmounts[MODULES]
-                Puppet.debug "No #{MODULES} mount given; autocreating with default permissions"
-                mount = Mount.new(MODULES)
-                mount.allow("*")
-                newmounts[MODULES] = mount
-            end
-            
-            unless newmounts[PLUGINS]
-                Puppet.debug "No #{PLUGINS} mount given; autocreating with default permissions"
-                mount = PluginMount.new(PLUGINS)
-                mount.allow("*")
-                newmounts[PLUGINS] = mount
-            end
-            
-            unless newmounts[PLUGINS].valid?
-                Puppet.debug "No path given for #{PLUGINS} mount; creating a special PluginMount"
-                # We end up here if the user has specified access rules for
-                # the plugins mount, without specifying a path (which means
-                # they want to have the default behaviour for the mount, but
-                # special access control).  So we need to move all the
-                # user-specified access controls into the new PluginMount
-                # object...
-                mount = PluginMount.new(PLUGINS)
-                # Yes, you're allowed to hate me for this.
-                mount.instance_variable_set(:@declarations,
-                                 newmounts[PLUGINS].instance_variable_get(:@declarations)
-                                 )
-                newmounts[PLUGINS] = mount
-            end
-                
-            # Verify each of the mounts are valid.
-            # We let the check raise an error, so that it can raise an error
-            # pointing to the specific problem.
-            newmounts.each { |name, mount|
-                unless mount.valid?
-                    raise FileServerError, "Invalid mount %s" %
-                        name
-                end
-            }
-            @mounts = newmounts
-        end
-
-        # Split the path into the separate mount point and path.
-        def splitpath(dir, client)
-            # the dir is based on one of the mounts
-            # so first retrieve the mount path
-            mount = nil
-            path = nil
-            if dir =~ %r{/([-\w]+)}
-                # Strip off the mount name.
-                mount_name, path = dir.sub(%r{^/}, '').split(File::Separator, 2)
-
-                unless mount = modules_mount(mount_name, client)
-                    unless mount = @mounts[mount_name]
-                        raise FileServerError, "Fileserver module '%s' not mounted" % mount_name
-                    end
-                end
-            else
-                raise FileServerError, "Fileserver error: Invalid path '%s'" % dir
-            end
-
-            if path.nil? or path == ''
-                path = '/'
-            elsif path
-                # Remove any double slashes that might have occurred
-                path = URI.unescape(path.gsub(/\/\//, "/"))
-            end
-
-            return mount, path
-        end
-
-        def to_s
-            "fileserver"
-        end
-
-        # A simple class for wrapping mount points.  Instances of this class
-        # don't know about the enclosing object; they're mainly just used for
-        # authorization.
-        class Mount < Puppet::Network::AuthStore
-            attr_reader :name
-
-            @@syncs = {}
-
-            @@files = {}
-
-            Puppet::Util.logmethods(self, true)
-
-            # Create a map for a specific client.
-            def clientmap(client)
-                {
-                    "h" => client.sub(/\..*$/, ""), 
-                    "H" => client,
-                    "d" => client.sub(/[^.]+\./, "") # domain name
-                }
-            end
-
-            # Replace % patterns as appropriate.
-            def expand(path, client = nil)
-                # This map should probably be moved into a method.
-                map = nil
-
-                if client
-                    map = clientmap(client)
-                else
-                    Puppet.notice "No client; expanding '%s' with local host" %
-                        path
-                    # Else, use the local information
-                    map = localmap()
-                end
-                path.gsub(/%(.)/) do |v|
-                    key = $1
-                    if key == "%" 
-                        "%"
-                    else
-                        map[key] || v
-                    end
-                end
-            end
-
-            # Do we have any patterns in our path, yo?
-            def expandable?
-                if defined? @expandable
-                    @expandable
-                else
-                    false
-                end
-            end
-
-            # Return a fully qualified path, given a short path and
-            # possibly a client name.
-            def file_path(relative_path, node = nil)
-                full_path = path(node)
-
-                raise ArgumentError.new("Mounts without paths are not usable") unless full_path
-
-                # If there's no relative path name, then we're serving the mount itself.
-                return full_path unless relative_path and relative_path != "/"
-
-                return File.join(full_path, relative_path)
-            end
-
-            # Create out object.  It must have a name.
-            def initialize(name, path = nil)
-                unless name =~ %r{^[-\w]+$}
-                    raise FileServerError, "Invalid name format '%s'" % name
-                end
-                @name = name
-
-                if path
-                    self.path = path
-                else
-                    @path = nil
-                end
-
-                super()
-            end
-
-            def fileobj(path, links, client)
-                obj = nil
-                if obj = Puppet.type(:file)[file_path(path, client)]
-                    # This can only happen in local fileserving, but it's an
-                    # important one.  It'd be nice if we didn't just set
-                    # the check params every time, but I'm not sure it's worth
-                    # the effort.
-                    obj[:check] = CHECKPARAMS
-                else
-                    obj = Puppet.type(:file).create(
-                        :name => file_path(path, client),
-                        :check => CHECKPARAMS
-                    )
-                end
-
-                if links == :manage
-                    links = :follow
-                end
-
-                # This, ah, might be completely redundant
-                unless obj[:links] == links
-                    obj[:links] = links
-                end
-
-                return obj
-            end
-
-            # Read the contents of the file at the relative path given.
-            def read_file(relpath, client)
-               File.read(file_path(relpath, client))
-            end
-
-            # Cache this manufactured map, since if it's used it's likely
-            # to get used a lot.
-            def localmap
-                unless defined? @@localmap
-                    @@localmap = {
-                        "h" =>  Facter.value("hostname"),
-                        "H" => [Facter.value("hostname"),
-                                Facter.value("domain")].join("."),
-                        "d" =>  Facter.value("domain")
-                    }
-                end
-                @@localmap
-            end
-
-            # Return the path as appropriate, expanding as necessary.
-            def path(client = nil)
-                if expandable?
-                    return expand(@path, client)
-                else
-                    return @path
-                end
-            end
-
-            # Set the path.
-            def path=(path)
-                # FIXME: For now, just don't validate paths with replacement
-                # patterns in them.
-                if path =~ /%./
-                    # Mark that we're expandable.
-                    @expandable = true
-                else
-                    unless FileTest.exists?(path)
-                        raise FileServerError, "%s does not exist" % path
-                    end
-                    unless FileTest.directory?(path)
-                        raise FileServerError, "%s is not a directory" % path
-                    end
-                    unless FileTest.readable?(path)
-                        raise FileServerError, "%s is not readable" % path
-                    end
-                    @expandable = false
-                end
-                @path = path
-            end
-
-            # Verify that the path given exists within this mount's subtree.
-            #
-            def path_exists?(relpath, client = nil)
-                File.exists?(file_path(relpath, client))
-            end
-
-            # Return the current values for the object.
-            def properties(obj)
-                obj.retrieve.inject({}) { |props, ary| props[ary[0].name] = ary[1]; props }
-            end
-
-            # Retrieve a specific directory relative to a mount point.
-            # If they pass in a client, then expand as necessary.
-            def subdir(dir = nil, client = nil)
-                basedir = self.path(client)
-
-                dirname = if dir
-                    File.join(basedir, *dir.split("/"))
-                else
-                    basedir
-                end
-
-                dirname
-            end
-
-            def sync(path)
-                @@syncs[path] ||= Sync.new
-                @@syncs[path]
-            end
-
-            def to_s
-                "mount[%s]" % @name
-            end
-
-            # Verify our configuration is valid.  This should really check to
-            # make sure at least someone will be allowed, but, eh.
-            def valid?
-                if name == MODULES
-                    return @path.nil?
-                else
-                    return ! @path.nil?
-                end
-            end
-
-            # Return a new mount with the same properties as +self+, except
-            # with a different name and path.
-            def copy(name, path)
-                result = self.clone
-                result.path = path
-                result.instance_variable_set(:@name, name)
-                return result
-            end
-
-            # List the contents of the relative path +relpath+ of this mount.
-            #
-            # +recurse+ is the number of levels to recurse into the tree,
-            # or false to provide no recursion or true if you just want to
-            # go for broke.
-            #
-            # +ignore+ is an array of filenames to ignore when traversing
-            # the list.
-            #
-            # The return value of this method is a complex nest of arrays,
-            # which describes a directory tree.  Each file or directory is
-            # represented by an array, where the first element is the path
-            # of the file (relative to the root of the mount), and the
-            # second element is the type.  A directory is represented by an
-            # array as well, where the first element is a "directory" array,
-            # while the remaining elements are other file or directory
-            # arrays.  Confusing?  Hell yes.  As an added bonus, all names
-            # must start with a slash, because... well, I'm fairly certain
-            # a complete explanation would involve the words "crack pipe"
-            # and "bad batch".
-            #
-            def list(relpath, recurse, ignore, client = nil)
-                abspath = file_path(relpath, client)
-                if FileTest.exists?(abspath)
-                    if FileTest.directory?(abspath) and recurse
-                        return reclist(abspath, recurse, ignore)
-                    else
-                        return [["/", File.stat(abspath).ftype]]
-                    end
-                end
-                return nil
-            end
-
-            def reclist(abspath, recurse, ignore)
-                require 'puppet/file_serving'
-                require 'puppet/file_serving/fileset'
-                args = { :recurse => recurse, :links => :follow }
-                args[:ignore] = ignore if ignore
-                fs = Puppet::FileServing::Fileset.new(abspath, args)
-                ary = fs.files.collect do |file|
-                    if file == "."
-                        file = "/"
-                    else
-                        file = File.join("/", file )
-                    end
-                    stat = fs.stat(File.join(abspath, file))
-                    next if stat.nil?
-                    [ file, stat.ftype ]
-                end
-
-                return ary.compact
-            end
-
-        end
-
-        # A special mount class specifically for the plugins mount -- just
-        # has some magic to effectively do a union mount of the 'plugins'
-        # directory of all modules.
-        # 
-        class PluginMount < Mount
-            def path(client)
-                ''
-            end
-
-            def mod_path_exists?(mod, relpath, client = nil)
-                File.exists?(File.join(mod, PLUGINS, relpath))
-            end
-
-            def path_exists?(relpath, client = nil)
-               !valid_modules.find { |m| mod_path_exists?(m, relpath, client) }.nil?
-            end
-
-            def valid?
-                true
-            end
-
-            def mod_file_path(mod, relpath, client = nil)
-                File.join(mod, PLUGINS, relpath)
-            end
-            
-            def file_path(relpath, client = nil)
-                return nil unless mod = valid_modules.map { |m| mod_path_exists?(m, relpath, client) ? m : nil }.compact.first
-                mod_file_path(mod, relpath, client)
-            end
-
-            # create a list of files by merging all modules
-            def list(relpath, recurse, ignore, client = nil)
-                result = []
-                valid_modules.each do |m|
-                    modpath = mod_file_path(m, relpath, client)
-                    if FileTest.exists?(modpath)
-                        if FileTest.directory?(modpath) and recurse
-                            ary = reclist(modpath, recurse, ignore)
-                            ary = [] if ary.nil?
-                            result += ary
-                        else
-                            result += [["/", File.stat(modpath).ftype]]
-                        end
-                    end
-                end
-                result
-            end
-
-            private
-            def valid_modules
-               Puppet::Module.all.find_all { |m| File.directory?(File.join(m, PLUGINS)) }
-            end
-            
-            def add_to_filetree(f, filetree)
-               first, rest = f.split(File::SEPARATOR, 2)
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/network/handler/master.rb b/lib/puppet/network/handler/master.rb
deleted file mode 100644
index 71b633a..0000000
--- a/lib/puppet/network/handler/master.rb
+++ /dev/null
@@ -1,102 +0,0 @@
-require 'openssl'
-require 'puppet'
-require 'puppet/parser/interpreter'
-require 'puppet/sslcertificates'
-require 'xmlrpc/server'
-require 'yaml'
-
-class Puppet::Network::Handler
-    class MasterError < Puppet::Error; end
-    class Master < Handler
-        desc "Puppet's configuration interface.  Used for all interactions related to
-        generating client configurations."
-
-        include Puppet::Util
-
-        attr_accessor :ast
-        attr_reader :ca
-
-        @interface = XMLRPC::Service::Interface.new("puppetmaster") { |iface|
-                iface.add_method("string getconfig(string)")
-                iface.add_method("int freshness()")
-        }
-
-        # Tell a client whether there's a fresh config for it
-        def freshness(client = nil, clientip = nil)
-            # Always force a recompile.  Newer clients shouldn't do this (as of April 2008).
-            return Time.now.to_i
-        end
-
-        def initialize(hash = {})
-            args = {}
-
-            if hash[:Local]
-                @local = hash[:Local]
-            else
-                @local = false
-            end
-
-            args[:Local] = true
-
-            if hash.include?(:CA) and hash[:CA]
-                @ca = Puppet::SSLCertificates::CA.new()
-            else
-                @ca = nil
-            end
-
-            Puppet.debug("Creating interpreter")
-
-            # This is only used by the cfengine module, or if --loadclasses was
-            # specified in +puppet+.
-            if hash.include?(:Classes)
-                args[:Classes] = hash[:Classes]
-            end
-        end
-
-        # Call our various handlers; this handler is getting deprecated.
-        def getconfig(facts, format = "marshal", client = nil, clientip = nil)
-            facts = decode_facts(facts)
-
-            client ||= facts["hostname"]
-
-            # Pass the facts to the fact handler
-            Puppet::Node::Facts.new(client, facts).save unless local?
-
-            catalog = Puppet::Node::Catalog.find(client)
-
-            case format
-            when "yaml":
-                return CGI.escape(catalog.extract.to_yaml(:UseBlock => true))
-            when "marshal":
-                return CGI.escape(Marshal.dump(catalog.extract))
-            else
-                raise "Invalid markup format '%s'" % format
-            end
-        end
-
-        # 
-        def decode_facts(facts)
-            if @local
-                # we don't need to do anything, since we should already
-                # have raw objects
-                Puppet.debug "Our client is local"
-            else
-                Puppet.debug "Our client is remote"
-
-                begin
-                    facts = YAML.load(CGI.unescape(facts))
-                rescue => detail
-                    raise XMLRPC::FaultException.new(
-                        1, "Could not rebuild facts"
-                    )
-                end
-            end
-
-            return facts
-        end
-
-        # Translate our configuration appropriately for sending back to a client.
-        def translate(config)
-        end
-    end
-end
diff --git a/lib/puppet/network/handler/report.rb b/lib/puppet/network/handler/report.rb
deleted file mode 100755
index b92b77e..0000000
--- a/lib/puppet/network/handler/report.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-require 'puppet/util/instance_loader'
-require 'puppet/reports'
-
-# A simple server for triggering a new run on a Puppet client.
-class Puppet::Network::Handler
-    class Report < Handler
-        desc "Accepts a Puppet transaction report and processes it."
-
-        @interface = XMLRPC::Service::Interface.new("puppetreports") { |iface|
-            iface.add_method("string report(array)")
-        }
-
-        # Add a new report type.
-        def self.newreport(name, options = {}, &block)
-            Puppet.warning "The interface for registering report types has changed; use Puppet::Reports.register_report for report type %s" % name
-            Puppet::Reports.register_report(name, options, &block)
-        end
-
-        def initialize(*args)
-            super
-            Puppet.settings.use(:main, :reporting, :metrics)
-        end
-
-        # Accept a report from a client.
-        def report(report, client = nil, clientip = nil)
-            # Unescape the report
-            unless @local
-                report = CGI.unescape(report)
-            end
-
-            Puppet.info "Processing reports %s for %s" % [reports().join(", "), client]
-            begin
-                process(report)
-            rescue => detail
-                Puppet.err "Could not process report for %s: %s" % [client, detail]
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-            end
-        end
-
-        private
-
-        # Process the report using all of the existing hooks.
-        def process(yaml)
-            return if Puppet[:reports] == "none"
-
-            # First convert the report to real objects
-            begin
-                report = YAML.load(yaml)
-            rescue => detail
-                Puppet.warning "Could not load report: %s" % detail
-                return
-            end
-
-            # Used for those reports that accept yaml
-            client = report.host
-
-            reports().each do |name|
-                if mod = Puppet::Reports.report(name)
-                    # We have to use a dup because we're including a module in the
-                    # report.
-                    newrep = report.dup
-                    begin
-                        newrep.extend(mod)
-                        newrep.process
-                    rescue => detail
-                        if Puppet[:trace]
-                            puts detail.backtrace
-                        end
-                        Puppet.err "Report %s failed: %s" %
-                            [name, detail]
-                    end
-                else
-                    Puppet.warning "No report named '%s'" % name
-                end
-            end
-        end
-
-        # Handle the parsing of the reports attribute.
-        def reports
-            # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-            x = Puppet[:reports].gsub(/(^\s+)|(\s+$)/, '').split(/\s*,\s*/)
-        end
-    end
-end
-
diff --git a/lib/puppet/network/handler/resource.rb b/lib/puppet/network/handler/resource.rb
deleted file mode 100755
index f2a3397..0000000
--- a/lib/puppet/network/handler/resource.rb
+++ /dev/null
@@ -1,194 +0,0 @@
-require 'puppet'
-require 'puppet/network/handler'
-
-# Serve Puppet elements.  Useful for querying, copying, and, um, other stuff.
-class Puppet::Network::Handler
-    class Resource < Handler
-        desc "An interface for interacting with client-based resources that can
-        be used for querying or managing remote machines without using Puppet's
-        central server tools.
-        
-        The ``describe`` and ``list`` methods return TransBuckets containing
-        TransObject instances (``describe`` returns a single TransBucket),
-        and the ``apply`` method accepts a TransBucket of TransObjects and
-        applies them locally.
-        "
-
-        attr_accessor :local
-
-        @interface = XMLRPC::Service::Interface.new("resource") { |iface|
-            iface.add_method("string apply(string, string)")
-            iface.add_method("string describe(string, string, array, array)")
-            iface.add_method("string list(string, array, string)")
-        }
-
-        side :client
-
-        # Apply a TransBucket as a transaction.
-        def apply(bucket, format = "yaml", client = nil, clientip = nil)
-            unless local?
-                begin
-                    case format
-                    when "yaml":
-                        bucket = YAML::load(Base64.decode64(bucket))
-                    else
-                        raise Puppet::Error, "Unsupported format '%s'" % format
-                    end
-                rescue => detail
-                    raise Puppet::Error, "Could not load YAML TransBucket: %s" % detail
-                end
-            end
-
-            catalog = bucket.to_catalog
-
-            # And then apply the catalog.  This way we're reusing all
-            # the code in there.  It should probably just be separated out, though.
-            transaction = catalog.apply
-            
-            # And then clean up
-            catalog.clear(true)
-
-            # It'd be nice to return some kind of report, but... at this point
-            # we have no such facility.
-            return "success"
-        end
-
-        # Describe a given object.  This returns the 'is' values for every property
-        # available on the object type.
-        def describe(type, name, retrieve = nil, ignore = [], format = "yaml", client = nil, clientip = nil)
-            Puppet.info "Describing %s[%s]" % [type.to_s.capitalize, name]
-            @local = true unless client
-            typeklass = nil
-            unless typeklass = Puppet.type(type)
-                raise Puppet::Error, "Puppet type %s is unsupported" % type
-            end
-
-            obj = nil
-
-            retrieve ||= :all
-            ignore ||= []
-
-            if obj = typeklass[name]
-                obj[:check] = retrieve
-            else
-                begin
-                    obj = typeklass.create(:name => name, :check => retrieve)
-                rescue Puppet::Error => detail
-                    raise Puppet::Error, "%s[%s] could not be created: %s" %
-                        [type, name, detail]
-                end
-            end
-
-            unless obj
-                raise XMLRPC::FaultException.new(
-                    1, "Could not create %s[%s]" % [type, name]
-                )
-            end
-
-            trans = obj.to_trans
-
-            # Now get rid of any attributes they specifically don't want
-            ignore.each do |st|
-                if trans.include? st
-                    trans.delete(st)
-                end
-            end
-
-            # And get rid of any attributes that are nil
-            trans.each do |attr, value|
-                if value.nil?
-                    trans.delete(attr)
-                end
-            end
-
-            unless @local
-                case format
-                when "yaml":
-                    trans = Base64.encode64(YAML::dump(trans))
-                else
-                    raise XMLRPC::FaultException.new(
-                        1, "Unavailable config format %s" % format
-                    )
-                end
-            end
-
-            return trans
-        end
-
-        # Create a new fileserving module.
-        def initialize(hash = {})
-            if hash[:Local]
-                @local = hash[:Local]
-            else
-                @local = false
-            end
-        end
-
-        # List all of the elements of a given type.
-        def list(type, ignore = [], base = nil, format = "yaml", client = nil, clientip = nil)
-            @local = true unless client
-            typeklass = nil
-            unless typeklass = Puppet.type(type)
-                raise Puppet::Error, "Puppet type %s is unsupported" % type
-            end
-
-            # They can pass in false
-            ignore ||= []
-            ignore = [ignore] unless ignore.is_a? Array
-            bucket = Puppet::TransBucket.new
-            bucket.type = typeklass.name
-
-            typeklass.instances.each do |obj|
-                next if ignore.include? obj.name
-
-                #object = Puppet::TransObject.new(obj.name, typeklass.name)
-                bucket << obj.to_trans
-            end
-
-            unless @local
-                case format
-                when "yaml":
-                    begin
-                    bucket = Base64.encode64(YAML::dump(bucket))
-                    rescue => detail
-                        Puppet.err detail
-                        raise XMLRPC::FaultException.new(
-                            1, detail.to_s
-                        )
-                    end
-                else
-                    raise XMLRPC::FaultException.new(
-                        1, "Unavailable config format %s" % format
-                    )
-                end
-            end
-
-            return bucket
-        end
-
-        private
-
-        def authcheck(file, mount, client, clientip)
-            unless mount.allowed?(client, clientip)
-                mount.warning "%s cannot access %s" %
-                    [client, file]
-                raise Puppet::AuthorizationError, "Cannot access %s" % mount
-            end
-        end
-
-        # Deal with ignore parameters.
-        def handleignore(children, path, ignore)            
-            ignore.each { |ignore|                
-                Dir.glob(File.join(path,ignore), File::FNM_DOTMATCH) { |match|
-                    children.delete(File.basename(match))
-                }                
-            }
-            return children
-        end  
-
-        def to_s
-            "resource"
-        end
-    end
-end
-
diff --git a/lib/puppet/network/handler/runner.rb b/lib/puppet/network/handler/runner.rb
deleted file mode 100755
index c97e479..0000000
--- a/lib/puppet/network/handler/runner.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-class Puppet::Network::Handler
-    class MissingMasterError < RuntimeError; end # Cannot find the master client
-    # A simple server for triggering a new run on a Puppet client.
-    class Runner < Handler
-        desc "An interface for triggering client configuration runs."
-
-        @interface = XMLRPC::Service::Interface.new("puppetrunner") { |iface|
-            iface.add_method("string run(string, string)")
-        }
-
-        side :client
-
-        # Run the client configuration right now, optionally specifying
-        # tags and whether to ignore schedules
-        def run(tags = nil, ignoreschedules = false, fg = true, client = nil, clientip = nil)
-            # We need to retrieve the client
-            master = Puppet::Network::Client.client(:Master).instance
-
-            unless master
-                raise MissingMasterError, "Could not find the master client"
-            end
-
-            if Puppet::Util::Pidlock.new(Puppet[:puppetdlockfile]).locked?
-                Puppet.notice "Could not trigger run; already running"
-                return "running"
-            end
-
-            if tags == ""
-                tags = nil
-            end
-
-            if ignoreschedules == ""
-                ignoreschedules == nil
-            end
-
-            msg = ""
-            if client
-                msg = "%s(%s) " % [client, clientip]
-            end
-            msg += "triggered run" %
-            if tags
-                msg += " with tags %s" % tags
-            end
-
-            if ignoreschedules
-                msg += " ignoring schedules"
-            end
-
-            Puppet.notice msg
-
-            # And then we need to tell it to run, with this extra info.
-            if fg
-                master.run(:tags => tags, :ignoreschedules => ignoreschedules)
-            else
-                Puppet.newthread do
-                    master.run(:tags => tags, :ignoreschedules => ignoreschedules)
-                end
-            end
-
-            return "success"
-        end
-    end
-end
-
diff --git a/lib/puppet/network/handler/status.rb b/lib/puppet/network/handler/status.rb
deleted file mode 100644
index fbdc7a7..0000000
--- a/lib/puppet/network/handler/status.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-class Puppet::Network::Handler
-    class Status < Handler
-        desc "A simple interface for testing Puppet connectivity."
-
-        side :client
-
-        @interface = XMLRPC::Service::Interface.new("status") { |iface|
-            iface.add_method("int status()")
-        }
-
-        def status(client = nil, clientip = nil)
-            return 1
-        end
-    end
-end
-
diff --git a/lib/puppet/network/http.rb b/lib/puppet/network/http.rb
deleted file mode 100644
index c219859..0000000
--- a/lib/puppet/network/http.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-class Puppet::Network::HTTP
-    def self.server_class_by_type(kind)
-        case kind.to_sym
-        when :webrick:
-            require 'puppet/network/http/webrick'
-            return Puppet::Network::HTTP::WEBrick
-        when :mongrel:
-            raise ArgumentError, "Mongrel is not installed on this platform" unless Puppet.features.mongrel?
-            require 'puppet/network/http/mongrel'
-            return Puppet::Network::HTTP::Mongrel 
-        else
-            raise ArgumentError, "Unknown HTTP server name [#{kind}]"
-        end
-    end
-end
diff --git a/lib/puppet/network/http/handler.rb b/lib/puppet/network/http/handler.rb
deleted file mode 100644
index 3c14c8a..0000000
--- a/lib/puppet/network/http/handler.rb
+++ /dev/null
@@ -1,119 +0,0 @@
-module Puppet::Network::HTTP::Handler
-
-    def initialize_for_puppet(args = {})
-        raise ArgumentError unless @server = args[:server]
-        raise ArgumentError unless @handler = args[:handler]
-        @model = find_model_for_handler(@handler)
-    end
-
-    # handle an HTTP request
-    def process(request, response)
-        return do_find(request, response)       if get?(request)    and singular?(request)
-        return do_search(request, response)     if get?(request)    and plural?(request)
-        return do_destroy(request, response)    if delete?(request) and singular?(request)
-        return do_save(request, response)       if put?(request)    and singular?(request)
-        raise ArgumentError, "Did not understand HTTP #{http_method(request)} request for '#{path(request)}'"
-    rescue Exception => e
-        return do_exception(request, response, e)
-    end
-
-  private
-
-    def model
-        @model
-    end
-
-    def do_find(request, response)
-        key = request_key(request) || raise(ArgumentError, "Could not locate lookup key in request path [#{path(request)}]")
-        args = params(request)
-        result = model.find(key, args).to_yaml
-        encode_result(request, response, result)
-    end
-
-    def do_search(request, response)
-        args = params(request)
-        result = model.search(args).collect {|result| result.to_yaml }.to_yaml
-        encode_result(request, response, result) 
-    end
-
-    def do_destroy(request, response)
-        key = request_key(request) || raise(ArgumentError, "Could not locate lookup key in request path [#{path(request)}]")
-        args = params(request)
-        result = model.destroy(key, args)
-        encode_result(request, response, YAML.dump(result))
-    end
-
-    def do_save(request, response)
-        data = body(request).to_s
-        raise ArgumentError, "No data to save" if !data or data.empty?
-        args = params(request)
-        obj = model.from_yaml(data)
-        result = save_object(obj, args).to_yaml
-        encode_result(request, response, result)
-    end
-
-    # LAK:NOTE This has to be here for testing; it's a stub-point so
-    # we keep infinite recursion from happening.
-    def save_object(object, args)
-        object.save(args)
-    end
-
-    def do_exception(request, response, exception, status=404)
-        encode_result(request, response, exception.to_yaml, status)
-    end
-
-    def find_model_for_handler(handler)
-        Puppet::Indirector::Indirection.model(handler) || 
-            raise(ArgumentError, "Cannot locate indirection [#{handler}].")
-    end
-
-    def get?(request)
-        http_method(request) == 'GET'
-    end
-
-    def put?(request)
-        http_method(request) == 'PUT'
-    end
-
-    def delete?(request)
-        http_method(request) == 'DELETE'
-    end
-
-    def singular?(request)
-        %r{/#{@handler.to_s}$}.match(path(request))
-    end
-
-    def plural?(request)
-        %r{/#{@handler.to_s}s$}.match(path(request))
-    end
-
-    # methods to be overridden by the including web server class
-
-    def register_handler
-        raise NotImplementedError
-    end
-
-    def http_method(request)
-        raise NotImplementedError
-    end
-
-    def path(request)
-        raise NotImplementedError
-    end    
-
-    def request_key(request)
-        raise NotImplementedError
-    end
-
-    def body(request)
-        raise NotImplementedError
-    end
-
-    def params(request)
-        raise NotImplementedError
-    end
-
-    def encode_result(request, response, result, status = 200)
-        raise NotImplementedError
-    end
-end
diff --git a/lib/puppet/network/http/mongrel.rb b/lib/puppet/network/http/mongrel.rb
deleted file mode 100644
index 9a4531c..0000000
--- a/lib/puppet/network/http/mongrel.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require 'mongrel' if Puppet.features.mongrel?
-
-require 'puppet/network/http/mongrel/rest'
-
-class Puppet::Network::HTTP::Mongrel
-    def initialize(args = {})
-        @listening = false
-    end
-    
-    def listen(args = {})
-        raise ArgumentError, ":handlers must be specified." if !args[:handlers] or args[:handlers].empty?
-        raise ArgumentError, ":protocols must be specified." if !args[:protocols] or args[:protocols].empty?
-        raise ArgumentError, ":address must be specified." unless args[:address]
-        raise ArgumentError, ":port must be specified." unless args[:port]
-        raise "Mongrel server is already listening" if listening?
-
-        @protocols = args[:protocols]
-        @handlers = args[:handlers]
-        @server = Mongrel::HttpServer.new(args[:address], args[:port]) 
-        setup_handlers
-
-        @listening = true
-        @server.run
-    end
-    
-    def unlisten
-        raise "Mongrel server is not listening" unless listening?
-        @server.stop
-        @server = nil
-        @listening = false
-    end
-    
-    def listening?
-        @listening
-    end
-    
-  private
-  
-    def setup_handlers
-        @protocols.each do |protocol|
-            klass = class_for_protocol(protocol)
-            @handlers.each do |handler|
-                @server.register('/' + handler.to_s, klass.new(:server => @server, :handler => handler))
-                @server.register('/' + handler.to_s + 's', klass.new(:server => @server, :handler => handler))
-            end
-        end
-    end
-  
-    def class_for_protocol(protocol)
-        return Puppet::Network::HTTP::MongrelREST if protocol.to_sym == :rest
-        raise ArgumentError, "Unknown protocol [#{protocol}]."
-    end
-end
diff --git a/lib/puppet/network/http/mongrel/rest.rb b/lib/puppet/network/http/mongrel/rest.rb
deleted file mode 100644
index 520ad67..0000000
--- a/lib/puppet/network/http/mongrel/rest.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-require 'puppet/network/http/handler'
-
-class Puppet::Network::HTTP::MongrelREST < Mongrel::HttpHandler
-
-    include Puppet::Network::HTTP::Handler
-
-    def initialize(args={})
-        super()
-        initialize_for_puppet(args)
-    end
-
-    # Return the query params for this request.  We had to expose this method for
-    # testing purposes.
-    def params(request)
-        Mongrel::HttpRequest.query_parse(request.params["QUERY_STRING"]).merge(client_info(request))
-    end
-
-  private
-
-    # which HTTP verb was used in this request
-    def http_method(request)
-        request.params[Mongrel::Const::REQUEST_METHOD]
-    end
-
-    # what path was requested?
-    def path(request)
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = '/' + request.params[Mongrel::Const::REQUEST_PATH].split('/')[1]
-    end
-
-    # return the key included in the request path
-    def request_key(request)
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = request.params[Mongrel::Const::REQUEST_PATH].split('/')[2]        
-    end
-
-    # return the request body
-    def body(request)
-        request.body
-    end
-
-    # produce the body of the response
-    def encode_result(request, response, result, status = 200)
-        response.start(status) do |head, body|
-            body.write(result)
-        end
-    end
-
-    def client_info(request)
-        result = {}
-        params = request.params
-        result[:ip] = params["REMOTE_ADDR"]
-
-        # JJM #906 The following dn.match regular expression is forgiving
-        # enough to match the two Distinguished Name string contents
-        # coming from Apache, Pound or other reverse SSL proxies.
-        if dn = params[Puppet[:ssl_client_header]] and dn_matchdata = dn.match(/^.*?CN\s*=\s*(.*)/)
-            result[:node] = dn_matchdata[1].to_str
-            result[:authenticated] = (params[Puppet[:ssl_client_verify_header]] == 'SUCCESS')
-        else
-            result[:authenticated] = false
-        end
-
-        return result
-    end
-end
diff --git a/lib/puppet/network/http/webrick.rb b/lib/puppet/network/http/webrick.rb
deleted file mode 100644
index 3a37e20..0000000
--- a/lib/puppet/network/http/webrick.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-require 'webrick'
-require 'webrick/https'
-require 'puppet/network/http/webrick/rest'
-require 'thread'
-
-class Puppet::Network::HTTP::WEBrick
-    def initialize(args = {})
-        @listening = false
-        @mutex = Mutex.new
-    end
-    
-    def self.class_for_protocol(protocol)
-        return Puppet::Network::HTTP::WEBrickREST if protocol.to_sym == :rest
-        raise "Unknown protocol [#{protocol}]."
-    end
-    
-    def listen(args = {})
-        raise ArgumentError, ":handlers must be specified." if !args[:handlers] or args[:handlers].empty?
-        raise ArgumentError, ":protocols must be specified." if !args[:protocols] or args[:protocols].empty?
-        raise ArgumentError, ":address must be specified." unless args[:address]
-        raise ArgumentError, ":port must be specified." unless args[:port]
-        
-        @protocols = args[:protocols]
-        @handlers = args[:handlers]        
-        @server = WEBrick::HTTPServer.new(:BindAddress => args[:address], :Port => args[:port])
-        setup_handlers
-
-        @mutex.synchronize do
-            raise "WEBrick server is already listening" if @listening        
-            @listening = true
-            @thread = Thread.new { @server.start }
-        end
-    end
-    
-    def unlisten
-        @mutex.synchronize do
-            raise "WEBrick server is not listening" unless @listening
-            @server.shutdown
-            @thread.join
-            @server = nil
-            @listening = false
-        end
-    end
-    
-    def listening?
-        @mutex.synchronize do
-            @listening
-        end
-    end
-
-  private
-    
-    def setup_handlers
-        @protocols.each do |protocol|
-            klass = self.class.class_for_protocol(protocol)
-            @handlers.each do |handler|
-                @server.mount('/' + handler.to_s, klass, handler)
-                @server.mount('/' + handler.to_s + 's', klass, handler)
-            end
-        end
-    end
-end
diff --git a/lib/puppet/network/http/webrick/rest.rb b/lib/puppet/network/http/webrick/rest.rb
deleted file mode 100644
index a235fb4..0000000
--- a/lib/puppet/network/http/webrick/rest.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-require 'puppet/network/http/handler'
-
-class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
-
-    include Puppet::Network::HTTP::Handler
-
-    def initialize(server, handler)
-        raise ArgumentError, "server is required" unless server
-        super(server)
-        initialize_for_puppet(:server => server, :handler => handler)
-    end
-
-    # We had to expose this method for testing purposes.
-    def params(request)
-        result = request.query
-        result.merge(client_information(request))
-    end
-
-    # WEBrick uses a service() method to respond to requests.  Simply delegate to the handler response() method.
-    def service(request, response)
-        process(request, response)
-    end
-
-  private
-
-    def http_method(request)
-        request.request_method
-    end
-
-    def path(request)
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = '/' + request.path.split('/')[1]
-    end
-
-    def request_key(request)
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = request.path.split('/')[2]
-    end
-
-    def body(request)
-        request.body
-    end
-
-    def encode_result(request, response, result, status = 200)
-        response.status = status
-        response.body = result
-    end
-
-    # Retrieve node/cert/ip information from the request object.
-    def client_information(request)
-        result = {}
-        if peer = request.peeraddr and ip = peer[3]
-            result[:ip] = ip
-        end
-
-        # If they have a certificate (which will almost always be true)
-        # then we get the hostname from the cert, instead of via IP
-        # info
-        result[:authenticated] = false
-        if cert = request.client_cert and nameary = cert.subject.to_a.find { |ary| ary[0] == "CN" }
-            result[:node] = nameary[1]
-            result[:authenticated] = true
-        end
-
-        result
-    end
-end
diff --git a/lib/puppet/network/http_pool.rb b/lib/puppet/network/http_pool.rb
deleted file mode 100644
index 1227f78..0000000
--- a/lib/puppet/network/http_pool.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-require 'puppet/sslcertificates/support'
-require 'net/https'
-
-module Puppet::Network
-end
-
-# Manage Net::HTTP instances for keep-alive.
-module Puppet::Network::HttpPool
-    # 2008/03/23
-    # LAK:WARNING: Enabling this has a high propability of
-    # causing corrupt files and who knows what else.  See #1010.
-    HTTP_KEEP_ALIVE = false
-
-    def self.keep_alive?
-        HTTP_KEEP_ALIVE
-    end
-
-    # This handles reading in the key and such-like.
-    extend Puppet::SSLCertificates::Support
-    @http_cache = {}
-
-    # Clear our http cache, closing all connections.
-    def self.clear_http_instances
-        @http_cache.each do |name, connection|
-            connection.finish if connection.started?
-        end
-        @http_cache.clear
-        @cert = nil
-        @key = nil
-    end
-
-    # Make sure we set the driver up when we read the cert in.
-    def self.read_cert
-        if val = super # This calls read_cert from the Puppet::SSLCertificates::Support module.
-            # Clear out all of our connections, since they previously had no cert and now they
-            # should have them.
-            clear_http_instances
-            return val
-        else
-            return false
-        end
-    end
-
-    # Use cert information from a Puppet client to set up the http object.
-    def self.cert_setup(http)
-        # Just no-op if we don't have certs.
-        return false unless (defined?(@cert) and @cert) or self.read_cert
-
-        store = OpenSSL::X509::Store.new
-        store.add_file Puppet[:localcacert]
-        store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT
-
-        http.cert_store = store
-        http.ca_file = Puppet[:localcacert]
-        http.cert = self.cert
-        http.verify_mode = OpenSSL::SSL::VERIFY_PEER
-        http.key = self.key
-    end
-
-    # Retrieve a cached http instance of caching is enabled, else return
-    # a new one.
-    def self.http_instance(host, port, reset = false)
-        # We overwrite the uninitialized @http here with a cached one.
-        key = "%s:%s" % [host, port]
-
-        # Return our cached instance if we've got a cache, as long as we're not
-        # resetting the instance.
-        if keep_alive?
-            return @http_cache[key] if ! reset and @http_cache[key]
-
-            # Clean up old connections if we have them.
-            if http = @http_cache[key]
-                @http_cache.delete(key)
-                http.finish if http.started?
-            end
-        end
-
-        args = [host, port]
-        if Puppet[:http_proxy_host] == "none"
-            args << nil << nil
-        else
-            args << Puppet[:http_proxy_host] << Puppet[:http_proxy_port]
-        end
-        http = Net::HTTP.new(*args)
-
-        # Pop open the http client a little; older versions of Net::HTTP(s) didn't
-        # give us a reader for ca_file... Grr...
-        class << http; attr_accessor :ca_file; end
-
-        http.use_ssl = true
-        # Use configured timeout (#1176)
-        http.read_timeout = Puppet[:configtimeout]
-        http.open_timeout = Puppet[:configtimeout]
-        # JJM Configurable fix for #896.
-        if Puppet[:http_enable_post_connection_check]
-            http.enable_post_connection_check = true
-        else
-            http.enable_post_connection_check = false
-        end
-
-        cert_setup(http)
-
-        @http_cache[key] = http if keep_alive?
-
-        return http
-    end
-end
diff --git a/lib/puppet/network/http_server.rb b/lib/puppet/network/http_server.rb
deleted file mode 100644
index e3826a6..0000000
--- a/lib/puppet/network/http_server.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# Just a stub, so we can correctly scope other classes.
-module Puppet::Network::HTTPServer # :nodoc:
-end
diff --git a/lib/puppet/network/http_server/mongrel.rb b/lib/puppet/network/http_server/mongrel.rb
deleted file mode 100644
index 6b2325d..0000000
--- a/lib/puppet/network/http_server/mongrel.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/env ruby
-# File:       06-11-14-mongrel_xmlrpc.rb
-# Author:     Manuel Holtgrewe <purestorm at ggnore.net>
-#
-# Copyright (c) 2006 Manuel Holtgrewe, 2007 Luke Kanies
-# 
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-# 
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-# This file is based heavily on a file retrieved from
-# http://ttt.ggnore.net/2006/11/15/xmlrpc-with-mongrel-and-ruby-off-rails/
-
-require 'rubygems'
-require 'mongrel'
-require 'xmlrpc/server'
-require 'puppet/network/xmlrpc/server'
-require 'puppet/network/http_server'
-require 'puppet/network/client_request'
-require 'puppet/network/handler'
-require 'puppet/daemon'
-
-require 'resolv'
-
-# This handler can be hooked into Mongrel to accept HTTP requests. After
-# checking whether the request itself is sane, the handler forwards it
-# to an internal instance of XMLRPC::BasicServer to process it.
-#
-# You can access the server by calling the Handler's "xmlrpc_server"
-# attribute accessor method and add XMLRPC handlers there. For example:
-#
-# <pre>
-# handler = XmlRpcHandler.new
-# handler.xmlrpc_server.add_handler("my.add") { |a, b| a.to_i + b.to_i }
-# </pre>
-module Puppet::Network
-    class HTTPServer::Mongrel < ::Mongrel::HttpHandler
-        include Puppet::Daemon
-        attr_reader :xmlrpc_server
-
-        def initialize(handlers)
-            if Puppet[:debug]
-                $mongrel_debug_client = true
-                Puppet.debug 'Mongrel client debugging enabled. [$mongrel_debug_client = true].'
-            end
-            # Create a new instance of BasicServer. We are supposed to subclass it
-            # but that does not make sense since we would not introduce any new
-            # behaviour and we have to subclass Mongrel::HttpHandler so our handler
-            # works for Mongrel.
-            @xmlrpc_server = Puppet::Network::XMLRPCServer.new
-            handlers.each do |name, args|
-                unless handler = Puppet::Network::Handler.handler(name)
-                    raise ArgumentError, "Invalid handler %s" % name
-                end
-                @xmlrpc_server.add_handler(handler.interface, handler.new(args))
-            end
-        end
-
-        # This method produces the same results as XMLRPC::CGIServer.serve
-        # from Ruby's stdlib XMLRPC implementation.
-        def process(request, response)
-            # Make sure this has been a POST as required for XMLRPC.
-            request_method = request.params[Mongrel::Const::REQUEST_METHOD] || Mongrel::Const::GET
-            if request_method != "POST" then
-                response.start(405) { |head, out| out.write("Method Not Allowed") }
-                return
-            end
-
-            # Make sure the user has sent text/xml data.
-            request_mime = request.params["CONTENT_TYPE"] || "text/plain"
-            if parse_content_type(request_mime).first != "text/xml" then
-                response.start(400) { |head, out| out.write("Bad Request") }
-                return
-            end
-
-            # Make sure there is data in the body at all.
-            length = request.params[Mongrel::Const::CONTENT_LENGTH].to_i
-            if length <= 0 then
-                response.start(411) { |head, out| out.write("Length Required") }
-                return
-            end
-
-            # Check the body to be valid.
-            if request.body.nil? or request.body.size != length then
-                response.start(400) { |head, out| out.write("Bad Request") }
-                return
-            end
-
-            info = client_info(request)
-
-            # All checks above passed through
-            response.start(200) do |head, out|
-                head["Content-Type"] = "text/xml; charset=utf-8"
-                begin
-                    out.write(@xmlrpc_server.process(request.body, info))
-                rescue => detail
-                    puts detail.backtrace
-                    raise
-                end
-            end
-        end
-      
-        private
-
-        def client_info(request)
-            params = request.params
-            ip = params["REMOTE_ADDR"]
-            # JJM #906 The following dn.match regular expression is forgiving
-            # enough to match the two Distinguished Name string contents
-            # coming from Apache, Pound or other reverse SSL proxies.
-            if dn = params[Puppet[:ssl_client_header]] and dn_matchdata = dn.match(/^.*?CN\s*=\s*(.*)/)
-                client = dn_matchdata[1].to_str
-                valid = (params[Puppet[:ssl_client_verify_header]] == 'SUCCESS')
-            else
-                begin
-                    client = Resolv.getname(ip)
-                rescue => detail
-                    Puppet.err "Could not resolve %s: %s" % [ip, detail]
-                    client = "unknown"
-                end
-                valid = false
-            end
-
-            info = Puppet::Network::ClientRequest.new(client, ip, valid)
-
-            return info
-        end
-
-        # Taken from XMLRPC::ParseContentType
-        def parse_content_type(str)
-            a, *b = str.split(";")
-            return a.strip, *b
-        end  
-    end
-end
-
diff --git a/lib/puppet/network/http_server/rack.rb b/lib/puppet/network/http_server/rack.rb
deleted file mode 100644
index 806007a..0000000
--- a/lib/puppet/network/http_server/rack.rb
+++ /dev/null
@@ -1,148 +0,0 @@
-# Author: Christian Hofstaedtler <hofstaedtler at inqnet.at>
-# Copyright (c) 2006 Manuel Holtgrewe, 2007 Luke Kanies,
-#               2008 Christian Hofstaedtler
-#
-# This file is mostly based on the mongrel module, which is part of
-# the standard puppet distribution.
-#
-# puppet/network/http_server/mongrel.rb has the following license, 
-# and is based heavily on a file retrieved from:
-# http://ttt.ggnore.net/2006/11/15/xmlrpc-with-mongrel-and-ruby-off-rails/
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-
-require 'puppet'
-require 'puppet/network/handler'
-require 'puppet/sslcertificates'
-
-require 'xmlrpc/server'
-require 'puppet/network/xmlrpc/server'
-require 'puppet/network/http_server'
-require 'puppet/network/client_request'
-require 'puppet/network/handler'
-
-require 'resolv'
-require 'rack'
-
-# A handler for a Rack-style puppet(master)d. For the most part, it works 
-# exactly the same as HTTPServer::Mongrel:
-# After checking whether the request itself is sane, the handler forwards 
-# it to an internal instance of XMLRPC::BasicServer to process it.
-module Puppet::Network
-	class HTTPServer::Rack
-		attr_reader :xmlrpc_server
-
-		def initialize(handlers)
-			@debug = false
-			if Puppet[:debug]
-				@debug = true
-			end
-
-			Puppet.info "Starting Rack server for puppet version %s" % Puppet.version
-			if Puppet[:name] != "puppetmasterd" then
-				Puppet.warn 'Rack server is not named "puppetmasterd", this may be not what you want. ($0 = %s)' % $0
-			end
-
-			@xmlrpc_server = Puppet::Network::XMLRPCServer.new
-			handlers.each do |name, args|
-				unless handler = Puppet::Network::Handler.handler(name)
-					raise ArgumentError, "Invalid handler %s" % name
-				end
-				h = handler.new(args)
-				@xmlrpc_server.add_handler(handler.interface, h)
-			end
-			Puppet.info "Rack server is waiting to serve requests."
-		end
-
-		# Validate a rack-style request (in env), and run the requested XMLRPC
-		# call.
-		def process(env)
-			# time to serve a request
-			req = Rack::Request.new(env)
-
-			if @debug then
-				Puppet.info "Handling request, details:"
-				env.each do |name, val|
-					l = "  env: %s ->" % name
-					l = l + ' %s' % val
-					Puppet.info l
-				end
-			end
-
-			if not req.post? then
-				return [405, { "Content-Type" => "text/html" }, "Method Not Allowed"]
-			end
-			if req.media_type() != "text/xml" then
-				return [400, { "Content-Type" => "text/html" }, "Bad Request"]
-			end
-			if req.content_length().to_i <= 0 then
-				return [411, { "Content-Type" => "text/html" }, "Length Required"]
-			end
-
-			body = ''
-			req.body().each { |line| body = body + line }
-			if @debug then
-				Puppet.info "Request Body: %s" % body
-			end
-			if body.size != req.content_length().to_i then
-				if @debug then
-					Puppet.info "body length didnt match %d" % body.size
-					Puppet.info " vs. -> %d" % req.content_length().to_i
-				end
-				return [400, { "Content-Type" => "text/html" }, "Bad Request Length"]
-			end
-			info = client_info(env)
-			begin
-				data = @xmlrpc_server.process(body, info)
-				return [200, { "Content-Type" => "text/xml; charset=utf-8" }, data]
-			rescue => detail
-				Puppet.err "Rack: Internal Server Error: XMLRPC_Server.process problem. Details follow: "
-				detail.backtrace.each { |line| 	Puppet.err " --> %s" % line }
-				return [500, { "Content-Type" => "text/html" }, "Internal Server Error"]
-			end
-		end
-
-		private
-
-		def client_info(request)
-			ip = request["REMOTE_ADDR"]
-			# JJM #906 The following dn.match regular expression is forgiving
-			# enough to match the two Distinguished Name string contents
-			# coming from Apache, Pound or other reverse SSL proxies.
-			if dn = request[Puppet[:ssl_client_header]] and dn_matchdata = dn.match(/^.*?CN\s*=\s*(.*)/)
-				client = dn_matchdata[1].to_str
-				valid = (request[Puppet[:ssl_client_verify_header]] == 'SUCCESS')
-			else
-				begin
-					client = Resolv.getname(ip)
-				rescue => detail
-					Puppet.err "Could not resolve %s: %s" % [ip, detail]
-					client = "unknown"
-				end
-				valid = false
-			end
-			info = Puppet::Network::ClientRequest.new(client, ip, valid)
-			return info
-		end
-	end
-end
-
diff --git a/lib/puppet/network/http_server/webrick.rb b/lib/puppet/network/http_server/webrick.rb
deleted file mode 100644
index 568b4e7..0000000
--- a/lib/puppet/network/http_server/webrick.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-require 'puppet'
-require 'puppet/daemon'
-require 'webrick'
-require 'webrick/https'
-require 'fcntl'
-
-require 'puppet/sslcertificates/support'
-require 'puppet/network/xmlrpc/webrick_servlet'
-require 'puppet/network/http_server'
-require 'puppet/network/client'
-require 'puppet/network/handler'
-
-module Puppet
-    class ServerError < RuntimeError; end
-    module Network
-        # The old-school, pure ruby webrick server, which is the default serving
-        # mechanism.
-        class HTTPServer::WEBrick < WEBrick::HTTPServer
-            include Puppet::Daemon
-            include Puppet::SSLCertificates::Support
-
-            # Read the CA cert and CRL and populate an OpenSSL::X509::Store
-            # with them, with flags appropriate for checking client 
-            # certificates for revocation
-            def x509store
-                if Puppet[:cacrl] == 'false'
-                    # No CRL, no store needed
-                    return nil
-                end
-                unless File.exist?(Puppet[:cacrl])
-                    raise Puppet::Error, "Could not find CRL; set 'cacrl' to 'false' to disable CRL usage"
-                end
-                crl = OpenSSL::X509::CRL.new(File.read(Puppet[:cacrl]))
-                store = OpenSSL::X509::Store.new
-                store.purpose = OpenSSL::X509::PURPOSE_ANY
-                store.flags = OpenSSL::X509::V_FLAG_CRL_CHECK_ALL|OpenSSL::X509::V_FLAG_CRL_CHECK
-                unless self.ca_cert
-                    raise Puppet::Error, "Could not find CA certificate"
-                end
-
-                store.add_file(Puppet[:localcacert])
-                store.add_crl(crl)
-                return store
-            end
-
-            # Set up the http log.
-            def httplog
-                args = []
-
-                # yuck; separate http logs
-                file = nil
-                Puppet.settings.use(:main, :ssl, Puppet[:name])
-                if Puppet[:name] == "puppetmasterd"
-                    file = Puppet[:masterhttplog]
-                else
-                    file = Puppet[:httplog]
-                end
-
-                # open the log manually to prevent file descriptor leak
-                file_io = open(file, "a+")
-                file_io.sync
-                file_io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
-
-                args << file_io
-                if Puppet[:debug]
-                    args << WEBrick::Log::DEBUG
-                end
-
-                log = WEBrick::Log.new(*args)
-
-
-                return log
-            end
-
-            # Create our server, yo.
-            def initialize(hash = {})
-                Puppet.info "Starting server for Puppet version %s" % Puppet.version
-
-                if handlers = hash[:Handlers]
-                    handler_instances = setup_handlers(handlers)
-                else
-                    raise ServerError, "A server must have handlers"
-                end
-
-                unless self.read_cert
-                    if ca = handler_instances.find { |handler| handler.is_a?(Puppet::Network::Handler.ca) }
-                        request_cert(ca)
-                    else
-                        raise Puppet::Error, "No certificate and no CA; cannot get cert"
-                    end
-                end
-
-                setup_webrick(hash)
-
-                begin
-                    super(hash)
-                rescue => detail
-                    puts detail.backtrace if Puppet[:trace]
-                    raise Puppet::Error, "Could not start WEBrick: %s" % detail
-                end
-
-                # make sure children don't inherit the sockets
-                listeners.each { |sock|
-                    sock.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
-                }
-
-                Puppet.info "Listening on port %s" % hash[:Port]
-
-                # this creates a new servlet for every connection,
-                # but all servlets have the same list of handlers
-                # thus, the servlets can have their own state -- passing
-                # around the requests and such -- but the handlers
-                # have a global state
-
-                # mount has to be called after the server is initialized
-                servlet = Puppet::Network::XMLRPC::WEBrickServlet.new(
-                    handler_instances)
-                self.mount("/RPC2", servlet)
-            end
-
-            # Create a ca client to set up our cert for us.
-            def request_cert(ca)
-                client = Puppet::Network::Client.ca.new(:CA => ca)
-                unless client.request_cert
-                    raise Puppet::Error, "Could get certificate"
-                end
-            end
-
-            # Create all of our handler instances.
-            def setup_handlers(handlers)
-                unless handlers.is_a?(Hash)
-                    raise ServerError, "Handlers must have arguments"
-                end
-
-                handlers.collect { |handler, args|
-                    hclass = nil
-                    unless hclass = Puppet::Network::Handler.handler(handler)
-                        raise ServerError, "Invalid handler %s" % handler
-                    end
-                    hclass.new(args)
-                }
-            end
-
-            # Handle all of the many webrick arguments.
-            def setup_webrick(hash)
-                hash[:Port] ||= Puppet[:masterport]
-                hash[:Logger] ||= self.httplog
-                hash[:AccessLog] ||= [
-                    [ self.httplog, WEBrick::AccessLog::COMMON_LOG_FORMAT ],
-                    [ self.httplog, WEBrick::AccessLog::REFERER_LOG_FORMAT ]
-                ]
-
-                hash[:SSLCertificateStore] = x509store
-                hash[:SSLCertificate] = self.cert
-                hash[:SSLPrivateKey] = self.key
-                hash[:SSLStartImmediately] = true
-                hash[:SSLEnable] = true
-                hash[:SSLCACertificateFile] = Puppet[:localcacert]
-                hash[:SSLVerifyClient] = OpenSSL::SSL::VERIFY_PEER
-                hash[:SSLCertName] = nil
-
-                if addr = Puppet[:bindaddress] and addr != ""
-                    hash[:BindAddress] = addr
-                end
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/network/rest_controller.rb b/lib/puppet/network/rest_controller.rb
deleted file mode 100644
index 76a9830..0000000
--- a/lib/puppet/network/rest_controller.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class Puppet::Network::RESTController # :nodoc:
-end
diff --git a/lib/puppet/network/rights.rb b/lib/puppet/network/rights.rb
deleted file mode 100755
index a4133f2..0000000
--- a/lib/puppet/network/rights.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-require 'ipaddr'
-require 'puppet/network/authstore'
-
-# Define a set of rights and who has access to them.
-class Puppet::Network::Rights < Hash
-    # We basically just proxy directly to our rights.  Each Right stores
-    # its own auth abilities.
-    [:allow, :allowed?, :deny].each do |method|
-        define_method(method) do |name, *args|
-            name = name.intern if name.is_a? String
-
-            if obj = right(name)
-                obj.send(method, *args)
-            else
-                raise ArgumentError, "Unknown right '%s'" % name
-            end
-        end
-    end
-
-    def [](name)
-        name = name.intern if name.is_a? String
-        super(name)
-    end
-
-    # Define a new right to which access can be provided.
-    def newright(name)
-        name = name.intern if name.is_a? String
-        shortname = Right.shortname(name)
-        if self.include? name
-            raise ArgumentError, "Right '%s' is already defined" % name
-        else
-            self[name] = Right.new(name, shortname)
-        end
-    end
-
-    private
-
-    # Retrieve a right by name.
-    def right(name)
-        name = name.intern if name.is_a? String
-        self[name]
-    end
-
-    # A right.
-    class Right < Puppet::Network::AuthStore
-        attr_accessor :name, :shortname
-
-        Puppet::Util.logmethods(self, true)
-
-        def self.shortname(name)
-            name.to_s[0..0]
-        end
-
-        def initialize(name, shortname = nil)
-            @name = name
-            @shortname = shortname
-            unless @shortname
-                @shortname = Right.shortname(name)
-            end
-            super()
-        end
-
-        def to_s
-            "access[%s]" % @name
-        end
-
-        # There's no real check to do at this point
-        def valid?
-            true
-        end
-    end
-end
-
diff --git a/lib/puppet/network/server.rb b/lib/puppet/network/server.rb
deleted file mode 100644
index cab1451..0000000
--- a/lib/puppet/network/server.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-require 'puppet/network/http'
-
-class Puppet::Network::Server
-	attr_reader :server_type, :protocols, :address, :port
-
-    def initialize(args = {})
-        @server_type = Puppet[:servertype] or raise "No servertype configuration found."  # e.g.,  WEBrick, Mongrel, etc.
-        http_server_class || raise(ArgumentError, "Could not determine HTTP Server class for server type [#{@server_type}]")
-        @address = args[:address] || Puppet[:bindaddress] || 
-            raise(ArgumentError, "Must specify :address or configure Puppet :bindaddress.")
-        @port = args[:port] || Puppet[:masterport] ||
-            raise(ArgumentError, "Must specify :port or configure Puppet :masterport")
-        @protocols = [ :rest ]
-        @listening = false
-        @routes = {}
-        self.register(args[:handlers]) if args[:handlers]
-    end
-
-    def register(*indirections)
-  	    raise ArgumentError, "Indirection names are required." if indirections.empty?
-  	    indirections.flatten.each { |i| @routes[i.to_sym] = true }
-    end
-  
-    def unregister(*indirections)
-          raise "Cannot unregister indirections while server is listening." if listening?
-          indirections = @routes.keys if indirections.empty?
-
-          indirections.flatten.each do |i|
-    	        raise(ArgumentError, "Indirection [%s] is unknown." % i) unless @routes[i.to_sym]
-          end
-        
-          indirections.flatten.each do |i|
-    	        @routes.delete(i.to_sym)
-    	    end
-    end
-
-    def listening?
-  	    @listening
-    end
-  
-    def listen
-  	    raise "Cannot listen -- already listening." if listening?
-  	    @listening = true
-  	    http_server.listen(:address => address, :port => port, :handlers => @routes.keys, :protocols => protocols)
-    end
-  
-    def unlisten
-  	    raise "Cannot unlisten -- not currently listening." unless listening?
-  	    http_server.unlisten   
-  	    @listening = false
-    end
-    
-    def http_server_class
-        http_server_class_by_type(@server_type)
-    end
-
-  private
-  
-    def http_server
-        @http_server ||= http_server_class.new
-    end
-    
-    def http_server_class_by_type(kind)
-        Puppet::Network::HTTP.server_class_by_type(kind)
-    end
-end
-
diff --git a/lib/puppet/network/xmlrpc/client.rb b/lib/puppet/network/xmlrpc/client.rb
deleted file mode 100644
index c79f91d..0000000
--- a/lib/puppet/network/xmlrpc/client.rb
+++ /dev/null
@@ -1,155 +0,0 @@
-require 'puppet/sslcertificates'
-require 'puppet/network/http_pool'
-require 'openssl'
-require 'puppet/external/base64'
-
-require 'xmlrpc/client'
-require 'net/https'
-require 'yaml'
-
-module Puppet::Network
-    class ClientError < Puppet::Error; end
-    class XMLRPCClientError < Puppet::Error; end
-    class XMLRPCClient < ::XMLRPC::Client
-
-        attr_accessor :puppet_server, :puppet_port
-        @clients = {}
-
-        class << self
-            include Puppet::Util
-            include Puppet::Util::ClassGen
-        end
-
-        # Create a netclient for each handler
-        def self.mkclient(handler)
-            interface = handler.interface
-            namespace = interface.prefix
-
-            # Create a subclass for every client type.  This is
-            # so that all of the methods are on their own class,
-            # so that their namespaces can define the same methods if
-            # they want.
-            constant = handler.name.to_s.capitalize
-            name = namespace.downcase
-            newclient = genclass(name, :hash => @clients, :constant => constant)
-
-            interface.methods.each { |ary|
-                method = ary[0]
-                newclient.send(:define_method,method) { |*args|
-                    Puppet.debug "Calling %s.%s" % [namespace, method]
-                    begin
-                        call("%s.%s" % [namespace, method.to_s],*args)
-                    rescue OpenSSL::SSL::SSLError => detail
-                        if detail.message =~ /bad write retry/
-                            Puppet.warning "Transient SSL write error; restarting connection and retrying"
-                            self.recycle_connection
-                            retry
-                        end
-                        ["certificate verify failed", "hostname was not match", "hostname not match"].each do |str|
-                            if detail.message.include?(str)
-                                Puppet.warning "Certificate validation failed; consider using the certname configuration option"
-                            end
-                        end 
-                        raise XMLRPCClientError,
-                            "Certificates were not trusted: %s" % detail
-                    rescue ::XMLRPC::FaultException => detail
-                        raise XMLRPCClientError, detail.faultString
-                    rescue Errno::ECONNREFUSED => detail
-                        msg = "Could not connect to %s on port %s" %
-                            [@host, @port]
-                        raise XMLRPCClientError, msg
-                    rescue SocketError => detail
-                        Puppet.err "Could not find server %s: %s" %
-                            [@host, detail.to_s]
-                        error = XMLRPCClientError.new(
-                            "Could not find server %s" % @host
-                        )
-                        error.set_backtrace detail.backtrace
-                        raise error
-                    rescue Errno::EPIPE, EOFError
-                        Puppet.warning "Other end went away; restarting connection and retrying"
-                        self.recycle_connection
-                        retry
-                    rescue Timeout::Error => detail
-                        Puppet.err "Connection timeout calling %s.%s: %s" %
-                            [namespace, method, detail.to_s]
-                        raise XMLRPCClientError.new("Connection Timeout").set_backtrace(detail.backtrace)
-                    rescue => detail
-                        if detail.message =~ /^Wrong size\. Was \d+, should be \d+$/
-                            Puppet.warning "XMLRPC returned wrong size.  Retrying."
-                            retry
-                        end    
-                        Puppet.err "Could not call %s.%s: %s" %
-                            [namespace, method, detail.inspect]
-                        error = XMLRPCClientError.new(detail.to_s)
-                        error.set_backtrace detail.backtrace
-                        raise error
-                    end
-                }
-            }
-
-            return newclient
-        end
-
-        def self.handler_class(handler)
-            @clients[handler] || self.mkclient(handler)
-        end
-
-        def http
-            unless @http
-                @http = Puppet::Network::HttpPool.http_instance(@host, @port, true)
-            end
-            @http
-        end
-
-        def initialize(hash = {})
-            hash[:Path] ||= "/RPC2"
-            hash[:Server] ||= Puppet[:server]
-            hash[:Port] ||= Puppet[:masterport]
-            hash[:HTTPProxyHost] ||= Puppet[:http_proxy_host]
-            hash[:HTTPProxyPort] ||= Puppet[:http_proxy_port]
-
-            if "none" == hash[:HTTPProxyHost]
-                hash[:HTTPProxyHost] = nil
-                hash[:HTTPProxyPort] = nil
-            end
-
-            super(
-                hash[:Server],
-                hash[:Path],
-                hash[:Port],
-                hash[:HTTPProxyHost],
-                hash[:HTTPProxyPort],
-                nil, # user
-                nil, # password
-                true, # use_ssl
-                Puppet[:configtimeout] # use configured timeout (#1176)
-            )
-            @http = Puppet::Network::HttpPool.http_instance(@host, @port)
-        end
- 
-        # Get rid of our existing connection, replacing it with a new one.
-        # This should only happen if we lose our connection somehow (e.g., an EPIPE)
-        # or we've just downloaded certs and we need to create new http instances
-        # with the certs added.
-        def recycle_connection
-            @http = Puppet::Network::HttpPool.http_instance(@host, @port, true) # reset the instance
-        end
-        
-        def start
-            begin
-                @http.start unless @http.started?
-            rescue => detail
-                Puppet.err "Could not connect to server: %s" % detail
-            end
-        end
-
-        def local
-            false
-        end
-
-        def local?
-            false
-        end
-    end
-end
diff --git a/lib/puppet/network/xmlrpc/processor.rb b/lib/puppet/network/xmlrpc/processor.rb
deleted file mode 100644
index 2c2dc61..0000000
--- a/lib/puppet/network/xmlrpc/processor.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-require 'puppet/network/authorization'
-require 'xmlrpc/server'
-
-# Just silly.
-class ::XMLRPC::FaultException
-    def to_s
-        self.message
-    end
-end
-
-module Puppet::Network
-    # Most of our subclassing is just so that we can get
-    # access to information from the request object, like
-    # the client name and IP address.
-    module XMLRPCProcessor
-        include Puppet::Network::Authorization
-
-        ERR_UNAUTHORIZED = 30
-
-        def add_handler(interface, handler)
-            @loadedhandlers << interface.prefix
-            super(interface, handler)
-        end
-
-        def handler_loaded?(handler)
-            @loadedhandlers.include?(handler.to_s)
-        end
-
-        # Convert our data and client request into xmlrpc calls, and verify
-        # they're authorized and such-like.  This method differs from the
-        # default in that it expects a ClientRequest object in addition to the
-        # data.
-        def process(data, request)
-            call, params = parser().parseMethodCall(data)
-            params << request.name << request.ip
-            handler, method = call.split(".")
-            request.handler = handler
-            request.method = method
-            begin
-                verify(request)
-            rescue InvalidClientRequest => detail
-                raise ::XMLRPC::FaultException.new(ERR_UNAUTHORIZED, detail.to_s)
-            end
-            handle(request.call, *params)
-        end
-
-        private
-
-        # Provide error handling for method calls.
-        def protect_service(obj, *args)
-            begin
-                obj.call(*args)
-            rescue ::XMLRPC::FaultException
-                raise
-            rescue Puppet::AuthorizationError => detail
-                Puppet.err "Permission denied: %s" % detail.to_s
-                raise ::XMLRPC::FaultException.new(
-                    1, detail.to_s
-                )
-            rescue Puppet::Error => detail
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-                Puppet.err detail.to_s
-                error = ::XMLRPC::FaultException.new(
-                    1, detail.to_s
-                )
-                error.set_backtrace detail.backtrace
-                raise error
-            rescue => detail
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-                Puppet.err "Could not call: %s" % detail.to_s
-                error = ::XMLRPC::FaultException.new(1, detail.to_s)
-                error.set_backtrace detail.backtrace
-                raise error
-            end
-        end
-
-        # Set up our service hook and init our handler list.
-        def setup_processor
-            @loadedhandlers = []
-            self.set_service_hook do |obj, *args|
-                protect_service(obj, *args)
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/network/xmlrpc/server.rb b/lib/puppet/network/xmlrpc/server.rb
deleted file mode 100644
index e743526..0000000
--- a/lib/puppet/network/xmlrpc/server.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'xmlrpc/server'
-require 'puppet/network/authorization'
-require 'puppet/network/xmlrpc/processor'
-
-module Puppet::Network
-    # Most of our subclassing is just so that we can get
-    # access to information from the request object, like
-    # the client name and IP address.
-    class XMLRPCServer < ::XMLRPC::BasicServer
-        include Puppet::Util
-        include Puppet::Network::XMLRPCProcessor
-
-        def initialize
-            super()
-            setup_processor()
-        end
-    end
-end
-
diff --git a/lib/puppet/network/xmlrpc/webrick_servlet.rb b/lib/puppet/network/xmlrpc/webrick_servlet.rb
deleted file mode 100644
index 9a46ffb..0000000
--- a/lib/puppet/network/xmlrpc/webrick_servlet.rb
+++ /dev/null
@@ -1,120 +0,0 @@
-require 'xmlrpc/server'
-require 'puppet/network/authorization'
-require 'puppet/network/xmlrpc/processor'
-
-module Puppet::Network::XMLRPC
-    class ServletError < RuntimeError; end
-    class WEBrickServlet < ::XMLRPC::WEBrickServlet
-        include Puppet::Network::XMLRPCProcessor
-
-        # This is a hackish way to avoid an auth message every time we have a
-        # normal operation
-        def self.log(msg)
-            unless defined? @logs
-                @logs = {}
-            end
-            if @logs.include?(msg)
-                @logs[msg] += 1
-            else
-                Puppet.info msg
-                @logs[msg] = 1
-            end
-        end
-
-        # Accept a list of handlers and register them all.
-        def initialize(handlers)
-            # the servlet base class does not consume any arguments
-            # and its BasicServer base class only accepts a 'class_delim'
-            # option which won't change in Puppet at all
-            # thus, we don't need to pass any args to our base class,
-            # and we can consume them all ourselves
-            super()
-
-            setup_processor()
-
-            # Set up each of the passed handlers.
-            handlers.each do |handler|
-                add_handler(handler.class.interface, handler)
-            end
-        end
-
-        # Handle the actual request.  We can't use the super() method, because
-        # we need to pass a ClientRequest object to process() so we can do
-        # authorization.  It's the only way to stay thread-safe.
-        def service(request, response)
-            if @valid_ip 
-                raise WEBrick::HTTPStatus::Forbidden unless @valid_ip.any? { |ip| request.peeraddr[3] =~ ip }
-            end
-
-            if request.request_method != "POST"
-                raise WEBrick::HTTPStatus::MethodNotAllowed,
-                    "unsupported method `#{request.request_method}'."
-            end
-
-            if parse_content_type(request['Content-type']).first != "text/xml" 
-                raise WEBrick::HTTPStatus::BadRequest
-            end 
-
-            length = (request['Content-length'] || 0).to_i
-
-            raise WEBrick::HTTPStatus::LengthRequired unless length > 0
-
-            data = request.body
-
-            if data.nil? or data.size != length
-                raise WEBrick::HTTPStatus::BadRequest
-            end
-
-            resp = process(data, client_request(request))
-            if resp.nil? or resp.size <= 0  
-                raise WEBrick::HTTPStatus::InternalServerError
-            end
-
-            response.status = 200
-            response['Content-Length'] = resp.size
-            response['Content-Type']   = "text/xml; charset=utf-8"
-            response.body = resp 
-        end
-
-        private
-
-        # Generate a ClientRequest object for later validation.
-        def client_request(request)
-            if peer = request.peeraddr
-                client = peer[2]
-                clientip = peer[3]
-            else
-                raise ::XMLRPC::FaultException.new(
-                    ERR_UNCAUGHT_EXCEPTION,
-                    "Could not retrieve client information"
-                )
-            end
-
-            # If they have a certificate (which will almost always be true)
-            # then we get the hostname from the cert, instead of via IP
-            # info
-            valid = false
-            if cert = request.client_cert
-                nameary = cert.subject.to_a.find { |ary|
-                    ary[0] == "CN"
-                }   
-
-                if nameary.nil?
-                    Puppet.warning "Could not retrieve server name from cert"
-                else
-                    unless client == nameary[1]
-                        Puppet.debug "Overriding %s with cert name %s" %
-                            [client, nameary[1]]
-                        client = nameary[1]
-                    end
-                    valid = true
-                end
-            end
-
-            info = Puppet::Network::ClientRequest.new(client, clientip, valid)
-
-            return info
-        end
-    end
-end
-
diff --git a/lib/puppet/node.rb b/lib/puppet/node.rb
deleted file mode 100644
index e10299d..0000000
--- a/lib/puppet/node.rb
+++ /dev/null
@@ -1,120 +0,0 @@
-require 'puppet/indirector'
-
-# A class for managing nodes, including their facts and environment.
-class Puppet::Node
-    require 'puppet/node/facts'
-    require 'puppet/node/environment'
-
-    # Set up indirection, so that nodes can be looked for in
-    # the node sources.
-    extend Puppet::Indirector
-
-    # Use the node source as the indirection terminus.
-    indirects :node, :terminus_setting => :node_terminus, :doc => "Where to find node information.
-        A node is composed of its name, its facts, and its environment."
-
-    attr_accessor :name, :classes, :parameters, :source, :ipaddress
-    attr_reader :time
-    attr_writer :environment
-
-    # Do not return environments that are the empty string, and use
-    # explicitly set environments, then facts, then a central env
-    # value.
-    def environment
-        unless @environment
-            if env = parameters["environment"]
-                @environment = env
-            else
-                @environment = Puppet::Node::Environment.new.name.to_s
-            end
-        end
-        @environment
-    end
-
-    def initialize(name, options = {})
-        unless name
-            raise ArgumentError, "Node names cannot be nil"
-        end
-        @name = name
-
-        # Provide a default value.
-        if names = options[:names]
-            if names.is_a?(String)
-                @names = [names]
-            else
-                @names = names
-            end
-        else
-            @names = [name]
-        end
-
-        if classes = options[:classes]
-            if classes.is_a?(String)
-                @classes = [classes]
-            else
-                @classes = classes
-            end
-        else
-            @classes = []
-        end
-
-        @parameters = options[:parameters] || {}
-
-        self.environment = options[:environment] if options[:environment]
-
-        @time = Time.now
-    end
-
-    # Merge the node facts with parameters from the node source.
-    def fact_merge
-        if facts = Puppet::Node::Facts.find(name)
-            merge(facts.values)
-        else
-            Puppet.warning "Could not find facts for %s; you probably have a discrepancy between the node and fact names" % name
-        end
-    end
-
-    # Merge any random parameters into our parameter list.
-    def merge(params)
-        params.each do |name, value|
-            @parameters[name] = value unless @parameters.include?(name)
-        end
-    end
-
-    # Calculate the list of names we might use for looking
-    # up our node.  This is only used for AST nodes.
-    def names
-        names = []
-
-        # First, get the fqdn
-        unless fqdn = parameters["fqdn"]
-            if parameters["hostname"] and parameters["domain"]
-                 fqdn = parameters["hostname"] + "." + parameters["domain"]
-            else
-                 Puppet.warning "Host is missing hostname and/or domain: %s" % name
-            end
-        end
-
-        # Now that we (might) have the fqdn, add each piece to the name
-        # list to search, in order of longest to shortest.
-        if fqdn
-            list = fqdn.split(".")
-            tmp = []
-            list.each_with_index do |short, i|
-                tmp << list[0..i].join(".")
-            end
-            names += tmp.reverse
-        end
-
-        # And make sure the node name is first, since that's the most
-        # likely usage.
-        #   The name is usually the Certificate CN, but it can be
-        # set to the 'facter' hostname instead.
-        if Puppet[:node_name] == 'cert'
-            names.unshift name
-        else
-            names.unshift parameters["hostname"]
-        end
-        names.uniq
-    end
-end
diff --git a/lib/puppet/node/catalog.rb b/lib/puppet/node/catalog.rb
deleted file mode 100644
index 1792738..0000000
--- a/lib/puppet/node/catalog.rb
+++ /dev/null
@@ -1,531 +0,0 @@
-require 'puppet/indirector'
-require 'puppet/pgraph'
-require 'puppet/transaction'
-
-require 'puppet/util/tagging'
-
-# This class models a node catalog.  It is the thing
-# meant to be passed from server to client, and it contains all
-# of the information in the catalog, including the resources
-# and the relationships between them.
-class Puppet::Node::Catalog < Puppet::PGraph
-    extend Puppet::Indirector
-    indirects :catalog, :terminus_class => :compiler
-
-    include Puppet::Util::Tagging
-
-    # The host name this is a catalog for.
-    attr_accessor :name
-
-    # The catalog version.  Used for testing whether a catalog
-    # is up to date.
-    attr_accessor :version
-
-    # How long this catalog took to retrieve.  Used for reporting stats.
-    attr_accessor :retrieval_duration
-
-    # How we should extract the catalog for sending to the client.
-    attr_reader :extraction_format
-
-    # We need the ability to set this externally, so we can yaml-dump the
-    # catalog.
-    attr_accessor :edgelist_class
-
-    # Whether this is a host catalog, which behaves very differently.
-    # In particular, reports are sent, graphs are made, and state is
-    # stored in the state database.  If this is set incorrectly, then you often
-    # end up in infinite loops, because catalogs are used to make things
-    # that the host catalog needs.
-    attr_accessor :host_config
-
-    # Whether this graph is another catalog's relationship graph.
-    # We don't want to accidentally create a relationship graph for another
-    # relationship graph.
-    attr_accessor :is_relationship_graph
-
-    # Whether this catalog was retrieved from the cache, which affects
-    # whether it is written back out again.
-    attr_accessor :from_cache
-
-    # Add classes to our class list.
-    def add_class(*classes)
-        classes.each do |klass|
-            @classes << klass
-        end
-
-        # Add the class names as tags, too.
-        tag(*classes)
-    end
-
-    # Add one or more resources to our graph and to our resource table.
-    def add_resource(*resources)
-        resources.each do |resource|
-            unless resource.respond_to?(:ref)
-                raise ArgumentError, "Can only add objects that respond to :ref"
-            end
-
-            fail_unless_unique(resource)
-
-            ref = resource.ref
-
-            @resource_table[ref] = resource
-
-            # If the name and title differ, set up an alias
-            #self.alias(resource, resource.name) if resource.respond_to?(:name) and resource.respond_to?(:title) and resource.name != resource.title
-            if resource.respond_to?(:name) and resource.respond_to?(:title) and resource.name != resource.title
-                self.alias(resource, resource.name) if resource.isomorphic?
-            end
-
-            resource.catalog = self if resource.respond_to?(:catalog=) and ! is_relationship_graph
-
-            add_vertex(resource)
-        end
-    end
-
-    # Create an alias for a resource.
-    def alias(resource, name)
-        #set $1 
-        resource.ref =~ /^(.+)\[/
-
-        newref = "%s[%s]" % [$1 || resource.class.name, name]
-
-        # LAK:NOTE It's important that we directly compare the references,
-        # because sometimes an alias is created before the resource is
-        # added to the catalog, so comparing inside the below if block
-        # isn't sufficient.
-        return if newref == resource.ref
-        if existing = @resource_table[newref]
-            return if existing == resource
-            raise(ArgumentError, "Cannot alias %s to %s; resource %s already exists" % [resource.ref, name, newref])
-        end
-        @resource_table[newref] = resource
-        @aliases[resource.ref] << newref
-    end
-
-    # Apply our catalog to the local host.  Valid options
-    # are:
-    #   :tags - set the tags that restrict what resources run
-    #       during the transaction
-    #   :ignoreschedules - tell the transaction to ignore schedules
-    #       when determining the resources to run
-    def apply(options = {})
-        @applying = true
-
-        Puppet::Util::Storage.load if host_config?
-        transaction = Puppet::Transaction.new(self)
-
-        transaction.tags = options[:tags] if options[:tags]
-        transaction.ignoreschedules = true if options[:ignoreschedules]
-
-        transaction.addtimes :config_retrieval => @retrieval_duration
-
-
-        begin
-            transaction.evaluate
-        rescue Puppet::Error => detail
-            Puppet.err "Could not apply complete catalog: %s" % detail
-        rescue => detail
-            puts detail.backtrace if Puppet[:trace]
-            Puppet.err "Got an uncaught exception of type %s: %s" % [detail.class, detail]
-        ensure
-            # Don't try to store state unless we're a host config
-            # too recursive.
-            Puppet::Util::Storage.store if host_config?
-        end
-
-        yield transaction if block_given?
-        
-        transaction.send_report if host_config and (Puppet[:report] or Puppet[:summarize])
-
-        return transaction
-    ensure
-        @applying = false
-        cleanup()
-        transaction.cleanup if defined? transaction and transaction
-    end
-
-    # Are we in the middle of applying the catalog?
-    def applying?
-        @applying
-    end
-    
-    def clear(remove_resources = true)
-        super()
-        # We have to do this so that the resources clean themselves up.
-        @resource_table.values.each { |resource| resource.remove } if remove_resources
-        @resource_table.clear
-
-        if defined?(@relationship_graph) and @relationship_graph
-            @relationship_graph.clear(false)
-            @relationship_graph = nil
-        end
-    end
-
-    def classes
-        @classes.dup
-    end
-
-    # Create an implicit resource, meaning that it will lose out
-    # to any explicitly defined resources.  This method often returns
-    # nil.
-    #  The quirk of this method is that it's not possible to create
-    # an implicit resource before an explicit resource of the same name,
-    # because all explicit resources are created before any generate()
-    # methods are called on the individual resources.  Thus, this
-    # method can safely just check if an explicit resource already exists
-    # and toss this implicit resource if so.
-    def create_implicit_resource(type, options)
-        unless options.include?(:implicit)
-            options[:implicit] = true
-        end
-
-        # This will return nil if an equivalent explicit resource already exists.
-        # When resource classes no longer retain references to resource instances,
-        # this will need to be modified to catch that conflict and discard
-        # implicit resources.
-        if resource = create_resource(type, options)
-            resource.implicit = true
-
-            return resource
-        else
-            return nil
-        end
-    end
-
-    # Create a new resource and register it in the catalog.
-    def create_resource(type, options)
-        unless klass = Puppet::Type.type(type)
-            raise ArgumentError, "Unknown resource type %s" % type
-        end
-        return unless resource = klass.create(options)
-
-        @transient_resources << resource if applying?
-        add_resource(resource)
-        if @relationship_graph
-            @relationship_graph.add_resource(resource) unless @relationship_graph.resource(resource.ref)
-        end
-        resource
-    end
-
-    # Make sure we support the requested extraction format.
-    def extraction_format=(value)
-        unless respond_to?("extract_to_%s" % value)
-            raise ArgumentError, "Invalid extraction format %s" % value
-        end
-        @extraction_format = value
-    end
-
-    # Turn our catalog graph into whatever the client is expecting.
-    def extract
-        send("extract_to_%s" % extraction_format)
-    end
-
-    # Create the traditional TransBuckets and TransObjects from our catalog
-    # graph.  This will hopefully be deprecated soon.
-    def extract_to_transportable
-        top = nil
-        current = nil
-        buckets = {}
-
-        unless main = vertices.find { |res| res.type == "Class" and res.title == :main }
-            raise Puppet::DevError, "Could not find 'main' class; cannot generate catalog"
-        end
-
-        # Create a proc for examining edges, which we'll use to build our tree
-        # of TransBuckets and TransObjects.
-        bucket = nil
-        walk(main, :out) do |source, target|
-            # The sources are always non-builtins.
-            unless tmp = buckets[source.to_s]
-                if tmp = buckets[source.to_s] = source.to_trans
-                    bucket = tmp
-                else
-                    # This is because virtual resources return nil.  If a virtual
-                    # container resource contains realized resources, we still need to get
-                    # to them.  So, we keep a reference to the last valid bucket
-                    # we returned and use that if the container resource is virtual.
-                end
-            end
-            bucket = tmp || bucket
-            if child = target.to_trans
-                unless bucket
-                    raise "No bucket created for %s" % source
-                end
-                bucket.push child
-
-                # It's important that we keep a reference to any TransBuckets we've created, so
-                # we don't create multiple buckets for children.
-                unless target.builtin?
-                    buckets[target.to_s] = child
-                end
-            end
-        end
-
-        # Retrieve the bucket for the top-level scope and set the appropriate metadata.
-        unless result = buckets[main.to_s]
-            # This only happens when the catalog is entirely empty.
-            result = buckets[main.to_s] = main.to_trans
-        end
-
-        result.classes = classes
-
-        # Clear the cache to encourage the GC
-        buckets.clear
-        return result
-    end
-
-    # Make sure all of our resources are "finished".
-    def finalize
-        make_default_resources
-
-        @resource_table.values.each { |resource| resource.finish }
-        
-        write_graph(:resources)
-    end
-
-    def host_config?
-        host_config || false
-    end
-
-    def initialize(name = nil)
-        super()
-        @name = name if name
-        @extraction_format ||= :transportable
-        @classes = []
-        @resource_table = {}
-        @transient_resources = []
-        @applying = false
-        @relationship_graph = nil
-
-        @aliases = Hash.new { |hash, key| hash[key] = [] }
-
-        if block_given?
-            yield(self)
-            finalize()
-        end
-    end
-
-    # Make the default objects necessary for function.
-    def make_default_resources
-        # We have to add the resources to the catalog, or else they won't get cleaned up after
-        # the transaction.
-
-        # First create the default scheduling objects
-        Puppet::Type.type(:schedule).mkdefaultschedules.each { |res| add_resource(res) unless resource(res.ref) }
-        
-        # And filebuckets
-        if bucket = Puppet::Type.type(:filebucket).mkdefaultbucket
-            add_resource(bucket)
-        end
-    end
-    
-    # Create a graph of all of the relationships in our catalog.
-    def relationship_graph
-        raise(Puppet::DevError, "Tried get a relationship graph for a relationship graph") if self.is_relationship_graph
-
-        unless defined? @relationship_graph and @relationship_graph
-            # It's important that we assign the graph immediately, because
-            # the debug messages below use the relationships in the
-            # relationship graph to determine the path to the resources
-            # spitting out the messages.  If this is not set,
-            # then we get into an infinite loop.
-            @relationship_graph = Puppet::Node::Catalog.new
-            @relationship_graph.host_config = host_config?
-            @relationship_graph.is_relationship_graph = true
-            
-            # First create the dependency graph
-            self.vertices.each do |vertex|
-                @relationship_graph.add_vertex vertex
-                vertex.builddepends.each do |edge|
-                    @relationship_graph.add_edge(edge)
-                end
-            end
-            
-            # Lastly, add in any autorequires
-            @relationship_graph.vertices.each do |vertex|
-                vertex.autorequire.each do |edge|
-                    unless @relationship_graph.edge?(edge.source, edge.target) # don't let automatic relationships conflict with manual ones.
-                        unless @relationship_graph.edge?(edge.target, edge.source)
-                            vertex.debug "Autorequiring %s" % [edge.source]
-                            @relationship_graph.add_edge(edge)
-                        else
-                            vertex.debug "Skipping automatic relationship with %s" % (edge.source == vertex ? edge.target : edge.source)
-                        end
-                    end
-                end
-            end
-            
-            @relationship_graph.write_graph(:relationships)
-            
-            # Then splice in the container information
-            @relationship_graph.splice!(self, Puppet::Type::Component)
-
-            @relationship_graph.write_graph(:expanded_relationships)
-        end
-        @relationship_graph
-    end
-
-    # Remove the resource from our catalog.  Notice that we also call
-    # 'remove' on the resource, at least until resource classes no longer maintain
-    # references to the resource instances.
-    def remove_resource(*resources)
-        resources.each do |resource|
-            @resource_table.delete(resource.ref)
-            @aliases[resource.ref].each { |res_alias| @resource_table.delete(res_alias) }
-            @aliases[resource.ref].clear
-            remove_vertex!(resource) if vertex?(resource)
-            @relationship_graph.remove_vertex!(resource) if @relationship_graph and @relationship_graph.vertex?(resource)
-            resource.remove
-        end
-    end
-
-    # Look a resource up by its reference (e.g., File[/etc/passwd]).
-    def resource(type, title = nil)
-        # Always create a resource reference, so that it always canonizes how we
-        # are referring to them.
-        if title
-            ref = Puppet::ResourceReference.new(type, title).to_s
-        else
-            # If they didn't provide a title, then we expect the first
-            # argument to be of the form 'Class[name]', which our
-            # Reference class canonizes for us.
-            ref = Puppet::ResourceReference.new(nil, type).to_s
-        end
-        if resource = @resource_table[ref]
-            return resource
-        elsif defined?(@relationship_graph) and @relationship_graph
-            @relationship_graph.resource(ref)
-        end
-    end
-
-    # Return an array of all resources.
-    def resources
-        @resource_table.keys
-    end
-
-    # Convert our catalog into a RAL catalog.
-    def to_ral
-        to_catalog :to_type
-    end
-
-    # Turn our parser catalog into a transportable catalog.
-    def to_transportable
-        to_catalog :to_transobject
-    end
-
-    # Produce the graph files if requested.
-    def write_graph(name)
-        # We only want to graph the main host catalog.
-        return unless host_config?
-        
-        return unless Puppet[:graph]
-
-        Puppet.settings.use(:graphing)
-
-        file = File.join(Puppet[:graphdir], "%s.dot" % name.to_s)
-        File.open(file, "w") { |f|
-            f.puts to_dot("name" => name.to_s.capitalize)
-        }
-    end
-
-    # LAK:NOTE We cannot yaml-dump the class in the edgelist_class, because classes cannot be
-    # dumped by default, nor does yaml-dumping # the edge-labels work at this point (I don't
-    # know why).
-    #  Neither of these matters right now, but I suppose it could at some point.
-    # We also have to have the vertex_dict dumped after the resource table, because yaml can't
-    # seem to handle the output of yaml-dumping the vertex_dict.
-    def to_yaml_properties
-        props = instance_variables.reject { |v| %w{@edgelist_class @edge_labels @vertex_dict}.include?(v) }
-        props << "@vertex_dict"
-        props
-    end
-
-    private
-
-    def cleanup
-        unless @transient_resources.empty?
-            remove_resource(*@transient_resources)
-            @transient_resources.clear
-            @relationship_graph = nil
-        end
-    end
-
-    # Verify that the given resource isn't defined elsewhere.
-    def fail_unless_unique(resource)
-        # Short-curcuit the common case, 
-        return unless existing_resource = @resource_table[resource.ref]
-
-        # Either it's a defined type, which are never
-        # isomorphic, or it's a non-isomorphic type, so
-        # we should throw an exception.
-        msg = "Duplicate definition: %s is already defined" % resource.ref
-
-        if existing_resource.file and existing_resource.line
-            msg << " in file %s at line %s" %
-                [existing_resource.file, existing_resource.line]
-        end
-
-        if resource.line or resource.file
-            msg << "; cannot redefine"
-        end
-
-        raise ArgumentError.new(msg)
-    end
-
-    # An abstracted method for converting one catalog into another type of catalog.
-    # This pretty much just converts all of the resources from one class to another, using
-    # a conversion method.
-    def to_catalog(convert)
-        result = self.class.new(self.name)
-
-        map = {}
-        vertices.each do |resource|
-            next if resource.respond_to?(:virtual?) and resource.virtual?
-
-            #This is hackity hack for 1094
-            #Aliases aren't working in the ral catalog because the current instance of the resource
-            #has a reference to the catalog being converted. . . So, give it a reference to the new one
-            #problem solved. . .
-            if resource.is_a?(Puppet::TransObject)
-                resource = resource.dup
-                resource.catalog = result
-            elsif resource.is_a?(Puppet::Parser::Resource)
-                resource = resource.to_transobject
-                resource.catalog = result
-            end
-
-            newres = resource.send(convert)
-
-            # We can't guarantee that resources don't munge their names
-            # (like files do with trailing slashes), so we have to keep track
-            # of what a resource got converted to.
-            map[resource.ref] = newres
-
-            result.add_resource newres
-        end
-
-        message = convert.to_s.gsub "_", " "
-        edges.each do |edge|
-            # Skip edges between virtual resources.
-            next if edge.source.respond_to?(:virtual?) and edge.source.virtual?
-            next if edge.target.respond_to?(:virtual?) and edge.target.virtual?
-
-            unless source = map[edge.source.ref]
-                raise Puppet::DevError, "Could not find resource %s when converting %s resources" % [edge.source.ref, message]
-            end
-
-            unless target = map[edge.target.ref]
-                raise Puppet::DevError, "Could not find resource %s when converting %s resources" % [edge.target.ref, message]
-            end
-
-            result.add_edge(source, target, edge.label)
-        end
-
-        map.clear
-
-        result.add_class(*self.classes)
-        result.tag(*self.tags)
-
-        return result
-    end
-end
diff --git a/lib/puppet/node/environment.rb b/lib/puppet/node/environment.rb
deleted file mode 100644
index b64b9c2..0000000
--- a/lib/puppet/node/environment.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# Model the environment that a node can operate in.  This class just
-# provides a simple wrapper for the functionality around environments.
-class Puppet::Node::Environment
-    @seen = {}
-
-    # Return an existing environment instance, or create a new one.
-    def self.new(name = nil)
-        name ||= Puppet.settings.value(:environment)
-
-        raise ArgumentError, "Environment name must be specified" unless name
-
-        symbol = name.to_sym
-
-        return @seen[symbol] if @seen[symbol]
-
-        obj = self.allocate
-        obj.send :initialize, symbol
-        @seen[symbol] = obj
-    end
-
-    attr_reader :name
-
-    # Return an environment-specific setting.
-    def [](param)
-        Puppet.settings.value(param, self.name)
-    end
-
-    def initialize(name)
-        @name = name
-    end
-end
diff --git a/lib/puppet/node/facts.rb b/lib/puppet/node/facts.rb
deleted file mode 100755
index 8ee90b4..0000000
--- a/lib/puppet/node/facts.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-require 'puppet/node'
-require 'puppet/indirector'
-
-# Manage a given node's facts.  This either accepts facts and stores them, or
-# returns facts for a given node.
-class Puppet::Node::Facts
-    # Set up indirection, so that nodes can be looked for in
-    # the node sources.
-    extend Puppet::Indirector
-
-    # We want to expire any cached nodes if the facts are saved.
-    module NodeExpirer
-        def save(instance, *args)
-            Puppet::Node.expire(instance.name)
-            super
-        end
-    end
-
-    # Use the node source as the indirection terminus.
-    indirects :facts, :terminus_class => :facter, :extend => NodeExpirer
-
-    attr_accessor :name, :values
-
-    def initialize(name, values = {})
-        @name = name
-        @values = values
-
-        add_internal
-    end
-
-    private
-
-    # Add internal data to the facts for storage.
-    def add_internal
-        self.values[:_timestamp] = Time.now
-    end
-
-    # Strip out that internal data.
-    def strip_internal
-        newvals = values.dup
-        newvals.find_all { |name, value| name.to_s =~ /^_/ }.each { |name, value| newvals.delete(name) }
-        newvals
-    end
-end
diff --git a/lib/puppet/parameter.rb b/lib/puppet/parameter.rb
deleted file mode 100644
index f90193f..0000000
--- a/lib/puppet/parameter.rb
+++ /dev/null
@@ -1,466 +0,0 @@
-require 'puppet/util/methodhelper'
-require 'puppet/util/log_paths'
-require 'puppet/util/logging'
-require 'puppet/util/docs'
-
-class Puppet::Parameter
-    include Puppet::Util
-    include Puppet::Util::Errors
-    include Puppet::Util::LogPaths
-    include Puppet::Util::Logging
-    include Puppet::Util::MethodHelper
-    class << self
-        include Puppet::Util
-        include Puppet::Util::Docs
-        attr_reader :validater, :munger, :name, :default, :required_features
-        attr_accessor :metaparam
-
-        # Define the default value for a given parameter or parameter.  This
-        # means that 'nil' is an invalid default value.  This defines
-        # the 'default' instance method.
-        def defaultto(value = nil, &block)
-            if block
-                define_method(:default, &block)
-            else
-                if value.nil?
-                    raise Puppet::DevError,
-                        "Either a default value or block must be provided"
-                end
-                define_method(:default) do value end
-            end
-        end
-
-        # Return a documentation string.  If there are valid values,
-        # then tack them onto the string.
-        def doc
-            @doc ||= ""
-
-            unless defined? @addeddocvals
-                unless values.empty?
-                    if @aliasvalues.empty?
-                        @doc += "  Valid values are ``" +
-                            values.join("``, ``") + "``."
-                    else
-                        @doc += "  Valid values are "
-
-                        @doc += values.collect do |value|
-                            ary = @aliasvalues.find do |name, val|
-                                val == value
-                            end
-                            if ary
-                                "``%s`` (also called ``%s``)" % [value, ary[0]]
-                            else
-                                "``#{value}``"
-                            end
-                        end.join(", ") + "."
-                    end
-                end
-
-                if defined? @parameterregexes and ! @parameterregexes.empty?
-                    regs = @parameterregexes
-                    if @parameterregexes.is_a? Hash
-                        regs = @parameterregexes.keys
-                    end
-                    unless regs.empty?
-                        @doc += "  Values can also match ``" +
-                            regs.join("``, ``") + "``."
-                    end
-                end
-
-                if f = self.required_features
-                    @doc += "  Requires features %s." % f.flatten.collect { |f| f.to_s }.join(" ")
-                end
-                @addeddocvals = true
-            end
-
-            @doc
-        end
-
-        def nodefault
-            if public_method_defined? :default
-                undef_method :default
-            end
-        end
-
-        # Store documentation for this parameter.
-        def desc(str)
-            @doc = str
-        end
-
-        def initvars
-            @parametervalues = []
-            @aliasvalues = {}
-            @parameterregexes = []
-        end
-
-        # This is how we munge the value.  Basically, this is our
-        # opportunity to convert the value from one form into another.
-        def munge(&block)
-            # I need to wrap the unsafe version in begin/rescue parameterments,
-            # but if I directly call the block then it gets bound to the
-            # class's context, not the instance's, thus the two methods,
-            # instead of just one.
-            define_method(:unsafe_munge, &block)
-
-            define_method(:munge) do |*args|
-                begin
-                    ret = unsafe_munge(*args)
-                rescue Puppet::Error => detail
-                    Puppet.debug "Reraising %s" % detail
-                    raise
-                rescue => detail
-                    raise Puppet::DevError, "Munging failed for value %s in class %s: %s" %
-                        [args.inspect, self.name, detail], detail.backtrace
-                end
-
-                if self.shadow
-                    self.shadow.munge(*args)
-                end
-                ret
-            end
-        end
-
-        # Mark whether we're the namevar.
-        def isnamevar
-            @isnamevar = true
-            @required = true
-        end
-
-        # Is this parameter the namevar?  Defaults to false.
-        def isnamevar?
-            if defined? @isnamevar
-                return @isnamevar
-            else
-                return false
-            end
-        end
-
-        # This parameter is required.
-        def isrequired
-            @required = true
-        end
-
-        # Is this parameter required?  Defaults to false.
-        def required?
-            if defined? @required
-                return @required
-            else
-                return false
-            end
-        end
-
-        # Verify that we got a good value
-        def validate(&block)
-            #@validater = block
-            define_method(:unsafe_validate, &block)
-
-            define_method(:validate) do |*args|
-                begin
-                    unsafe_validate(*args)
-                rescue ArgumentError, Puppet::Error, TypeError
-                    raise
-                rescue => detail
-                    raise Puppet::DevError,
-                        "Validate method failed for class %s: %s" %
-                        [self.name, detail], detail.backtrace
-                end
-            end
-        end
-
-        # Does the value match any of our regexes?
-        def match?(value)
-            value = value.to_s unless value.is_a? String
-            @parameterregexes.find { |r|
-                r = r[0] if r.is_a? Array # Properties use a hash here
-                r =~ value
-            }
-        end
-
-        # Define a new value for our parameter.
-        def newvalues(*names)
-            names.each { |name|
-                name = name.intern if name.is_a? String
-
-                case name
-                when Symbol
-                    if @parametervalues.include?(name)
-                        Puppet.warning "%s already has a value for %s" %
-                            [name, name]
-                    end
-                    @parametervalues << name
-                when Regexp
-                    if @parameterregexes.include?(name)
-                        Puppet.warning "%s already has a value for %s" %
-                            [name, name]
-                    end
-                    @parameterregexes << name
-                else
-                    raise ArgumentError, "Invalid value %s of type %s" %
-                        [name, name.class]
-                end
-            }
-        end
-
-        def aliasvalue(name, other)
-            other = symbolize(other)
-            unless @parametervalues.include?(other)
-                raise Puppet::DevError,
-                    "Cannot alias nonexistent value %s" % other
-            end
-
-            @aliasvalues[name] = other
-        end
-
-        def alias(name)
-            @aliasvalues[name]
-        end
-
-        def regexes
-            return @parameterregexes.dup
-        end
-
-        def required_features=(*args)
-            @required_features = args.flatten.collect { |a| a.to_s.downcase.intern }
-        end
-
-        # Return the list of valid values.
-        def values
-            #[@aliasvalues.keys, @parametervalues.keys].flatten
-            if @parametervalues.is_a? Array
-                return @parametervalues.dup
-            elsif @parametervalues.is_a? Hash
-                return @parametervalues.keys
-            else
-                return []
-            end
-        end
-    end
-
-    # Just a simple method to proxy instance methods to class methods
-    def self.proxymethods(*values)
-        values.each { |val|
-            define_method(val) do
-                self.class.send(val)
-            end
-        }
-    end
-
-    # And then define one of these proxies for each method in our
-    # ParamHandler class.
-    proxymethods("required?", "isnamevar?")
-
-    attr_accessor :resource
-    # LAK 2007-05-09: Keep the @parent around for backward compatibility.
-    attr_accessor :parent
-    attr_reader :shadow
-
-    def devfail(msg)
-        self.fail(Puppet::DevError, msg)
-    end
-
-    def fail(*args)
-        type = nil
-        if args[0].is_a?(Class)
-            type = args.shift
-        else
-            type = Puppet::Error
-        end
-
-        error = type.new(args.join(" "))
-
-        if defined? @resource and @resource and @resource.line
-            error.line = @resource.line
-        end
-
-        if defined? @resource and @resource and @resource.file
-            error.file = @resource.file
-        end
-
-        raise error
-    end
-
-    # Basic parameter initialization.
-    def initialize(options = {})
-        options = symbolize_options(options)
-        if resource = options[:resource]
-            self.resource = resource
-            options.delete(:resource)
-        else
-            raise Puppet::DevError, "No resource set for %s" % self.class.name
-        end
-
-        if ! self.metaparam? and klass = Puppet::Type.metaparamclass(self.class.name)
-            setup_shadow(klass)
-        end
-
-        set_options(options)
-    end
-
-    # Log a message using the resource's log level.
-    def log(msg)
-        unless @resource[:loglevel]
-            p @resource
-            self.devfail "Parent %s has no loglevel" %
-                @resource.name
-        end
-        Puppet::Util::Log.create(
-            :level => @resource[:loglevel],
-            :message => msg,
-            :source => self
-        )
-    end
-
-    # Is this parameter a metaparam?
-    def metaparam?
-        self.class.metaparam
-    end
-
-    # each parameter class must define the name() method, and parameter
-    # instances do not change that name this implicitly means that a given
-    # object can only have one parameter instance of a given parameter
-    # class
-    def name
-        return self.class.name
-    end
-
-    # for testing whether we should actually do anything
-    def noop
-        unless defined? @noop
-            @noop = false
-        end
-        tmp = @noop || self.resource.noop || Puppet[:noop] || false
-        #debug "noop is %s" % tmp
-        return tmp
-    end
-
-    # return the full path to us, for logging and rollback; not currently
-    # used
-    def pathbuilder
-        if defined? @resource and @resource
-            return [@resource.pathbuilder, self.name]
-        else
-            return [self.name]
-        end
-    end
-
-    # If the specified value is allowed, then munge appropriately.
-    munge do |value|
-        if self.class.values.empty? and self.class.regexes.empty?
-            # This parameter isn't using defined values to do its work.
-            return value
-        end
-
-        # We convert to a string and then a symbol so that things like
-        # booleans work as we expect.
-        intern = value.to_s.intern
-
-        # If it's a valid value, always return it as a symbol.
-        if self.class.values.include?(intern)
-            retval = intern
-        elsif other = self.class.alias(intern)
-            retval = other
-        elsif ary = self.class.match?(value)
-            retval = value
-        else
-            # If it passed the validation but is not a registered value,
-            # we just return it as is.
-            retval = value
-        end
-
-        retval
-    end
-
-    # Verify that the passed value is valid.
-    validate do |value|
-        vals = self.class.values
-        regs = self.class.regexes
-
-        # this is true on properties
-        regs = regs.keys if regs.is_a?(Hash)
-
-        # This parameter isn't using defined values to do its work.
-        return if vals.empty? and regs.empty?
-
-        newval = value
-        newval = value.to_s.intern unless value.is_a?(Symbol)
-
-        name = newval
-
-        unless vals.include?(newval) or name = self.class.alias(newval) or name = self.class.match?(value) # We match the string, not the symbol
-            str = "Invalid '%s' value %s. " %
-                [self.class.name, value.inspect]
-
-            unless vals.empty?
-                str += "Valid values are %s. " % vals.join(", ")
-            end
-
-            unless regs.empty?
-                str += "Valid values match %s." % regs.collect { |r|
-                    r.to_s
-                }.join(", ")
-            end
-
-            raise ArgumentError, str
-        end
-
-        # Now check for features.
-        name = name[0] if name.is_a?(Array) # This is true for regexes.
-        validate_features_per_value(name) if is_a?(Puppet::Property)
-    end
-
-    def remove
-        @resource = nil
-        @shadow = nil
-    end
-
-    attr_reader :value
-
-    # Store the value provided.  All of the checking should possibly be
-    # late-binding (e.g., users might not exist when the value is assigned
-    # but might when it is asked for).
-    def value=(value)
-        if respond_to?(:validate)
-            validate(value)
-        end
-
-        if respond_to?(:munge)
-            value = munge(value)
-        end
-        @value = value
-    end
-
-    def inspect
-        s = "Parameter(%s = %s" % [self.name, self.value || "nil"]
-        if defined? @resource
-            s += ", @resource = %s)" % @resource
-        else
-            s += ")"
-        end
-    end
-
-    # Retrieve the resource's provider.  Some types don't have providers, in which
-    # case we return the resource object itself.
-    def provider
-        @resource.provider || @resource
-    end
-
-    # If there's a shadowing metaparam, instantiate it now.
-    # This allows us to create a property or parameter with the
-    # same name as a metaparameter, and the metaparam will only be
-    # stored as a shadow.
-    def setup_shadow(klass)
-        @shadow = klass.new(:resource => self.resource)
-    end
-
-    def to_s
-        s = "Parameter(%s)" % self.name
-    end
-
-    # Make sure that we've got all of the required features for a given value.
-    def validate_features_per_value(value)
-        if features = self.class.value_option(value, :required_features)
-            raise ArgumentError, "Provider must have features '%s' to set '%s' to '%s'" % [features, self.class.name, value] unless provider.satisfies?(features)
-        end
-    end
-end
-
diff --git a/lib/puppet/parser/ast.rb b/lib/puppet/parser/ast.rb
deleted file mode 100644
index ddf8852..0000000
--- a/lib/puppet/parser/ast.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-# the parent class for all of our syntactical objects
-
-require 'puppet'
-require 'puppet/util/autoload'
-
-# The base class for all of the objects that make up the parse trees.
-# Handles things like file name, line #, and also does the initialization
-# for all of the parameters of all of the child objects.
-class Puppet::Parser::AST
-    # Do this so I don't have to type the full path in all of the subclasses
-    AST = Puppet::Parser::AST
-
-    include Puppet::Util::Errors
-    include Puppet::Util::MethodHelper
-    attr_accessor :line, :file, :parent, :scope
-
-    # Does this ast object set something?  If so, it gets evaluated first.
-    def self.settor?
-        if defined? @settor
-            @settor
-        else
-            false
-        end
-    end
-
-    # Evaluate the current object.  Just a stub method, since the subclass
-    # should override this method.
-    # of the contained children and evaluates them in turn, returning a
-    # list of all of the collected values, rejecting nil values
-    def evaluate(*options)
-        raise Puppet::DevError, "Did not override #evaluate in %s" % self.class
-    end
-
-    # Throw a parse error.
-    def parsefail(message)
-        self.fail(Puppet::ParseError, message)
-    end
-
-    # Wrap a statemp in a reusable way so we always throw a parse error.
-    def parsewrap
-        exceptwrap :type => Puppet::ParseError do
-            yield
-        end
-    end
-
-    # The version of the evaluate method that should be called, because it
-    # correctly handles errors.  It is critical to use this method because
-    # it can enable you to catch the error where it happens, rather than
-    # much higher up the stack.
-    def safeevaluate(*options)
-        # We duplicate code here, rather than using exceptwrap, because this
-        # is called so many times during parsing.
-        begin
-            return self.evaluate(*options)
-        rescue Puppet::Error => detail
-            raise adderrorcontext(detail)
-        rescue => detail
-            error = Puppet::Error.new(detail.to_s)
-            # We can't use self.fail here because it always expects strings,
-            # not exceptions.
-            raise adderrorcontext(error, detail)
-        end
-    end
-
-    # Initialize the object.  Requires a hash as the argument, and
-    # takes each of the parameters of the hash and calls the settor
-    # method for them.  This is probably pretty inefficient and should
-    # likely be changed at some point.
-    def initialize(args)
-        @file = nil
-        @line = nil
-        set_options(args)
-    end
-end
-
-# And include all of the AST subclasses.
-require 'puppet/parser/ast/arithmetic_operator'
-require 'puppet/parser/ast/astarray'
-require 'puppet/parser/ast/branch'
-require 'puppet/parser/ast/boolean_operator'
-require 'puppet/parser/ast/caseopt'
-require 'puppet/parser/ast/casestatement'
-require 'puppet/parser/ast/collection'
-require 'puppet/parser/ast/collexpr'
-require 'puppet/parser/ast/comparison_operator'
-require 'puppet/parser/ast/definition'
-require 'puppet/parser/ast/else'
-require 'puppet/parser/ast/function'
-require 'puppet/parser/ast/hostclass'
-require 'puppet/parser/ast/ifstatement'
-require 'puppet/parser/ast/leaf'
-require 'puppet/parser/ast/minus'
-require 'puppet/parser/ast/node'
-require 'puppet/parser/ast/nop'
-require 'puppet/parser/ast/not'
-require 'puppet/parser/ast/resource'
-require 'puppet/parser/ast/resource_defaults'
-require 'puppet/parser/ast/resource_override'
-require 'puppet/parser/ast/resource_reference'
-require 'puppet/parser/ast/resourceparam'
-require 'puppet/parser/ast/selector'
-require 'puppet/parser/ast/tag'
-require 'puppet/parser/ast/vardef'
diff --git a/lib/puppet/parser/ast/arithmetic_operator.rb b/lib/puppet/parser/ast/arithmetic_operator.rb
deleted file mode 100644
index 8d9cef8..0000000
--- a/lib/puppet/parser/ast/arithmetic_operator.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-require 'puppet'
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    class ArithmeticOperator < AST::Branch
-
-        attr_accessor :operator, :lval, :rval
-
-        # Iterate across all of our children.
-        def each
-            [@lval, at rval, at operator].each { |child| yield child }
-        end
-
-        # Returns a boolean which is the result of the boolean operation
-        # of lval and rval operands
-        def evaluate(scope)
-            # evaluate the operands, should return a boolean value
-            lval = @lval.safeevaluate(scope)
-            lval = Puppet::Parser::Scope.number?(lval)
-            if lval == nil
-                raise ArgumentError, "left operand of %s is not a number" % @operator
-            end
-            rval = @rval.safeevaluate(scope)
-            rval = Puppet::Parser::Scope.number?(rval)
-            if rval == nil
-                raise ArgumentError, "right operand of %s is not a number" % @operator
-            end
-
-            # compute result
-            lval.send(@operator, rval)
-        end
-
-        def initialize(hash)
-            super
-
-            unless %w{+ - * / << >>}.include?(@operator)
-                raise ArgumentError, "Invalid arithmetic operator %s" % @operator
-            end
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/astarray.rb b/lib/puppet/parser/ast/astarray.rb
deleted file mode 100644
index 8f09aa9..0000000
--- a/lib/puppet/parser/ast/astarray.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # The basic container class.  This object behaves almost identically
-    # to a normal array except at initialization time.  Note that its name
-    # is 'AST::ASTArray', rather than plain 'AST::Array'; I had too many
-    # bugs when it was just 'AST::Array', because things like
-    # 'object.is_a?(Array)' never behaved as I expected.
-    class ASTArray < Branch
-        include Enumerable
-
-        # Return a child by index.  Probably never used.
-        def [](index)
-            @children[index]
-        end
-
-        # Evaluate our children.
-        def evaluate(scope)
-            # Make a new array, so we don't have to deal with the details of
-            # flattening and such
-            items = []
-            
-            # First clean out any AST::ASTArrays
-            @children.each { |child|
-                if child.instance_of?(AST::ASTArray)
-                    child.each do |ac|
-                        items << ac
-                    end
-                else
-                    items << child
-                end
-            }
-
-            rets = items.flatten.collect { |child|
-                child.safeevaluate(scope)
-            }
-            return rets.reject { |o| o.nil? }
-        end
-
-        def push(*ary)
-            ary.each { |child|
-                #Puppet.debug "adding %s(%s) of type %s to %s" %
-                #    [child, child.object_id, child.class.to_s.sub(/.+::/,''),
-                #    self.object_id]
-                @children.push(child)
-            }
-
-            return self
-        end
-    end
-
-    # A simple container class, containing the parameters for an object.
-    # Used for abstracting the grammar declarations.  Basically unnecessary
-    # except that I kept finding bugs because I had too many arrays that
-    # meant completely different things.
-    class ResourceInstance < ASTArray; end
-end
diff --git a/lib/puppet/parser/ast/boolean_operator.rb b/lib/puppet/parser/ast/boolean_operator.rb
deleted file mode 100644
index c3b5c7d..0000000
--- a/lib/puppet/parser/ast/boolean_operator.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require 'puppet'
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    class BooleanOperator < AST::Branch
-
-        attr_accessor :operator, :lval, :rval
-
-        # Iterate across all of our children.
-        def each
-            [@lval, at rval, at operator].each { |child| yield child }
-        end
-
-        # Returns a boolean which is the result of the boolean operation
-        # of lval and rval operands
-        def evaluate(scope)
-            # evaluate the first operand, should return a boolean value
-            lval = @lval.safeevaluate(scope)
-            
-            # return result
-            # lazy evaluate right operand
-            case @operator
-            when "and";
-                if Puppet::Parser::Scope.true?(lval)
-                    rval = @rval.safeevaluate(scope)
-                    Puppet::Parser::Scope.true?(rval)
-                else # false and false == false
-                    false
-                end
-            when "or"; 
-                if Puppet::Parser::Scope.true?(lval) 
-                    true
-                else
-                    rval = @rval.safeevaluate(scope)
-                    Puppet::Parser::Scope.true?(rval)
-                end
-            end
-        end
-
-        def initialize(hash)
-            super
-
-            unless %w{and or}.include?(@operator)
-                raise ArgumentError, "Invalid boolean operator %s" % @operator
-            end
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/branch.rb b/lib/puppet/parser/ast/branch.rb
deleted file mode 100644
index dcd09ba..0000000
--- a/lib/puppet/parser/ast/branch.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-class Puppet::Parser::AST
-    # The parent class of all AST objects that contain other AST objects.
-    # Everything but the really simple objects descend from this.  It is
-    # important to note that Branch objects contain other AST objects only --
-    # if you want to contain values, use a descendent of the AST::Leaf class.
-    class Branch < AST
-        include Enumerable
-        attr_accessor :pin, :children
-
-        # Yield each contained AST node in turn.  Used mostly by 'evaluate'.
-        # This definition means that I don't have to override 'evaluate'
-        # every time, but each child of Branch will likely need to override
-        # this method.
-        def each
-            @children.each { |child|
-                yield child
-            }
-        end
-
-        # Initialize our object.  Largely relies on the method from the base
-        # class, but also does some verification.
-        def initialize(arghash)
-            super(arghash)
-
-            # Create the hash, if it was not set at initialization time.
-            unless defined? @children
-                @children = []
-            end
-
-            # Verify that we only got valid AST nodes.
-            @children.each { |child|
-                unless child.is_a?(AST)
-                    raise Puppet::DevError,
-                        "child %s is a %s instead of ast" % [child, child.class]
-                end
-            }
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/caseopt.rb b/lib/puppet/parser/ast/caseopt.rb
deleted file mode 100644
index 824bde8..0000000
--- a/lib/puppet/parser/ast/caseopt.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # Each individual option in a case statement.
-    class CaseOpt < AST::Branch
-        attr_accessor :value, :statements
-
-        # CaseOpt is a bit special -- we just want the value first,
-        # so that CaseStatement can compare, and then it will selectively
-        # decide whether to fully evaluate this option
-
-        def each
-            [@value, at statements].each { |child| yield child }
-        end
-
-        # Are we the default option?
-        def default?
-            # Cache the @default value.
-            if defined? @default
-                return @default
-            end
-
-            if @value.is_a?(AST::ASTArray)
-                @value.each { |subval|
-                    if subval.is_a?(AST::Default)
-                        @default = true
-                        break
-                    end
-                }
-            else
-                if @value.is_a?(AST::Default)
-                    @default = true
-                end
-            end
-
-            unless defined? @default
-                @default = false
-            end
-
-            return @default
-        end
-
-        # You can specify a list of values; return each in turn.
-        def eachvalue(scope)
-            if @value.is_a?(AST::ASTArray)
-                @value.each { |subval|
-                    yield subval.safeevaluate(scope)
-                }
-            else
-                yield @value.safeevaluate(scope)
-            end
-        end
-
-        # Evaluate the actual statements; this only gets called if
-        # our option matched.
-        def evaluate(scope)
-            return @statements.safeevaluate(scope)
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/casestatement.rb b/lib/puppet/parser/ast/casestatement.rb
deleted file mode 100644
index aa03090..0000000
--- a/lib/puppet/parser/ast/casestatement.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # The basic logical structure in Puppet.  Supports a list of
-    # tests and statement arrays.
-    class CaseStatement < AST::Branch
-        attr_accessor :test, :options, :default
-
-        # Short-curcuit evaluation.  Return the value of the statements for
-        # the first option that matches.
-        def evaluate(scope)
-            value = @test.safeevaluate(scope)
-            sensitive = Puppet[:casesensitive]
-            value = value.downcase if ! sensitive and value.respond_to?(:downcase)
-
-            retvalue = nil
-            found = false
-            
-            # Iterate across the options looking for a match.
-            default = nil
-            @options.each { |option|
-                option.eachvalue(scope) { |opval|
-                    opval = opval.downcase if ! sensitive and opval.respond_to?(:downcase)
-                    if opval == value
-                        found = true
-                        break
-                    end
-                }
-
-                if found
-                    # we found a matching option
-                    retvalue = option.safeevaluate(scope)
-                    break
-                end
-
-                if option.default?
-                    default = option
-                end
-            }
-
-            # Unless we found something, look for the default.
-            unless found
-                if default
-                    retvalue = default.safeevaluate(scope)
-                else
-                    Puppet.debug "No true answers and no default"
-                    retvalue = nil
-                end
-            end
-            return retvalue
-        end
-
-        def each
-            [@test, at options].each { |child| yield child }
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/collection.rb b/lib/puppet/parser/ast/collection.rb
deleted file mode 100644
index 9e795a3..0000000
--- a/lib/puppet/parser/ast/collection.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require 'puppet'
-require 'puppet/parser/ast/branch'
-require 'puppet/parser/collector'
-
-# An object that collects stored objects from the central cache and returns
-# them to the current host, yo.
-class Puppet::Parser::AST
-class Collection < AST::Branch
-    attr_accessor :type, :query, :form
-
-    # We return an object that does a late-binding evaluation.
-    def evaluate(scope)
-        if self.query
-            str, code = self.query.safeevaluate scope
-        else
-            str = code = nil
-        end
-
-        newcoll = Puppet::Parser::Collector.new(scope, @type, str, code, self.form)
-
-        scope.compiler.add_collection(newcoll)
-
-        newcoll
-    end
-end
-end
diff --git a/lib/puppet/parser/ast/collexpr.rb b/lib/puppet/parser/ast/collexpr.rb
deleted file mode 100644
index baed325..0000000
--- a/lib/puppet/parser/ast/collexpr.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-require 'puppet'
-require 'puppet/parser/ast/branch'
-require 'puppet/parser/collector'
-
-# An object that collects stored objects from the central cache and returns
-# them to the current host, yo.
-class Puppet::Parser::AST
-class CollExpr < AST::Branch
-    attr_accessor :test1, :test2, :oper, :form, :type, :parens
-
-    # We return an object that does a late-binding evaluation.
-    def evaluate(scope)
-        # Make sure our contained expressions have all the info they need.
-        [@test1, @test2].each do |t|
-            if t.is_a?(self.class)
-                t.form ||= self.form
-                t.type ||= self.type
-            end
-        end
-
-        # The code is only used for virtual lookups
-        str1, code1 = @test1.safeevaluate scope
-        str2, code2 = @test2.safeevaluate scope
-
-        # First build up the virtual code.
-        # If we're a conjunction operator, then we're calling code.  I did
-        # some speed comparisons, and it's at least twice as fast doing these
-        # case statements as doing an eval here.
-        code = proc do |resource|
-            case @oper
-            when "and": code1.call(resource) and code2.call(resource)
-            when "or": code1.call(resource) or code2.call(resource)
-            when "==":
-                if resource[str1].is_a?(Array) && form != :exported
-                    resource[str1].include?(str2)
-                else
-                    resource[str1] == str2
-                end
-            when "!=": resource[str1] != str2
-            end
-        end
-
-        # Now build up the rails conditions code
-        if self.parens and self.form == :exported
-            Puppet.warning "Parentheses are ignored in Rails searches"
-        end
-
-        case @oper
-        when "and", "or":
-            if form == :exported
-                raise Puppet::ParseError, "Puppet does not currently support collecting exported resources with more than one condition"
-            end
-            oper = @oper.upcase
-        when "==": oper = "="
-        else
-            oper = @oper
-        end
-
-        if oper == "=" or oper == "!="
-            # Add the rails association info where necessary
-            if str1 == "title"
-                str = "title #{oper} '#{str2}'"
-            else
-                str = "param_values.value #{oper} '#{str2}' and " +
-                    "param_names.name = '#{str1}'"
-            end
-        else
-            str = "(%s) %s (%s)" % [str1, oper, str2]
-        end
-        
-        return str, code
-    end
-
-    def initialize(hash = {})
-        super
-
-        unless %w{== != and or}.include?(@oper)
-            raise ArgumentError, "Invalid operator %s" % @oper
-        end
-    end
-end
-end
diff --git a/lib/puppet/parser/ast/comparison_operator.rb b/lib/puppet/parser/ast/comparison_operator.rb
deleted file mode 100644
index 63aa36c..0000000
--- a/lib/puppet/parser/ast/comparison_operator.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-require 'puppet'
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    class ComparisonOperator < AST::Branch
-
-        attr_accessor :operator, :lval, :rval
-
-        # Iterate across all of our children.
-        def each
-            [@lval, at rval, at operator].each { |child| yield child }
-        end
-
-        # Returns a boolean which is the result of the boolean operation
-        # of lval and rval operands
-        def evaluate(scope)
-            # evaluate the operands, should return a boolean value
-            lval = @lval.safeevaluate(scope)
-            rval = @rval.safeevaluate(scope)
-
-            # return result
-            unless @operator == '!='
-                lval.send(@operator,rval)
-            else
-                lval != rval
-            end
-        end
-
-        def initialize(hash)
-            super
-
-            unless %w{== != < > <= >=}.include?(@operator)
-                raise ArgumentError, "Invalid comparison operator %s" % @operator
-            end
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/definition.rb b/lib/puppet/parser/ast/definition.rb
deleted file mode 100644
index 0c65c70..0000000
--- a/lib/puppet/parser/ast/definition.rb
+++ /dev/null
@@ -1,201 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-require 'puppet/util/warnings'
-
-# The AST class for defined types, which is also the base class
-# nodes and classes.
-class Puppet::Parser::AST::Definition < Puppet::Parser::AST::Branch
-    include Puppet::Util::Warnings
-    class << self
-        attr_accessor :name
-    end
-
-    # The class name
-    @name = :definition
-
-    attr_accessor :classname, :arguments, :code, :scope, :keyword
-    attr_accessor :exported, :namespace, :parser, :virtual, :name
-
-    attr_reader :parentclass
-
-    def child_of?(klass)
-        false
-    end
-
-    # Create a resource that knows how to evaluate our actual code.
-    def evaluate(scope)
-        resource = Puppet::Parser::Resource.new(:type => self.class.name, :title => self.classname, :scope => scope, :source => scope.source)
-
-        scope.catalog.tag(*resource.tags)
-
-        scope.compiler.add_resource(scope, resource)
-
-        return resource
-    end
-
-    # Now evaluate the code associated with this class or definition.
-    def evaluate_code(resource)
-        # Create a new scope.
-        scope = subscope(resource.scope, resource)
-
-        set_resource_parameters(scope, resource)
-
-        if self.code
-            return self.code.safeevaluate(scope)
-        else
-            return nil
-        end
-    end
-
-    def initialize(hash = {})
-        @arguments = nil
-        @parentclass = nil
-        super
-
-        # Convert the arguments to a hash for ease of later use.
-        if @arguments
-            unless @arguments.is_a? Array
-                @arguments = [@arguments]
-            end
-            oldargs = @arguments
-            @arguments = {}
-            oldargs.each do |arg, val|
-                @arguments[arg] = val
-            end
-        else
-            @arguments = {}
-        end
-
-        # Deal with metaparams in the argument list.
-        @arguments.each do |arg, defvalue|
-            next unless Puppet::Type.metaparamclass(arg)
-            if defvalue
-                warnonce "%s is a metaparam; this value will inherit to all contained resources" % arg
-            else
-                raise Puppet::ParseError, "%s is a metaparameter; please choose another parameter name in the %s definition" % [arg, self.classname]
-            end
-        end
-    end
-
-    def find_parentclass
-        @parser.findclass(namespace, parentclass)
-    end
-
-    # Set our parent class, with a little check to avoid some potential
-    # weirdness.
-    def parentclass=(name)
-        if name == self.classname
-            parsefail "Parent classes must have dissimilar names"
-        end
-
-        @parentclass = name
-    end
-
-    # Hunt down our class object.
-    def parentobj
-        return nil unless @parentclass
-
-        # Cache our result, since it should never change.
-        unless defined?(@parentobj)
-            unless tmp = find_parentclass
-                parsefail "Could not find %s parent %s" % [self.class.name, @parentclass]
-            end
-
-            if tmp == self
-                parsefail "Parent classes must have dissimilar names"
-            end
-
-            @parentobj = tmp
-        end
-        @parentobj
-    end
-
-    # Create a new subscope in which to evaluate our code.
-    def subscope(scope, resource)
-        args = {
-            :resource => resource,
-            :keyword => self.keyword,
-            :namespace => self.namespace,
-            :source => self
-        }
-
-        oldscope = scope
-        scope = scope.newscope(args)
-        scope.source = self
-
-        return scope
-    end
-
-    def to_s
-        classname
-    end
-
-    # Check whether a given argument is valid.  Searches up through
-    # any parent classes that might exist.
-    def validattr?(param)
-        param = param.to_s
-
-        if @arguments.include?(param)
-            # It's a valid arg for us
-            return true
-        elsif param == "name"
-            return true
-#            elsif defined? @parentclass and @parentclass
-#                # Else, check any existing parent
-#                if parent = @scope.lookuptype(@parentclass) and parent != []
-#                    return parent.validarg?(param)
-#                elsif builtin = Puppet::Type.type(@parentclass)
-#                    return builtin.validattr?(param)
-#                else
-#                    raise Puppet::Error, "Could not find parent class %s" %
-#                        @parentclass
-#                end
-        elsif Puppet::Type.metaparam?(param)
-            return true
-        else
-            # Or just return false
-            return false
-        end
-    end
-
-    private
-
-    # Set any arguments passed by the resource as variables in the scope.
-    def set_resource_parameters(scope, resource)
-        args = symbolize_options(resource.to_hash || {})
-
-        # Verify that all required arguments are either present or
-        # have been provided with defaults.
-        if self.arguments
-            self.arguments.each { |arg, default|
-                arg = arg.to_sym
-                unless args.include?(arg)
-                    if defined? default and ! default.nil?
-                        default = default.safeevaluate scope
-                        args[arg] = default
-                        #Puppet.debug "Got default %s for %s in %s" %
-                        #    [default.inspect, arg.inspect, @name.inspect]
-                    else
-                        parsefail "Must pass %s to %s of type %s" %
-                                [arg, resource.title, @classname]
-                    end
-                end
-            }
-        end
-
-        # Set each of the provided arguments as variables in the
-        # definition's scope.
-        args.each { |arg,value|
-            unless validattr?(arg)
-                parsefail "%s does not accept attribute %s" % [@classname, arg]
-            end
-
-            exceptwrap do
-                scope.setvar(arg.to_s, args[arg])
-            end
-        }
-
-        scope.setvar("title", resource.title) unless args.include? :title
-        scope.setvar("name", resource.name) unless args.include? :name
-    end
-end
diff --git a/lib/puppet/parser/ast/else.rb b/lib/puppet/parser/ast/else.rb
deleted file mode 100644
index affac62..0000000
--- a/lib/puppet/parser/ast/else.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # A separate ElseIf statement; can function as an 'else' if there's no
-    # test.
-    class Else < AST::Branch
-        attr_accessor :statements
-
-        def each
-            yield @statements
-        end
-
-        # Evaluate the actual statements; this only gets called if
-        # our test was true matched.
-        def evaluate(scope)
-            return @statements.safeevaluate(scope)
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/function.rb b/lib/puppet/parser/ast/function.rb
deleted file mode 100644
index eb36fa9..0000000
--- a/lib/puppet/parser/ast/function.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # An AST object to call a function.
-    class Function < AST::Branch
-        attr_accessor :name, :arguments
-
-        @settor = true
-
-        def evaluate(scope)
-            # We don't need to evaluate the name, because it's plaintext
-            args = @arguments.safeevaluate(scope)
-
-            return scope.send("function_" + @name, args)
-        end
-
-        def initialize(hash)
-            @ftype = hash[:ftype] || :rvalue
-            hash.delete(:ftype) if hash.include? :ftype
-
-            super(hash)
-
-            # Make sure it's a defined function
-            unless @fname = Puppet::Parser::Functions.function(@name)
-                raise Puppet::ParseError, "Unknown function %s" % @name
-            end
-
-            # Now check that it's been used correctly
-            case @ftype
-            when :rvalue:
-                unless Puppet::Parser::Functions.rvalue?(@name)
-                    raise Puppet::ParseError, "Function '%s' does not return a value" %
-                        @name
-                end
-            when :statement:
-                if Puppet::Parser::Functions.rvalue?(@name)
-                    raise Puppet::ParseError,
-                        "Function '%s' must be the value of a statement" %
-                        @name
-                end
-            else
-                raise Puppet::DevError, "Invalid function type %s" % @ftype.inspect
-            end
-
-            # Lastly, check the parity
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/hostclass.rb b/lib/puppet/parser/ast/hostclass.rb
deleted file mode 100644
index 7f89f81..0000000
--- a/lib/puppet/parser/ast/hostclass.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-require 'puppet/parser/ast/definition'
-
-# The code associated with a class.  This is different from definitions
-# in that each class is a singleton -- only one will exist for a given
-# node.
-class Puppet::Parser::AST::HostClass < Puppet::Parser::AST::Definition
-    @name = :class
-
-    # Are we a child of the passed class?  Do a recursive search up our
-    # parentage tree to figure it out.
-    def child_of?(klass)
-        return false unless self.parentclass
-
-        if klass == self.parentobj
-            return true
-        else
-            return self.parentobj.child_of?(klass)
-        end
-    end
-
-    # Make sure our parent class has been evaluated, if we have one.
-    def evaluate(scope)
-        if parentclass and ! scope.catalog.resource(self.class.name, parentclass)
-            parent_resource = parentobj.evaluate(scope)
-        end
-
-        # Do nothing if the resource already exists; this makes sure we don't
-        # get multiple copies of the class resource, which helps provide the
-        # singleton nature of classes.
-        if resource = scope.catalog.resource(self.class.name, self.classname)
-            return resource
-        end
-
-        super
-    end
-
-    # Evaluate the code associated with this class.
-    def evaluate_code(resource)
-        scope = resource.scope
-        # Verify that we haven't already been evaluated.  This is
-        # what provides the singleton aspect.
-        if existing_scope = scope.compiler.class_scope(self)
-            Puppet.debug "Class '%s' already evaluated; not evaluating again" % (classname == "" ? "main" : classname)
-            return nil
-        end
-
-        pnames = nil
-        if pklass = self.parentobj
-            parent_resource = resource.scope.compiler.catalog.resource(self.class.name, pklass.classname)
-            # This shouldn't evaluate if the class has already been evaluated.
-            pklass.evaluate_code(parent_resource)
-
-            scope = parent_scope(scope, pklass)
-            pnames = scope.namespaces
-        end
-
-        # Don't create a subscope for the top-level class, since it already
-        # has its own scope.
-        scope = subscope(scope, resource) unless resource.title == :main
-
-        # Add the parent scope namespaces to our own.
-        if pnames
-            pnames.each do |ns|
-                scope.add_namespace(ns)
-            end
-        end
-
-        # Set the class before we evaluate the code, so that it's set during
-        # the evaluation and can be inspected.
-        scope.compiler.class_set(self.classname, scope)
-
-        # Now evaluate our code, yo.
-        if self.code
-            return self.code.safeevaluate(scope)
-        else
-            return nil
-        end
-    end
-
-    def parent_scope(scope, klass)
-        if s = scope.compiler.class_scope(klass)
-            return s
-        else
-            raise Puppet::DevError, "Could not find scope for %s" % klass.classname
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/ifstatement.rb b/lib/puppet/parser/ast/ifstatement.rb
deleted file mode 100644
index afa2cd5..0000000
--- a/lib/puppet/parser/ast/ifstatement.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # A basic 'if/elsif/else' statement.
-    class IfStatement < AST::Branch
-        attr_accessor :test, :else, :statements
-
-        def each
-            [@test, at else, at statements].each { |child| yield child }
-        end
-
-        # Short-curcuit evaluation.  If we're true, evaluate our statements,
-        # else if there's an 'else' setting, evaluate it.
-        # the first option that matches.
-        def evaluate(scope)
-            value = @test.safeevaluate(scope)
-
-            if Puppet::Parser::Scope.true?(value)
-                return @statements.safeevaluate(scope)
-            else
-                if defined? @else
-                    return @else.safeevaluate(scope)
-                else
-                    return nil
-                end
-            end
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/leaf.rb b/lib/puppet/parser/ast/leaf.rb
deleted file mode 100644
index c545c1e..0000000
--- a/lib/puppet/parser/ast/leaf.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-class Puppet::Parser::AST
-    # The base class for all of the leaves of the parse trees.  These
-    # basically just have types and values.  Both of these parameters
-    # are simple values, not AST objects.
-    class Leaf < AST
-        attr_accessor :value, :type
-
-        # Return our value.
-        def evaluate(scope)
-            return @value
-        end
-
-        def to_s
-            return @value
-        end
-    end
-
-    # The boolean class.  True or false.  Converts the string it receives
-    # to a Ruby boolean.
-    class Boolean < AST::Leaf
-
-        # Use the parent method, but then convert to a real boolean.
-        def initialize(hash)
-            super
-
-            unless @value == true or @value == false
-                raise Puppet::DevError,
-                    "'%s' is not a boolean" % @value
-            end
-            @value
-        end
-    end
-
-    # The base string class.
-    class String < AST::Leaf
-        # Interpolate the string looking for variables, and then return
-        # the result.
-        def evaluate(scope)
-            return scope.strinterp(@value, @file, @line)
-        end
-    end
-
-    # An uninterpreted string.
-    class FlatString < AST::Leaf
-        def evaluate(scope)
-            return @value
-        end
-    end
-
-    # The 'default' option on case statements and selectors.
-    class Default < AST::Leaf; end
-
-    # Capitalized words; used mostly for type-defaults, but also
-    # get returned by the lexer any other time an unquoted capitalized
-    # word is found.
-    class Type < AST::Leaf; end
-
-    # Lower-case words.
-    class Name < AST::Leaf; end
-
-    # double-colon separated class names
-    class ClassName < AST::Leaf; end
-
-    # undef values; equiv to nil
-    class Undef < AST::Leaf; end
-
-    # Host names, either fully qualified or just the short name
-    class HostName < AST::Leaf
-        def initialize(hash)
-            super
-
-            unless @value =~ %r{^[0-9a-zA-Z\-]+(\.[0-9a-zA-Z\-]+)*$}
-                raise Puppet::DevError,
-                    "'%s' is not a valid hostname" % @value
-            end
-        end
-    end
-
-    # A simple variable.  This object is only used during interpolation;
-    # the VarDef class is used for assignment.
-    class Variable < Name
-        # Looks up the value of the object in the scope tree (does
-        # not include syntactical constructs, like '$' and '{}').
-        def evaluate(scope)
-            parsewrap do
-                return scope.lookupvar(@value)
-            end
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/minus.rb b/lib/puppet/parser/ast/minus.rb
deleted file mode 100644
index b0779a8..0000000
--- a/lib/puppet/parser/ast/minus.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require 'puppet'
-require 'puppet/parser/ast/branch'
-
-# An object that returns a boolean which is the boolean not
-# of the given value.
-class Puppet::Parser::AST
-    class Minus < AST::Branch
-        attr_accessor :value
-
-        def each
-            yield @value
-        end
-
-        def evaluate(scope)
-            val = @value.safeevaluate(scope)
-            val = Puppet::Parser::Scope.number?(val)
-            if val == nil
-                raise ArgumentError, "minus operand %s is not a number" % val
-            end
-            return -val
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/node.rb b/lib/puppet/parser/ast/node.rb
deleted file mode 100644
index 2bf6c18..0000000
--- a/lib/puppet/parser/ast/node.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'puppet/parser/ast/hostclass'
-
-# The specific code associated with a host.  Nodes are annoyingly unlike
-# other objects.  That's just the way it is, at least for now.
-class Puppet::Parser::AST::Node < Puppet::Parser::AST::HostClass
-    @name = :node
-
-    def initialize(options)
-        @parentclass = nil
-        super
-
-        # Do some validation on the node name
-        if @name =~ /[^-\w.]/
-            raise Puppet::ParseError, "Invalid node name %s" % @name
-        end
-    end
-
-    def namespace
-        ""
-    end
-
-    # Make sure node scopes are marked as such.
-    def subscope(*args)
-        scope = super
-        scope.nodescope = true
-        scope
-    end
-
-    private
-
-    # Search for the object matching our parent class.
-    def find_parentclass
-        @parser.findnode(parentclass)
-    end
-end
diff --git a/lib/puppet/parser/ast/nop.rb b/lib/puppet/parser/ast/nop.rb
deleted file mode 100644
index ea52320..0000000
--- a/lib/puppet/parser/ast/nop.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # This class is a no-op, it doesn't produce anything
-    # when evaluated, hence it's name :-)
-    class Nop < AST::Leaf
-        def evaluate(scope)
-            # nothing to do
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/not.rb b/lib/puppet/parser/ast/not.rb
deleted file mode 100644
index c8fa1df..0000000
--- a/lib/puppet/parser/ast/not.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'puppet'
-require 'puppet/parser/ast/branch'
-
-# An object that returns a boolean which is the boolean not
-# of the given value.
-class Puppet::Parser::AST
-    class Not < AST::Branch
-        attr_accessor :value
-
-        def each
-            yield @value
-        end
-
-        def evaluate(scope)
-            val = @value.safeevaluate(scope)
-            return ! Puppet::Parser::Scope.true?(val)
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/resource.rb b/lib/puppet/parser/ast/resource.rb
deleted file mode 100644
index 8a60522..0000000
--- a/lib/puppet/parser/ast/resource.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-require 'puppet/parser/ast/resource_reference'
-
-# Any normal puppet resource declaration.  Can point to a definition or a
-# builtin type.
-class Puppet::Parser::AST
-class Resource < AST::ResourceReference
-    attr_accessor :title, :type, :exported, :virtual
-    attr_reader :params
-
-    # Does not actually return an object; instead sets an object
-    # in the current scope.
-    def evaluate(scope)
-        # Evaluate all of the specified params.
-        paramobjects = @params.collect { |param|
-            param.safeevaluate(scope)
-        }
-
-        objtitles = @title.safeevaluate(scope)
-
-        # it's easier to always use an array, even for only one name
-        unless objtitles.is_a?(Array)
-            objtitles = [objtitles]
-        end
-
-        objtype = qualified_type(scope)
-
-        # This is where our implicit iteration takes place; if someone
-        # passed an array as the name, then we act just like the called us
-        # many times.
-        objtitles.collect { |objtitle|
-            exceptwrap :type => Puppet::ParseError do
-                exp = self.exported || scope.resource.exported?
-                # We want virtual to be true if exported is true.  We can't
-                # just set :virtual => self.virtual in the initialization,
-                # because sometimes the :virtual attribute is set *after*
-                # :exported, in which case it clobbers :exported if :exported
-                # is true.  Argh, this was a very tough one to track down.
-                virt = self.virtual || scope.resource.virtual? || exp
-                obj = Puppet::Parser::Resource.new(
-                    :type => objtype,
-                    :title => objtitle,
-                    :params => paramobjects,
-                    :file => self.file,
-                    :line => self.line,
-                    :exported => exp,
-                    :virtual => virt,
-                    :source => scope.source,
-                    :scope => scope
-                )
-
-                # And then store the resource in the compiler.
-                # At some point, we need to switch all of this to return
-                # objects instead of storing them like this.
-                scope.compiler.add_resource(scope, obj)
-                obj
-            end
-        }.reject { |obj| obj.nil? }
-    end
-
-    # Set the parameters for our object.
-    def params=(params)
-        if params.is_a?(AST::ASTArray)
-            @params = params
-        else
-            @params = AST::ASTArray.new(
-                :line => params.line,
-                :file => params.file,
-                :children => [params]
-            )
-        end
-    end
-end
-end
diff --git a/lib/puppet/parser/ast/resource_defaults.rb b/lib/puppet/parser/ast/resource_defaults.rb
deleted file mode 100644
index 4856f05..0000000
--- a/lib/puppet/parser/ast/resource_defaults.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # A statement syntactically similar to an ResourceDef, but uses a
-    # capitalized object type and cannot have a name.  
-    class ResourceDefaults < AST::Branch
-        attr_accessor :type, :params
-
-        # As opposed to ResourceDef, this stores each default for the given
-        # object type.
-        def evaluate(scope)
-            # Use a resource reference to canonize the type
-            ref = Puppet::ResourceReference.new(@type, "whatever")
-            type = ref.type
-            params = @params.safeevaluate(scope)
-
-            parsewrap do
-                scope.setdefaults(type, params)
-            end
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/resource_override.rb b/lib/puppet/parser/ast/resource_override.rb
deleted file mode 100644
index 8380dcd..0000000
--- a/lib/puppet/parser/ast/resource_override.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-require 'puppet/parser/ast/resource'
-
-class Puppet::Parser::AST
-    # Set a parameter on a resource specification created somewhere else in the
-    # configuration.  The object is responsible for verifying that this is allowed.
-    class ResourceOverride < Resource
-        attr_accessor :object
-        attr_reader :params
-
-        # Iterate across all of our children.
-        def each
-            [@object, at params].flatten.each { |param|
-                #Puppet.debug("yielding param %s" % param)
-                yield param
-            }
-        end
-
-        # Does not actually return an object; instead sets an object
-        # in the current scope.
-        def evaluate(scope)
-            # Get our object reference.
-            resource = @object.safeevaluate(scope)
-
-            hash = {}
-
-            # Evaluate all of the specified params.
-            params = @params.collect { |param|
-                param.safeevaluate(scope)
-            }
-
-            # Now we just create a normal resource, but we call a very different
-            # method on the scope.
-            resource = [resource] unless resource.is_a?(Array)
-            
-            resource = resource.collect do |r|
-                res = Puppet::Parser::Resource.new(
-                    :type => r.type,
-                    :title => r.title,
-                    :params => params,
-                    :file => @file,
-                    :line => @line,
-                    :source => scope.source,
-                    :scope => scope
-                )
-
-                # Now we tell the scope that it's an override, and it behaves as
-                # necessary.
-                scope.compiler.add_override(res)
-
-                res
-            end
-            # decapsulate array in case of only one item
-            return resource.pop if resource.length == 1
-            return resource
-        end
-
-        # Create our ResourceDef.  Handles type checking for us.
-        def initialize(hash)
-            @checked = false
-            super
-
-            #self.typecheck(@type.value)
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/resource_reference.rb b/lib/puppet/parser/ast/resource_reference.rb
deleted file mode 100644
index e5e2dce..0000000
--- a/lib/puppet/parser/ast/resource_reference.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # A reference to an object.  Only valid as an rvalue.
-    class ResourceReference < AST::Branch
-        attr_accessor :title, :type
-        # Is the type a builtin type?
-        def builtintype?(type)
-            if typeklass = Puppet::Type.type(type)
-                return typeklass
-            else
-                return false
-            end
-        end
-
-        def each
-            [@type, at title].flatten.each { |param|
-                #Puppet.debug("yielding param %s" % param)
-                yield param
-            }
-        end
-
-        # Evaluate our object, but just return a simple array of the type
-        # and name.
-        def evaluate(scope)
-            title = @title.safeevaluate(scope)
-            title = [title] unless title.is_a?(Array)
-            
-            if @type.to_s.downcase == "class"
-                resource_type = "class"
-                title = title.collect { |t| qualified_class(scope, t) }
-            else
-                resource_type = qualified_type(scope)
-            end
-
-            title = title.collect { |t| Puppet::Parser::Resource::Reference.new(
-                :type => resource_type, :title => t
-            ) }
-            return title.pop if title.length == 1
-            return title
-        end
-
-        # Look up a fully qualified class name.
-        def qualified_class(scope, title)
-            # Look up the full path to the class
-            if classobj = scope.findclass(title)
-                title = classobj.classname
-            else
-                raise Puppet::ParseError, "Could not find class %s" % title
-            end
-        end
-
-        # Look up a fully-qualified type.  This method is
-        # also used in AST::Resource.
-        def qualified_type(scope, title = nil)
-            # We want a lower-case type.  For some reason.
-            objtype = @type.downcase
-            unless builtintype?(objtype)
-                if dtype = scope.finddefine(objtype)
-                    objtype = dtype.classname
-                else
-                    raise Puppet::ParseError, "Could not find resource type %s" % objtype
-                end
-            end
-            return objtype
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/resourceparam.rb b/lib/puppet/parser/ast/resourceparam.rb
deleted file mode 100644
index c552a7e..0000000
--- a/lib/puppet/parser/ast/resourceparam.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # The AST object for the parameters inside ResourceDefs and Selectors.
-    class ResourceParam < AST::Branch
-        attr_accessor :value, :param, :add
-
-        def each
-            [@param, at value].each { |child| yield child }
-        end
-
-        # Return the parameter and the value.
-        def evaluate(scope)
-            return Puppet::Parser::Resource::Param.new(
-                :name => @param,
-                :value => @value.safeevaluate(scope),
-                :source => scope.source, :line => self.line, :file => self.file,
-                :add => self.add
-            )
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/selector.rb b/lib/puppet/parser/ast/selector.rb
deleted file mode 100644
index 399d405..0000000
--- a/lib/puppet/parser/ast/selector.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # The inline conditional operator.  Unlike CaseStatement, which executes
-    # code, we just return a value.
-    class Selector < AST::Branch
-        attr_accessor :param, :values
-
-        def each
-            [@param, at values].each { |child| yield child }
-        end
-
-        # Find the value that corresponds with the test.
-        def evaluate(scope)
-            retvalue = nil
-            found = nil
-
-            # Get our parameter.
-            paramvalue = @param.safeevaluate(scope)
-            
-            sensitive = Puppet[:casesensitive]
-            
-            if ! sensitive and paramvalue.respond_to?(:downcase)
-                paramvalue = paramvalue.downcase
-            end
-
-            default = nil
-
-            unless @values.instance_of? AST::ASTArray or @values.instance_of? Array
-                @values = [@values]
-            end
-
-            # Then look for a match in the options.
-            @values.each { |obj|
-                param = obj.param.safeevaluate(scope)
-                if ! sensitive && param.respond_to?(:downcase)
-                    param = param.downcase
-                end
-                if param == paramvalue
-                    # we found a matching option
-                    retvalue = obj.value.safeevaluate(scope)
-                    found = true
-                    break
-                elsif obj.param.is_a?(Default)
-                    # Store the default, in case it's necessary.
-                    default = obj
-                end
-            }
-
-            # Unless we found something, look for the default.
-            unless found
-                if default
-                    retvalue = default.value.safeevaluate(scope)
-                else
-                    self.fail Puppet::ParseError,
-                        "No matching value for selector param '%s'" % paramvalue
-                end
-            end
-
-            return retvalue
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/tag.rb b/lib/puppet/parser/ast/tag.rb
deleted file mode 100644
index 2909504..0000000
--- a/lib/puppet/parser/ast/tag.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # The code associated with a class.  This is different from components
-    # in that each class is a singleton -- only one will exist for a given
-    # node.
-    class Tag < AST::Branch
-        @name = :class
-        attr_accessor :type
-
-        def evaluate(scope)
-            types = @type.safeevaluate(scope)
-
-            types = [types] unless types.is_a? Array
-
-            types.each do |type|
-                # Now set our class.  We don't have to worry about checking
-                # whether we've been evaluated because we're not evaluating
-                # any code.
-                scope.setclass(self.object_id, type)
-            end
-        end
-    end
-end
diff --git a/lib/puppet/parser/ast/vardef.rb b/lib/puppet/parser/ast/vardef.rb
deleted file mode 100644
index a3094ac..0000000
--- a/lib/puppet/parser/ast/vardef.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require 'puppet/parser/ast/branch'
-
-class Puppet::Parser::AST
-    # Define a variable.  Stores the value in the current scope.
-    class VarDef < AST::Branch
-        attr_accessor :name, :value, :append
-
-        @settor = true
-
-        # Look up our name and value, and store them appropriately.  The
-        # lexer strips off the syntax stuff like '$'.
-        def evaluate(scope)
-            name = @name.safeevaluate(scope)
-            value = @value.safeevaluate(scope)
-
-            parsewrap do
-                scope.setvar(name,value, @file, @line, @append)
-            end
-        end
-
-        def each
-            [@name, at value].each { |child| yield child }
-        end
-    end
-
-end
diff --git a/lib/puppet/parser/collector.rb b/lib/puppet/parser/collector.rb
deleted file mode 100644
index 0f90725..0000000
--- a/lib/puppet/parser/collector.rb
+++ /dev/null
@@ -1,174 +0,0 @@
-# An object that collects stored objects from the central cache and returns
-# them to the current host, yo.
-class Puppet::Parser::Collector
-    attr_accessor :type, :scope, :vquery, :equery, :form, :resources
-
-    # Call the collection method, mark all of the returned objects as non-virtual,
-    # and then delete this object from the list of collections to evaluate.
-    def evaluate
-        # Shortcut if we're not using storeconfigs and they're trying to collect
-        # exported resources.
-        if form == :exported and Puppet[:storeconfigs] != true
-            Puppet.warning "Not collecting exported resources without storeconfigs"
-            return false
-        end
-        if self.resources
-            if objects = collect_resources and ! objects.empty?
-                return objects
-            else
-                return false
-            end
-        else
-            method = "collect_#{@form.to_s}"
-            objects = send(method).each do |obj|
-                obj.virtual = false
-            end
-            if objects.empty?
-                return false
-            else
-                return objects
-            end
-        end
-    end
-
-    def initialize(scope, type, equery, vquery, form)
-        @scope = scope
-
-        # Canonize the type
-        @type = Puppet::ResourceReference.new(type, "whatever").type
-        @equery = equery
-        @vquery = vquery
-
-        raise(ArgumentError, "Invalid query form %s" % form) unless [:exported, :virtual].include?(form)
-        @form = form
-    end
-
-    private
-
-    # Create our active record query.
-    def build_active_record_query
-        Puppet::Rails.init unless ActiveRecord::Base.connected?
-
-        raise Puppet::DevError, "Cannot collect resources for a nil host" unless @scope.host
-        host = Puppet::Rails::Host.find_by_name(@scope.host)
-
-        query = {:include => {:param_values => :param_name}}
-
-        search = "(exported=? AND restype=?)"
-        values = [true, @type]
-
-        search += " AND (%s)" % @equery if @equery
-
-        # We're going to collect objects from rails, but we don't want any
-        # objects from this host.
-        search = ("host_id != ? AND %s" % search) and values.unshift(host.id) if host
-
-        query[:conditions] = [search, *values]
-
-        return query
-    end
-
-    # Collect exported objects.
-    def collect_exported
-        # First get everything from the export table.  Just reuse our
-        # collect_virtual method but tell it to use 'exported? for the test.
-        resources = collect_virtual(true).reject { |r| ! r.virtual? }.each { |r| r.exported = false }
-        #resources = collect_virtual(true).reject { |r| ! r.virtual? }
-
-        count = resources.length
-
-        query = build_active_record_query
-
-        # Now look them up in the rails db.  When we support attribute comparison
-        # and such, we'll need to vary the conditions, but this works with no
-        # attributes, anyway.
-        time = Puppet::Util.thinmark do
-            Puppet::Rails::Resource.find(:all, @type, true, query).each do |obj|
-                if resource = exported_resource(obj)
-                    count += 1
-                    resources << resource
-                end
-            end
-        end
-
-        scope.debug("Collected %s %s resource%s in %.2f seconds" %
-            [count, @type, count == 1 ? "" : "s", time])
-
-        return resources
-    end
-
-    def collect_resources
-        unless @resources.is_a?(Array)
-            @resources = [@resources]
-        end
-        method = "collect_#{form.to_s}_resources"
-        send(method)
-    end
-
-    def collect_exported_resources
-        raise Puppet::ParseError, "realize() is not yet implemented for exported resources"
-    end
-
-    # Collect resources directly; this is the result of using 'realize',
-    # which specifies resources, rather than using a normal collection.
-    def collect_virtual_resources
-        return [] unless defined?(@resources) and ! @resources.empty?
-        result = @resources.dup.collect do |ref|
-            if res = @scope.findresource(ref.to_s)
-                @resources.delete(ref)
-                res
-            end
-        end.reject { |r| r.nil? }.each do |res|
-            res.virtual = false
-        end
-
-        # If there are no more resources to find, delete this from the list
-        # of collections.
-        if @resources.empty?
-            @scope.compiler.delete_collection(self)
-        end
-
-        return result
-    end
-
-    # Collect just virtual objects, from our local compiler.
-    def collect_virtual(exported = false)
-        if exported
-            method = :exported?
-        else
-            method = :virtual?
-        end
-        scope.compiler.resources.find_all do |resource|
-            resource.type == @type and resource.send(method) and match?(resource)
-        end
-    end
-
-    # Seek a specific exported resource.
-    def exported_resource(obj)
-        if existing = @scope.findresource(obj.restype, obj.title)
-            # Next see if we've already collected this resource
-            return nil if existing.rails_id == obj.id
-
-            # This is the one we've already collected
-            raise Puppet::ParseError, "Exported resource %s cannot override local resource" % [obj.ref]
-        end
-
-        resource = obj.to_resource(self.scope)
-
-        resource.exported = false
-        
-        scope.compiler.add_resource(scope, resource)
-
-        return resource
-    end
-
-    # Does the resource match our tests?  We don't yet support tests,
-    # so it's always true at the moment.
-    def match?(resource)
-        if self.vquery
-            return self.vquery.call(resource)
-        else
-            return true
-        end
-    end
-end
diff --git a/lib/puppet/parser/compiler.rb b/lib/puppet/parser/compiler.rb
deleted file mode 100644
index d67b3d2..0000000
--- a/lib/puppet/parser/compiler.rb
+++ /dev/null
@@ -1,470 +0,0 @@
-#  Created by Luke A. Kanies on 2007-08-13.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/node'
-require 'puppet/node/catalog'
-require 'puppet/util/errors'
-
-# Maintain a graph of scopes, along with a bunch of data
-# about the individual catalog we're compiling.
-class Puppet::Parser::Compiler
-    include Puppet::Util
-    include Puppet::Util::Errors
-    attr_reader :parser, :node, :facts, :collections, :catalog, :node_scope
-
-    # Add a collection to the global list.
-    def add_collection(coll)
-        @collections << coll
-    end
-
-    # Store a resource override.
-    def add_override(override)
-        # If possible, merge the override in immediately.
-        if resource = @catalog.resource(override.ref)
-            resource.merge(override)
-        else
-            # Otherwise, store the override for later; these
-            # get evaluated in Resource#finish.
-            @resource_overrides[override.ref] << override
-        end
-    end
-
-    # Store a resource in our resource table.
-    def add_resource(scope, resource)
-        # Note that this will fail if the resource is not unique.
-        @catalog.add_resource(resource)
-
-        # And in the resource graph.  At some point, this might supercede
-        # the global resource table, but the table is a lot faster
-        # so it makes sense to maintain for now.
-        @catalog.add_edge(scope.resource, resource)
-    end
-
-    # Do we use nodes found in the code, vs. the external node sources?
-    def ast_nodes?
-        parser.nodes.length > 0
-    end
-
-    # Store the fact that we've evaluated a class, and store a reference to
-    # the scope in which it was evaluated, so that we can look it up later.
-    def class_set(name, scope)
-        if existing = @class_scopes[name]
-            if existing.nodescope? != scope.nodescope?
-                raise Puppet::ParseError, "Cannot have classes, nodes, or definitions with the same name"
-            else
-                raise Puppet::DevError, "Somehow evaluated %s %s twice" % [ existing.nodescope? ? "node" : "class", name]
-            end
-        end
-        @class_scopes[name] = scope
-        @catalog.add_class(name) unless name == ""
-    end
-
-    # Return the scope associated with a class.  This is just here so
-    # that subclasses can set their parent scopes to be the scope of
-    # their parent class, and it's also used when looking up qualified
-    # variables.
-    def class_scope(klass)
-        # They might pass in either the class or class name
-        if klass.respond_to?(:classname)
-            @class_scopes[klass.classname]
-        else
-            @class_scopes[klass]
-        end
-    end
-
-    # Return a list of all of the defined classes.
-    def classlist
-        return @catalog.classes
-    end
-
-    # Compiler our catalog.  This mostly revolves around finding and evaluating classes.
-    # This is the main entry into our catalog.
-    def compile
-        # Set the client's parameters into the top scope.
-        set_node_parameters()
-
-        evaluate_main()
-
-        evaluate_ast_node()
-
-        evaluate_node_classes()
-
-        evaluate_generators()
-
-        finish()
-
-        fail_on_unevaluated()
-
-        if Puppet[:storeconfigs]
-            store()
-        end
-
-        return @catalog
-    end
-
-    # LAK:FIXME There are no tests for this.
-    def delete_collection(coll)
-        @collections.delete(coll) if @collections.include?(coll)
-    end
-
-    # Return the node's environment.
-    def environment
-        unless defined? @environment
-            if node.environment and node.environment != ""
-                @environment = node.environment
-            else
-                @environment = nil
-            end
-        end
-        @environment
-    end
-
-    # Evaluate all of the classes specified by the node.
-    def evaluate_node_classes
-        evaluate_classes(@node.classes, topscope)
-    end
-
-    # Evaluate each specified class in turn.  If there are any classes we can't
-    # find, just tag the catalog and move on.  This method really just
-    # creates resource objects that point back to the classes, and then the
-    # resources are themselves evaluated later in the process.
-    def evaluate_classes(classes, scope, lazy_evaluate = true)
-        unless scope.source
-            raise Puppet::DevError, "No source for scope passed to evaluate_classes"
-        end
-        found = []
-        classes.each do |name|
-            # If we can find the class, then make a resource that will evaluate it.
-            if klass = scope.findclass(name)
-                found << name and next if class_scope(klass)
-
-                resource = klass.evaluate(scope)
-
-                # If they've disabled lazy evaluation (which the :include function does),
-                # then evaluate our resource immediately.
-                resource.evaluate unless lazy_evaluate
-                found << name
-            else
-                Puppet.info "Could not find class %s for %s" % [name, node.name]
-                @catalog.tag(name)
-            end
-        end
-        found
-    end
-
-    # Return a resource by either its ref or its type and title.
-    def findresource(*args)
-        @catalog.resource(*args)
-    end
-
-    # Set up our compile.  We require a parser
-    # and a node object; the parser is so we can look up classes
-    # and AST nodes, and the node has all of the client's info,
-    # like facts and environment.
-    def initialize(node, parser, options = {})
-        @node = node
-        @parser = parser
-
-        options.each do |param, value|
-            begin
-                send(param.to_s + "=", value)
-            rescue NoMethodError
-                raise ArgumentError, "Compiler objects do not accept %s" % param
-            end
-        end
-
-        initvars()
-        init_main()
-    end
-
-    # Create a new scope, with either a specified parent scope or
-    # using the top scope.  Adds an edge between the scope and
-    # its parent to the graph.
-    def newscope(parent, options = {})
-        parent ||= topscope
-        options[:compiler] = self
-        options[:parser] ||= self.parser
-        scope = Puppet::Parser::Scope.new(options)
-        @scope_graph.add_edge(parent, scope)
-        scope
-    end
-
-    # Find the parent of a given scope.  Assumes scopes only ever have
-    # one in edge, which will always be true.
-    def parent(scope)
-        if ary = @scope_graph.adjacent(scope, :direction => :in) and ary.length > 0
-            ary[0]
-        else
-            nil
-        end
-    end
-
-    # Return any overrides for the given resource.
-    def resource_overrides(resource)
-        @resource_overrides[resource.ref]
-    end
-
-    # Return a list of all resources.
-    def resources
-        @catalog.vertices
-    end
-
-    # The top scope is usually the top-level scope, but if we're using AST nodes,
-    # then it is instead the node's scope.
-    def topscope
-        node_scope || @topscope
-    end
-
-    private
-
-    # If ast nodes are enabled, then see if we can find and evaluate one.
-    def evaluate_ast_node
-        return unless ast_nodes?
-
-        # Now see if we can find the node.
-        astnode = nil
-        @node.names.each do |name|
-            break if astnode = @parser.nodes[name.to_s.downcase]
-        end
-
-        unless (astnode ||= @parser.nodes["default"])
-            raise Puppet::ParseError, "Could not find default node or by name with '%s'" % node.names.join(", ")
-        end
-
-        # Create a resource to model this node, and then add it to the list
-        # of resources.
-        resource = astnode.evaluate(topscope)
-
-        resource.evaluate
-
-        # Now set the node scope appropriately, so that :topscope can
-        # behave differently.
-        @node_scope = class_scope(astnode)
-    end
-
-    # Evaluate our collections and return true if anything returned an object.
-    # The 'true' is used to continue a loop, so it's important.
-    def evaluate_collections
-        return false if @collections.empty?
-
-        found_something = false
-        exceptwrap do
-            # We have to iterate over a dup of the array because
-            # collections can delete themselves from the list, which
-            # changes its length and causes some collections to get missed.
-            @collections.dup.each do |collection|
-                found_something = true if collection.evaluate
-            end
-        end
-
-        return found_something
-    end
-
-    # Make sure all of our resources have been evaluated into native resources.
-    # We return true if any resources have, so that we know to continue the
-    # evaluate_generators loop.
-    def evaluate_definitions
-        exceptwrap do
-            if ary = unevaluated_resources
-                evaluated = false
-                ary.each do |resource|
-                    if not resource.virtual?
-                        resource.evaluate
-                        evaluated = true
-                    end
-                end
-                # If we evaluated, let the loop know.
-                return evaluated
-            else
-                return false
-            end
-        end
-    end
-
-    # Iterate over collections and resources until we're sure that the whole
-    # compile is evaluated.  This is necessary because both collections
-    # and defined resources can generate new resources, which themselves could
-    # be defined resources.
-    def evaluate_generators
-        count = 0
-        loop do
-            done = true
-
-            # Call collections first, then definitions.
-            done = false if evaluate_collections
-            done = false if evaluate_definitions
-            break if done
-
-            count += 1
-
-            if count > 1000
-                raise Puppet::ParseError, "Somehow looped more than 1000 times while evaluating host catalog"
-            end
-        end
-    end
-
-    # Find and evaluate our main object, if possible.
-    def evaluate_main
-        @main = @parser.findclass("", "") || @parser.newclass("")
-        @topscope.source = @main
-        @main_resource = Puppet::Parser::Resource.new(:type => "class", :title => :main, :scope => @topscope, :source => @main)
-        @topscope.resource = @main_resource
-
-        @catalog.add_resource(@main_resource)
-
-        @main_resource.evaluate
-    end
-
-    # Make sure the entire catalog is evaluated.
-    def fail_on_unevaluated
-        fail_on_unevaluated_overrides
-        fail_on_unevaluated_resource_collections
-    end
-
-    # If there are any resource overrides remaining, then we could
-    # not find the resource they were supposed to override, so we
-    # want to throw an exception.
-    def fail_on_unevaluated_overrides
-        remaining = []
-        @resource_overrides.each do |name, overrides|
-            remaining += overrides
-        end
-
-        unless remaining.empty?
-            fail Puppet::ParseError,
-                "Could not find resource(s) %s for overriding" % remaining.collect { |o|
-                    o.ref
-                }.join(", ")
-        end
-    end
-
-    # Make sure we don't have any remaining collections that specifically
-    # look for resources, because we want to consider those to be
-    # parse errors.
-    def fail_on_unevaluated_resource_collections
-        remaining = []
-        @collections.each do |coll|
-            # We're only interested in the 'resource' collections,
-            # which result from direct calls of 'realize'.  Anything
-            # else is allowed not to return resources.
-            # Collect all of them, so we have a useful error.
-            if r = coll.resources
-                if r.is_a?(Array)
-                    remaining += r
-                else
-                    remaining << r
-                end
-            end
-        end
-
-        unless remaining.empty?
-            raise Puppet::ParseError, "Failed to realize virtual resources %s" %
-                remaining.join(', ')
-        end
-    end
-
-    # Make sure all of our resources and such have done any last work
-    # necessary.
-    def finish
-        @catalog.vertices.each do |resource|
-            # Add in any resource overrides.
-            if overrides = resource_overrides(resource)
-                overrides.each do |over|
-                    resource.merge(over)
-                end
-
-                # Remove the overrides, so that the configuration knows there
-                # are none left.
-                overrides.clear
-            end
-
-            resource.finish if resource.respond_to?(:finish)
-        end
-    end
-
-    # Initialize the top-level scope, class, and resource.
-    def init_main
-        # Create our initial scope and a resource that will evaluate main.
-        @topscope = Puppet::Parser::Scope.new(:compiler => self, :parser => self.parser)
-        @scope_graph.add_vertex(@topscope)
-    end
-
-    # Set up all of our internal variables.
-    def initvars
-        # The table for storing class singletons.  This will only actually
-        # be used by top scopes and node scopes.
-        @class_scopes = {}
-
-        # The list of objects that will available for export.
-        @exported_resources = {}
-
-        # The list of overrides.  This is used to cache overrides on objects
-        # that don't exist yet.  We store an array of each override.
-        @resource_overrides = Hash.new do |overs, ref|
-            overs[ref] = []
-        end
-
-        # The list of collections that have been created.  This is a global list,
-        # but they each refer back to the scope that created them.
-        @collections = []
-
-        # A graph for maintaining scope relationships.
-        @scope_graph = Puppet::SimpleGraph.new
-
-        # For maintaining the relationship between scopes and their resources.
-        @catalog = Puppet::Node::Catalog.new(@node.name)
-        @catalog.version = @parser.version
-    end
-
-    # Set the node's parameters into the top-scope as variables.
-    def set_node_parameters
-        node.parameters.each do |param, value|
-            @topscope.setvar(param, value)
-        end
-    end
-
-    # Store the catalog into the database.
-    def store
-        unless Puppet.features.rails?
-            raise Puppet::Error,
-                "storeconfigs is enabled but rails is unavailable"
-        end
-
-        unless ActiveRecord::Base.connected?
-            Puppet::Rails.connect
-        end
-
-        # We used to have hooks here for forking and saving, but I don't
-        # think it's worth retaining at this point.
-        store_to_active_record(@node, @catalog.vertices)
-    end
-
-    # Do the actual storage.
-    def store_to_active_record(node, resources)
-        begin
-            # We store all of the objects, even the collectable ones
-            benchmark(:info, "Stored catalog for #{node.name}") do
-                Puppet::Rails::Host.transaction do
-                    Puppet::Rails::Host.store(node, resources)
-                end
-            end
-        rescue => detail
-            if Puppet[:trace]
-                puts detail.backtrace
-            end
-            Puppet.err "Could not store configs: %s" % detail.to_s
-        end
-    end
-
-    # Return an array of all of the unevaluated resources.  These will be definitions,
-    # which need to get evaluated into native resources.
-    def unevaluated_resources
-        ary = @catalog.vertices.reject { |resource| resource.builtin? or resource.evaluated?  }
-
-        if ary.empty?
-            return nil
-        else
-            return ary
-        end
-    end
-end
diff --git a/lib/puppet/parser/functions.rb b/lib/puppet/parser/functions.rb
deleted file mode 100644
index 5fb0439..0000000
--- a/lib/puppet/parser/functions.rb
+++ /dev/null
@@ -1,120 +0,0 @@
-require 'puppet/util/autoload'
-require 'puppet/parser/scope'
-
-module Puppet::Parser
-module Functions
-    # A module for managing parser functions.  Each specified function
-    # becomes an instance method on the Scope class.
-
-    @functions = {}
-
-    class << self
-        include Puppet::Util
-    end
-
-    def self.autoloader
-        unless defined? @autoloader
-            @autoloader = Puppet::Util::Autoload.new(self,
-                "puppet/parser/functions",
-                :wrap => false
-            )
-        end
-
-        @autoloader
-    end
-
-    # Create a new function type.
-    def self.newfunction(name, options = {}, &block)
-        name = symbolize(name)
-
-        if @functions.include? name
-            raise Puppet::DevError, "Function %s already defined" % name
-        end
-
-        # We want to use a separate, hidden module, because we don't want
-        # people to be able to call them directly.
-        unless defined? FCollection
-            eval("module FCollection; end")
-        end
-
-        ftype = options[:type] || :statement
-
-        unless ftype == :statement or ftype == :rvalue
-            raise Puppet::DevError, "Invalid statement type %s" % ftype.inspect
-        end
-
-        fname = "function_" + name.to_s
-        Puppet::Parser::Scope.send(:define_method, fname, &block)
-
-        # Someday we'll support specifying an arity, but for now, nope
-        #@functions[name] = {:arity => arity, :type => ftype}
-        @functions[name] = {:type => ftype, :name => fname}
-        if options[:doc]
-            @functions[name][:doc] = options[:doc]
-        end
-    end
-
-    # Determine if a given name is a function
-    def self.function(name)
-        name = symbolize(name)
-
-        unless @functions.include? name
-            autoloader.load(name)
-        end
-
-        if @functions.include? name
-            return @functions[name][:name]
-        else
-            return false
-        end
-    end
-
-    def self.functiondocs
-        autoloader.loadall
-
-        ret = ""
-
-        @functions.sort { |a,b| a[0].to_s <=> b[0].to_s }.each do |name, hash|
-            #ret += "%s\n%s\n" % [name, hash[:type]]
-            ret += "%s\n%s\n" % [name, "-" * name.to_s.length]
-            if hash[:doc]
-                ret += hash[:doc].gsub(/\n\s*/, ' ')
-            else
-                ret += "Undocumented.\n"
-            end
-
-            ret += "\n\n- **Type**: %s\n\n" % hash[:type]
-        end
-
-        return ret
-    end
-
-    def self.functions
-        @functions.keys
-    end
-
-    # Determine if a given function returns a value or not.
-    def self.rvalue?(name)
-        name = symbolize(name)
-
-        if @functions.include? name
-            case @functions[name][:type]
-            when :statement: return false
-            when :rvalue: return true
-            end
-        else
-            return false
-        end
-    end
-  
-    # Runs a newfunction to create a function for each of the log levels
-
-    Puppet::Util::Log.levels.each do |level|
-        newfunction(level, :doc => "Log a message on the server at level
-        #{level.to_s}.") do |vals|
-            send(level, vals.join(" "))
-        end
-    end
-
-end
-end
diff --git a/lib/puppet/parser/functions/defined.rb b/lib/puppet/parser/functions/defined.rb
deleted file mode 100644
index 4e369ae..0000000
--- a/lib/puppet/parser/functions/defined.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# Test whether a given class or definition is defined
-Puppet::Parser::Functions::newfunction(:defined, :type => :rvalue, :doc => "Determine whether a given
-    type is defined, either as a native type or a defined type, or whether a class is defined.
-    This is useful for checking whether a class is defined and only including it if it is.
-    This function can also test whether a resource has been defined, using resource references
-    (e.g., ``if defined(File['/tmp/myfile']) { ... }``).  This function is unfortunately
-    dependent on the parse order of the configuration when testing whether a resource is defined.") do |vals|
-        result = false
-        vals.each do |val|
-            case val
-            when String:
-                # For some reason, it doesn't want me to return from here.
-                if Puppet::Type.type(val) or finddefine(val) or findclass(val)
-                    result = true
-                    break
-                end
-            when Puppet::Parser::Resource::Reference:
-                if findresource(val.to_s)
-                    result = true
-                    break
-                end
-            else
-                raise ArgumentError, "Invalid argument of type %s to 'defined'" % val.class
-            end
-        end
-        result
-end
diff --git a/lib/puppet/parser/functions/fail.rb b/lib/puppet/parser/functions/fail.rb
deleted file mode 100644
index 35b20ee..0000000
--- a/lib/puppet/parser/functions/fail.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-Puppet::Parser::Functions::newfunction(:fail, :doc => "Fail with a parse error.") do |vals|
-        vals = vals.collect { |s| s.to_s }.join(" ") if vals.is_a? Array
-        raise Puppet::ParseError, vals.to_s
-end
diff --git a/lib/puppet/parser/functions/file.rb b/lib/puppet/parser/functions/file.rb
deleted file mode 100644
index 47b3f96..0000000
--- a/lib/puppet/parser/functions/file.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# Returns the contents of a file
-Puppet::Parser::Functions::newfunction(:file, :type => :rvalue,
-        :doc => "Return the contents of a file.  Multiple files
-        can be passed, and the first file that exists will be read in.") do |vals|
-            ret = nil
-            vals.each do |file|
-                unless file =~ /^#{File::SEPARATOR}/
-                    raise Puppet::ParseError, "Files must be fully qualified"
-                end
-                if FileTest.exists?(file)
-                    ret = File.read(file)
-                    break
-                end
-            end
-            if ret
-                ret
-            else
-                raise Puppet::ParseError, "Could not find any files from %s" %
-                    vals.join(", ")
-            end
-end
diff --git a/lib/puppet/parser/functions/fqdn_rand.rb b/lib/puppet/parser/functions/fqdn_rand.rb
deleted file mode 100644
index 2ae46de..0000000
--- a/lib/puppet/parser/functions/fqdn_rand.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-Puppet::Parser::Functions::newfunction(:fqdn_rand, :type => :rvalue, :doc => 
-    "Generates random numbers based on the node's fqdn. The first argument 
-    sets the range.  The second argument specifies a number to add to the 
-    seed and is optional.") do |args|
-        require 'md5'
-        max = args[0]
-        if args[1] then
-             seed = args[1]
-        else
-             seed = 1
-        end
-        fqdn_seed = MD5.new(lookupvar('fqdn')).to_s.hex
-        srand(seed+fqdn_seed)
-        rand(max).to_s
-end
diff --git a/lib/puppet/parser/functions/generate.rb b/lib/puppet/parser/functions/generate.rb
deleted file mode 100644
index 1be9016..0000000
--- a/lib/puppet/parser/functions/generate.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# Runs an external command and returns the results
-Puppet::Parser::Functions::newfunction(:generate, :type => :rvalue,
-        :doc => "Calls an external command and returns the results of the
-        command.  Any arguments are passed to the external command as
-        arguments.  If the generator does not exit with return code of 0,
-        the generator is considered to have failed and a parse error is
-        thrown.  Generators can only have file separators, alphanumerics, dashes,
-        and periods in them.  This function will attempt to protect you from
-        malicious generator calls (e.g., those with '..' in them), but it can
-        never be entirely safe.  No subshell is used to execute
-        generators, so all shell metacharacters are passed directly to
-        the generator.") do |args|
-
-            unless args[0] =~ /^#{File::SEPARATOR}/
-                raise Puppet::ParseError, "Generators must be fully qualified"
-            end
-
-            unless args[0] =~ /^[-#{File::SEPARATOR}\w.]+$/
-                raise Puppet::ParseError,
-                    "Generators can only contain alphanumerics, file separators, and dashes"
-            end
-
-            if args[0] =~ /\.\./
-                raise Puppet::ParseError,
-                    "Can not use generators with '..' in them."
-            end
-
-            begin
-                output = Puppet::Util.execute(args)
-            rescue Puppet::ExecutionFailure => detail
-                raise Puppet::ParseError, "Failed to execute generator %s: %s" %
-                    [args[0], detail]
-            end
-            output
-end
diff --git a/lib/puppet/parser/functions/include.rb b/lib/puppet/parser/functions/include.rb
deleted file mode 100644
index 213a041..0000000
--- a/lib/puppet/parser/functions/include.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# Include the specified classes
-Puppet::Parser::Functions::newfunction(:include, :doc => "Evaluate one or more classes.") do |vals|
-        vals = [vals] unless vals.is_a?(Array)
-
-        # The 'false' disables lazy evaluation.
-        klasses = compiler.evaluate_classes(vals, self, false)
-
-        missing = vals.find_all do |klass|
-            ! klasses.include?(klass)
-        end
-
-        unless missing.empty?
-            # Throw an error if we didn't evaluate all of the classes.
-            str = "Could not find class"
-            if missing.length > 1
-                str += "es"
-            end
-
-            str += " " + missing.join(", ")
-
-            if n = namespaces and ! n.empty? and n != [""]
-                str += " in namespaces %s" % @namespaces.join(", ")
-            end
-            self.fail Puppet::ParseError, str
-        end
-end
diff --git a/lib/puppet/parser/functions/realize.rb b/lib/puppet/parser/functions/realize.rb
deleted file mode 100644
index 1bdde23..0000000
--- a/lib/puppet/parser/functions/realize.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# This is just syntactic sugar for a collection, although it will generally
-# be a good bit faster.
-
-Puppet::Parser::Functions::newfunction(:realize, :doc => "Make a virtual object real.  This is useful
-        when you want to know the name of the virtual object and don't want to
-        bother with a full collection.  It is slightly faster than a collection,
-        and, of course, is a bit shorter.  You must pass the object using a
-        reference; e.g.: ``realize User[luke]``." ) do |vals|
-        coll = Puppet::Parser::Collector.new(self, :nomatter, nil, nil, :virtual)
-        vals = [vals] unless vals.is_a?(Array)
-        coll.resources = vals
-
-        compiler.add_collection(coll)
-end
diff --git a/lib/puppet/parser/functions/search.rb b/lib/puppet/parser/functions/search.rb
deleted file mode 100644
index 87dd02d..0000000
--- a/lib/puppet/parser/functions/search.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-Puppet::Parser::Functions::newfunction(:search, :doc => "Add another namespace for this class to search.
-        This allows you to create classes with sets of definitions and add
-        those classes to another class's search path.") do |vals|
-        vals.each do |val|
-            add_namespace(val)
-        end
-end
diff --git a/lib/puppet/parser/functions/sha1.rb b/lib/puppet/parser/functions/sha1.rb
deleted file mode 100644
index 09386a6..0000000
--- a/lib/puppet/parser/functions/sha1.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Puppet::Parser::Functions::newfunction(:sha1, :type => :rvalue,
-        :doc => "Returns a SHA1 hash value from a provided string.") do |args|
-            require 'sha1'
-
-            Digest::SHA1.hexdigest(args[0])
-end
diff --git a/lib/puppet/parser/functions/tag.rb b/lib/puppet/parser/functions/tag.rb
deleted file mode 100644
index 3e487fe..0000000
--- a/lib/puppet/parser/functions/tag.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-# Tag the current scope with each passed name
-Puppet::Parser::Functions::newfunction(:tag, :doc => "Add the specified tags to the containing class
-    or definition.  All contained objects will then acquire that tag, also.
-    ") do |vals|
-        self.resource.tag(*vals)
-end
diff --git a/lib/puppet/parser/functions/tagged.rb b/lib/puppet/parser/functions/tagged.rb
deleted file mode 100644
index fccb132..0000000
--- a/lib/puppet/parser/functions/tagged.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# Test whether a given tag is set.  This functions as a big OR -- if any of the specified tags are unset, we return false.
-Puppet::Parser::Functions::newfunction(:tagged, :type => :rvalue, :doc => "A boolean function that
-    tells you whether the current container is tagged with the specified tags.
-    The tags are ANDed, so that all of the specified tags must be included for
-    the function to return true.") do |vals|
-        configtags = compiler.catalog.tags
-        resourcetags = resource.tags
-
-        retval = true
-        vals.each do |val|
-            unless configtags.include?(val) or resourcetags.include?(val)
-                retval = false
-                break
-            end
-        end
-
-        return retval
-end
diff --git a/lib/puppet/parser/functions/template.rb b/lib/puppet/parser/functions/template.rb
deleted file mode 100644
index e62c3b3..0000000
--- a/lib/puppet/parser/functions/template.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-Puppet::Parser::Functions::newfunction(:template, :type => :rvalue, :doc => 
-    "Evaluate a template and return its value.  See `the templating docs 
-    </trac/puppet/wiki/PuppetTemplating>`_ for more information.  Note that 
-    if multiple templates are specified, their output is all concatenated 
-    and returned as the output of the function.") do |vals|
-        require 'erb'
-
-        vals.collect do |file|
-            # Use a wrapper, so the template can't get access to the full
-            # Scope object.
-            debug "Retrieving template %s" % file
-            wrapper = Puppet::Parser::TemplateWrapper.new(self, file)
-
-            begin
-                wrapper.result()
-            rescue => detail
-                raise Puppet::ParseError,
-                    "Failed to parse template %s: %s" %
-                        [file, detail]
-            end
-        end.join("")
-end
diff --git a/lib/puppet/parser/interpreter.rb b/lib/puppet/parser/interpreter.rb
deleted file mode 100644
index 423c34a..0000000
--- a/lib/puppet/parser/interpreter.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require 'puppet'
-require 'timeout'
-require 'puppet/rails'
-require 'puppet/util/methodhelper'
-require 'puppet/parser/parser'
-require 'puppet/parser/compiler'
-require 'puppet/parser/scope'
-
-# The interpreter is a very simple entry-point class that
-# manages the existence of the parser (e.g., replacing it
-# when files are reparsed).  You can feed it a node and
-# get the node's catalog back.
-class Puppet::Parser::Interpreter
-    include Puppet::Util
-
-    attr_accessor :usenodes
-
-    include Puppet::Util::Errors
-
-    # Determine the configuration version for a given node's environment.
-    def configuration_version(node)
-        parser(node.environment).version
-    end
-
-    # evaluate our whole tree
-    def compile(node)
-        raise Puppet::ParseError, "Could not parse configuration; cannot compile on node %s" % node.name unless env_parser = parser(node.environment)
-        begin
-          return Puppet::Parser::Compiler.new(node, env_parser).compile
-        rescue => detail
-          puts detail.backtrace if Puppet[:trace]
-          raise Puppet::Error, detail.to_s + " on node %s" % node.name
-        end
-    end
-
-    # create our interpreter
-    def initialize
-        # The class won't always be defined during testing.
-        if Puppet[:storeconfigs] 
-            if Puppet.features.rails?
-                Puppet::Rails.init
-            else
-                raise Puppet::Error, "Rails is missing; cannot store configurations"
-            end
-        end
-
-        @parsers = {}
-    end
-
-    # Return the parser for a specific environment.
-    def parser(environment)
-        if ! @parsers[environment] or @parsers[environment].reparse?
-            # This will throw an exception if it does not succeed.
-            @parsers[environment] = create_parser(environment)
-        end
-        @parsers[environment]
-    end
-
-    private
-
-    # Create a new parser object and pre-parse the configuration.
-    def create_parser(environment)
-        begin
-            parser = Puppet::Parser::Parser.new(:environment => environment)
-            if code = Puppet.settings.value(:code, environment) and code != ""
-                parser.string = code
-            else
-                file = Puppet.settings.value(:manifest, environment)
-                parser.file = file
-            end
-            parser.parse
-            return parser
-        rescue => detail
-            msg = "Could not parse"
-            if environment and environment != ""
-                msg += " for environment %s" % environment
-            end
-            msg += ": %s" % detail.to_s
-            error = Puppet::Error.new(msg)
-            error.set_backtrace(detail.backtrace)
-            raise error
-        end
-    end
-end
diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb
deleted file mode 100644
index 9226434..0000000
--- a/lib/puppet/parser/lexer.rb
+++ /dev/null
@@ -1,451 +0,0 @@
-# the scanner/lexer
-
-require 'strscan'
-require 'puppet'
-
-
-module Puppet
-    class LexError < RuntimeError; end
-end
-
-module Puppet::Parser; end
-
-class Puppet::Parser::Lexer
-    attr_reader :last, :file
-
-    attr_accessor :line, :indefine
-
-    # Our base token class.
-    class Token
-        attr_accessor :regex, :name, :string, :skip, :incr_line, :skip_text
-
-        def initialize(regex, name)
-            if regex.is_a?(String)
-                @name, @string = name, regex
-                @regex = Regexp.new(Regexp.escape(@string))
-            else
-                @name, @regex = name, regex
-            end
-        end
-
-        def skip?
-            self.skip
-        end
-
-        def to_s
-            if self.string
-                @string
-            else
-                @name.to_s
-            end
-        end
-    end
-
-    # Maintain a list of tokens.
-    class TokenList
-        attr_reader :regex_tokens, :string_tokens
-
-        def [](name)
-            @tokens[name]
-        end
-
-        # Create a new token.
-        def add_token(name, regex, options = {}, &block)
-            token = Token.new(regex, name)
-            raise(ArgumentError, "Token %s already exists" % name) if @tokens.include?(name)
-            @tokens[token.name] = token
-            if token.string
-                @string_tokens << token
-                @tokens_by_string[token.string] = token
-            else
-                @regex_tokens << token
-            end
-
-            options.each do |name, option|
-                token.send(name.to_s + "=", option)
-            end
-
-            token.meta_def(:convert, &block) if block_given?
-
-            token
-        end
-
-        def initialize
-            @tokens = {}
-            @regex_tokens = []
-            @string_tokens = []
-            @tokens_by_string = {}
-        end
-
-        # Look up a token by its value, rather than name.
-        def lookup(string)
-            @tokens_by_string[string]
-        end
-
-        # Define more tokens.
-        def add_tokens(hash)
-            hash.each do |regex, name|
-                add_token(name, regex)
-            end
-        end
-
-        # Sort our tokens by length, so we know once we match, we're done.
-        # This helps us avoid the O(n^2) nature of token matching.
-        def sort_tokens
-            @string_tokens.sort! { |a, b| b.string.length <=> a.string.length }
-        end
-    end
-
-    TOKENS = TokenList.new
-    TOKENS.add_tokens(
-        '[' => :LBRACK,
-        ']' => :RBRACK,
-        '{' => :LBRACE,
-        '}' => :RBRACE,
-        '(' => :LPAREN,
-        ')' => :RPAREN,
-        '=' => :EQUALS,
-        '+=' => :APPENDS,
-        '==' => :ISEQUAL,
-        '>=' => :GREATEREQUAL,
-        '>' => :GREATERTHAN,
-        '<' => :LESSTHAN,
-        '<=' => :LESSEQUAL,
-        '!=' => :NOTEQUAL,
-        '!' => :NOT,
-        ',' => :COMMA,
-        '.' => :DOT,
-        ':' => :COLON,
-        '@' => :AT,
-        '<<|' => :LLCOLLECT,
-        '|>>' => :RRCOLLECT,
-        '<|' => :LCOLLECT,
-        '|>' => :RCOLLECT,
-        ';' => :SEMIC,
-        '?' => :QMARK,
-        '\\' => :BACKSLASH,
-        '=>' => :FARROW,
-        '+>' => :PARROW,
-        '+' => :PLUS,
-        '-' => :MINUS,
-        '/' => :DIV,
-        '*' => :TIMES,
-        '<<' => :LSHIFT,
-        '>>' => :RSHIFT,
-        %r{([a-z][-\w]*::)+[a-z][-\w]*} => :CLASSNAME,
-        %r{((::){0,1}[A-Z][-\w]*)+} => :CLASSREF
-    )
-
-    TOKENS.add_tokens "Whatever" => :DQTEXT, "Nomatter" => :SQTEXT, "alsonomatter" => :BOOLEAN
-
-    TOKENS.add_token :NUMBER, %r{\b(?:0[xX][0-9A-Fa-f]+|0?\d+(?:\.\d+)?(?:[eE]-?\d+)?)\b} do |lexer, value|
-        [TOKENS[:NAME], value]
-    end
-
-    TOKENS.add_token :NAME, %r{[a-z0-9][-\w]*} do |lexer, value|
-        string_token = self
-        # we're looking for keywords here
-        if tmp = KEYWORDS.lookup(value)
-            string_token = tmp
-            if [:TRUE, :FALSE].include?(string_token.name)
-                value = eval(value)
-                string_token = TOKENS[:BOOLEAN]
-            end
-        end
-        [string_token, value]
-    end
-
-    TOKENS.add_token :COMMENT, %r{#.*}, :skip => true
-
-    TOKENS.add_token :RETURN, "\n", :skip => true, :incr_line => true, :skip_text => true
-
-    TOKENS.add_token :SQUOTE, "'" do |lexer, value|
-        value = lexer.slurpstring(value)
-        [TOKENS[:SQTEXT], value]
-    end
-
-    TOKENS.add_token :DQUOTE, '"' do |lexer, value|
-        value = lexer.slurpstring(value)
-        [TOKENS[:DQTEXT], value]
-    end
-
-    TOKENS.add_token :VARIABLE, %r{\$(\w*::)*\w+} do |lexer, value|
-        value = value.sub(/^\$/, '')
-        [self, value]
-    end
-
-    TOKENS.sort_tokens
-
-    @@pairs = {
-        "{" => "}",
-        "(" => ")",
-        "[" => "]",
-        "<|" => "|>",
-        "<<|" => "|>>"
-    }
-
-    KEYWORDS = TokenList.new
-
-    KEYWORDS.add_tokens(
-        "case" => :CASE,
-        "class" => :CLASS,
-        "default" => :DEFAULT,
-        "define" => :DEFINE,
-        "import" => :IMPORT,
-        "if" => :IF,
-        "elsif" => :ELSIF,
-        "else" => :ELSE,
-        "inherits" => :INHERITS,
-        "node" => :NODE,
-        "and"  => :AND,
-        "or"   => :OR,
-        "undef"   => :UNDEF,
-        "false" => :FALSE,
-        "true" => :TRUE
-    )
-
-    def clear
-        initvars
-    end
-
-    def expected
-        return nil if @expected.empty?
-        name = @expected[-1]
-        raise "Could not find expected token %s" % name unless token = TOKENS.lookup(name)
-
-        return token
-    end
-
-    # scan the whole file
-    # basically just used for testing
-    def fullscan
-        array = []
-
-        self.scan { |token, str|
-            # Ignore any definition nesting problems
-            @indefine = false
-            array.push([token,str])
-        }
-        return array
-    end
-
-    # this is probably pretty damned inefficient...
-    # it'd be nice not to have to load the whole file first...
-    def file=(file)
-        @file = file
-        @line = 1
-        File.open(file) { |of|
-            str = ""
-            of.each { |line| str += line }
-            @scanner = StringScanner.new(str)
-        }
-    end
-
-    def find_string_token
-        matched_token = value = nil
-
-        # We know our longest string token is three chars, so try each size in turn
-        # until we either match or run out of chars.  This way our worst-case is three
-        # tries, where it is otherwise the number of string chars we have.  Also,
-        # the lookups are optimized hash lookups, instead of regex scans.
-        [3, 2, 1].each do |i|
-            str = @scanner.peek(i)
-            if matched_token = TOKENS.lookup(str)
-                value = @scanner.scan(matched_token.regex)
-                break
-            end
-        end
-
-        return matched_token, value
-    end
-
-    # Find the next token that matches a regex.  We look for these first.
-    def find_regex_token
-        @regex += 1
-        matched_token = nil
-        value = ""
-        length = 0
-
-        # I tried optimizing based on the first char, but it had
-        # a slightly negative affect and was a good bit more complicated.
-        TOKENS.regex_tokens.each do |token|
-            next unless match_length = @scanner.match?(token.regex) 
-            
-            # We've found a longer match
-            if match_length > length
-                value = @scanner.scan(token.regex) 
-                length = value.length
-                matched_token = token
-            end
-        end
-
-        return matched_token, value
-    end
-
-    # Find the next token, returning the string and the token.
-    def find_token
-        @find += 1
-        matched_token, value = find_regex_token
-
-        unless matched_token
-            matched_token, value = find_string_token
-        end
-
-        return matched_token, value
-    end
-
-    def indefine?
-        if defined? @indefine
-            @indefine
-        else
-            false
-        end
-    end
-
-    def initialize
-        @find = 0
-        @regex = 0
-        initvars()
-    end
-
-    def initvars
-        @line = 1
-        @previous_token = nil
-        @scanner = nil
-        @file = nil
-        # AAARRGGGG! okay, regexes in ruby are bloody annoying
-        # no one else has "\n" =~ /\s/
-        @skip = %r{[ \t]+}
-
-        @namestack = []
-        @indefine = false
-        @expected = []
-    end
-
-    # Make any necessary changes to the token and/or value.
-    def munge_token(token, value)
-        @line += 1 if token.incr_line
-
-        skip() if token.skip_text
-
-        return if token.skip
-
-        token, value = token.convert(self, value) if token.respond_to?(:convert)
-
-        return unless token
-
-        return token, value
-    end
-
-    # Go up one in the namespace.
-    def namepop
-        @namestack.pop
-    end
-
-    # Collect the current namespace.
-    def namespace
-        @namestack.join("::")
-    end
-
-    # This value might have :: in it, but we don't care -- it'll be
-    # handled normally when joining, and when popping we want to pop
-    # this full value, however long the namespace is.
-    def namestack(value)
-        @namestack << value
-    end
-
-    def rest
-        @scanner.rest
-    end
-
-    # this is the heart of the lexer
-    def scan
-        #Puppet.debug("entering scan")
-        raise Puppet::LexError.new("Invalid or empty string") unless @scanner
-
-        # Skip any initial whitespace.
-        skip()
-
-        until @scanner.eos? do
-            yielded = false
-            matched_token, value = find_token
-
-            # error out if we didn't match anything at all
-            if matched_token.nil?
-                nword = nil
-                # Try to pull a 'word' out of the remaining string.
-                if @scanner.rest =~ /^(\S+)/
-                    nword = $1
-                elsif @scanner.rest =~ /^(\s+)/
-                    nword = $1
-                else
-                    nword = @scanner.rest
-                end
-                raise "Could not match '%s'" % nword
-            end
-
-            final_token, value = munge_token(matched_token, value)
-
-            next unless final_token
-
-            if match = @@pairs[value] and final_token.name != :DQUOTE and final_token.name != :SQUOTE
-                @expected << match
-            elsif exp = @expected[-1] and exp == value and final_token.name != :DQUOTE and final_token.name != :SQUOTE
-                @expected.pop
-            end
-
-            yield [final_token.name, value]
-
-            if @previous_token
-                namestack(value) if @previous_token.name == :CLASS
-
-                if @previous_token.name == :DEFINE
-                    if indefine?
-                        msg = "Cannot nest definition %s inside %s" % [value, @indefine]
-                        self.indefine = false
-                        raise Puppet::ParseError, msg
-                    end
-
-                    @indefine = value
-                end
-            end
-
-            @previous_token = final_token
-            skip()
-        end
-        @scanner = nil
-
-        # This indicates that we're done parsing.
-        yield [false,false]
-    end
-
-    # Skip any skipchars in our remaining string.
-    def skip
-        @scanner.skip(@skip)
-    end
-
-    # we've encountered an opening quote...
-    # slurp in the rest of the string and return it
-    def slurpstring(quote)
-        # we search for the next quote that isn't preceded by a
-        # backslash; the caret is there to match empty strings
-        str = @scanner.scan_until(/([^\\]|^)#{quote}/)
-        if str.nil?
-            raise Puppet::LexError.new("Unclosed quote after '%s' in '%s'" %
-                [self.last,self.rest])
-        else
-            str.sub!(/#{quote}\Z/,"")
-            str.gsub!(/\\#{quote}/,quote)
-        end
-
-        # Add to our line count for every carriage return in multi-line strings.
-        @line += str.count("\n")
-
-        return str
-    end
-
-    # just parse a string, not a whole file
-    def string=(string)
-        @scanner = StringScanner.new(string)
-    end
-end
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
deleted file mode 100644
index 713f93e..0000000
--- a/lib/puppet/parser/parser.rb
+++ /dev/null
@@ -1,2080 +0,0 @@
-#
-# DO NOT MODIFY!!!!
-# This file is automatically generated by racc 1.4.5
-# from racc grammer file "grammar.ra".
-#
-
-require 'racc/parser'
-
-
-require 'puppet'
-require 'puppet/util/loadedfile'
-require 'puppet/parser/lexer'
-require 'puppet/parser/ast'
-#require 'puppet/parser/interpreter'
-
-module Puppet
-    class ParseError < Puppet::Error; end
-    class ImportError < Racc::ParseError; end
-    class AlreadyImportedError < ImportError; end
-end
-
-Puppet[:typecheck] = true
-Puppet[:paramcheck] = true
-
-
-module Puppet
-
-  module Parser
-
-    class Parser < Racc::Parser
-
-module_eval <<'..end grammar.ra modeval..id5cb4445525', 'grammar.ra', 741
-
-# It got too annoying having code in a file that needs to be compiled.
-require 'puppet/parser/parser_support'
-
-# Make emacs happy
-# Local Variables:
-# mode: ruby
-# End:
-
-# $Id$
-
-..end grammar.ra modeval..id5cb4445525
-
-##### racc 1.4.5 generates ###
-
-racc_reduce_table = [
- 0, 0, :racc_error,
- 1, 60, :_reduce_1,
- 1, 60, :_reduce_none,
- 1, 61, :_reduce_none,
- 2, 61, :_reduce_4,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 4, 71, :_reduce_18,
- 5, 71, :_reduce_19,
- 3, 71, :_reduce_20,
- 2, 71, :_reduce_21,
- 1, 77, :_reduce_none,
- 1, 77, :_reduce_none,
- 3, 77, :_reduce_24,
- 3, 77, :_reduce_25,
- 1, 78, :_reduce_none,
- 1, 78, :_reduce_none,
- 1, 78, :_reduce_none,
- 1, 78, :_reduce_none,
- 1, 78, :_reduce_none,
- 1, 78, :_reduce_none,
- 1, 78, :_reduce_none,
- 1, 78, :_reduce_33,
- 5, 64, :_reduce_34,
- 5, 64, :_reduce_35,
- 5, 64, :_reduce_36,
- 5, 75, :_reduce_37,
- 2, 65, :_reduce_38,
- 1, 94, :_reduce_39,
- 2, 94, :_reduce_40,
- 2, 66, :_reduce_41,
- 3, 95, :_reduce_42,
- 3, 95, :_reduce_43,
- 1, 96, :_reduce_none,
- 1, 96, :_reduce_none,
- 3, 96, :_reduce_46,
- 1, 97, :_reduce_none,
- 3, 97, :_reduce_48,
- 1, 98, :_reduce_none,
- 1, 98, :_reduce_none,
- 3, 99, :_reduce_51,
- 3, 99, :_reduce_52,
- 1, 100, :_reduce_none,
- 1, 100, :_reduce_none,
- 4, 102, :_reduce_55,
- 1, 88, :_reduce_none,
- 3, 88, :_reduce_57,
- 0, 89, :_reduce_none,
- 1, 89, :_reduce_none,
- 1, 104, :_reduce_60,
- 1, 80, :_reduce_61,
- 1, 82, :_reduce_62,
- 1, 103, :_reduce_none,
- 1, 103, :_reduce_none,
- 1, 103, :_reduce_none,
- 1, 103, :_reduce_none,
- 1, 103, :_reduce_none,
- 1, 103, :_reduce_none,
- 3, 67, :_reduce_69,
- 3, 76, :_reduce_70,
- 0, 90, :_reduce_71,
- 1, 90, :_reduce_72,
- 3, 90, :_reduce_73,
- 3, 107, :_reduce_74,
- 3, 109, :_reduce_75,
- 1, 110, :_reduce_none,
- 1, 110, :_reduce_none,
- 0, 93, :_reduce_78,
- 1, 93, :_reduce_79,
- 3, 93, :_reduce_80,
- 1, 111, :_reduce_none,
- 3, 111, :_reduce_82,
- 1, 101, :_reduce_none,
- 1, 101, :_reduce_none,
- 1, 101, :_reduce_none,
- 1, 101, :_reduce_none,
- 1, 101, :_reduce_none,
- 1, 101, :_reduce_none,
- 1, 108, :_reduce_none,
- 1, 108, :_reduce_none,
- 1, 108, :_reduce_none,
- 1, 108, :_reduce_none,
- 1, 108, :_reduce_none,
- 1, 108, :_reduce_none,
- 1, 108, :_reduce_none,
- 1, 108, :_reduce_none,
- 1, 108, :_reduce_none,
- 1, 108, :_reduce_none,
- 4, 84, :_reduce_99,
- 3, 84, :_reduce_100,
- 1, 86, :_reduce_101,
- 1, 86, :_reduce_102,
- 1, 83, :_reduce_103,
- 4, 79, :_reduce_104,
- 4, 79, :_reduce_105,
- 6, 69, :_reduce_106,
- 5, 69, :_reduce_107,
- 0, 113, :_reduce_none,
- 4, 113, :_reduce_109,
- 3, 113, :_reduce_110,
- 1, 106, :_reduce_none,
- 3, 106, :_reduce_112,
- 3, 106, :_reduce_113,
- 3, 106, :_reduce_114,
- 3, 106, :_reduce_115,
- 3, 106, :_reduce_116,
- 3, 106, :_reduce_117,
- 2, 106, :_reduce_118,
- 3, 106, :_reduce_119,
- 3, 106, :_reduce_120,
- 3, 106, :_reduce_121,
- 3, 106, :_reduce_122,
- 3, 106, :_reduce_123,
- 3, 106, :_reduce_124,
- 2, 106, :_reduce_125,
- 3, 106, :_reduce_126,
- 3, 106, :_reduce_127,
- 3, 106, :_reduce_128,
- 5, 68, :_reduce_129,
- 1, 114, :_reduce_none,
- 2, 114, :_reduce_131,
- 5, 115, :_reduce_132,
- 4, 115, :_reduce_133,
- 1, 116, :_reduce_none,
- 3, 116, :_reduce_135,
- 3, 85, :_reduce_136,
- 1, 118, :_reduce_none,
- 4, 118, :_reduce_138,
- 1, 120, :_reduce_none,
- 3, 120, :_reduce_140,
- 3, 119, :_reduce_141,
- 1, 117, :_reduce_none,
- 1, 117, :_reduce_none,
- 1, 117, :_reduce_none,
- 1, 117, :_reduce_none,
- 1, 117, :_reduce_none,
- 1, 117, :_reduce_none,
- 1, 117, :_reduce_none,
- 1, 117, :_reduce_149,
- 1, 121, :_reduce_150,
- 3, 121, :_reduce_151,
- 2, 70, :_reduce_152,
- 6, 72, :_reduce_153,
- 5, 72, :_reduce_154,
- 6, 73, :_reduce_155,
- 5, 73, :_reduce_156,
- 6, 74, :_reduce_157,
- 5, 74, :_reduce_158,
- 1, 92, :_reduce_none,
- 1, 87, :_reduce_none,
- 1, 87, :_reduce_none,
- 1, 124, :_reduce_none,
- 3, 124, :_reduce_163,
- 1, 126, :_reduce_none,
- 1, 126, :_reduce_none,
- 1, 126, :_reduce_none,
- 1, 126, :_reduce_none,
- 0, 62, :_reduce_168,
- 0, 127, :_reduce_169,
- 1, 122, :_reduce_none,
- 3, 122, :_reduce_171,
- 3, 122, :_reduce_172,
- 1, 128, :_reduce_none,
- 3, 128, :_reduce_174,
- 3, 129, :_reduce_175,
- 1, 129, :_reduce_176,
- 3, 129, :_reduce_177,
- 1, 129, :_reduce_178,
- 1, 125, :_reduce_none,
- 2, 125, :_reduce_180,
- 1, 123, :_reduce_none,
- 2, 123, :_reduce_182,
- 1, 130, :_reduce_none,
- 1, 130, :_reduce_none,
- 1, 81, :_reduce_185,
- 3, 105, :_reduce_186,
- 4, 105, :_reduce_187,
- 2, 105, :_reduce_188,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 0, 91, :_reduce_none,
- 1, 91, :_reduce_192 ]
-
-racc_reduce_n = 193
-
-racc_shift_n = 317
-
-racc_action_table = [
-    75,    57,    61,   260,   179,    38,    40,    35,    44,   196,
-    54,   287,    45,   239,     3,     6,   187,   298,   240,  -145,
-    74,    75,    57,    61,   286,    47,    38,    40,   194,   195,
-   132,    49,    38,    40,   112,    60,    64,   194,   195,    70,
-    41,    74,   149,    43,    55,    77,   178,   118,    66,    48,
-   141,    87,    49,    75,    57,    61,    60,    64,    49,   109,
-    70,    41,   253,   123,    43,    55,    77,    41,   105,    66,
-    43,  -146,    87,    74,    75,    57,    61,   202,   151,   152,
-   153,   139,   140,   142,    49,   282,   128,   133,    60,    64,
-   201,   239,    70,   281,    74,   149,   240,    55,    77,   271,
-   118,    66,   179,   141,    87,    49,    75,    57,    61,    60,
-    64,    49,   193,    70,    35,   132,   123,   174,    55,    77,
-   192,     3,    66,    35,   258,    87,    74,    75,    57,    61,
-     3,   151,   152,   153,   139,   140,   142,    49,   116,    35,
-   155,    60,    64,   153,   139,    70,     3,    74,   149,  -147,
-    55,    77,  -143,   118,    66,   156,   141,    87,    49,    75,
-    57,    61,    60,    64,    49,   157,    70,   153,   139,   123,
-   134,    55,    77,    57,    61,    66,    33,    34,    87,    74,
-    75,    57,    61,   132,   151,   152,   153,   139,   140,   142,
-    49,  -145,   203,   274,    60,    64,   187,   188,    70,   275,
-    74,   149,  -142,    55,    77,  -144,   118,    66,    45,   141,
-    87,    49,    75,    57,    61,    60,    64,    49,    44,    70,
-    57,    61,   123,  -142,    55,    77,  -159,   128,    66,   177,
-   181,    87,    74,    75,    57,    61,  -143,   151,   152,   153,
-   139,   140,   142,    49,   116,   198,   278,    60,    64,   194,
-   195,    70,   248,    74,   186,  -145,    55,    77,   187,   188,
-    66,   216,   183,    87,    49,   187,   217,  -142,    60,    64,
-   150,   283,    70,   151,   152,   153,   139,    55,    77,   145,
-   149,    66,   284,   285,    87,   190,   105,   290,   141,   143,
-   146,   148,   101,   190,    75,    57,    61,   151,   152,   153,
-   139,   140,   142,   151,   152,   153,   139,   140,   142,   116,
-    98,    97,   144,   147,    74,  -142,   151,   152,   153,   139,
-   140,   142,  -144,  -143,  -147,    49,    75,    57,    61,    60,
-    64,  -144,   246,    70,   151,   152,   153,   139,    55,    77,
-   244,   278,    66,   301,   302,    87,    74,    75,    57,    61,
-  -144,   179,  -145,  -148,    73,   190,  -143,    49,   310,  -192,
-    37,    60,    64,  -147,  -146,    70,   292,    74,   nil,   nil,
-    55,    77,   nil,   nil,    66,   nil,   nil,    87,    49,    75,
-    57,    61,    60,    64,   nil,   nil,    70,   nil,   nil,   nil,
-   nil,    55,    77,   nil,   nil,    66,   nil,   nil,    87,    74,
-    75,    57,    61,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-    49,   nil,   nil,   nil,    60,    64,   nil,   nil,    70,   nil,
-    74,   nil,   nil,    55,    77,   nil,   nil,    66,   nil,   nil,
-    87,    49,    75,    57,    61,    60,    64,   nil,   nil,    70,
-   nil,   nil,   nil,   nil,    55,    77,   nil,   nil,    66,   nil,
-   nil,    87,    74,    75,    57,    61,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,    49,   nil,   nil,   nil,    60,    64,   nil,
-   nil,    70,   nil,    74,   nil,   nil,    55,    77,   nil,   nil,
-    66,   nil,   nil,    87,    49,    75,    57,    61,    60,    64,
-   nil,   nil,    70,   nil,   nil,   nil,   nil,    55,    77,   nil,
-   nil,    66,   nil,   nil,    87,    74,    75,    57,    61,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,    49,    75,    57,    61,
-    60,    64,   nil,   nil,    70,   nil,    74,   nil,   nil,    55,
-    77,   nil,   nil,    66,   nil,   nil,    87,    49,    75,    57,
-    61,    60,    64,   nil,   nil,    70,   nil,   nil,    49,   nil,
-    55,    77,    60,    64,    66,   nil,    70,    87,    74,   nil,
-   nil,    55,   nil,   nil,   nil,    66,   nil,   nil,   nil,    49,
-    54,    57,    61,    60,    64,   nil,   nil,    70,   nil,   nil,
-   nil,   nil,    55,    77,   nil,   nil,    66,   nil,   nil,    87,
-    51,    75,    57,    61,   nil,   nil,   nil,    75,    57,    61,
-   nil,    49,   nil,   nil,   nil,    60,    64,   nil,   nil,    70,
-   nil,   nil,   nil,    52,    55,    75,    57,    61,    66,   nil,
-   nil,   nil,    49,   nil,   nil,   nil,    60,   168,    49,   nil,
-    70,   nil,    60,   209,   nil,   161,    70,   nil,   nil,    66,
-   nil,   161,   nil,   nil,   nil,    66,    49,   nil,   nil,   nil,
-    60,    64,   nil,   nil,    70,    75,    57,    61,   137,    55,
-   nil,   nil,   nil,    66,   nil,    75,    57,    61,   nil,   nil,
-   nil,    75,    57,    61,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    75,    57,    61,   nil,   nil,    49,    75,    57,    61,
-    60,    64,   nil,   nil,    70,   nil,    49,   nil,   nil,    55,
-    60,    64,    49,    66,    70,   nil,    60,    64,   nil,    55,
-    70,   nil,    49,    66,   nil,    55,    60,    64,    49,    66,
-    70,   nil,    60,    64,   nil,    55,    70,   nil,   nil,    66,
-   nil,    55,    75,    57,    61,    66,   nil,   nil,    75,    57,
-    61,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    75,    57,
-    61,   nil,   nil,   nil,   nil,    57,    61,   nil,   nil,   nil,
-   nil,   nil,   nil,    49,   nil,    57,    61,    60,    64,    49,
-   nil,    70,   nil,    60,    64,   nil,    55,    70,   nil,    49,
-    66,   nil,    55,    60,    64,    49,    66,    70,   nil,    60,
-   209,   nil,    55,    70,   nil,    49,    66,   nil,   161,    60,
-   209,   nil,    66,    70,    57,    61,    57,    61,   161,   nil,
-   nil,   nil,    66,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-    57,    61,    57,    61,   270,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,    49,   nil,    49,   nil,    60,    64,
-    60,   209,    70,   nil,    70,   nil,    52,    55,   nil,   161,
-    49,    66,    49,    66,    60,   209,    60,    64,    70,   nil,
-    70,    57,    61,   161,    52,    55,   nil,    66,   nil,    66,
-   nil,    57,    61,   nil,   nil,   280,   nil,    57,    61,   nil,
-   nil,   130,   nil,   nil,   nil,   nil,   nil,    57,    61,   nil,
-   nil,    49,   nil,   nil,   nil,    60,    64,    57,    61,    70,
-   210,    49,   nil,    52,    55,    60,   209,    49,    66,    70,
-   nil,    60,   209,   nil,   161,    70,   nil,    49,    66,   nil,
-   161,    60,   209,   nil,    66,    70,   nil,    49,    57,    61,
-   161,    60,   209,   nil,    66,    70,   nil,   nil,   nil,   nil,
-   161,   nil,   nil,   nil,    66,   145,   149,   nil,   205,   nil,
-   nil,   nil,   nil,   nil,   141,   143,   146,   148,    49,   nil,
-   nil,   nil,    60,    64,   nil,   nil,    70,   nil,   nil,   nil,
-    52,    55,   nil,   nil,   nil,    66,   nil,   nil,   144,   147,
-   145,   149,   151,   152,   153,   139,   140,   142,   215,   141,
-   143,   146,   148,   145,   149,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   141,   143,   146,   148,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   144,   147,   145,   149,   151,   152,   153,
-   139,   140,   142,   nil,   141,   143,   146,   148,   145,   149,
-   151,   152,   153,   139,   140,   142,   nil,   141,   143,   146,
-   148,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   147,
-   289,   nil,   151,   152,   153,   139,   140,   142,   nil,   nil,
-   nil,   144,   147,   nil,   nil,   151,   152,   153,   139,   140,
-   142,    16,   294,    23,    26,   nil,     1,     4,   nil,     9,
-   nil,    13,   nil,    20,   nil,    27,   nil,   nil,     3,     6,
-   nil,   295,   nil,    16,   nil,    23,    26,   nil,     1,     4,
-   nil,     9,   nil,    13,   nil,    20,   nil,    27,   nil,   nil,
-     3,     6,    16,   276,    23,    26,   nil,     1,     4,   nil,
-     9,   nil,    13,   nil,    20,   nil,    27,   nil,   nil,     3,
-     6,   nil,   307,   nil,    16,   nil,    23,    26,   nil,     1,
-     4,   nil,     9,   nil,    13,   nil,    20,   nil,    27,   nil,
-   nil,     3,     6,    16,   230,    23,    26,   nil,     1,     4,
-   nil,     9,   nil,    13,   nil,    20,   nil,    27,   nil,   nil,
-     3,     6,   nil,   312,   nil,    16,   nil,    23,    26,   nil,
-     1,     4,   nil,     9,   nil,    13,   nil,    20,   nil,    27,
-   nil,   nil,     3,     6,    16,   314,    23,    26,   nil,     1,
-     4,   nil,     9,   nil,    13,   nil,    20,   nil,    27,   nil,
-   nil,     3,     6,   nil,   256,   nil,    16,   nil,    23,    26,
-   nil,     1,     4,   nil,     9,   nil,    13,   nil,    20,   nil,
-    27,   nil,   nil,     3,     6,    16,   315,    23,    26,   nil,
-     1,     4,   nil,     9,   nil,    13,   nil,    20,   nil,    27,
-   nil,   nil,     3,     6,   nil,   250,   nil,    16,   nil,    23,
-    26,   nil,     1,     4,   nil,     9,   nil,    13,   nil,    20,
-   nil,    27,   nil,   nil,     3,     6,    16,   316,    23,    26,
-   nil,     1,     4,   nil,     9,   nil,    13,   nil,    20,   nil,
-    27,   nil,   nil,     3,     6,   nil,   nil,   nil,    16,   nil,
-    23,    26,   nil,     1,     4,   nil,     9,   nil,    13,   nil,
-    20,   nil,    27,   nil,   nil,     3,     6,    16,   nil,    23,
-    26,   nil,     1,     4,   nil,     9,   nil,    13,   nil,    20,
-   nil,    27,   nil,   nil,     3,     6,    16,   nil,    23,    26,
-   nil,     1,     4,   nil,     9,   nil,    13,   nil,    20,   nil,
-    27,   nil,   nil,     3,     6 ]
-
-racc_action_check = [
-    34,    34,    34,   191,   105,   112,   112,    17,    11,   125,
-    64,   242,    11,   287,    17,    17,   273,   273,   287,   263,
-    34,   153,   153,   153,   242,    11,     9,     9,   191,   191,
-    64,    34,   109,   109,    39,    34,    34,   125,   125,    34,
-   112,   153,   222,   112,    34,    34,   105,    48,    34,    11,
-   222,    34,   153,   139,   139,   139,   153,   153,    48,    39,
-   153,     9,   180,    48,     9,   153,   153,   109,   181,   153,
-   109,    69,   153,   139,   140,   140,   140,   129,   222,   222,
-   222,   222,   222,   222,   139,   236,   204,    68,   139,   139,
-   129,   157,   139,   236,   140,   227,   157,   139,   139,   204,
-   197,   139,   168,   227,   139,   140,   151,   151,   151,   140,
-   140,   197,   120,   140,   101,   168,   197,   101,   140,   140,
-   120,   101,   140,    26,   189,   140,   151,   141,   141,   141,
-    26,   227,   227,   227,   227,   227,   227,   151,   190,     4,
-    93,   151,   151,   232,   232,   151,     4,   141,   225,    67,
-   151,   151,    65,   118,   151,    94,   225,   151,   141,    77,
-    77,    77,   141,   141,   118,    96,   141,   231,   231,   118,
-    73,   141,   141,    23,    23,   141,     1,     1,   141,    77,
-   142,   142,   142,   209,   225,   225,   225,   225,   225,   225,
-    77,    62,   131,   211,    77,    77,   131,   131,    77,   217,
-   142,   224,    78,    77,    77,   173,    47,    77,    90,   224,
-    77,   142,    16,    16,    16,   142,   142,    47,    59,   142,
-   156,   156,    47,    58,   142,   142,    55,    50,   142,   102,
-   106,   142,    16,    74,    74,    74,   167,   224,   224,   224,
-   224,   224,   224,    16,    45,   127,   230,    16,    16,   127,
-   127,    16,   166,    74,   113,   165,    16,    16,   113,   113,
-    16,   136,   110,    16,    74,   136,   136,   163,    74,    74,
-    84,   239,    74,   221,   221,   221,   221,    74,    74,    84,
-    84,    74,   240,   241,    74,   162,    37,   245,    84,    84,
-    84,    84,    36,   115,    87,    87,    87,   220,   220,   220,
-   220,   220,   220,   228,   228,   228,   228,   228,   228,   248,
-    30,    27,    84,    84,    87,   262,    84,    84,    84,    84,
-    84,    84,    72,   264,   265,    87,   149,   149,   149,    87,
-    87,   267,   160,    87,   219,   219,   219,   219,    87,    87,
-   158,   276,    87,   278,   281,    87,   149,   148,   148,   148,
-    89,   116,    79,    80,    15,   293,    81,   149,   297,   298,
-     7,   149,   149,    83,    85,   149,   247,   148,   nil,   nil,
-   149,   149,   nil,   nil,   149,   nil,   nil,   149,   148,   143,
-   143,   143,   148,   148,   nil,   nil,   148,   nil,   nil,   nil,
-   nil,   148,   148,   nil,   nil,   148,   nil,   nil,   148,   143,
-   144,   144,   144,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   143,   nil,   nil,   nil,   143,   143,   nil,   nil,   143,   nil,
-   144,   nil,   nil,   143,   143,   nil,   nil,   143,   nil,   nil,
-   143,   144,    33,    33,    33,   144,   144,   nil,   nil,   144,
-   nil,   nil,   nil,   nil,   144,   144,   nil,   nil,   144,   nil,
-   nil,   144,    33,   152,   152,   152,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,    33,   nil,   nil,   nil,    33,    33,   nil,
-   nil,    33,   nil,   152,   nil,   nil,    33,    33,   nil,   nil,
-    33,   nil,   nil,    33,   152,   147,   147,   147,   152,   152,
-   nil,   nil,   152,   nil,   nil,   nil,   nil,   152,   152,   nil,
-   nil,   152,   nil,   nil,   152,   147,   146,   146,   146,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   147,    44,    44,    44,
-   147,   147,   nil,   nil,   147,   nil,   146,   nil,   nil,   147,
-   147,   nil,   nil,   147,   nil,   nil,   147,   146,   145,   145,
-   145,   146,   146,   nil,   nil,   146,   nil,   nil,    44,   nil,
-   146,   146,    44,    44,   146,   nil,    44,   146,   145,   nil,
-   nil,    44,   nil,   nil,   nil,    44,   nil,   nil,   nil,   145,
-    13,    13,    13,   145,   145,   nil,   nil,   145,   nil,   nil,
-   nil,   nil,   145,   145,   nil,   nil,   145,   nil,   nil,   145,
-    13,    98,    98,    98,   nil,   nil,   nil,   246,   246,   246,
-   nil,    13,   nil,   nil,   nil,    13,    13,   nil,   nil,    13,
-   nil,   nil,   nil,    13,    13,   274,   274,   274,    13,   nil,
-   nil,   nil,    98,   nil,   nil,   nil,    98,    98,   246,   nil,
-    98,   nil,   246,   246,   nil,    98,   246,   nil,   nil,    98,
-   nil,   246,   nil,   nil,   nil,   246,   274,   nil,   nil,   nil,
-   274,   274,   nil,   nil,   274,    75,    75,    75,    75,   274,
-   nil,   nil,   nil,   274,   nil,    54,    54,    54,   nil,   nil,
-   nil,   284,   284,   284,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   178,   178,   178,   nil,   nil,    75,    20,    20,    20,
-    75,    75,   nil,   nil,    75,   nil,    54,   nil,   nil,    75,
-    54,    54,   284,    75,    54,   nil,   284,   284,   nil,    54,
-   284,   nil,   178,    54,   nil,   284,   178,   178,    20,   284,
-   178,   nil,    20,    20,   nil,   178,    20,   nil,   nil,   178,
-   nil,    20,   179,   179,   179,    20,   nil,   nil,   283,   283,
-   283,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   185,   185,
-   185,   nil,   nil,   nil,   nil,   193,   193,   nil,   nil,   nil,
-   nil,   nil,   nil,   179,   nil,   192,   192,   179,   179,   283,
-   nil,   179,   nil,   283,   283,   nil,   179,   283,   nil,   185,
-   179,   nil,   283,   185,   185,   193,   283,   185,   nil,   193,
-   193,   nil,   185,   193,   nil,   192,   185,   nil,   193,   192,
-   192,   nil,   193,   192,   202,   202,   210,   210,   192,   nil,
-   nil,   nil,   192,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   282,   282,   128,   128,   202,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   202,   nil,   210,   nil,   202,   202,
-   210,   210,   202,   nil,   210,   nil,   202,   202,   nil,   210,
-   282,   202,   128,   210,   282,   282,   128,   128,   282,   nil,
-   128,    51,    51,   282,   128,   128,   nil,   282,   nil,   128,
-   nil,   234,   234,   nil,   nil,   234,   nil,   296,   296,   nil,
-   nil,    51,   nil,   nil,   nil,   nil,   nil,   155,   155,   nil,
-   nil,    51,   nil,   nil,   nil,    51,    51,   133,   133,    51,
-   133,   234,   nil,    51,    51,   234,   234,   296,    51,   234,
-   nil,   296,   296,   nil,   234,   296,   nil,   155,   234,   nil,
-   296,   155,   155,   nil,   296,   155,   nil,   133,   132,   132,
-   155,   133,   133,   nil,   155,   133,   nil,   nil,   nil,   nil,
-   133,   nil,   nil,   nil,   133,   100,   100,   nil,   132,   nil,
-   nil,   nil,   nil,   nil,   100,   100,   100,   100,   132,   nil,
-   nil,   nil,   132,   132,   nil,   nil,   132,   nil,   nil,   nil,
-   132,   132,   nil,   nil,   nil,   132,   nil,   nil,   100,   100,
-   135,   135,   100,   100,   100,   100,   100,   100,   135,   135,
-   135,   135,   135,   226,   226,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   226,   226,   226,   226,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   135,   135,   223,   223,   135,   135,   135,
-   135,   135,   135,   nil,   223,   223,   223,   223,    99,    99,
-   226,   226,   226,   226,   226,   226,   nil,    99,    99,    99,
-    99,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   223,
-   244,   nil,   223,   223,   223,   223,   223,   223,   nil,   nil,
-   nil,    99,    99,   nil,   nil,    99,    99,    99,    99,    99,
-    99,   244,   249,   244,   244,   nil,   244,   244,   nil,   244,
-   nil,   244,   nil,   244,   nil,   244,   nil,   nil,   244,   244,
-   nil,   255,   nil,   249,   nil,   249,   249,   nil,   249,   249,
-   nil,   249,   nil,   249,   nil,   249,   nil,   249,   nil,   nil,
-   249,   249,   255,   229,   255,   255,   nil,   255,   255,   nil,
-   255,   nil,   255,   nil,   255,   nil,   255,   nil,   nil,   255,
-   255,   nil,   288,   nil,   229,   nil,   229,   229,   nil,   229,
-   229,   nil,   229,   nil,   229,   nil,   229,   nil,   229,   nil,
-   nil,   229,   229,   288,   150,   288,   288,   nil,   288,   288,
-   nil,   288,   nil,   288,   nil,   288,   nil,   288,   nil,   nil,
-   288,   288,   nil,   301,   nil,   150,   nil,   150,   150,   nil,
-   150,   150,   nil,   150,   nil,   150,   nil,   150,   nil,   150,
-   nil,   nil,   150,   150,   301,   302,   301,   301,   nil,   301,
-   301,   nil,   301,   nil,   301,   nil,   301,   nil,   301,   nil,
-   nil,   301,   301,   nil,   183,   nil,   302,   nil,   302,   302,
-   nil,   302,   302,   nil,   302,   nil,   302,   nil,   302,   nil,
-   302,   nil,   nil,   302,   302,   183,   311,   183,   183,   nil,
-   183,   183,   nil,   183,   nil,   183,   nil,   183,   nil,   183,
-   nil,   nil,   183,   183,   nil,   177,   nil,   311,   nil,   311,
-   311,   nil,   311,   311,   nil,   311,   nil,   311,   nil,   311,
-   nil,   311,   nil,   nil,   311,   311,   177,   313,   177,   177,
-   nil,   177,   177,   nil,   177,   nil,   177,   nil,   177,   nil,
-   177,   nil,   nil,   177,   177,   nil,   nil,   nil,   313,   nil,
-   313,   313,   nil,   313,   313,   nil,   313,   nil,   313,   nil,
-   313,   nil,   313,   nil,   nil,   313,   313,    19,   nil,    19,
-    19,   nil,    19,    19,   nil,    19,   nil,    19,   nil,    19,
-   nil,    19,   nil,   nil,    19,    19,     0,   nil,     0,     0,
-   nil,     0,     0,   nil,     0,   nil,     0,   nil,     0,   nil,
-     0,   nil,   nil,     0,     0 ]
-
-racc_action_pointer = [
-  1308,   163,   nil,   nil,   101,   nil,   nil,   354,   nil,    23,
-   nil,     6,   nil,   568,   nil,   354,   210,   -31,   nil,  1289,
-   685,   nil,   nil,   170,   nil,   nil,    85,   269,   nil,   nil,
-   304,   nil,   nil,   430,    -2,   nil,   257,   248,   nil,    24,
-   nil,   nil,   nil,   nil,   515,   206,   nil,   184,    25,   nil,
-   217,   858,   nil,   nil,   663,   224,   nil,   nil,   202,   216,
-   nil,   nil,   170,   nil,     8,   131,   nil,   128,    66,    50,
-   nil,   nil,   301,   170,   231,   653,   nil,   157,   181,   331,
-   332,   335,   nil,   342,   264,   343,   nil,   292,   nil,   329,
-   202,   nil,   nil,   134,   145,   nil,   143,   nil,   589,  1013,
-   930,    76,   223,   nil,   nil,    -5,   220,   nil,   nil,    29,
-   256,   nil,     2,   249,   nil,   283,   342,   nil,   131,   nil,
-    96,   nil,   nil,   nil,   nil,   -11,   nil,   201,   819,    67,
-   nil,   187,   925,   894,   nil,   965,   256,   nil,   nil,    51,
-    72,   125,   178,   377,   398,   536,   504,   483,   345,   324,
-  1147,   104,   451,    19,   nil,   884,   217,    58,   334,   nil,
-   293,   nil,   275,   246,   nil,   234,   234,   215,    93,   nil,
-   nil,   nil,   nil,   184,   nil,   nil,   nil,  1248,   679,   730,
-    55,    30,   nil,  1207,   nil,   746,   nil,   nil,   nil,   117,
-   100,   -20,   762,   752,   nil,   nil,   nil,    78,   nil,   nil,
-   nil,   nil,   801,   nil,    76,   nil,   nil,   nil,   nil,   161,
-   803,   184,   nil,   nil,   nil,   nil,   nil,   194,   nil,   282,
-   245,   221,    26,  1000,   185,   132,   978,    79,   251,  1106,
-   217,   113,    89,   nil,   868,   nil,    75,   nil,   nil,   258,
-   269,   260,     1,   nil,  1043,   280,   595,   359,   271,  1065,
-   nil,   nil,   nil,   nil,   nil,  1084,   nil,   nil,   nil,   nil,
-   nil,   nil,   294,    -2,   302,   303,   nil,   310,   nil,   nil,
-   nil,   nil,   nil,     7,   613,   nil,   312,   nil,   337,   nil,
-   nil,   338,   817,   736,   669,   nil,   nil,   -20,  1125,   nil,
-   nil,   nil,   nil,   345,   nil,   nil,   874,   351,   352,   nil,
-   nil,  1166,  1188,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,  1229,   nil,  1270,   nil,   nil,   nil ]
-
-racc_action_default = [
-  -168,  -193,    -7,  -161,  -193,    -8,  -159,  -193,    -9,  -193,
-   -10,  -193,   -11,  -160,   -12,  -193,  -193,  -193,   -13,    -1,
-  -193,   -14,    -2,  -193,   -15,    -3,  -193,   -39,   -16,    -5,
-  -193,   -17,    -6,  -193,  -193,  -160,  -168,   -78,  -166,  -168,
-  -165,  -164,  -162,  -167,  -193,   -71,   -41,  -168,  -168,  -185,
-   -21,  -193,   -33,   -22,  -193,   -62,   -23,  -101,   -26,  -193,
-  -103,  -102,   -27,  -148,   -61,   -28,   -60,   -29,  -193,   -30,
-  -149,   -31,   -32,  -193,  -193,  -193,   -96,  -193,   -90,   -94,
-   -98,   -91,   -95,   -92,  -193,   -97,   -93,  -193,  -111,   -89,
-  -193,   -38,    -4,  -193,  -152,  -150,  -168,   -40,   -71,   -69,
-   -70,  -193,  -193,  -181,   -79,  -193,  -191,   -76,   -77,  -193,
-  -193,  -179,  -193,  -193,   -81,  -191,  -193,   -72,  -168,   -47,
-  -193,   -54,   -53,   -61,   -44,  -193,   -45,  -193,  -193,  -193,
-   -20,  -193,  -193,  -193,   317,  -193,  -193,  -188,  -125,  -193,
-  -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,
-  -193,  -193,  -193,  -193,  -118,  -193,  -193,  -169,  -193,  -170,
-   -58,   -62,  -191,   -64,   -56,   -67,  -193,   -65,   -61,  -147,
-   -68,  -146,   -66,   -63,  -184,  -182,  -183,  -193,  -193,  -193,
-  -193,  -192,  -180,  -193,  -163,  -193,  -105,  -189,  -190,  -193,
-  -192,  -193,  -193,  -193,   -50,   -49,   -43,  -193,   -42,   -24,
-   -25,   -18,  -193,  -104,  -193,  -100,  -142,  -145,  -143,   -61,
-  -193,  -193,  -136,  -144,  -137,  -128,  -186,  -190,  -114,  -116,
-  -120,  -117,  -122,  -127,  -124,  -121,  -126,  -123,  -119,  -193,
-  -108,  -112,  -113,  -115,  -193,  -130,  -193,  -134,  -151,  -178,
-  -176,  -193,  -193,  -173,  -193,  -193,   -59,  -193,   -71,  -193,
-  -156,   -75,   -74,   -37,   -80,  -193,  -158,   -82,   -36,   -73,
-   -48,   -51,   -84,   -88,   -85,   -86,   -87,   -83,   -52,   -46,
-   -19,   -99,  -139,  -191,  -193,  -187,  -108,  -107,  -193,  -131,
-  -129,  -193,  -193,  -193,  -193,  -171,  -172,  -193,  -193,  -154,
-   -34,   -57,   -35,  -191,  -155,  -157,  -193,  -193,  -190,  -141,
-  -106,  -193,  -193,  -135,  -177,  -175,  -174,  -153,   -55,  -140,
-  -138,  -193,  -110,  -193,  -133,  -109,  -132 ]
-
-racc_goto_table = [
-     7,    92,    65,    11,   214,   115,   180,    19,   170,   243,
-   107,   164,   211,    56,    50,   189,   104,    36,   235,     7,
-    90,    71,    11,    15,    42,   199,   277,    63,   261,   268,
-    22,   296,   125,   127,   237,   269,   113,   234,    46,    96,
-    65,   106,   212,   245,   273,    94,   131,   158,   102,    39,
-   110,    56,   129,   160,   241,   242,    91,   175,   162,    71,
-   nil,   nil,   247,   nil,   nil,    63,   103,   136,    93,   111,
-   nil,   nil,   300,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   272,   nil,   nil,   nil,   nil,   nil,   167,   nil,   211,
-   nil,   nil,   114,   nil,   nil,   nil,   nil,   279,   nil,   199,
-    62,   nil,   114,   191,   nil,   nil,   172,   nil,   nil,   nil,
-   nil,   nil,    63,   237,   176,   nil,   nil,    65,   nil,   nil,
-   nil,    65,   208,   114,   182,   nil,   159,   184,   200,   nil,
-   nil,   nil,    56,   204,   122,   122,    71,   nil,    62,   306,
-    71,   nil,    63,   nil,   208,   nil,    63,    63,   nil,   nil,
-     7,   nil,   nil,    11,   107,   nil,   170,   229,    69,   291,
-   254,   303,   nil,   259,   nil,   nil,   nil,   309,   nil,    63,
-   nil,   nil,   nil,   297,   nil,   211,   nil,     7,   nil,   nil,
-    11,   264,   264,     7,   249,   165,    11,   nil,   nil,   nil,
-   255,    65,   nil,   308,   nil,   nil,    69,   nil,   nil,   208,
-   266,   266,   200,   nil,   nil,   122,    63,    63,   293,   nil,
-    71,    92,   nil,   nil,   nil,    62,    63,   nil,   nil,    62,
-   207,   nil,   nil,   208,    63,   nil,   251,   252,   nil,     7,
-   nil,    92,    11,   257,    58,   167,   nil,    92,   nil,   nil,
-   nil,   nil,   207,   171,     7,    67,   nil,    11,    63,     7,
-   nil,   288,    11,   nil,   172,     7,   nil,   nil,    11,   nil,
-    63,   nil,   nil,   nil,   nil,    72,   nil,   nil,   121,   121,
-    92,   208,    58,    69,   nil,    95,   nil,    69,   171,   263,
-   263,   nil,   nil,    67,   122,   208,   nil,   nil,     7,    62,
-   nil,    11,   nil,    92,   nil,    92,    63,   207,   nil,   nil,
-   171,     7,     7,    72,    11,    11,   nil,   nil,   311,   313,
-    63,     7,   nil,     7,    11,   nil,    11,   nil,   nil,   163,
-   nil,   207,   299,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   169,   304,   305,   165,   nil,   nil,   nil,   171,   171,   121,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,    69,   nil,    58,
-   173,   nil,   nil,    58,   206,   171,   nil,   nil,   nil,   nil,
-    67,   nil,   nil,   nil,    67,   169,   nil,   nil,   nil,   207,
-   nil,   nil,   nil,   nil,   nil,   nil,   206,   nil,   nil,   171,
-    72,   nil,   nil,   207,    72,   213,   nil,   169,   nil,   nil,
-   nil,   171,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   213,   238,   nil,
-   nil,   nil,   nil,   262,   262,   nil,   nil,   nil,   121,   nil,
-   nil,   nil,   nil,    58,   265,   265,   nil,   171,   nil,    84,
-   nil,   206,   nil,   nil,    67,   nil,   nil,   nil,   nil,   nil,
-   nil,   171,   169,   nil,   267,   267,    99,   100,   nil,   nil,
-   nil,   nil,   nil,   nil,    72,   206,   nil,   nil,   nil,   nil,
-   nil,   nil,   213,   nil,   nil,   nil,   169,   163,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   169,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   213,   135,   nil,   nil,
-   138,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   173,   nil,
-   154,   nil,   nil,   206,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   169,   nil,   nil,   206,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   169,   nil,
-   nil,   nil,   nil,   nil,   213,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   213,   nil,
-   nil,   nil,   218,   219,   220,   221,   222,   223,   224,   225,
-   226,   227,   228,   nil,   231,   232,   233 ]
-
-racc_goto_check = [
-    20,     4,    23,    33,    60,    31,    32,     2,    46,    70,
-    48,    43,    58,    20,    18,    32,    51,    28,    56,    20,
-    33,    26,    33,     1,    67,    19,    54,    45,    42,    42,
-     3,    53,    37,    37,    58,    38,    52,    55,    36,    28,
-    23,    34,    59,    30,    61,    62,    52,    63,    64,    65,
-    66,    20,    18,    29,    68,    69,     5,    71,    31,    26,
-   nil,   nil,    32,   nil,   nil,    45,     3,    52,    49,     3,
-   nil,   nil,    54,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    60,   nil,   nil,   nil,   nil,   nil,    23,   nil,    58,
-   nil,   nil,    49,   nil,   nil,   nil,   nil,    56,   nil,    19,
-    22,   nil,    49,    37,   nil,   nil,    26,   nil,   nil,   nil,
-   nil,   nil,    45,    58,    28,   nil,   nil,    23,   nil,   nil,
-   nil,    23,    23,    49,    67,   nil,     3,    67,    20,   nil,
-   nil,   nil,    20,    18,    22,    22,    26,   nil,    22,    70,
-    26,   nil,    45,   nil,    23,   nil,    45,    45,   nil,   nil,
-    20,   nil,   nil,    33,    48,   nil,    46,     2,    25,    43,
-    51,    58,   nil,    48,   nil,   nil,   nil,    60,   nil,    45,
-   nil,   nil,   nil,    32,   nil,    58,   nil,    20,   nil,   nil,
-    33,    23,    23,    20,     2,    22,    33,   nil,   nil,   nil,
-     2,    23,   nil,    32,   nil,   nil,    25,   nil,   nil,    23,
-    26,    26,    20,   nil,   nil,    22,    45,    45,    31,   nil,
-    26,     4,   nil,   nil,   nil,    22,    45,   nil,   nil,    22,
-    22,   nil,   nil,    23,    45,   nil,    49,    49,   nil,    20,
-   nil,     4,    33,    49,    21,    23,   nil,     4,   nil,   nil,
-   nil,   nil,    22,    25,    20,    24,   nil,    33,    45,    20,
-   nil,     2,    33,   nil,    26,    20,   nil,   nil,    33,   nil,
-    45,   nil,   nil,   nil,   nil,    27,   nil,   nil,    21,    21,
-     4,    23,    21,    25,   nil,    27,   nil,    25,    25,    22,
-    22,   nil,   nil,    24,    22,    23,   nil,   nil,    20,    22,
-   nil,    33,   nil,     4,   nil,     4,    45,    22,   nil,   nil,
-    25,    20,    20,    27,    33,    33,   nil,   nil,     2,     2,
-    45,    20,   nil,    20,    33,   nil,    33,   nil,   nil,    21,
-   nil,    22,    49,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-    24,    49,    49,    22,   nil,   nil,   nil,    25,    25,    21,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,    25,   nil,    21,
-    27,   nil,   nil,    21,    21,    25,   nil,   nil,   nil,   nil,
-    24,   nil,   nil,   nil,    24,    24,   nil,   nil,   nil,    22,
-   nil,   nil,   nil,   nil,   nil,   nil,    21,   nil,   nil,    25,
-    27,   nil,   nil,    22,    27,    27,   nil,    24,   nil,   nil,
-   nil,    25,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,    27,    27,   nil,
-   nil,   nil,   nil,    21,    21,   nil,   nil,   nil,    21,   nil,
-   nil,   nil,   nil,    21,    24,    24,   nil,    25,   nil,    47,
-   nil,    21,   nil,   nil,    24,   nil,   nil,   nil,   nil,   nil,
-   nil,    25,    24,   nil,    27,    27,    47,    47,   nil,   nil,
-   nil,   nil,   nil,   nil,    27,    21,   nil,   nil,   nil,   nil,
-   nil,   nil,    27,   nil,   nil,   nil,    24,    21,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    24,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,    27,    47,   nil,   nil,
-    47,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    27,   nil,
-    47,   nil,   nil,    21,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,    24,   nil,   nil,    21,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    24,   nil,
-   nil,   nil,   nil,   nil,    27,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    27,   nil,
-   nil,   nil,    47,    47,    47,    47,    47,    47,    47,    47,
-    47,    47,    47,   nil,    47,    47,    47 ]
-
-racc_goto_pointer = [
-   nil,    23,     7,    30,   -18,    39,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,     1,  -103,
-     0,   221,    87,   -11,   232,   145,     8,   252,    13,   -45,
-  -117,   -40,  -100,     3,     4,   nil,    27,   -15,  -162,   nil,
-   nil,   nil,  -164,   -87,   nil,    14,   -90,   413,   -27,    48,
-   nil,   -21,    -8,  -242,  -204,  -118,  -137,   nil,  -121,   -91,
-  -129,  -166,    22,   -49,    12,    40,    11,    15,  -103,  -102,
-  -148,   -44 ]
-
-racc_goto_default = [
-   nil,   nil,   nil,   124,    25,    29,    32,     2,     5,     8,
-    10,    12,    14,    18,    21,    24,    28,    31,   nil,    53,
-    76,    78,    79,    81,    83,    85,    86,    89,    30,   nil,
-   nil,   nil,   nil,    59,   nil,    17,   nil,   nil,   126,   197,
-   119,   120,   nil,   nil,   166,    80,    82,   nil,   117,    88,
-   108,   nil,   nil,   185,   nil,   nil,   nil,   236,    68,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil ]
-
-racc_token_table = {
- false => 0,
- Object.new => 1,
- :LBRACK => 2,
- :DQTEXT => 3,
- :SQTEXT => 4,
- :RBRACK => 5,
- :LBRACE => 6,
- :RBRACE => 7,
- :SYMBOL => 8,
- :FARROW => 9,
- :COMMA => 10,
- :TRUE => 11,
- :FALSE => 12,
- :EQUALS => 13,
- :APPENDS => 14,
- :LESSEQUAL => 15,
- :NOTEQUAL => 16,
- :DOT => 17,
- :COLON => 18,
- :LLCOLLECT => 19,
- :RRCOLLECT => 20,
- :QMARK => 21,
- :LPAREN => 22,
- :RPAREN => 23,
- :ISEQUAL => 24,
- :GREATEREQUAL => 25,
- :GREATERTHAN => 26,
- :LESSTHAN => 27,
- :IF => 28,
- :ELSE => 29,
- :IMPORT => 30,
- :DEFINE => 31,
- :ELSIF => 32,
- :VARIABLE => 33,
- :CLASS => 34,
- :INHERITS => 35,
- :NODE => 36,
- :BOOLEAN => 37,
- :NAME => 38,
- :SEMIC => 39,
- :CASE => 40,
- :DEFAULT => 41,
- :AT => 42,
- :LCOLLECT => 43,
- :RCOLLECT => 44,
- :CLASSNAME => 45,
- :CLASSREF => 46,
- :NOT => 47,
- :OR => 48,
- :AND => 49,
- :UNDEF => 50,
- :PARROW => 51,
- :PLUS => 52,
- :MINUS => 53,
- :TIMES => 54,
- :DIV => 55,
- :LSHIFT => 56,
- :RSHIFT => 57,
- :UMINUS => 58 }
-
-racc_use_result_var = true
-
-racc_nt_base = 59
-
-Racc_arg = [
- racc_action_table,
- racc_action_check,
- racc_action_default,
- racc_action_pointer,
- racc_goto_table,
- racc_goto_check,
- racc_goto_default,
- racc_goto_pointer,
- racc_nt_base,
- racc_reduce_table,
- racc_token_table,
- racc_shift_n,
- racc_reduce_n,
- racc_use_result_var ]
-
-Racc_token_to_s_table = [
-'$end',
-'error',
-'LBRACK',
-'DQTEXT',
-'SQTEXT',
-'RBRACK',
-'LBRACE',
-'RBRACE',
-'SYMBOL',
-'FARROW',
-'COMMA',
-'TRUE',
-'FALSE',
-'EQUALS',
-'APPENDS',
-'LESSEQUAL',
-'NOTEQUAL',
-'DOT',
-'COLON',
-'LLCOLLECT',
-'RRCOLLECT',
-'QMARK',
-'LPAREN',
-'RPAREN',
-'ISEQUAL',
-'GREATEREQUAL',
-'GREATERTHAN',
-'LESSTHAN',
-'IF',
-'ELSE',
-'IMPORT',
-'DEFINE',
-'ELSIF',
-'VARIABLE',
-'CLASS',
-'INHERITS',
-'NODE',
-'BOOLEAN',
-'NAME',
-'SEMIC',
-'CASE',
-'DEFAULT',
-'AT',
-'LCOLLECT',
-'RCOLLECT',
-'CLASSNAME',
-'CLASSREF',
-'NOT',
-'OR',
-'AND',
-'UNDEF',
-'PARROW',
-'PLUS',
-'MINUS',
-'TIMES',
-'DIV',
-'LSHIFT',
-'RSHIFT',
-'UMINUS',
-'$start',
-'program',
-'statements',
-'nil',
-'statement',
-'resource',
-'virtualresource',
-'collection',
-'assignment',
-'casestatement',
-'ifstatement',
-'import',
-'fstatement',
-'definition',
-'hostclass',
-'nodedef',
-'resourceoverride',
-'append',
-'funcvalues',
-'namestring',
-'resourceref',
-'name',
-'variable',
-'type',
-'boolean',
-'funcrvalue',
-'selector',
-'quotedtext',
-'classname',
-'resourceinstances',
-'endsemi',
-'params',
-'endcomma',
-'classref',
-'anyparams',
-'at',
-'collectrhand',
-'collstatements',
-'collstatement',
-'colljoin',
-'collexpr',
-'colllval',
-'simplervalue',
-'resourceinst',
-'resourcename',
-'undef',
-'array',
-'expression',
-'param',
-'rvalue',
-'addparam',
-'anyparam',
-'rvalues',
-'comma',
-'else',
-'caseopts',
-'caseopt',
-'casevalues',
-'selectlhand',
-'svalues',
-'selectval',
-'sintvalues',
-'qtexts',
-'argumentlist',
-'classparent',
-'hostnames',
-'nodeparent',
-'hostname',
-'nothing',
-'arguments',
-'argument',
-'classnameordefault']
-
-Racc_debug_parser = false
-
-##### racc system variables end #####
-
- # reduce 0 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 42
-  def _reduce_1( val, _values, result )
-    if val[0]
-        # Make sure we always return an array.
-        if val[0].is_a?(AST::ASTArray)
-            if val[0].children.empty?
-                result = nil
-            else
-                result = val[0]
-            end
-        else
-            result = aryfy(val[0])
-        end
-    else
-        result = nil
-    end
-   result
-  end
-.,.,
-
- # reduce 2 omitted
-
- # reduce 3 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 58
-  def _reduce_4( val, _values, result )
-    if val[0] and val[1]
-        if val[0].instance_of?(AST::ASTArray)
-            val[0].push(val[1])
-            result = val[0]
-        else
-            result = ast AST::ASTArray, :children => [val[0],val[1]]
-        end
-    elsif obj = (val[0] || val[1])
-        result = obj
-    else result = nil
-    end
-   result
-  end
-.,.,
-
- # reduce 5 omitted
-
- # reduce 6 omitted
-
- # reduce 7 omitted
-
- # reduce 8 omitted
-
- # reduce 9 omitted
-
- # reduce 10 omitted
-
- # reduce 11 omitted
-
- # reduce 12 omitted
-
- # reduce 13 omitted
-
- # reduce 14 omitted
-
- # reduce 15 omitted
-
- # reduce 16 omitted
-
- # reduce 17 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 81
-  def _reduce_18( val, _values, result )
-    args = aryfy(val[2])
-    result = ast AST::Function,
-        :name => val[0],
-        :arguments => args,
-        :ftype => :statement
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 88
-  def _reduce_19( val, _values, result )
-    args = aryfy(val[2])
-    result = ast AST::Function,
-        :name => val[0],
-        :arguments => args,
-        :ftype => :statement
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 93
-  def _reduce_20( val, _values, result )
-    result = ast AST::Function,
-        :name => val[0],
-        :arguments => AST::ASTArray.new({}),
-        :ftype => :statement
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 100
-  def _reduce_21( val, _values, result )
-    args = aryfy(val[1])
-    result = ast AST::Function,
-        :name => val[0],
-        :arguments => args,
-        :ftype => :statement
-   result
-  end
-.,.,
-
- # reduce 22 omitted
-
- # reduce 23 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 108
-  def _reduce_24( val, _values, result )
-    result = aryfy(val[0], val[2])
-    result.line = @lexer.line
-    result.file = @lexer.file
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 117
-  def _reduce_25( val, _values, result )
-    unless val[0].is_a?(AST::ASTArray)
-        val[0] = aryfy(val[0])
-    end
-
-    val[0].push(val[2])
-
-    result = val[0]
-   result
-  end
-.,.,
-
- # reduce 26 omitted
-
- # reduce 27 omitted
-
- # reduce 28 omitted
-
- # reduce 29 omitted
-
- # reduce 30 omitted
-
- # reduce 31 omitted
-
- # reduce 32 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 130
-  def _reduce_33( val, _values, result )
-                    result = ast AST::Name, :value => val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 151
-  def _reduce_34( val, _values, result )
-    array = val[2]
-    if array.instance_of?(AST::ResourceInstance)
-        array = [array]
-    end
-    result = ast AST::ASTArray
-
-    # this iterates across each specified resourceinstance
-    array.each { |instance|
-        unless instance.instance_of?(AST::ResourceInstance)
-            raise Puppet::Dev, "Got something that isn't an instance"
-        end
-        # now, i need to somehow differentiate between those things with
-        # arrays in their names, and normal things
-        result.push ast(AST::Resource,
-            :type => val[0],
-            :title => instance[0],
-            :params => instance[1])
-    }
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 154
-  def _reduce_35( val, _values, result )
-    # This is a deprecated syntax.
-    error "All resource specifications require names"
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 157
-  def _reduce_36( val, _values, result )
-    # a defaults setting for a type
-    result = ast(AST::ResourceDefaults, :type => val[0], :params => val[2])
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 162
-  def _reduce_37( val, _values, result )
-    result = ast AST::ResourceOverride, :object => val[0], :params => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 189
-  def _reduce_38( val, _values, result )
-    type = val[0]
-
-    if (type == :exported and ! Puppet[:storeconfigs]) and ! Puppet[:parseonly]
-        Puppet.warning addcontext("You cannot collect without storeconfigs being set")
-    end
-
-    if val[1].is_a? AST::ResourceDefaults
-        error "Defaults are not virtualizable"
-    end
-
-    method = type.to_s + "="
-
-    # Just mark our resources as exported and pass them through.
-    if val[1].instance_of?(AST::ASTArray)
-        val[1].each do |obj|
-            obj.send(method, true)
-        end
-    else
-        val[1].send(method, true)
-    end
-
-    result = val[1]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 190
-  def _reduce_39( val, _values, result )
- result = :virtual
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 191
-  def _reduce_40( val, _values, result )
- result = :exported
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 214
-  def _reduce_41( val, _values, result )
-    if val[0] =~ /^[a-z]/
-        Puppet.warning addcontext("Collection names must now be capitalized")
-    end
-    type = val[0].downcase
-    args = {:type => type}
-
-    if val[1].is_a?(AST::CollExpr)
-        args[:query] = val[1]
-        args[:query].type = type
-        args[:form] = args[:query].form
-    else
-        args[:form] = val[1]
-    end
-    if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly]
-        Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored")
-    end
-    result = ast AST::Collection, args
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 224
-  def _reduce_42( val, _values, result )
-    if val[1]
-        result = val[1]
-        result.form = :virtual
-    else
-        result = :virtual
-    end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 232
-  def _reduce_43( val, _values, result )
-    if val[1]
-        result = val[1]
-        result.form = :exported
-    else
-        result = :exported
-    end
-   result
-  end
-.,.,
-
- # reduce 44 omitted
-
- # reduce 45 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 240
-  def _reduce_46( val, _values, result )
-    result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2]
-   result
-  end
-.,.,
-
- # reduce 47 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 246
-  def _reduce_48( val, _values, result )
-    result = val[1]
-    result.parens = true
-   result
-  end
-.,.,
-
- # reduce 49 omitted
-
- # reduce 50 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 254
-  def _reduce_51( val, _values, result )
-    result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2]
-    #result = ast AST::CollExpr
-    #result.push *val
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 259
-  def _reduce_52( val, _values, result )
-    result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2]
-    #result = ast AST::CollExpr
-    #result.push *val
-   result
-  end
-.,.,
-
- # reduce 53 omitted
-
- # reduce 54 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 266
-  def _reduce_55( val, _values, result )
-    result = ast AST::ResourceInstance, :children => [val[0],val[2]]
-   result
-  end
-.,.,
-
- # reduce 56 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 276
-  def _reduce_57( val, _values, result )
-    if val[0].instance_of?(AST::ResourceInstance)
-        result = ast AST::ASTArray, :children => [val[0],val[2]]
-    else
-        val[0].push val[2]
-        result = val[0]
-    end
-   result
-  end
-.,.,
-
- # reduce 58 omitted
-
- # reduce 59 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 283
-  def _reduce_60( val, _values, result )
-    result = ast AST::Undef, :value => :undef
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 287
-  def _reduce_61( val, _values, result )
-    result = ast AST::Name, :value => val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 291
-  def _reduce_62( val, _values, result )
-    result = ast AST::Type, :value => val[0]
-   result
-  end
-.,.,
-
- # reduce 63 omitted
-
- # reduce 64 omitted
-
- # reduce 65 omitted
-
- # reduce 66 omitted
-
- # reduce 67 omitted
-
- # reduce 68 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 307
-  def _reduce_69( val, _values, result )
-    if val[0] =~ /::/
-        raise Puppet::ParseError, "Cannot assign to variables in other namespaces"
-    end
-    # this is distinct from referencing a variable
-    variable = ast AST::Name, :value => val[0]
-    result = ast AST::VarDef, :name => variable, :value => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 312
-  def _reduce_70( val, _values, result )
-    variable = ast AST::Name, :value => val[0]
-    result = ast AST::VarDef, :name => variable, :value => val[2], :append => true
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 317
-  def _reduce_71( val, _values, result )
-    result = ast AST::ASTArray
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 317
-  def _reduce_72( val, _values, result )
- result = val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 326
-  def _reduce_73( val, _values, result )
-    if val[0].instance_of?(AST::ASTArray)
-        val[0].push(val[2])
-        result = val[0]
-    else
-        result = ast AST::ASTArray, :children => [val[0],val[2]]
-    end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 330
-  def _reduce_74( val, _values, result )
-    result = ast AST::ResourceParam, :param => val[0], :value => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 335
-  def _reduce_75( val, _values, result )
-    result = ast AST::ResourceParam, :param => val[0], :value => val[2],
-                                     :add => true
-   result
-  end
-.,.,
-
- # reduce 76 omitted
-
- # reduce 77 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 343
-  def _reduce_78( val, _values, result )
-    result = ast AST::ASTArray
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 343
-  def _reduce_79( val, _values, result )
- result = val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 352
-  def _reduce_80( val, _values, result )
-    if val[0].instance_of?(AST::ASTArray)
-        val[0].push(val[2])
-        result = val[0]
-    else
-        result = ast AST::ASTArray, :children => [val[0],val[2]]
-    end
-   result
-  end
-.,.,
-
- # reduce 81 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 361
-  def _reduce_82( val, _values, result )
-    if val[0].instance_of?(AST::ASTArray)
-        result = val[0].push(val[2])
-    else
-        result = ast AST::ASTArray, :children => [val[0],val[2]]
-    end
-   result
-  end
-.,.,
-
- # reduce 83 omitted
-
- # reduce 84 omitted
-
- # reduce 85 omitted
-
- # reduce 86 omitted
-
- # reduce 87 omitted
-
- # reduce 88 omitted
-
- # reduce 89 omitted
-
- # reduce 90 omitted
-
- # reduce 91 omitted
-
- # reduce 92 omitted
-
- # reduce 93 omitted
-
- # reduce 94 omitted
-
- # reduce 95 omitted
-
- # reduce 96 omitted
-
- # reduce 97 omitted
-
- # reduce 98 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 388
-  def _reduce_99( val, _values, result )
-    args = aryfy(val[2])
-    result = ast AST::Function,
-        :name => val[0],
-        :arguments => args,
-        :ftype => :rvalue
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 393
-  def _reduce_100( val, _values, result )
-    result = ast AST::Function,
-        :name => val[0],
-        :arguments => AST::ASTArray.new({}),
-        :ftype => :rvalue
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 397
-  def _reduce_101( val, _values, result )
-    result = ast AST::String, :value => val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 399
-  def _reduce_102( val, _values, result )
-    result = ast AST::FlatString, :value => val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 403
-  def _reduce_103( val, _values, result )
-    result = ast AST::Boolean, :value => val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 408
-  def _reduce_104( val, _values, result )
-    Puppet.warning addcontext("Deprecation notice:  Resource references should now be capitalized")
-    result = ast AST::ResourceReference, :type => val[0], :title => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 410
-  def _reduce_105( val, _values, result )
-    result = ast AST::ResourceReference, :type => val[0], :title => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 423
-  def _reduce_106( val, _values, result )
-    args = {
-        :test => val[1],
-        :statements => val[3]
-    }
-
-    if val[5]
-        args[:else] = val[5]
-    end
-
-    result = ast AST::IfStatement, args
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 435
-  def _reduce_107( val, _values, result )
-    args = {
-        :test => val[1],
-        :statements => ast(AST::Nop)
-    }
-
-    if val[4]
-        args[:else] = val[4]
-    end
-
-    result = ast AST::IfStatement, args
-   result
-  end
-.,.,
-
- # reduce 108 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 440
-  def _reduce_109( val, _values, result )
-    result = ast AST::Else, :statements => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 443
-  def _reduce_110( val, _values, result )
-    result = ast AST::Else, :statements => ast(AST::Nop)
-   result
-  end
-.,.,
-
- # reduce 111 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 460
-  def _reduce_112( val, _values, result )
-    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 463
-  def _reduce_113( val, _values, result )
-    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 466
-  def _reduce_114( val, _values, result )
-    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 469
-  def _reduce_115( val, _values, result )
-    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 472
-  def _reduce_116( val, _values, result )
-    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 475
-  def _reduce_117( val, _values, result )
-    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 478
-  def _reduce_118( val, _values, result )
-    result = ast AST::Minus, :value => val[1]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 481
-  def _reduce_119( val, _values, result )
-    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 484
-  def _reduce_120( val, _values, result )
-    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 487
-  def _reduce_121( val, _values, result )
-    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 490
-  def _reduce_122( val, _values, result )
-    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 493
-  def _reduce_123( val, _values, result )
-    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 496
-  def _reduce_124( val, _values, result )
-    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 499
-  def _reduce_125( val, _values, result )
-    result = ast AST::Not, :value => val[1]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 502
-  def _reduce_126( val, _values, result )
-    result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 505
-  def _reduce_127( val, _values, result )
-    result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 508
-  def _reduce_128( val, _values, result )
-    result = val[1]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 516
-  def _reduce_129( val, _values, result )
-    options = val[3]
-    unless options.instance_of?(AST::ASTArray)
-        options = ast AST::ASTArray, :children => [val[3]]
-    end
-    result = ast AST::CaseStatement, :test => val[1], :options => options
-   result
-  end
-.,.,
-
- # reduce 130 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 526
-  def _reduce_131( val, _values, result )
-    if val[0].instance_of?(AST::ASTArray)
-        val[0].push val[1]
-        result = val[0]
-    else
-        result = ast AST::ASTArray, :children => [val[0], val[1]]
-    end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 530
-  def _reduce_132( val, _values, result )
-    result = ast AST::CaseOpt, :value => val[0], :statements => val[3]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 535
-  def _reduce_133( val, _values, result )
-    result = ast(AST::CaseOpt,
-        :value => val[0],
-        :statements => ast(AST::ASTArray)
-    )
-   result
-  end
-.,.,
-
- # reduce 134 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 545
-  def _reduce_135( val, _values, result )
-    if val[0].instance_of?(AST::ASTArray)
-        val[0].push(val[2])
-        result = val[0]
-    else
-        result = ast AST::ASTArray, :children => [val[0],val[2]]
-    end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 549
-  def _reduce_136( val, _values, result )
-    result = ast AST::Selector, :param => val[0], :values => val[2]
-   result
-  end
-.,.,
-
- # reduce 137 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 551
-  def _reduce_138( val, _values, result )
- result = val[1]
-   result
-  end
-.,.,
-
- # reduce 139 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 562
-  def _reduce_140( val, _values, result )
-    if val[0].instance_of?(AST::ASTArray)
-        val[0].push(val[2])
-        result = val[0]
-    else
-        result = ast AST::ASTArray, :children => [val[0],val[2]]
-    end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 566
-  def _reduce_141( val, _values, result )
-    result = ast AST::ResourceParam, :param => val[0], :value => val[2]
-   result
-  end
-.,.,
-
- # reduce 142 omitted
-
- # reduce 143 omitted
-
- # reduce 144 omitted
-
- # reduce 145 omitted
-
- # reduce 146 omitted
-
- # reduce 147 omitted
-
- # reduce 148 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 577
-  def _reduce_149( val, _values, result )
-    result = ast AST::Default, :value => val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 579
-  def _reduce_150( val, _values, result )
- result = [val[0].value]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 583
-  def _reduce_151( val, _values, result )
-    results = val[0] << val[2].value
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 591
-  def _reduce_152( val, _values, result )
-    val[1].each do |file|
-        import(file)
-    end
-
-    result = AST::ASTArray.new(:children => [])
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 601
-  def _reduce_153( val, _values, result )
-    newdefine classname(val[1]), :arguments => val[2], :code => val[4]
-    @lexer.indefine = false
-    result = nil
-
-#}           | DEFINE NAME argumentlist parent LBRACE RBRACE {
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 605
-  def _reduce_154( val, _values, result )
-    newdefine classname(val[1]), :arguments => val[2]
-    @lexer.indefine = false
-    result = nil
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 613
-  def _reduce_155( val, _values, result )
-    # Our class gets defined in the parent namespace, not our own.
-    @lexer.namepop
-    newclass classname(val[1]), :code => val[4], :parent => val[2]
-    result = nil
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 618
-  def _reduce_156( val, _values, result )
-    # Our class gets defined in the parent namespace, not our own.
-    @lexer.namepop
-    newclass classname(val[1]), :parent => val[2]
-    result = nil
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 623
-  def _reduce_157( val, _values, result )
-    newnode val[1], :parent => val[2], :code => val[4]
-    result = nil
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 626
-  def _reduce_158( val, _values, result )
-    newnode val[1], :parent => val[2]
-    result = nil
-   result
-  end
-.,.,
-
- # reduce 159 omitted
-
- # reduce 160 omitted
-
- # reduce 161 omitted
-
- # reduce 162 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 640
-  def _reduce_163( val, _values, result )
-    result = val[0]
-    result = [result] unless result.is_a?(Array)
-    result << val[2]
-   result
-  end
-.,.,
-
- # reduce 164 omitted
-
- # reduce 165 omitted
-
- # reduce 166 omitted
-
- # reduce 167 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 649
-  def _reduce_168( val, _values, result )
-    result = nil
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 653
-  def _reduce_169( val, _values, result )
-    result = ast AST::ASTArray, :children => []
-   result
-  end
-.,.,
-
- # reduce 170 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 658
-  def _reduce_171( val, _values, result )
-    result = nil
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 662
-  def _reduce_172( val, _values, result )
-    result = val[1]
-    result = [result] unless result[0].is_a?(Array)
-   result
-  end
-.,.,
-
- # reduce 173 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 669
-  def _reduce_174( val, _values, result )
-    result = val[0]
-    result = [result] unless result[0].is_a?(Array)
-    result << val[2]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 674
-  def _reduce_175( val, _values, result )
-    Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
-    result = [val[0], val[2]]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 678
-  def _reduce_176( val, _values, result )
-    Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
-    result = [val[0]]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 680
-  def _reduce_177( val, _values, result )
-    result = [val[0], val[2]]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 682
-  def _reduce_178( val, _values, result )
-    result = [val[0]]
-   result
-  end
-.,.,
-
- # reduce 179 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 687
-  def _reduce_180( val, _values, result )
-    result = val[1]
-   result
-  end
-.,.,
-
- # reduce 181 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 692
-  def _reduce_182( val, _values, result )
-    result = val[1]
-   result
-  end
-.,.,
-
- # reduce 183 omitted
-
- # reduce 184 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 698
-  def _reduce_185( val, _values, result )
-    result = ast AST::Variable, :value => val[0]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 706
-  def _reduce_186( val, _values, result )
-    if val[1].instance_of?(AST::ASTArray)
-        result = val[1]
-    else
-        result = ast AST::ASTArray, :children => [val[1]]
-    end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 713
-  def _reduce_187( val, _values, result )
-    if val[1].instance_of?(AST::ASTArray)
-        result = val[1]
-    else
-        result = ast AST::ASTArray, :children => [val[1]]
-    end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'grammar.ra', 715
-  def _reduce_188( val, _values, result )
-    result = ast AST::ASTArray
-   result
-  end
-.,.,
-
- # reduce 189 omitted
-
- # reduce 190 omitted
-
- # reduce 191 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 720
-  def _reduce_192( val, _values, result )
- result = nil
-   result
-  end
-.,.,
-
- def _reduce_none( val, _values, result )
-  result
- end
-
-    end   # class Parser
-
-  end   # module Parser
-
-end   # module Puppet
diff --git a/lib/puppet/parser/parser_support.rb b/lib/puppet/parser/parser_support.rb
deleted file mode 100644
index 853d6aa..0000000
--- a/lib/puppet/parser/parser_support.rb
+++ /dev/null
@@ -1,465 +0,0 @@
-# I pulled this into a separate file, because I got
-# tired of rebuilding the parser.rb file all the time.
-class Puppet::Parser::Parser
-    require 'puppet/parser/functions'
-
-    ASTSet = Struct.new(:classes, :definitions, :nodes)
-
-    # Define an accessor method for each table.  We hide the existence of
-    # the struct.
-    [:classes, :definitions, :nodes].each do |name|
-        define_method(name) do
-            @astset.send(name)
-        end
-    end
-
-    AST = Puppet::Parser::AST
-
-    attr_reader :version, :environment
-    attr_accessor :files
-
-
-    # Add context to a message; useful for error messages and such.
-    def addcontext(message, obj = nil)
-        obj ||= @lexer
-
-        message += " on line %s" % obj.line
-        if file = obj.file
-            message += " in file %s" % file
-        end
-
-        return message
-    end
-
-    # Create an AST array out of all of the args
-    def aryfy(*args)
-        if args[0].instance_of?(AST::ASTArray)
-            result = args.shift
-            args.each { |arg|
-                result.push arg
-            }
-        else
-            result = ast AST::ASTArray, :children => args
-        end
-
-        return result
-    end
-
-    # Create an AST object, and automatically add the file and line information if
-    # available.
-    def ast(klass, hash = {})
-        hash[:line] = @lexer.line unless hash.include?(:line)
-
-        unless hash.include?(:file)
-            if file = @lexer.file
-                hash[:file] = file
-            end
-        end
-
-        return klass.new(hash)
-    end
-
-    # The fully qualifed name, with the full namespace.
-    def classname(name)
-        [@lexer.namespace, name].join("::").sub(/^::/, '')
-    end
-
-    def clear
-        initvars
-    end
-
-    # Raise a Parse error.
-    def error(message)
-        if brace = @lexer.expected
-            message += "; expected '%s'"
-        end
-        except = Puppet::ParseError.new(message)
-        except.line = @lexer.line
-        if @lexer.file
-            except.file = @lexer.file
-        end
-
-        raise except
-    end
-
-    def file
-        @lexer.file
-    end
-
-    def file=(file)
-        unless FileTest.exists?(file)
-            unless file =~ /\.pp$/
-                file = file + ".pp"
-            end
-            unless FileTest.exists?(file)
-                raise Puppet::Error, "Could not find file %s" % file
-            end
-        end
-        if check_and_add_to_watched_files(file)
-            @lexer.file = file
-        else
-            raise Puppet::AlreadyImportedError.new("Import loop detected")
-        end
-    end
-
-    # Find a class definition, relative to the current namespace.
-    def findclass(namespace, name)
-        fqfind namespace, name, classes
-    end
-
-    # Find a component definition, relative to the current namespace.
-    def finddefine(namespace, name)
-        fqfind namespace, name, definitions
-    end
-
-    # This is only used when nodes are looking up the code for their
-    # parent nodes.
-    def findnode(name)
-        fqfind "", name, nodes
-    end
-
-    # The recursive method used to actually look these objects up.
-    def fqfind(namespace, name, table)
-        namespace = namespace.downcase
-        name = name.to_s.downcase
-
-        # If our classname is fully qualified or we have no namespace,
-        # just try directly for the class, and return either way.
-        if name =~ /^::/ or namespace == ""
-            classname = name.sub(/^::/, '')
-            self.load(classname) unless table[classname]
-            return table[classname]
-        end
-
-        # Else, build our namespace up piece by piece, checking
-        # for the class in each namespace.
-        ary = namespace.split("::")
-
-        while ary.length > 0
-            newname = (ary + [name]).join("::").sub(/^::/, '')
-            if obj = table[newname] or (self.load(newname) and obj = table[newname])
-                return obj
-            end
-
-            # Delete the second to last object, which reduces our namespace by one.
-            ary.pop
-        end
-
-        # If we've gotten to this point without finding it, see if the name
-        # exists at the top namespace
-        if obj = table[name] or (self.load(name) and obj = table[name])
-            return obj
-        end
-
-        return nil
-    end
-
-    # Import our files.
-    def import(file)
-        if Puppet[:ignoreimport]
-            return AST::ASTArray.new(:children => [])
-        end
-        # use a path relative to the file doing the importing
-        if @lexer.file
-            dir = @lexer.file.sub(%r{[^/]+$},'').sub(/\/$/, '')
-        else
-            dir = "."
-        end
-        if dir == ""
-            dir = "."
-        end
-        result = ast AST::ASTArray
-
-        # We can't interpolate at this point since we don't have any
-        # scopes set up. Warn the user if they use a variable reference
-        pat = file
-        if pat.index("$")
-            Puppet.warning(
-               "The import of #{pat} contains a variable reference;" +
-               " variables are not interpolated for imports " +
-               "in file #{@lexer.file} at line #{@lexer.line}"
-            )
-        end
-        files = Puppet::Module::find_manifests(pat, :cwd => dir, :environment => @environment)
-        if files.size == 0
-            raise Puppet::ImportError.new("No file(s) found for import " +
-                                          "of '#{pat}'")
-        end
-
-        files.collect { |file|
-            parser = Puppet::Parser::Parser.new(:astset => @astset, :environment => @environment)
-            parser.files = self.files
-            Puppet.debug("importing '%s'" % file)
-
-            unless file =~ /^#{File::SEPARATOR}/
-                file = File.join(dir, file)
-            end
-            begin
-                parser.file = file
-            rescue Puppet::AlreadyImportedError
-                # This file has already been imported to just move on
-                next
-            end
-
-            # This will normally add code to the 'main' class.
-            parser.parse
-        }
-    end
-
-    def initialize(options = {})
-        @astset = options[:astset] || ASTSet.new({}, {}, {})
-        @environment = options[:environment]
-        initvars()
-    end
-
-    # Initialize or reset all of our variables.
-    def initvars
-        @lexer = Puppet::Parser::Lexer.new()
-        @files = {}
-        @loaded = []
-    end
-
-    # Try to load a class, since we could not find it.
-    def load(classname)
-        return false if classname == ""
-        filename = classname.gsub("::", File::SEPARATOR)
-
-        # First try to load the top-level module
-        mod = filename.scan(/^[\w-]+/).shift
-        unless @loaded.include?(mod)
-            @loaded << mod
-            begin
-                import(mod)
-                Puppet.info "Autoloaded module %s" % mod
-            rescue Puppet::ImportError => detail
-                # We couldn't load the module
-            end
-        end
-
-        # We don't know whether we're looking for a class or definition, so we have
-        # to test for both.
-        return true if classes.include?(classname) || definitions.include?(classname)
-
-        unless @loaded.include?(filename)
-            @loaded << filename
-            # Then the individual file
-            begin
-                import(filename)
-                Puppet.info "Autoloaded file %s from module %s" % [filename, mod]
-            rescue Puppet::ImportError => detail
-                # We couldn't load the file
-            end
-        end
-        # We don't know whether we're looking for a class or definition, so we have
-        # to test for both.
-        return classes.include?(classname) || definitions.include?(classname)
-    end
-
-    # Split an fq name into a namespace and name
-    def namesplit(fullname)
-        ary = fullname.split("::")
-        n = ary.pop || ""
-        ns = ary.join("::")
-        return ns, n
-    end
-
-    # Create a new class, or merge with an existing class.
-    def newclass(name, options = {})
-        name = name.downcase
-
-        if definitions.include?(name)
-            raise Puppet::ParseError, "Cannot redefine class %s as a definition" % name
-        end
-        code = options[:code]
-        parent = options[:parent]
-
-        # If the class is already defined, then add code to it.
-        if other = @astset.classes[name]
-            # Make sure the parents match
-            if parent and other.parentclass and (parent != other.parentclass)
-                error("Class %s is already defined at %s:%s; cannot redefine" % [name, other.file, other.line])
-            end
-
-            # This might be dangerous...
-            if parent and ! other.parentclass
-                other.parentclass = parent
-            end
-
-            # This might just be an empty, stub class.
-            if code
-                tmp = name
-                if tmp == ""
-                    tmp = "main"
-                end
-                
-                Puppet.debug addcontext("Adding code to %s" % tmp)
-                # Else, add our code to it.
-                if other.code and code
-                    other.code.children += code.children
-                else
-                    other.code ||= code
-                end
-            end
-        else
-            # Define it anew.
-            # Note we're doing something somewhat weird here -- we're setting
-            # the class's namespace to its fully qualified name.  This means
-            # anything inside that class starts looking in that namespace first.
-            args = {:namespace => name, :classname => name, :parser => self}
-            args[:code] = code if code
-            args[:parentclass] = parent if parent
-            @astset.classes[name] = ast AST::HostClass, args
-        end
-
-        return @astset.classes[name]
-    end
-
-    # Create a new definition.
-    def newdefine(name, options = {})
-        name = name.downcase
-        if @astset.classes.include?(name)
-            raise Puppet::ParseError, "Cannot redefine class %s as a definition" %
-                name
-        end
-        # Make sure our definition doesn't already exist
-        if other = @astset.definitions[name]
-            error("%s is already defined at %s:%s; cannot redefine" % [name, other.file, other.line])
-        end
-
-        ns, whatever = namesplit(name)
-        args = {
-            :namespace => ns,
-            :arguments => options[:arguments],
-            :code => options[:code],
-            :parser => self,
-            :classname => name
-        }
-
-        [:code, :arguments].each do |param|
-            args[param] = options[param] if options[param]
-        end
-
-        @astset.definitions[name] = ast AST::Definition, args
-    end
-
-    # Create a new node.  Nodes are special, because they're stored in a global
-    # table, not according to namespaces.
-    def newnode(names, options = {})
-        names = [names] unless names.instance_of?(Array)
-        names.collect do |name|
-            name = name.to_s.downcase
-            if other = @astset.nodes[name]
-                error("Node %s is already defined at %s:%s; cannot redefine" % [other.name, other.file, other.line])
-            end
-            name = name.to_s if name.is_a?(Symbol)
-            args = {
-                :name => name,
-                :parser => self
-            }
-            if options[:code]
-                args[:code] = options[:code]
-            end
-            if options[:parent]
-                args[:parentclass] = options[:parent]
-            end
-            @astset.nodes[name] = ast(AST::Node, args)
-            @astset.nodes[name].classname = name
-            @astset.nodes[name]
-        end
-    end
-
-    def on_error(token,value,stack)
-        if token == 0 # denotes end of file
-            value = 'end of file'
-        else
-            value = "'%s'" % value
-        end
-        error = "Syntax error at %s" % [value]
-
-        if brace = @lexer.expected
-            error += "; expected '%s'" % brace
-        end
-
-        except = Puppet::ParseError.new(error)
-        except.line = @lexer.line
-        if @lexer.file
-            except.file = @lexer.file
-        end
-
-        raise except
-    end
-
-    # how should I do error handling here?
-    def parse(string = nil)
-        if string
-            self.string = string
-        end
-        begin
-            main = yyparse(@lexer,:scan)
-        rescue Racc::ParseError => except
-            error = Puppet::ParseError.new(except)
-            error.line = @lexer.line
-            error.file = @lexer.file
-            error.set_backtrace except.backtrace
-            raise error
-        rescue Puppet::ParseError => except
-            except.line ||= @lexer.line
-            except.file ||= @lexer.file
-            raise except
-        rescue Puppet::Error => except
-            # and this is a framework error
-            except.line ||= @lexer.line
-            except.file ||= @lexer.file
-            raise except
-        rescue Puppet::DevError => except
-            except.line ||= @lexer.line
-            except.file ||= @lexer.file
-            raise except
-        rescue => except
-            error = Puppet::DevError.new(except.message)
-            error.line = @lexer.line
-            error.file = @lexer.file
-            error.set_backtrace except.backtrace
-            raise error
-        end
-        if main
-            # Store the results as the top-level class.
-            newclass("", :code => main)
-        end
-        @version = Time.now.to_i
-        return @astset
-    ensure
-        @lexer.clear
-    end
-
-    # See if any of the files have changed.
-    def reparse?
-        if file = @files.detect { |name, file| file.changed?  }
-            return file[1].stamp
-        else
-            return false
-        end
-    end
-
-    def string=(string)
-        @lexer.string = string
-    end
-
-    # Add a new file to be checked when we're checking to see if we should be
-    # reparsed.  This is basically only used by the TemplateWrapper to let the
-    # parser know about templates that should be parsed.
-    def watch_file(filename)
-            check_and_add_to_watched_files(filename)
-    end
-
-    private
-
-    def check_and_add_to_watched_files(filename)
-        unless @files.include?(filename)    
-            @files[filename] = Puppet::Util::LoadedFile.new(filename)
-            return true
-        else
-            return false
-        end
-    end
-end
diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb
deleted file mode 100644
index 747338b..0000000
--- a/lib/puppet/parser/resource.rb
+++ /dev/null
@@ -1,453 +0,0 @@
-# A resource that we're managing.  This handles making sure that only subclasses
-# can set parameters.
-class Puppet::Parser::Resource
-    require 'puppet/parser/resource/param'
-    require 'puppet/parser/resource/reference'
-    require 'puppet/util/tagging'
-    include Puppet::Util
-    include Puppet::Util::MethodHelper
-    include Puppet::Util::Errors
-    include Puppet::Util::Logging
-    include Puppet::Util::Tagging
-
-    attr_accessor :source, :line, :file, :scope, :rails_id
-    attr_accessor :virtual, :override, :translated
-
-    attr_reader :exported, :evaluated, :params
-
-    # Determine whether the provided parameter name is a relationship parameter.
-    def self.relationship_parameter?(name)
-        unless defined?(@relationship_names)
-            @relationship_names = Puppet::Type.relationship_params.collect { |p| p.name }
-        end
-        @relationship_names.include?(name)
-    end
-
-    # Proxy a few methods to our @ref object.
-    [:builtin?, :type, :title].each do |method|
-        define_method(method) do
-            @ref.send(method)
-        end
-    end
-
-    # Set up some boolean test methods
-    [:exported, :translated, :override, :virtual, :evaluated].each do |method|
-        newmeth = (method.to_s + "?").intern
-        define_method(newmeth) do
-            self.send(method)
-        end
-    end
-
-    def [](param)
-        param = symbolize(param)
-        if param == :title
-            return self.title
-        end
-        if @params.has_key?(param)
-            @params[param].value
-        else
-            nil
-        end
-    end
-
-    def builtin=(bool)
-        @ref.builtin = bool
-    end
-
-    # Retrieve the associated definition and evaluate it.
-    def evaluate
-        if klass = @ref.definedtype
-            finish()
-            return klass.evaluate_code(self)
-        elsif builtin?
-            devfail "Cannot evaluate a builtin type"
-        else
-            self.fail "Cannot find definition %s" % self.type
-        end
-    ensure
-        @evaluated = true
-    end
-
-    # Mark this resource as both exported and virtual,
-    # or remove the exported mark.
-    def exported=(value)
-        if value
-            @virtual = true
-            @exported = value
-        else
-            @exported = value
-        end
-    end
-
-    # Do any finishing work on this object, called before evaluation or
-    # before storage/translation.
-    def finish
-        return if finished?
-        @finished = true
-        add_defaults()
-        add_metaparams()
-        add_scope_tags()
-        validate()
-    end
-
-    # Has this resource already been finished?
-    def finished?
-        defined?(@finished) and @finished
-    end
-
-    def initialize(options)
-        # Set all of the options we can.
-        options.each do |option, value|
-            if respond_to?(option.to_s + "=")
-                send(option.to_s + "=", value)
-                options.delete(option)
-            end
-        end
-
-        unless self.scope
-            raise ArgumentError, "Resources require a scope"
-        end
-        @source ||= scope.source
-
-        options = symbolize_options(options)
-
-        # Set up our reference.
-        if type = options[:type] and title = options[:title]
-            options.delete(:type)
-            options.delete(:title)
-        else
-            raise ArgumentError, "Resources require a type and title"
-        end
-
-        @ref = Reference.new(:type => type, :title => title, :scope => self.scope)
-
-        @params = {}
-
-        # Define all of the parameters
-        if params = options[:params]
-            options.delete(:params)
-            params.each do |param|
-                set_parameter(param)
-            end
-        end
-
-        # Throw an exception if we've got any arguments left to set.
-        unless options.empty?
-            raise ArgumentError, "Resources do not accept %s" % options.keys.collect { |k| k.to_s }.join(", ")
-        end
-
-        tag(@ref.type)
-        tag(@ref.title) if valid_tag?(@ref.title.to_s)
-    end
-
-    # Is this resource modeling an isomorphic resource type?
-    def isomorphic?
-        if builtin?
-            return @ref.builtintype.isomorphic?
-        else
-            return true
-        end
-    end
-
-    # Merge an override resource in.  This will throw exceptions if
-    # any overrides aren't allowed.
-    def merge(resource)
-        # Test the resource scope, to make sure the resource is even allowed
-        # to override.
-        unless self.source.object_id == resource.source.object_id || resource.source.child_of?(self.source)
-            raise Puppet::ParseError.new("Only subclasses can override parameters", resource.line, resource.file)
-        end
-        # Some of these might fail, but they'll fail in the way we want.
-        resource.params.each do |name, param|
-            override_parameter(param)
-        end
-    end
-
-    # Modify this resource in the Rails database.  Poor design, yo.
-    def modify_rails(db_resource)
-        args = rails_args
-        args.each do |param, value|
-            db_resource[param] = value unless db_resource[param] == value
-        end
-
-        # Handle file specially
-        if (self.file and  
-            (!db_resource.file or db_resource.file != self.file))
-            db_resource.file = self.file
-        end
-        
-        updated_params = @params.inject({}) do |hash, ary|
-            hash[ary[0].to_s] = ary[1]
-            hash
-        end
-        
-        db_resource.ar_hash_merge(db_resource.get_params_hash(db_resource.param_values), updated_params,
-                                  :create => Proc.new { |name, parameter|
-                                      parameter.to_rails(db_resource)
-                                  }, :delete => Proc.new { |values|
-                                      values.each { |value| db_resource.param_values.delete(value) }
-                                  }, :modify => Proc.new { |db, mem|
-                                      mem.modify_rails_values(db)
-                                  })
-        
-        updated_tags = tags.inject({}) { |hash, tag| 
-            hash[tag] = tag
-            hash
-        }
-            
-        db_resource.ar_hash_merge(db_resource.get_tag_hash(), 
-                                  updated_tags,
-                                  :create => Proc.new { |name, tag|
-                                      db_resource.add_resource_tag(name)
-                                  }, :delete => Proc.new { |tag|
-                                      db_resource.resource_tags.delete(tag)
-                                  }, :modify => Proc.new { |db, mem|
-                                      # nothing here
-                                  })
-    end
-
-    # Return the resource name, or the title if no name
-    # was specified.
-    def name
-        unless defined? @name
-            @name = self[:name] || self.title
-        end
-        @name
-    end
-
-    # This *significantly* reduces the number of calls to Puppet.[].
-    def paramcheck?
-        unless defined? @@paramcheck
-            @@paramcheck = Puppet[:paramcheck]
-        end
-        @@paramcheck
-    end
-
-    # A temporary occasion, until I get paths in the scopes figured out.
-    def path
-        to_s
-    end
-
-    # Return the short version of our name.
-    def ref
-        @ref.to_s
-    end
-
-    # Define a parameter in our resource.
-    def set_parameter(param, value = nil)
-        if value
-            param = Puppet::Parser::Resource::Param.new(
-                :name => param, :value => value, :source => self.source
-            )
-        elsif ! param.is_a?(Puppet::Parser::Resource::Param)
-            raise ArgumentError, "Must pass a parameter or all necessary values"
-        end
-
-        # And store it in our parameter hash.
-        @params[param.name] = param
-    end
-
-    def to_hash
-        @params.inject({}) do |hash, ary|
-            param = ary[1]
-            # Skip "undef" values.
-            if param.value != :undef
-                hash[param.name] = param.value
-            end
-            hash
-        end
-    end
-
-    # Turn our parser resource into a Rails resource.  
-    def to_rails(host)
-        args = rails_args
-
-        db_resource = host.resources.build(args)
-
-        # Handle file specially
-        db_resource.file = self.file
-
-        db_resource.save
-
-        @params.each { |name, param|
-            param.to_rails(db_resource)
-        }
-        
-        tags.each { |tag| db_resource.add_resource_tag(tag) }
-
-        return db_resource
-    end
-
-    def to_s
-        self.ref
-    end
-
-    # Translate our object to a transportable object.
-    def to_trans
-        return nil if virtual?
-
-        if builtin?
-            to_transobject
-        else
-            to_transbucket
-        end
-    end
-
-    def to_transbucket
-        bucket = Puppet::TransBucket.new([])
-
-        bucket.type = self.type
-        bucket.name = self.title
-
-        # TransBuckets don't support parameters, which is why they're being deprecated.
-        return bucket
-    end
-
-    # Convert this resource to a RAL resource.  We hackishly go via the
-    # transportable stuff.
-    def to_type
-        to_trans.to_type
-    end
-
-    def to_transobject
-        # Now convert to a transobject
-        obj = Puppet::TransObject.new(@ref.title, @ref.type)
-        to_hash.each do |p, v|
-            if v.is_a?(Reference)
-                v = v.to_ref
-            elsif v.is_a?(Array)
-                v = v.collect { |av|
-                    if av.is_a?(Reference)
-                        av = av.to_ref
-                    end
-                    av
-                }
-            end
-
-            # If the value is an array with only one value, then
-            # convert it to a single value.  This is largely so that
-            # the database interaction doesn't have to worry about
-            # whether it returns an array or a string.
-            obj[p.to_s] = if v.is_a?(Array) and v.length == 1
-                              v[0]
-                          else
-                              v
-                          end
-        end
-
-        obj.file = self.file
-        obj.line = self.line
-
-        obj.tags = self.tags
-
-        return obj
-    end
-    
-    private
-
-    # Add default values from our definition.
-    def add_defaults
-        scope.lookupdefaults(self.type).each do |name, param|
-            unless @params.include?(name)
-                self.debug "Adding default for %s" % name
-
-                @params[name] = param.dup
-            end
-        end
-    end
-
-    # Add any metaparams defined in our scope. This actually adds any metaparams
-    # from any parent scope, and there's currently no way to turn that off.
-    def add_metaparams
-        Puppet::Type.eachmetaparam do |name|
-            # Skip metaparams that we already have defined, unless they're relationship metaparams.
-            # LAK:NOTE Relationship metaparams get treated specially -- we stack them, instead of
-            # overriding.
-            next if @params[name] and not self.class.relationship_parameter?(name)
-
-            # Skip metaparams for which we get no value.
-            next unless val = scope.lookupvar(name.to_s, false) and val != :undefined
-
-            # The default case: just set the value
-            set_parameter(name, val) and next unless @params[name]
-
-            # For relationship params, though, join the values (a la #446).
-            @params[name].value = [@params[name].value, val].flatten
-        end
-    end
-
-    def add_scope_tags
-        if scope_resource = scope.resource
-            tag(*scope_resource.tags)
-        end
-    end
-
-    # Accept a parameter from an override.
-    def override_parameter(param)
-        # This can happen if the override is defining a new parameter, rather
-        # than replacing an existing one.
-        (@params[param.name] = param and return) unless current = @params[param.name]
-
-        # The parameter is already set.  Fail if they're not allowed to override it.
-        unless param.source.child_of?(current.source)
-            puts caller if Puppet[:trace]
-            msg = "Parameter '%s' is already set on %s" % [param.name, self.to_s]
-            if current.source.to_s != ""
-                msg += " by %s" % current.source
-            end
-            if current.file or current.line
-                fields = []
-                fields << current.file if current.file
-                fields << current.line.to_s if current.line
-                msg += " at %s" % fields.join(":")
-            end
-            msg += "; cannot redefine"
-            raise Puppet::ParseError.new(msg, param.line, param.file)
-        end
-
-        # If we've gotten this far, we're allowed to override.
-
-        # Merge with previous value, if the parameter was generated with the +> syntax.
-        # It's important that we use the new param instance here, not the old one,
-        # so that the source is registered correctly for later overrides.
-        param.value = [current.value, param.value].flatten if param.add
-
-        @params[param.name] = param
-    end
-
-    # Verify that all passed parameters are valid.  This throws an error if
-    #  there's a problem, so we don't have to worry about the return value.
-    def paramcheck(param)
-        param = param.to_s
-        # Now make sure it's a valid argument to our class.  These checks
-        # are organized in order of commonhood -- most types, it's a valid 
-        # argument and paramcheck is enabled.
-        if @ref.typeclass.validattr?(param)
-            true
-        elsif %w{name title}.include?(param) # always allow these
-            true
-        elsif paramcheck?
-            self.fail Puppet::ParseError, "Invalid parameter '%s' for type '%s'" %
-                    [param, @ref.type]
-        end
-    end
-
-    def rails_args
-        return [:type, :title, :line, :exported].inject({}) do |hash, param|
-            # 'type' isn't a valid column name, so we have to use another name.
-            to = (param == :type) ? :restype : param
-            if value = self.send(param)
-                hash[to] = value 
-            end
-            hash
-        end
-    end
-
-    # Make sure the resource's parameters are all valid for the type.
-    def validate
-        @params.each do |name, param|
-            # Make sure it's a valid parameter.
-            paramcheck(name)
-        end
-    end
-end
diff --git a/lib/puppet/parser/resource/param.rb b/lib/puppet/parser/resource/param.rb
deleted file mode 100644
index c8dd78a..0000000
--- a/lib/puppet/parser/resource/param.rb
+++ /dev/null
@@ -1,98 +0,0 @@
- # The parameters we stick in Resources.
-class Puppet::Parser::Resource::Param
-    attr_accessor :name, :value, :source, :line, :file, :add
-    include Puppet::Util
-    include Puppet::Util::Errors
-    include Puppet::Util::MethodHelper
-
-    def initialize(hash)
-        set_options(hash)
-        requiredopts(:name, :value, :source)
-        @name = symbolize(@name)
-    end
-
-    def inspect
-        "#<#{self.class} @name => #{name}, @value => #{value}, @source => #{source.name}>"
-    end
-
-    def line_to_i
-        return line ? Integer(line) : nil
-    end
-
-    # Make sure an array (or possibly not an array) of values is correctly
-    # set up for Rails.  The main thing is that Resource::Reference objects
-    # should stay objects, so they just get serialized.
-    def munge_for_rails(values)
-        values = value.is_a?(Array) ? value : [value]
-        values.map do |v|
-            if v.is_a?(Puppet::Parser::Resource::Reference)
-                v
-            else
-                v.to_s
-            end
-        end
-    end
-    
-    # Store a new parameter in a Rails db.
-    def to_rails(db_resource)
-        values = munge_for_rails(value)
-
-        param_name = Puppet::Rails::ParamName.find_or_create_by_name(self.name.to_s)
-        line_number = line_to_i()
-
-        return values.collect do |v|
-            db_resource.param_values.create(:value => v,
-                                           :line => line_number,
-                                           :param_name => param_name)
-        end
-    end
-
-    def modify_rails_values(db_values)
-        #dev_warn if db_values.nil? || db_values.empty? 
-
-        values_to_remove(db_values).each { |remove_me|
-            Puppet::Rails::ParamValue.delete(remove_me.id)
-        }
-        line_number = line_to_i()
-        values_to_add(db_values).each { |add_me| 
-            db_resource = db_values[0].resource
-            db_param_name = db_values[0].param_name
-            db_resource.param_values.create(:value => add_me,
-                                           :line => line_number,
-                                           :param_name => db_param_name)
-        }
-    end
-    
-    def to_s
-        "%s => %s" % [self.name, self.value]
-    end
-
-    def compare(v,db_value)
-      if (v.is_a?(Puppet::Parser::Resource::Reference))
-        return v.to_s == db_value.to_s
-      else
-        return v == db_value
-      end
-    end
-    
-    def values_to_remove(db_values)
-        values = munge_for_rails(value)
-        line_number = line_to_i()
-        db_values.collect do |db|
-            db unless (db.line == line_number && 
-                       values.find { |v| 
-                         compare(v,db.value)
-                       } )
-        end.compact
-    end
-
-    def values_to_add(db_values)
-        values = munge_for_rails(value)
-        line_number = line_to_i()
-        values.collect do |v|
-            v unless db_values.find { |db| (compare(v,db.value) && 
-                                         line_number == db.line) }
-        end.compact
-    end
-end
-
diff --git a/lib/puppet/parser/resource/reference.rb b/lib/puppet/parser/resource/reference.rb
deleted file mode 100644
index c597480..0000000
--- a/lib/puppet/parser/resource/reference.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-require 'puppet/resource_reference'
-
-# A reference to a resource.  Mostly just the type and title.
-class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
-    include Puppet::Util::MethodHelper
-    include Puppet::Util::Errors
-
-    attr_accessor :builtin, :file, :line, :scope
-
-    # Are we a builtin type?
-    def builtin?
-        unless defined? @builtin
-            if builtintype()
-                @builtin = true
-            else
-                @builtin = false
-            end
-        end
-
-        @builtin
-    end
-
-    def builtintype
-        if t = Puppet::Type.type(self.type.downcase) and t.name != :component
-            t
-        else
-            nil
-        end
-    end
-
-    # Return the defined type for our obj.  This can return classes,
-    # definitions or nodes.
-    def definedtype
-        unless defined? @definedtype
-            case self.type
-            when "Class": # look for host classes
-                if self.title == :main
-                    tmp = @scope.findclass("")
-                else
-                    unless tmp = @scope.findclass(self.title)
-                        fail Puppet::ParseError, "Could not find class '%s'" % self.title
-                    end
-                end
-            when "Node": # look for node definitions
-                unless tmp = @scope.parser.nodes[self.title]
-                    fail Puppet::ParseError, "Could not find node '%s'" % self.title
-                end
-            else # normal definitions
-                # We have to swap these variables around so the errors are right.
-                tmp = @scope.finddefine(self.type)
-            end
-
-            if tmp
-                @definedtype = tmp
-            else
-                fail Puppet::ParseError, "Could not find resource type '%s'" % self.type
-            end
-        end
-
-        @definedtype
-    end
-
-    def initialize(hash)
-        set_options(hash)
-        requiredopts(:type, :title)
-    end
-
-    def to_ref
-        # We have to return different cases to provide backward compatibility
-        # from 0.24.x to 0.23.x.
-        if builtin?
-            return [type.to_s.downcase, title.to_s]
-        else
-            return [type.to_s, title.to_s]
-        end
-    end
-
-    def typeclass
-        unless defined? @typeclass
-            if tmp = builtintype || definedtype
-                @typeclass = tmp
-            else
-                fail Puppet::ParseError, "Could not find type %s" % self.type
-            end
-        end
-
-        @typeclass
-    end
-end
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb
deleted file mode 100644
index 4acdf41..0000000
--- a/lib/puppet/parser/scope.rb
+++ /dev/null
@@ -1,395 +0,0 @@
-# The scope class, which handles storing and retrieving variables and types and
-# such.
-
-require 'puppet/parser/parser'
-require 'puppet/parser/templatewrapper'
-require 'puppet/transportable'
-require 'strscan'
-
-class Puppet::Parser::Scope
-    require 'puppet/parser/resource'
-
-    AST = Puppet::Parser::AST
-
-    Puppet::Util.logmethods(self)
-
-    include Enumerable
-    include Puppet::Util::Errors
-    attr_accessor :parent, :level, :parser, :source, :resource
-    attr_accessor :base, :keyword, :nodescope
-    attr_accessor :top, :translated, :compiler
-
-    # A demeterific shortcut to the catalog.
-    def catalog
-        compiler.catalog
-    end
-
-    # Proxy accessors
-    def host
-        @compiler.node.name
-    end
-
-    def interpreter
-        @compiler.interpreter
-    end
-
-    # Is the value true?  This allows us to control the definition of truth
-    # in one place.
-    def self.true?(value)
-        if value == false or value == "" or value == :undef
-            return false
-        else
-            return true
-        end
-    end
-
-    # Is the value a number?, return the correct object or nil if not a number
-    def self.number?(value)
-        unless value.is_a?(Fixnum) or value.is_a?(Bignum) or value.is_a?(Float) or value.is_a?(String)
-            return nil
-        end
-        
-        if value.is_a?(String)
-            if value =~ /^-?\d+(:?\.\d+|(:?\.\d+)?e\d+)$/
-                return value.to_f
-            elsif value =~ /^0x\d+/i
-                return value.to_i(16)
-            elsif value =~ /^0\d+/i
-                return value.to_i(8)
-            elsif value =~ /^-?\d+/
-                return value.to_i
-            else
-                return nil
-            end
-        end
-        # it is one of Fixnum,Bignum or Float
-        return value
-    end
-
-    # Add to our list of namespaces.
-    def add_namespace(ns)
-        return false if @namespaces.include?(ns)
-        if @namespaces == [""]
-            @namespaces = [ns]
-        else
-            @namespaces << ns
-        end
-    end
-
-    # Are we the top scope?
-    def topscope?
-        @level == 1
-    end
-
-    def findclass(name)
-        @namespaces.each do |namespace|
-            if r = parser.findclass(namespace, name)
-                return r
-            end
-        end
-        return nil
-    end
-
-    def finddefine(name)
-        @namespaces.each do |namespace|
-            if r = parser.finddefine(namespace, name)
-                return r
-            end
-        end
-        return nil
-    end
-
-    def findresource(string, name = nil)
-        compiler.findresource(string, name)
-    end
-
-    # Initialize our new scope.  Defaults to having no parent.
-    def initialize(hash = {})
-        if hash.include?(:namespace)
-            if n = hash[:namespace]
-                @namespaces = [n]
-            end
-            hash.delete(:namespace)
-        else
-            @namespaces = [""]
-        end
-        hash.each { |name, val|
-            method = name.to_s + "="
-            if self.respond_to? method
-                self.send(method, val)
-            else
-                raise Puppet::DevError, "Invalid scope argument %s" % name
-            end
-        }
-
-        @tags = []
-
-        # The symbol table for this scope.  This is where we store variables.
-        @symtable = {}
-
-        # All of the defaults set for types.  It's a hash of hashes,
-        # with the first key being the type, then the second key being
-        # the parameter.
-        @defaults = Hash.new { |dhash,type|
-            dhash[type] = {}
-        }
-    end
-
-    # Collect all of the defaults set at any higher scopes.
-    # This is a different type of lookup because it's additive --
-    # it collects all of the defaults, with defaults in closer scopes
-    # overriding those in later scopes.
-    def lookupdefaults(type)
-        values = {}
-
-        # first collect the values from the parents
-        unless parent.nil?
-            parent.lookupdefaults(type).each { |var,value|
-                values[var] = value
-            }
-        end
-
-        # then override them with any current values
-        # this should probably be done differently
-        if @defaults.include?(type)
-            @defaults[type].each { |var,value|
-                values[var] = value
-            }
-        end
-
-        #Puppet.debug "Got defaults for %s: %s" %
-        #    [type,values.inspect]
-        return values
-    end
-
-    # Look up a defined type.
-    def lookuptype(name)
-        finddefine(name) || findclass(name)
-    end
-
-    def lookup_qualified_var(name, usestring)
-        parts = name.split(/::/)
-        shortname = parts.pop
-        klassname = parts.join("::")
-        klass = findclass(klassname)
-        unless klass
-            raise Puppet::ParseError, "Could not find class %s" % klassname
-        end
-        unless kscope = compiler.class_scope(klass)
-            raise Puppet::ParseError, "Class %s has not been evaluated so its variables cannot be referenced" % klass.classname
-        end
-        return kscope.lookupvar(shortname, usestring)
-    end
-
-    private :lookup_qualified_var
-
-    # Look up a variable.  The simplest value search we do.  Default to returning
-    # an empty string for missing values, but support returning a constant.
-    def lookupvar(name, usestring = true)
-        # If the variable is qualified, then find the specified scope and look the variable up there instead.
-        if name =~ /::/
-            return lookup_qualified_var(name, usestring)
-        end
-        # We can't use "if @symtable[name]" here because the value might be false
-        if @symtable.include?(name)
-            if usestring and @symtable[name] == :undef
-                return ""
-            else
-                return @symtable[name]
-            end
-        elsif self.parent 
-            return parent.lookupvar(name, usestring)
-        elsif usestring
-            return ""
-        else
-            return :undefined
-        end
-    end
-
-    # Return a hash containing our variables and their values, optionally (and
-    # by default) including the values defined in our parent.  Local values
-    # shadow parent values.
-    def to_hash(recursive = true)
-        if recursive and parent then
-            target = parent.to_hash(recursive)
-        end
-        target ||= Hash.new
-        @symtable.keys.each { |name| 
-            value = @symtable[name]
-            if value == :undef then
-                target.delete(name)
-            else
-                target[name] = value 
-            end
-        }
-        return target
-    end
-
-    def namespaces
-        @namespaces.dup
-    end
-
-    # Create a new scope and set these options.
-    def newscope(options = {})
-        compiler.newscope(self, options)
-    end
-
-    # Is this class for a node?  This is used to make sure that
-    # nodes and classes with the same name conflict (#620), which
-    # is required because of how often the names are used throughout
-    # the system, including on the client.
-    def nodescope?
-        self.nodescope
-    end
-
-    # We probably shouldn't cache this value...  But it's a lot faster
-    # than doing lots of queries.
-    def parent
-        unless defined?(@parent)
-            @parent = compiler.parent(self)
-        end
-        @parent
-    end
-
-    # Return the list of scopes up to the top scope, ordered with our own first.
-    # This is used for looking up variables and defaults.
-    def scope_path
-        if parent
-            [self, parent.scope_path].flatten.compact
-        else
-            [self]
-        end
-    end
-
-    # Set defaults for a type.  The typename should already be downcased,
-    # so that the syntax is isolated.  We don't do any kind of type-checking
-    # here; instead we let the resource do it when the defaults are used.
-    def setdefaults(type, params)
-        table = @defaults[type]
-
-        # if we got a single param, it'll be in its own array
-        params = [params] unless params.is_a?(Array)
-
-        params.each { |param|
-            #Puppet.debug "Default for %s is %s => %s" %
-            #    [type,ary[0].inspect,ary[1].inspect]
-            if table.include?(param.name)
-                raise Puppet::ParseError.new("Default already defined for %s { %s }; cannot redefine" % [type, param.name], param.line, param.file)
-            end
-            table[param.name] = param
-        }
-    end
-
-    # Set a variable in the current scope.  This will override settings
-    # in scopes above, but will not allow variables in the current scope
-    # to be reassigned.
-    def setvar(name,value, file = nil, line = nil, append = false)
-        #Puppet.debug "Setting %s to '%s' at level %s mode append %s" %
-        #    [name.inspect,value,self.level, append]
-        if @symtable.include?(name)
-            unless append
-                error = Puppet::ParseError.new("Cannot reassign variable %s" % name)
-            else
-                error = Puppet::ParseError.new("Cannot append, variable %s is defined in this scope" % name)
-            end
-            if file
-                error.file = file
-            end
-            if line
-                error.line = line
-            end
-            raise error
-        end
-        
-        unless append
-            @symtable[name] = value
-        else # append case
-            # lookup the value in the scope if it exists and insert the var
-            @symtable[name] = lookupvar(name)
-            # concatenate if string, append if array, nothing for other types
-            if value.is_a?(Array)
-                @symtable[name] += value
-            else
-                @symtable[name] << value
-            end
-        end
-    end
-
-    # Return an interpolated string.
-    def strinterp(string, file = nil, line = nil)
-        # Most strings won't have variables in them.
-        ss = StringScanner.new(string)
-        out = ""
-        while not ss.eos?
-            if ss.scan(/^\$\{((\w*::)*\w+)\}|^\$((\w*::)*\w+)/) 
-                # If it matches the backslash, then just retun the dollar sign.
-                if ss.matched == '\\$'
-                    out << '$'
-                else # look the variable up
-                    out << lookupvar(ss[1] || ss[3]).to_s || ""
-                end
-            elsif ss.scan(/^\\(.)/)
-                # Puppet.debug("Got escape: pos:%d; m:%s" % [ss.pos, ss.matched])
-                case ss[1]
-                when 'n'
-                    out << "\n"
-                when 't'
-                    out << "\t"
-                when 's'
-                    out << " "
-                when '\\'
-                    out << '\\'
-                when '$'
-                    out << '$'
-                else
-                    str = "Unrecognised escape sequence '#{ss.matched}'"
-                    if file
-                        str += " in file %s" % file
-                    end
-                    if line
-                        str += " at line %s" % line
-                    end
-                    Puppet.warning str
-                    out << ss.matched
-                end
-            elsif ss.scan(/^\$/)
-                out << '$'
-            elsif ss.scan(/^\\\n/) # an escaped carriage return
-                next
-            else 
-                tmp = ss.scan(/[^\\$]+/)
-                # Puppet.debug("Got other: pos:%d; m:%s" % [ss.pos, tmp])
-                unless tmp
-                    error = Puppet::ParseError.new("Could not parse string %s" %
-                        string.inspect)
-                    {:file= => file, :line= => line}.each do |m,v|
-                        error.send(m, v) if v
-                    end
-                    raise error
-                end
-                out << tmp
-            end
-        end
-
-        return out
-    end
-
-    # Return the tags associated with this scope.  It's basically
-    # just our parents' tags, plus our type.  We don't cache this value
-    # because our parent tags might change between calls.
-    def tags
-        resource.tags
-    end
-
-    # Used mainly for logging
-    def to_s
-        "Scope(%s)" % @resource.to_s
-    end
-
-    # Undefine a variable; only used for testing.
-    def unsetvar(var)
-        if @symtable.include?(var)
-            @symtable.delete(var)
-        end
-    end
-end
diff --git a/lib/puppet/parser/templatewrapper.rb b/lib/puppet/parser/templatewrapper.rb
deleted file mode 100644
index 036f660..0000000
--- a/lib/puppet/parser/templatewrapper.rb
+++ /dev/null
@@ -1,108 +0,0 @@
-# A simple wrapper for templates, so they don't have full access to
-# the scope objects.
-class Puppet::Parser::TemplateWrapper
-    attr_accessor :scope, :file
-    include Puppet::Util
-    Puppet::Util.logmethods(self)
-
-    def initialize(scope, filename)
-        @__scope__ = scope
-        @__file__ = Puppet::Module::find_template(filename, scope.compiler.environment)
-
-        unless FileTest.exists?(file)
-            raise Puppet::ParseError,
-                "Could not find template %s" % file
-        end
-
-        # We'll only ever not have a parser in testing, but, eh.
-        if scope.parser
-            scope.parser.watch_file(file)
-        end
-    end
-
-    def scope
-        @__scope__
-    end
-
-    def file
-        @__file__
-    end
-
-    # Should return true if a variable is defined, false if it is not
-    def has_variable?(name)
-        if scope.lookupvar(name.to_s, false) != :undefined
-            true
-        else
-            false
-        end
-    end
-
-    # Allow templates to access the defined classes
-    def classes
-        return scope.catalog.classes
-    end
-
-    # Allow templates to access the tags defined in the current scope
-    def tags
-        return scope.tags
-    end
-
-    # Allow templates to access the all the defined tags
-    def all_tags
-        return scope.catalog.tags
-    end
-
-    # Ruby treats variables like methods, so we used to expose variables
-    # within scope to the ERB code via method_missing.  As per RedMine #1427,
-    # though, this means that conflicts between methods in our inheritance
-    # tree (Kernel#fork) and variable names (fork => "yes/no") could arise.
-    #
-    # Worse, /new/ conflicts could pop up when a new kernel or object method
-    # was added to Ruby, causing templates to suddenly fail mysteriously when
-    # Ruby was upgraded.
-    #
-    # To ensure that legacy templates using unqualified names work we retain
-    # the missing_method definition here until we declare the syntax finally
-    # dead.
-    def method_missing(name, *args)
-        # We have to tell lookupvar to return :undefined to us when
-        # appropriate; otherwise it converts to "".
-        value = scope.lookupvar(name.to_s, false)
-        if value != :undefined
-            return value
-        else
-            # Just throw an error immediately, instead of searching for
-            # other missingmethod things or whatever.
-            raise Puppet::ParseError, "Could not find value for '%s'" % name
-        end
-    end
-
-    def result
-        # Expose all the variables in our scope as instance variables of the
-        # current object, making it possible to access them without conflict
-        # to the regular methods.
-        benchmark(:debug, "Bound template variables for #{file}") do
-            scope.to_hash.each { |name, value| 
-                if name.kind_of?(String)
-                    realname = name.gsub(/[^\w]/, "_")
-                else
-                    realname = name
-                end
-                instance_variable_set("@#{realname}", value)
-            }
-        end
-
-        result = nil
-        benchmark(:debug, "Interpolated template #{file}") do
-            template = ERB.new(File.read(file), 0, "-")
-            result = template.result(binding)
-        end
-
-        result
-    end
-
-    def to_s
-        "template[%s]" % file
-    end
-end
-
diff --git a/lib/puppet/pgraph.rb b/lib/puppet/pgraph.rb
deleted file mode 100644
index 55ad7d2..0000000
--- a/lib/puppet/pgraph.rb
+++ /dev/null
@@ -1,121 +0,0 @@
-#  Created by Luke A. Kanies on 2006-11-24.
-#  Copyright (c) 2006. All rights reserved.
-
-require 'puppet/relationship'
-require 'puppet/simple_graph'
-
-# This class subclasses a graph class in order to handle relationships
-# among resources.
-class Puppet::PGraph < Puppet::SimpleGraph
-    include Puppet::Util
-
-    def add_edge(*args)
-        @reversal = nil
-        super
-    end
-
-    def add_vertex(*args)
-        @reversal = nil
-        super
-    end
-
-    # Which resources a given resource depends upon.
-    def dependents(resource)
-        tree_from_vertex(resource).keys
-    end
-    
-    # Which resources depend upon the given resource.
-    def dependencies(resource)
-        # Cache the reversal graph, because it's somewhat expensive
-        # to create.
-        unless defined? @reversal and @reversal
-            @reversal = reversal
-        end
-        # Strangely, it's significantly faster to search a reversed
-        # tree in the :out direction than to search a normal tree
-        # in the :in direction.
-        @reversal.tree_from_vertex(resource, :out).keys
-    end
-    
-    # Determine all of the leaf nodes below a given vertex.
-    def leaves(vertex, direction = :out)
-        tree = tree_from_vertex(vertex, direction)
-        l = tree.keys.find_all { |c| adjacent(c, :direction => direction).empty? }
-        return l
-    end
-    
-    # Collect all of the edges that the passed events match.  Returns
-    # an array of edges.
-    def matching_edges(events, base = nil)
-        events.collect do |event|
-            source = base || event.source
-
-            unless vertex?(source)
-                Puppet.warning "Got an event from invalid vertex %s" % source.ref
-                next
-            end
-            # Get all of the edges that this vertex should forward events
-            # to, which is the same thing as saying all edges directly below
-            # This vertex in the graph.
-            adjacent(source, :direction => :out, :type => :edges).find_all do |edge|
-                edge.match?(event.name)
-            end
-        end.compact.flatten
-    end
-    
-    # Take container information from another graph and use it
-    # to replace any container vertices with their respective leaves.
-    # This creates direct relationships where there were previously
-    # indirect relationships through the containers. 
-    def splice!(other, type)
-        # We have to get the container list via a topological sort on the
-        # configuration graph, because otherwise containers that contain
-        # other containers will add those containers back into the
-        # graph.  We could get a similar affect by only setting relationships
-        # to container leaves, but that would result in many more
-        # relationships.
-        containers = other.topsort.find_all { |v| v.is_a?(type) and vertex?(v) }
-        containers.each do |container|
-            # Get the list of children from the other graph.
-            children = other.adjacent(container, :direction => :out)
-
-            # Just remove the container if it's empty.
-            if children.empty?
-                remove_vertex!(container)
-                next
-            end
-            
-            # First create new edges for each of the :in edges
-            [:in, :out].each do |dir|
-                edges = adjacent(container, :direction => dir, :type => :edges)
-                edges.each do |edge|
-                    children.each do |child|
-                        if dir == :in
-                            s = edge.source
-                            t = child
-                        else
-                            s = child
-                            t = edge.target
-                        end
-
-                        add_edge(s, t, edge.label)
-                    end
-
-                    # Now get rid of the edge, so remove_vertex! works correctly.
-                    remove_edge!(edge)
-                end
-            end
-            remove_vertex!(container)
-        end
-    end
-
-    # A different way of walking a tree, and a much faster way than the
-    # one that comes with GRATR.
-    def tree_from_vertex(start, direction = :out)
-        predecessor={}
-        walk(start, direction) do |parent, child|
-            predecessor[child] = parent
-        end
-        predecessor       
-    end
-end
diff --git a/lib/puppet/property.rb b/lib/puppet/property.rb
deleted file mode 100644
index 50a1b71..0000000
--- a/lib/puppet/property.rb
+++ /dev/null
@@ -1,549 +0,0 @@
- # The virtual base class for properties, which are the self-contained building
-# blocks for actually doing work on the system.
-
-require 'puppet'
-require 'puppet/parameter'
-
-module Puppet
-class Property < Puppet::Parameter
-
-    # Because 'should' uses an array, we have a special method for handling
-    # it.  We also want to keep copies of the original values, so that
-    # they can be retrieved and compared later when merging.
-    attr_reader :shouldorig
-
-    attr_writer :noop
-
-    class << self
-        attr_accessor :unmanaged
-        attr_reader :name
-
-        # Return array matching info, defaulting to just matching
-        # the first value.
-        def array_matching
-            unless defined?(@array_matching)
-                @array_matching = :first
-            end
-            @array_matching
-        end
-
-        # Set whether properties should match all values or just the first one.
-        def array_matching=(value)
-            value = value.intern if value.is_a?(String)
-            unless [:first, :all].include?(value)
-                raise ArgumentError, "Supported values for Property#array_matching are 'first' and 'all'"
-            end
-            @array_matching = value
-        end
-
-        def checkable
-            @checkable = true
-        end
-
-        def uncheckable
-            @checkable = false
-        end
-
-        def checkable?
-            if defined? @checkable
-                return @checkable
-            else
-                return true
-            end
-        end
-    end
-
-    # Look up a value's name, so we can find options and such.
-    def self.value_name(value)
-        if value != '' and name = symbolize(value) and @parametervalues.include?(name)
-            return name
-        elsif ary = self.match?(value)
-            return ary[0]
-        else
-            return nil
-        end
-    end
-
-    # Retrieve an option set when a value was defined.
-    def self.value_option(name, option)
-        option = option.to_sym
-        if hash = @parameteroptions[name]
-            hash[option]
-        else
-            nil
-        end
-    end
-
-    # Create the value management variables.
-    def self.initvars
-        @parametervalues = {}
-        @aliasvalues = {}
-        @parameterregexes = {}
-        @parameteroptions = {}
-    end
-
-    # Define a new valid value for a property.  You must provide the value itself,
-    # usually as a symbol, or a regex to match the value.
-    #
-    # The first argument to the method is either the value itself or a regex.
-    # The second argument is an option hash; valid options are:
-    # * <tt>:event</tt>: The event that should be returned when this value is set.
-    # * <tt>:call</tt>: When to call any associated block.  The default value
-    #   is ``instead``, which means to call the value instead of calling the
-    #   provider.  You can also specify ``before`` or ``after``, which will 
-    #   call both the block and the provider, according to the order you specify
-    #   (the ``first`` refers to when the block is called, not the provider).
-    def self.newvalue(name, options = {}, &block)
-        name = name.intern if name.is_a? String
-
-        @parameteroptions[name] = {}
-        paramopts = @parameteroptions[name]
-
-        # Symbolize everything
-        options.each do |opt, val|
-            paramopts[symbolize(opt)] = symbolize(val)
-        end
-
-        # By default, call the block instead of the provider.
-        if block_given?
-            paramopts[:call] ||= :instead
-        else
-            paramopts[:call] ||= :none
-        end
-        # If there was no block given, we still want to store the information
-        # for validation, but we won't be defining a method
-        block ||= true
-
-        case name
-        when Symbol
-            if @parametervalues.include?(name)
-                Puppet.warning "%s reassigning value %s" % [self.name, name]
-            end
-            @parametervalues[name] = block
-
-            if block_given?
-                method = "set_" + name.to_s
-                settor = paramopts[:settor] || (self.name.to_s + "=")
-                define_method(method, &block)
-                paramopts[:method] = method
-            end
-        when Regexp
-            # The regexes are handled in parameter.rb.  This value is used
-            # for validation.
-            @parameterregexes[name] = block
-
-            # This is used for looking up the block for execution.
-            if block_given?
-                paramopts[:block] = block
-            end
-        else
-            raise ArgumentError, "Invalid value %s of type %s" %
-                [name, name.class]
-        end
-    end
-
-    # Call the provider method.
-    def call_provider(value)
-        begin
-            provider.send(self.class.name.to_s + "=", value)
-        rescue NoMethodError
-            self.fail "The %s provider can not handle attribute %s" %
-                [provider.class.name, self.class.name]
-        end
-    end
-
-    # Call the dynamically-created method associated with our value, if
-    # there is one.
-    def call_valuemethod(name, value)
-        event = nil
-        if method = self.class.value_option(name, :method) and self.respond_to?(method)
-            #self.debug "setting %s (currently %s)" % [value, self.retrieve]
-
-            begin
-                event = self.send(method)
-            rescue Puppet::Error
-                raise
-            rescue => detail
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-                error = Puppet::Error.new("Could not set %s on %s: %s" %
-                    [value, self.class.name, detail], @resource.line, @resource.file)
-                error.set_backtrace detail.backtrace
-                raise error
-            end
-        elsif block = self.class.value_option(name, :block)
-            # FIXME It'd be better here to define a method, so that
-            # the blocks could return values.
-            # If the regex was defined with no associated block, then just pass
-            # through and the correct event will be passed back.
-            event = self.instance_eval(&block)
-        end
-        return event, name
-    end
-
-    # How should a property change be printed as a string?
-    def change_to_s(currentvalue, newvalue)
-        begin
-            if currentvalue == :absent
-                return "defined '%s' as '%s'" %
-                    [self.name, self.should_to_s(newvalue)]
-            elsif newvalue == :absent or newvalue == [:absent]
-                return "undefined %s from '%s'" %
-                    [self.name, self.is_to_s(currentvalue)]
-            else
-                return "%s changed '%s' to '%s'" %
-                    [self.name, self.is_to_s(currentvalue), self.should_to_s(newvalue)]
-            end
-        rescue Puppet::Error, Puppet::DevError
-            raise
-        rescue => detail
-            raise Puppet::DevError, "Could not convert change %s to string: %s" %
-                [self.name, detail]
-        end
-    end
-
-    # Figure out which event to return.
-    def event(name, event = nil)
-        if value_event = self.class.value_option(name, :event)
-            return value_event 
-        end
-
-        if event and event.is_a?(Symbol)
-            if event == :nochange
-                return nil
-            else
-                return event
-            end
-        end
-
-        if self.class.name == :ensure
-            event = case self.should
-            when :present: (@resource.class.name.to_s + "_created").intern
-            when :absent: (@resource.class.name.to_s + "_removed").intern
-            else
-                (@resource.class.name.to_s + "_changed").intern
-            end
-        else
-            event = (@resource.class.name.to_s + "_changed").intern
-        end
-
-        return event
-    end
-    
-    # initialize our property
-    def initialize(hash = {})
-        super
-    end
-
-    def inspect
-        str = "Property('%s', " % self.name
-
-        if defined? @should and @should
-            str += "@should = '%s')" % @should.join(", ")
-        else
-            str += "@should = nil)"
-        end
-    end
-
-    # Determine whether the property is in-sync or not.  If @should is
-    # not defined or is set to a non-true value, then we do not have
-    # a valid value for it and thus consider the property to be in-sync
-    # since we cannot fix it.  Otherwise, we expect our should value
-    # to be an array, and if @is matches any of those values, then
-    # we consider it to be in-sync.
-    def insync?(is)
-        #debug "%s value is '%s', should be '%s'" %
-        #    [self,self.is.inspect,self.should.inspect]
-        unless defined? @should and @should
-            return true
-        end
-
-        unless @should.is_a?(Array)
-            self.devfail "%s's should is not array" % self.class.name
-        end
-
-        # an empty array is analogous to no should values
-        if @should.empty?
-            return true
-        end
-
-        # Look for a matching value
-        if match_all?
-            return (is == @should or is == @should.collect { |v| v.to_s })
-        else
-            @should.each { |val|
-                if is == val or is == val.to_s
-                    return true
-                end
-            }
-        end
-
-        # otherwise, return false
-        return false
-    end
-
-    # because the @should and @is vars might be in weird formats,
-    # we need to set up a mechanism for pretty printing of the values
-    # default to just the values, but this way individual properties can
-    # override these methods
-    def is_to_s(currentvalue)
-        currentvalue
-    end
-
-    # Send a log message.
-    def log(msg)
-        unless @resource[:loglevel]
-            self.devfail "Parent %s has no loglevel" % @resource.name
-        end
-        Puppet::Util::Log.create(
-            :level => @resource[:loglevel],
-            :message => msg,
-            :source => self
-        )
-    end
-
-    # Should we match all values, or just the first?
-    def match_all?
-        self.class.array_matching == :all
-    end
-
-    # each property class must define the name() method, and property instances
-    # do not change that name
-    # this implicitly means that a given object can only have one property
-    # instance of a given property class
-    def name
-        return self.class.name
-    end
-
-    # for testing whether we should actually do anything
-    def noop
-        # This is only here to make testing easier.
-        if @resource.respond_to?(:noop?)
-            @resource.noop?
-        else
-            if defined?(@noop)
-                @noop
-            else
-                Puppet[:noop]
-            end
-        end
-    end
-
-    # By default, call the method associated with the property name on our
-    # provider.  In other words, if the property name is 'gid', we'll call
-    # 'provider.gid' to retrieve the current value.
-    def retrieve
-        provider.send(self.class.name)
-    end
-
-    # Set our value, using the provider, an associated block, or both.
-    def set(value)
-        # Set a name for looking up associated options like the event.
-        name = self.class.value_name(value)
-
-        call = self.class.value_option(name, :call)
-
-        # If we're supposed to call the block first or instead, call it now
-        if call == :before or call == :instead
-            event, tmp = call_valuemethod(name, value) 
-        end
-        unless call == :instead
-            if @resource.provider
-                call_provider(value)
-            else
-                # They haven't provided a block, and our parent does not have
-                # a provider, so we have no idea how to handle this.
-                self.fail "%s cannot handle values of type %s" %
-                    [self.class.name, value.inspect]
-            end
-        end
-        if call == :after
-            event, tmp = call_valuemethod(name, value) 
-        end
-
-        return event(name, event)
-    end
-
-    # Only return the first value
-    def should
-        if defined? @should
-            unless @should.is_a?(Array)
-                self.devfail "should for %s on %s is not an array" %
-                    [self.class.name, @resource.name]
-            end
-            if match_all?
-                return @should
-            else
-                return @should[0]
-            end
-        else
-            return nil
-        end
-    end
-
-    # Set the should value.
-    def should=(values)
-        unless values.is_a?(Array)
-            values = [values]
-        end
-
-        @shouldorig = values
-
-        if self.respond_to?(:validate)
-            values.each { |val|
-                validate(val)
-            }
-        end
-        if self.respond_to?(:munge)
-            @should = values.collect { |val|
-                self.munge(val)
-            }
-        else
-            @should = values
-        end
-    end
-
-    def should_to_s(newvalue)
-        newvalue = [newvalue] unless newvalue.is_a? Array
-        if defined? newvalue
-            newvalue.join(" ")
-        else
-            return nil
-        end
-    end
-
-    # The default 'sync' method only selects among a list of registered # values.
-    def sync
-        self.devfail("No values defined for %s" % self.class.name) unless self.class.values
-
-        if value = self.should
-            set(value)
-        else
-            self.devfail "Got a nil value for should"
-        end
-    end
-
-    # The properties need to return tags so that logs correctly collect them.
-    def tags
-        unless defined? @tags
-            @tags = []
-            # This might not be true in testing
-            if @resource.respond_to? :tags
-                @tags = @resource.tags
-            end
-            @tags << self.name
-        end
-        @tags
-    end
-
-    def to_s
-        return "%s(%s)" % [@resource.name,self.name]
-    end
-
-    # Just return any should value we might have.
-    def value
-        self.should
-    end
-
-    # Match the Parameter interface, but we really just use 'should' internally.
-    # Note that the should= method does all of the validation and such.
-    def value=(value)
-        self.should = value
-    end
-
-    # This property will get automatically added to any type that responds
-    # to the methods 'exists?', 'create', and 'destroy'.
-    class Ensure < Puppet::Property
-        @name = :ensure
-
-        def self.defaultvalues
-            newvalue(:present) do
-                if @resource.provider and @resource.provider.respond_to?(:create)
-                    @resource.provider.create
-                else
-                    @resource.create
-                end
-                nil # return nil so the event is autogenerated
-            end
-
-            newvalue(:absent) do
-                if @resource.provider and @resource.provider.respond_to?(:destroy)
-                    @resource.provider.destroy
-                else
-                    @resource.destroy
-                end
-                nil # return nil so the event is autogenerated
-            end
-
-            defaultto do
-                if @resource.managed?
-                    :present
-                else
-                    nil
-                end
-            end
-
-            # This doc will probably get overridden
-            @doc ||= "The basic property that the object should be in."
-        end
-
-        def self.inherited(sub)
-            # Add in the two properties that everyone will have.
-            sub.class_eval do
-            end
-        end
-
-        def change_to_s(currentvalue, newvalue)
-            begin
-                if currentvalue == :absent or currentvalue.nil?
-                    return "created"
-                elsif newvalue == :absent
-                    return "removed"
-                else
-                    return "%s changed '%s' to '%s'" %
-                        [self.name, self.is_to_s(currentvalue), self.should_to_s(newvalue)]
-                end
-            rescue Puppet::Error, Puppet::DevError
-                raise
-            rescue => detail
-                raise Puppet::DevError, "Could not convert change %s to string: %s" %
-                    [self.name, detail]
-            end
-        end
-
-        def retrieve
-            # XXX This is a problem -- whether the object exists or not often
-            # depends on the results of other properties, yet we're the first property
-            # to get checked, which means that those other properties do not have
-            # @is values set.  This seems to be the source of quite a few bugs,
-            # although they're mostly logging bugs, not functional ones.
-            if prov = @resource.provider and prov.respond_to?(:exists?)
-                result = prov.exists?
-            elsif @resource.respond_to?(:exists?)
-                result = @resource.exists?
-            else
-                raise Puppet::DevError, "No ability to determine if %s exists" %
-                    @resource.class.name
-            end
-            if result
-                return :present
-            else
-                return :absent
-            end
-        end
-
-        # If they're talking about the thing at all, they generally want to
-        # say it should exist.
-        #defaultto :present
-        defaultto do
-            if @resource.managed?
-                :present
-            else
-                nil
-            end
-        end
-    end
-end
-end
-
diff --git a/lib/puppet/property/keyvalue.rb b/lib/puppet/property/keyvalue.rb
deleted file mode 100644
index 6c0800c..0000000
--- a/lib/puppet/property/keyvalue.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-#This subclass of property manages string key value pairs.
-
-#In order to use this property:
-# - the @should value must be an array of keyvalue pairs separated by the 'separator'
-# - the retrieve method should return a hash with the keys as symbols
-# IMPORTANT NOTE: In order for this property to work there must also be a 'membership' parameter
-# The class that inherits from property should override that method with the symbol for the membership
-
-require 'puppet/property'
-
-module Puppet
-    class Property
-        class KeyValue < Property
-
-            def hash_to_key_value_s(hash)
-                hash.select { |k,v| true }.map { |pair| pair.join(separator) }.join(delimiter)
-            end
-
-            def should_to_s(should_value)
-                hash_to_key_value_s(should_value)
-            end
-
-            def is_to_s(current_value)
-                hash_to_key_value_s(current_value)
-            end
-
-            def membership
-                :key_value_membership
-            end
-
-            def inclusive?
-                @resource[membership] == :inclusive
-            end
-
-            def hashify(key_value_array)
-                #turns string array into a hash
-                key_value_array.inject({}) do |hash, key_value|
-                    tmp = key_value.split(separator)
-                    hash[tmp[0].intern] = tmp[1]
-                    hash
-                end
-            end
-
-            def process_current_hash(current)
-                return {} if current == :absent
-
-                #inclusive means we are managing everything so if it isn't in should, its gone
-                if inclusive?
-                    current.each_key { |key| current[key] = nil }
-                end
-                current
-            end
-
-            def should
-                unless defined? @should and @should
-                    return nil
-                end
-
-                members = hashify(@should)
-                current = process_current_hash(retrieve)
-
-                #shared keys will get overwritten by members
-                current.merge(members)
-            end
-
-            def separator
-                "="
-            end
-
-            def delimiter
-                ";"
-            end
-
-            def retrieve
-                #ok, some 'convention' if the keyvalue property is named properties, provider should implement a properties method
-                if key_hash = provider.send(name) and key_hash != :absent
-                    return key_hash
-                else
-                    return :absent
-                end
-            end
-
-            def insync?(is)
-                unless defined? @should and @should
-                    return true
-                end
-
-                unless is
-                    return true
-                end
-
-                return (is == self.should)
-            end
-        end
-    end
-end
diff --git a/lib/puppet/property/list.rb b/lib/puppet/property/list.rb
deleted file mode 100644
index 4e7f6ec..0000000
--- a/lib/puppet/property/list.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-require 'puppet/property'
-
-module Puppet
-    class Property
-        class List < Property
-
-            def should_to_s(should_value)
-                #just return the should value
-                should_value
-            end
-
-            def is_to_s(currentvalue)
-                currentvalue.join(delimiter)
-            end
-
-            def membership
-                :membership
-            end
-
-            def add_should_with_current(should, current)
-                if current.is_a?(Array)
-                    should += current
-                end
-                should.uniq
-            end
-
-            def inclusive?
-                @resource[membership] == :inclusive
-            end
-
-            def should
-                unless defined? @should and @should
-                    return nil
-                end
-
-                members = @should
-                #inclusive means we are managing everything so if it isn't in should, its gone
-                if ! inclusive?
-                    members = add_should_with_current(members, retrieve)
-                end
-
-                members.sort.join(delimiter)
-            end
-
-            def delimiter
-                ","
-            end
-
-            def retrieve
-                #ok, some 'convention' if the list property is named groups, provider should implement a groups method
-                if tmp = provider.send(name) and tmp != :absent
-                    return tmp.split(delimiter)
-                else
-                    return :absent
-                end
-            end
-
-            def prepare_is_for_comparison(is)
-                if is.is_a? Array
-                    is = is.sort.join(delimiter)
-                end
-                is
-            end
-
-            def insync?(is)
-                unless defined? @should and @should
-                    return true
-                end
-
-                unless is
-                    return true
-                end
-
-                return (prepare_is_for_comparison(is) == self.should)
-            end
-        end
-    end
-end
diff --git a/lib/puppet/provider.rb b/lib/puppet/provider.rb
deleted file mode 100644
index c02e150..0000000
--- a/lib/puppet/provider.rb
+++ /dev/null
@@ -1,293 +0,0 @@
-# The container class for implementations.
-class Puppet::Provider
-    include Puppet::Util
-    include Puppet::Util::Errors
-    include Puppet::Util::Warnings
-    extend Puppet::Util::Warnings
-
-    require 'puppet/provider/confiner'
-
-    extend Puppet::Provider::Confiner
-
-    Puppet::Util.logmethods(self, true)
-
-    class << self
-        # Include the util module so we have access to things like 'binary'
-        include Puppet::Util, Puppet::Util::Docs
-        include Puppet::Util::Logging
-        attr_accessor :name
-
-        # The source parameter exists so that providers using the same
-        # source can specify this, so reading doesn't attempt to read the
-        # same package multiple times.
-        attr_writer :source
-
-        # LAK 2007-05-09: Keep the model stuff around for backward compatibility
-        attr_reader :model
-        attr_accessor :resource_type
-        attr_writer :doc
-    end
-
-    # LAK 2007-05-09: Keep the model stuff around for backward compatibility
-    attr_reader :model
-    attr_accessor :resource
-    
-    def self.command(name)
-        name = symbolize(name)
-
-        if defined?(@commands) and command = @commands[name]
-            # nothing
-        elsif superclass.respond_to? :command and command = superclass.command(name)
-            # nothing
-        else
-            raise Puppet::DevError, "No command %s defined for provider %s" %
-                [name, self.name]
-        end
-
-        return binary(command)
-    end
-
-    # Define commands that are not optional.
-    def self.commands(hash)
-        optional_commands(hash) do |name, path|
-            confine :exists => path, :for_binary => true
-        end
-    end
-
-    # Is the provided feature a declared feature?
-    def self.declared_feature?(name)
-        defined?(@declared_features) and @declared_features.include?(name)
-    end
-
-    # Does this implementation match all of the default requirements?  If
-    # defaults are empty, we return false.
-    def self.default?
-        return false if @defaults.empty?
-        if @defaults.find do |fact, values|
-                values = [values] unless values.is_a? Array
-                if fval = Facter.value(fact).to_s and fval != ""
-                    fval = fval.to_s.downcase.intern
-                else
-                    return false
-                end
-
-                # If any of the values match, we're a default.
-                if values.find do |value| fval == value.to_s.downcase.intern end
-                    false
-                else
-                    true
-                end
-            end
-            return false
-        else
-            return true
-        end
-    end
-
-    # Store how to determine defaults.
-    def self.defaultfor(hash)
-        hash.each do |d,v|
-            @defaults[d] = v
-        end
-    end
-
-    def self.defaultnum
-        @defaults.length
-    end
-
-    def self.initvars
-        @defaults = {}
-        @commands = {}
-    end
-
-    # The method for returning a list of provider instances.  Note that it returns providers, preferably with values already
-    # filled in, not resources.
-    def self.instances
-        raise Puppet::DevError, "Provider %s has not defined the 'instances' class method" % self.name
-    end
-
-    # Create the methods for a given command.
-    def self.make_command_methods(name)
-        # Now define a method for that command
-        unless metaclass.method_defined? name
-            meta_def(name) do |*args|
-                unless command(name)
-                    raise Puppet::Error, "Command %s is missing" % name
-                end
-                if args.empty?
-                    cmd = [command(name)]
-                else
-                    cmd = [command(name)] + args
-                end
-                # This might throw an ExecutionFailure, but the system above
-                # will catch it, if so.
-                return execute(cmd)
-            end
-            
-            # And then define an instance method that just calls the class method.
-            # We need both, so both instances and classes can easily run the commands.
-            unless method_defined? name
-                define_method(name) do |*args|
-                    self.class.send(name, *args)
-                end
-            end
-        end
-    end
-
-    # Create getter/setter methods for each property our resource type supports.
-    # They all get stored in @property_hash.  This method is useful
-    # for those providers that use prefetch and flush.
-    def self.mkmodelmethods
-        warnonce "Provider.mkmodelmethods is deprecated; use Provider.mk_resource_methods"
-        mk_resource_methods
-    end
-
-    # Create getter/setter methods for each property our resource type supports.
-    # They all get stored in @property_hash.  This method is useful
-    # for those providers that use prefetch and flush.
-    def self.mk_resource_methods
-        [resource_type.validproperties, resource_type.parameters].flatten.each do |attr|
-            attr = symbolize(attr)
-            next if attr == :name
-            define_method(attr) do
-                @property_hash[attr] || :absent
-            end
-
-            define_method(attr.to_s + "=") do |val|
-                @property_hash[attr] = val
-            end
-        end
-    end
-
-    self.initvars
-
-    # Define one or more binaries we'll be using.  If a block is passed, yield the name
-    # and path to the block (really only used by 'commands').
-    def self.optional_commands(hash)
-        hash.each do |name, path|
-            name = symbolize(name)
-            @commands[name] = path
-
-            if block_given?
-                yield(name, path)
-            end
-
-            # Now define the class and instance methods.
-            make_command_methods(name)
-        end
-    end
-
-    # Retrieve the data source.  Defaults to the provider name.
-    def self.source
-        unless defined? @source
-            @source = self.name
-        end
-        @source
-    end
-
-    # Does this provider support the specified parameter?
-    def self.supports_parameter?(param)
-        if param.is_a?(Class)
-            klass = param
-        else
-            unless klass = resource_type.attrclass(param)
-                raise Puppet::DevError, "'%s' is not a valid parameter for %s" % [param, resource_type.name]
-            end
-        end
-        return true unless features = klass.required_features
-
-        if satisfies?(*features)
-            return true
-        else
-            return false
-        end
-    end
-
-#    def self.to_s
-#        unless defined? @str
-#            if self.resource_type
-#                @str = "%s provider %s" % [resource_type.name, self.name]
-#            else
-#                @str = "unattached provider %s" % [self.name]
-#            end
-#        end
-#        @str
-#    end
-
-    dochook(:defaults) do
-        if @defaults.length > 0
-            return "  Default for " + @defaults.collect do |f, v|
-                "``#{f}`` == ``#{v}``"
-            end.join(" and ") + "."
-        end
-    end
-
-    dochook(:commands) do
-        if @commands.length > 0
-            return "  Required binaries: " + @commands.collect do |n, c|
-                "``#{c}``"
-            end.join(", ") + "."
-        end
-    end
-
-    dochook(:features) do
-        if features().length > 0
-            return "  Supported features: " + features().collect do |f|
-                "``#{f}``"
-            end.join(", ") + "."
-        end
-    end
-
-    # Remove the reference to the resource, so GC can clean up.
-    def clear
-        @resource = nil
-        @model = nil
-    end
-
-    # Retrieve a named command.
-    def command(name)
-        self.class.command(name)
-    end
-
-    # Get a parameter value.
-    def get(param)
-        @property_hash[symbolize(param)] || :absent
-    end
-
-    def initialize(resource = nil)
-        if resource.is_a?(Hash)
-            # We don't use a duplicate here, because some providers (ParsedFile, at least)
-            # use the hash here for later events.
-            @property_hash = resource
-        elsif resource
-            @resource = resource if resource
-            # LAK 2007-05-09: Keep the model stuff around for backward compatibility
-            @model = resource
-            @property_hash = {}
-        else
-            @property_hash = {}
-        end
-    end
-
-    def name
-        if n = @property_hash[:name]
-            return n
-        elsif self.resource
-            resource.name
-        else
-            raise Puppet::DevError, "No resource and no name in property hash in %s instance" % self.class.name
-        end
-    end
-
-    # Set passed params as the current values.
-    def set(params)
-        params.each do |param, value|
-            @property_hash[symbolize(param)] = value
-        end
-    end
-
-    def to_s
-        "%s(provider=%s)" % [@resource.to_s, self.class.name]
-    end
-end
-
diff --git a/lib/puppet/provider/confine.rb b/lib/puppet/provider/confine.rb
deleted file mode 100644
index 70148fc..0000000
--- a/lib/puppet/provider/confine.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-# The class that handles testing whether our providers
-# actually work or not.
-require 'puppet/util'
-
-class Puppet::Provider::Confine
-    include Puppet::Util
-
-    @tests = {}
-
-    class << self
-        attr_accessor :name
-    end
-
-    def self.inherited(klass)
-        name = klass.to_s.split("::").pop.downcase.to_sym
-        raise "Test %s is already defined" % name if @tests.include?(name)
-
-        klass.name = name
-
-        @tests[name] = klass
-    end
-
-    def self.test(name)
-        unless @tests[name]
-            begin
-                require "puppet/provider/confine/%s" % name
-            rescue LoadError => detail
-                unless detail.to_s =~ /No such file/i
-                    warn "Could not load confine test '%s': %s" % [name, detail]
-                end
-                # Could not find file
-            end
-        end
-        return @tests[name]
-    end
-
-    attr_reader :values
-
-    # Mark that this confine is used for testing binary existence.
-    attr_accessor :for_binary
-    def for_binary?
-        for_binary
-    end
-
-    def initialize(values)
-        values = [values] unless values.is_a?(Array)
-        @values = values
-    end
-
-    # Provide a hook for the message when there's a failure.
-    def message(value)
-        ""
-    end
-
-    # Collect the results of all of them.
-    def result
-        values.collect { |value| pass?(value) }
-    end
-
-    # Test whether our confine matches.
-    def valid?
-        values.each do |value|
-            unless pass?(value)
-                Puppet.debug message(value)
-                return false
-            end
-        end
-
-        return true
-    ensure
-        reset
-    end
-
-    # Provide a hook for subclasses.
-    def reset
-    end
-end
diff --git a/lib/puppet/provider/confine/exists.rb b/lib/puppet/provider/confine/exists.rb
deleted file mode 100644
index 1d1ed8c..0000000
--- a/lib/puppet/provider/confine/exists.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'puppet/provider/confine'
-
-class Puppet::Provider::Confine::Exists < Puppet::Provider::Confine
-    def self.summarize(confines)
-        confines.inject([]) { |total, confine| total + confine.summary }
-    end
-
-    def pass?(value)
-        if for_binary?
-            return false unless value = binary(value)
-        end
-        value and FileTest.exist?(value)
-    end
-
-    def message(value)
-        "file %s does not exist" % value
-    end
-
-    def summary
-        result.zip(values).inject([]) { |array, args| val, f = args; array << f unless val; array }
-    end
-end
diff --git a/lib/puppet/provider/confine/false.rb b/lib/puppet/provider/confine/false.rb
deleted file mode 100644
index b5b2b51..0000000
--- a/lib/puppet/provider/confine/false.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'puppet/provider/confine'
-
-class Puppet::Provider::Confine::False < Puppet::Provider::Confine
-    def self.summarize(confines)
-        confines.inject(0) { |count, confine| count + confine.summary }
-    end
-
-    def pass?(value)
-        ! value
-    end
-
-    def message(value)
-        "true value when expecting false"
-    end
-
-    def summary
-        result.find_all { |v| v == false }.length
-    end
-end
diff --git a/lib/puppet/provider/confine/feature.rb b/lib/puppet/provider/confine/feature.rb
deleted file mode 100644
index 1d92b00..0000000
--- a/lib/puppet/provider/confine/feature.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require 'puppet/provider/confine'
-
-class Puppet::Provider::Confine::Feature < Puppet::Provider::Confine
-    def self.summarize(confines)
-        confines.collect { |c| c.values }.flatten.uniq.find_all { |value| ! confines[0].pass?(value) }
-    end
-
-    # Is the named feature available?
-    def pass?(value)
-        Puppet.features.send(value.to_s + "?")
-    end
-
-    def message(value)
-        "feature %s is missing" % value
-    end
-end
-
diff --git a/lib/puppet/provider/confine/true.rb b/lib/puppet/provider/confine/true.rb
deleted file mode 100644
index 86b3b14..0000000
--- a/lib/puppet/provider/confine/true.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'puppet/provider/confine'
-
-class Puppet::Provider::Confine::True < Puppet::Provider::Confine
-    def self.summarize(confines)
-        confines.inject(0) { |count, confine| count + confine.summary }
-    end
-
-    def pass?(value)
-        # Double negate, so we only get true or false.
-        ! ! value
-    end
-
-    def message(value)
-        "false value when expecting true"
-    end
-
-    def summary
-        result.find_all { |v| v == true }.length
-    end
-end
diff --git a/lib/puppet/provider/confine/variable.rb b/lib/puppet/provider/confine/variable.rb
deleted file mode 100644
index 0ef90d6..0000000
--- a/lib/puppet/provider/confine/variable.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-require 'puppet/provider/confine'
-
-# Require a specific value for a variable, either a Puppet setting
-# or a Facter value.  This class is a bit weird because the name
-# is set explicitly by the ConfineCollection class -- from this class,
-# it's not obvious how the name would ever get set.
-class Puppet::Provider::Confine::Variable < Puppet::Provider::Confine
-    # Provide a hash summary of failing confines -- the key of the hash
-    # is the name of the confine, and the value is the missing yet required values.
-    # Only returns failed values, not all required values.
-    def self.summarize(confines)
-        result = Hash.new { |hash, key| hash[key] = [] }
-        confines.inject(result) { |total, confine| total[confine.name] += confine.values unless confine.valid?; total }
-    end
-
-    # This is set by ConfineCollection.
-    attr_accessor :name
-
-    # Retrieve the value from facter
-    def facter_value
-        unless defined?(@facter_value) and @facter_value
-            @facter_value = ::Facter.value(name).to_s.downcase
-        end
-        @facter_value
-    end
-
-    def message(value)
-        "facter value '%s' for '%s' not in required list '%s'" % [value, self.name, values.join(",")]
-    end
-
-    # Compare the passed-in value to the retrieved value.
-    def pass?(value)
-        test_value.downcase.to_s == value.to_s.downcase
-    end
-
-    def reset
-        # Reset the cache.  We want to cache it during a given
-        # run, but across runs.
-        @facter_value = nil
-    end
-
-    private
-
-    def setting?
-        Puppet.settings.valid?(name)
-    end
-
-    def test_value
-        setting? ? Puppet.settings[name] : facter_value 
-    end
-end
diff --git a/lib/puppet/provider/confine_collection.rb b/lib/puppet/provider/confine_collection.rb
deleted file mode 100644
index 35f461a..0000000
--- a/lib/puppet/provider/confine_collection.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# Manage a collection of confines, returning a boolean or
-# helpful information.
-require 'puppet/provider/confine'
-
-class Puppet::Provider::ConfineCollection
-    def confine(hash)
-        if hash.include?(:for_binary)
-            for_binary = true
-            hash.delete(:for_binary)
-        else
-            for_binary = false
-        end
-        hash.each do |test, values|
-            if klass = Puppet::Provider::Confine.test(test)
-                @confines << klass.new(values)
-                @confines[-1].for_binary = true if for_binary
-            else
-                confine = Puppet::Provider::Confine.test(:variable).new(values)
-                confine.name = test
-                @confines << confine
-            end
-        end
-    end
-
-    def initialize
-        @confines = []
-    end
-
-    # Return a hash of the whole confine set, used for the Provider
-    # reference.
-    def summary
-        confines = Hash.new { |hash, key| hash[key] = [] }
-        @confines.each { |confine| confines[confine.class] << confine }
-        result = {}
-        confines.each do |klass, list|
-            value = klass.summarize(list)
-            next if (value.respond_to?(:length) and value.length == 0) or (value == 0)
-            result[klass.name] = value
-
-        end
-        result
-    end
-
-    def valid?
-        ! @confines.detect { |c| ! c.valid? }
-    end
-end
diff --git a/lib/puppet/provider/confiner.rb b/lib/puppet/provider/confiner.rb
deleted file mode 100644
index 4605523..0000000
--- a/lib/puppet/provider/confiner.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'puppet/provider/confine_collection'
-
-module Puppet::Provider::Confiner
-    def confine(hash)
-        confine_collection.confine(hash)
-    end
-
-    def confine_collection
-        unless defined?(@confine_collection)
-            @confine_collection = Puppet::Provider::ConfineCollection.new
-        end
-        @confine_collection
-    end
-
-    # Check whether this implementation is suitable for our platform.
-    def suitable?(short = true)
-        return confine_collection.valid? if short
-        return confine_collection.summary
-    end
-end
diff --git a/lib/puppet/provider/cron/crontab.rb b/lib/puppet/provider/cron/crontab.rb
deleted file mode 100755
index 1cfa0f5..0000000
--- a/lib/puppet/provider/cron/crontab.rb
+++ /dev/null
@@ -1,204 +0,0 @@
-require 'puppet/provider/parsedfile'
-
-tab = case Facter.value(:operatingsystem)
-    when "Solaris": :suntab
-    else
-        :crontab
-    end
-
-
-Puppet::Type.type(:cron).provide(:crontab,
-    :parent => Puppet::Provider::ParsedFile,
-    :default_target => ENV["USER"] || "root",
-    :filetype => tab
-) do
-    commands :crontab => "crontab"
-
-    text_line :comment, :match => %r{^#}, :post_parse => proc { |record|
-        if record[:line] =~ /Puppet Name: (.+)\s*$/
-            record[:name] = $1
-        end
-    }
-
-    text_line :blank, :match => %r{^\s*$}
-
-    text_line :environment, :match => %r{^\w+=}
-
-    record_line :freebsd_special, :fields => %w{special command},
-        :match => %r{^@(\w+)\s+(.+)$}, :pre_gen => proc { |record|
-            record[:special] = "@" + record[:special]
-        }
-
-    crontab = record_line :crontab, :fields => %w{minute hour monthday month weekday command},
-        :match => %r{^\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.+)$},
-        :optional => %w{minute hour weekday month monthday}, :absent => "*"
-
-    class << crontab
-        def numeric_fields
-            fields - [:command]
-        end
-        # Do some post-processing of the parsed record.  Basically just
-        # split the numeric fields on ','.
-        def post_parse(record)
-            numeric_fields.each do |field|
-                if val = record[field] and val != :absent
-                    record[field] = record[field].split(",")
-                end
-            end
-        end
-
-        # Join the fields back up based on ','.
-        def pre_gen(record)
-            numeric_fields.each do |field|
-                if vals = record[field] and vals.is_a?(Array)
-                    record[field] = vals.join(",")
-                end
-            end
-        end
-
-
-        # Add name and environments as necessary.
-        def to_line(record)
-            str = ""
-            if record[:name]
-                str = "# Puppet Name: %s\n" % record[:name]
-            end
-            if record[:environment] and record[:environment] != :absent and record[:environment] != [:absent]
-                record[:environment].each do |env|
-                    str += env + "\n"
-                end
-            end
-
-            if record[:special]
-                str += "@%s %s" % [record[:special], record[:command]]
-            else
-                str += join(record)
-            end
-            str
-        end
-    end
-
-
-    # Return the header placed at the top of each generated file, warning
-    # users that modifying this file manually is probably a bad idea.
-    def self.header
-%{# HEADER: This file was autogenerated at #{Time.now} by puppet.
-# HEADER: While it can still be managed manually, it is definitely not recommended.
-# HEADER: Note particularly that the comments starting with 'Puppet Name' should
-# HEADER: not be deleted, as doing so could cause duplicate cron jobs.\n}
-    end
-
-    # See if we can match the record against an existing cron job.
-    def self.match(record, resources)
-        resources.each do |name, resource|
-            # Match the command first, since it's the most important one.
-            next unless record[:target] == resource.value(:target)
-            next unless record[:command] == resource.value(:command)
-
-            # Then check the @special stuff
-            if record[:special]
-                next unless resource.value(:special) == record[:special]
-            end
-
-            # Then the normal fields.
-            matched = true
-            record_type(record[:record_type]).fields().each do |field|
-                next if field == :command
-                next if field == :special
-                if record[field] and ! resource.value(field)
-                    #Puppet.info "Cron is missing %s: %s and %s" %
-                    #    [field, record[field].inspect, resource.value(field).inspect]
-                    matched = false
-                    break
-                end
-
-                if ! record[field] and resource.value(field)
-                    #Puppet.info "Hash is missing %s: %s and %s" %
-                    #    [field, resource.value(field).inspect, record[field].inspect]
-                    matched = false
-                    break
-                end
-
-                # Yay differing definitions of absent.
-                next if (record[field] == :absent and resource.value(field) == "*")
-
-                # Everything should be in the form of arrays, not the normal text.
-                next if (record[field] == resource.value(field))
-                #Puppet.info "Did not match %s: %s vs %s" %
-                #    [field, resource.value(field).inspect, record[field].inspect]
-                matched = false 
-                break
-            end
-            return resource if matched
-        end
-
-        return false
-    end
-
-    # Collapse name and env records.
-    def self.prefetch_hook(records)
-        name = nil
-        envs = nil
-        result = records.each { |record|
-            case record[:record_type]
-            when :comment:
-                if record[:name]
-                    name = record[:name]
-                    record[:skip] = true
-                    
-                    # Start collecting env values
-                    envs = []
-                end
-            when :environment:
-                # If we're collecting env values (meaning we're in a named cronjob),
-                # store the line and skip the record.
-                if envs
-                    envs << record[:line]
-                    record[:skip] = true
-                end
-            when :blank:
-                # nothing
-            else
-                if name
-                    record[:name] = name
-                    name = nil
-                end
-                if envs.nil? or envs.empty?
-                    record[:environment] = :absent
-                else
-                    # Collect all of the environment lines, and mark the records to be skipped,
-                    # since their data is included in our crontab record.
-                    record[:environment] = envs
-
-                    # And turn off env collection again
-                    envs = nil
-                end
-            end
-        }.reject { |record| record[:skip] }
-        result
-    end
-
-    def self.to_file(records)
-        text = super
-        # Apparently Freebsd will "helpfully" add a new TZ line to every
-        # single cron line, but not in all cases (e.g., it doesn't do it
-        # on my machine).  This is my attempt to fix it so the TZ lines don't
-        # multiply.
-        if text =~ /(^TZ=.+\n)/
-            tz = $1 
-            text.sub!(tz, '')
-            text = tz + text
-        end
-        return text
-    end
-
-    def user=(user)
-        @property_hash[:user] = user
-        @property_hash[:target] = user
-    end
-
-    def user
-        @property_hash[:user] || @property_hash[:target]
-    end
-end
-
diff --git a/lib/puppet/provider/group/directoryservice.rb b/lib/puppet/provider/group/directoryservice.rb
deleted file mode 100644
index 4066222..0000000
--- a/lib/puppet/provider/group/directoryservice.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#  Created by Jeff McCune on 2007-07-22
-#  Copyright (c) 2007. All rights reserved.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation (version 2 of the License)
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston MA  02110-1301 USA
-
-require 'puppet/provider/nameservice/directoryservice'
-
-Puppet::Type.type(:group).provide :directoryservice, :parent => Puppet::Provider::NameService::DirectoryService do
-    desc "Group management using DirectoryService on OS X."
-    
-    commands :dscl => "/usr/bin/dscl"
-    confine :operatingsystem => :darwin
-    #defaultfor :operatingsystem => :darwin
-end
diff --git a/lib/puppet/provider/group/groupadd.rb b/lib/puppet/provider/group/groupadd.rb
deleted file mode 100644
index 371beee..0000000
--- a/lib/puppet/provider/group/groupadd.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require 'puppet/provider/nameservice/objectadd'
-
-Puppet::Type.type(:group).provide :groupadd, :parent => Puppet::Provider::NameService::ObjectAdd do
-    desc "Group management via ``groupadd`` and its ilk.  The default
-        for most platforms"
-
-    commands :add => "groupadd", :delete => "groupdel", :modify => "groupmod"
-
-    verify :gid, "GID must be an integer" do |value|
-        value.is_a? Integer
-    end
-
-    def addcmd
-        cmd = [command(:add)]
-        if gid = @resource.should(:gid)
-            unless gid == :absent
-                cmd << flag(:gid) << gid
-            end
-        end
-        if @resource.allowdupe?
-            cmd << "-o"
-        end
-        cmd << @resource[:name]
-
-        return cmd
-    end
-end
-
diff --git a/lib/puppet/provider/group/ldap.rb b/lib/puppet/provider/group/ldap.rb
deleted file mode 100644
index 37a7e73..0000000
--- a/lib/puppet/provider/group/ldap.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require 'puppet/provider/ldap'
-
-Puppet::Type.type(:group).provide :ldap, :parent => Puppet::Provider::Ldap do
-    desc "Group management via ``ldap``.  This provider requires that you
-        have valid values for all of the ldap-related settings,
-        including ``ldapbase``.  You will also almost definitely need settings
-        for ``ldapuser`` and ``ldappassword``, so that your clients can write
-        to ldap.
-        
-        Note that this provider will automatically generate a GID for you if
-        you do not specify one, but it is a potentially expensive operation,
-        as it iterates across all existing groups to pick the appropriate next
-        one."
-
-    confine :true => Puppet.features.ldap?, :false => (Puppet[:ldapuser] == "")
-
-    # We're mapping 'members' here because we want to make it
-    # easy for the ldap user provider to manage groups.  This
-    # way it can just use the 'update' method in the group manager,
-    # whereas otherwise it would need to replicate that code.
-    manages(:posixGroup).at("ou=Groups").and.maps :name => :cn, :gid => :gidNumber, :members => :memberUid
-
-    # Find the next gid after the current largest gid.
-    provider = self
-    manager.generates(:gidNumber).with do 
-        largest = 500
-        if existing = provider.manager.search
-                existing.each do |hash|
-                next unless value = hash[:gid]
-                num = value[0].to_i
-                if num > largest
-                    largest = num
-                end
-            end
-        end
-        largest + 1
-    end
-
-    # Convert a group name to an id.
-    def self.name2id(group)
-        return nil unless result = manager.search("cn=%s" % group) and result.length > 0
-
-        # Only use the first result.
-        group = result[0]
-        gid = group[:gid][0]
-        return gid
-    end
-end
diff --git a/lib/puppet/provider/group/netinfo.rb b/lib/puppet/provider/group/netinfo.rb
deleted file mode 100644
index b217477..0000000
--- a/lib/puppet/provider/group/netinfo.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# Manage NetInfo POSIX objects.  Probably only used on OS X, but I suppose
-# it could be used elsewhere.
-require 'puppet/provider/nameservice/netinfo'
-
-Puppet::Type.type(:group).provide :netinfo, :parent => Puppet::Provider::NameService::NetInfo do
-    desc "Group management using NetInfo."
-    commands :nireport => "nireport", :niutil => "niutil"
-
-    defaultfor :operatingsystem => :darwin
-end
-
diff --git a/lib/puppet/provider/group/pw.rb b/lib/puppet/provider/group/pw.rb
deleted file mode 100644
index 3c384cd..0000000
--- a/lib/puppet/provider/group/pw.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-require 'puppet/provider/nameservice/pw'
-
-Puppet::Type.type(:group).provide :pw, :parent => Puppet::Provider::NameService::PW do
-    desc "Group management via ``pw``.  Only works on FreeBSD."
-
-    commands :pw => "/usr/sbin/pw"
-    defaultfor :operatingsystem => :freebsd
-
-    verify :gid, "GID must be an integer" do |value|
-        value.is_a? Integer
-    end
-
-    def addcmd
-        cmd = [command(:pw), "groupadd", @resource[:name]]
-        if gid = @resource.should(:gid)
-            unless gid == :absent
-                cmd << flag(:gid) << gid
-            end
-        end
-
-        # Apparently, contrary to the man page, groupadd does
-        # not accept -o.
-        #if @parent[:allowdupe] == :true
-        #    cmd << "-o"
-        #end
-
-        return cmd
-    end
-end
-
diff --git a/lib/puppet/provider/host/netinfo.rb b/lib/puppet/provider/host/netinfo.rb
deleted file mode 100644
index 07a9362..0000000
--- a/lib/puppet/provider/host/netinfo.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# Manage NetInfo POSIX objects.  Probably only used on OS X, but I suppose
-# it could be used elsewhere.
-require 'puppet/provider/nameservice/netinfo'
-
-Puppet::Type.type(:host).provide :netinfo, :parent => Puppet::Provider::NameService::NetInfo,
-    :netinfodir => "machines" do
-    desc "Host management in NetInfo.  This provider is highly experimental and is known
-        not to work currently."
-    commands :nireport => "nireport", :niutil => "niutil"
-    commands :mountcmd => "mount", :umount => "umount", :df => "df"
-
-    options :ip, :key => "ip_address"
-
-    defaultfor :operatingsystem => :darwin
-end
-
diff --git a/lib/puppet/provider/host/parsed.rb b/lib/puppet/provider/host/parsed.rb
deleted file mode 100644
index a4812ba..0000000
--- a/lib/puppet/provider/host/parsed.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-require 'puppet/provider/parsedfile'
-
-hosts = nil
-case Facter.value(:operatingsystem)
-when "Solaris": hosts = "/etc/inet/hosts"
-else
-    hosts = "/etc/hosts"
-end
-
-Puppet::Type.type(:host).provide(:parsed,
-    :parent => Puppet::Provider::ParsedFile,
-    :default_target => hosts,
-    :filetype => :flat
-) do
-    confine :exists => hosts
-
-    text_line :comment, :match => /^#/ 
-    text_line :blank, :match => /^\s*$/ 
-
-    record_line :parsed, :fields => %w{ip name alias},
-        :optional => %w{alias},
-        :rts => true do |line|
-        hash = {}
-        if line.sub!(/^(\S+)\s+(\S+)\s*/, '')
-            hash[:ip] = $1
-            hash[:name] = $2
-
-            unless line == ""
-                line.sub!(/\s*/, '')
-                line.sub!(/^([^#]+)\s*/) do |value|
-                    aliases = $1
-                    unless aliases =~ /^\s*$/
-                        hash[:alias] = aliases.split(/\s+/)
-                    end
-
-                    ""
-                end
-            end
-        else
-            raise Puppet::Error, "Could not match '%s'" % line
-        end
-
-        if hash[:alias] == ""
-            hash.delete(:alias)
-        end
-
-        return hash
-    end
-
-    # Convert the current object into a host-style string.
-    def self.to_line(hash)
-        return super unless hash[:record_type] == :parsed
-        [:ip, :name].each do |n|
-            unless hash[n] and hash[n] != :absent
-                raise ArgumentError, "%s is a required attribute for hosts" % n
-            end
-        end
-
-        str = "%s\t%s" % [hash[:ip], hash[:name]]
-
-        if hash.include? :alias
-            if hash[:alias].is_a? Array
-                str += "\t%s" % hash[:alias].join("\t")
-            else
-                raise ArgumentError, "Aliases must be specified as an array"
-            end
-        end
-
-        str
-    end
-end
-
diff --git a/lib/puppet/provider/ldap.rb b/lib/puppet/provider/ldap.rb
deleted file mode 100644
index 76834f9..0000000
--- a/lib/puppet/provider/ldap.rb
+++ /dev/null
@@ -1,137 +0,0 @@
-require 'puppet/provider'
-
-# The base class for LDAP providers.
-class Puppet::Provider::Ldap < Puppet::Provider
-    require 'puppet/util/ldap/manager'
-
-    class << self
-        attr_reader :manager
-    end
-
-    # Look up all instances at our location.  Yay.
-    def self.instances
-        return [] unless list = manager.search
-
-        list.collect { |entry| new(entry) }
-    end
-
-    # Specify the ldap manager for this provider, which is
-    # used to figure out how we actually interact with ldap.
-    def self.manages(*args)
-        @manager = Puppet::Util::Ldap::Manager.new
-        @manager.manages(*args)
-
-        # Set up our getter/setter methods.
-        mk_resource_methods
-        return @manager
-    end
-
-    # Query all of our resources from ldap.
-    def self.prefetch(resources)
-        resources.each do |name, resource|
-            if result = manager.find(name)
-                result[:ensure] = :present
-                resource.provider = new(result)
-            else
-                resource.provider = new(:ensure => :absent)
-            end
-        end
-    end
-
-    attr_reader :ldap_properties
-
-    def manager
-        self.class.manager
-    end
-
-    def create
-        @property_hash[:ensure] = :present
-        self.class.resource_type.validproperties.each do |property|
-            if val = resource.should(property)
-                @property_hash[property] = val
-            end
-        end
-    end
-
-    def delete
-        @property_hash[:ensure] = :absent
-    end
-
-    def exists?
-        @property_hash[:ensure] != :absent
-    end
-
-    # Apply our changes to ldap, yo.
-    def flush
-        # Just call the manager's update() method.
-        @property_hash.delete(:groups)
-        @ldap_properties.delete(:groups)
-        manager.update(name, ldap_properties, properties)
-        @property_hash.clear
-        @ldap_properties.clear
-    end
-
-    def initialize(*args)
-        raise(Puppet::DevError, "No LDAP Configuration defined for %s" % self.class) unless self.class.manager
-        raise(Puppet::DevError, "Invalid LDAP Configuration defined for %s" % self.class) unless self.class.manager.valid?
-        super
-
-        @property_hash = @property_hash.inject({}) do |result, ary|
-            param, values = ary
-
-            # Skip any attributes we don't manage.
-            next result unless self.class.resource_type.validattr?(param)
-
-            paramclass = self.class.resource_type.attrclass(param)
-
-            unless values.is_a?(Array)
-                result[param] = values
-                next result
-            end
-
-            # Only use the first value if the attribute class doesn't manage
-            # arrays of values.
-            if paramclass.superclass == Puppet::Parameter or paramclass.array_matching == :first
-                result[param] = values[0]
-            else
-                result[param] = values
-            end
-            result
-        end
-
-        # Make a duplicate, so that we have a copy for comparison 
-        # at the end.
-        @ldap_properties = @property_hash.dup
-    end
-
-    # Return the current state of ldap.
-    def ldap_properties
-        @ldap_properties.dup
-    end
-
-    # Return (and look up if necessary) the desired state.
-    def properties
-        if @property_hash.empty?
-            @property_hash = query || {:ensure => :absent}
-            if @property_hash.empty?
-                @property_hash[:ensure] = :absent
-            end
-        end
-        @property_hash.dup
-    end
-
-    # Collect the current attributes from ldap.  Returns
-    # the results, but also stores the attributes locally,
-    # so we have something to compare against when we update.
-    # LAK:NOTE This is normally not used, because we rely on prefetching.
-    def query
-        # Use the module function.
-        unless attributes = manager.find(name)
-            @ldap_properties = {}
-            return nil
-        end
-
-        @ldap_properties = attributes
-        return @ldap_properties.dup
-    end
-end
diff --git a/lib/puppet/provider/mailalias/aliases.rb b/lib/puppet/provider/mailalias/aliases.rb
deleted file mode 100755
index 8b5c456..0000000
--- a/lib/puppet/provider/mailalias/aliases.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require 'puppet/provider/parsedfile'
-
-Puppet::Type.type(:mailalias).provide(:aliases,
-    :parent => Puppet::Provider::ParsedFile,
-    :default_target => "/etc/aliases",
-    :filetype => :flat
-) do
-    text_line :comment, :match => /^#/
-    text_line :blank, :match => /^\s*$/
-
-    record_line :aliases, :fields => %w{name recipient}, :separator => /\s*:\s*/, :block_eval => :instance do
-        def post_parse(record)
-            # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-            # It's not sufficient to assign to an existing hash.
-            recipient = record[:recipient].split(/\s*,\s*/).collect { |d| d.gsub(/^['"]|['"]$/, '') }
-            record[:recipient] = recipient
-            record
-        end
-
-        def to_line(record)
-            dest = record[:recipient].collect do |d|
-                # Quote aliases that have non-alpha chars
-                if d =~ /[^-\w at .]/
-                    '"%s"' % d
-                else
-                    d
-                end
-            end.join(",")
-            return "%s: %s" % [record[:name], dest]
-        end
-    end
-end
-
diff --git a/lib/puppet/provider/maillist/mailman.rb b/lib/puppet/provider/maillist/mailman.rb
deleted file mode 100755
index 4e225fe..0000000
--- a/lib/puppet/provider/maillist/mailman.rb
+++ /dev/null
@@ -1,112 +0,0 @@
-require 'puppet/provider/parsedfile'
-
-Puppet::Type.type(:maillist).provide(:mailman) do
-    commands :list_lists => "list_lists", :rmlist => "rmlist", :newlist => "newlist"
-
-    # This probably won't work for non-Debian installs, but this path is sure not to be in the PATH.
-    commands :mailman => "/var/lib/mailman/mail/mailman"
-
-    mk_resource_methods
-
-    # Return a list of existing mailman instances.
-    def self.instances
-        list_lists.split("\n").reject { |line| line.include?("matching mailing lists") }.collect do |line|
-            name, description = line.sub(/^\s+/, '').sub(/\s+$/, '').split(/\s+-\s+/)
-            if description.include?("no description available")
-                description = :absent
-            end
-            new(:ensure => :present, :name => name, :description => description)
-        end
-    end
-
-    # Prefetch our list list, yo.
-    def self.prefetch(lists)
-        instances.each do |prov|
-            if list = lists[prov.name] || lists[prov.name.downcase]
-                list.provider = prov
-            end
-        end
-    end
-
-    def aliases
-        mailman = self.class.command(:mailman)
-        name = self.name.downcase
-        aliases = {name => "| #{mailman} post #{name}"}
-        %w{admin bounces confirm join leave owner request subscribe unsubscribe}.each do |address|
-            aliases["%s-%s" % [name, address]] = "| %s %s %s" % [mailman, address, name]
-        end
-        aliases
-    end
-
-    # Create the list.
-    def create
-        args = []
-        if val = @resource[:mailserver]
-            args << "--emailhost" << val
-        end
-        if val = @resource[:webserver]
-            args << "--urlhost" << val
-        end
-
-        args << self.name
-        if val = @resource[:admin]
-            args << val
-        else
-            raise ArgumentError, "Mailman lists require an administrator email address"
-        end
-        if val = @resource[:password]
-            args << val
-        else
-            raise ArgumentError, "Mailman lists require an administrator password"
-        end
-        newlist(*args)
-    end
-
-    # Delete the list.
-    def delete(purge = false)
-        args = []
-        if purge
-            args << "--archives"
-        end
-        args << self.name
-        rmlist(*args)
-    end
-
-    # Does our list exist already?
-    def exists?
-        properties[:ensure] != :absent
-    end
-
-    # Clear out the cached values.
-    def flush
-        @property_hash.clear
-    end
-
-    # Look up the current status.
-    def properties
-        if @property_hash.empty?
-            @property_hash = query || {:ensure => :absent}
-            if @property_hash.empty?
-                @property_hash[:ensure] = :absent
-            end
-        end
-        @property_hash.dup
-    end
-
-    # Remove the list and its archives.
-    def purge
-        delete(true)
-    end
-
-    # Pull the current state of the list from the full list.  We're
-    # getting some double entendre here....
-    def query
-        self.class.instances.each do |list|
-            if list.name == self.name or list.name.downcase == self.name
-                return list.properties
-            end
-        end
-        nil
-    end
-end
-
diff --git a/lib/puppet/provider/mount.rb b/lib/puppet/provider/mount.rb
deleted file mode 100644
index a63a040..0000000
--- a/lib/puppet/provider/mount.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-#  Created by Luke Kanies on 2006-11-12.
-#  Copyright (c) 2006. All rights reserved.
-
-require 'puppet'
-
-# A module just to store the mount/unmount methods.  Individual providers
-# still need to add the mount commands manually.
-module Puppet::Provider::Mount
-    # This only works when the mount point is synced to the fstab.
-    def mount
-        # Manually pass the mount options in, since some OSes *cough*OS X*cough* don't
-        # read from /etc/fstab but still want to use this type.
-        args = []
-        if self.options and self.options != :absent
-            args << "-o" << self.options
-        end
-        args << resource[:name]
-
-        if respond_to?(:flush)
-            flush
-        end
-        mountcmd(*args)
-    end
-
-    def remount
-        info "Remounting"
-        if resource[:remounts] == :true
-            mountcmd "-o", "remount", resource[:name]
-        else
-            unmount()
-            mount()
-        end
-    end
-
-    # This only works when the mount point is synced to the fstab.
-    def unmount
-        umount resource[:name]
-    end
-
-    # Is the mount currently mounted?
-    def mounted?
-        platform = Facter.value("operatingsystem")
-        name = resource[:name]
-        mounts = mountcmd.split("\n").find do |line|
-            case platform
-            when "Darwin"
-                line =~ / on #{name} / or line =~ %r{ on /private/var/automount#{name}}
-            when "Solaris"
-                line =~ /^#{name} on /
-            else
-                line =~ / on #{name} /
-            end
-        end
-    end
-end
diff --git a/lib/puppet/provider/mount/netinfo.rb b/lib/puppet/provider/mount/netinfo.rb
deleted file mode 100644
index 2cb1257..0000000
--- a/lib/puppet/provider/mount/netinfo.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# Manage NetInfo POSIX objects.  Probably only used on OS X, but I suppose
-# it could be used elsewhere.
-require 'puppet/provider/nameservice/netinfo'
-require 'puppet/provider/mount'
-
-# Puppet::Type.type(:mount).provide :netinfo, :parent => Puppet::Provider::NameService::NetInfo do
-#     include Puppet::Provider::Mount
-#     desc "Mount management in NetInfo.  This provider is highly experimental and is known
-#         not to work currently."
-#     commands :nireport => "nireport", :niutil => "niutil"
-#     commands :mountcmd => "mount", :umount => "umount", :df => "df"
-# 
-#     options :device, :key => "name"
-#     options :name, :key => "dir"
-#     options :dump, :key => "dump_freq"
-#     options :pass, :key => "passno"
-#     options :fstype, :key => "vfstype"
-#     options :options, :key => "opts"
-# 
-#     defaultfor :operatingsystem => :darwin
-#     
-#     def initialize(resource)
-#         warning "The NetInfo mount provider is highly experimental.  Use at your own risk."
-#         super
-#     end
-#     
-#     def mount
-#         cmd = []
-#         if opts = @resource.should(:options)
-#             cmd << opts
-#         end
-#         cmd << @resource.should(:device)
-#         cmd << @resource[:name]
-#         mountcmd cmd
-#     end
-# end
-
diff --git a/lib/puppet/provider/mount/parsed.rb b/lib/puppet/provider/mount/parsed.rb
deleted file mode 100755
index 9bc1cf5..0000000
--- a/lib/puppet/provider/mount/parsed.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require 'puppet/provider/parsedfile'
-require 'puppet/provider/mount'
-
-fstab = nil
-case Facter.value(:operatingsystem)
-when "Solaris": fstab = "/etc/vfstab"
-else
-    fstab = "/etc/fstab"
-end
-
-Puppet::Type.type(:mount).provide(:parsed,
-    :parent => Puppet::Provider::ParsedFile,
-    :default_target => fstab,
-    :filetype => :flat
-) do
-    include Puppet::Provider::Mount
-    #confine :exists => fstab
-
-    commands :mountcmd => "mount", :umount => "umount"
-
-    @platform = Facter["operatingsystem"].value
-    case @platform
-    when "Solaris":
-        @fields = [:device, :blockdevice, :name, :fstype, :pass, :atboot,
-               :options]
-    else
-        @fields = [:device, :name, :fstype, :options, :dump, :pass]
-        @fielddefaults = [ nil ] * 4 + [ "0", "2" ]
-    end
-
-    text_line :comment, :match => /^\s*#/
-    text_line :blank, :match => /^\s*$/
-
-    record_line self.name, :fields => @fields, :separator => /\s+/, :joiner => "\t", :optional => [:pass, :dump]
-end
-
diff --git a/lib/puppet/provider/naginator.rb b/lib/puppet/provider/naginator.rb
deleted file mode 100644
index 8e8a3d6..0000000
--- a/lib/puppet/provider/naginator.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-#  Created by Luke Kanies on 2007-11-27.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet'
-require 'puppet/provider/parsedfile'
-require 'puppet/external/nagios'
-
-# The base class for all Naginator providers.
-class Puppet::Provider::Naginator < Puppet::Provider::ParsedFile
-    # Retrieve the associated class from Nagios::Base.
-    def self.nagios_type
-        unless defined?(@nagios_type) and @nagios_type
-            name = resource_type.name.to_s.sub(/^nagios_/, '')
-            unless @nagios_type = Nagios::Base.type(name.to_sym)
-                raise Puppet::DevError, "Could not find nagios type '%s'" % name
-            end
-
-            # And add our 'ensure' settings, since they aren't a part of
-            # Naginator by default
-            @nagios_type.send(:attr_accessor, :ensure, :target, :on_disk)
-        end
-        @nagios_type
-    end
-
-    def self.parse(text)
-        Nagios::Parser.new.parse(text)
-    end
-
-    def self.to_file(records)
-        header + records.collect { |record| record.to_s }.join("\n")
-    end
-
-    def self.skip_record?(record)
-        false
-    end
-
-    def self.valid_attr?(klass, attr_name)
-        nagios_type.parameters.include?(attr_name)
-    end
-
-    def initialize(resource = nil)
-        if resource.is_a?(Nagios::Base)
-            # We don't use a duplicate here, because some providers (ParsedFile, at least)
-            # use the hash here for later events.
-            @property_hash = resource
-        elsif resource
-            @resource = resource if resource
-            # LAK 2007-05-09: Keep the model stuff around for backward compatibility
-            @model = resource
-            @property_hash = self.class.nagios_type.new
-        else
-            @property_hash = self.class.nagios_type.new
-        end
-    end
-end
diff --git a/lib/puppet/provider/nameservice.rb b/lib/puppet/provider/nameservice.rb
deleted file mode 100644
index c1e21af..0000000
--- a/lib/puppet/provider/nameservice.rb
+++ /dev/null
@@ -1,315 +0,0 @@
-require 'puppet'
-
-# This is the parent class of all NSS classes.  They're very different in
-# their backend, but they're pretty similar on the front-end.  This class
-# provides a way for them all to be as similar as possible.
-class Puppet::Provider::NameService < Puppet::Provider
-    class << self
-        def autogen_default(param)
-            if defined? @autogen_defaults
-                return @autogen_defaults[symbolize(param)]
-            else
-                return nil
-            end
-        end
-
-        def autogen_defaults(hash)
-            @autogen_defaults ||= {}
-            hash.each do |param, value|
-                @autogen_defaults[symbolize(param)] = value
-            end
-        end
-
-        def initvars
-            @checks = {}
-            super
-        end
-
-        def instances
-            objects = []
-            listbyname do |name|
-                objects << new(:name => name, :ensure => :present)
-            end
-
-            objects
-        end
-
-        def option(name, option)
-            name = name.intern if name.is_a? String
-            if defined? @options and @options.include? name and @options[name].include? option
-                return @options[name][option]
-            else
-                return nil
-            end
-        end
-
-        def options(name, hash)
-            unless resource_type.validattr?(name)
-                raise Puppet::DevError, "%s is not a valid attribute for %s" %
-                    [name, resource_type.name]
-            end
-            @options ||= {}
-            @options[name] ||= {}
-
-            # Set options individually, so we can call the options method
-            # multiple times.
-            hash.each do |param, value|
-                @options[name][param] = value
-            end
-        end
-
-        # List everything out by name.  Abstracted a bit so that it works
-        # for both users and groups.
-        def listbyname
-            names = []
-            Etc.send("set%sent" % section())
-            begin
-                while ent = Etc.send("get%sent" % section())
-                    names << ent.name
-                    if block_given?
-                        yield ent.name
-                    end
-                end
-            ensure
-                Etc.send("end%sent" % section())
-            end
-
-            return names
-        end
-
-        def resource_type=(resource_type)
-            super
-            @resource_type.validproperties.each do |prop|
-                next if prop == :ensure
-                unless public_method_defined?(prop)
-                    define_method(prop) { get(prop) || :absent}
-                end
-                unless public_method_defined?(prop.to_s + "=")
-                    define_method(prop.to_s + "=") { |*vals| set(prop, *vals) }
-                end
-            end
-        end
-
-        # This is annoying, but there really aren't that many options,
-        # and this *is* built into Ruby.
-        def section
-            unless defined? @resource_type
-                raise Puppet::DevError,
-                    "Cannot determine Etc section without a resource type"
-
-            end
-
-            if @resource_type.name == :group
-                "gr"
-            else
-                "pw"
-            end
-        end
-
-        def validate(name, value)
-            name = name.intern if name.is_a? String
-            if @checks.include? name
-                block = @checks[name][:block]
-                unless block.call(value)
-                    raise ArgumentError, "Invalid value %s: %s" %
-                        [value, @checks[name][:error]]
-                end
-            end
-        end
-
-        def verify(name, error, &block)
-            name = name.intern if name.is_a? String
-            @checks[name] = {:error => error, :block => block}
-        end
-
-        private
-
-        def op(property)
-            @ops[property.name] || ("-" + property.name)
-        end
-    end
-    
-    # Autogenerate a value.  Mostly used for uid/gid, but also used heavily
-    # with netinfo, because netinfo is stupid.
-    def autogen(field)
-        field = symbolize(field)
-        id_generators = {:user => :uid, :group => :gid}
-        if id_generators[@resource.class.name] == field
-            return autogen_id(field)
-        else
-            if value = self.class.autogen_default(field)
-                return value
-            elsif respond_to?("autogen_%s" % [field])
-                return send("autogen_%s" % field)
-            else
-                return nil
-            end
-        end
-    end
-
-    # Autogenerate either a uid or a gid.  This is hard-coded: we can only
-    # generate one field type per class.
-    def autogen_id(field)
-        highest = 0
-
-        group = method = nil
-        case @resource.class.name
-        when :user: group = :passwd; method = :uid
-        when :group: group = :group; method = :gid
-        else
-            raise Puppet::DevError, "Invalid resource name %s" % resource
-        end
-        
-        # Make sure we don't use the same value multiple times
-        if defined? @@prevauto
-            @@prevauto += 1
-        else
-            Etc.send(group) { |obj|
-                if obj.gid > highest
-                    unless obj.send(method) > 65000
-                        highest = obj.send(method)
-                    end
-                end
-            }
-
-            @@prevauto = highest + 1
-        end
-
-        return @@prevauto
-    end
-
-    def create
-       if exists?
-            info "already exists"
-            # The object already exists
-            return nil
-        end
-
-        begin
-            execute(self.addcmd)
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not create %s %s: %s" %
-                [@resource.class.name, @resource.name, detail]
-        end
-    end
-
-    def delete
-        unless exists?
-            info "already absent"
-            # the object already doesn't exist
-            return nil
-        end
-
-        begin
-            execute(self.deletecmd)
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not delete %s %s: %s" %
-                [@resource.class.name, @resource.name, detail]
-        end
-    end
-
-    def ensure
-        if exists?
-            :present
-        else
-            :absent
-        end
-    end
-
-    # Does our object exist?
-    def exists?
-        if getinfo(true)
-            return true
-        else
-            return false
-        end
-    end
-
-    # Retrieve a specific value by name.
-    def get(param)
-        if hash = getinfo(false)
-            return hash[param]
-        else
-            return nil
-        end
-    end
-
-    # Retrieve what we can about our object
-    def getinfo(refresh)
-        if @objectinfo.nil? or refresh == true
-            @etcmethod ||= ("get" + self.class.section().to_s + "nam").intern
-            begin
-                @objectinfo = Etc.send(@etcmethod, @resource[:name])
-            rescue ArgumentError => detail
-                @objectinfo = nil
-            end
-        end
-        
-        # Now convert our Etc struct into a hash.
-        if @objectinfo
-            return info2hash(@objectinfo)
-        else
-            return nil
-        end
-    end
-
-    # The list of all groups the user is a member of.  Different
-    # user mgmt systems will need to override this method.
-    def groups
-        groups = []
-
-        # Reset our group list
-        Etc.setgrent
-
-        user = @resource[:name]
-
-        # Now iterate across all of the groups, adding each one our
-        # user is a member of
-        while group = Etc.getgrent
-            members = group.mem
-
-            if members.include? user
-                groups << group.name
-            end
-        end
-
-        # We have to close the file, so each listing is a separate
-        # reading of the file.
-        Etc.endgrent
-
-        groups.join(",")
-    end
-
-    # Convert the Etc struct into a hash.
-    def info2hash(info)
-        hash = {}
-        self.class.resource_type.validproperties.each do |param|
-            method = posixmethod(param)
-            if info.respond_to? method
-                hash[param] = info.send(posixmethod(param))
-            end
-        end
-
-        return hash
-    end
-
-    def initialize(resource)
-        super
-
-        @objectinfo = nil
-    end
-
-    def set(param, value)
-        self.class.validate(param, value)
-        cmd = modifycmd(param, value)
-        unless cmd.is_a?(Array)
-            raise Puppet::DevError, "Nameservice command must be an array"
-        end
-        begin
-            execute(cmd)
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not set %s on %s[%s]: %s" % [param, @resource.class.name, @resource.name, detail]
-        end
-    end
-end
-
diff --git a/lib/puppet/provider/nameservice/directoryservice.rb b/lib/puppet/provider/nameservice/directoryservice.rb
deleted file mode 100644
index fcc44f9..0000000
--- a/lib/puppet/provider/nameservice/directoryservice.rb
+++ /dev/null
@@ -1,349 +0,0 @@
-#  Created by Jeff McCune on 2007-07-22
-#  Copyright (c) 2007. All rights reserved.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation (version 2 of the License)
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston MA  02110-1301 USA
-
-require 'puppet'
-require 'puppet/provider/nameservice'
-
-class Puppet::Provider::NameService
-class DirectoryService < Puppet::Provider::NameService
-    # JJM: Dive into the eigenclass
-    class << self
-        # JJM: This allows us to pass information when calling
-        #      Puppet::Type.type
-        #  e.g. Puppet::Type.type(:user).provide :directoryservice, :ds_path => "Users"
-        #  This is referenced in the get_ds_path class method
-        attr_writer :ds_path
-    end
-
-    # JJM 2007-07-24: Not yet sure what initvars() does.  I saw it in netinfo.rb
-    # I do know, however, that it makes methods "work"  =)
-    # e.g. addcmd isn't available if this method call isn't present.
-    #
-    # JJM: Also, where this method is defined seems to impact the visibility
-    #   of methods.  If I put initvars after commands, confine and defaultfor,
-    #   then getinfo is called from the parent class, not this class.
-    initvars()
-    
-    commands :dscl => "/usr/bin/dscl"
-    confine :operatingsystem => :darwin
-    # JJM FIXME: This will need to be the default around October 2007.
-    # defaultfor :operatingsystem => :darwin
-
-
-    # JJM 2007-07-25: This map is used to map NameService attributes to their
-    #     corresponding DirectoryService attribute names.
-    #     See: http://images.apple.com/server/docs/Open_Directory_v10.4.pdf
-    # JJM: Note, this is de-coupled from the Puppet::Type, and must
-    #     be actively maintained.  There may also be collisions with different
-    #     types (Users, Groups, Mounts, Hosts, etc...)
-    @@ds_to_ns_attribute_map = {
-        'RecordName' => :name,
-        'PrimaryGroupID' => :gid,
-        'NFSHomeDirectory' => :home,
-        'UserShell' => :shell,
-        'UniqueID' => :uid,
-        'RealName' => :comment,
-        'Password' => :password,
-    }
-    # JJM The same table as above, inverted.
-    @@ns_to_ds_attribute_map = {
-        :name => 'RecordName',
-        :gid => 'PrimaryGroupID',
-        :home => 'NFSHomeDirectory',
-        :shell => 'UserShell',
-        :uid => 'UniqueID',
-        :comment => 'RealName',
-        :password => 'Password',
-    }
-    
-    def self.instances
-        # JJM Class method that provides an array of instance objects of this
-        #     type.
-        
-        # JJM: Properties are dependent on the Puppet::Type we're managine.
-        type_property_array = [:name] + @resource_type.validproperties
-        # JJM: No sense reporting the password.  It's hashed.
-        type_property_array.delete(:password) if type_property_array.include? :password
-        
-        # Create a new instance of this Puppet::Type for each object present
-        #    on the system.
-        list_all_present.collect do |name_string|
-            self.new(single_report(name_string, *type_property_array))
-        end
-    end
-    
-    def self.get_ds_path
-        # JJM: 2007-07-24 This method dynamically returns the DS path we're concerned with.
-        #      For example, if we're working with an user type, this will be /Users
-        #      with a group type, this will be /Groups.
-        #   @ds_path is an attribute of the class itself.  
-        if defined? @ds_path
-            return @ds_path
-        else
-            # JJM: "Users" or "Groups" etc ...  (Based on the Puppet::Type)
-            #       Remember this is a class method, so self.class is Class
-            #       Also, @resource_type seems to be the reference to the
-            #       Puppet::Type this class object is providing for.
-            return @resource_type.name.to_s.capitalize + "s"
-        end
-    end
-
-    def self.list_all_present
-        # JJM: List all objects of this Puppet::Type already present on the system.
-        begin
-            dscl_output = execute(get_exec_preamble("-list"))
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not get %s list from DirectoryService" % [ @resource_type.name.to_s ]
-        end
-        return dscl_output.split("\n")
-    end
-    
-    def self.single_report(resource_name, *type_properties)
-        # JJM 2007-07-24:
-        #     Given a the name of an object and a list of properties of that
-        #     object, return all property values in a hash.
-        #     
-        #     This class method returns nil if the object doesn't exist
-        #     Otherwise, it returns a hash of the object properties.
-        
-        all_present_str_array = list_all_present()
-        
-        # JJM: Return nil if the named object isn't present.
-        return nil unless all_present_str_array.include? resource_name
-        
-        dscl_vector = get_exec_preamble("-read", resource_name)
-        begin
-            dscl_output = execute(dscl_vector)
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not get report.  command execution failed."
-        end
-        
-        # JJM: We need a new hash to return back to our caller.
-        attribute_hash = Hash.new
-        
-        # JJM: First, the output string goes into an array.
-        #      Then, the each array element is split
-        #      If you want to figure out what this is doing, I suggest
-        #      ruby-debug, and stepping through it.
-        dscl_output.split("\n").each do |line|
-            # JJM: Split the attribute name and the list of values.
-            ds_attribute, ds_values_string = line.split(':')
-
-            # Split sets the values to nil if there's nothing after the :
-            ds_values_string ||= ""
-            
-            # JJM: skip this attribute line if the Puppet::Type doesn't care about it.
-            next unless (@@ds_to_ns_attribute_map.keys.include?(ds_attribute) and type_properties.include? @@ds_to_ns_attribute_map[ds_attribute])
-
-            # JJM: We asked dscl to output url encoded values so we're able
-            #     to machine parse on whitespace.  We need to urldecode:
-            #     " Jeff%20McCune John%20Doe " => ["Jeff McCune", "John Doe"]
-            ds_value_array = ds_values_string.scan(/[^\s]+/).collect do |v|
-                url_decoded_value = CGI::unescape v
-                if url_decoded_value =~ /^[-0-9]+$/
-                    url_decoded_value.to_i
-                else                
-                    url_decoded_value
-                end
-            end
-            
-            # JJM: Finally, we're able to build up our attribute hash.
-            #    Remember, the hash is keyed by NameService attribute names,
-            #    not DirectoryService attribute names.
-            # NOTE: We're also sort of cheating here...  DirectoryService
-            #   is robust enough to allow multiple values for almost every
-            #   attribute in the system.  Traditional NameService things
-            #   really don't handle this case, so we'll always pull thet first
-            #   value returned from DirectoryService.
-            #   THERE MAY BE AN ORDERING ISSUE HERE, but I think it's ok...
-            attribute_hash[@@ds_to_ns_attribute_map[ds_attribute]] = ds_value_array[0]
-        end
-        return attribute_hash
-    end
-    
-    def self.get_exec_preamble(ds_action, resource_name = nil)
-        # JJM 2007-07-24
-        #     DSCL commands are often repetitive and contain the same positional
-        #     arguments over and over. See http://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/additionalfeatures/chapter_10_section_9.html
-        #     for an example of what I mean.
-        #     This method spits out proper DSCL commands for us.
-        #     We EXPECT name to be @resource[:name] when called from an instance object.
-
-        # There are two ways to specify paths in 10.5.  See man dscl.
-        command_vector = [ command(:dscl), "-url", "." ]
-        # JJM: The actual action to perform.  See "man dscl"
-        #      Common actiosn: -create, -delete, -merge, -append, -passwd
-        command_vector << ds_action
-        # JJM: get_ds_path will spit back "Users" or "Groups",
-        # etc...  Depending on the Puppet::Type of our self.
-        if resource_name
-            command_vector << "/%s/%s" % [ get_ds_path, resource_name ]
-        else
-            command_vector << "/%s" % [ get_ds_path ]
-        end
-        # JJM:  This returns most of the preamble of the command.
-        #       e.g. 'dscl / -create /Users/mccune'
-        return command_vector
-    end
-
-    def ensure=(ensure_value)
-        super
-        # JJM: Modeled after nameservice/netinfo.rb, we need to
-        #   loop over all valid properties for the type we're managing
-        #   and call the method which sets that property value
-        #   Like netinfo, dscl can't create everything at once, afaik.
-        if ensure_value == :present
-            @resource.class.validproperties.each do |name|
-                next if name == :ensure
-
-                # LAK: We use property.sync here rather than directly calling
-                # the settor method because the properties might do some kind
-                # of conversion.  In particular, the user gid property might
-                # have a string and need to convert it to a number
-                if @resource.should(name)
-                    @resource.property(name).sync
-                elsif value = autogen(name)
-                    self.send(name.to_s + "=", value)
-                else
-                    next
-                end
-            end
-        end 
-    end
-    
-    def password=(passphrase)
-        # JJM: Setting the password is a special case.  We don't just
-        #      set the attribute because we need to update the password
-        #      databases.
-        # FIRST, make sure the AuthenticationAuthority is ;ShadowHash;  If
-        #  we don't do this, we don't get a shadow hash account.  ("Obviously...")
-        dscl_vector = self.class.get_exec_preamble("-create", @resource[:name])
-        dscl_vector << "AuthenticationAuthority" << ";ShadowHash;"
-        begin
-            dscl_output = execute(dscl_vector)
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not set AuthenticationAuthority."
-        end        
-        
-        # JJM: Second, we need to actually set the password.  dscl does
-        #   some magic, creating the proper hash for us based on the
-        #   AuthenticationAuthority attribute, set above.
-        dscl_vector = self.class.get_exec_preamble("-passwd", @resource[:name])
-        dscl_vector << passphrase
-        # JJM: Should we not log the password string?  This may be a security
-        #      risk...
-        begin
-            dscl_output = execute(dscl_vector)
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not set password using command vector: %{dscl_vector.inspect}"
-        end
-    end
-    
-    # JJM: nameservice.rb defines methods for each attribute of the type.
-    #   We implement these methods here, by implementing get() and set()
-    #   See the resource_type= method defined in nameservice.rb
-    #   I'm not sure what the implications are of doing things this way.
-    #   It was a bit difficult to sort out what was happening in my head,
-    #   but ruby-debug makes this process much more transparent.
-    #
-    def set(property, value)
-        # JJM: As it turns out, the set method defined in our parent class
-        #   is fine.  It just calls the modifycmd() method, which
-        #   I'll implement here.
-        super
-    end
-    
-    def get(param)
-        hash = getinfo(false)
-        if hash
-            return hash[param]
-        else
-            return :absent
-        end
-    end
-    
-    def modifycmd(property, value)
-        # JJM: This method will assemble a exec vector which modifies
-        #    a single property and it's value using dscl.
-        # JJM: With /usr/bin/dscl, the -create option will destroy an
-        #      existing property record if it exists
-        exec_arg_vector = self.class.get_exec_preamble("-create", @resource[:name])
-        # JJM: The following line just maps the NS name to the DS name
-        #      e.g. { :uid => 'UniqueID' }
-        exec_arg_vector << @@ns_to_ds_attribute_map[symbolize(property)]
-        # JJM: The following line sends the actual value to set the property to
-        exec_arg_vector << value.to_s
-        return exec_arg_vector
-    end
-    
-    def addcmd
-        # JJM 2007-07-24: 
-        #    - addcmd returns an array to be executed to create a new object.
-        #    - This method is probably being called from the
-        #      ensure= method in nameservice.rb, or here...
-        #    - This should only be called if the object doesn't exist.
-        # JJM: Blame nameservice.rb for the terse method name. =)
-        #
-        self.class.get_exec_preamble("-create", @resource[:name])
-    end
-    
-    def deletecmd
-        # JJM: Like addcmd, only called when deleting the object itself
-        #    Note, this isn't used to delete properties of the object,
-        #    at least that's how I understand it...
-        self.class.get_exec_preamble("-delete", @resource[:name])
-    end
-    
-    def getinfo(refresh = false)
-        # JJM 2007-07-24: 
-        #      Override the getinfo method, which is also defined in nameservice.rb
-        #      This method returns and sets @infohash, which looks like:
-        #      (NetInfo provider, user type...)
-        #       @infohash = {:comment=>"Jeff McCune", :home=>"/Users/mccune", 
-        #       :shell=>"/bin/zsh", :password=>"********", :uid=>502, :gid=>502,
-        #       :name=>"mccune"}
-        #
-        # I'm not re-factoring the name "getinfo" because this method will be
-        # most likely called by nameservice.rb, which I didn't write.
-        if refresh or (! defined?(@property_value_cache_hash) or ! @property_value_cache_hash)
-            # JJM 2007-07-24: OK, there's a bit of magic that's about to
-            # happen... Let's see how strong my grip has become... =)
-            # 
-            # self is a provider instance of some Puppet::Type, like
-            # Puppet::Type::User::ProviderDirectoryservice for the case of the
-            # user type and this provider.
-            # 
-            # self.class looks like "user provider directoryservice", if that
-            # helps you ...
-            # 
-            # self.class.resource_type is a reference to the Puppet::Type class,
-            # probably Puppet::Type::User or Puppet::Type::Group, etc...
-            # 
-            # self.class.resource_type.validproperties is a class method,
-            # returning an Array of the valid properties of that specific
-            # Puppet::Type.
-            # 
-            # So... something like [:comment, :home, :password, :shell, :uid,
-            # :groups, :ensure, :gid]
-            # 
-            # Ultimately, we add :name to the list, delete :ensure from the
-            # list, then report on the remaining list. Pretty whacky, ehh?
-            type_properties = [:name] + self.class.resource_type.validproperties
-            type_properties.delete(:ensure) if type_properties.include? :ensure
-            @property_value_cache_hash = self.class.single_report(@resource[:name], *type_properties)
-        end
-        return @property_value_cache_hash
-    end
-end
-end
diff --git a/lib/puppet/provider/nameservice/netinfo.rb b/lib/puppet/provider/nameservice/netinfo.rb
deleted file mode 100644
index ac7bc94..0000000
--- a/lib/puppet/provider/nameservice/netinfo.rb
+++ /dev/null
@@ -1,219 +0,0 @@
-# Manage NetInfo POSIX objects.  Probably only used on OS X, but I suppose
-# it could be used elsewhere.
-
-require 'puppet'
-require 'puppet/provider/nameservice'
-
-class Puppet::Provider::NameService
-class NetInfo < Puppet::Provider::NameService
-    class << self
-        attr_writer :netinfodir
-    end
-
-    # We have to initialize manually because we're not using
-    # classgen() here.
-    initvars()
-
-    commands :lookupd => "/usr/sbin/lookupd"
-
-    # Attempt to flush the database, but this doesn't seem to work at all.
-    def self.flush
-        begin
-            lookupd "-flushcache"
-        rescue Puppet::ExecutionFailure
-            # Don't throw an error; it's just a failed cache flush
-            Puppet.err "Could not flush lookupd cache: %s" % output
-        end
-    end
-
-    # Similar to posixmethod, what key do we use to get data?  Defaults
-    # to being the object name.
-    def self.netinfodir
-        if defined? @netinfodir
-            return @netinfodir
-        else
-            return @resource_type.name.to_s + "s"
-        end
-    end
-
-    def self.finish
-        case self.name
-        when :uid:
-            noautogen
-        when :gid:
-            noautogen
-        end
-    end
-    
-    def self.instances
-        report(@resource_type.validproperties).collect do |hash|
-            self.new(hash)
-        end
-    end
-    
-    # Convert a NetInfo line into a hash of data.
-    def self.line2hash(line, params)
-        values = line.split(/\t/)
-
-        hash = {}
-        params.zip(values).each do |param, value|
-            next if value == '#NoValue#'
-            hash[param] = if value =~ /^[-0-9]+$/
-                Integer(value)
-            else
-                value
-            end
-        end
-        hash
-    end
-    
-    # What field the value is stored under.
-    def self.netinfokey(name)
-        name = symbolize(name)
-        self.option(name, :key) || name
-    end
-    
-    # Retrieve the data, yo.
-    # FIXME This should retrieve as much information as possible,
-    # rather than retrieving it one at a time.
-    def self.report(*params)
-        dir = self.netinfodir()
-        cmd = [command(:nireport), "/", "/%s" % dir]
-        
-        params.flatten!
-
-        # We require the name in order to know if we match.  There's no
-        # way to just report on our individual object, we have to get the
-        # whole list.
-        params.unshift :name unless params.include? :name
-
-        params.each do |param|
-            if key = netinfokey(param)
-                cmd << key.to_s
-            else
-                raise Puppet::DevError,
-                    "Could not find netinfokey for property %s" %
-                    self.class.name
-            end
-        end
-
-        begin
-            output = execute(cmd)
-        rescue Puppet::ExecutionFailure => detail
-            Puppet.err "Failed to call nireport: %s" % detail
-            return nil
-        end
-
-        return output.split("\n").collect { |line|
-            line2hash(line, params)
-        }
-    end
-    
-    # How to add an object.
-    def addcmd
-        creatorcmd("-create")
-    end
-
-    def creatorcmd(arg)
-        cmd = [command(:niutil)]
-        cmd << arg
-
-        cmd << "/" << "/%s/%s" % [self.class.netinfodir(), @resource[:name]]
-        return cmd
-    end
-
-    def deletecmd
-        creatorcmd("-destroy")
-    end
-    
-    def destroy
-        delete()
-    end
-
-    def ensure=(arg)
-        super
-
-        # Because our stupid type can't create the whole thing at once,
-        # we have to do this hackishness.  Yay.
-        if arg == :present
-            @resource.class.validproperties.each do |name|
-                next if name == :ensure
-
-                # LAK: We use property.sync here rather than directly calling
-                # the settor method because the properties might do some kind
-                # of conversion.  In particular, the user gid property might
-                # have a string and need to convert it to a number
-                if @resource.should(name)
-                    @resource.property(name).sync
-                elsif value = autogen(name)
-                    self.send(name.to_s + "=", value)
-                else
-                    next
-                end
-            end
-        end
-    end
-
-    # Retrieve a specific value by name.
-    def get(param)
-        hash = getinfo(false)
-        if hash
-            return hash[param]
-        else
-            return :absent
-        end
-    end
-
-    # Retrieve everything about this object at once, instead of separately.
-    def getinfo(refresh = false)
-        if refresh or (! defined? @infohash or ! @infohash)
-            properties = [:name] + self.class.resource_type.validproperties
-            properties.delete(:ensure) if properties.include? :ensure
-            @infohash = single_report(*properties)
-        end
-
-        return @infohash
-    end
-
-    def modifycmd(param, value)
-        cmd = [command(:niutil)]
-        # if value.is_a?(Array)
-        #     warning "Netinfo providers cannot currently handle multiple values"
-        # end
-
-        cmd << "-createprop" << "/" << "/%s/%s" % [self.class.netinfodir, @resource[:name]]
-
-        value = [value] unless value.is_a?(Array)
-        if key = netinfokey(param)
-            cmd << key
-            cmd += value
-        else
-            raise Puppet::DevError,
-                "Could not find netinfokey for property %s" %
-                self.class.name
-        end
-        cmd
-    end
-
-    # Determine the flag to pass to our command.
-    def netinfokey(name)
-        self.class.netinfokey(name)
-    end
-    
-    # Get a report for a single resource, not the whole table
-    def single_report(*properties)
-        self.class.report(*properties).find do |hash| hash[:name] == self.name end
-    end
-
-    def setuserlist(group, list)
-        cmd = [command(:niutil), "-createprop", "/", "/groups/%s" % group, "users", list.join(",")]
-        begin
-            output = execute(cmd)
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Failed to set user list on %s: %s" %
-                [group, detail]
-        end
-    end
-end
-end
-
diff --git a/lib/puppet/provider/nameservice/objectadd.rb b/lib/puppet/provider/nameservice/objectadd.rb
deleted file mode 100644
index 256368e..0000000
--- a/lib/puppet/provider/nameservice/objectadd.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require 'puppet/provider/nameservice'
-
-class Puppet::Provider::NameService
-class ObjectAdd < Puppet::Provider::NameService
-    def deletecmd
-        [command(:delete), @resource[:name]]
-    end
-
-    # Determine the flag to pass to our command.
-    def flag(name)
-        name = name.intern if name.is_a? String
-        self.class.option(name, :flag) || "-" + name.to_s[0,1]
-    end
-
-    def modifycmd(param, value)
-        cmd = [command(:modify), flag(param), value]
-        if @resource.allowdupe? && ((param == :uid) || (param == :gid and self.class.name == :groupadd))
-            cmd << "-o"
-        end
-        cmd << @resource[:name]
-
-        return cmd
-    end
-
-    def posixmethod(name)
-        name = name.intern if name.is_a? String
-        method = self.class.option(name, :method) || name
-
-        return method
-    end
-end
-end
diff --git a/lib/puppet/provider/nameservice/pw.rb b/lib/puppet/provider/nameservice/pw.rb
deleted file mode 100644
index 4e81346..0000000
--- a/lib/puppet/provider/nameservice/pw.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'puppet/provider/nameservice/objectadd'
-
-class Puppet::Provider::NameService
-class PW < ObjectAdd
-    def deletecmd
-        [command(:pw), "#{@resource.class.name.to_s}del", @resource[:name]]
-    end
-
-    def modifycmd(param, value)
-        cmd = [
-            command(:pw),
-            "#{@resource.class.name.to_s}mod",
-            @resource[:name],
-            flag(param),
-            value
-        ]
-        return cmd
-    end
-end
-end
-
diff --git a/lib/puppet/provider/package.rb b/lib/puppet/provider/package.rb
deleted file mode 100644
index f7ff7e5..0000000
--- a/lib/puppet/provider/package.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-#  Created by Luke A. Kanies on 2007-06-05.
-#  Copyright (c) 2007. All rights reserved.
-
-class Puppet::Provider::Package < Puppet::Provider
-    # Prefetch our package list, yo.
-    def self.prefetch(packages)
-        instances.each do |prov|
-            if pkg = packages[prov.name]
-                pkg.provider = prov
-            end
-        end
-    end
-
-    # Clear out the cached values.
-    def flush
-        @property_hash.clear
-    end
-
-    # Look up the current status.
-    def properties
-        if @property_hash.empty?
-            @property_hash = query || {:ensure => :absent}
-            if @property_hash.empty?
-                @property_hash[:ensure] = :absent
-            end
-        end
-        @property_hash.dup
-    end
-end
diff --git a/lib/puppet/provider/package/appdmg.rb b/lib/puppet/provider/package/appdmg.rb
deleted file mode 100644
index 2ee82a9..0000000
--- a/lib/puppet/provider/package/appdmg.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-# Jeff McCune <mccune.jeff at gmail.com>
-# Changed to app.dmg by: Udo Waechter <root at zoide.net>
-# Mac OS X Package Installer which handles application (.app)
-# bundles inside an Apple Disk Image.
-#
-# Motivation: DMG files provide a true HFS file system
-# and are easier to manage.
-#
-# Note: the 'apple' Provider checks for the package name
-# in /L/Receipts.  Since we possibly install multiple apps's from 
-# a single source, we treat the source .app.dmg file as the package name.
-# As a result, we store installed .app.dmg file names
-# in /var/db/.puppet_appdmg_installed_<name>
-
-# require 'ruby-debug'
-# Debugger.start
-
-require 'puppet/provider/package'
-Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Package) do
-    desc "Package management which copies application bundles to a target."
-
-    confine :exists => "/Library/Receipts"
-    commands :hdiutil => "/usr/bin/hdiutil"
-    commands :curl => "/usr/bin/curl"
-    commands :ditto => "/usr/bin/ditto"
-	
-    # JJM We store a cookie for each installed .app.dmg in /var/db
-    def self.instances_by_name
-        Dir.entries("/var/db").find_all { |f|
-            f =~ /^\.puppet_appdmg_installed_/
-        }.collect do |f|
-            name = f.sub(/^\.puppet_appdmg_installed_/, '')
-            yield name if block_given?
-            name
-        end
-    end
-
-    def self.instances
-        instances_by_name.collect do |name|
-            new(:name => name, :provider => :appdmg, :ensure => :installed)
-        end
-    end
-    
-    def self.installapp(source, name, orig_source)
-      appname = File.basename(source);
-	  ditto "--rsrc", source, "/Applications/#{appname}"
-      File.open("/var/db/.puppet_appdmg_installed_#{name}", "w") do |t|
-          t.print "name: '#{name}'\n"
-          t.print "source: '#{orig_source}'\n"
-      end
-    end
-
-    def self.installpkgdmg(source, name)
-        unless source =~ /\.dmg$/i
-            self.fail "Mac OS X PKG DMG's must specificy a source string ending in .dmg"
-        end
-        require 'open-uri'
-        require 'facter/util/plist'
-        cached_source = source
-        if %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ cached_source
-            cached_source = "/tmp/#{name}"
-            begin
-                curl "-o", cached_source, "-C", "-", "-k", "-s", "--url", source
-                Puppet.debug "Success: curl transfered [#{name}]"
-            rescue Puppet::ExecutionFailure
-                Puppet.debug "curl did not transfer [#{name}].  Falling back to slower open-uri transfer methods."
-                cached_source = source
-            end
-        end
-        
-        begin
-            open(cached_source) do |dmg|
-                xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", dmg.path
-                    ptable = Plist::parse_xml xml_str
-                    # JJM Filter out all mount-paths into a single array, discard the rest.
-                    mounts = ptable['system-entities'].collect { |entity|
-                        entity['mount-point']
-                    }.select { |mountloc|; mountloc }
-                    begin
-                        mounts.each do |fspath|
-                            Dir.entries(fspath).select { |f|
-                                f =~ /\.app$/i
-                                }.each do |pkg|
-					    			installapp("#{fspath}/#{pkg}", name, source)
-				 			   end
-                        end # mounts.each do
-                    ensure
-                        hdiutil "eject", mounts[0]
-                    end # begin
-            end # open() do
-        ensure
-            # JJM Remove the file if open-uri didn't already do so.
-            File.unlink(cached_source) if File.exist?(cached_source)
-        end # begin
-    end # def self.installpkgdmg
-
-    def query
-        if FileTest.exists?("/var/db/.puppet_appdmg_installed_#{@resource[:name]}")
-            return {:name => @resource[:name], :ensure => :present}
-        else
-            return nil
-        end
-    end
-
-    def install
-        source = nil
-        unless source = @resource[:source]
-            self.fail "Mac OS X PKG DMG's must specify a package source."
-        end
-        unless name = @resource[:name]
-            self.fail "Mac OS X PKG DMG's must specify a package name."
-        end
-        self.class.installpkgdmg(source,name)
-    end
-end
-
diff --git a/lib/puppet/provider/package/apple.rb b/lib/puppet/provider/package/apple.rb
deleted file mode 100755
index b211b7e..0000000
--- a/lib/puppet/provider/package/apple.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require 'puppet/provider/package'
-
-# OS X Packaging sucks.  We can install packages, but that's about it.
-Puppet::Type.type(:package).provide :apple, :parent => Puppet::Provider::Package do
-    desc "Package management based on OS X's builtin packaging system.  This is
-        essentially the simplest and least functional package system in existence --
-        it only supports installation; no deletion or upgrades.  The provider will
-        automatically add the ``.pkg`` extension, so leave that off when specifying
-        the package name."
-
-    confine :exists => "/Library/Receipts"
-    commands :installer => "/usr/sbin/installer"
-
-    defaultfor :operatingsystem => :darwin
-
-    def self.instances
-        instance_by_name.collect do |name|
-            self.new(
-                :name => name,
-                :provider => :apple,
-                :ensure => :installed
-            )
-        end
-    end
-
-    def self.instance_by_name
-        Dir.entries("/Library/Receipts").find_all { |f|
-            f =~ /\.pkg$/
-        }.collect { |f|
-            name = f.sub(/\.pkg/, '')
-            yield name if block_given?
-
-            name
-        }
-    end
-
-    def query
-        if FileTest.exists?("/Library/Receipts/#{@resource[:name]}.pkg")
-            return {:name => @resource[:name], :ensure => :present}
-        else
-            return nil
-        end
-    end
-
-    def install
-        source = nil
-        unless source = @resource[:source]
-            self.fail "Mac OS X packages must specify a package source"
-        end
-
-        installer "-pkg", source, "-target", "/"
-    end
-end
-
diff --git a/lib/puppet/provider/package/apt.rb b/lib/puppet/provider/package/apt.rb
deleted file mode 100755
index 8046512..0000000
--- a/lib/puppet/provider/package/apt.rb
+++ /dev/null
@@ -1,111 +0,0 @@
-Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
-    # Provide sorting functionality
-    include Puppet::Util::Package
-
-    desc "Package management via ``apt-get``."
-
-    has_feature :versionable
-
-    commands :aptget => "/usr/bin/apt-get"
-    commands :aptcache => "/usr/bin/apt-cache"
-    commands :preseed => "/usr/bin/debconf-set-selections"
-
-    defaultfor :operatingsystem => [:debian, :ubuntu]
-
-    ENV['DEBIAN_FRONTEND'] = "noninteractive"
-
-    # A derivative of DPKG; this is how most people actually manage
-    # Debian boxes, and the only thing that differs is that it can
-    # install packages from remote sites.
-
-    def checkforcdrom
-        unless defined? @@checkedforcdrom
-            if FileTest.exists? "/etc/apt/sources.list"
-                if File.read("/etc/apt/sources.list") =~ /^[^#]*cdrom:/
-                    @@checkedforcdrom = true
-                else
-                    @@checkedforcdrom = false
-                end
-            else
-                # This is basically a pathalogical case, but we'll just
-                # ignore it
-                @@checkedforcdrom = false
-            end
-        end
-
-        if @@checkedforcdrom and @resource[:allowcdrom] != :true
-            raise Puppet::Error,
-                "/etc/apt/sources.list contains a cdrom source; not installing.  Use 'allowcdrom' to override this failure."
-        end
-    end
-
-    # Install a package using 'apt-get'.  This function needs to support
-    # installing a specific version.
-    def install
-        if @resource[:responsefile]
-            self.run_preseed
-        end
-        should = @resource[:ensure]
-
-        checkforcdrom()
-        cmd = %w{-q -y}
-
-        keep = ""
-        if config = @resource[:configfiles]
-            if config == :keep
-                cmd << "-o" << 'DPkg::Options::=--force-confold'
-            else
-                cmd << "-o" << 'DPkg::Options::=--force-confnew'
-            end
-        end
-
-        str = @resource[:name]
-        case should
-        when true, false, Symbol
-            # pass
-        else
-            # Add the package version
-            str += "=%s" % should
-        end
-
-        cmd << :install << str
-        
-        aptget(*cmd)
-    end
-
-    # What's the latest package version available?
-    def latest
-        output = aptcache :policy,  @resource[:name]
-
-        if output =~ /Candidate:\s+(\S+)\s/
-            return $1
-        else
-            self.err "Could not find latest version"
-            return nil
-        end
-    end
-
-	#
-	# preseeds answers to dpkg-set-selection from the "responsefile"
-	#
-    def run_preseed
-        if response = @resource[:responsefile] and FileTest.exist?(response)
-            self.info("Preseeding %s to debconf-set-selections" % response)
-
-            preseed response
-        else 
-            self.info "No responsefile specified or non existant, not preseeding anything"
-        end
-    end
-
-    def uninstall
-        aptget "-y", "-q", :remove, @resource[:name]
-    end
-
-    def purge
-        aptget '-y', '-q', :remove, '--purge', @resource[:name]
-        # workaround a "bug" in apt, that already removed packages are not purged
-        super
-    end
-end
-
diff --git a/lib/puppet/provider/package/aptitude.rb b/lib/puppet/provider/package/aptitude.rb
deleted file mode 100755
index 699df0e..0000000
--- a/lib/puppet/provider/package/aptitude.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-Puppet::Type.type(:package).provide :aptitude, :parent => :apt, :source => :dpkg do
-    desc "Package management via ``aptitude``."
-
-    has_feature :versionable
-
-    commands :aptitude => "/usr/bin/aptitude"
-    commands :aptcache => "/usr/bin/apt-cache"
-
-    ENV['DEBIAN_FRONTEND'] = "noninteractive"
-
-    def aptget(*args)
-        args.flatten!
-        # Apparently aptitude hasn't always supported a -q flag.
-        if args.include?("-q")
-            args.delete("-q")
-        end
-        output = aptitude(*args)
-
-        # Yay, stupid aptitude doesn't throw an error when the package is missing.
-        if args.include?(:install) and output =~ /Couldn't find any package/
-            raise Puppet::Error.new(
-                "Could not find package %s" % self.name
-            )
-        end
-    end
-
-    def purge
-        aptitude '-y', 'purge', @resource[:name]
-	end
-end
-
diff --git a/lib/puppet/provider/package/aptrpm.rb b/lib/puppet/provider/package/aptrpm.rb
deleted file mode 100644
index 9b3e7f0..0000000
--- a/lib/puppet/provider/package/aptrpm.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-Puppet::Type.type(:package).provide :aptrpm, :parent => :rpm, :source => :rpm do
-    # Provide sorting functionality
-    include Puppet::Util::Package
-
-    desc "Package management via ``apt-get`` ported to ``rpm``."
-
-    has_feature :versionable
-
-    commands :aptget => "apt-get"
-    commands :aptcache => "apt-cache"
-    commands :rpm => "rpm"
-
-    if command('rpm')
-        confine :true => begin
-                rpm('-ql', 'rpm')
-           rescue Puppet::ExecutionFailure
-               false
-           else
-               true
-           end
-    end
-
-    # Install a package using 'apt-get'.  This function needs to support
-    # installing a specific version.
-    def install
-        should = @resource.should(:ensure)
-
-        str = @resource[:name]
-        case should
-        when true, false, Symbol
-            # pass
-        else
-            # Add the package version
-            str += "=%s" % should
-        end
-        cmd = %w{-q -y}
-
-        cmd << 'install' << str
-        
-        aptget(*cmd)
-    end
-
-    # What's the latest package version available?
-    def latest
-        output = aptcache :showpkg,  @resource[:name]
-
-        if output =~ /Versions:\s*\n((\n|.)+)^$/
-            versions = $1
-            available_versions = versions.split(/\n/).collect { |version|
-                if version =~ /^([^\(]+)\(/
-                    $1
-                else
-                    self.warning "Could not match version '%s'" % version
-                    nil
-                end
-            }.reject { |vers| vers.nil? }.sort { |a,b|
-                versioncmp(a,b)
-            }
-
-            if available_versions.length == 0
-                self.debug "No latest version"
-                if Puppet[:debug]
-                    print output
-                end
-            end
-
-            # Get the latest and greatest version number
-            return available_versions.pop
-        else
-            self.err "Could not match string"
-        end
-    end
-
-    def update
-        self.install
-    end
-
-    def uninstall
-        aptget "-y", "-q", 'remove', @resource[:name]
-    end
-
-    def purge
-        aptget '-y', '-q', 'remove', '--purge', @resource[:name]
-    end
-end
-
diff --git a/lib/puppet/provider/package/blastwave.rb b/lib/puppet/provider/package/blastwave.rb
deleted file mode 100755
index a2f86aa..0000000
--- a/lib/puppet/provider/package/blastwave.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-# Packaging using Blastwave's pkg-get program.
-Puppet::Type.type(:package).provide :blastwave, :parent => :sun, :source => :sun do
-    desc "Package management using Blastwave.org's ``pkg-get`` command on Solaris."
-    pkgget = "pkg-get"
-    if FileTest.executable?("/opt/csw/bin/pkg-get")
-        pkgget = "/opt/csw/bin/pkg-get"
-    end
-
-    confine :operatingsystem => :solaris
-
-    commands :pkgget => pkgget
-
-    # This is so stupid, but then, so is blastwave.
-    ENV["PAGER"] = "/usr/bin/cat"
-
-    def self.extended(mod)
-        unless command(:pkgget) != "pkg-get"
-            raise Puppet::Error,
-                "The pkg-get command is missing; blastwave packaging unavailable"
-        end
-
-        unless FileTest.exists?("/var/pkg-get/admin")
-            Puppet.notice "It is highly recommended you create '/var/pkg-get/admin'."
-            Puppet.notice "See /var/pkg-get/admin-fullauto"
-        end
-    end
-
-    def self.instances(hash = {})
-        blastlist(hash).collect do |bhash|
-            bhash.delete(:avail)
-            new(bhash)
-        end
-    end
-
-    # Turn our blastwave listing into a bunch of hashes.
-    def self.blastlist(hash)
-        command = ["-c"]
-
-        if hash[:justme]
-            command << hash[:justme]
-        end
-
-        output = pkgget command
-
-        list = output.split("\n").collect do |line|
-            next if line =~ /^#/
-            next if line =~ /^WARNING/
-            next if line =~ /localrev\s+remoterev/
-
-            blastsplit(line)
-        end.reject { |h| h.nil? }
-
-        if hash[:justme]
-            return list[0]
-        else
-            list.reject! { |h|
-                h[:ensure] == :absent
-            }
-            return list
-        end
-
-    end
-
-    # Split the different lines into hashes.
-    def self.blastsplit(line)
-        if line =~ /\s*(\S+)\s+((\[Not installed\])|(\S+))\s+(\S+)/
-            hash = {}
-            hash[:name] = $1
-            hash[:ensure] = if $2 == "[Not installed]"
-                :absent
-            else
-                $2
-            end
-            hash[:avail] = $5
-
-            if hash[:avail] == "SAME"
-                hash[:avail] = hash[:ensure]
-            end
-
-            # Use the name method, so it works with subclasses.
-            hash[:provider] = self.name
-
-            return hash
-        else
-            Puppet.warning "Cannot match %s" % line
-            return nil
-        end
-    end
-
-    def install
-        pkgget "-f", :install, @resource[:name]
-    end
-
-    # Retrieve the version from the current package file.
-    def latest
-        hash = self.class.blastlist(:justme => @resource[:name])
-        hash[:avail]
-    end
-
-    def query
-        if hash = self.class.blastlist(:justme => @resource[:name])
-            hash
-        else
-            {:ensure => :absent}
-        end
-    end
-
-    # Remove the old package, and install the new one
-    def update
-        pkgget "-f", :upgrade, @resource[:name]
-    end
-
-    def uninstall
-        pkgget "-f", :remove, @resource[:name]
-    end
-end
-
diff --git a/lib/puppet/provider/package/darwinport.rb b/lib/puppet/provider/package/darwinport.rb
deleted file mode 100755
index 73d5f39..0000000
--- a/lib/puppet/provider/package/darwinport.rb
+++ /dev/null
@@ -1,88 +0,0 @@
-require 'puppet/provider/package'
-
-Puppet::Type.type(:package).provide :darwinport, :parent => Puppet::Provider::Package do
-    desc "Package management using DarwinPorts on OS X."
-
-    commands :port => "/opt/local/bin/port"
-    confine :operatingsystem => "Darwin"
-
-    def self.eachpkgashash
-        # list out all of the packages
-        open("| #{command(:port)} list installed") { |process|
-            regex = %r{(\S+)\s+@(\S+)\s+(\S+)}
-            fields = [:name, :ensure, :location]
-            hash = {}
-
-            # now turn each returned line into a package object
-            process.each { |line|
-                hash.clear
-
-                if match = regex.match(line)
-                    fields.zip(match.captures) { |field,value|
-                        hash[field] = value
-                    }
-
-                    hash.delete :location
-                    hash[:provider] = self.name
-                    yield hash.dup
-                else
-                    raise Puppet::DevError,
-                        "Failed to match dpkg line %s" % line
-                end
-            }
-        }
-    end
-
-    def self.instances
-        packages = []
-
-        eachpkgashash do |hash|
-            packages << new(hash)
-        end
-
-        return packages
-    end
-
-    def install
-        should = @resource.should(:ensure)
-
-        # Seems like you can always say 'upgrade'
-        output = port "upgrade", @resource[:name]
-        if output =~ /^Error: No port/
-            raise Puppet::ExecutionFailure, "Could not find package %s" % @resource[:name]
-        end
-    end
-
-    def query
-        version = nil
-        self.class.eachpkgashash do |hash|
-            if hash[:name] == @resource[:name]
-                return hash
-            end
-        end
-
-        return nil
-    end
-
-    def latest
-        info = port :search, "^#{@resource[:name]}$"
-
-        if $? != 0 or info =~ /^Error/
-            return nil
-        end
-
-        ary = info.split(/\s+/)
-        version = ary[2].sub(/^@/, '')
-
-        return version
-    end
-
-    def uninstall
-        port :uninstall, @resource[:name]
-    end
-
-    def update
-        return install()
-    end
-end
-
diff --git a/lib/puppet/provider/package/dpkg.rb b/lib/puppet/provider/package/dpkg.rb
deleted file mode 100755
index 67d31a5..0000000
--- a/lib/puppet/provider/package/dpkg.rb
+++ /dev/null
@@ -1,130 +0,0 @@
-require 'puppet/provider/package'
-
-Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package do
-    desc "Package management via ``dpkg``.  Because this only uses ``dpkg``
-        and not ``apt``, you must specify the source of any packages you want
-        to manage."
-
-    commands :dpkg => "/usr/bin/dpkg"
-    commands :dpkg_deb => "/usr/bin/dpkg-deb"
-    commands :dpkgquery => "/usr/bin/dpkg-query"
-    
-    def self.instances
-        packages = []
-
-        # list out all of the packages
-        cmd = "#{command(:dpkgquery)} -W --showformat '${Status} ${Package} ${Version}\\n'"
-        Puppet.debug "Executing '%s'" % cmd
-        execpipe(cmd) do |process|
-            # our regex for matching dpkg output
-            regex = %r{^(\S+) +(\S+) +(\S+) (\S+) (\S*)$}
-            fields = [:desired, :error, :status, :name, :ensure]
-            hash = {}
-
-            # now turn each returned line into a package object
-            process.each { |line|
-                if hash = parse_line(line)
-                    packages << new(hash)
-                end
-            }
-        end
-
-        return packages
-    end
-
-    REGEX = %r{^(\S+) +(\S+) +(\S+) (\S+) (\S*)$}
-    FIELDS = [:desired, :error, :status, :name, :ensure]
-
-    def self.parse_line(line)
-        if match = REGEX.match(line)
-            hash = {}
-
-            FIELDS.zip(match.captures) { |field,value|
-                hash[field] = value
-            }
-
-            hash[:provider] = self.name
-
-            if hash[:status] == 'not-installed'
-                hash[:ensure] = :purged
-            elsif hash[:status] != "installed"
-                hash[:ensure] = :absent
-            end
-        else
-            Puppet.warning "Failed to match dpkg-query line %s" % line.inspect
-            return nil
-        end
-
-        return hash
-    end
-
-    def install
-        unless file = @resource[:source]
-            raise ArgumentError, "You cannot install dpkg packages without a source"
-        end
-        
-        args = []
-
-        if @resource[:configfiles] == :keep
-            args << '--force-confold'
-        else
-            args << '--force-confnew'
-        end
-        args << '-i' << file
-
-        dpkg(*args)
-    end
-
-    def update
-        self.install
-    end
-
-    # Return the version from the package.
-    def latest
-        output = dpkg_deb "--show", @resource[:source]
-        matches = /^(\S+)\t(\S+)$/.match(output).captures
-        unless matches[0].match(@resource[:name])
-            warning "source doesn't contain named package, but %s" % matches[0]
-        end
-        matches[1]
-    end
-
-    def query
-        packages = []
-
-        fields = [:desired, :error, :status, :name, :ensure]
-
-        hash = {}
-
-        # list out our specific package
-        begin
-            output = dpkgquery("-W", "--showformat",
-                '${Status} ${Package} ${Version}\\n', @resource[:name]
-            )
-        rescue Puppet::ExecutionFailure
-            # dpkg-query exits 1 if the package is not found.
-            return {:ensure => :purged, :status => 'missing',
-                :name => @resource[:name], :error => 'ok'}
-
-        end
-
-        hash = self.class.parse_line(output) || {:ensure => :absent, :status => 'missing', :name => @resource[:name], :error => 'ok'}
-
-        if hash[:error] != "ok"
-            raise Puppet::Error.new(
-                "Package %s, version %s is in error state: %s" %
-                    [hash[:name], hash[:ensure], hash[:error]]
-            )
-        end
-
-        return hash
-    end
-
-    def uninstall
-        dpkg "-r", @resource[:name]
-    end
-
-    def purge
-        dpkg "--purge", @resource[:name]
-    end
-end
diff --git a/lib/puppet/provider/package/fink.rb b/lib/puppet/provider/package/fink.rb
deleted file mode 100755
index 4d56066..0000000
--- a/lib/puppet/provider/package/fink.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-Puppet::Type.type(:package).provide :fink, :parent => :dpkg, :source => :dpkg do
-    # Provide sorting functionality
-    include Puppet::Util::Package
-
-    desc "Package management via ``fink``."
-    
-    commands :fink => "/sw/bin/fink"
-    commands :aptget => "/sw/bin/apt-get"
-    commands :aptcache => "/sw/bin/apt-cache"
-    commands :dpkgquery => "/sw/bin/dpkg-query"
-
-    has_feature :versionable
-
-    # A derivative of DPKG; this is how most people actually manage
-    # Debian boxes, and the only thing that differs is that it can
-    # install packages from remote sites.
-
-    def finkcmd(*args)
-        fink(*args)
-    end
-
-    # Install a package using 'apt-get'.  This function needs to support
-    # installing a specific version.
-    def install
-        if @resource[:responsefile]
-            self.run_preseed
-        end
-        should = @resource.should(:ensure)
-
-        str = @resource[:name]
-        case should
-        when true, false, Symbol
-            # pass
-        else
-            # Add the package version
-            str += "=%s" % should
-        end
-        cmd = %w{-b -q -y}
-
-        keep = ""
-
-        cmd << :install << str
-        
-        finkcmd(cmd)
-    end
-
-    # What's the latest package version available?
-    def latest
-        output = aptcache :policy,  @resource[:name]
-
-        if output =~ /Candidate:\s+(\S+)\s/
-            return $1
-                else
-            self.err "Could not find latest version"
-            return nil
-                end
-                end
-
-	#
-	# preseeds answers to dpkg-set-selection from the "responsefile"
-	#
-    def run_preseed
-        if response = @resource[:responsefile] and FileTest.exists?(response)
-            self.info("Preseeding %s to debconf-set-selections" % response)
-
-            preseed response
-        else 
-            self.info "No responsefile specified or non existant, not preseeding anything"
-        end
-    end
-
-    def update
-        self.install
-    end
-
-    def uninstall
-        finkcmd "-y", "-q", :remove, @model[:name]
-    end
-
-    def purge
-        aptget '-y', '-q', 'remove', '--purge', @resource[:name]
-     end
-end
-
diff --git a/lib/puppet/provider/package/freebsd.rb b/lib/puppet/provider/package/freebsd.rb
deleted file mode 100755
index 18df015..0000000
--- a/lib/puppet/provider/package/freebsd.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
-    desc "The specific form of package management on FreeBSD.  This is an
-        extremely quirky packaging system, in that it freely mixes between
-        ports and packages.  Apparently all of the tools are written in Ruby,
-        so there are plans to rewrite this support to directly use those
-        libraries."
-
-    commands :pkginfo => "/usr/sbin/pkg_info",
-             :pkgadd => "/usr/sbin/pkg_add",
-             :pkgdelete => "/usr/sbin/pkg_delete"
-    
-    confine :operatingsystem => :freebsd
-
-    def self.listcmd
-        command(:pkginfo)
-    end
-
-    def install
-        should = @resource.should(:ensure)
-
-        if @resource[:source] =~ /\/$/
-            if @resource[:source] =~ /^(ftp|https?):/
-                withenv :PACKAGESITE => @resource[:source] do
-                    pkgadd "-r", @resource[:name]
-                end
-            else
-                withenv :PKG_PATH => @resource[:source] do
-                    pkgadd @resource[:name]
-                end
-            end
-        else
-            if @resource[:source]
-                Puppet.warning "source is defined but does not have trailing slash, ignoring %s" % @resource[:source]
-            end
-            pkgadd "-r", @resource[:name]
-        end
-    end
-
-    def query
-        self.class.instances.each do |provider|
-            if provider.name == @resource.name
-                return provider.properties
-            end
-        end
-        return nil
-    end
-
-    def uninstall
-        pkgdelete "%s-%s" % [@resource[:name], @resource.should(:ensure)]
-    end
-end
-
diff --git a/lib/puppet/provider/package/gem.rb b/lib/puppet/provider/package/gem.rb
deleted file mode 100755
index 133243c..0000000
--- a/lib/puppet/provider/package/gem.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-require 'puppet/provider/package'
-require 'uri'
-
-# Ruby gems support.
-Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package do
-    desc "Ruby Gem support.  If a URL is passed via ``source``, then that URL is used as the
-         remote gem repository; if a source is present but is not a valid URL, it will be
-         interpreted as the path to a local gem file.  If source is not present at all,
-         the gem will be installed from the default gem repositories."
-
-    has_feature :versionable
-
-    commands :gemcmd => "gem"
-
-    def self.gemlist(hash)
-        command = [command(:gemcmd), "list"]
-
-        if hash[:local]
-            command << "--local"
-        else
-            command << "--remote"
-        end
-
-        if name = hash[:justme]
-            command << name
-        end
-
-        begin
-            list = execute(command).split("\n").collect do |set|
-                if gemhash = gemsplit(set)
-                    gemhash[:provider] = :gem
-                    gemhash
-                else
-                    nil
-                end
-            end.compact
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not list gems: %s" % detail
-        end
-
-        if hash[:justme]
-            return list.shift
-        else
-            return list
-        end
-    end
-
-    def self.gemsplit(desc)
-        case desc
-        when /^\*\*\*/, /^\s*$/, /^\s+/; return nil
-        when /^(\S+)\s+\((.+)\)/
-            name = $1
-            version = $2.split(/,\s*/)[0]
-            return {
-                :name => name,
-                :ensure => version
-            }
-        else
-            Puppet.warning "Could not match %s" % desc
-            nil
-        end
-    end
-
-    def self.instances(justme = false)
-        gemlist(:local => true).collect do |hash|
-            new(hash)
-        end
-    end
-
-    def install(useversion = true)
-        command = [command(:gemcmd), "install"]
-        if (! resource[:ensure].is_a? Symbol) and useversion
-            command << "-v" << resource[:ensure]
-        end
-        # Always include dependencies
-        command << "--include-dependencies"
-
-        if source = resource[:source]
-            begin
-                uri = URI.parse(source)
-            rescue => detail
-                fail "Invalid source '%s': %s" % [uri, detail]
-            end
-
-            case uri.scheme
-            when nil: 
-                # no URI scheme => interpret the source as a local file
-                command << source
-            when /file/i
-                command << uri.path
-            when 'puppet'
-                # we don't support puppet:// URLs (yet)
-                raise Puppet::Error.new("puppet:// URLs are not supported as gem sources")              
-            else
-                # interpret it as a gem repository
-                command << "--source" << "#{source}" << resource[:name]
-            end
-        else
-            command << resource[:name]
-        end
-
-        output = execute(command)
-        # Apparently some stupid gem versions don't exit non-0 on failure
-        if output.include?("ERROR")
-            self.fail "Could not install: %s" % output.chomp
-        end
-    end
-
-    def latest
-        # This always gets the latest version available.
-        hash = self.class.gemlist(:justme => resource[:name])
-
-        return hash[:ensure]
-    end
-
-    def query
-        self.class.gemlist(:justme => resource[:name], :local => true)
-    end
-
-    def uninstall
-        gemcmd "uninstall", "-x", "-a", resource[:name]
-    end
-
-    def update
-        self.install(false)
-    end
-end
-
diff --git a/lib/puppet/provider/package/hpux.rb b/lib/puppet/provider/package/hpux.rb
deleted file mode 100644
index 202fa24..0000000
--- a/lib/puppet/provider/package/hpux.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-# HP-UX packaging.
-
-require 'puppet/provider/package'
-
-Puppet::Type.type(:package).provide :hpux, :parent => Puppet::Provider::Package do
-
-    desc "HP-UX's packaging system."
-
-    commands :swinstall => "/usr/sbin/swinstall",
-             :swlist => "/usr/sbin/swlist",
-             :swremove => "/usr/sbin/swremove"
-
-    confine :operatingsystem => "hp-ux"
-
-    defaultfor :operatingsystem => "hp-ux"
-    
-    def self.instances
-        # TODO:  This is very hard on HP-UX!
-        []
-    end
-    
-    # source and name are required
-    def install
-        raise ArgumentError, "source must be provided to install HP-UX packages" unless resource[:source]
-        args = standard_args + ["-s", resource[:source], resource[:name]]
-        swinstall(*args)
-    end
-    
-    def query
-        begin
-            swlist resource[:name]
-            {:ensure => :present}
-        rescue
-            {:ensure => :absent}
-        end
-    end
-    
-    def uninstall
-        args = standard_args + [resource[:name]]
-        swremove(*args)
-    end
-    
-    def standard_args
-        return ["-x", "mount_all_filesystems=false"]
-    end
-end
diff --git a/lib/puppet/provider/package/openbsd.rb b/lib/puppet/provider/package/openbsd.rb
deleted file mode 100755
index af590eb..0000000
--- a/lib/puppet/provider/package/openbsd.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-require 'puppet/provider/package'
-
-# Packaging on OpenBSD.  Doesn't work anywhere else that I know of.
-Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Package do
-    include Puppet::Util::Execution
-    desc "OpenBSD's form of ``pkg_add`` support."
-
-    commands :pkginfo => "pkg_info", :pkgadd => "pkg_add", :pkgdelete => "pkg_delete"
-
-    defaultfor :operatingsystem => :openbsd
-    confine :operatingsystem => :openbsd
-
-    def self.instances
-        packages = []
-
-        begin
-            execpipe(listcmd()) do |process|
-                # our regex for matching pkg_info output
-                regex = %r{^(\S+)-([^-\s]+)\s+(.+)}
-                fields = [:name, :ensure, :description]
-                hash = {}
-
-                # now turn each returned line into a package object
-                process.each { |line|
-                    if match = regex.match(line)
-                        fields.zip(match.captures) { |field,value|
-                            hash[field] = value
-                        }
-                        yup = nil
-                        name = hash[:name]
-
-                        hash[:provider] = self.name
-
-                        packages << new(hash)
-                        hash = {}
-                    else
-                        # Print a warning on lines we can't match, but move
-                        # on, since it should be non-fatal
-                        warning("Failed to match line %s" % line)
-                    end
-                }
-            end
-
-            return packages
-        rescue Puppet::ExecutionFailure
-            return nil
-        end
-    end
-
-    def self.listcmd
-        [command(:pkginfo), " -a"]
-    end
-
-    def install
-        should = @resource.should(:ensure)
-
-        unless @resource[:source]
-            raise Puppet::Error,
-                "You must specify a package source for BSD packages"
-        end
-
-        if @resource[:source] =~ /\/$/
-            withenv :PKG_PATH => @resource[:source] do
-                pkgadd @resource[:name]
-            end
-        else
-            pkgadd @resource[:source]
-        end
-
-    end
-
-    def query
-        hash = {}
-        info = pkginfo @resource[:name]
-
-        # Search for the version info
-        if info =~ /Information for (inst:)?#{@resource[:name]}-(\S+)/
-            hash[:ensure] = $2
-        else
-            return nil
-        end
-
-        # And the description
-        if info =~ /Comment:\s*\n(.+)/
-            hash[:description] = $1
-        end
-
-        return hash
-    end
-
-    def uninstall
-        pkgdelete @resource[:name]
-    end
-end
-
diff --git a/lib/puppet/provider/package/pkgdmg.rb b/lib/puppet/provider/package/pkgdmg.rb
deleted file mode 100644
index fa546c6..0000000
--- a/lib/puppet/provider/package/pkgdmg.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-#
-# pkgdmg.rb
-#
-# Install Installer.app packages wrapped up inside a DMG image file.
-#
-# Copyright (C) 2007 Jeff McCune Jeff McCune <jeff at northstarlabs.net>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation (version 2 of the License)
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston MA  02110-1301 USA
-#
-# Motivation: DMG files provide a true HFS file system
-# and are easier to manage and .pkg bundles.
-#
-# Note: the 'apple' Provider checks for the package name
-# in /L/Receipts.  Since we install multiple pkg's from a single
-# source, we treat the source .pkg.dmg file as the package name.
-# As a result, we store installed .pkg.dmg file names
-# in /var/db/.puppet_pkgdmg_installed_<name>
-
-require 'puppet/provider/package'
-
-Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Package do
-    desc "Package management based on Apple's Installer.app and DiskUtility.app.  This package works by checking the contents of a DMG image for Apple pkg or mpkg files. Any number of pkg or mpkg files may exist in the root directory of the DMG file system. Sub directories are not checked for packages.  See `the wiki docs </trac/puppet/wiki/DmgPackages>` for more detail."
-  
-    confine :exists => "/Library/Receipts"
-    commands :installer => "/usr/sbin/installer"
-    commands :hdiutil => "/usr/bin/hdiutil"
-    commands :curl => "/usr/bin/curl"
-
-    # JJM We store a cookie for each installed .pkg.dmg in /var/db
-    def self.instance_by_name
-        Dir.entries("/var/db").find_all { |f|
-            f =~ /^\.puppet_pkgdmg_installed_/
-        }.collect do |f|
-            name = f.sub(/^\.puppet_pkgdmg_installed_/, '')
-            yield name if block_given?
-            name
-        end
-    end
-
-    def self.instances
-        instance_by_name.collect do |name|
-            new(
-                :name => name,
-                :provider => :pkgdmg,
-                :ensure => :installed
-            )
-        end
-    end
-
-    def self.installpkg(source, name, orig_source)
-      installer "-pkg", source, "-target", "/"
-      # Non-zero exit status will throw an exception.
-      File.open("/var/db/.puppet_pkgdmg_installed_#{name}", "w") do |t|
-          t.print "name: '#{name}'\n"
-          t.print "source: '#{orig_source}'\n"
-      end
-    end
-    
-    def self.installpkgdmg(source, name)
-        unless source =~ /\.dmg$/i
-            self.fail "Mac OS X PKG DMG's must specificy a source string ending in .dmg"
-        end
-        require 'open-uri'
-        require 'facter/util/plist'
-        cached_source = source
-        if %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ cached_source
-            cached_source = "/tmp/#{name}"
-            begin
-                curl "-o", cached_source, "-C", "-", "-k", "-s", "--url", source
-                Puppet.debug "Success: curl transfered [#{name}]"
-            rescue Puppet::ExecutionFailure
-                Puppet.debug "curl did not transfer [#{name}].  Falling back to slower open-uri transfer methods."
-                cached_source = source
-            end
-        end
-        
-        begin
-            open(cached_source) do |dmg|
-                xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", dmg.path
-                # JJM THIS IS A HORRIBLE HACK (Well, actually it's not so bad...)
-                mounts = xml_str.scan(/<string>(\/tmp.*?)<\/string>/)[0]
-                begin
-                    mounts.each do |fspath|
-                        Dir.entries(fspath).select { |f|
-                            f =~ /\.m{0,1}pkg$/i
-                            }.each do |pkg|
-                                installpkg("#{fspath}/#{pkg}", name, source)
-                            end
-                    end # mounts.each do
-                ensure
-                    hdiutil "eject", mounts[0]
-                end # begin
-            end # open() do
-        ensure
-            # JJM Remove the file if open-uri didn't already do so.
-            File.unlink(cached_source) if File.exist?(cached_source)
-        end # begin
-    end # def self.installpkgdmg
-
-    def query
-        if FileTest.exists?("/var/db/.puppet_pkgdmg_installed_#{@resource[:name]}")
-            return {:name => @resource[:name], :ensure => :present}
-        else
-            return nil
-        end
-    end
-
-    def install
-        source = nil
-        unless source = @resource[:source]
-            self.fail "Mac OS X PKG DMG's must specify a package source."
-        end
-        unless name = @resource[:name]
-            self.fail "Mac OS X PKG DMG's must specify a package name."
-        end
-        self.class.installpkgdmg(source,name)
-    end
-end
-
diff --git a/lib/puppet/provider/package/portage.rb b/lib/puppet/provider/package/portage.rb
deleted file mode 100644
index ae7194f..0000000
--- a/lib/puppet/provider/package/portage.rb
+++ /dev/null
@@ -1,119 +0,0 @@
-require 'puppet/provider/package'
-
-Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Package do
-    desc "Provides packaging support for Gentoo's portage system."
-
-    has_feature :versionable
-
-    commands :emerge => "/usr/bin/emerge", :eix => "/usr/bin/eix", :update_eix => "/usr/bin/update-eix"
-
-    confine :operatingsystem => :gentoo
-
-    defaultfor :operatingsystem => :gentoo
-
-    def self.instances
-        result_format = /(\S+) (\S+) \[(?:([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\([^\)]+\))?(?:\[([^\]]+)\])?[ ]*)*\] \[(?:(?:\{M\})?(?:\([~*]+\))?([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\(([^\)]+)\))?(?:![mf])*(?:\[([^\]]+)\])?)?\] ([\S]*) (.*)/
-        result_fields = [:category, :name, :ensure, :ensure_overlay, :version_available, :slot, :overlay, :vendor, :description]
-
-        search_format = "{installedversionsshort}<category> <name> [<installedversionsshort>] [<best>] <homepage> <description>{}"
-
-        begin
-            if !FileUtils.uptodate?("/var/cache/eix", %w(/usr/bin/eix /usr/portage/metadata/timestamp))
-                update_eix
-            end
-            search_output = eix "--nocolor", "--format", search_format
-
-            packages = []
-            search_output.each do |search_result|
-                match = result_format.match( search_result )
-
-                if match
-                    package = {}
-                    result_fields.zip(match.captures) { |field, value|
-                        package[field] = value unless !value or value.empty?
-                    }
-                    package[:provider] = :portage
-                    package[:ensure] = package[:ensure].split.last
-
-                    packages << new(package)
-                end
-            end
-
-            return packages
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error.new(detail)
-        end
-    end
-
-    def install
-        should = @resource.should(:ensure)
-        name = package_name
-        unless should == :present or should == :latest
-            # We must install a specific version
-            name = "=%s-%s" % [name, should]
-        end
-        emerge name
-    end
-
-    # The common package name format.
-    def package_name
-        @resource[:category] ? "%s/%s" % [@resource[:category], @resource[:name]] : @resource[:name]
-    end
-
-    def uninstall
-        emerge "--unmerge", package_name
-    end
-
-    def update
-        self.install
-    end
-
-    def query
-        result_format = /(\S+) (\S+) \[(?:([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\([^\)]+\))?(?:\[([^\]]+)\])?[ ]*)*\] \[(?:(?:\{M\})?(?:\([~*]+\))?([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\(([^\)]+)\))?(?:![mf])*(?:\[([^\]]+)\])?)?\] ([\S]*) (.*)/
-        result_fields = [:category, :name, :ensure, :ensure_overlay, :version_available, :slot, :overlay, :vendor, :description]
-
-        search_field = package_name.count('/') > 0 ? "--category-name" : "--name"
-        search_value = package_name
-        search_format = "<category> <name> [<installedversionsshort>] [<best>] <homepage> <description>"
-
-        begin
-            if !FileUtils.uptodate?("/var/cache/eix", %w(/usr/bin/eix /usr/portage/metadata/timestamp))
-                update_eix
-            end
-            search_output = eix "--nocolor", "--format", search_format, "--exact", search_field, search_value
-
-            packages = []
-            search_output.each do |search_result|
-                match = result_format.match( search_result )
-
-                if( match )
-                    package = {}
-                    result_fields.zip( match.captures ) { |field, value| package[field] = value unless !value or value.empty? }
-                    if package[:ensure]
-                        package[:ensure] = package[:ensure].split.last
-                    else
-                        package[:ensure] = :absent
-                    end
-                    packages << package
-                end
-            end
-
-            case packages.size
-                when 0
-		    not_found_value = "%s/%s" % [@resource[:category] ? @resource[:category] : "<unspecified category>", @resource[:name]]
-                    raise Puppet::Error.new("No package found with the specified name [#{not_found_value}]")
-                when 1
-                    return packages[0]
-                else
-                    raise Puppet::Error.new("More than one package with the specified name [#{search_value}], please use the category parameter to disambiguate")
-            end
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error.new(detail)
-        end
-    end
-
-    def latest
-        return self.query[:version_available]
-    end
-end
-
diff --git a/lib/puppet/provider/package/ports.rb b/lib/puppet/provider/package/ports.rb
deleted file mode 100755
index 96ef3f0..0000000
--- a/lib/puppet/provider/package/ports.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-Puppet::Type.type(:package).provide :ports, :parent => :freebsd, :source => :freebsd do
-    desc "Support for FreeBSD's ports.  Again, this still mixes packages and ports."
-
-    commands :portupgrade => "/usr/local/sbin/portupgrade",
-             :portversion => "/usr/local/sbin/portversion",
-             :portuninstall => "/usr/local/sbin/pkg_deinstall",
-             :portinfo => "/usr/sbin/pkg_info"
-
-    defaultfor :operatingsystem => :freebsd
-
-    # I hate ports
-    %w{INTERACTIVE UNAME}.each do |var|
-        if ENV.include?(var)
-            ENV.delete(var)
-        end
-    end
-
-    def install
-        # -N: install if the package is missing, otherwise upgrade
-        # -M: yes, we're a batch, so don't ask any questions
-        cmd = %w{-N -M BATCH=yes} << @resource[:name]
-
-        output = portupgrade(*cmd)
-        if output =~ /\*\* No such /
-            raise Puppet::ExecutionFailure, "Could not find package %s" % @resource[:name]
-        end
-    end
-
-    # If there are multiple packages, we only use the last one
-    def latest
-        cmd = ["-v", @resource[:name]]
-
-        begin
-            output = portversion(*cmd)
-        rescue Puppet::ExecutionFailure
-            raise Puppet::Error.new(output)
-        end
-        line = output.split("\n").pop
-
-        unless line =~ /^(\S+)\s+(\S)\s+(.+)$/
-            # There's no "latest" version, so just return a placeholder
-            return :latest
-        end
-
-        pkgstuff = $1
-        match = $2
-        info = $3
-
-        unless pkgstuff =~ /^(\S+)-([^-\s]+)$/
-            raise Puppet::Error,
-                "Could not match package info '%s'" % pkgstuff
-        end
-
-        name, version = $1, $2
-
-        if match == "=" or match == ">" 
-            # we're up to date or more recent
-            return version
-        end
-
-        # Else, we need to be updated; we need to pull out the new version
-
-        unless info =~ /\((\w+) has (.+)\)/
-            raise Puppet::Error,
-                "Could not match version info '%s'" % info
-        end
-
-        source, newversion = $1, $2
-
-        debug "Newer version in %s" % source
-        return newversion
-    end
-
-    def query
-        # support portorigin_glob such as "mail/postfix"
-        name = self.name
-        if name =~ /\//
-            name = self.name.split(/\//).slice(1)
-        end
-        self.class.instances.each do |instance|
-            if instance.name == name
-                return instance.properties
-            end
-        end
-
-        return nil
-    end
-
-    def uninstall
-        portuninstall @resource[:name]
-    end
-
-    def update
-        install()
-    end
-end
-
diff --git a/lib/puppet/provider/package/rpm.rb b/lib/puppet/provider/package/rpm.rb
deleted file mode 100755
index b5a5c5d..0000000
--- a/lib/puppet/provider/package/rpm.rb
+++ /dev/null
@@ -1,132 +0,0 @@
-require 'puppet/provider/package'
-# RPM packaging.  Should work anywhere that has rpm installed.
-Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Provider::Package do
-    desc "RPM packaging support; should work anywhere with a working ``rpm``
-        binary."
-
-    # The query format by which we identify installed packages
-    NEVRAFORMAT = "%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}"
-    NEVRA_FIELDS = [:name, :epoch, :version, :release, :arch]
-
-    commands :rpm => "rpm"
-
-    if command('rpm')
-        confine :true => begin
-                rpm('--version')
-           rescue Puppet::ExecutionFailure
-               false
-           else
-               true
-           end
-    end
-
-    def self.instances
-        packages = []
-
-        # rpm < 4.1 don't support --nosignature
-        output = rpm "--version"
-        sig = "--nosignature"
-        if output =~ /RPM version (([123].*)|(4\.0.*))/
-            sig = ""
-        end
-
-        # list out all of the packages
-        begin
-            execpipe("#{command(:rpm)} -qa #{sig} --nodigest --qf '#{NEVRAFORMAT}\n'") { |process|
-                # now turn each returned line into a package object
-                process.each { |line|
-                    hash = nevra_to_hash(line)
-                    packages << new(hash)
-                }
-            }
-        rescue Puppet::ExecutionFailure
-            raise Puppet::Error, "Failed to list packages"
-        end
-
-        return packages
-    end
-
-    # Find the fully versioned package name and the version alone. Returns
-    # a hash with entries :instance => fully versioned package name, and 
-    # :ensure => version-release
-    def query
-        #NOTE: Prior to a fix for issue 1243, this method potentially returned a cached value
-        #IF YOU CALL THIS METHOD, IT WILL CALL RPM
-        #Use get(:property) to check if cached values are available 
-        cmd = ["-q", @resource[:name], "--nosignature", "--nodigest", "--qf", "#{NEVRAFORMAT}\n"]
-
-        begin
-            output = rpm(*cmd)
-        rescue Puppet::ExecutionFailure
-            return nil
-        end
-        
-        # FIXME: We could actually be getting back multiple packages
-        # for multilib
-        @property_hash.update(self.class.nevra_to_hash(output))
-
-        return @property_hash.dup
-    end
-
-    # Here we just retrieve the version from the file specified in the source.
-    def latest
-        unless source = @resource[:source]
-            @resource.fail "RPMs must specify a package source"
-        end
-        
-        cmd = [command(:rpm), "-q", "--qf", "#{NEVRAFORMAT}\n", "-p", "#{@resource[:source]}"]
-        h = self.class.nevra_to_hash(execfail(cmd, Puppet::Error))
-        return h[:ensure]
-    end
-
-    def install
-        source = nil
-        unless source = @resource[:source]
-            @resource.fail "RPMs must specify a package source"
-        end
-        # RPM gets pissy if you try to install an already 
-        # installed package
-        if @resource.should(:ensure) == @property_hash[:ensure] or
-            @resource.should(:ensure) == :latest && @property_hash[:ensure] == latest
-            return
-        end
-
-        flag = "-i"
-        if @property_hash[:ensure] and @property_hash[:ensure] != :absent
-            flag = "-U"
-        end
-
-        rpm flag, "--oldpackage", source
-    end
-
-    def uninstall
-        query unless get(:arch)
-        nvr = "#{get(:name)}-#{get(:version)}-#{get(:release)}"
-        arch = ".#{get(:arch)}"
-        # If they specified an arch in the manifest, erase that Otherwise,
-        # erase the arch we got back from the query. If multiple arches are
-        # installed and only the package name is specified (without the
-        # arch), this will uninstall all of them on successive runs of the
-        # client, one after the other
-        if @resource[:name][-arch.size, arch.size] == arch
-            nvr += arch
-        else
-            nvr += ".#{get(:arch)}"
-        end
-        rpm "-e", nvr
-    end
-
-    def update
-        self.install
-    end
-
-    def self.nevra_to_hash(line)
-        line.chomp!
-        hash = {}
-        NEVRA_FIELDS.zip(line.split) { |f, v| hash[f] = v }
-        hash[:provider] = self.name
-        hash[:ensure] = "#{hash[:version]}-#{hash[:release]}"
-        return hash
-    end
-end
-
diff --git a/lib/puppet/provider/package/rug.rb b/lib/puppet/provider/package/rug.rb
deleted file mode 100644
index 1e1d676..0000000
--- a/lib/puppet/provider/package/rug.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-Puppet.type(:package).provide :rug, :parent => :rpm do
-    desc "Support for suse ``rug`` package manager."
-
-    has_feature :versionable
-
-    commands :rug => "/usr/bin/rug"
-    commands :rpm => "rpm"
-    defaultfor :operatingsystem => [:suse, :sles]
-    confine    :operatingsystem => [:suse, :sles]
-
-    # Install a package using 'rug'.
-    def install
-        should = @resource.should(:ensure)
-        self.debug "Ensuring => #{should}"
-        wanted = @resource[:name]
-
-        # XXX: We don't actually deal with epochs here.
-        case should
-        when true, false, Symbol
-            # pass
-        else
-            # Add the package version
-            wanted += "-%s" % should
-        end
-        output = rug "--quiet", :install, "-y", wanted
-
-        unless self.query
-            raise Puppet::ExecutionFailure.new(
-                "Could not find package %s" % self.name
-            )
-        end
-    end
-
-    # What's the latest package version available?
-    def latest
-        #rug can only get a list of *all* available packages?
-        output = rug "list-updates"
-
-        if output =~ /#{@resource[:name]}\s*\|\s*([0-9\.\-]+)/
-            return $1
-        else
-            # rug didn't find updates, pretend the current
-            # version is the latest
-            return @property_hash[:ensure]
-        end
-    end
-
-    def update
-        # rug install can be used for update, too
-        self.install
-    end
-end
diff --git a/lib/puppet/provider/package/sun.rb b/lib/puppet/provider/package/sun.rb
deleted file mode 100755
index 0d36638..0000000
--- a/lib/puppet/provider/package/sun.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-# Sun packaging.
-
-require 'puppet/provider/package'
-
-Puppet::Type.type(:package).provide :sun, :parent => Puppet::Provider::Package do
-    desc "Sun's packaging system.  Requires that you specify the source for
-        the packages you're managing."
-    commands :pkginfo => "/usr/bin/pkginfo",
-             :pkgadd => "/usr/sbin/pkgadd",
-             :pkgrm => "/usr/sbin/pkgrm"
-
-    confine :operatingsystem => :solaris
-
-    defaultfor :operatingsystem => :solaris
-
-    def self.instances
-        packages = []
-        hash = {}
-        names = {
-            "PKGINST" => :name,
-            "NAME" => nil,
-            "CATEGORY" => :category,
-            "ARCH" => :platform,
-            "VERSION" => :ensure,
-            "BASEDIR" => :root,
-            "HOTLINE" => nil,
-            "EMAIL" => nil,
-            "VENDOR" => :vendor,
-            "DESC" => :description,
-            "PSTAMP" => nil,
-            "INSTDATE" => nil,
-            "STATUS" => nil,
-            "FILES" => nil
-        }
-
-        cmd = "#{command(:pkginfo)} -l"
-
-        # list out all of the packages
-        execpipe(cmd) { |process|
-            # we're using the long listing, so each line is a separate
-            # piece of information
-            process.each { |line|
-                case line
-                when /^$/:
-                    hash[:provider] = :sun
-
-                    packages << new(hash)
-                    hash = {}
-                when /\s*(\w+):\s+(.+)/:
-                    name = $1
-                    value = $2
-                    if names.include?(name)
-                        unless names[name].nil?
-                            hash[names[name]] = value
-                        end
-                    end
-                when /\s+\d+.+/:
-                    # nothing; we're ignoring the FILES info
-                end
-            }
-        }
-        return packages
-    end
-
-    # Get info on a package, optionally specifying a device.
-    def info2hash(device = nil)
-        names = {
-            "PKGINST" => :name,
-            "NAME" => nil,
-            "CATEGORY" => :category,
-            "ARCH" => :platform,
-            "VERSION" => :ensure,
-            "BASEDIR" => :root,
-            "HOTLINE" => nil,
-            "EMAIL" => nil,
-            "VSTOCK" => nil,
-            "VENDOR" => :vendor,
-            "DESC" => :description,
-            "PSTAMP" => nil,
-            "INSTDATE" => nil,
-            "STATUS" => nil,
-            "FILES" => nil
-        }
-
-        hash = {}
-        cmd = "#{command(:pkginfo)} -l"
-        if device
-            cmd += " -d #{device}"
-        end
-        cmd += " #{@resource[:name]}"
-
-        begin
-            # list out all of the packages
-            execpipe(cmd) { |process|
-                # we're using the long listing, so each line is a separate
-                # piece of information
-                process.each { |line|
-                    case line
-                    when /^$/:  # ignore
-                    when /\s*([A-Z]+):\s+(.+)/:
-                        name = $1
-                        value = $2
-                        if names.include?(name)
-                            unless names[name].nil?
-                                hash[names[name]] = value
-                            end
-                        end
-                    when /\s+\d+.+/:
-                        # nothing; we're ignoring the FILES info
-                    end
-                }
-            }
-            return hash
-        rescue Puppet::ExecutionFailure
-            return nil
-        end
-    end
-
-    def install
-        unless @resource[:source]
-            raise Puppet::Error, "Sun packages must specify a package source"
-        end
-        cmd = []
-        
-        if @resource[:adminfile]
-            cmd << "-a" << @resource[:adminfile]
-        end
-
-        if @resource[:responsefile]
-            cmd << "-r" << @resource[:responsefile]
-        end
-
-        cmd << "-d" << @resource[:source]
-        cmd << "-n" << @resource[:name]
-
-        pkgadd cmd
-    end
-
-    # Retrieve the version from the current package file.
-    def latest
-        hash = info2hash(@resource[:source])
-        hash[:ensure]
-    end
-
-    def query
-        info2hash()
-    end
-
-    def uninstall
-        command  = ["-n"]
-
-        if @resource[:adminfile]
-            command << "-a" << @resource[:adminfile]
-        end
-
-        command << @resource[:name]
-        pkgrm command
-    end
-
-    # Remove the old package, and install the new one.  This will probably
-    # often fail.
-    def update
-        if (@property_hash[:ensure] || info2hash()[:ensure]) != :absent
-            self.uninstall
-        end
-        self.install
-    end
-end
-
diff --git a/lib/puppet/provider/package/sunfreeware.rb b/lib/puppet/provider/package/sunfreeware.rb
deleted file mode 100755
index d7bcd09..0000000
--- a/lib/puppet/provider/package/sunfreeware.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# At this point, it's an exact copy of the Blastwave stuff.
-Puppet::Type.type(:package).provide :sunfreeware, :parent => :blastwave, :source => :sun do
-    desc "Package management using sunfreeware.com's ``pkg-get`` command on Solaris.
-        At this point, support is exactly the same as ``blastwave`` support and
-        has not actually been tested."
-    commands :pkgget => "pkg-get"
-
-    confine :operatingsystem => :solaris
-
-end
-
diff --git a/lib/puppet/provider/package/up2date.rb b/lib/puppet/provider/package/up2date.rb
deleted file mode 100644
index dde633d..0000000
--- a/lib/puppet/provider/package/up2date.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-Puppet.type(:package).provide :up2date, :parent => :rpm, :source => :rpm do
-    desc "Support for Red Hat's proprietary ``up2date`` package update
-        mechanism."
-
-    commands :up2date => "/usr/sbin/up2date-nox"
-    defaultfor :operatingsystem => :redhat, 
-               :lsbdistrelease => ["2.1", "3", "4"]
-    confine    :operatingsystem => :redhat
-
-    # Install a package using 'up2date'.
-    def install
-        up2date "-u", @resource[:name]
-
-        unless self.query
-            raise Puppet::ExecutionFailure.new(
-                "Could not find package %s" % self.name
-            )
-        end
-    end
-
-    # What's the latest package version available?
-    def latest
-        #up2date can only get a list of *all* available packages?
-        output = up2date "--showall"
-
-        if output =~ /^#{@resource[:name]}-(\d+.*)\.\w+/
-            return $1
-        else
-            # up2date didn't find updates, pretend the current
-            # version is the latest
-            return @property_hash[:ensure]
-        end
-    end
-
-    def update
-        # Install in up2date can be used for update, too
-        self.install
-    end
-end
-
diff --git a/lib/puppet/provider/package/urpmi.rb b/lib/puppet/provider/package/urpmi.rb
deleted file mode 100644
index a958352..0000000
--- a/lib/puppet/provider/package/urpmi.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-Puppet::Type.type(:package).provide :urpmi, :parent => :rpm, :source => :rpm do
-    desc "Support via ``urpmi``."
-    commands :urpmi => "urpmi", :urpmq => "urpmq", :rpm => "rpm"
-
-    if command('rpm')
-        confine :true => begin
-                rpm('-ql', 'rpm')
-           rescue Puppet::ExecutionFailure
-               false
-           else
-               true
-           end
-    end
-
-    defaultfor :operatingsystem => [:mandriva, :mandrake]
-
-    has_feature :versionable
-
-    def install
-        should = @resource.should(:ensure)
-        self.debug "Ensuring => #{should}"
-        wanted = @resource[:name]
-
-        # XXX: We don't actually deal with epochs here.
-        case should
-        when true, false, Symbol
-            # pass
-        else
-            # Add the package version
-            wanted += "-%s" % should
-        end
-
-        output = urpmi "--auto", wanted
-
-        unless self.query
-            raise Puppet::Error.new(
-                "Could not find package %s" % self.name
-            )
-        end
-    end
-
-    # What's the latest package version available?
-    def latest
-        output = urpmq "-S", @resource[:name]
-
-        if output =~ /^#{@resource[:name]}\s+:\s+.*\(\s+(\S+)\s+\)/
-            return $1
-        else
-            # urpmi didn't find updates, pretend the current
-            # version is the latest
-            return @resource[:ensure]
-        end
-    end
-
-    def update
-        # Install in urpmi can be used for update, too
-        self.install
-    end
-end
-
diff --git a/lib/puppet/provider/package/yum.rb b/lib/puppet/provider/package/yum.rb
deleted file mode 100755
index 56fad1a..0000000
--- a/lib/puppet/provider/package/yum.rb
+++ /dev/null
@@ -1,104 +0,0 @@
-Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
-    desc "Support via ``yum``."
-
-    has_feature :versionable
-
-    commands :yum => "yum", :rpm => "rpm", :python => "python"
-    
-    YUMHELPER = File::join(File::dirname(__FILE__), "yumhelper.py")
-
-    attr_accessor :latest_info
-
-    if command('rpm')
-        confine :true => begin
-                rpm('--version')
-           rescue Puppet::ExecutionFailure
-               false
-           else
-               true
-           end
-    end
-
-    defaultfor :operatingsystem => [:fedora, :centos, :redhat]
-
-    def self.prefetch(packages)
-        if Process.euid != 0
-            raise Puppet::Error, "The yum provider can only be used as root"
-        end
-        super
-        return unless packages.detect { |name, package| package.should(:ensure) == :latest }
-
-         # collect our 'latest' info
-         updates = {}
-         python(YUMHELPER).each_line do |l|
-             l.chomp!
-             next if l.empty?
-             if l[0,4] == "_pkg"
-                 hash = nevra_to_hash(l[5..-1])
-                 [hash[:name], "#{hash[:name]}.#{hash[:arch]}"].each  do |n|
-                     updates[n] ||= []
-                     updates[n] << hash
-                 end
-             end
-         end
-
-         # Add our 'latest' info to the providers.
-         packages.each do |name, package|
-             if info = updates[package[:name]]
-                 package.provider.latest_info = info[0]
-             end
-         end
-    end
-
-    def install
-        should = @resource.should(:ensure)
-        self.debug "Ensuring => #{should}"
-        wanted = @resource[:name]
-
-        # XXX: We don't actually deal with epochs here.
-        case should
-        when true, false, Symbol
-            # pass
-            should = nil
-        else
-            # Add the package version
-            wanted += "-%s" % should
-        end
-
-        output = yum "-d", "0", "-e", "0", "-y", :install, wanted
-
-        is = self.query
-        unless is
-            raise Puppet::Error, "Could not find package %s" % self.name
-        end
-
-        # FIXME: Should we raise an exception even if should == :latest
-        # and yum updated us to a version other than @param_hash[:ensure] ?
-        if should && should != is[:ensure]
-            raise Puppet::Error, "Failed to update to version #{should}, got version #{is[:ensure]} instead"
-        end
-    end
-
-    # What's the latest package version available?
-    def latest
-        upd = latest_info
-        unless upd.nil?
-            # FIXME: there could be more than one update for a package
-            # because of multiarch
-            return "#{upd[:version]}-#{upd[:release]}"
-        else
-            # Yum didn't find updates, pretend the current
-            # version is the latest
-            if properties[:ensure] == :absent
-                raise Puppet::DevError, "Tried to get latest on a missing package"
-            end
-            return properties[:ensure]
-        end
-    end
-
-    def update
-        # Install in yum can be used for update, too
-        self.install
-    end
-end
-
diff --git a/lib/puppet/provider/package/yumhelper.py b/lib/puppet/provider/package/yumhelper.py
deleted file mode 100644
index 8eab0d0..0000000
--- a/lib/puppet/provider/package/yumhelper.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# Python helper script to query for the packages that have
-# pending updates. Called by the yum package provider
-#
-# (C) 2007 Red Hat Inc.
-# David Lutterkort <dlutter @redhat.com>
-
-import sys
-import string
-import re
-
-# this maintains compatibility with really old platforms with python 1.x
-from os import popen, WEXITSTATUS
-
-# Try to use the yum libraries by default, but shell out to the yum executable
-# if they are not present (i.e. yum <= 2.0). This is only required for RHEL3
-# and earlier that do not support later versions of Yum. Once RHEL3 is EOL,
-# shell_out() and related code can be removed.
-try:
-    import yum
-except ImportError:
-    useyumlib = 0
-else:
-    useyumlib = 1
-
-OVERRIDE_OPTS = {
-    'debuglevel': 0,
-    'errorlevel': 0,
-    'logfile': '/dev/null'
-}
-
-def pkg_lists(my):
-    my.doConfigSetup()
-
-    for k in OVERRIDE_OPTS.keys():
-        if hasattr(my.conf, k):
-            setattr(my.conf, k, OVERRIDE_OPTS[k])
-        else:
-            my.conf.setConfigOption(k, OVERRIDE_OPTS[k])
-
-    my.doTsSetup()
-    my.doRpmDBSetup()
-    return my.doPackageLists('updates')
-
-def shell_out():
-    try:
-        p = popen("/usr/bin/env yum check-update 2>&1")
-        output = p.readlines()
-        rc = p.close()
-
-        if rc is not None:
-            # None represents exit code of 0, otherwise the exit code is in the
-            # format returned by wait(). Exit code of 100 from yum represents
-            # updates available.
-            if WEXITSTATUS(rc) != 100:
-                return WEXITSTATUS(rc)
-        else:
-            # Exit code is None (0), no updates waiting so don't both parsing output
-            return 0 
-
-        # Yum prints a line of hyphens (old versions) or a blank line between
-        # headers and package data, so skip everything before them
-        skipheaders = 0
-        for line in output:
-            if not skipheaders:
-                if re.compile("^((-){80}|)$").search(line):
-                    skipheaders = 1
-                continue
-
-            # Skip any blank lines
-            if re.compile("^[ \t]*$").search(line):
-                continue
-
-            # Format is:
-            # Yum 1.x: name arch (epoch:)?version
-            # Yum 2.0: name arch (epoch:)?version repo
-            # epoch is optional if 0
-
-            p = string.split(line)
-            pname = p[0]
-            parch = p[1]
-            pevr = p[2]
-
-            # Separate out epoch:version-release
-            evr_re = re.compile("^(\d:)?(\S+)-(\S+)$")
-            evr = evr_re.match(pevr)
-
-            pepoch = ""
-            if evr.group(1) is None:
-                pepoch = "0"
-            else:
-                pepoch = evr.group(1).replace(":", "")
-            pversion = evr.group(2)
-            prelease = evr.group(3)
-
-            print "_pkg", pname, pepoch, pversion, prelease, parch
-
-        return 0
-    except:
-        print sys.exc_info()[0]
-        return 1
-
-if useyumlib:
-    try:
-        try:
-            my = yum.YumBase()
-            ypl = pkg_lists(my)
-            for pkg in ypl.updates:
-                print "_pkg %s %s %s %s %s" % (pkg.name, pkg.epoch, pkg.version, pkg.release, pkg.arch)
-        finally:
-            my.closeRpmDB()
-    except IOError, e:
-        print "_err IOError %d %s" % (e.errno, e)
-        sys.exit(1)
-    except AttributeError, e:
-        # catch yumlib errors in buggy 2.x versions of yum
-        print "_err AttributeError %s" % e
-        sys.exit(1)
-else:
-    rc = shell_out()
-    sys.exit(rc)
diff --git a/lib/puppet/provider/parsedfile.rb b/lib/puppet/provider/parsedfile.rb
deleted file mode 100755
index b4a4a3b..0000000
--- a/lib/puppet/provider/parsedfile.rb
+++ /dev/null
@@ -1,370 +0,0 @@
-require 'puppet'
-require 'puppet/util/filetype'
-require 'puppet/util/fileparsing'
-
-# This provider can be used as the parent class for a provider that
-# parses and generates files.  Its content must be loaded via the
-# 'prefetch' method, and the file will be written when 'flush' is called
-# on the provider instance.  At this point, the file is written once
-# for every provider instance.
-#
-# Once the provider prefetches the data, it's the resource's job to copy
-# that data over to the @is variables.
-class Puppet::Provider::ParsedFile < Puppet::Provider
-    extend Puppet::Util::FileParsing
-
-    class << self
-        attr_accessor :default_target, :target
-    end
-
-    attr_accessor :property_hash
-
-    def self.clean(hash)
-        newhash = hash.dup
-        [:record_type, :on_disk].each do |p|
-            if newhash.include?(p)
-                newhash.delete(p)
-            end
-        end
-
-        return newhash
-    end
-
-    def self.clear
-        @target_objects.clear
-        @records.clear
-    end
-
-    def self.filetype
-        unless defined? @filetype
-            @filetype = Puppet::Util::FileType.filetype(:flat)
-        end
-        return @filetype
-    end
-
-    def self.filetype=(type)
-        if type.is_a?(Class)
-            @filetype = type
-        elsif klass = Puppet::Util::FileType.filetype(type)
-            @filetype = klass
-        else
-            raise ArgumentError, "Invalid filetype %s" % type
-        end
-    end
-
-    # Flush all of the targets for which there are modified records.  The only
-    # reason we pass a record here is so that we can add it to the stack if
-    # necessary -- it's passed from the instance calling 'flush'.
-    def self.flush(record)
-        # Make sure this record is on the list to be flushed.
-        unless record[:on_disk]
-            record[:on_disk] = true
-            @records << record
-
-            # If we've just added the record, then make sure our
-            # target will get flushed.
-            modified(record[:target] || default_target)
-        end
-
-        return unless defined?(@modified) and ! @modified.empty?
-
-        flushed = []
-        @modified.sort { |a,b| a.to_s <=> b.to_s }.uniq.each do |target|
-            Puppet.debug "Flushing %s provider target %s" % [@resource_type.name, target]
-            flush_target(target)
-            flushed << target
-        end
-
-        @modified.reject! { |t| flushed.include?(t) }
-    end
-
-    # Flush all of the records relating to a specific target.
-    def self.flush_target(target)
-        records = target_records(target).reject { |r|
-            r[:ensure] == :absent
-        }
-        target_object(target).write(to_file(records))
-    end
-
-    # Return the header placed at the top of each generated file, warning
-    # users that modifying this file manually is probably a bad idea.
-    def self.header
-%{# HEADER: This file was autogenerated at #{Time.now}
-# HEADER: by puppet.  While it can still be managed manually, it
-# HEADER: is definitely not recommended.\n}
-    end
-
-    # Add another type var.
-    def self.initvars
-        @records = []
-        @target_objects = {}
-
-        @target = nil
-
-        # Default to flat files
-        @filetype ||= Puppet::Util::FileType.filetype(:flat)
-        super
-    end
-
-    # Return a list of all of the records we can find.
-    def self.instances
-        prefetch()
-        @records.find_all { |r| r[:record_type] == self.name }.collect { |r|
-            new(r)
-        }
-    end
-
-    # Override the default method with a lot more functionality.
-    def self.mk_resource_methods
-        [resource_type.validproperties, resource_type.parameters].flatten.each do |attr|
-            attr = symbolize(attr)
-            define_method(attr) do
-#                if @property_hash.empty?
-#                    # Note that this swaps the provider out from under us.
-#                    prefetch()
-#                    if @resource.provider == self
-#                        return @property_hash[attr]
-#                    else
-#                        return @resource.provider.send(attr)
-#                    end
-#                end
-                # If it's not a valid field for this record type (which can happen
-                # when different platforms support different fields), then just
-                # return the should value, so the resource shuts up.
-                if @property_hash[attr] or self.class.valid_attr?(self.class.name, attr)
-                    @property_hash[attr] || :absent
-                else
-                    if defined? @resource
-                        @resource.should(attr)
-                    else
-                        nil
-                    end
-                end
-            end
-
-            define_method(attr.to_s + "=") do |val|
-                mark_target_modified
-                @property_hash[attr] = val
-            end
-        end
-    end
-
-    # Always make the resource methods.
-    def self.resource_type=(resource)
-        super
-        mk_resource_methods()
-    end
-
-    # Mark a target as modified so we know to flush it.  This only gets
-    # used within the attr= methods.
-    def self.modified(target)
-        @modified ||= []
-        @modified << target unless @modified.include?(target)
-    end
-
-    # Retrieve all of the data from disk.  There are three ways to know
-    # which files to retrieve:  We might have a list of file objects already
-    # set up, there might be instances of our associated resource and they
-    # will have a path parameter set, and we will have a default path
-    # set.  We need to turn those three locations into a list of files,
-    # prefetch each one, and make sure they're associated with each appropriate
-    # resource instance.
-    def self.prefetch(resources = nil)
-        # Reset the record list.
-        @records = []
-        targets(resources).each do |target|
-            @records += prefetch_target(target)
-        end
-
-        if resources
-            matchers = resources.dup
-            @records.each do |record|
-                # Skip things like comments and blank lines
-                next if skip_record?(record)
-
-                if name = record[:name] and resource = resources[name]
-                    resource.provider = new(record)
-                elsif respond_to?(:match)
-                    if resource = match(record, matchers)
-                        # Remove this resource from circulation so we don't unnecessarily try to match
-                        matchers.delete(resource.title)
-                        record[:name] = resource[:name]
-                        resource.provider = new(record)
-                    end
-                end
-            end
-        end
-    end
-
-    # Prefetch an individual target.
-    def self.prefetch_target(target)
-        target_records = retrieve(target).each do |r|
-            r[:on_disk] = true
-            r[:target] = target
-            r[:ensure] = :present
-        end
-
-        if respond_to?(:prefetch_hook)
-            target_records = prefetch_hook(target_records)
-        end
-
-        unless target_records
-            raise Puppet::DevError, "Prefetching %s for provider %s returned nil" % [target, self.name]
-        end
-
-        target_records
-    end
-
-    # Is there an existing record with this name?
-    def self.record?(name)
-        @records.find { |r| r[:name] == name }
-    end
-
-    # Retrieve the text for the file. Returns nil in the unlikely
-    # event that it doesn't exist.
-    def self.retrieve(path)
-        # XXX We need to be doing something special here in case of failure.
-        text = target_object(path).read
-        if text.nil? or text == ""
-            # there is no file
-            return []
-        else
-            # Set the target, for logging.
-            old = @target
-            begin
-                @target = path
-                return self.parse(text)
-            rescue Puppet::Error => detail
-                detail.file = @target
-                raise detail
-            ensure
-                @target = old
-            end
-        end
-    end
-
-    # Should we skip the record?  Basically, we skip text records.
-    # This is only here so subclasses can override it.
-    def self.skip_record?(record)
-        record_type(record[:record_type]).text?
-    end
-
-    # Initialize the object if necessary.
-    def self.target_object(target)
-        @target_objects[target] ||= filetype.new(target)
-
-        @target_objects[target]
-    end
-
-    # Find all of the records for a given target
-    def self.target_records(target)
-        @records.find_all { |r| r[:target] == target }
-    end
-
-    # Find a list of all of the targets that we should be reading.  This is
-    # used to figure out what targets we need to prefetch.
-    def self.targets(resources = nil)
-        targets = []
-        # First get the default target
-        unless self.default_target
-            raise Puppet::DevError, "Parsed Providers must define a default target"
-        end
-        targets << self.default_target
-
-        # Then get each of the file objects
-        targets += @target_objects.keys
-
-        # Lastly, check the file from any resource instances
-        if resources
-            resources.each do |name, resource|
-                if value = resource.should(:target)
-                    targets << value
-                end
-            end
-        end
-
-        targets.uniq.compact
-    end
-
-    def self.to_file(records)
-        text = super
-        header + text
-    end
-
-    def create
-        @resource.class.validproperties.each do |property|
-            if value = @resource.should(property)
-                @property_hash[property] = value
-            end
-        end
-        mark_target_modified()
-        return (@resource.class.name.to_s + "_created").intern
-    end
-
-    def destroy
-        # We use the method here so it marks the target as modified.
-        self.ensure = :absent
-        return (@resource.class.name.to_s + "_deleted").intern
-    end
-
-    def exists?
-        if @property_hash[:ensure] == :absent or @property_hash[:ensure].nil?
-            return false
-        else
-            return true
-        end
-    end
-
-    # Write our data to disk.
-    def flush
-        # Make sure we've got a target and name set.
-
-        # If the target isn't set, then this is our first modification, so
-        # mark it for flushing.
-        unless @property_hash[:target]
-            @property_hash[:target] = @resource.should(:target) || self.class.default_target
-            self.class.modified(@property_hash[:target])
-        end
-        @property_hash[:name] ||= @resource.name
-
-        self.class.flush(@property_hash)
-
-        #@property_hash = {}
-    end
-
-    def initialize(record)
-        super
-
-        # The 'record' could be a resource or a record, depending on how the provider
-        # is initialized.  If we got an empty property hash (probably because the resource
-        # is just being initialized), then we want to set up some defualts.
-        if @property_hash.empty?
-            @property_hash = self.class.record?(resource[:name]) || {:record_type => self.class.name, :ensure => :absent}
-        end
-    end
-
-    # Retrieve the current state from disk.
-    def prefetch
-        unless @resource
-            raise Puppet::DevError, "Somehow got told to prefetch with no resource set"
-        end
-        self.class.prefetch(@resource[:name] => @resource)
-    end
-
-    def record_type
-        @property_hash[:record_type]
-    end
-
-    private
-
-    # Mark both the resource and provider target as modified.
-    def mark_target_modified
-        if defined? @resource and restarget = @resource.should(:target) and restarget != @property_hash[:target]
-            self.class.modified(restarget)
-        end
-        if @property_hash[:target] != :absent and @property_hash[:target]
-            self.class.modified(@property_hash[:target])
-        end
-    end
-end
-
diff --git a/lib/puppet/provider/port/parsed.rb b/lib/puppet/provider/port/parsed.rb
deleted file mode 100755
index 68be0aa..0000000
--- a/lib/puppet/provider/port/parsed.rb
+++ /dev/null
@@ -1,173 +0,0 @@
-require 'puppet/provider/parsedfile'
-
-#services = nil
-#case Facter.value(:operatingsystem)
-#when "Solaris": services = "/etc/inet/services"
-#else
-#    services = "/etc/services"
-#end
-#
-#Puppet::Type.type(:port).provide(:parsed,
-#    :parent => Puppet::Provider::ParsedFile,
-#    :default_target => services,
-#    :filetype => :flat
-#) do
-#    text_line :comment, :match => /^\s*#/
-#    text_line :blank, :match => /^\s*$/
-#
-#    # We're cheating horribly here -- we don't support ddp, because it assigns
-#    # the same number to already-used names, and the same name to different
-#    # numbers.
-#    text_line :ddp, :match => /^\S+\s+\d+\/ddp/
-#
-#    # Also, just ignore the lines on OS X that don't have service names.
-#    text_line :funky_darwin, :match => /^\s+\d+\//
-#
-#    # We have to manually parse the line, since it's so darn complicated.
-#    record_line :parsed, :fields => %w{name port protocols alias description},
-#        :optional => %w{alias description} do |line|
-#        if line =~ /\/ddp/
-#            raise "missed ddp in %s" % line
-#        end
-#        # The record might contain multiple port lines separated by \n.
-#        hashes = line.split("\n").collect { |l| parse_port(l) }
-#
-#        # It's easy if there's just one hash.
-#        if hashes.length == 1
-#            return hashes.shift
-#        end
-#
-#        # Else, merge the two records into one.
-#        return port_merge(*hashes)
-#    end
-#
-#    # Override how we split into lines, so that we always treat both protocol
-#    # lines as a single line.  This drastically simplifies merging the two lines
-#    # into one record.
-#    def self.lines(text)
-#        names = {}
-#        lines = []
-#
-#        # We organize by number, because that's apparently how the ports work.
-#        # You'll never be able to use Puppet to manage multiple entries
-#        # with the same name but different numbers, though.
-#        text.split("\n").each do |line|
-#            if line =~ /^([-\w]+)\s+(\d+)\/[^d]/ # We want to skip ddp proto stuff
-#                names[$1] ||= []
-#                names[$1] << line
-#                lines << [:special, $1]
-#            else
-#                lines << line
-#            end
-#        end
-#
-#        # Now, return each line in order, but join the ones with the same name
-#        lines.collect do |line|
-#            if line.is_a?(Array)
-#                name = line[1]
-#                if names[name]
-#                    t = names[name].join("\n")
-#                    names.delete(name)
-#                    t
-#                end
-#            else
-#                line
-#            end
-#        end.reject { |l| l.nil? }
-#    end
-#
-#    # Parse a single port line, returning a hash.
-#    def self.parse_port(line)
-#        hash = {}
-#        if line.sub!(/^(\S+)\s+(\d+)\/(\w+)\s*/, '')
-#            hash[:name] = $1
-#            hash[:number] = $2
-#            hash[:protocols] = [$3]
-#
-#            unless line == ""
-#                line.sub!(/^([^#]+)\s*/) do |value|
-#                    aliases = $1
-#
-#                    # Remove any trailing whitespace
-#                    aliases.strip!
-#                    unless aliases =~ /^\s*$/
-#                        hash[:alias] = aliases.split(/\s+/)
-#                    end
-#
-#                    ""
-#                end
-#
-#                line.sub!(/^\s*#\s*(.+)$/) do |value|
-#                    desc = $1
-#                    unless desc =~ /^\s*$/
-#                        hash[:description] = desc.sub(/\s*$/, '')
-#                    end
-#
-#                    ""
-#                end
-#            end
-#        else
-#            if line =~ /^\s+\d+/ and
-#                Facter["operatingsystem"].value == "Darwin"
-#                    #Puppet.notice "Skipping wonky OS X port entry %s" %
-#                    #    line.inspect
-#                    next
-#            end
-#            Puppet.notice "Ignoring unparseable line '%s' in %s" % [line, self.target]
-#        end
-#
-#        if hash.empty?
-#            return nil
-#        else
-#            return hash
-#        end
-#    end
-#
-#    # Merge two records into one.
-#    def self.port_merge(one, two)
-#        keys = [one.keys, two.keys].flatten.uniq
-#
-#        # We'll be returning the 'one' hash. so make any necessary modifications
-#        # to it.
-#        keys.each do |key|
-#            # The easy case
-#            if one[key] == two[key]
-#                next
-#            elsif one[key] and ! two[key]
-#                next
-#            elsif ! one[key] and two[key]
-#                one[key] = two[key]
-#            elsif one[key].is_a?(Array) and two[key].is_a?(Array)
-#                one[key] = [one[key], two[key]].flatten.uniq
-#            else
-#                # Keep the info from the first hash, so don't do anything
-#                #Puppet.notice "Cannot merge %s in %s with %s" %
-#                #    [key, one.inspect, two.inspect]
-#            end
-#        end
-#
-#        return one
-#    end
-#
-#    # Convert the current object into one or more services entry.
-#    def self.to_line(hash)
-#        unless hash[:record_type] == :parsed
-#            return super
-#        end
-#
-#        # Strangely, most sites seem to use tabs as separators.
-#        hash[:protocols].collect { |proto|
-#            str = "%s\t\t%s/%s" % [hash[:name], hash[:number], proto]
-#
-#            if value = hash[:alias] and value != :absent
-#                str += "\t\t%s" % value.join(" ")
-#            end
-#
-#            if value = hash[:description] and value != :absent
-#                str += "\t# %s" % value
-#            end
-#            str
-#        }.join("\n")
-#    end
-#end
-
diff --git a/lib/puppet/provider/selboolean/getsetsebool.rb b/lib/puppet/provider/selboolean/getsetsebool.rb
deleted file mode 100644
index 4614c6c..0000000
--- a/lib/puppet/provider/selboolean/getsetsebool.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-Puppet::Type.type(:selboolean).provide(:getsetsebool) do
-    desc "Manage SELinux booleans using the getsebool and setsebool binaries."
-
-    commands :getsebool => "/usr/sbin/getsebool"
-    commands :setsebool => "/usr/sbin/setsebool"
-
-    def value
-        self.debug "Retrieving value of selboolean #{@resource[:name]}"
-
-        status = getsebool(@resource[:name])
-
-        if status =~ / off$/ then
-            return :off
-        elsif status =~ / on$/ then
-            return :on
-        else
-            status.chomp!
-            raise Puppet::Error, "Invalid response '%s' returned from getsebool" % [status]
-        end
-    end
-
-    def value=(new)
-        persist = ""
-        if @resource[:persistent] == :true
-            self.debug "Enabling persistence"
-            persist = "-P"
-        end
-        execoutput("#{command(:setsebool)} #{persist} #{@resource[:name]} #{new}")
-        return :file_changed
-    end
-
-    # Required workaround, since SELinux policy prevents setsebool
-    # from writing to any files, even tmp, preventing the standard
-    # 'setsebool("...")' construct from working.
-
-    def execoutput (cmd)
-      output = ''
-      begin
-        execpipe(cmd) do |out|
-          output = out.readlines.join('').chomp!
-        end
-      rescue Puppet::ExecutionFailure
-        raise Puppet::ExecutionFailure, output.split("\n")[0]
-      end
-      return output
-    end
-end
diff --git a/lib/puppet/provider/selmodule/semodule.rb b/lib/puppet/provider/selmodule/semodule.rb
deleted file mode 100644
index 4981366..0000000
--- a/lib/puppet/provider/selmodule/semodule.rb
+++ /dev/null
@@ -1,143 +0,0 @@
-Puppet::Type.type(:selmodule).provide(:semodule) do
-    desc "Manage SELinux policy modules using the semodule binary."
-
-    commands :semodule => "/usr/sbin/semodule"
-
-    def create
-        begin
-            execoutput("#{command(:semodule)} --install #{selmod_name_to_filename}")
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not load policy module: %s" % [detail];
-        end
-        return :true
-    end
-
-    def destroy
-        begin
-            execoutput("#{command(:semodule)} --remove #{@resource[:name]}")
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not remove policy module: %s" % [detail];
-        end
-    end
-
-    def exists?
-        self.debug "Checking for module #{@resource[:name]}"
-        execpipe("#{command(:semodule)} --list") do |out|
-            out.each do |line|
-                if line =~ /#{@resource[:name]}\b/
-                        return :true
-                end
-            end
-        end
-        return nil
-    end
-
-    def syncversion
-        self.debug "Checking syncversion on #{@resource[:name]}"
-
-        loadver = selmodversion_loaded
-
-        if(loadver) then
-            filever = selmodversion_file
-            if (filever == loadver) then
-                return :true
-            end
-        end
-        return :false
-    end
-    
-    def syncversion= (dosync)
-        begin
-            execoutput("#{command(:semodule)} --upgrade #{selmod_name_to_filename}")
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not upgrade policy module: %s" % [detail];
-        end
-    end
-
-    # Helper functions
-
-    def execoutput (cmd)
-      output = ''
-      begin
-        execpipe(cmd) do |out|
-          output = out.readlines.join('').chomp!
-        end
-      rescue Puppet::ExecutionFailure
-        raise Puppet::ExecutionFailure, output.split("\n")[0]
-      end
-      return output
-    end
-
-    def selmod_name_to_filename
-        if @resource[:selmodulepath]
-            return @resource[:selmodulepath]
-        else
-            return "#{@resource[:selmoduledir]}/#{@resource[:name]}.pp"
-        end
-    end
-
-    def selmod_readnext (handle)
-        len = handle.read(4).unpack('L')[0]
-        return handle.read(len)
-    end
-
-    def selmodversion_file
-        magic = 0xF97CFF8F
-
-        filename = selmod_name_to_filename
-        mod = File.new(filename, "r")
-
-        (hdr, ver, numsec) = mod.read(12).unpack('LLL')
-
-        if hdr != magic
-            raise Puppet::Error, "Found #{hdr} instead of magic #{magic} in #{filename}"
-        end
-
-        if ver != 1
-            raise Puppet::Error, "Unknown policy file version #{ver} in #{filename}"
-        end
-
-        # Read through (and throw away) the file section offsets, and also
-        # the magic header for the first section.
-
-        mod.read((numsec + 1) * 4)
-
-        ## Section 1 should be "SE Linux Module"
-
-        selmod_readnext(mod)
-        selmod_readnext(mod)
-
-        # Skip past the section headers
-        mod.read(14)
-
-        # Module name
-        selmod_readnext(mod)
-
-        # At last!  the version
-
-        v = selmod_readnext(mod) 
-
-        self.debug "file version #{v}"
-        return v
-    end
-
-    def selmodversion_loaded 
-        lines = ()
-        begin
-            execpipe("#{command(:semodule)} --list") do |output|
-                lines = output.readlines
-                lines.each do |line|
-                    line.chomp!
-                    bits = line.split
-                    if bits[0] == @resource[:name] then
-                        self.debug "load version #{bits[1]}"
-                        return bits[1]
-                    end
-                end
-            end
-        rescue Puppet::ExecutionFailure
-            raise Puppet::ExecutionFailure, "Could not list policy modules: %s" % [lines.join(' ').chomp!]
-        end
-        return nil
-    end
-end
diff --git a/lib/puppet/provider/service/base.rb b/lib/puppet/provider/service/base.rb
deleted file mode 100755
index 8964322..0000000
--- a/lib/puppet/provider/service/base.rb
+++ /dev/null
@@ -1,137 +0,0 @@
-Puppet::Type.type(:service).provide :base do
-    desc "The simplest form of service support.  You have to specify
-        enough about your service for this to work; the minimum you can specify
-        is a binary for starting the process, and this same binary will be 
-        searched for in the process table to stop the service.  It is 
-        preferable to specify start, stop, and status commands, akin to how you
-        would do so using ``init``."
-
-    commands :kill => "kill"
-
-    def self.instances
-        []
-    end
-
-    # Get the process ID for a running process. Requires the 'pattern'
-    # parameter.
-    def getpid
-        unless @resource[:pattern]
-            @resource.fail "Either a stop command or a pattern must be specified"
-        end
-        ps = Facter["ps"].value
-        unless ps and ps != ""
-            @resource.fail(
-                "You must upgrade Facter to a version that includes 'ps'"
-            )
-        end
-        regex = Regexp.new(@resource[:pattern])
-        self.debug "Executing '#{ps}'"
-        IO.popen(ps) { |table|
-            table.each { |line|
-                if regex.match(line)
-                    ary = line.sub(/^\s+/, '').split(/\s+/)
-                    return ary[1]
-                end
-            }
-        }
-
-        return nil
-    end
-
-    # How to restart the process.
-    def restart
-        if @resource[:restart] or self.respond_to?(:restartcmd)
-            ucommand(:restart)
-        else
-            self.stop
-            self.start
-        end
-    end
-
-    # Check if the process is running.  Prefer the 'status' parameter,
-    # then 'statuscmd' method, then look in the process table.  We give
-    # the object the option to not return a status command, which might
-    # happen if, for instance, it has an init script (and thus responds to
-    # 'statuscmd') but does not have 'hasstatus' enabled.
-    def status
-        if @resource[:status] or (
-            self.respond_to?(:statuscmd) and self.statuscmd
-        )
-            # Don't fail when the exit status is not 0.
-            output = ucommand(:status, false)
-
-            if $? == 0
-                return :running
-            else
-                return :stopped
-            end
-        elsif pid = self.getpid
-            self.debug "PID is %s" % pid
-            return :running
-        else
-            return :stopped
-        end
-    end
-
-    # Run the 'start' parameter command, or the specified 'startcmd'.
-    def start
-        ucommand(:start)
-    end
-
-    # The command used to start.  Generated if the 'binary' argument
-    # is passed.
-    def startcmd
-        if @resource[:binary]
-            return @resource[:binary]
-        else
-            raise Puppet::Error,
-                "Services must specify a start command or a binary"
-        end
-    end
-
-    # Stop the service.  If a 'stop' parameter is specified, it
-    # takes precedence; otherwise checks if the object responds to
-    # a 'stopcmd' method, and if so runs that; otherwise, looks
-    # for the process in the process table.
-    # This method will generally not be overridden by submodules.
-    def stop
-        if @resource[:stop] or self.respond_to?(:stopcmd)
-            ucommand(:stop)
-        else
-            pid = getpid
-            unless pid
-                self.info "%s is not running" % self.name
-                return false
-            end
-            begin
-                output = kill pid
-            rescue Puppet::ExecutionFailure => detail
-                @resource.fail "Could not kill %s, PID %s: %s" %
-                        [self.name, pid, output]
-            end
-            return true
-        end
-    end
-
-    # A simple wrapper so execution failures are a bit more informative.
-    def texecute(type, command, fof = true)
-        begin
-            # #565: Services generally produce no output, so squelch them.
-            execute(command, :failonfail => fof, :squelch => true)
-        rescue Puppet::ExecutionFailure => detail
-            @resource.fail "Could not %s %s: %s" % [type, @resource.ref, detail]
-        end
-        return nil
-    end
-
-    # Use either a specified command or the default for our provider.
-    def ucommand(type, fof = true)
-        if c = @resource[type]
-            cmd = [c]
-        else
-            cmd = self.send("%scmd" % type)
-        end
-        return texecute(type, cmd, fof)
-    end
-end
-
diff --git a/lib/puppet/provider/service/daemontools.rb b/lib/puppet/provider/service/daemontools.rb
deleted file mode 100644
index 52d8c6b..0000000
--- a/lib/puppet/provider/service/daemontools.rb
+++ /dev/null
@@ -1,154 +0,0 @@
-# Daemontools service management
-#
-# author Brice Figureau <brice-puppet at daysofwonder.com>
-Puppet::Type.type(:service).provide :daemontools, :parent => :base do
-    desc "Daemontools service management.
-    This provider manages daemons running supervised by D.J.Bernstein daemontools.
-    It tries to detect the service directory, with by order of preference:
-     * /service
-     * /etc/service
-     * /var/lib/svscan
-    The daemon directory should be placed in a directory that can be 
-    by default in:
-     * /var/lib/service
-     * /etc
-    or this can be overriden in the service resource parameters:
-    service {
-     \"myservice\":
-       provider => \"daemontools\", path => \"/path/to/daemons\";
-    }
-
-    This provider supports out of the box:
-     * start/stop (mapped to enable/disable)
-     * enable/disable
-     * restart
-     * status"
-
-    commands :svc  => "/usr/bin/svc"
-    commands :svstat => "/usr/bin/svstat"
-
-    class << self
-        attr_writer :defpath
-        
-        # this is necessary to autodetect a valid resource
-        # default path, since there is no standard for such directory.
-        def defpath
-            unless defined?(@defpath) and @defpath
-                ["/var/lib/service", "/etc"].each do |path|
-                    if FileTest.exist?(path)
-                        @defpath = path
-                        break
-                    end
-                end
-                raise "Could not find the daemon directory (tested [/var/lib/service,/etc])" unless @defpath
-            end
-            @defpath
-        end
-    end
-
-    attr_writer :servicedir
-
-    # returns all providers for all existing services in @defpath
-    # ie enabled or not
-    def self.instances
-        path = self.defpath
-        unless FileTest.directory?(path)
-            Puppet.notice "Service path %s does not exist" % path
-            next
-        end
-
-        # reject entries that aren't either a directory
-        # or don't contain a run file
-        Dir.entries(path).reject { |e|
-            fullpath = File.join(path, e)
-            e =~ /^\./ or ! FileTest.directory?(fullpath) or ! FileTest.exist?(File.join(fullpath,"run"))
-        }.collect do |name|
-            new(:name => name, :path => path)
-        end
-    end
-
-    # returns the daemon dir on this node
-    def self.daemondir
-        self.defpath
-    end
-
-    # find the service dir on this node
-    def servicedir
-      unless defined?(@servicedir) and @servicedir
-        ["/service", "/etc/service","/var/lib/svscan"].each do |path|
-            if FileTest.exist?(path)
-                @servicedir = path
-                break
-            end
-        end
-        raise "Could not find service directory" unless @servicedir
-      end
-      @servicedir
-    end
-
-    # returns the full path of this service when enabled
-    # (ie in the service directory)
-    def service
-        File.join(self.servicedir, resource[:name])
-    end
-
-    # returns the full path to the current daemon directory
-    # note that this path can be overriden in the resource
-    # definition
-    def daemon
-        File.join(resource[:path], resource[:name])
-    end
-    
-    def restartcmd
-        [ command(:svc), "-t", self.service]
-    end
-
-    # The start command does nothing, service are automatically started
-    # when enabled by svscan. But, forces an enable if necessary
-    def start
-        # to start make sure the sevice is enabled
-        self.enable
-        # start is then automatic
-    end
-
-    def status
-        begin
-            output = svstat self.service
-            return :running if output =~ /\bup\b/
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error.new( "Could not get status for service %s: %s" % [ resource.ref, detail] )
-        end
-        return :stopped
-    end
-
-    # unfortunately it is not possible
-    # to stop without disabling the service
-    def stop
-        self.disable
-    end
-
-    # disable by stopping the service
-    # and removing the symlink so that svscan
-    # doesn't restart our service behind our back
-    def disable
-        # should stop the service
-        # stop the log subservice if any
-        log = File.join(self.service, "log")
-        texecute("stop log", [ command(:svc) , '-dx', log] ) if FileTest.directory?(log)
-        
-        # stop the main resource
-        texecute("stop", [command(:svc), '-dx', self.service] )
-
-        # unlink the daemon symlink to disable it
-        File.unlink(self.service) if FileTest.symlink?(self.service)
-    end
-
-    def enabled?
-        FileTest.symlink?(self.service)
-    end
-
-    def enable
-        File.symlink(self.daemon, self.service) if ! FileTest.symlink?(self.service)
-    end
-end
-
diff --git a/lib/puppet/provider/service/debian.rb b/lib/puppet/provider/service/debian.rb
deleted file mode 100755
index ca433cb..0000000
--- a/lib/puppet/provider/service/debian.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# Manage debian services.  Start/stop is the same as InitSvc, but enable/disable
-# is special.
-Puppet::Type.type(:service).provide :debian, :parent => :init do
-    desc "Debian's form of ``init``-style management.  The only difference
-        is that this supports service enabling and disabling via ``update-rc.d``."
-
-    commands :update => "/usr/sbin/update-rc.d"
-    defaultfor :operatingsystem => [:debian, :ubuntu]
-
-    def self.defpath
-        superclass.defpath
-    end
-
-    # Remove the symlinks
-    def disable
-        update "-f", @resource[:name], "remove"
-        update @resource[:name], "stop", "00", "1", "2", "3", "4", "5", "6", "."
-    end
-
-    def enabled?
-        output = update "-n", "-f", @resource[:name], "remove"
-
-        # If it's enabled, then it will print output showing removal of
-        # links.
-        if output =~ /etc\/rc[\dS].d\/S|not installed/
-            return :true
-        else
-            return :false
-        end
-    end
-
-    def enable
-        update "-f", @resource[:name], "remove"
-        update @resource[:name], "defaults"
-    end
-end
diff --git a/lib/puppet/provider/service/freebsd.rb b/lib/puppet/provider/service/freebsd.rb
deleted file mode 100644
index 95bde77..0000000
--- a/lib/puppet/provider/service/freebsd.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-# Manage FreeBSD services.
-Puppet::Type.type(:service).provide :freebsd, :parent => :init do
-    desc "FreeBSD's (and probably NetBSD?) form of ``init``-style service
-        management; uses ``rc.conf.d`` for service enabling and disabling."
- 
-    confine :operatingsystem => [:freebsd, :netbsd, :openbsd]
-
-    defaultfor :operatingsystem => :freebsd
-
-    @@rcconf_dir = '/etc/rc.conf.d'
-
-    def self.defpath
-        superclass.defpath
-    end
-    
-    # remove service file from rc.conf.d to disable it
-    def disable
-        rcfile = File.join(@@rcconf_dir, @model[:name])
-        if File.exists?(rcfile)
-            File.delete(rcfile)
-        end
-    end
-    
-    # if the service file exists in rc.conf.d then it's already enabled
-    def enabled?
-        rcfile = File.join(@@rcconf_dir, @model[:name])
-        if File.exists?(rcfile)
-            return :true
-        end
-
-        return :false
-    end
-    
-    # enable service by creating a service file under rc.conf.d with the
-    # proper contents
-    def enable
-        if not File.exists?(@@rcconf_dir)
-            Dir.mkdir(@@rcconf_dir)
-        end
-        rcfile = File.join(@@rcconf_dir, @model[:name])
-        open(rcfile, 'w') { |f| f << "%s_enable=\"YES\"\n" % @model[:name] }
-    end
-    
-    # Override stop/start commands to use one<cmd>'s and the avoid race condition
-    # where provider trys to stop/start the service before it is enabled
-    def startcmd
-        [self.initscript, :onestart]
-    end
-
-    def stopcmd
-        [self.initscript, :onestop]
-    end
-end
diff --git a/lib/puppet/provider/service/gentoo.rb b/lib/puppet/provider/service/gentoo.rb
deleted file mode 100644
index c5ba7b5..0000000
--- a/lib/puppet/provider/service/gentoo.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-# Manage gentoo services.  Start/stop is the same as InitSvc, but enable/disable
-# is special.
-Puppet::Type.type(:service).provide :gentoo, :parent => :init do
-    desc "Gentoo's form of ``init``-style service
-        management; uses ``rc-update`` for service enabling and disabling."
-
-    commands :update => "/sbin/rc-update"
-
-    confine :operatingsystem => :gentoo
-
-    defaultfor :operatingsystem => :gentoo
-
-    def self.defpath
-        superclass.defpath
-    end
-
-    def disable
-        begin
-            output = update :del, @resource[:name], :default
-        rescue Puppet::ExecutionFailure
-            raise Puppet::Error, "Could not disable %s: %s" %
-                [self.name, output]
-        end
-    end
-
-    def enabled?
-        begin
-            output = update :show
-        rescue Puppet::ExecutionFailure
-            return :false
-        end
-
-        line = output.split(/\n/).find { |l| l.include?(@resource[:name]) }
-
-        return :false unless line
-
-        # If it's enabled then it will print output showing service | runlevel
-        if output =~ /#{@resource[:name]}\s*|\s*default/
-            return :true
-        else
-            return :false
-        end
-    end
-
-    def enable
-        begin
-            output = update :add, @resource[:name], :default
-        rescue Puppet::ExecutionFailure
-            raise Puppet::Error, "Could not enable %s: %s" %
-                [self.name, output]
-        end
-    end
-end
-
-# $Id $
diff --git a/lib/puppet/provider/service/init.rb b/lib/puppet/provider/service/init.rb
deleted file mode 100755
index e95fbd0..0000000
--- a/lib/puppet/provider/service/init.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-# The standard init-based service type.  Many other service types are
-# customizations of this module.
-Puppet::Type.type(:service).provide :init, :parent => :base do
-    desc "Standard init service management.  This provider assumes that the
-        init script has no ``status`` command, because so few scripts do,
-        so you need to either provide a status command or specify via 
-        ``hasstatus`` that one already exists in the init script."
-
-    class << self
-        attr_accessor :defpath
-    end
-
-    case Facter["operatingsystem"].value
-    when "FreeBSD":
-        @defpath = ["/etc/rc.d", "/usr/local/etc/rc.d"]
-    when "HP-UX":
-        @defpath = "/sbin/init.d"
-    else
-        @defpath = "/etc/init.d"
-    end
-
-    # We can't confine this here, because the init path can be overridden.
-    #confine :exists => @defpath
-
-    # List all services of this type.
-    def self.instances
-        path = self.defpath
-        unless FileTest.directory?(path)
-            Puppet.notice "Service path %s does not exist" % path
-            next
-        end
-
-        check = [:ensure]
-
-        if public_method_defined? :enabled?
-            check << :enable
-        end
-
-        Dir.entries(path).reject { |e|
-            fullpath = File.join(path, e)
-            e =~ /^\./ or ! FileTest.executable?(fullpath)
-        }.collect do |name|
-            new(:name => name, :path => path)
-        end
-    end
-
-    # Mark that our init script supports 'status' commands.
-    def hasstatus=(value)
-        case value
-        when true, "true": @parameters[:hasstatus] = true
-        when false, "false": @parameters[:hasstatus] = false
-        else
-            raise Puppet::Error, "Invalid 'hasstatus' value %s" %
-                value.inspect
-        end
-    end
-
-    # Where is our init script?
-    def initscript
-        if defined? @initscript
-            return @initscript
-        else
-            @initscript = self.search(@resource[:name])
-        end
-    end
-
-    def restart
-        if @resource[:hasrestart] == :true
-            command = [self.initscript, :restart]
-            texecute("restart", command)
-        else
-            super
-        end
-    end
-
-    def search(name)
-        @resource[:path].each { |path|
-            fqname = File.join(path,name)
-            begin
-                stat = File.stat(fqname)
-            rescue
-                # should probably rescue specific errors...
-                self.debug("Could not find %s in %s" % [name,path])
-                next
-            end
-
-            # if we've gotten this far, we found a valid script
-            return fqname
-        }
-        @resource[:path].each { |path|
-            fqname_sh = File.join(path,"#{name}.sh")
-            begin
-                stat = File.stat(fqname_sh)
-            rescue
-                # should probably rescue specific errors...
-                self.debug("Could not find %s.sh in %s" % [name,path])
-                next
-            end
-
-            # if we've gotten this far, we found a valid script
-            return fqname_sh
-        }
-        raise Puppet::Error, "Could not find init script for '%s'" % name
-    end
-
-    # The start command is just the init scriptwith 'start'.
-    def startcmd
-        [self.initscript, :start]
-    end
-
-    # If it was specified that the init script has a 'status' command, then
-    # we just return that; otherwise, we return false, which causes it to
-    # fallback to other mechanisms.
-    def statuscmd
-        if @resource[:hasstatus] == :true
-            return [self.initscript, :status]
-        else
-            return false
-        end
-    end
-
-    # The stop command is just the init script with 'stop'.
-    def stopcmd
-        [self.initscript, :stop]
-    end
-end
-
diff --git a/lib/puppet/provider/service/redhat.rb b/lib/puppet/provider/service/redhat.rb
deleted file mode 100755
index faa7547..0000000
--- a/lib/puppet/provider/service/redhat.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-# Manage Red Hat services.  Start/stop uses /sbin/service and enable/disable uses chkconfig
-
-Puppet::Type.type(:service).provide :redhat, :parent => :init do
-    desc "Red Hat's (and probably many others) form of ``init``-style service
-        management; uses ``chkconfig`` for service enabling and disabling."
-
-    commands :chkconfig => "/sbin/chkconfig", :service => "/sbin/service"
- 
-    defaultfor :operatingsystem => [:redhat, :fedora, :suse, :centos, :sles]
-
-    def self.defpath
-        superclass.defpath
-    end
-
-    # Remove the symlinks
-    def disable
-        begin
-            output = chkconfig(@resource[:name], :off)
-        rescue Puppet::ExecutionFailure
-            raise Puppet::Error, "Could not disable %s: %s" %
-                [self.name, output]
-        end
-    end
-
-    def enabled?
-        begin
-            output = chkconfig(@resource[:name])
-        rescue Puppet::ExecutionFailure
-            return :false
-        end
-
-        # If it's disabled on SuSE, then it will print output showing "off"
-        # at the end
-        if output =~ /.* off$/
-            return :false
-        end
-	
-        return :true
-    end
-
-    # Don't support them specifying runlevels; always use the runlevels
-    # in the init scripts.
-    def enable
-        begin
-            output = chkconfig(@resource[:name], :on)
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not enable %s: %s" %
-                [self.name, detail]
-        end
-    end
- 
-    def restart
-        if @resource[:hasrestart] == :true
-              service(@resource[:name], "restart")
-        else
-           super
-        end
-    end
-
-    def status
-        if @resource[:hasstatus] == :true
-              begin 
-                  service(@resource[:name], "status")
-                  return :running
-              rescue 
-                  return :stopped
-              end 
-        else
-           super
-        end
-    end
-
-    def start
-        service(@resource[:name], "start")
-    end
-
-    def stop
-        service(@resource[:name], "stop")
-    end
-
-end
-
diff --git a/lib/puppet/provider/service/runit.rb b/lib/puppet/provider/service/runit.rb
deleted file mode 100644
index 230fa75..0000000
--- a/lib/puppet/provider/service/runit.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-# Daemontools service management
-#
-# author Brice Figureau <brice-puppet at daysofwonder.com>
-Puppet::Type.type(:service).provide :runit, :parent => :daemontools do
-    desc "Runit service management.
-    This provider manages daemons running supervised by Runit.
-    It tries to detect the service directory, with by order of preference:
-     * /service
-     * /var/service
-     * /etc/service
-    The daemon directory should be placed in a directory that can be 
-    by default in:
-     * /etc/sv
-    or this can be overriden in the service resource parameters:
-    service {
-     \"myservice\":
-       provider => \"runit\", path => \"/path/to/daemons\";
-    }
-
-    This provider supports out of the box:
-     * start/stop
-     * enable/disable
-     * restart
-     * status"
-
-    commands :sv => "/usr/bin/sv"
-
-    class << self
-        # this is necessary to autodetect a valid resource
-        # default path, since there is no standard for such directory.
-        def defpath
-            unless defined?(@defpath) and @defpath
-                ["/etc/sv", "/var/lib/service"].each do |path|
-                    if FileTest.exist?(path)
-                        @defpath = path
-                        break
-                    end
-                end
-                raise "Could not find the daemon directory (tested [/var/lib/service,/etc])" unless @defpath
-            end
-            @defpath
-        end
-    end
-
-    # find the service dir on this node
-    def servicedir
-      unless defined?(@servicedir) and @servicedir
-        ["/service", "/etc/service","/var/service"].each do |path|
-            if FileTest.exist?(path)
-                @servicedir = path
-                break
-            end
-        end
-        raise "Could not find service directory" unless @servicedir
-      end
-      @servicedir
-    end
-
-    def restartcmd
-        [ command(:sv), "restart", self.service]
-    end
-
-    def status
-        begin
-            output = sv "status", self.daemon
-            return :running if output =~ /^run: /
-        rescue Puppet::ExecutionFailure => detail
-            unless detail.message =~ /(warning: |runsv not running$)/
-                raise Puppet::Error.new( "Could not get status for service %s: %s" % [ resource.ref, detail] )
-            end
-        end
-        return :stopped
-    end
-
-    # relay to the stopcmd
-    def stop
-        ucommand( :stop )
-    end
-
-    def stopcmd
-        [ command(:sv), "stop", self.service]
-    end
-
-    # disable by removing the symlink so that runit
-    # doesn't restart our service behind our back
-    # note that runit doesn't need to perform a stop
-    # before a disable
-    def disable
-        # unlink the daemon symlink to disable it
-        File.unlink(self.service) if FileTest.symlink?(self.service)
-    end
-end
-
diff --git a/lib/puppet/provider/service/smf.rb b/lib/puppet/provider/service/smf.rb
deleted file mode 100755
index ab1fe88..0000000
--- a/lib/puppet/provider/service/smf.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-# Solaris 10 SMF-style services.
-Puppet::Type.type(:service).provide :smf, :parent => :base do
-    desc "Support for Sun's new Service Management Framework.  Starting a service
-        is effectively equivalent to enabling it, so there is only support
-        for starting and stopping services, which also enables and disables them,
-        respectively."
-
-    defaultfor :operatingsystem => :solaris
-
-    confine :operatingsystem => :solaris
-
-    commands :adm => "/usr/sbin/svcadm", :svcs => "/usr/bin/svcs"
-
-    def enable
-        self.start
-    end
-
-    def enabled?
-        case self.status
-        when :running:
-            return :true
-        else
-            return :false
-        end
-    end
-
-    def disable
-        self.stop
-    end
-
-    def restartcmd
-        [command(:adm), :restart, @resource[:name]]
-    end
-
-    def startcmd
-        [command(:adm), :enable, @resource[:name]]
-    end
-
-    def status
-        if @resource[:status]
-            super
-            return
-        end
-        begin
-            output = svcs "-l", @resource[:name]
-        rescue Puppet::ExecutionFailure
-            warning "Could not get status on service %s" % self.name
-            return :stopped
-        end
-
-        output.split("\n").each { |line|
-            var = nil
-            value = nil
-            if line =~ /^(\w+)\s+(.+)/
-                var = $1
-                value = $2
-            else
-                Puppet.err "Could not match %s" % line.inspect
-                next
-            end
-            case var
-            when "state":
-                case value
-                when "online":
-                    #self.warning "matched running %s" % line.inspect
-                    return :running
-                when "offline", "disabled", "uninitialized"
-                    #self.warning "matched stopped %s" % line.inspect
-                    return :stopped
-                when "legacy_run":
-                    raise Puppet::Error,
-                        "Cannot manage legacy services through SMF"
-                else
-                    raise Puppet::Error,
-                        "Unmanageable state '%s' on service %s" %
-                        [value, self.name]
-                end
-            end
-        }
-    end
-
-    def stopcmd
-        [command(:adm), :disable, @resource[:name]]
-    end
-end
-
diff --git a/lib/puppet/provider/ssh_authorized_key/parsed.rb b/lib/puppet/provider/ssh_authorized_key/parsed.rb
deleted file mode 100644
index 5411a1f..0000000
--- a/lib/puppet/provider/ssh_authorized_key/parsed.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-require 'puppet/provider/parsedfile'
-
-Puppet::Type.type(:ssh_authorized_key).provide(:parsed,
-    :parent => Puppet::Provider::ParsedFile,
-    :filetype => :flat,
-    :default_target => ''
-) do
-    desc "Parse and generate authorized_keys files for SSH."
-
-    text_line :comment, :match => /^#/
-    text_line :blank, :match => /^\s+/
-
-    record_line :parsed,
-        :fields   => %w{options type key name},
-        :optional => %w{options},
-        :rts => /^\s+/,
-        :match    => /^(?:(.+) )?(ssh-dss|ssh-rsa) ([^ ]+)(?: (.+))?$/,
-        :post_parse => proc { |record|
-            if record[:options].nil?
-                record[:options] = [:absent]
-            else
-                record[:options] = record[:options].split(',')
-            end
-        },
-        :pre_gen => proc { |record|
-            if record[:options].include?(:absent)
-                record[:options] = ""
-            else
-                record[:options] = record[:options].join(',')
-            end
-        }
-
-    record_line :key_v1,
-        :fields   => %w{options bits exponent modulus name},
-        :optional => %w{options},
-        :rts      => /^\s+/,
-        :match    => /^(?:(.+) )?(\d+) (\d+) (\d+)(?: (.+))?$/
-
-    def prefetch
-        # This was done in the type class but path expansion was failing for
-        # not yet existing users, the only workaround I found was to move that
-        # in the provider.
-        if user = @resource.should(:user)
-            target = File.expand_path("~%s/.ssh/authorized_keys" % user)
-            @property_hash[:target] = target
-            @resource[:target] = target
-        end
-
-        super
-    end
-
-    def flush
-        # As path expansion had to be moved in the provider, we cannot generate new file
-        # resources and thus have to chown and chmod here. It smells hackish.
-        
-        # Create target's parent directory if nonexistant
-        if target = @property_hash[:target]
-            dir = File.dirname(@property_hash[:target])
-            if not File.exist? dir
-                Puppet.debug("Creating directory %s which did not exist" % dir)
-                Dir.mkdir(dir, 0700)
-            end
-        end
-
-        # Generate the file
-        super
-
-        # Ensure correct permissions
-        if target and user = @property_hash[:user]
-            File.chown(Puppet::Util.uid(user), nil, dir)
-            File.chown(Puppet::Util.uid(user), nil, @property_hash[:target])
-        end
-    end
-end
-
diff --git a/lib/puppet/provider/sshkey/parsed.rb b/lib/puppet/provider/sshkey/parsed.rb
deleted file mode 100755
index 6f7d98f..0000000
--- a/lib/puppet/provider/sshkey/parsed.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-require 'puppet/provider/parsedfile'
-
-known = nil
-case Facter.value(:operatingsystem)
-when "Darwin": known = "/etc/ssh_known_hosts"
-else
-    known = "/etc/ssh/ssh_known_hosts"
-end
-
-Puppet::Type.type(:sshkey).provide(:parsed,
-    :parent => Puppet::Provider::ParsedFile,
-    :default_target => known,
-    :filetype => :flat
-) do
-    desc "Parse and generate host-wide known hosts files for SSH."
-
-    text_line :comment, :match => /^#/
-    text_line :blank, :match => /^\s+/
-
-    record_line :parsed, :fields => %w{name type key},
-        :post_parse => proc { |hash|
-            if hash[:name] =~ /,/
-                names = hash[:name].split(",")
-                hash[:name] = names.shift
-                hash[:alias] = names
-            end
-        },
-        :pre_gen => proc { |hash|
-            if hash[:alias]
-                names = [hash[:name], hash[:alias]].flatten
-                
-                hash[:name] = [hash[:name], hash[:alias]].flatten.join(",")
-                hash.delete(:alias)
-            end
-        }
-end
-
diff --git a/lib/puppet/provider/user/directoryservice.rb b/lib/puppet/provider/user/directoryservice.rb
deleted file mode 100644
index 68cb798..0000000
--- a/lib/puppet/provider/user/directoryservice.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-#  Created by Jeff McCune on 2007-07-22
-#  Copyright (c) 2007. All rights reserved.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation (version 2 of the License)
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston MA  02110-1301 USA
-
-require 'puppet/provider/nameservice/directoryservice'
-
-Puppet::Type.type(:user).provide :directoryservice, :parent => Puppet::Provider::NameService::DirectoryService do
-    desc "User management using DirectoryService on OS X."
-
-    commands :dscl => "/usr/bin/dscl"
-    confine :operatingsystem => :darwin
-    
-    # JJM: DirectoryService can manage passwords.
-    #      This needs to be a special option to dscl though (-passwd)
-    has_feature :manages_passwords
-    
-    # JJM: comment matches up with the /etc/passwd concept of an user
-    options :comment, :key => "realname"
-    options :password, :key => "passwd"
-    
-    autogen_defaults :home => "/var/empty", :shell => "/usr/bin/false"
-
-    verify :gid, "GID must be an integer" do |value|
-        value.is_a? Integer
-    end
-
-    verify :uid, "UID must be an integer" do |value|
-        value.is_a? Integer
-    end
-    
-    def autogen_comment
-        return @resource[:name].capitalize
-    end
-    
-    # The list of all groups the user is a member of.  Different
-    # user mgmt systems will need to override this method.
-    # JJM: FIXME: Override this method...
-    def groups
-        groups = []
-
-        # user = @resource[:name]
-        # # Retrieve them all from netinfo
-        # open("| #{command(:nireport)} / /groups name users") do |file|
-        #     file.each do |line|
-        #         name, members = line.split(/\s+/)
-        #         next unless members
-        #         next if members =~ /NoValue/
-        #         members = members.split(",")
-        # 
-        #         if members.include? user
-        #             groups << name
-        #         end
-        #     end
-        # end
-
-        groups.join(",")
-    end
-
-    # This is really lame.  We have to iterate over each
-    # of the groups and add us to them.
-    def groups=(groups)
-        # case groups
-        # when Fixnum:
-        #     groups = [groups.to_s]
-        # when String
-        #     groups = groups.split(/\s*,\s*/)
-        # else
-        #     raise Puppet::DevError, "got invalid groups value %s of type %s" % [groups.class, groups]
-        # end
-        # # Get just the groups we need to modify
-        # diff = groups - (@is || [])
-        # 
-        # data = {}
-        # open("| #{command(:nireport)} / /groups name users") do |file|
-        #     file.each do |line|
-        #         name, members = line.split(/\s+/)
-        # 
-        #         if members.nil? or members =~ /NoValue/
-        #             data[name] = []
-        #         else
-        #             # Add each diff group's current members
-        #             data[name] = members.split(/,/)
-        #         end
-        #     end
-        # end
-        # 
-        # user = @resource[:name]
-        # data.each do |name, members|
-        #     if members.include? user and groups.include? name
-        #         # I'm in the group and should be
-        #         next
-        #     elsif members.include? user
-        #         # I'm in the group and shouldn't be
-        #         setuserlist(name, members - [user])
-        #     elsif groups.include? name
-        #         # I'm not in the group and should be
-        #         setuserlist(name, members + [user])
-        #     else
-        #         # I'm not in the group and shouldn't be
-        #         next
-        #     end
-        # end
-    end
-    
-    
-end
diff --git a/lib/puppet/provider/user/hpux.rb b/lib/puppet/provider/user/hpux.rb
deleted file mode 100644
index 672b77d..0000000
--- a/lib/puppet/provider/user/hpux.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-Puppet::Type.type(:user).provide :hpuxuseradd, :parent => :useradd do
-    desc "User management for hp-ux! Undocumented switch to special usermod because HP-UX regular usermod is TOO STUPID to change stuff while the user is logged in."
-
-    defaultfor :operatingsystem => "hp-ux"
-    confine :operatingsystem => "hp-ux"
-    
-    commands :modify => "/usr/sam/lbin/usermod.sam", :delete => "/usr/sam/lbin/userdel.sam", :add => "/usr/sbin/useradd"
-    options :comment, :method => :gecos
-    options :groups, :flag => "-G"
-    options :home, :flag => "-d", :method => :dir
-
-    verify :gid, "GID must be an integer" do |value|
-        value.is_a? Integer
-    end
-
-    verify :groups, "Groups must be comma-separated" do |value|
-        value !~ /\s/
-    end
-
-    has_features :manages_homedir, :allows_duplicates
-
-    def deletecmd
-	super.insert(1,"-F")
-    end
-
-    def modifycmd(param,value)
-	super.insert(1,"-F")
-    end
-
-end
diff --git a/lib/puppet/provider/user/ldap.rb b/lib/puppet/provider/user/ldap.rb
deleted file mode 100644
index 2e200a8..0000000
--- a/lib/puppet/provider/user/ldap.rb
+++ /dev/null
@@ -1,133 +0,0 @@
-require 'puppet/provider/ldap'
-
-Puppet::Type.type(:user).provide :ldap, :parent => Puppet::Provider::Ldap do
-    desc "User management via ``ldap``.  This provider requires that you
-        have valid values for all of the ldap-related settings,
-        including ``ldapbase``.  You will also almost definitely need settings
-        for ``ldapuser`` and ``ldappassword``, so that your clients can write
-        to ldap.
-        
-        Note that this provider will automatically generate a UID for you if
-        you do not specify one, but it is a potentially expensive operation,
-        as it iterates across all existing users to pick the appropriate next
-        one."
-
-    confine :feature => :ldap, :false => (Puppet[:ldapuser] == "")
-
-    has_feature :manages_passwords
-
-    manages(:posixAccount, :person).at("ou=People").named_by(:uid).and.maps :name => :uid,
-        :password => :userPassword,
-        :comment => :cn,
-        :uid => :uidNumber,
-        :gid => :gidNumber,
-        :home => :homeDirectory,
-        :shell => :loginShell
-
-    # Use the last field of a space-separated array as
-    # the sn.  LDAP requires a surname, for some stupid reason.
-    manager.generates(:sn).from(:cn).with do |cn|
-        x = 1
-        cn[0].split(/\s+/)[-1]
-    end
-
-    # Find the next uid after the current largest uid.
-    provider = self
-    manager.generates(:uidNumber).with do 
-        largest = 500
-        if existing = provider.manager.search
-            existing.each do |hash|
-                next unless value = hash[:uid]
-                num = value[0].to_i
-                if num > largest
-                    largest = num
-                end
-            end
-        end
-        largest + 1
-    end
-
-    # Convert our gid to a group name, if necessary.
-    def gid=(value)
-        unless [Fixnum, Bignum].include?(value.class)
-            value = group2id(value)
-        end
-
-        @property_hash[:gid] = value
-    end
-
-    # Find all groups this user is a member of in ldap.
-    def groups
-        # We want to cache the current result, so we know if we
-        # have to remove old values.
-        unless @property_hash[:groups]
-            unless result = group_manager.search("memberUid=%s" % name)
-                return @property_hash[:groups] = :absent
-            end
-
-            return @property_hash[:groups] = result.collect { |r| r[:name] }.join(",")
-        end
-        return @property_hash[:groups]
-    end
-
-    # Manage the list of groups this user is a member of.
-    def groups=(values)
-        should = values.split(",")
-
-        if groups() == :absent
-            is = []
-        else
-            is = groups().split(",")
-        end
-
-        modes = {}
-        [is, should].flatten.uniq.each do |group|
-            # Skip it when they're in both
-            next if is.include?(group) and should.include?(group)
-
-            # We're adding a group.
-            modes[group] = :add and next unless is.include?(group)
-
-            # We're removing a group.
-            modes[group] = :remove and next unless should.include?(group)
-        end
-
-        modes.each do |group, form|
-            self.fail "Could not find ldap group %s" % group unless ldap_group = group_manager.find(group)
-
-            current = ldap_group[:members]
-
-            if form == :add
-                if current.is_a?(Array) and ! current.empty?
-                    new = current + [name]
-                else
-                    new = [name]
-                end
-            else
-                new = current - [name]
-                new = :absent if new.empty?
-            end
-
-            group_manager.update(group, {:ensure => :present, :members => current}, {:ensure => :present, :members => new})
-        end
-    end
-
-    # Convert a gropu name to an id.
-    def group2id(group)
-        Puppet::Type.type(:group).provider(:ldap).name2id(group)
-    end
-
-    private
-
-    def group_manager
-        Puppet::Type.type(:group).provider(:ldap).manager
-    end
-
-    def group_properties(values)
-        if values.empty? or values == :absent
-            {:ensure => :present}
-        else
-            {:ensure => :present, :members => values}
-        end
-    end
-end
diff --git a/lib/puppet/provider/user/netinfo.rb b/lib/puppet/provider/user/netinfo.rb
deleted file mode 100644
index fccc6c2..0000000
--- a/lib/puppet/provider/user/netinfo.rb
+++ /dev/null
@@ -1,105 +0,0 @@
-# Manage NetInfo POSIX objects.  Probably only used on OS X, but I suppose
-# it could be used elsewhere.
-require 'puppet/provider/nameservice/netinfo'
-
-Puppet::Type.type(:user).provide :netinfo, :parent => Puppet::Provider::NameService::NetInfo do
-    desc "User management in NetInfo.  Note that NetInfo is not smart enough to fill in default information
-        for users, so this provider will use default settings for home (``/var/empty``), shell (``/usr/bin/false``),
-        comment (the user name, capitalized), and password ('********').  These defaults are only used when the user is created.
-        Note that password management probably does not really work -- OS X does not store the password in NetInfo itself,
-        yet we cannot figure out how to store the encrypted password where OS X will look for it.  The main reason the password
-        support is even there is so that a default password is created, which effectively locks people out, even if it does not
-        enable us to set a password."
-    commands :nireport => "nireport", :niutil => "niutil"
-
-    options :comment, :key => "realname"
-    options :password, :key => "passwd"
-
-    defaultfor :operatingsystem => :darwin
-
-    autogen_defaults :home => "/var/empty", :shell => "/usr/bin/false", :password => '********'
-
-    has_feature :manages_passwords
-
-    verify :gid, "GID must be an integer" do |value|
-        value.is_a? Integer
-    end
-
-    verify :uid, "UID must be an integer" do |value|
-        value.is_a? Integer
-    end
-
-    def autogen_comment
-        return @resource[:name].capitalize
-    end
-
-    # The list of all groups the user is a member of.  Different
-    # user mgmt systems will need to override this method.
-    def groups
-        groups = []
-
-        user = @resource[:name]
-        # Retrieve them all from netinfo
-        open("| #{command(:nireport)} / /groups name users") do |file|
-            file.each do |line|
-                name, members = line.split(/\s+/)
-                next unless members
-                next if members =~ /NoValue/
-                members = members.split(",")
-
-                if members.include? user
-                    groups << name
-                end
-            end
-        end
-
-        groups.join(",")
-    end
-
-    # This is really lame.  We have to iterate over each
-    # of the groups and add us to them.
-    def groups=(groups)
-        case groups
-        when Fixnum:
-            groups = [groups.to_s]
-        when String
-            groups = groups.split(/\s*,\s*/)
-        else
-            raise Puppet::DevError, "got invalid groups value %s of type %s" % [groups.class, groups]
-        end
-        # Get just the groups we need to modify
-        diff = groups - (@is || [])
-
-        data = {}
-        open("| #{command(:nireport)} / /groups name users") do |file|
-            file.each do |line|
-                name, members = line.split(/\s+/)
-
-                if members.nil? or members =~ /NoValue/
-                    data[name] = []
-                else
-                    # Add each diff group's current members
-                    data[name] = members.split(/,/)
-                end
-            end
-        end
-
-        user = @resource[:name]
-        data.each do |name, members|
-            if members.include? user and groups.include? name
-                # I'm in the group and should be
-                next
-            elsif members.include? user
-                # I'm in the group and shouldn't be
-                setuserlist(name, members - [user])
-            elsif groups.include? name
-                # I'm not in the group and should be
-                setuserlist(name, members + [user])
-            else
-                # I'm not in the group and shouldn't be
-                next
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/provider/user/pw.rb b/lib/puppet/provider/user/pw.rb
deleted file mode 100644
index a2fb52f..0000000
--- a/lib/puppet/provider/user/pw.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require 'puppet/provider/nameservice/pw'
-
-Puppet::Type.type(:user).provide :pw, :parent => Puppet::Provider::NameService::PW do
-    desc "User management via ``pw`` on FreeBSD."
-
-    commands :pw => "pw"
-    has_features :manages_homedir, :allows_duplicates
-
-    defaultfor :operatingsystem => :freebsd
-
-    options :home, :flag => "-d", :method => :dir
-    options :comment, :method => :gecos
-    options :groups, :flag => "-G"
-
-    verify :gid, "GID must be an integer" do |value|
-        value.is_a? Integer
-    end
-
-    verify :groups, "Groups must be comma-separated" do |value|
-        value !~ /\s/
-    end
-
-    def addcmd
-        cmd = [command(:pw), "useradd", @resource[:name]]
-        @resource.class.validproperties.each do |property|
-            next if property == :ensure
-            # the value needs to be quoted, mostly because -c might
-            # have spaces in it
-            if value = @resource.should(property) and value != ""
-                cmd << flag(property) << value
-            end
-        end
-
-        if @resource.allowdupe?
-            cmd << "-o"
-        end
-
-        if @resource.managehome?
-            cmd << "-m"
-        end
-
-        return cmd
-    end
-end
-
diff --git a/lib/puppet/provider/user/user_role_add.rb b/lib/puppet/provider/user/user_role_add.rb
deleted file mode 100644
index 00fc24b..0000000
--- a/lib/puppet/provider/user/user_role_add.rb
+++ /dev/null
@@ -1,156 +0,0 @@
-require 'puppet/util/user_attr'
-
-Puppet::Type.type(:user).provide :user_role_add, :parent => :useradd do
-
-    desc "User management inherits ``useradd`` and adds logic to manage roles on Solaris using roleadd."
-
-    defaultfor :operatingsystem => :solaris
-
-    commands :add => "useradd", :delete => "userdel", :modify => "usermod", :role_add => "roleadd", :role_delete => "roledel", :role_modify => "rolemod"
-    options :home, :flag => "-d", :method => :dir
-    options :comment, :method => :gecos
-    options :groups, :flag => "-G"
-    options :roles, :flag => "-R"
-    options :auths, :flag => "-A"
-    options :profiles, :flag => "-P"
-
-    verify :gid, "GID must be an integer" do |value|
-        value.is_a? Integer
-    end
-
-    verify :groups, "Groups must be comma-separated" do |value|
-        value !~ /\s/
-    end
-
-    has_features :manages_homedir, :allows_duplicates, :manages_solaris_rbac
-
-    if Puppet.features.libshadow?
-        has_feature :manages_passwords
-    end
-
-    #must override this to hand the keyvalue pairs
-    def add_properties
-        cmd = []
-        Puppet::Type.type(:user).validproperties.each do |property|
-            next if property == :ensure
-            # the value needs to be quoted, mostly because -c might
-            # have spaces in it
-            if value = @resource.should(property) and value != ""
-                if property == :keys
-                    cmd += build_keys_cmd(value)
-                else
-                    cmd << flag(property) << value
-                end
-            end
-        end
-        cmd
-    end
-
-    def user_attributes
-        @user_attributes ||= UserAttr.get_attributes_by_name(@resource[:name])
-    end
-
-    def flush
-        @user_attributes = nil
-    end
-
-    def command(cmd)
-        if is_role? or (!exists? and @resource[:ensure] == :role)
-            cmd = ("role_" + cmd.to_s).intern
-        end
-        super(cmd)
-    end
-
-    def is_role?
-        user_attributes and user_attributes[:type] == "role"
-    end
-
-    def run(cmd, msg)
-        begin
-            execute(cmd)
-        rescue Puppet::ExecutionFailure => detail
-            raise Puppet::Error, "Could not %s %s %s: %s" %
-                [msg, @resource.class.name, @resource.name, detail]
-        end
-    end
-
-    def transition(type)
-        cmd = [command(:modify)]
-        cmd << "-K" << "type=#{type}"
-        cmd += add_properties
-        cmd << @resource[:name]
-    end
-
-    def create
-        if is_role?
-            run(transition("normal"), "transition role to")
-        else
-            run(addcmd, "create")
-        end
-    end
-
-    def destroy
-        run(deletecmd, "delete "+ (is_role? ? "role" : "user"))
-    end
-
-    def create_role
-        if exists? and !is_role?
-            run(transition("role"), "transition user to")
-        else
-            run(addcmd, "create role")
-        end
-    end
-
-    def roles
-        if user_attributes
-            user_attributes[:roles]
-        end
-    end
-
-    def auths
-        if user_attributes
-            user_attributes[:auths]
-        end
-    end
-
-    def profiles
-        if user_attributes
-            user_attributes[:profiles]
-        end
-    end
-
-    def project
-        if user_attributes
-            user_attributes[:project]
-        end
-    end
-
-    def managed_attributes
-        [:name, :type, :roles, :auths, :profiles, :project]
-    end
-
-    def remove_managed_attributes
-        managed = managed_attributes
-        user_attributes.select { |k,v| !managed.include?(k) }.inject({}) { |hash, array| hash[array[0]] = array[1]; hash }
-    end
-
-    def keys
-        if user_attributes
-            #we have to get rid of all the keys we are managing another way
-            remove_managed_attributes
-        end
-    end
-
-    def build_keys_cmd(keys_hash)
-        cmd = []
-        keys_hash.each do |k,v|
-            cmd << "-K" << "#{k}=#{v}"
-        end
-        cmd
-    end
-
-    def keys=(keys_hash)
-        run([command(:modify)] + build_keys_cmd(keys_hash) << @resource[:name], "modify attribute key pairs")
-    end
-end
-
diff --git a/lib/puppet/provider/user/useradd.rb b/lib/puppet/provider/user/useradd.rb
deleted file mode 100644
index 6996dd6..0000000
--- a/lib/puppet/provider/user/useradd.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-require 'puppet/provider/nameservice/objectadd'
-
-Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameService::ObjectAdd do
-    desc "User management via ``useradd`` and its ilk.  Note that you will need to install the ``Shadow Password`` Ruby library often known as ruby-libshadow to manage user passwords."
-
-    commands :add => "useradd", :delete => "userdel", :modify => "usermod"
-
-    options :home, :flag => "-d", :method => :dir
-    options :comment, :method => :gecos
-    options :groups, :flag => "-G"
-
-    verify :gid, "GID must be an integer" do |value|
-        value.is_a? Integer
-    end
-
-    verify :groups, "Groups must be comma-separated" do |value|
-        value !~ /\s/
-    end
-
-    has_features :manages_homedir, :allows_duplicates
-
-    if Puppet.features.libshadow?
-        has_feature :manages_passwords
-    end
-
-    def check_allow_dup
-        @resource.allowdupe? ? ["-o"] : []
-    end
-
-    def check_manage_home
-        cmd = []
-        if @resource.managehome?
-            cmd << "-m"
-        elsif %w{Fedora RedHat}.include?(Facter.value("operatingsystem"))
-            cmd << "-M"
-        end
-        cmd
-    end
-
-    def add_properties
-        cmd = []
-        Puppet::Type.type(:user).validproperties.each do |property|
-            next if property == :ensure
-            # the value needs to be quoted, mostly because -c might
-            # have spaces in it
-            if value = @resource.should(property) and value != ""
-                cmd << flag(property) << value
-            end
-        end
-        cmd
-    end
-
-    def addcmd
-        cmd = [command(:add)]
-        cmd += add_properties
-        cmd += check_allow_dup
-        cmd += check_manage_home
-        cmd << @resource[:name]
-    end
-
-    # Retrieve the password using the Shadow Password library
-    def password
-        if ent = Shadow::Passwd.getspnam(@resource.name)
-            return ent.sp_pwdp
-        else
-            return :absent
-        end
-    end
-end
-
diff --git a/lib/puppet/provider/zone/solaris.rb b/lib/puppet/provider/zone/solaris.rb
deleted file mode 100644
index be2dd97..0000000
--- a/lib/puppet/provider/zone/solaris.rb
+++ /dev/null
@@ -1,243 +0,0 @@
-Puppet::Type.type(:zone).provide(:solaris) do
-    desc "Provider for Solaris Zones."
-
-    commands :adm => "/usr/sbin/zoneadm", :cfg => "/usr/sbin/zonecfg"
-    defaultfor :operatingsystem => :solaris
-
-    mk_resource_methods
-
-    # Convert the output of a list into a hash
-    def self.line2hash(line)
-        fields = [:id, :name, :ensure, :path]
-
-        properties = {}
-        line.split(":").each_with_index { |value, index|
-            properties[fields[index]] = value
-        }
-
-        # Configured but not installed zones do not have IDs
-        if properties[:id] == "-"
-            properties.delete(:id)
-        end
-
-        properties[:ensure] = symbolize(properties[:ensure])
-
-        return properties
-    end
-
-    def self.instances
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = adm(:list, "-cp").split("\n").collect do |line|
-            new(line2hash(line))
-        end
-    end
-
-    # Perform all of our configuration steps.
-    def configure
-        # If the thing is entirely absent, then we need to create the config.
-        str = %{create -b
-set zonepath=%s
-} % @resource[:path]
-
-        # Then perform all of our configuration steps.  It's annoying
-        # that we need this much internal info on the resource.
-        @resource.send(:properties).each do |property|
-            if property.is_a? ZoneConfigProperty and ! property.insync?(properties[property.name])
-                str += property.configtext + "\n"
-            end
-        end
-
-        str += "commit\n"
-        setconfig(str)
-    end
-
-    def destroy
-        zonecfg :delete, "-F"
-    end
-
-    def exists?
-        properties[:ensure] != :absent
-    end
-
-    # Clear out the cached values.
-    def flush
-        @property_hash.clear
-    end
-
-    def install
-        zoneadm :install
-    end
-
-    # Look up the current status.
-    def properties
-        if @property_hash.empty?
-            @property_hash = status || {}
-            if @property_hash.empty?
-                @property_hash[:ensure] = :absent
-            else
-                @resource.class.validproperties.each do |name|
-                    @property_hash[name] ||= :absent
-                end
-            end
-
-        end
-        @property_hash.dup
-    end
-
-    # We need a way to test whether a zone is in process.  Our 'ensure'
-    # property models the static states, but we need to handle the temporary ones.
-    def processing?
-        if hash = status()
-            case hash[:ensure]
-            when "incomplete", "ready", "shutting_down"
-                true
-            else
-                false
-            end
-        else
-            false
-        end
-    end
-
-    # Collect the configuration of the zone.
-    def getconfig
-        output = zonecfg :info
-
-        name = nil
-        current = nil
-        hash = {}
-        output.split("\n").each do |line|
-            case line
-            when /^(\S+):\s*$/:
-                name = $1
-                current = nil # reset it
-            when /^(\S+):\s*(.+)$/:
-                hash[$1.intern] = $2
-            when /^\s+(\S+):\s*(.+)$/:
-                if name
-                    unless hash.include? name
-                        hash[name] = []
-                    end
-
-                    unless current
-                        current = {}
-                        hash[name] << current
-                    end
-                    current[$1.intern] = $2
-                else
-                    err "Ignoring '%s'" % line
-                end
-            else
-                debug "Ignoring zone output '%s'" % line
-            end
-        end
-
-        return hash
-    end
-
-    # Execute a configuration string.  Can't be private because it's called
-    # by the properties.
-    def setconfig(str)
-        command = "#{command(:cfg)} -z %s -f -" % @resource[:name]
-        debug "Executing '%s' in zone %s with '%s'" % [command, @resource[:name], str]
-        IO.popen(command, "w") do |pipe|
-            pipe.puts str
-        end
-
-        unless $? == 0
-            raise ArgumentError, "Failed to apply configuration"
-        end
-    end
-
-    def start
-        # Check the sysidcfg stuff
-        if cfg = @resource[:sysidcfg]
-            path = File.join(@resource[:path], "root", "etc", "sysidcfg")
-
-            unless File.exists?(path)
-                begin
-                    File.open(path, "w", 0600) do |f|
-                        f.puts cfg
-                    end
-                rescue => detail
-                    if Puppet[:debug]
-                        puts detail.stacktrace
-                    end
-                    raise Puppet::Error, "Could not create sysidcfg: %s" % detail
-                end
-            end
-        end
-
-        zoneadm :boot
-    end
-
-    # Return a hash of the current status of this zone.
-    def status
-        begin
-            output = adm "-z", @resource[:name], :list, "-p"
-        rescue Puppet::ExecutionFailure
-            return nil
-        end
-
-        main = self.class.line2hash(output.chomp)
-
-        # Now add in the configuration information
-        config_status.each do |name, value|
-            main[name] = value
-        end
-
-        main
-    end
-
-    def stop
-        zoneadm :halt
-    end
-
-    def unconfigure
-        zonecfg :delete, "-F"
-    end
-
-    def uninstall
-        zoneadm :uninstall, "-F"
-    end
-
-    private
-
-    # Turn the results of getconfig into status information.
-    def config_status
-        config = getconfig()
-        result = {}
-
-        result[:autoboot] = config[:autoboot] ? config[:autoboot].intern : :absent
-        result[:pool] = config[:pool]
-        result[:shares] = config[:shares]
-        if dir = config["inherit-pkg-dir"]
-            result[:inherit] = dir.collect { |dirs| dirs[:dir] }
-        end
-        if net = config["net"]
-            result[:ip] = net.collect { |params| "%s:%s" % [params[:physical], params[:address]] }
-        end
-
-        result
-    end
-
-    def zoneadm(*cmd)
-        begin
-            adm("-z", @resource[:name], *cmd)
-        rescue Puppet::ExecutionFailure => detail
-            self.fail "Could not %s zone: %s" % [cmd[0], detail]
-        end
-    end
-
-    def zonecfg(*cmd)
-        # You apparently can't get the configuration of the global zone
-        return "" if self.name == "global"
-
-        begin
-            cfg("-z", self.name, *cmd)
-        rescue Puppet::ExecutionFailure => detail
-            self.fail "Could not %s zone: %s" % [cmd[0], detail]
-        end
-    end
-end
-
diff --git a/lib/puppet/rails.rb b/lib/puppet/rails.rb
deleted file mode 100644
index a021c77..0000000
--- a/lib/puppet/rails.rb
+++ /dev/null
@@ -1,136 +0,0 @@
-# Load the appropriate libraries, or set a class indicating they aren't available
-
-require 'facter'
-require 'puppet'
-
-module Puppet::Rails
-
-    def self.connect
-        # This global init does not work for testing, because we remove
-        # the state dir on every test.
-        return if ActiveRecord::Base.connected?
-
-        Puppet.settings.use(:main, :rails, :puppetmasterd)
-
-        ActiveRecord::Base.logger = Logger.new(Puppet[:railslog])
-        begin
-            loglevel = Logger.const_get(Puppet[:rails_loglevel].upcase)
-            ActiveRecord::Base.logger.level = loglevel
-        rescue => detail
-            Puppet.warning "'%s' is not a valid Rails log level; using debug" % Puppet[:rails_loglevel]
-            ActiveRecord::Base.logger.level = Logger::DEBUG
-        end
-
-        ActiveRecord::Base.allow_concurrency = true
-        ActiveRecord::Base.verify_active_connections!
-
-        begin
-            ActiveRecord::Base.establish_connection(database_arguments())
-        rescue => detail
-            if Puppet[:trace]
-                puts detail.backtrace
-            end
-            raise Puppet::Error, "Could not connect to database: %s" % detail
-        end 
-    end
-
-    # The arguments for initializing the database connection.
-    def self.database_arguments
-        adapter = Puppet[:dbadapter]
-        
-        args = {:adapter => adapter, :log_level => Puppet[:rails_loglevel]}
-
-        case adapter
-        when "sqlite3":
-            args[:dbfile] = Puppet[:dblocation]
-        when "mysql", "postgresql":
-            args[:host]     = Puppet[:dbserver] unless Puppet[:dbserver].empty?
-            args[:username] = Puppet[:dbuser] unless Puppet[:dbuser].empty?
-            args[:password] = Puppet[:dbpassword] unless Puppet[:dbpassword].empty?
-            args[:database] = Puppet[:dbname]
-            
-            socket          = Puppet[:dbsocket]
-            args[:socket]   = socket unless socket.empty?
-        else
-            raise ArgumentError, "Invalid db adapter %s" % adapter
-        end
-        args
-    end
-
-    # Set up our database connection.  It'd be nice to have a "use" system
-    # that could make callbacks.
-    def self.init
-        unless Puppet.features.rails?
-            raise Puppet::DevError, "No activerecord, cannot init Puppet::Rails"
-        end
-
-        connect()
-
-        unless ActiveRecord::Base.connection.tables.include?("resources")
-            require 'puppet/rails/database/schema'
-            Puppet::Rails::Schema.init
-        end
-
-        if Puppet[:dbmigrate]
-            migrate()
-        end
-    end
-
-    # Migrate to the latest db schema.
-    def self.migrate
-        dbdir = nil
-        $:.each { |d|
-            tmp = File.join(d, "puppet/rails/database")
-            if FileTest.directory?(tmp)
-                dbdir = tmp
-                break
-            end
-        }
-
-        unless dbdir
-            raise Puppet::Error, "Could not find Puppet::Rails database dir"
-        end
-
-        unless ActiveRecord::Base.connection.tables.include?("resources")
-            raise Puppet::Error, "Database has problems, can't migrate."
-        end    
-
-        Puppet.notice "Migrating"
-
-        begin
-            ActiveRecord::Migrator.migrate(dbdir)
-        rescue => detail
-            if Puppet[:trace]
-                puts detail.backtrace
-            end
-            raise Puppet::Error, "Could not migrate database: %s" % detail
-        end
-    end
-
-    # Tear down the database.  Mostly only used during testing.
-    def self.teardown
-        unless Puppet.features.rails?
-            raise Puppet::DevError, "No activerecord, cannot init Puppet::Rails"
-        end
-
-        Puppet.settings.use(:puppetmasterd, :rails)
-
-        begin
-            ActiveRecord::Base.establish_connection(database_arguments())
-        rescue => detail
-            if Puppet[:trace]
-               puts detail.backtrace
-            end
-            raise Puppet::Error, "Could not connect to database: %s" % detail
-        end 
-
-        ActiveRecord::Base.connection.tables.each do |t| 
-            ActiveRecord::Base.connection.drop_table t
-        end
-    end
-end
-
-if Puppet.features.rails?
-    require 'puppet/rails/host'
-end
-
diff --git a/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb b/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb
deleted file mode 100644
index d1035b0..0000000
--- a/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-class AddCreatedAtToAllTables < ActiveRecord::Migration
-    def self.up
-        ActiveRecord::Base.connection.tables.each do |t|
-            unless ActiveRecord::Base.connection.columns(t).collect {|c| c.name}.include?("created_at")
-                add_column t.to_s, :created_at, :datetime 
-            end    
-        end 
-    end
-
-    def self.down
-        ActiveRecord::Base.connection.tables.each do |t|
-            unless ActiveRecord::Base.connection.columns(t).collect {|c| c.name}.include?("created_at")
-                remove_column t.to_s, :created_at
-            end    
-        end    
-    end
-end
diff --git a/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb b/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb
deleted file mode 100644
index 3873a13..0000000
--- a/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-class RemoveDuplicatedIndexOnAllTables < ActiveRecord::Migration
-    def self.up
-        ActiveRecord::Base.connection.tables.each do |t|
-            if ActiveRecord::Base.connection.indexes(t).collect {|c| c.columns}.include?("id")
-                remove_index t.to_s, :id
-            end
-        end 
-    end
-
-    def self.down
-        ActiveRecord::Base.connection.tables.each do |t|
-            unless ActiveRecord::Base.connection.indexes(t).collect {|c| c.columns}.include?("id")
-                add_index t.to_s, :id, :integer => true
-            end
-        end    
-    end
-end
diff --git a/lib/puppet/rails/database/schema.rb b/lib/puppet/rails/database/schema.rb
deleted file mode 100644
index f3ad2c1..0000000
--- a/lib/puppet/rails/database/schema.rb
+++ /dev/null
@@ -1,110 +0,0 @@
-class Puppet::Rails::Schema
-    def self.init
-        oldout = nil
-        Puppet::Util.benchmark(Puppet, :notice, "Initialized database") do
-            # We want to rewrite stdout, so we don't get migration messages.
-            oldout = $stdout
-            $stdout = File.open("/dev/null", "w")
-            ActiveRecord::Schema.define do
-                create_table :resources do |t|
-                    t.column :title, :text, :null => false
-                    t.column :restype,  :string, :null => false
-                    t.column :host_id, :integer
-                    t.column :source_file_id, :integer
-                    t.column :exported, :boolean
-                    t.column :line, :integer
-                    t.column :updated_at, :datetime
-                    t.column :created_at, :datetime
-                end
-                add_index :resources, :host_id, :integer => true
-                add_index :resources, :source_file_id, :integer => true
-
-                # Thanks, mysql!  MySQL requires a length on indexes in text fields.
-                # So, we provide them for mysql and handle everything else specially.
-                if Puppet[:dbadapter] == "mysql"
-                    execute "CREATE INDEX typentitle ON resources (restype,title(50));"
-                else
-                    add_index :resources, [:title, :restype]
-                end
-
-                create_table :source_files do |t| 
-                    t.column :filename, :string
-                    t.column :path, :string
-                    t.column :updated_at, :datetime
-                    t.column :created_at, :datetime
-                end
-                add_index :source_files, :filename
-
-                create_table :resource_tags do |t|
-                    t.column :resource_id, :integer
-                    t.column :puppet_tag_id, :integer
-                    t.column :updated_at, :datetime
-                    t.column :created_at, :datetime
-                end
-                add_index :resource_tags, :resource_id, :integer => true
-                add_index :resource_tags, :puppet_tag_id, :integer => true
-
-                create_table :puppet_tags do |t| 
-                    t.column :name, :string
-                    t.column :updated_at, :datetime
-                    t.column :created_at, :datetime
-                end
-                add_index :puppet_tags, :id, :integer => true
-
-                create_table :hosts do |t|
-                    t.column :name, :string, :null => false
-                    t.column :ip, :string
-                    t.column :last_compile, :datetime
-                    t.column :last_freshcheck, :datetime
-                    t.column :last_report, :datetime
-                    #Use updated_at to automatically add timestamp on save.
-                    t.column :updated_at, :datetime
-                    t.column :source_file_id, :integer
-                    t.column :created_at, :datetime
-                end
-                add_index :hosts, :source_file_id, :integer => true
-                add_index :hosts, :name
-
-                create_table :fact_names do |t| 
-                    t.column :name, :string, :null => false
-                    t.column :updated_at, :datetime
-                    t.column :created_at, :datetime
-                end
-                add_index :fact_names, :name
-
-                create_table :fact_values do |t| 
-                    t.column :value, :text, :null => false
-                    t.column :fact_name_id, :integer, :null => false
-                    t.column :host_id, :integer, :null => false
-                    t.column :updated_at, :datetime
-                    t.column :created_at, :datetime
-                end 
-                add_index :fact_values, :fact_name_id, :integer => true
-                add_index :fact_values, :host_id, :integer => true
-
-                create_table :param_values do |t|
-                    t.column :value,  :text, :null => false
-                    t.column :param_name_id, :integer, :null => false
-                    t.column :line, :integer
-                    t.column :resource_id, :integer
-                    t.column :updated_at, :datetime
-                    t.column :created_at, :datetime
-                end
-                add_index :param_values, :param_name_id, :integer => true
-                add_index :param_values, :resource_id, :integer => true
-         
-                create_table :param_names do |t| 
-                    t.column :name, :string, :null => false
-                    t.column :updated_at, :datetime
-                    t.column :created_at, :datetime
-                end
-                add_index :param_names, :name
-            end 
-        end
-    ensure
-        $stdout.close
-        $stdout = oldout if oldout
-        oldout = nil
-    end
-end
-
diff --git a/lib/puppet/rails/fact_name.rb b/lib/puppet/rails/fact_name.rb
deleted file mode 100644
index e6e7c5d..0000000
--- a/lib/puppet/rails/fact_name.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'puppet/rails/fact_value'
-
-class Puppet::Rails::FactName < ActiveRecord::Base
-    has_many :fact_values, :dependent => :destroy
-end
-
-# $Id: fact_name.rb 1952 2006-12-19 05:47:57Z luke $
diff --git a/lib/puppet/rails/fact_value.rb b/lib/puppet/rails/fact_value.rb
deleted file mode 100644
index b53591d..0000000
--- a/lib/puppet/rails/fact_value.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-class Puppet::Rails::FactValue < ActiveRecord::Base
-    belongs_to :fact_name
-    belongs_to :host
-
-    def to_label
-      "#{self.fact_name.name}"
-    end  
-end
-
-# $Id: fact_value.rb 1952 2006-12-19 05:47:57Z luke $
diff --git a/lib/puppet/rails/host.rb b/lib/puppet/rails/host.rb
deleted file mode 100644
index 626edaa..0000000
--- a/lib/puppet/rails/host.rb
+++ /dev/null
@@ -1,151 +0,0 @@
-require 'puppet/rails/resource'
-require 'puppet/rails/fact_name'
-require 'puppet/rails/source_file'
-require 'puppet/util/rails/collection_merger'
-
-# Puppet::TIME_DEBUG = true
-
-class Puppet::Rails::Host < ActiveRecord::Base
-    include Puppet::Util
-    include Puppet::Util::CollectionMerger
-
-    has_many :fact_values, :dependent => :destroy
-    has_many :fact_names, :through => :fact_values
-    belongs_to :source_file
-    has_many :resources,
-        :include => :param_values,
-        :dependent => :destroy
-
-    # If the host already exists, get rid of its objects
-    def self.clean(host)
-        if obj = self.find_by_name(host)
-            obj.rails_objects.clear
-            return obj
-        else
-            return nil
-        end
-    end
-
-    # Store our host in the database.
-    def self.store(node, resources)
-        args = {}
-
-        host = nil
-        transaction do
-            #unless host = find_by_name(name)
-            seconds = Benchmark.realtime {
-                unless host = find_by_name(node.name)
-                    host = new(:name => node.name)
-                end
-            }
-            Puppet.notice("Searched for host in %0.2f seconds" % seconds) if defined?(Puppet::TIME_DEBUG)
-            if ip = node.parameters["ipaddress"]
-                host.ip = ip
-            end
-
-            # Store the facts into the database.
-            host.setfacts node.parameters
-
-            seconds = Benchmark.realtime {
-                host.setresources(resources)
-            }
-            Puppet.notice("Handled resources in %0.2f seconds" % seconds) if defined?(Puppet::TIME_DEBUG)
-
-            host.last_compile = Time.now
-
-            host.save
-        end
-
-        return host
-    end
-
-    # Return the value of a fact.
-    def fact(name)
-        if fv = self.fact_values.find(:all, :include => :fact_name,
-                                      :conditions => "fact_names.name = '#{name}'") 
-            return fv
-        else
-            return nil
-        end
-    end
-    
-    # returns a hash of fact_names.name => [ fact_values ] for this host.
-    def get_facts_hash
-        fact_values = self.fact_values.find(:all, :include => :fact_name)
-        return fact_values.inject({}) do | hash, value |
-            hash[value.fact_name.name] ||= []
-            hash[value.fact_name.name] << value
-            hash
-        end
-    end
-    
-
-    def setfacts(facts)
-        facts = facts.dup
-        
-        ar_hash_merge(get_facts_hash(), facts, 
-                      :create => Proc.new { |name, values|
-                          fact_name = Puppet::Rails::FactName.find_or_create_by_name(name)
-                          values = [values] unless values.is_a?(Array)
-                          values.each do |value|
-                              fact_values.build(:value => value,
-                                                :fact_name => fact_name)
-                          end
-                      }, :delete => Proc.new { |values|
-                          values.each { |value| self.fact_values.delete(value) }
-                      }, :modify => Proc.new { |db, mem|
-                          mem = [mem].flatten
-                          fact_name = db[0].fact_name
-                          db_values = db.collect { |fact_value| fact_value.value }
-                          (db_values - (db_values & mem)).each do |value|
-                              db.find_all { |fact_value| 
-                                  fact_value.value == value 
-                              }.each { |fact_value|
-                                  fact_values.delete(fact_value)
-                              }
-                          end
-                          (mem - (db_values & mem)).each do |value|
-                              fact_values.build(:value => value, 
-                                                :fact_name => fact_name)
-                          end
-                      })
-    end
-
-    # Set our resources.
-    def setresources(list)
-        existing = nil
-        seconds = Benchmark.realtime {
-
-            # Preload the parameters with the resource query, but not the tags, since doing so makes the query take about 10x longer.
-            # I've left the other queries in so that it's straightforward to switch between them for testing, if we so desire.
-            #existing = resources.find(:all, :include => [{:param_values => :param_name, :resource_tags => :puppet_tag}, :source_file]).inject({}) do | hash, resource |
-            #existing = resources.find(:all, :include => [{:resource_tags => :puppet_tag}, :source_file]).inject({}) do | hash, resource |
-            existing = resources.find(:all, :include => [{:param_values => :param_name}, :source_file]).inject({}) do | hash, resource |
-                hash[resource.ref] = resource
-                hash
-            end
-        }
-
-        Puppet.notice("Searched for resources in %0.2f seconds" % seconds) if defined?(Puppet::TIME_DEBUG)
-
-        compiled = list.inject({}) do |hash, resource|
-            hash[resource.ref] = resource
-            hash
-        end
-        
-        ar_hash_merge(existing, compiled,
-                      :create => Proc.new { |ref, resource|
-                          resource.to_rails(self)
-                      }, :delete => Proc.new { |resource|
-                          self.resources.delete(resource)
-                      }, :modify => Proc.new { |db, mem|
-                          mem.modify_rails(db)
-                      })
-    end
-
-    def update_connect_time
-        self.last_connect = Time.now
-        save
-    end
-end
-
diff --git a/lib/puppet/rails/param_name.rb b/lib/puppet/rails/param_name.rb
deleted file mode 100644
index 55d3727..0000000
--- a/lib/puppet/rails/param_name.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'puppet/util/rails/collection_merger'
-require 'puppet/rails/param_value'
-
-class Puppet::Rails::ParamName < ActiveRecord::Base
-    include Puppet::Util::CollectionMerger
-    has_many :param_values, :dependent => :destroy 
-
-    def to_resourceparam(resource, source)
-        hash = {}
-        hash[:name] = self.name.to_sym
-        hash[:source] = source
-        hash[:value] = resource.param_values.find(:all, :conditions => [ "param_name_id = ?", self.id]).collect { |v| v.value }
-        if hash[:value].length == 1
-            hash[:value] = hash[:value].shift
-        elsif hash[:value].empty?
-            hash[:value] = nil
-        end
-        Puppet::Parser::Resource::Param.new hash
-    end
-end
-
diff --git a/lib/puppet/rails/param_value.rb b/lib/puppet/rails/param_value.rb
deleted file mode 100644
index fc00a43..0000000
--- a/lib/puppet/rails/param_value.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-class Puppet::Rails::ParamValue < ActiveRecord::Base
-    belongs_to :param_name
-    belongs_to :resource
-
-    def value
-        val = self[:value]
-        if val =~ /^--- \!/
-            YAML.load(val)
-        else
-            val
-        end
-    end
-
-    # I could not find a cleaner way to handle making sure that resource references
-    # were consistently serialized and deserialized.
-    def value=(val)
-        if val.is_a?(Puppet::Parser::Resource::Reference)
-            self[:value] = YAML.dump(val)
-        else
-            self[:value] = val
-        end
-    end
-
-    def to_label
-      "#{self.param_name.name}"
-    end  
-end
-
diff --git a/lib/puppet/rails/puppet_tag.rb b/lib/puppet/rails/puppet_tag.rb
deleted file mode 100644
index 279eefc..0000000
--- a/lib/puppet/rails/puppet_tag.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'puppet/rails/resource_tag'
-class Puppet::Rails::PuppetTag < ActiveRecord::Base
-    has_many :resource_tags, :dependent => :destroy
-    has_many :resources, :through => :resource_tags
-end
diff --git a/lib/puppet/rails/resource.rb b/lib/puppet/rails/resource.rb
deleted file mode 100644
index 255b0e7..0000000
--- a/lib/puppet/rails/resource.rb
+++ /dev/null
@@ -1,124 +0,0 @@
-require 'puppet'
-require 'puppet/rails/param_name'
-require 'puppet/rails/puppet_tag'
-require 'puppet/util/rails/collection_merger'
-
-class Puppet::Rails::Resource < ActiveRecord::Base
-    include Puppet::Util::CollectionMerger
-
-    has_many :param_values, :dependent => :destroy, :class_name => "Puppet::Rails::ParamValue"
-    has_many :param_names, :through => :param_values, :class_name => "Puppet::Rails::ParamName"
-
-    has_many :resource_tags, :dependent => :destroy, :class_name => "Puppet::Rails::ResourceTag"
-    has_many :puppet_tags, :through => :resource_tags, :class_name => "Puppet::Rails::PuppetTag"
-
-    belongs_to :source_file
-    belongs_to :host
-
-    def add_resource_tag(tag)
-        pt = Puppet::Rails::PuppetTag.find_or_create_by_name(tag, :include => :puppet_tag)
-        resource_tags.create(:puppet_tag => pt)
-    end
-
-    def file
-        if f = self.source_file
-            return f.filename
-        else
-            return nil
-        end
-    end
-
-    def file=(file)
-        self.source_file = Puppet::Rails::SourceFile.find_or_create_by_filename(file)
-    end
-
-    # returns a hash of param_names.name => [param_values]
-    def get_params_hash(values = nil)
-        values ||= param_values.find(:all, :include => :param_name)
-        values.inject({}) do | hash, value |
-            hash[value.param_name.name] ||= []
-            hash[value.param_name.name] << value
-            hash
-        end
-    end
-    
-    def get_tag_hash(tags = nil)
-        tags ||= resource_tags.find(:all, :include => :puppet_tag)
-        return tags.inject({}) do |hash, tag|
-            # We have to store the tag object, not just the tag name.
-            hash[tag.puppet_tag.name] = tag
-            hash
-        end
-    end
-
-    def [](param)
-        return super || parameter(param)
-    end
-
-    def name
-        ref()
-    end
-
-    def parameter(param)
-        if pn = param_names.find_by_name(param)
-            if pv = param_values.find(:first, :conditions => [ 'param_name_id = ?', pn]                                                            )
-                return pv.value
-            else
-                return nil
-            end
-        end
-    end
-
-    def parameters
-        result = get_params_hash
-        result.each do |param, value|
-            if value.is_a?(Array)
-                result[param] = value.collect { |v| v.value }
-            else
-                result[param] = value.value
-            end
-        end
-        result
-    end
-
-    def ref
-        "%s[%s]" % [self[:restype].split("::").collect { |s| s.capitalize }.join("::"), self[:title]]
-    end
-
-    # Convert our object to a resource.  Do not retain whether the object
-    # is exported, though, since that would cause it to get stripped
-    # from the configuration.
-    def to_resource(scope)
-        hash = self.attributes
-        hash["type"] = hash["restype"]
-        hash.delete("restype")
-
-        # FIXME At some point, we're going to want to retain this information
-        # for logging and auditing.
-        hash.delete("host_id")
-        hash.delete("updated_at")
-        hash.delete("source_file_id")
-        hash.delete("created_at")
-        hash.delete("id")
-        hash.each do |p, v|
-            hash.delete(p) if v.nil?
-        end
-        hash[:scope] = scope
-        hash[:source] = scope.source
-        hash[:params] = []
-        names = []
-        self.param_names.each do |pname|
-            # We can get the same name multiple times because of how the
-            # db layout works.
-            next if names.include?(pname.name)
-            names << pname.name
-            hash[:params] << pname.to_resourceparam(self, scope.source)
-        end
-        obj = Puppet::Parser::Resource.new(hash)
-
-        # Store the ID, so we can check if we're re-collecting the same resource.
-        obj.rails_id = self.id
-
-        return obj
-    end
-end
diff --git a/lib/puppet/rails/resource_tag.rb b/lib/puppet/rails/resource_tag.rb
deleted file mode 100644
index f9694e0..0000000
--- a/lib/puppet/rails/resource_tag.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class Puppet::Rails::ResourceTag < ActiveRecord::Base
-    belongs_to :puppet_tag
-    belongs_to :resource
-
-    def to_label
-      "#{self.puppet_tag.name}"
-    end  
-end
diff --git a/lib/puppet/rails/source_file.rb b/lib/puppet/rails/source_file.rb
deleted file mode 100644
index 3ccf87a..0000000
--- a/lib/puppet/rails/source_file.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class Puppet::Rails::SourceFile < ActiveRecord::Base
-    has_one :host
-    has_one :resource
-
-    def to_label
-      "#{self.filename}"
-    end  
-end
diff --git a/lib/puppet/reference/configuration.rb b/lib/puppet/reference/configuration.rb
deleted file mode 100644
index 8e82c8a..0000000
--- a/lib/puppet/reference/configuration.rb
+++ /dev/null
@@ -1,149 +0,0 @@
-config = Puppet::Util::Reference.newreference(:configuration, :depth => 1, :doc => "A reference for all configuration parameters") do
-    docs = {}
-    Puppet.settings.each do |name, object|
-        docs[name] = object
-    end
-
-    str = ""
-    docs.sort { |a, b|
-        a[0].to_s <=> b[0].to_s
-    }.each do |name, object|
-        # Make each name an anchor
-        header = name.to_s
-        str += h(header, 3)
-
-        # Print the doc string itself
-        begin
-            str += object.desc.gsub(/\n/, " ")
-        rescue => detail
-            puts detail.backtrace
-            puts detail
-        end
-        str += "\n\n"
-
-        # Now print the data about the item.
-        str += ""
-        val = object.default
-        if name.to_s == "vardir"
-            val = "/var/puppet"
-        elsif name.to_s == "confdir"
-            val = "/etc/puppet"
-        end
-
-        # Leave out the section information; it was apparently confusing people.
-        #str += "- **Section**: %s\n" % object.section
-        unless val == ""
-            str += "- **Default**: %s\n" % val
-        end
-        str += "\n"
-    end
-
-    return str
-end
-
-config.header = "
-Specifying Configuration Parameters
------------------------------------
-
-On The Command-Line
-+++++++++++++++++++
-Every Puppet executable (with the exception of ``puppetdoc``) accepts all of
-the parameters below, but not all of the arguments make sense for every executable.
-
-I have tried to be as thorough as possible in the descriptions of the
-arguments, so it should be obvious whether an argument is appropriate or not.
-
-These parameters can be supplied to the executables either as command-line 
-options or in the configuration file.  For instance, the command-line
-invocation below would set the configuration directory to ``/private/puppet``::
-  
-    $ puppetd --confdir=/private/puppet
-  
-Note that boolean options are turned on and off with a slightly different
-syntax on the command line::
-
-    $ puppetd --storeconfigs
-      
-    $ puppetd --no-storeconfigs
-
-The invocations above will enable and disable, respectively, the storage of 
-the client configuration.
-
-Configuration Files
-+++++++++++++++++++
-As mentioned above, the configuration parameters can also be stored in a
-configuration file, located in the configuration directory.  As root, the
-default configuration directory is ``/etc/puppet``, and as a regular user, the
-default configuration directory is ``~user/.puppet``.  As of 0.23.0, all
-executables look for ``puppet.conf`` in their configuration directory
-(although they previously looked for separate files).  For example,
-``puppet.conf`` is located at ``/etc/puppet/puppet.conf`` as root and
-``~user/.puppet/puppet.conf`` as a regular user by default.
-
-All executables will set any parameters set within the ``main`` section,
-while each executable will also look for a section named for the executable
-and load those parameters.  For example, ``puppetd`` will look for a
-section named ``puppetd``, and ``puppetmasterd`` looks for a section
-named ``puppetmasterd``.  This allows you to use a single configuration file
-to customize the settings for all of your executables.
-
-File Format
-'''''''''''
-The file follows INI-style formatting.  Here is an example of a very simple
-``puppet.conf`` file::
-
-    [main]
-        confdir = /private/puppet
-        storeconfigs = true
-    
-Note that boolean parameters must be explicitly specified as `true` or
-`false` as seen above.
-
-If you need to change file parameters (e.g., reset the mode or owner), do
-so within curly braces on the same line::
-
-    [main]
-        myfile = /tmp/whatever {owner = root, mode = 644}
-
-If you're starting out with a fresh configuration, you may wish to let
-the executable generate a template configuration file for you by invoking
-the executable in question with the `--genconfig` command.  The executable
-will print a template configuration to standard output, which can be
-redirected to a file like so::
-
-    $ puppetd --genconfig > /etc/puppet/puppet.conf
-  
-Note that this invocation will replace the contents of any pre-existing
-`puppet.conf` file, so make a backup of your present config if it contains
-valuable information.
-
-Like the `--genconfig` argument, the executables also accept a `--genmanifest`
-argument, which will generate a manifest that can be used to manage all of 
-Puppet's directories and files and prints it to standard output.  This can
-likewise be redirected to a file::
-
-    $ puppetd --genmanifest > /etc/puppet/manifests/site.pp
-
-Puppet can also create user and group accounts for itself (one `puppet` group
-and one `puppet` user) if it is invoked as `root` with the `--mkusers` argument::
-
-    $ puppetd --mkusers
-  
-Signals
--------
-The ``puppetd`` and ``puppetmasterd`` executables catch some signals for special 
-handling.  Both daemons catch (``SIGHUP``), which forces the server to restart 
-tself.  Predictably, interrupt and terminate (``SIGINT`` and ``SIGHUP``) will shut 
-down the server, whether it be an instance of ``puppetd`` or ``puppetmasterd``.
-
-Sending the ``SIGUSR1`` signal to an instance of ``puppetd`` will cause it to 
-immediately begin a new configuration transaction with the server.  This 
-signal has no effect on ``puppetmasterd``.
-
-Configuration Parameter Reference
----------------------------------
-Below is a list of all documented parameters.  Not all of them are valid with all
-Puppet executables, but the executables will ignore any inappropriate values.
-
-"
-
diff --git a/lib/puppet/reference/function.rb b/lib/puppet/reference/function.rb
deleted file mode 100644
index 5c62c88..0000000
--- a/lib/puppet/reference/function.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-function = Puppet::Util::Reference.newreference :function, :doc => "All functions available in the parser" do
-    Puppet::Parser::Functions.functiondocs
-end
-function.header = "
-There are two types of functions in Puppet: Statements and rvalues.
-Statements stand on their own and do not return arguments; they are used for
-performing stand-alone work like importing.  Rvalues return values and can
-only be used in a statement requiring a value, such as an assignment or a case
-statement. 
-
-Here are the functions available in Puppet:
-
-"
diff --git a/lib/puppet/reference/indirection.rb b/lib/puppet/reference/indirection.rb
deleted file mode 100644
index 0743981..0000000
--- a/lib/puppet/reference/indirection.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-require 'puppet/indirector/indirection'
-require 'puppet/checksum'
-require 'puppet/file_serving/content'
-require 'puppet/file_serving/metadata'
-
-reference = Puppet::Util::Reference.newreference :indirection, :doc => "Indirection types and their terminus classes" do
-    text = ""
-    Puppet::Indirector::Indirection.instances.sort { |a,b| a.to_s <=> b.to_s }.each do |indirection|
-        ind = Puppet::Indirector::Indirection.instance(indirection)
-        name = indirection.to_s.capitalize
-        text += indirection.to_s + "\n" + ("-" * name.length) + "\n\n"
-
-        text += ind.doc + "\n\n"
-
-        Puppet::Indirector::Terminus.terminus_classes(ind.name).sort { |a,b| a.to_s <=> b.to_s }.each do |terminus|
-            text += terminus.to_s + "\n" + ("+" * terminus.to_s.length) + "\n\n"
-
-            term_class = Puppet::Indirector::Terminus.terminus_class(ind.name, terminus)
-
-            text += Puppet::Util::Docs.scrub(term_class.doc) + "\n\n"
-        end
-    end
-
-    text
-end
-
-reference.header = "This is the list of all indirections, their associated terminus classes, and how you select between them.
-
-In general, the appropriate terminus class is selected by the application for you (e.g., ``puppetd`` would always use the ``rest``
-terminus for most of its indirected classes), but some classes are tunable via normal settings.  These will have ``terminus setting``
-documentation listed with them.
-
-
-"
diff --git a/lib/puppet/reference/network.rb b/lib/puppet/reference/network.rb
deleted file mode 100644
index 1b635fd..0000000
--- a/lib/puppet/reference/network.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-network = Puppet::Util::Reference.newreference :network, :depth => 2, :doc => "Available network handlers and clients" do
-    ret = ""
-    Puppet::Network::Handler.subclasses.sort { |a,b| a.to_s <=> b.to_s }.each do |name|
-        handler = Puppet::Network::Handler.handler(name)
-
-        next if ! handler.doc or handler.doc == ""
-
-        interface = handler.interface
-
-        ret += h(name, 2)
-
-        ret += scrub(handler.doc)
-        ret += "\n\n"
-        ret += option(:prefix, interface.prefix)
-        ret += option(:side, handler.side.to_s.capitalize)
-        ret += option(:methods, interface.methods.collect { |ary| ary[0] }.join(", ") )
-        ret += "\n\n"
-    end
-
-    ret
-end
-
-network.header = "
-This is a list of all Puppet network interfaces.  Each interface is
-implemented in the form of a client and a handler; the handler is loaded
-on the server, and the client knows how to call the handler's methods
-appropriately.
-
-Most handlers are meant to be started on the server, usually within
-``puppetmasterd``, and the clients are mostly started on the client,
-usually within ``puppetd``.
-
-You can find the server-side handler for each interface at
-``puppet/network/handler/<name>.rb`` and the client class at
-``puppet/network/client/<name>.rb``.
-
-"
diff --git a/lib/puppet/reference/providers.rb b/lib/puppet/reference/providers.rb
deleted file mode 100644
index 8fd2dba..0000000
--- a/lib/puppet/reference/providers.rb
+++ /dev/null
@@ -1,124 +0,0 @@
-# This doesn't get stored in trac, since it changes every time.
-providers = Puppet::Util::Reference.newreference :providers, :title => "Provider Suitability Report", :depth => 1, :dynamic => true, :doc => "Which providers are valid for this machine" do
-    types = []
-    Puppet::Type.loadall
-    Puppet::Type.eachtype do |klass|
-        next unless klass.providers.length > 0
-        types << klass
-    end
-    types.sort! { |a,b| a.name.to_s <=> b.name.to_s }
-
-    unless ARGV.empty?
-        types.reject! { |type| ! ARGV.include?(type.name.to_s) }
-    end
-
-    ret = "Details about this host:\n\n"
-
-    # Throw some facts in there, so we know where the report is from.
-    ["Ruby Version", "Puppet Version", "Operating System", "Operating System Release"].each do |label|
-        name = label.gsub(/\s+/, '')
-        value = Facter.value(name)
-        ret += option(label, value)
-    end
-    ret += "\n"
-
-    count = 1
-
-    # Produce output for each type.
-    types.each do |type|
-        features = type.features
-        ret += "\n" # add a trailing newline
-
-        # Now build up a table of provider suitability.
-        headers = %w{Provider Suitable?} + features.collect { |f| f.to_s }.sort
-
-        table_data = {}
-
-        functional = false
-        notes = []
-        begin
-            default = type.defaultprovider.name
-        rescue Puppet::DevError
-            default = "none"
-        end
-        type.providers.sort { |a,b| a.to_s <=> b.to_s }.each do |pname|
-            data = []
-            table_data[pname] = data
-            provider = type.provider(pname)
-
-            # Add the suitability note
-            if missing = provider.suitable?(false) and missing.empty?
-                data << "**X**"
-                suit = true
-                functional = true
-            else
-                data << "[%s]_" % [count] # A pointer to the appropriate footnote
-                suit = false
-            end
-
-            # Add a footnote with the details about why this provider is unsuitable, if that's the case
-            unless suit
-                details = ".. [%s]\n" % count
-                missing.each do |test, values|
-                    case test
-                    when :exists:
-                        details += "  - Missing files %s\n" % values.join(", ")
-                    when :variable:
-                        values.each do |name, facts|
-                            if Puppet.settings.valid?(name)
-                                details += "  - Setting %s (currently %s) not in list %s\n" % [name, Puppet.settings.value(name).inspect, facts.join(", ")]
-                            else
-                                details += "  - Fact %s (currently %s) not in list %s\n" % [name, Facter.value(name).inspect, facts.join(", ")]
-                            end
-                        end
-                    when :true:
-                        details += "  - Got %s true tests that should have been false\n" % values
-                    when :false:
-                        details += "  - Got %s false tests that should have been true\n" % values
-                    when :feature:
-                        details += "  - Missing features %s\n" % values.collect { |f| f.to_s }.join(",")
-                    end
-                end
-                notes << details
-                
-                count += 1
-            end
-
-            # Add a note for every feature
-            features.each do |feature|
-                if provider.features.include?(feature)
-                    data << "**X**"
-                else
-                    data << ""
-                end
-            end
-        end
-
-        ret += h(type.name.to_s + "_", 2)
-
-        ret += ".. _%s: %s\n\n" % [type.name, "http://reductivelabs.com/trac/puppet/wiki/TypeReference#%s" % type.name]
-        ret += option("Default provider", default)
-        ret += doctable(headers, table_data)
-
-        notes.each do |note|
-            ret += note + "\n"
-        end
-
-        ret += "\n"
-    end
-
-    ret += "\n"
-
-    ret
-end
-providers.header = "
-Puppet resource types are usually backed by multiple implementations called ``providers``,
-which handle variance between platforms and tools.
-
-Different providers are suitable or unsuitable on different platforms based on things
-like the presence of a given tool.
-
-Here are all of the provider-backed types and their different providers.  Any unmentioned
-types do not use providers yet.
-
-"
diff --git a/lib/puppet/reference/report.rb b/lib/puppet/reference/report.rb
deleted file mode 100644
index be8e647..0000000
--- a/lib/puppet/reference/report.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require 'puppet/reports'
-
-report = Puppet::Util::Reference.newreference :report, :doc => "All available transaction reports" do
-    Puppet::Reports.reportdocs
-end
-
-report.header = "
-Puppet clients can report back to the server after each transaction.  This
-transaction report is sent as a YAML dump of the
-``Puppet::Transaction::Report`` class and includes every log message that was
-generated during the transaction along with as many metrics as Puppet knows how
-to collect.  See `ReportsAndReporting Reports and Reporting`:trac:
-for more information on how to use reports.
-
-Currently, clients default to not sending in reports; you can enable reporting
-by setting the ``report`` parameter to true.
-
-To use a report, set the ``reports`` parameter on the server; multiple
-reports must be comma-separated.  You can also specify ``none`` to disable
-reports entirely.
-
-Puppet provides multiple report handlers that will process client reports:
-"
diff --git a/lib/puppet/reference/type.rb b/lib/puppet/reference/type.rb
deleted file mode 100644
index d9ac57f..0000000
--- a/lib/puppet/reference/type.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-type = Puppet::Util::Reference.newreference :type, :doc => "All Puppet resource types and all their details" do
-    types = {}
-    Puppet::Type.loadall
-
-    Puppet::Type.eachtype { |type|
-        next if type.name == :puppet
-        next if type.name == :component
-        types[type.name] = type
-    }
-
-    str = %{
-Metaparameters
---------------
-Metaparameters are parameters that work with any resource type; they are part of the
-Puppet framework itself rather than being part of the implementation of any
-given instance.  Thus, any defined metaparameter can be used with any instance
-in your manifest, including defined components.
-
-Available Metaparameters
-++++++++++++++++++++++++
-}
-    begin
-        params = []
-        Puppet::Type.eachmetaparam { |param|
-            params << param
-        }
-
-        params.sort { |a,b|
-            a.to_s <=> b.to_s
-        }.each { |param|
-            str += paramwrap(param.to_s, scrub(Puppet::Type.metaparamdoc(param)), :level => 4)
-            #puts "<dt>" + param.to_s + "</dt>"
-            #puts tab(1) + Puppet::Type.metaparamdoc(param).scrub.indent($tab)gsub(/\n\s*/,' ')
-            #puts "<dd>"
-            #puts indent(scrub(Puppet::Type.metaparamdoc(param)), $tab)
-            #puts scrub(Puppet::Type.metaparamdoc(param))
-            #puts "</dd>"
-
-            #puts ""
-        }
-    rescue => detail
-        puts detail.backtrace
-        puts "incorrect metaparams: %s" % detail
-        exit(1)
-    end
-
-    str += %{
-
-Resource Types
---------------
-
-- The *namevar* is the parameter used to uniquely identify a type instance.
-  This is the parameter that gets assigned when a string is provided before
-  the colon in a type declaration.  In general, only developers will need to
-  worry about which parameter is the ``namevar``.
-  
-  In the following code::
-
-      file { "/etc/passwd":
-          owner => root,
-          group => root,
-          mode => 644
-      }
-
-  ``/etc/passwd`` is considered the title of the file object (used for things like
-  dependency handling), and because ``path`` is the namevar for ``file``, that
-  string is assigned to the ``path`` parameter.
-
-- *Parameters* determine the specific configuration of the instance.  They either
-  directly modify the system (internally, these are called properties) or they affect
-  how the instance behaves (e.g., adding a search path for ``exec`` instances
-  or determining recursion on ``file`` instances).
-
-- *Providers* provide low-level functionality for a given resource type.  This is
-  usually in the form of calling out to external commands.
-
-  When required binaries are specified for providers, fully qualifed paths
-  indicate that the binary must exist at that specific path and unqualified
-  binaries indicate that Puppet will search for the binary using the shell
-  path.
-
-- *Features* are abilities that some providers might not support.  You can use the list
-  of supported features to determine how a given provider can be used.
-
-  Resource types define features they can use, and providers can be tested to see
-  which features they provide.
-
-    }
-
-    types.sort { |a,b|
-        a.to_s <=> b.to_s
-    }.each { |name,type|
-
-        str += "
-
-----------------
-
-"
-
-        str += h(name, 3)
-        str += scrub(type.doc) + "\n\n"
-
-        # Handle the feature docs.
-        if featuredocs = type.featuredocs
-            str += h("Features", 4)
-            str += featuredocs
-        end
-
-        docs = {}
-        type.validproperties.sort { |a,b|
-            a.to_s <=> b.to_s
-        }.reject { |sname|
-            property = type.propertybyname(sname)
-            property.nodoc
-        }.each { |sname|
-            property = type.propertybyname(sname)
-
-            unless property
-                raise "Could not retrieve property %s on type %s" % [sname, type.name]
-            end
-
-            doc = nil
-            unless doc = property.doc
-                $stderr.puts "No docs for %s[%s]" % [type, sname]
-                next
-            end
-            doc = doc.dup
-            tmp = doc
-            tmp = scrub(tmp)
-
-            docs[sname]  = tmp
-        }
-
-        str += h("Parameters", 4) + "\n"
-        type.parameters.sort { |a,b|
-            a.to_s <=> b.to_s
-        }.each { |name,param|
-            #docs[name] = indent(scrub(type.paramdoc(name)), $tab)
-            docs[name] = scrub(type.paramdoc(name))
-        }
-
-        docs.sort { |a, b|
-            a[0].to_s <=> b[0].to_s
-        }.each { |name, doc|
-            namevar = type.namevar == name and name != :name
-            str += paramwrap(name, doc, :namevar => namevar)
-        }
-        str += "\n"
-    }
-
-    str
-end
diff --git a/lib/puppet/relationship.rb b/lib/puppet/relationship.rb
deleted file mode 100644
index 05b7dc3..0000000
--- a/lib/puppet/relationship.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2006-11-24.
-#  Copyright (c) 2006. All rights reserved.
-
-# subscriptions are permanent associations determining how different
-# objects react to an event
-
-# This is Puppet's class for modeling edges in its configuration graph.
-# It used to be a subclass of GRATR::Edge, but that class has weird hash
-# overrides that dramatically slow down the graphing.
-class Puppet::Relationship
-    attr_accessor :source, :target, :label
-
-    # Return the callback
-    def callback
-        if label
-            label[:callback]
-        else
-            nil
-        end
-    end
-    
-    # Return our event.
-    def event
-        if label
-            label[:event]
-        else
-            nil
-        end
-    end
-    
-    def initialize(source, target, label = {})
-        if label
-            unless label.is_a?(Hash)
-                raise ArgumentError, "Relationship labels must be a hash"
-            end
-        
-            if label[:event] and label[:event] != :NONE and ! label[:callback]
-                raise ArgumentError, "You must pass a callback for non-NONE events"
-            end
-        else
-            label = {}
-        end
-
-        @source, @target, @label = source, target, label
-    end
-    
-    # Does the passed event match our event?  This is where the meaning
-    # of :NONE comes from. 
-    def match?(event)
-        if self.event.nil? or event == :NONE or self.event == :NONE
-            return false
-        elsif self.event == :ALL_EVENTS or event == self.event
-            return true
-        else
-            return false
-        end
-    end
-    
-    def ref
-        "%s => %s" % [source, target]
-    end
-
-    def to_s
-        ref
-    end
-end
-
diff --git a/lib/puppet/reports.rb b/lib/puppet/reports.rb
deleted file mode 100755
index df992d4..0000000
--- a/lib/puppet/reports.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-require 'puppet/util/instance_loader'
-
-# A simple mechanism for loading and returning reports.
-class Puppet::Reports
-    extend Puppet::Util::ClassGen
-    extend Puppet::Util::InstanceLoader
-
-    # Set up autoloading and retrieving of reports.
-    instance_load :report, 'puppet/reports'
-
-    class << self
-        attr_reader :hooks
-    end
-
-    # Add a new report type.
-    def self.register_report(name, options = {}, &block)
-        name = symbolize(name)
-
-        mod = genmodule(name, :extend => Puppet::Util::Docs, :hash => instance_hash(:report), :block => block)
-
-        if options[:useyaml]
-            mod.useyaml = true
-        end
-
-        mod.send(:define_method, :report_name) do
-            name
-        end
-    end
-
-    # Collect the docs for all of our reports.
-    def self.reportdocs
-        docs = ""
-
-        # Use this method so they all get loaded
-        instance_loader(:report).loadall
-        loaded_instances(:report).sort { |a,b| a.to_s <=> b.to_s }.each do |name|
-            mod = self.report(name)
-            docs += "%s\n%s\n" % [name, "-" * name.to_s.length]
-
-            docs += Puppet::Util::Docs.scrub(mod.doc) + "\n\n"
-        end
-
-        docs
-    end
-
-    # List each of the reports.
-    def self.reports
-        instance_loader(:report).loadall
-        loaded_instances(:report)
-    end
-end
diff --git a/lib/puppet/reports/log.rb b/lib/puppet/reports/log.rb
deleted file mode 100644
index 8dfeedb..0000000
--- a/lib/puppet/reports/log.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'puppet/reports'
-
-Puppet::Reports.register_report(:log) do
-    desc "Send all received logs to the local log destinations.  Usually
-        the log destination is syslog."
-
-    def process
-        self.logs.each do |log|
-            Puppet::Util::Log.newmessage(log)
-        end
-    end
-end
-
diff --git a/lib/puppet/reports/rrdgraph.rb b/lib/puppet/reports/rrdgraph.rb
deleted file mode 100644
index 5889750..0000000
--- a/lib/puppet/reports/rrdgraph.rb
+++ /dev/null
@@ -1,138 +0,0 @@
-Puppet::Reports.register_report(:rrdgraph) do
-    desc "Graph all available data about hosts using the RRD library.  You
-        must have the Ruby RRDtool library installed to use this report, which
-        you can get from `the RubyRRDTool RubyForge page`_.  This package may also
-        be available as ``ruby-rrd`` or ``rrdtool-ruby`` in your distribution's package
-        management system.  The library and/or package will both require the binary 
-        ``rrdtool`` package from your distribution to be installed.
-
-        .. _the RubyRRDTool RubyForge page: http://rubyforge.org/projects/rubyrrdtool/
-        
-        This report will create, manage, and graph RRD database files for each
-        of the metrics generated during transactions, and it will create a
-        few simple html files to display the reporting host's graphs.  At this
-        point, it will not create a common index file to display links to
-        all hosts.
-        
-        All RRD files and graphs get created in the ``rrddir`` directory.  If
-        you want to serve these publicly, you should be able to just alias that
-        directory in a web server.
-    
-        If you really know what you're doing, you can tune the ``rrdinterval``,
-        which defaults to the ``runinterval``."
-
-    def hostdir
-        unless defined? @hostdir
-            @hostdir = File.join(Puppet[:rrddir], self.host)
-        end
-        @hostdir
-    end
-
-    def htmlfile(type, graphs, field)
-        file = File.join(hostdir, "%s.html" % type)
-        File.open(file, "w") do |of|
-            of.puts "<html><head><title>%s graphs for %s</title></head><body>" %
-                [type.capitalize, host]
-
-            graphs.each do |graph|
-                if field == :first
-                    name = graph.sub(/-\w+.png/, '').capitalize
-                else
-                    name = graph.sub(/\w+-/, '').sub(".png", '').capitalize
-                end
-                of.puts "<img src=%s><br>" % graph
-            end
-            of.puts "</body></html>"
-        end
-
-        return file
-    end
-
-    def mkhtml
-        images = Dir.entries(hostdir).find_all { |d| d =~ /\.png/ }
-
-        periodorder = %w{daily weekly monthly yearly}
-
-        periods = {}
-        types = {}
-        images.each do |n|
-            type, period = n.sub(".png", '').split("-")
-            periods[period] ||= []
-            types[type] ||= []
-            periods[period] << n
-            types[type] << n
-        end
-
-        files = []
-        # Make the period html files
-        periodorder.each do |period|
-            unless ary = periods[period]
-                raise Puppet::Error, "Could not find graphs for %s" % period
-            end
-            files << htmlfile(period, ary, :first)
-        end
-
-        # make the type html files
-        types.sort { |a,b| a[0] <=> b[0] }.each do |type, ary|
-            newary = []
-            periodorder.each do |period|
-                if graph = ary.find { |g| g.include?("-%s.png" % period) }
-                    newary << graph
-                else
-                    raise "Could not find %s-%s graph" % [type, period]
-                end
-            end
-
-            files << htmlfile(type, newary, :second)
-        end
-
-        File.open(File.join(hostdir, "index.html"), "w") do |of|
-            of.puts "<html><head><title>Report graphs for %s</title></head><body>" %
-                host
-            files.each do |file|
-                of.puts "<a href='%s'>%s</a><br/>" %
-                    [File.basename(file),
-                     File.basename(file).sub(".html",'').capitalize]
-            end
-            of.puts "</body></html>"
-        end
-    end
-
-    def process(time = nil)
-        time ||= Time.now.to_i
-
-        unless File.directory?(hostdir) and FileTest.writable?(hostdir)
-            # Some hackishness to create the dir with all of the right modes and ownership
-            config = Puppet::Util::Settings.new
-            config.setdefaults(:reports, :hostdir => {:default => hostdir, :owner => Puppet[:user], :mode => 0755, :group => Puppet[:group], :desc => "eh"})
-
-            # This creates the dir.
-            config.use(:reports)
-        end
-
-        self.metrics.each do |name, metric|
-            metric.basedir = hostdir
-
-            if name == "time"
-                timeclean(metric)
-            end
-
-            metric.store(time)
-
-            metric.graph
-        end
-
-        unless FileTest.exists?(File.join(hostdir, "index.html"))
-            mkhtml()
-        end
-    end
-
-    # Unfortunately, RRD does not deal well with changing lists of values,
-    # so we have to pick a list of values and stick with it.  In this case,
-    # that means we record the total time, the config time, and that's about
-    # it.  We should probably send each type's time as a separate metric.
-    def timeclean(metric)
-        metric.values = metric.values.find_all { |name, label, value| [:total, :config_retrieval].include?(name) }
-    end
-end
-
diff --git a/lib/puppet/reports/store.rb b/lib/puppet/reports/store.rb
deleted file mode 100644
index dfc9928..0000000
--- a/lib/puppet/reports/store.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-require 'puppet'
-
-Puppet::Reports.register_report(:store) do
-    Puppet.settings.use(:reporting)
-
-    desc "Store the yaml report on disk.  Each host sends its report as a YAML dump
-        and this just stores the file on disk, in the ``reportdir`` directory.
-        
-        These files collect quickly -- one every half hour -- so it is a good idea
-        to perform some maintenance on them if you use this report (it's the only
-        default report)."
-
-    def mkclientdir(client, dir)
-        config = Puppet::Util::Settings.new
-        config.setdefaults("reportclient-#{client}",
-            "client-#{client}-dir" => { :default => dir,
-                :mode => 0750,
-                :desc => "Client dir for %s" % client,
-                :owner => Puppet[:user],
-                :group => Puppet[:group]
-            }
-        )
-
-        config.use("reportclient-#{client}")
-    end
-
-    def process
-        # We don't want any tracking back in the fs.  Unlikely, but there
-        # you go.
-        client = self.host.gsub("..",".")
-
-        dir = File.join(Puppet[:reportdir], client)
-
-        unless FileTest.exists?(dir)
-            mkclientdir(client, dir)
-        end
-
-        # Now store the report.
-        now = Time.now.gmtime
-        name = %w{year month day hour min}.collect do |method|
-            # Make sure we're at least two digits everywhere
-            "%02d" % now.send(method).to_s
-        end.join("") + ".yaml"
-
-        file = File.join(dir, name)
-
-        begin
-            File.open(file, "w", 0640) do |f|
-                f.print to_yaml
-            end
-        rescue => detail
-            if Puppet[:trace]
-                puts detail.backtrace
-            end
-            Puppet.warning "Could not write report for %s at %s: %s" %
-                [client, file, detail]
-        end
-
-        # Only testing cares about the return value
-        return file
-    end
-end
-
diff --git a/lib/puppet/reports/tagmail.rb b/lib/puppet/reports/tagmail.rb
deleted file mode 100644
index 102647c..0000000
--- a/lib/puppet/reports/tagmail.rb
+++ /dev/null
@@ -1,178 +0,0 @@
-require 'puppet'
-require 'pp'
-
-require 'net/smtp'
-
-Puppet::Reports.register_report(:tagmail) do
-    desc "This report sends specific log messages to specific email addresses
-        based on the tags in the log messages.  See the
-        `UsingTags tag documentation`:trac: for more information
-        on tags.
-        
-        To use this report, you must create a ``tagmail.conf`` (in the location
-        specified by ``tagmap``).  This is a simple file that maps tags to
-        email addresses:  Any log messages in the report that match the specified
-        tags will be sent to the specified email addresses.
-        
-        Tags must be comma-separated, and they can be negated so that messages
-        only match when they do not have that tag.  The tags are separated from
-        the email addresses by a colon, and the email addresses should also
-        be comma-separated.
-
-        Lastly, there is an ``all`` tag that will always match all log messages.
-
-        Here is an example tagmail.conf::
-
-            all: me at domain.com
-            webserver, !mailserver: httpadmins at domain.com
-
-        This will send all messages to ``me at domain.com``, and all messages from
-        webservers that are not also from mailservers to ``httpadmins at domain.com``.
-
-        If you are using anti-spam controls, such as grey-listing, on your mail 
-        server you should whitelist the sending email (controlled by ``reportform`` 
-        configuration option) to ensure your email is not discarded as spam.  
-        "
-
-
-    # Find all matching messages.
-    def match(taglists)
-        reports = []
-        taglists.each do |emails, pos, neg|
-            # First find all of the messages matched by our positive tags
-            messages = nil
-            if pos.include?("all")
-                messages = self.logs
-            else
-                # Find all of the messages that are tagged with any of our
-                # tags.
-                messages = self.logs.find_all do |log|
-                    pos.detect { |tag| log.tagged?(tag) }
-                end
-            end
-
-            # Now go through and remove any messages that match our negative tags
-            messages = messages.reject do |log|
-                if neg.detect do |tag| log.tagged?(tag) end
-                    true
-                end
-            end
-
-            if messages.empty?
-                Puppet.info "No messages to report to %s" % emails.join(",")
-                next
-            else
-                reports << [emails, messages.collect { |m| m.to_report }.join("\n")]
-            end
-        end
-        
-        return reports
-    end
-    
-    # Load the config file
-    def parse(text)
-        taglists = []
-        text.split("\n").each do |line|
-            taglist = emails = nil
-            case line.chomp
-            when /^\s*#/: next
-            when /^\s*$/: next
-            when /^\s*(.+)\s*:\s*(.+)\s*$/:
-                taglist = $1
-                emails = $2.sub(/#.*$/,'')
-            else
-                raise ArgumentError, "Invalid tagmail config file"
-            end
-
-            pos = []
-            neg = []
-            taglist.sub(/\s+$/,'').split(/\s*,\s*/).each do |tag|
-                unless tag =~ /^!?[-\w]+$/
-                    raise ArgumentError, "Invalid tag %s" % tag.inspect
-                end
-                case tag
-                when /^\w+/: pos << tag
-                when /^!\w+/: neg << tag.sub("!", '')
-                else
-                    raise Puppet::Error, "Invalid tag '%s'" % tag
-                end
-            end
-
-            # Now split the emails
-            emails = emails.sub(/\s+$/,'').split(/\s*,\s*/)
-            taglists << [emails, pos, neg]
-        end
-        return taglists
-    end
-
-    # Process the report.  This just calls the other associated messages.
-    def process
-        unless FileTest.exists?(Puppet[:tagmap])
-            Puppet.notice "Cannot send tagmail report; no tagmap file %s" %
-                Puppet[:tagmap]
-            return
-        end
-
-        taglists = parse(File.read(Puppet[:tagmap]))
-        
-        # Now find any appropriately tagged messages.
-        reports = match(taglists)
-
-        send(reports)
-    end
-    
-    # Send the email reports.
-    def send(reports)
-        pid = fork do
-            if Puppet[:smtpserver] != "none"
-                begin
-                    Net::SMTP.start(Puppet[:smtpserver]) do |smtp|
-                        reports.each do |emails, messages|
-                            Puppet.info "Sending report to %s" % emails.join(", ")
-                            smtp.open_message_stream(Puppet[:reportfrom], *emails) do |p|
-                              p.puts "From: #{Puppet[:reportfrom]}"
-                              p.puts "Subject: Puppet Report for %s" % self.host
-                              p.puts "To: " + emails.join(", ")
-                              p.puts "Date: " + Time.now.rfc2822
-                              p.puts
-                              p.puts messages
-                            end 
-                        end
-                    end
-                rescue => detail
-                    if Puppet[:debug]
-                        puts detail.backtrace
-                    end
-                    raise Puppet::Error,
-                        "Could not send report emails through smtp: %s" % detail
-                end
-            elsif Puppet[:sendmail] != ""
-                begin
-                    reports.each do |emails, messages|
-                        Puppet.info "Sending report to %s" % emails.join(", ")
-                        # We need to open a separate process for every set of email addresses
-                        IO.popen(Puppet[:sendmail] + " " + emails.join(" "), "w") do |p|
-                            p.puts "From: #{Puppet[:reportfrom]}"
-                            p.puts "Subject: Puppet Report for %s" % self.host
-                            p.puts "To: " + emails.join(", ")
-
-                            p.puts messages
-                        end
-                    end
-                rescue => detail
-                    if Puppet[:debug]
-                        puts detail.backtrace
-                    end
-                    raise Puppet::Error,
-                        "Could not send report emails via sendmail: %s" % detail
-                end
-            else
-                raise Puppet::Error, "SMTP server is unset and could not find sendmail"
-            end
-        end
-
-        # Don't bother waiting for the pid to return.
-        Process.detach(pid)
-    end
-end
-
diff --git a/lib/puppet/resource_reference.rb b/lib/puppet/resource_reference.rb
deleted file mode 100644
index 44b5188..0000000
--- a/lib/puppet/resource_reference.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-11-28.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet'
-
-# A simple class to canonize how we refer to and retrieve
-# resources.
-class Puppet::ResourceReference
-    attr_reader :type
-    attr_accessor :title, :catalog
-
-    def initialize(type, title)
-        # This will set @type if it looks like a resource reference.
-        self.title = title
-
-        # Don't override whatever was done by setting the title.
-        self.type = type if self.type.nil?
-        
-        @builtin_type = nil
-    end
-
-    # Find our resource.
-    def resolve
-        if catalog
-            return catalog.resource(to_s)
-        end
-        # If it's builtin, then just ask for it directly from the type.
-        if t = builtin_type
-            t[@title]
-        else # Else, look for a component with the full reference as the name.
-            Puppet::Type::Component[to_s]
-        end
-    end
-
-    # If the title has square brackets, treat it like a reference and
-    # set things appropriately; else, just set it.
-    def title=(value)
-        if value =~ /^([^\[\]]+)\[(.+)\]$/
-            self.type = $1
-            @title = $2
-        else
-            @title = value
-        end
-    end
-
-    # Canonize the type so we know it's always consistent.
-    def type=(value)
-        if value.nil? or value.to_s.downcase == "component"
-            @type = "Class"
-        else
-            # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-            x = @type = value.to_s.split("::").collect { |s| s.capitalize }.join("::")
-        end
-    end
-
-    # Convert to the standard way of referring to resources.
-    def to_s
-        "%s[%s]" % [@type, @title]
-    end
-
-    private
-
-    def builtin_type?
-        builtin_type ? true : false
-    end
-
-    def builtin_type
-        if @builtin_type.nil?
-            if @type =~ /::/
-                @builtin_type = false
-            elsif klass = Puppet::Type.type(@type.to_s.downcase)
-                @builtin_type = klass
-            else
-                @builtin_type = false
-            end
-        end
-        @builtin_type
-    end
-end
diff --git a/lib/puppet/simple_graph.rb b/lib/puppet/simple_graph.rb
deleted file mode 100644
index 48f393f..0000000
--- a/lib/puppet/simple_graph.rb
+++ /dev/null
@@ -1,318 +0,0 @@
-#  Created by Luke A. Kanies on 2007-11-07.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppet/external/dot'
-require 'puppet/relationship'
-
-# A hopefully-faster graph class to replace the use of GRATR.
-class Puppet::SimpleGraph
-    # An internal class for handling a vertex's edges.
-    class VertexWrapper
-        attr_accessor :in, :out, :vertex
-
-        # Remove all references to everything.
-        def clear
-            @adjacencies[:in].clear
-            @adjacencies[:out].clear
-            @vertex = nil
-        end
-
-        def initialize(vertex)
-            @vertex = vertex
-            @adjacencies = {:in => Hash.new { |h,k| h[k] = [] }, :out => Hash.new { |h,k| h[k] = [] }}
-            #@adjacencies = {:in => [], :out => []}
-        end
-
-        # Find adjacent vertices or edges.
-        def adjacent(options)
-            direction = options[:direction] || :out
-            options[:type] ||= :vertices
-
-            return @adjacencies[direction].values.flatten if options[:type] == :edges
-
-            return @adjacencies[direction].keys
-        end
-
-        # Add an edge to our list.
-        def add_edge(direction, edge)
-            @adjacencies[direction][other_vertex(direction, edge)] << edge
-        end
-
-        # Return all known edges.
-        def edges
-            [:in, :out].collect { |dir| @adjacencies[dir].values }.flatten
-        end
-
-        # Test whether we share an edge with a given vertex.
-        def has_edge?(direction, vertex)
-            return true if @adjacencies[direction][vertex].length > 0
-            return false
-        end
-
-        # Create methods for returning the degree and edges.
-        [:in, :out].each do |direction|
-            # LAK:NOTE If you decide to create methods for directly
-            # testing the degree, you'll have to get the values and flatten
-            # the results -- you might have duplicate edges, which can give
-            # a false impression of what the degree is.  That's just
-            # as expensive as just getting the edge list, so I've decided
-            # to only add this method.
-            define_method("%s_edges" % direction) do
-                @adjacencies[direction].values.flatten
-            end
-        end
-
-        # The other vertex in the edge.
-        def other_vertex(direction, edge)
-            case direction
-            when :in: edge.source
-            else
-                edge.target
-            end
-        end
-
-        # Remove an edge from our list.  Assumes that we've already checked
-        # that the edge is valid.
-        def remove_edge(direction, edge)
-            @adjacencies[direction][other_vertex(direction, edge)].delete(edge)
-        end
-
-        def to_s
-            vertex.to_s
-        end
-    end
-
-    def initialize
-        @vertices = {}
-        @edges = []
-    end
-
-    # Clear our graph.
-    def clear
-        @vertices.each { |vertex, wrapper| wrapper.clear }
-        @vertices.clear
-        @edges.clear
-    end
-
-    # Whether our graph is directed.  Always true.  Used to produce dot files.
-    def directed?
-        true
-    end
-
-    # Return a reversed version of this graph.
-    def reversal
-        result = self.class.new
-        vertices.each { |vertex| result.add_vertex(vertex) }
-        edges.each do |edge|
-            newedge = edge.class.new(edge.target, edge.source, edge.label)
-            result.add_edge(newedge)
-        end
-        result
-    end
-
-    # Return the size of the graph.
-    def size
-        @vertices.length
-    end
-
-    # Return the graph as an array.
-    def to_a
-        @vertices.keys
-    end
-
-    # Provide a topological sort.
-    def topsort
-        degree = {}
-        zeros = []
-        result = []
-
-        # Collect each of our vertices, with the number of in-edges each has.
-        @vertices.each do |name, wrapper|
-            edges = wrapper.in_edges
-            zeros << wrapper if edges.length == 0
-            degree[wrapper.vertex] = edges
-        end
-
-        # Iterate over each 0-degree vertex, decrementing the degree of
-        # each of its out-edges.
-        while wrapper = zeros.pop do
-            result << wrapper.vertex
-            wrapper.out_edges.each do |edge|
-                degree[edge.target].delete(edge)
-                zeros << @vertices[edge.target] if degree[edge.target].length == 0
-            end
-        end
-
-        # If we have any vertices left with non-zero in-degrees, then we've found a cycle.
-        if cycles = degree.find_all { |vertex, edges| edges.length > 0 } and cycles.length > 0
-            message = cycles.collect { |vertex, edges| edges.collect { |e| e.to_s }.join(", ") }.join(", ")
-            raise Puppet::Error, "Found dependency cycles in the following relationships: %s" % message
-        end
-
-        return result
-    end
-
-    # Add a new vertex to the graph.
-    def add_vertex(vertex)
-        return false if vertex?(vertex)
-        setup_vertex(vertex)
-        true # don't return the VertexWrapper instance.
-    end
-
-    # Remove a vertex from the graph.
-    def remove_vertex!(vertex)
-        return nil unless vertex?(vertex)
-        @vertices[vertex].edges.each { |edge| remove_edge!(edge) }
-        @vertices[vertex].clear
-        @vertices.delete(vertex)
-    end
-
-    # Test whether a given vertex is in the graph.
-    def vertex?(vertex)
-        @vertices.include?(vertex)
-    end
-
-    # Return a list of all vertices.
-    def vertices
-        @vertices.keys
-    end
-
-    # Add a new edge.  The graph user has to create the edge instance,
-    # since they have to specify what kind of edge it is.
-    def add_edge(source, target = nil, label = nil)
-        if target
-            edge = Puppet::Relationship.new(source, target, label)
-        else
-            edge = source
-        end
-        [edge.source, edge.target].each { |vertex| setup_vertex(vertex) unless vertex?(vertex) }
-        @vertices[edge.source].add_edge :out, edge
-        @vertices[edge.target].add_edge :in, edge
-        @edges << edge
-        true
-    end
-
-    # Find a matching edge.  Note that this only finds the first edge,
-    # not all of them or whatever.
-    def edge(source, target)
-        @edges.each_with_index { |test_edge, index| return test_edge if test_edge.source == source and test_edge.target == target }
-    end
-
-    def edge_label(source, target)
-        return nil unless edge = edge(source, target)
-        edge.label
-    end
-
-    # Is there an edge between the two vertices?
-    def edge?(source, target)
-        return false unless vertex?(source) and vertex?(target)
-
-        @vertices[source].has_edge?(:out, target)
-    end
-
-    def edges
-        @edges.dup
-    end
-
-    # Remove an edge from our graph.
-    def remove_edge!(edge)
-        @vertices[edge.source].remove_edge(:out, edge)
-        @vertices[edge.target].remove_edge(:in, edge)
-        
-        # Here we are looking for an exact edge, so we don't want to use ==, because
-        # it's too darn expensive (in testing, deleting 3000 edges went from 6 seconds to
-        # 0.05 seconds with this change).
-        @edges.each_with_index { |test_edge, index| @edges.delete_at(index) and break if edge.equal?(test_edge) }
-        nil
-    end
-
-    # Find adjacent edges.
-    def adjacent(vertex, options = {})
-        return [] unless wrapper = @vertices[vertex]
-        return wrapper.adjacent(options)
-    end
-
-    private
-
-    # An internal method that skips the validation, so we don't have
-    # duplicate validation calls.
-    def setup_vertex(vertex)
-        @vertices[vertex] = VertexWrapper.new(vertex)
-    end
- 
-    public
-    
-#    # For some reason, unconnected vertices do not show up in
-#    # this graph.
-#    def to_jpg(path, name)
-#        gv = vertices()
-#        Dir.chdir(path) do
-#            induced_subgraph(gv).write_to_graphic_file('jpg', name)
-#        end
-#    end
-
-    def to_yaml_properties
-        instance_variables
-    end
-
-    # Just walk the tree and pass each edge.
-    def walk(source, direction, &block)
-        adjacent(source, :direction => direction).each do |target|
-            yield source, target
-            walk(target, direction, &block)
-        end
-    end
-
-    # LAK:FIXME This is just a paste of the GRATR code with slight modifications.
-
-    # Return a DOT::DOTDigraph for directed graphs or a DOT::DOTSubgraph for an
-    # undirected Graph.  _params_ can contain any graph property specified in
-    # rdot.rb. If an edge or vertex label is a kind of Hash then the keys
-    # which match +dot+ properties will be used as well.
-    def to_dot_graph (params = {})
-      params['name'] ||= self.class.name.gsub(/:/,'_')
-      fontsize   = params['fontsize'] ? params['fontsize'] : '8'
-      graph      = (directed? ? DOT::DOTDigraph : DOT::DOTSubgraph).new(params)
-      edge_klass = directed? ? DOT::DOTDirectedEdge : DOT::DOTEdge
-      vertices.each do |v|
-        name = v.to_s
-        params = {'name'     => '"'+name+'"',
-                  'fontsize' => fontsize,
-                  'label'    => name}
-        v_label = v.to_s
-        params.merge!(v_label) if v_label and v_label.kind_of? Hash
-        graph << DOT::DOTNode.new(params)
-      end
-      edges.each do |e|
-        params = {'from'     => '"'+ e.source.to_s + '"',
-                  'to'       => '"'+ e.target.to_s + '"',
-                  'fontsize' => fontsize }
-        e_label = e.to_s
-        params.merge!(e_label) if e_label and e_label.kind_of? Hash
-        graph << edge_klass.new(params)
-      end
-      graph
-    end
-    
-    # Output the dot format as a string
-    def to_dot (params={}) to_dot_graph(params).to_s; end
-
-    # Call +dotty+ for the graph which is written to the file 'graph.dot'
-    # in the # current directory.
-    def dotty (params = {}, dotfile = 'graph.dot')
-      File.open(dotfile, 'w') {|f| f << to_dot(params) }
-      system('dotty', dotfile)
-    end
-
-    # Use +dot+ to create a graphical representation of the graph.  Returns the
-    # filename of the graphics file.
-    def write_to_graphic_file (fmt='png', dotfile='graph')
-      src = dotfile + '.dot'
-      dot = dotfile + '.' + fmt
-      
-      File.open(src, 'w') {|f| f << self.to_dot << "\n"}
-      
-      system( "dot -T#{fmt} #{src} -o #{dot}" )
-      dot
-    end
-end
diff --git a/lib/puppet/sslcertificates.rb b/lib/puppet/sslcertificates.rb
deleted file mode 100755
index 0c579d0..0000000
--- a/lib/puppet/sslcertificates.rb
+++ /dev/null
@@ -1,149 +0,0 @@
-# The library for manipulating SSL certs.
-
-require 'puppet'
-
-begin
-    require 'openssl'
-rescue LoadError
-    raise Puppet::Error, "You must have the Ruby openssl library installed"
-end
-
-module Puppet::SSLCertificates
-    #def self.mkcert(type, name, dnsnames, ttl, issuercert, issuername, serial, publickey)
-    def self.mkcert(hash)
-        [:type, :name, :ttl, :issuer, :serial, :publickey].each { |param|
-            unless hash.include?(param)
-                raise ArgumentError, "mkcert called without %s" % param
-            end
-        }
-
-        cert = OpenSSL::X509::Certificate.new
-        # Make the certificate valid as of yesterday, because
-        # so many people's clocks are out of sync.
-        from = Time.now - (60*60*24)
-
-        cert.subject = hash[:name]
-        if hash[:issuer]
-            cert.issuer = hash[:issuer].subject
-        else
-            # we're a self-signed cert
-            cert.issuer = hash[:name]
-        end
-        cert.not_before = from
-        cert.not_after = from + hash[:ttl]
-        cert.version = 2 # X509v3
-
-        cert.public_key = hash[:publickey]
-        cert.serial = hash[:serial]
-
-        basic_constraint = nil
-        key_usage = nil
-        ext_key_usage = nil
-        subject_alt_name = []
-
-        ef = OpenSSL::X509::ExtensionFactory.new
-
-        ef.subject_certificate = cert
-
-        if hash[:issuer]
-            ef.issuer_certificate = hash[:issuer]
-        else
-            ef.issuer_certificate = cert
-        end
-
-        ex = []
-        case hash[:type]
-        when :ca:
-            basic_constraint = "CA:TRUE"
-            key_usage = %w{cRLSign keyCertSign}
-        when :terminalsubca:
-            basic_constraint = "CA:TRUE,pathlen:0"
-            key_usage = %w{cRLSign keyCertSign}
-        when :server:
-            basic_constraint = "CA:FALSE"
-            dnsnames = Puppet[:certdnsnames]
-            name = hash[:name].to_s.sub(%r{/CN=},'')
-            if dnsnames != ""
-                dnsnames.split(':').each { |d| subject_alt_name << 'DNS:' + d }
-                subject_alt_name << 'DNS:' + name # Add the fqdn as an alias
-            elsif name == Facter.value(:fqdn) # we're a CA server, and thus probably the server
-                subject_alt_name << 'DNS:' + "puppet" # Add 'puppet' as an alias
-                subject_alt_name << 'DNS:' + name # Add the fqdn as an alias
-                subject_alt_name << 'DNS:' + name.sub(/^[^.]+./, "puppet.") # add puppet.domain as an alias
-            end
-            key_usage = %w{digitalSignature keyEncipherment}
-            ext_key_usage = %w{serverAuth clientAuth emailProtection}
-        when :ocsp:
-            basic_constraint = "CA:FALSE"
-            key_usage = %w{nonRepudiation digitalSignature}
-            ext_key_usage = %w{serverAuth OCSPSigning}
-        when :client:
-            basic_constraint = "CA:FALSE"
-            key_usage = %w{nonRepudiation digitalSignature keyEncipherment}
-            ext_key_usage = %w{clientAuth emailProtection}
-            ex << ef.create_extension("nsCertType", "client,email")
-        else
-            raise Puppet::Error, "unknown cert type '%s'" % hash[:type]
-        end
-
-        ex << ef.create_extension("nsComment",
-                                  "Puppet Ruby/OpenSSL Generated Certificate")
-        ex << ef.create_extension("basicConstraints", basic_constraint, true)
-        ex << ef.create_extension("subjectKeyIdentifier", "hash")
-
-        ex << ef.create_extension("keyUsage", key_usage.join(",")) if key_usage
-        ex << ef.create_extension("extendedKeyUsage", ext_key_usage.join(",")) if ext_key_usage
-	    ex << ef.create_extension("subjectAltName", subject_alt_name.join(",")) if ! subject_alt_name.empty?
-
-        #if @ca_config[:cdp_location] then
-        #  ex << ef.create_extension("crlDistributionPoints",
-        #                            @ca_config[:cdp_location])
-        #end
-
-        #if @ca_config[:ocsp_location] then
-        #  ex << ef.create_extension("authorityInfoAccess",
-        #                            "OCSP;" << @ca_config[:ocsp_location])
-        #end
-        cert.extensions = ex
-
-        # for some reason this _must_ be the last extension added
-        ex << ef.create_extension("authorityKeyIdentifier", "keyid:always,issuer:always") if hash[:type] == :ca
-
-        return cert
-    end
-
-    def self.mkhash(dir, cert, certfile)
-        # Make sure the hash is zero-padded to 8 chars
-        hash = "%08x" % cert.issuer.hash
-        hashpath = nil
-        10.times { |i|
-            path = File.join(dir, "%s.%s" % [hash, i])
-            if FileTest.exists?(path)
-                if FileTest.symlink?(path)
-                    dest = File.readlink(path)
-                    if dest == certfile
-                        # the correct link already exists
-                        hashpath = path
-                        break
-                    else
-                        next
-                    end
-                else
-                    next
-                end
-            end
-
-            File.symlink(certfile, path)
-
-            hashpath = path
-            break
-        }
-
-
-        return hashpath
-    end
-    require 'puppet/sslcertificates/certificate'
-    require 'puppet/sslcertificates/inventory'
-    require 'puppet/sslcertificates/ca'
-end
-
diff --git a/lib/puppet/sslcertificates/ca.rb b/lib/puppet/sslcertificates/ca.rb
deleted file mode 100644
index 2a16a32..0000000
--- a/lib/puppet/sslcertificates/ca.rb
+++ /dev/null
@@ -1,403 +0,0 @@
-require 'sync'
-
-class Puppet::SSLCertificates::CA
-    include Puppet::Util::Warnings
-
-    Certificate = Puppet::SSLCertificates::Certificate
-    attr_accessor :keyfile, :file, :config, :dir, :cert, :crl
-
-    def certfile
-        @config[:cacert]
-    end
-
-    # Remove all traces of a given host.  This is kind of hackish, but, eh.
-    def clean(host)
-        host = host.downcase
-        [:csrdir, :signeddir, :publickeydir, :privatekeydir, :certdir].each do |name|
-            dir = Puppet[name]
-
-            file = File.join(dir, host + ".pem")
-
-            if FileTest.exists?(file)
-                begin
-                    if Puppet[:name] == "puppetca"
-                        puts "Removing %s" % file
-                    else
-                        Puppet.info "Removing %s" % file
-                    end
-                    File.unlink(file)
-                rescue => detail
-                    raise Puppet::Error, "Could not delete %s: %s" %
-                        [file, detail]
-                end
-            end
-            
-        end
-    end
-
-    def host2csrfile(hostname)
-        File.join(Puppet[:csrdir], [hostname.downcase, "pem"].join("."))
-    end
-
-    # this stores signed certs in a directory unrelated to 
-    # normal client certs
-    def host2certfile(hostname)
-        File.join(Puppet[:signeddir], [hostname.downcase, "pem"].join("."))
-    end
-
-    # Turn our hostname into a Name object
-    def thing2name(thing)
-        thing.subject.to_a.find { |ary|
-            ary[0] == "CN"
-        }[1]
-    end
-
-    def initialize(hash = {})
-        Puppet.settings.use(:main, :ca, :ssl)
-        self.setconfig(hash)
-
-        if Puppet[:capass]
-            if FileTest.exists?(Puppet[:capass])
-                #puts "Reading %s" % Puppet[:capass]
-                #system "ls -al %s" % Puppet[:capass]
-                #File.read Puppet[:capass]
-                @config[:password] = self.getpass
-            else
-                # Don't create a password if the cert already exists
-                unless FileTest.exists?(@config[:cacert])
-                    @config[:password] = self.genpass
-                end
-            end
-        end
-
-        self.getcert
-        init_crl
-        unless FileTest.exists?(@config[:serial])
-            Puppet.settings.write(:serial) do |f|
-                f << "%04X" % 1
-            end
-        end
-    end
-
-    # Generate a new password for the CA.
-    def genpass
-        pass = ""
-        20.times { pass += (rand(74) + 48).chr }
-
-        begin
-            Puppet.settings.write(:capass) { |f| f.print pass }
-        rescue Errno::EACCES => detail
-            raise Puppet::Error, detail.to_s
-        end
-        return pass
-    end
-
-    # Get the CA password.
-    def getpass
-        if @config[:capass] and File.readable?(@config[:capass])
-            return File.read(@config[:capass])
-        else
-            raise Puppet::Error, "Could not decrypt CA key with password: %s" % detail
-        end
-    end
-
-    # Get the CA cert.
-    def getcert
-        if FileTest.exists?(@config[:cacert])
-            @cert = OpenSSL::X509::Certificate.new(
-                File.read(@config[:cacert])
-            )
-        else
-            self.mkrootcert
-        end
-    end
-
-    # Retrieve a client's CSR.
-    def getclientcsr(host)
-        csrfile = host2csrfile(host)
-        unless File.exists?(csrfile)
-            return nil
-        end
-
-        return OpenSSL::X509::Request.new(File.read(csrfile))
-    end
-
-    # Retrieve a client's certificate.
-    def getclientcert(host)
-        certfile = host2certfile(host)
-        unless File.exists?(certfile)
-            return [nil, nil]
-        end
-
-        return [OpenSSL::X509::Certificate.new(File.read(certfile)), @cert]
-    end
-
-    # List certificates waiting to be signed.  This returns a list of hostnames, not actual
-    # files -- the names can be converted to full paths with host2csrfile.
-    def list
-        return Dir.entries(Puppet[:csrdir]).find_all { |file|
-            file =~ /\.pem$/
-        }.collect { |file|
-            file.sub(/\.pem$/, '')
-        }
-    end
-
-    # List signed certificates.  This returns a list of hostnames, not actual 
-    # files -- the names can be converted to full paths with host2csrfile. 
-    def list_signed 
-        return Dir.entries(Puppet[:signeddir]).find_all { |file| 
-            file =~ /\.pem$/ 
-        }.collect { |file| 
-            file.sub(/\.pem$/, '') 
-        } 
-    end 
-
-    # Create the root certificate.
-    def mkrootcert
-        # Make the root cert's name the FQDN of the host running the CA.
-        name = Facter["hostname"].value
-        if domain = Facter["domain"].value
-            name += "." + domain
-        end
-        cert = Certificate.new(
-            :name => name,
-            :cert => @config[:cacert],
-            :encrypt => @config[:capass],
-            :key => @config[:cakey],
-            :selfsign => true,
-            :ttl => ttl,
-            :type => :ca
-        )
-
-        # This creates the cakey file
-        Puppet::Util::SUIDManager.asuser(Puppet[:user], Puppet[:group]) do
-            @cert = cert.mkselfsigned
-        end
-        Puppet.settings.write(:cacert) do |f|
-            f.puts @cert.to_pem
-        end
-        Puppet.settings.write(:capub) do |f|
-            f.puts @cert.public_key
-        end
-        return cert
-    end
-
-    def removeclientcsr(host)
-        csrfile = host2csrfile(host)
-        unless File.exists?(csrfile)
-            raise Puppet::Error, "No certificate request for %s" % host
-        end
-
-        File.unlink(csrfile)
-    end
-
-    # Revoke the certificate with serial number SERIAL issued by this
-    # CA. The REASON must be one of the OpenSSL::OCSP::REVOKED_* reasons
-    def revoke(serial, reason = OpenSSL::OCSP::REVOKED_STATUS_KEYCOMPROMISE)
-        if @config[:cacrl] == 'false'
-            raise Puppet::Error, "Revocation requires a CRL, but ca_crl is set to 'false'"
-        end
-        time = Time.now
-        revoked = OpenSSL::X509::Revoked.new
-        revoked.serial = serial
-        revoked.time = time
-        enum = OpenSSL::ASN1::Enumerated(reason)
-        ext = OpenSSL::X509::Extension.new("CRLReason", enum)
-        revoked.add_extension(ext)
-        @crl.add_revoked(revoked)
-        store_crl
-    end
-    
-    # Take the Puppet config and store it locally.
-    def setconfig(hash)
-        @config = {}
-        Puppet.settings.params("ca").each { |param|
-            param = param.intern if param.is_a? String
-            if hash.include?(param)
-                @config[param] = hash[param]
-                Puppet[param] = hash[param]
-                hash.delete(param)
-            else
-                @config[param] = Puppet[param]
-            end
-        }
-
-        if hash.include?(:password)
-            @config[:password] = hash[:password]
-            hash.delete(:password)
-        end
-
-        if hash.length > 0
-            raise ArgumentError, "Unknown parameters %s" % hash.keys.join(",")
-        end
-
-        [:cadir, :csrdir, :signeddir].each { |dir|
-            unless @config[dir]
-                raise Puppet::DevError, "%s is undefined" % dir
-            end
-        }
-    end
-
-    # Sign a given certificate request.
-    def sign(csr)
-        unless csr.is_a?(OpenSSL::X509::Request)
-            raise Puppet::Error,
-                "CA#sign only accepts OpenSSL::X509::Request objects, not %s" %
-                csr.class
-        end
-
-        unless csr.verify(csr.public_key)
-            raise Puppet::Error, "CSR sign verification failed"
-        end
-
-        serial = nil
-        Puppet.settings.readwritelock(:serial) { |f|
-            serial = File.read(@config[:serial]).chomp.hex
-            # increment the serial
-            f << "%04X" % (serial + 1)
-        }
-
-        newcert = Puppet::SSLCertificates.mkcert(
-            :type => :server,
-            :name => csr.subject,
-            :ttl => ttl,
-            :issuer => @cert,
-            :serial => serial,
-            :publickey => csr.public_key
-        )
-
-
-        sign_with_key(newcert)
-
-        self.storeclientcert(newcert)
-
-        return [newcert, @cert]
-    end
-
-    # Store the client's CSR for later signing.  This is called from
-    # server/ca.rb, and the CSRs are deleted once the certificate is actually
-    # signed.
-    def storeclientcsr(csr)
-        host = thing2name(csr)
-
-        csrfile = host2csrfile(host)
-        if File.exists?(csrfile)
-            raise Puppet::Error, "Certificate request for %s already exists" % host
-        end
-
-        Puppet.settings.writesub(:csrdir, csrfile) do |f|
-            f.print csr.to_pem
-        end
-    end
-
-    # Store the certificate that we generate.
-    def storeclientcert(cert)
-        host = thing2name(cert)
-
-        certfile = host2certfile(host)
-        if File.exists?(certfile)
-            Puppet.notice "Overwriting signed certificate %s for %s" %
-                [certfile, host]
-        end
-
-        Puppet::SSLCertificates::Inventory::add(cert)
-        Puppet.settings.writesub(:signeddir, certfile) do |f|
-            f.print cert.to_pem
-        end
-    end
-
-    # TTL for new certificates in seconds. If config param :ca_ttl is set, 
-    # use that, otherwise use :ca_days for backwards compatibility
-    def ttl
-        days = @config[:ca_days]
-        if days && days.size > 0
-            warnonce "Parameter ca_ttl is not set. Using depecated ca_days instead."
-            return @config[:ca_days] * 24 * 60 * 60
-        else
-            ttl = @config[:ca_ttl]
-            if ttl.is_a?(String)
-                unless ttl =~ /^(\d+)(y|d|h|s)$/
-                    raise ArgumentError, "Invalid ca_ttl #{ttl}"
-                end
-                case $2
-                when 'y'
-                    unit = 365 * 24 * 60 * 60
-                when 'd'
-                    unit = 24 * 60 * 60
-                when 'h'
-                    unit = 60 * 60
-                when 's'
-                    unit = 1
-                else
-                    raise ArgumentError, "Invalid unit for ca_ttl #{ttl}"
-                end
-                return $1.to_i * unit
-            else
-                return ttl
-            end
-        end
-    end
-    
-    private
-    def init_crl
-        if FileTest.exists?(@config[:cacrl])
-            @crl = OpenSSL::X509::CRL.new(
-                File.read(@config[:cacrl])
-            )
-        elsif @config[:cacrl] == 'false'
-            @crl = nil
-        else
-            # Create new CRL
-            @crl = OpenSSL::X509::CRL.new
-            @crl.issuer = @cert.subject
-            @crl.version = 1
-            store_crl
-            @crl
-        end
-    end
-        
-    def store_crl
-        # Increment the crlNumber
-        e = @crl.extensions.find { |e| e.oid == 'crlNumber' }
-        ext = @crl.extensions.reject { |e| e.oid == 'crlNumber' }
-        crlNum = OpenSSL::ASN1::Integer(e ? e.value.to_i + 1 : 0)
-        ext << OpenSSL::X509::Extension.new("crlNumber", crlNum)
-        @crl.extensions = ext
-
-        # Set last/next update
-        now = Time.now
-        @crl.last_update = now
-        # Keep CRL valid for 5 years
-        @crl.next_update = now + 5 * 365*24*60*60
-
-        sign_with_key(@crl)
-        Puppet.settings.write(:cacrl) do |f|
-            f.puts @crl.to_pem
-        end
-    end
-
-    def sign_with_key(signable, digest = OpenSSL::Digest::SHA1.new)
-        cakey = nil
-        if @config[:password]
-            begin
-                cakey = OpenSSL::PKey::RSA.new(
-                    File.read(@config[:cakey]), @config[:password]
-                )
-            rescue
-                raise Puppet::Error,
-                    "Decrypt of CA private key with password stored in @config[:capass] not possible"
-            end
-        else
-            cakey = OpenSSL::PKey::RSA.new(
-                File.read(@config[:cakey])
-            )
-        end
-
-        unless @cert.check_private_key(cakey)
-            raise Puppet::Error, "CA Certificate is invalid"
-        end
-
-        signable.sign(cakey, digest)
-    end
-end
-
diff --git a/lib/puppet/sslcertificates/certificate.rb b/lib/puppet/sslcertificates/certificate.rb
deleted file mode 100644
index a632cbd..0000000
--- a/lib/puppet/sslcertificates/certificate.rb
+++ /dev/null
@@ -1,282 +0,0 @@
-class Puppet::SSLCertificates::Certificate
-    SSLCertificates = Puppet::SSLCertificates
-
-    attr_accessor :certfile, :keyfile, :name, :dir, :hash, :type
-    attr_accessor :key, :cert, :csr, :cacert
-
-    @@params2names = {
-        :name       => "CN",
-        :state      => "ST",
-        :country    => "C",
-        :email      => "emailAddress",
-        :org        => "O",
-        :city       => "L",
-        :ou         => "OU"
-    }
-
-    def certname
-        OpenSSL::X509::Name.new self.subject
-    end
-
-    def delete
-        [@certfile, at keyfile].each { |file|
-            if FileTest.exists?(file)
-                File.unlink(file)
-            end
-        }
-
-        if defined? @hash and @hash
-            if FileTest.symlink?(@hash)
-                File.unlink(@hash)
-            end
-        end
-    end
-
-    def exists?
-        return FileTest.exists?(@certfile)
-    end
-
-    def getkey
-        unless FileTest.exists?(@keyfile)
-            self.mkkey()
-        end
-        if @password
-            @key = OpenSSL::PKey::RSA.new(
-                File.read(@keyfile),
-                @password
-            )
-        else
-            @key = OpenSSL::PKey::RSA.new(
-                File.read(@keyfile)
-            )
-        end
-    end
-
-    def initialize(hash)
-        unless hash.include?(:name)
-            raise Puppet::Error, "You must specify the common name for the certificate"
-        end
-        @name = hash[:name]
-
-        # init a few variables
-        @cert = @key = @csr = nil
-
-        if hash.include?(:cert)
-            @certfile = hash[:cert]
-            @dir = File.dirname(@certfile)
-        else
-            @dir = hash[:dir] || Puppet[:certdir]
-            @certfile = File.join(@dir, @name)
-        end
-
-        @cacertfile ||= File.join(Puppet[:certdir], "ca.pem")
-
-        unless FileTest.directory?(@dir)
-            Puppet.recmkdir(@dir)
-        end
-
-        unless @certfile =~ /\.pem$/
-            @certfile += ".pem"
-        end
-        @keyfile = hash[:key] || File.join(
-            Puppet[:privatekeydir], [@name,"pem"].join(".")
-        )
-        unless FileTest.directory?(@dir)
-            Puppet.recmkdir(@dir)
-        end
-
-        [@keyfile].each { |file|
-            dir = File.dirname(file)
-
-            unless FileTest.directory?(dir)
-                Puppet.recmkdir(dir)
-            end
-        }
-
-        @ttl = hash[:ttl] || 365 * 24 * 60 * 60
-        @selfsign = hash[:selfsign] || false
-        @encrypt = hash[:encrypt] || false
-        @replace = hash[:replace] || false
-        @issuer = hash[:issuer] || nil
-        
-        if hash.include?(:type)
-            case hash[:type] 
-            when :ca, :client, :server: @type = hash[:type]
-            else
-                raise "Invalid Cert type %s" % hash[:type]
-            end
-        else
-            @type = :client
-        end
-
-        @params = {:name => @name}
-        [:state, :country, :email, :org, :ou].each { |param|
-            if hash.include?(param)
-                @params[param] = hash[param]
-            end
-        }
-
-        if @encrypt
-            if @encrypt =~ /^\//
-                File.open(@encrypt) { |f|
-                    @password = f.read.chomp
-                }
-            else
-                raise Puppet::Error, ":encrypt must be a path to a pass phrase file"
-            end
-        else
-            @password = nil
-        end
-
-        if hash.include?(:selfsign)
-            @selfsign = hash[:selfsign]
-        else
-            @selfsign = false
-        end
-    end
-
-    # this only works for servers, not for users
-    def mkcsr
-        unless defined? @key and @key
-            self.getkey
-        end
-
-        name = OpenSSL::X509::Name.new self.subject
-
-        @csr = OpenSSL::X509::Request.new
-        @csr.version = 0
-        @csr.subject = name
-        @csr.public_key = @key.public_key
-        @csr.sign(@key, OpenSSL::Digest::SHA1.new)
-
-        #File.open(@csrfile, "w") { |f|
-        #    f << @csr.to_pem
-        #}
-
-        unless @csr.verify(@key.public_key)
-            raise Puppet::Error, "CSR sign verification failed"
-        end
-
-        return @csr
-    end
-
-    def mkkey
-        # @key is the file
-
-        @key = OpenSSL::PKey::RSA.new(1024)
-#            { |p,n|
-#                case p
-#                when 0; Puppet.info "key info: ."  # BN_generate_prime
-#                when 1; Puppet.info "key info: +"  # BN_generate_prime
-#                when 2; Puppet.info "key info: *"  # searching good prime,  
-#                                          # n = #of try,
-#                                          # but also data from BN_generate_prime
-#                when 3; Puppet.info "key info: \n" # found good prime, n==0 - p, n==1 - q,
-#                                          # but also data from BN_generate_prime
-#                else;   Puppet.info "key info: *"  # BN_generate_prime
-#                end
-#            }
-
-        if @password
-            #passwdproc = proc { @password }
-            keytext = @key.export(
-                OpenSSL::Cipher::DES.new(:EDE3, :CBC),
-                @password
-            )
-            File.open(@keyfile, "w", 0400) { |f|
-                f << keytext
-            }
-        else
-            File.open(@keyfile, "w", 0400) { |f|
-                f << @key.to_pem
-            }
-        end
-
-        #cmd = "#{ossl} genrsa -out #{@key} 1024"
-    end
-
-    def mkselfsigned
-        unless defined? @key and @key
-            self.getkey
-        end
-
-        if defined? @cert and @cert
-            raise Puppet::Error, "Cannot replace existing certificate"
-        end
-
-        args = {
-            :name => self.certname,
-            :ttl => @ttl,
-            :issuer => nil,
-            :serial => 0x0,
-            :publickey => @key.public_key
-        }
-        if @type
-            args[:type] = @type
-        else
-            args[:type] = :server
-        end
-        @cert = SSLCertificates.mkcert(args)
-
-        @cert.sign(@key, OpenSSL::Digest::SHA1.new) if @selfsign
-
-        return @cert
-    end
-
-    def subject(string = false)
-        subj = @@params2names.collect { |param, name|
-            if @params.include?(param)
-               [name, @params[param]]
-            end
-        }.reject { |ary| ary.nil? }
-
-        if string
-            return "/" + subj.collect { |ary|
-                "%s=%s" % ary
-            }.join("/") + "/"
-        else
-            return subj
-        end
-    end
-
-    # verify that we can track down the cert chain or whatever
-    def verify
-        "openssl verify -verbose -CAfile /home/luke/.puppet/ssl/certs/ca.pem -purpose sslserver culain.madstop.com.pem"
-    end
-
-    def write
-        files = {
-            @certfile => @cert,
-            @keyfile => @key,
-        }
-        if defined? @cacert
-            files[@cacertfile] = @cacert
-        end
-
-        files.each { |file,thing|
-            if defined? thing and thing
-                if FileTest.exists?(file)
-                    next
-                end
-
-                text = nil
-
-                if thing.is_a?(OpenSSL::PKey::RSA) and @password
-                    text = thing.export(
-                        OpenSSL::Cipher::DES.new(:EDE3, :CBC),
-                        @password
-                    )
-                else
-                    text = thing.to_pem
-                end
-
-                File.open(file, "w", 0660) { |f| f.print text }
-            end
-        }
-
-        if defined? @cacert
-            SSLCertificates.mkhash(Puppet[:certdir], @cacert, @cacertfile)
-        end
-    end
-end
-
diff --git a/lib/puppet/sslcertificates/inventory.rb b/lib/puppet/sslcertificates/inventory.rb
deleted file mode 100644
index 295c416..0000000
--- a/lib/puppet/sslcertificates/inventory.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# A module for keeping track of all the certificates issued by the CA, ever
-# Maintains the file "$cadir/inventory.txt"
-module Puppet::SSLCertificates
-    module Inventory
-
-        # Add CERT to the inventory of issued certs in '$cadir/inventory.txt'
-        # If no inventory exists yet, build an inventory and list all the 
-        # certificates that have been signed so far
-        def self.add(cert)
-            inited = false
-            if FileTest.exists?(Puppet[:cert_inventory])
-                inited = true
-            end
-
-            Puppet.settings.write(:cert_inventory, "a") do |f|
-                f.puts((inited ? nil : self.init).to_s + format(cert))
-            end
-        end
-
-        private
-
-        def self.init
-            inv = "# Inventory of signed certificates\n"
-            inv += "# SERIAL NOT_BEFORE NOT_AFTER SUBJECT\n"
-            Dir.glob(File::join(Puppet[:signeddir], "*.pem")) do |f|
-                inv += format(OpenSSL::X509::Certificate.new(File::read(f))) + "\n"
-            end
-            return inv
-        end
-
-        def self.format(cert)
-            iso = '%Y-%m-%dT%H:%M:%S%Z'
-            return "0x%04x %s %s %s" % [cert.serial,  
-                                        cert.not_before.strftime(iso), 
-                                        cert.not_after.strftime(iso),
-                                        cert.subject]
-        end
-    end
-end
-
diff --git a/lib/puppet/sslcertificates/monkey_patch.rb b/lib/puppet/sslcertificates/monkey_patch.rb
deleted file mode 100644
index 663b944..0000000
--- a/lib/puppet/sslcertificates/monkey_patch.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is the file that we use to add indirection to all the SSL Certificate classes.
-
-require 'puppet/indirector'
-
-OpenSSL::PKey::RSA.extend Puppet::Indirector
-OpenSSL::PKey::RSA.indirects :ssl_rsa, :terminus_class => :file
diff --git a/lib/puppet/sslcertificates/support.rb b/lib/puppet/sslcertificates/support.rb
deleted file mode 100644
index 5ca0672..0000000
--- a/lib/puppet/sslcertificates/support.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-require 'puppet/sslcertificates'
-
-# A module to handle reading of certificates.
-module Puppet::SSLCertificates::Support
-    class MissingCertificate < Puppet::Error; end
-    class InvalidCertificate < Puppet::Error; end
-
-    attr_reader :cacert
-
-    # Some metaprogramming to create methods for retrieving and creating keys.
-    # This probably isn't fewer lines than defining each separately...
-    def self.keytype(name, options, &block)
-        var = "@%s" % name
-
-        maker = "mk_%s" % name
-        reader = "read_%s" % name
-
-        unless param = options[:param]
-            raise ArgumentError, "You must specify the parameter for the key"
-        end
-
-        unless klass = options[:class]
-            raise ArgumentError, "You must specify the class for the key"
-        end
-
-        # Define the method that creates it.
-        define_method(maker, &block)
-
-        # Define the reading method.
-        define_method(reader) do
-            return nil unless FileTest.exists?(Puppet[param]) or rename_files_with_uppercase(Puppet[param])
-
-            begin
-                instance_variable_set(var, klass.new(File.read(Puppet[param])))
-            rescue => detail
-                raise InvalidCertificate, "Could not read %s: %s" % [param, detail]
-            end
-        end
-
-        # Define the overall method, which just calls the reader and maker
-        # as appropriate.
-        define_method(name) do
-            unless cert = instance_variable_get(var)
-                unless cert = send(reader)
-                    cert = send(maker)
-                    Puppet.settings.write(param) { |f| f.puts cert.to_pem }
-                end
-                instance_variable_set(var, cert)
-            end
-            cert
-        end
-    end
-
-    # The key pair.
-    keytype :key, :param => :hostprivkey, :class => OpenSSL::PKey::RSA do
-        Puppet.info "Creating a new SSL key at %s" % Puppet[:hostprivkey]
-        key = OpenSSL::PKey::RSA.new(Puppet[:keylength])
-
-        # Our key meta programming can only handle one file, so we have
-        # to separately write out the public key.
-        Puppet.settings.write(:hostpubkey) do |f|
-            f.print key.public_key.to_pem
-        end
-        return key
-    end
-
-    # Our certificate request
-    keytype :csr, :param => :hostcsr, :class => OpenSSL::X509::Request do
-        Puppet.info "Creating a new certificate request for %s" %
-            Puppet[:certname]
-
-        csr = OpenSSL::X509::Request.new
-        csr.version = 0
-        csr.subject = OpenSSL::X509::Name.new([["CN", Puppet[:certname]]])
-        csr.public_key = key.public_key
-        csr.sign(key, OpenSSL::Digest::MD5.new)
-
-        return csr
-    end
-
-    keytype :cert, :param => :hostcert, :class => OpenSSL::X509::Certificate do
-        raise MissingCertificate, "No host certificate"
-    end
-
-    keytype :ca_cert, :param => :localcacert, :class => OpenSSL::X509::Certificate do
-        raise MissingCertificate, "No CA certificate"
-    end
-
-    # Request a certificate from the remote system.  This does all of the work
-    # of creating the cert request, contacting the remote system, and
-    # storing the cert locally.
-    def requestcert
-        begin
-            cert, cacert = caclient.getcert(@csr.to_pem)
-        rescue => detail
-            if Puppet[:trace]
-                puts detail.backtrace
-            end
-            raise Puppet::Error.new("Certificate retrieval failed: %s" %
-                detail)
-        end
-
-        if cert.nil? or cert == ""
-            return nil
-        end
-        Puppet.settings.write(:hostcert) do |f| f.print cert end
-        Puppet.settings.write(:localcacert) do |f| f.print cacert end
-        #File.open(@certfile, "w", 0644) { |f| f.print cert }
-        #File.open(@cacertfile, "w", 0644) { |f| f.print cacert }
-        begin
-            @cert = OpenSSL::X509::Certificate.new(cert)
-            @cacert = OpenSSL::X509::Certificate.new(cacert)
-            retrieved = true
-        rescue => detail
-            raise Puppet::Error.new(
-                "Invalid certificate: %s" % detail
-            )
-        end
-
-        unless @cert.check_private_key(@key)
-            raise Puppet::DevError, "Received invalid certificate"
-        end
-        return retrieved
-    end
-
-    # A hack method to deal with files that exist with a different case.
-    # Just renames it; doesn't read it in or anything.
-    def rename_files_with_uppercase(file)
-        dir = File.dirname(file)
-        short = File.basename(file)
-
-        # If the dir isn't present, we clearly don't have the file.
-        #return nil unless FileTest.directory?(dir)
-
-        raise ArgumentError, "Tried to fix SSL files to a file containing uppercase" unless short.downcase == short
-
-        return false unless File.directory?(dir)
-
-        real_file = Dir.entries(dir).reject { |f| f =~ /^\./ }.find do |other|
-            other.downcase == short
-        end
-
-        return nil unless real_file
-
-        full_file = File.join(dir, real_file)
-
-        Puppet.notice "Fixing case in %s; renaming to %s" % [full_file, file]
-        File.rename(full_file, file)
-
-        return true
-    end
-end
diff --git a/lib/puppet/transaction.rb b/lib/puppet/transaction.rb
deleted file mode 100644
index f3defb7..0000000
--- a/lib/puppet/transaction.rb
+++ /dev/null
@@ -1,735 +0,0 @@
-# the class that actually walks our resource/property tree, collects the changes,
-# and performs them
-
-require 'puppet'
-
-module Puppet
-class Transaction
-    require 'puppet/transaction/change'
-    require 'puppet/transaction/event'
-
-    attr_accessor :component, :catalog, :ignoreschedules
-    attr_accessor :sorted_resources, :configurator
-
-    # The report, once generated.
-    attr_reader :report
-
-    # The list of events generated in this transaction.
-    attr_reader :events
-    
-    include Puppet::Util
-
-    # Add some additional times for reporting
-    def addtimes(hash)
-        hash.each do |name, num|
-            @timemetrics[name] = num
-        end
-    end
-
-    # Check to see if we should actually allow processing, but this really only
-    # matters when a resource is getting deleted.
-    def allow_processing?(resource, changes)
-        # If a resource is going to be deleted but it still has
-        # dependencies, then don't delete it unless it's implicit or the
-        # dependency is itself being deleted.
-        if resource.purging? and resource.deleting?
-            if deps = relationship_graph.dependents(resource) and ! deps.empty? and deps.detect { |d| ! d.deleting? }
-                resource.warning "%s still depend%s on me -- not purging" %
-                    [deps.collect { |r| r.ref }.join(","), deps.length > 1 ? "":"s"] 
-                return false
-            end
-        end
-
-        return true
-    end
-
-    # Are there any failed resources in this transaction?
-    def any_failed?
-        failures = @failures.inject(0) { |failures, array| failures += array[1]; failures }
-        if failures > 0
-            failures
-        else
-            false
-        end
-    end
-
-    # Apply all changes for a resource, returning a list of the events
-    # generated.
-    def apply(resource)
-        begin
-            changes = resource.evaluate
-        rescue => detail
-            if Puppet[:trace]
-                puts detail.backtrace
-            end
-
-            resource.err "Failed to retrieve current state of resource: %s" % detail
-
-            # Mark that it failed
-            @failures[resource] += 1
-
-            # And then return
-            return []
-        end
-
-        changes = [changes] unless changes.is_a?(Array)
-
-        if changes.length > 0
-            @resourcemetrics[:out_of_sync] += 1
-        end
-
-        return [] if changes.empty? or ! allow_processing?(resource, changes)
-
-        resourceevents = apply_changes(resource, changes)
-
-        # If there were changes and the resource isn't in noop mode...
-        unless changes.empty? or resource.noop
-            # Record when we last synced
-            resource.cache(:synced, Time.now)
-
-            # Flush, if appropriate
-            if resource.respond_to?(:flush)
-                resource.flush
-            end
-            
-            # And set a trigger for refreshing this resource if it's a
-            # self-refresher
-            if resource.self_refresh? and ! resource.deleting?
-                # Create an edge with this resource as both the source and
-                # target.  The triggering method treats these specially for
-                # logging.
-                events = resourceevents.collect { |e| e.name }
-                set_trigger(Puppet::Relationship.new(resource, resource, :callback => :refresh, :event => events))
-            end
-        end
-
-        resourceevents
-    end
-
-    # Apply each change in turn.
-    def apply_changes(resource, changes)
-        changes.collect { |change|
-            @changes << change
-            @count += 1
-            events = nil
-            begin
-                # use an array, so that changes can return more than one
-                # event if they want
-                events = [change.forward].flatten.reject { |e| e.nil? }
-            rescue => detail
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-                change.property.err "change from %s to %s failed: %s" %
-                    [change.property.is_to_s(change.is), change.property.should_to_s(change.should), detail]
-                @failures[resource] += 1
-                next
-                # FIXME this should support using onerror to determine
-                # behaviour; or more likely, the client calling us
-                # should do so
-            end
-
-            # Mark that our change happened, so it can be reversed
-            # if we ever get to that point
-            unless events.nil? or (events.is_a?(Array) and (events.empty?) or events.include?(:noop))
-                change.changed = true
-                @resourcemetrics[:applied] += 1
-            end
-
-            events
-        }.flatten.reject { |e| e.nil? }
-    end
-
-    # Find all of the changed resources.
-    def changed?
-        @changes.find_all { |change| change.changed }.collect { |change|
-            unless change.property.resource
-                raise "No resource for %s" % change.inspect
-            end
-            change.property.resource
-        }.uniq
-    end
-    
-    # Do any necessary cleanup.  If we don't get rid of the graphs, the
-    # contained resources might never get cleaned up.
-    def cleanup
-        if defined? @generated
-            relationship_graph.remove_resource(*@generated)
-        end
-    end
-
-    # Copy an important relationships from the parent to the newly-generated
-    # child resource.
-    def copy_relationships(resource, children)
-        depthfirst = resource.depthfirst?
-        
-        children.each do |gen_child|
-            if depthfirst
-                edge = [gen_child, resource]
-            else
-                edge = [resource, gen_child]
-            end
-            relationship_graph.add_resource(gen_child) unless relationship_graph.resource(gen_child.ref)
-
-            unless relationship_graph.edge?(edge[1], edge[0])
-                relationship_graph.add_edge(*edge)
-            else
-                resource.debug "Skipping automatic relationship to %s" % gen_child
-            end
-        end
-    end
-
-    # Are we deleting this resource?
-    def deleting?(changes)
-        changes.detect { |change|
-            change.property.name == :ensure and change.should == :absent
-        }
-    end
-
-    # See if the resource generates new resources at evaluation time.
-    def eval_generate(resource)
-        if resource.respond_to?(:eval_generate)
-            begin
-                children = resource.eval_generate
-            rescue => detail
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-                resource.err "Failed to generate additional resources during transaction: %s" %
-                    detail
-                return nil
-            end
-            
-            if children
-                children.each { |child| child.finish }
-                @generated += children
-                return children
-            end
-        end
-    end
-    
-    # Evaluate a single resource.
-    def eval_resource(resource, checkskip = true)
-        events = []
-        
-        if resource.is_a?(Puppet::Type::Component)
-            raise Puppet::DevError, "Got a component to evaluate"
-        end
-        
-        if checkskip and skip?(resource)
-            @resourcemetrics[:skipped] += 1
-        else
-            @resourcemetrics[:scheduled] += 1
-            
-            changecount = @changes.length
-            
-            # We need to generate first regardless, because the recursive
-            # actions sometimes change how the top resource is applied.
-            children = eval_generate(resource)
-            
-            if children and resource.depthfirst?
-                children.each do |child|
-                    # The child will never be skipped when the parent isn't
-                    events += eval_resource(child, false)
-                end
-            end
-
-            # Perform the actual changes
-            seconds = thinmark do
-                events += apply(resource)
-            end
-
-            if children and ! resource.depthfirst?
-                children.each do |child|
-                    events += eval_resource(child, false)
-                end
-            end
-
-            # Create a child/parent relationship.  We do this after everything else because
-            # we want explicit relationships to be able to override automatic relationships,
-            # including this one.
-            if children
-                copy_relationships(resource, children)
-            end
-            
-            # A bit of hackery here -- if skipcheck is true, then we're the
-            # top-level resource.  If that's the case, then make sure all of
-            # the changes list this resource as a proxy.  This is really only
-            # necessary for rollback, since we know the generating resource
-            # during forward changes.
-            if children and checkskip
-                @changes[changecount..-1].each { |change| change.proxy = resource }
-            end
-
-            # Keep track of how long we spend in each type of resource
-            @timemetrics[resource.class.name] += seconds
-        end
-
-        # Check to see if there are any events for this resource
-        if triggedevents = trigger(resource)
-            events += triggedevents
-        end
-
-        # Collect the targets of any subscriptions to those events.  We pass
-        # the parent resource in so it will override the source in the events,
-        # since eval_generated children can't have direct relationships.
-        relationship_graph.matching_edges(events, resource).each do |orig_edge|
-            # We have to dup the label here, else we modify the original edge label,
-            # which affects whether a given event will match on the next run, which is,
-            # of course, bad.
-            edge = orig_edge.class.new(orig_edge.source, orig_edge.target)
-            label = orig_edge.label.dup
-            label[:event] = events.collect { |e| e.name }
-            edge.label = label
-            set_trigger(edge)
-        end
-
-        # And return the events for collection
-        events
-    end
-
-    # This method does all the actual work of running a transaction.  It
-    # collects all of the changes, executes them, and responds to any
-    # necessary events.
-    def evaluate
-        @count = 0
-
-        # Start logging.
-        Puppet::Util::Log.newdestination(@report)
-        
-        prepare()
-
-        begin
-            allevents = @sorted_resources.collect { |resource|
-                if resource.is_a?(Puppet::Type::Component)
-                    Puppet.warning "Somehow left a component in the relationship graph"
-                    next
-                end
-                ret = nil
-                seconds = thinmark do
-                    ret = eval_resource(resource)
-                end
-
-                if Puppet[:evaltrace] and @catalog.host_config?
-                    resource.info "Evaluated in %0.2f seconds" % seconds
-                end
-                ret
-            }.flatten.reject { |e| e.nil? }
-        ensure
-            # And then close the transaction log.
-            Puppet::Util::Log.close(@report)
-        end
-
-        Puppet.debug "Finishing transaction %s with %s changes" %
-            [self.object_id, @count]
-
-        @events = allevents
-        allevents
-    end
-
-    # Determine whether a given resource has failed.
-    def failed?(obj)
-        if @failures[obj] > 0
-            return @failures[obj]
-        else
-            return false
-        end
-    end
-
-    # Does this resource have any failed dependencies?
-    def failed_dependencies?(resource)
-        # First make sure there are no failed dependencies.  To do this,
-        # we check for failures in any of the vertexes above us.  It's not
-        # enough to check the immediate dependencies, which is why we use
-        # a tree from the reversed graph.
-        skip = false
-        deps = relationship_graph.dependencies(resource)
-        deps.each do |dep|
-            if fails = failed?(dep)
-                resource.notice "Dependency %s[%s] has %s failures" %
-                    [dep.class.name, dep.name, @failures[dep]]
-                skip = true
-            end
-        end
-        
-        return skip
-    end
-    
-    # Collect any dynamically generated resources.
-    def generate
-        list = @catalog.vertices
-        
-        # Store a list of all generated resources, so that we can clean them up
-        # after the transaction closes.
-        @generated = []
-        
-        newlist = []
-        while ! list.empty?
-            list.each do |resource|
-                if resource.respond_to?(:generate)
-                    begin
-                        made = resource.generate
-                    rescue => detail
-                        resource.err "Failed to generate additional resources: %s" %
-                            detail
-                    end
-                    next unless made
-                    unless made.is_a?(Array)
-                        made = [made]
-                    end
-                    made.uniq!
-                    made.each do |res|
-                        @catalog.add_resource(res)
-                        res.catalog = catalog
-                        newlist << res
-                        @generated << res
-                        res.finish
-                    end
-                end
-            end
-            list.clear
-            list = newlist
-            newlist = []
-        end
-    end
-
-    # Generate a transaction report.
-    def generate_report
-        @resourcemetrics[:failed] = @failures.find_all do |name, num|
-            num > 0
-        end.length
-
-        # Get the total time spent
-        @timemetrics[:total] = @timemetrics.inject(0) do |total, vals|
-            total += vals[1]
-            total
-        end
-
-        # Add all of the metrics related to resource count and status
-        @report.newmetric(:resources, @resourcemetrics)
-
-        # Record the relative time spent in each resource.
-        @report.newmetric(:time, @timemetrics)
-
-        # Then all of the change-related metrics
-        @report.newmetric(:changes,
-            :total => @changes.length
-        )
-
-        @report.time = Time.now
-
-        return @report
-    end
-
-    # Should we ignore tags?
-    def ignore_tags?
-        ! (@catalog.host_config? or Puppet[:name] == "puppet")
-    end
-
-    # this should only be called by a Puppet::Type::Component resource now
-    # and it should only receive an array
-    def initialize(resources)
-        if resources.is_a?(Puppet::Node::Catalog)
-            @catalog = resources
-        elsif resources.is_a?(Puppet::PGraph)
-            raise "Transactions should get catalogs now, not PGraph"
-        else
-            raise "Transactions require catalogs"
-        end
-
-        @resourcemetrics = {
-            :total => @catalog.vertices.length,
-            :out_of_sync => 0,    # The number of resources that had changes
-            :applied => 0,        # The number of resources fixed
-            :skipped => 0,      # The number of resources skipped
-            :restarted => 0,    # The number of resources triggered
-            :failed_restarts => 0, # The number of resources that fail a trigger
-            :scheduled => 0     # The number of resources scheduled
-        }
-
-        # Metrics for distributing times across the different types.
-        @timemetrics = Hash.new(0)
-
-        # The number of resources that were triggered in this run
-        @triggered = Hash.new { |hash, key|
-            hash[key] = Hash.new(0)
-        }
-
-        # Targets of being triggered.
-        @targets = Hash.new do |hash, key|
-            hash[key] = []
-        end
-
-        # The changes we're performing
-        @changes = []
-
-        # The resources that have failed and the number of failures each.  This
-        # is used for skipping resources because of failed dependencies.
-        @failures = Hash.new do |h, key|
-            h[key] = 0
-        end
-
-        @report = Report.new
-        @count = 0
-    end
-
-    # Prefetch any providers that support it.  We don't support prefetching
-    # types, just providers.
-    def prefetch
-        prefetchers = {}
-        @catalog.vertices.each do |resource|
-            if provider = resource.provider and provider.class.respond_to?(:prefetch)
-                prefetchers[provider.class] ||= {}
-                prefetchers[provider.class][resource.title] = resource
-            end
-        end
-
-        # Now call prefetch, passing in the resources so that the provider instances can be replaced.
-        prefetchers.each do |provider, resources|
-            Puppet.debug "Prefetching %s resources for %s" % [provider.name, provider.resource_type.name]
-            begin
-                provider.prefetch(resources)
-            rescue => detail
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-                Puppet.err "Could not prefetch %s provider '%s': %s" % [provider.resource_type.name, provider.name, detail]
-            end
-        end
-    end
-    
-    # Prepare to evaluate the resources in a transaction.
-    def prepare
-        # Now add any dynamically generated resources
-        generate()
-
-        # Then prefetch.  It's important that we generate and then prefetch,
-        # so that any generated resources also get prefetched.
-        prefetch()
-        
-        # This will throw an error if there are cycles in the graph.
-        @sorted_resources = relationship_graph.topsort
-    end
-
-    def relationship_graph
-        catalog.relationship_graph
-    end
-    
-    # Send off the transaction report.
-    def send_report
-        begin
-            report = generate_report()
-        rescue => detail
-            Puppet.err "Could not generate report: %s" % detail
-            return
-        end
-
-        if Puppet[:rrdgraph] == true
-            report.graph()
-        end
-
-        if Puppet[:summarize]
-            puts report.summary
-        end
-        
-        if Puppet[:report]
-            begin
-                reportclient().report(report)
-            rescue => detail
-                Puppet.err "Reporting failed: %s" % detail
-            end
-        end
-    end
-
-    def reportclient
-        unless defined? @reportclient
-            @reportclient = Puppet::Network::Client.report.new(
-                :Server => Puppet[:reportserver]
-            )
-        end
-
-        @reportclient
-    end
-
-    # Roll all completed changes back.
-    def rollback
-        @targets.clear
-        @triggered.clear
-        allevents = @changes.reverse.collect { |change|
-            # skip changes that were never actually run
-            unless change.changed
-                Puppet.debug "%s was not changed" % change.to_s
-                next
-            end
-            begin
-                events = change.backward
-            rescue => detail
-                Puppet.err("%s rollback failed: %s" % [change,detail])
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-                next
-                # at this point, we would normally do error handling
-                # but i haven't decided what to do for that yet
-                # so just record that a sync failed for a given resource
-                #@@failures[change.property.parent] += 1
-                # this still could get hairy; what if file contents changed,
-                # but a chmod failed?  how would i handle that error? dern
-            end
-            
-            # FIXME This won't work right now.
-            relationship_graph.matching_edges(events).each do |edge|
-                @targets[edge.target] << edge
-            end
-
-            # Now check to see if there are any events for this child.
-            # Kind of hackish, since going backwards goes a change at a
-            # time, not a child at a time.
-            trigger(change.property.resource)
-
-            # And return the events for collection
-            events
-        }.flatten.reject { |e| e.nil? }
-    end
-    
-    # Is the resource currently scheduled?
-    def scheduled?(resource)
-        self.ignoreschedules or resource.scheduled?
-    end
-
-    # Set an edge to be triggered when we evaluate its target.
-    def set_trigger(edge)
-        return unless method = edge.callback
-        return unless edge.target.respond_to?(method)
-        if edge.target.respond_to?(:ref)
-            unless edge.source == edge.target
-                edge.source.info "Scheduling %s of %s" % [edge.callback, edge.target.ref]
-            end
-        end
-        @targets[edge.target] << edge
-    end
-    
-    # Should this resource be skipped?
-    def skip?(resource)
-        skip = false
-        if missing_tags?(resource)
-            resource.debug "Not tagged with %s" % tags.join(", ")
-        elsif ! scheduled?(resource)
-            resource.debug "Not scheduled"
-        elsif failed_dependencies?(resource)
-            resource.warning "Skipping because of failed dependencies"
-        else
-            return false
-        end
-        return true
-    end
-    
-    # The tags we should be checking.
-    def tags
-        unless defined? @tags
-            tags = Puppet[:tags]
-            if tags.nil? or tags == ""
-                @tags = []
-            else
-                @tags = tags.split(/\s*,\s*/)
-            end
-        end
-        
-        @tags
-    end
-
-    def tags=(tags)
-        tags = [tags] unless tags.is_a?(Array)
-        @tags = tags
-    end
-    
-    # Is this resource tagged appropriately?
-    def missing_tags?(resource)
-        return false if self.ignore_tags? or tags.empty?
-        return true unless resource.tagged?(tags)
-    end
-    
-    # Are there any edges that target this resource?
-    def targeted?(resource)
-        # The default value is a new array so we have to test the length of it.
-        @targets.include?(resource) and @targets[resource].length > 0
-    end
-
-    # Trigger any subscriptions to a child.  This does an upwardly recursive
-    # search -- it triggers the passed resource, but also the resource's parent
-    # and so on up the tree.
-    def trigger(resource)
-        return nil unless targeted?(resource)
-        callbacks = Hash.new { |hash, key| hash[key] = [] }
-
-        trigged = []
-        @targets[resource].each do |edge|
-            # Collect all of the subs for each callback
-            callbacks[edge.callback] << edge
-        end
-
-        callbacks.each do |callback, subs|
-            noop = true
-            subs.each do |edge|
-                if edge.event.nil? or ! edge.event.include?(:noop)
-                    noop = false
-                end
-            end
-
-            if noop
-                resource.notice "Would have triggered %s from %s dependencies" %
-                    [callback, subs.length]
-
-                # And then add an event for it.
-                return [Puppet::Transaction::Event.new(:noop, resource)]
-            end
-
-            if subs.length == 1 and subs[0].source == resource
-                message = "Refreshing self"
-            else
-                message = "Triggering '%s' from %s dependencies" %
-                    [callback, subs.length]
-            end
-            resource.notice message
-            
-            # At this point, just log failures, don't try to react
-            # to them in any way.
-            begin
-                resource.send(callback)
-                @resourcemetrics[:restarted] += 1
-            rescue => detail
-                resource.err "Failed to call %s on %s: %s" %
-                    [callback, resource, detail]
-
-                @resourcemetrics[:failed_restarts] += 1
-
-                if Puppet[:trace]
-                    puts detail.backtrace
-                end
-            end
-
-            # And then add an event for it.
-            trigged << Puppet::Transaction::Event.new(:triggered, resource)
-
-            triggered(resource, callback)
-        end
-
-        if trigged.empty?
-            return nil
-        else
-            return trigged
-        end
-    end
-
-    def triggered(resource, method)
-        @triggered[resource][method] += 1
-    end
-
-    def triggered?(resource, method)
-        @triggered[resource][method]
-    end
-end
-end
-
-require 'puppet/transaction/report'
-
diff --git a/lib/puppet/transaction/change.rb b/lib/puppet/transaction/change.rb
deleted file mode 100644
index e05c259..0000000
--- a/lib/puppet/transaction/change.rb
+++ /dev/null
@@ -1,94 +0,0 @@
-require 'puppet/transaction'
-require 'puppet/transaction/event'
-
-# Handle all of the work around performing an actual change,
-# including calling 'sync' on the properties and producing events.
-class Puppet::Transaction::Change
-    attr_accessor :is, :should, :path, :property, :changed, :proxy
-    
-    # Switch the goals of the property, thus running the change in reverse.
-    def backward
-        @is, @should = @should, @is
-        @property.should = @should
-
-        @property.info "Reversing %s" % self
-        return self.go
-    end
-    
-    def changed?
-        self.changed
-    end
-
-    # Create our event object.
-    def event(name)
-        # default to a simple event type
-        unless name.is_a?(Symbol)
-            @property.warning("Property '%s' returned invalid event '%s'; resetting to default" %
-                [@property.class, name])
-
-            name = @property.event(should)
-        end
-        
-        Puppet::Transaction::Event.new(name, self.resource)
-    end
-
-    def initialize(property, currentvalue)
-        @property = property
-        @path = [property.path,"change"].flatten
-        @is = currentvalue
-
-        @should = property.should
-
-        @changed = false
-    end
-
-    # Perform the actual change.  This method can go either forward or
-    # backward, and produces an event.
-    def go
-        if self.noop?
-            @property.log "is %s, should be %s (noop)" % [property.is_to_s(@is), property.should_to_s(@should)]
-            return [event(:noop)]
-        end
-
-        # The transaction catches any exceptions here.
-        events = @property.sync
-        if events.nil?
-            return nil
-        end
-
-        if events.is_a?(Array)
-            if events.empty?
-                return nil
-            end
-        else
-            events = [events]
-        end
-        
-        return events.collect { |name|
-            @report = @property.log(@property.change_to_s(@is, @should))
-            event(name)
-        }
-    end
-
-    def forward
-        return self.go
-    end
-    
-    # Is our property noop?  This is used for generating special events.
-    def noop?
-        return @property.noop
-    end
-    
-    # The resource that generated this change.  This is used for handling events,
-    # and the proxy resource is used for generated resources, since we can't
-    # send an event to a resource we don't have a direct relationship.  If we
-    # have a proxy resource, then the events will be considered to be from
-    # that resource, rather than us, so the graph resolution will still work.
-    def resource
-        self.proxy || @property.resource
-    end
-
-    def to_s
-        return "change %s" % @property.change_to_s(@is, @should)
-    end
-end
diff --git a/lib/puppet/transaction/event.rb b/lib/puppet/transaction/event.rb
deleted file mode 100644
index f1a48b3..0000000
--- a/lib/puppet/transaction/event.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'puppet'
-require 'puppet/util/methodhelper'
-require 'puppet/util/errors'
-
-# events are transient packets of information; they result in one or more (or none)
-# subscriptions getting triggered, and then they get cleared
-# eventually, these will be passed on to some central event system
-class Puppet::Transaction::Event
-    include Puppet::Util::MethodHelper
-    include Puppet::Util::Errors
-    
-    attr_reader :name, :source
-
-    def initialize(name, source)
-        @name, @source = name, source
-    end
-
-    def to_s
-        source.to_s + " -> " + name.to_s
-    end
-end
diff --git a/lib/puppet/transaction/report.rb b/lib/puppet/transaction/report.rb
deleted file mode 100644
index 89da7ed..0000000
--- a/lib/puppet/transaction/report.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require 'puppet'
-require 'puppet/indirector'
-
-# A class for reporting what happens on each client.  Reports consist of
-# two types of data:  Logs and Metrics.  Logs are the output that each
-# change produces, and Metrics are all of the numerical data involved
-# in the transaction.
-class Puppet::Transaction::Report
-    extend Puppet::Indirector
-
-    indirects :report, :terminus_class => :processor
-
-    attr_accessor :logs, :metrics, :time, :host
-    
-    def <<(msg)
-        @logs << msg
-        return self
-    end
-
-    def initialize
-        @metrics = {}
-        @logs = []
-
-        @records = Hash.new do |hash, key|
-            hash[key] = []
-        end
-
-        @host = Puppet[:certname]
-    end
-
-    def name
-        host
-    end
-
-    # Create a new metric.
-    def newmetric(name, hash)
-        metric = Puppet::Util::Metric.new(name)
-
-        hash.each do |name, value|
-            metric.newvalue(name, value)
-        end
-
-        @metrics[metric.name] = metric
-    end
-
-    # Add a new log message.
-    def newlog(msg)
-        @logs << msg
-    end
-
-    def record(metric, object)
-        @records[metric] << object
-    end
-
-    # Provide a summary of this report.
-    def summary
-        ret = ""
-
-        @metrics.sort { |a,b| a[1].label <=> b[1].label }.each do |name, metric|
-            ret += "%s:\n" % metric.label
-            metric.values.sort { |a,b|
-                # sort by label
-                if a[0] == :total
-                    1
-                elsif b[0] == :total
-                    -1
-                else
-                    a[1] <=> b[1]
-                end
-            }.each do |name, label, value|
-                next if value == 0
-                if value.is_a?(Float)
-                    value = "%0.2f" % value
-                end
-                ret += "   %15s %s\n" % [label + ":", value]
-            end
-        end
-        return ret
-    end
-end
-
diff --git a/lib/puppet/transportable.rb b/lib/puppet/transportable.rb
deleted file mode 100644
index d203b59..0000000
--- a/lib/puppet/transportable.rb
+++ /dev/null
@@ -1,258 +0,0 @@
-require 'puppet'
-require 'puppet/resource_reference'
-require 'yaml'
-
-module Puppet
-    # The transportable objects themselves.  Basically just a hash with some
-    # metadata and a few extra methods.  I used to have the object actually
-    # be a subclass of Hash, but I could never correctly dump them using
-    # YAML.
-    class TransObject
-        include Enumerable
-        attr_accessor :type, :name, :file, :line, :catalog
-
-        attr_writer :tags
-
-        %w{has_key? include? length delete empty? << [] []=}.each { |method|
-            define_method(method) do |*args|
-                @params.send(method, *args)
-            end
-        }
-
-        def each
-            @params.each { |p,v| yield p, v }
-        end
-
-        def initialize(name,type)
-            @type = type.to_s.downcase
-            @name = name
-            @params = {}
-            @tags = []
-        end
-
-        def longname
-            return [@type, at name].join('--')
-        end
-
-        def ref
-            unless defined? @ref
-                @ref = Puppet::ResourceReference.new(@type, @name)
-            end
-            @ref.to_s
-        end
-
-        def tags
-            return @tags
-        end
-
-        # Convert a defined type into a component.
-        def to_component
-            trans = TransObject.new(ref, :component)
-            @params.each { |param,value|
-                next unless Puppet::Type::Component.validattr?(param)
-                Puppet.debug "Defining %s on %s" % [param, ref]
-                trans[param] = value
-            }
-            Puppet::Type::Component.create(trans)
-        end
-
-        def to_hash
-            @params.dup
-        end
-
-        def to_s
-            return "%s(%s) => %s" % [@type, at name,super]
-        end
-
-        def to_manifest
-            "%s { '%s':\n%s\n}" % 
-                [self.type.to_s, self.name,
-                 @params.collect { |p, v|
-                     if v.is_a? Array
-                         "    #{p} => [\'#{v.join("','")}\']"
-                     else
-                         "    #{p} => \'#{v}\'"
-                     end
-                 }.join(",\n")
-                ]
-        end
-
-        def to_yaml_properties
-            instance_variables.reject { |v| %w{@ref}.include?(v) }
-        end
-
-        def to_ref
-            ref
-        end
-
-        def to_type
-            if typeklass = Puppet::Type.type(self.type)
-                return typeklass.create(self)
-            else
-                return to_component
-            end
-        end
-    end
-
-    # Just a linear container for objects.  Behaves mostly like an array, except
-    # that YAML will correctly dump them even with their instance variables.
-    class TransBucket
-        include Enumerable
-
-        attr_accessor :name, :type, :file, :line, :classes, :keyword, :top, :catalog
-
-        %w{delete shift include? length empty? << []}.each { |method|
-            define_method(method) do |*args|
-                #Puppet.warning "Calling %s with %s" % [method, args.inspect]
-                @children.send(method, *args)
-                #Puppet.warning @params.inspect
-            end
-        }
-
-        # Recursively yield everything.
-        def delve(&block)
-            @children.each do |obj|
-                block.call(obj)
-                if obj.is_a? self.class
-                    obj.delve(&block)
-                else
-                    obj
-                end
-            end
-        end
-
-        def each
-            @children.each { |c| yield c }
-        end
-
-        # Turn our heirarchy into a flat list
-        def flatten
-            @children.collect do |obj|
-                if obj.is_a? Puppet::TransBucket
-                    obj.flatten
-                else
-                    obj
-                end
-            end.flatten
-        end
-
-        def initialize(children = [])
-            @children = children
-        end
-
-        def push(*args)
-            args.each { |arg|
-                case arg
-                when Puppet::TransBucket, Puppet::TransObject
-                    # nada
-                else
-                    raise Puppet::DevError,
-                        "TransBuckets cannot handle objects of type %s" %
-                            arg.class
-                end
-            }
-            @children += args
-        end
-
-        # Convert to a parseable manifest
-        def to_manifest
-            unless self.top
-                unless defined? @keyword and @keyword
-                    raise Puppet::DevError, "No keyword; cannot convert to manifest"
-                end
-            end
-
-            str = "#{@keyword} #{@name} {\n%s\n}"
-            str % @children.collect { |child|
-                child.to_manifest
-            }.collect { |str|
-                if self.top
-                    str
-                else
-                    str.gsub(/^/, "    ") # indent everything once
-                end
-            }.join("\n\n") # and throw in a blank line
-        end
-
-        def to_yaml_properties
-            instance_variables
-        end
-
-        # Create a resource graph from our structure.
-        def to_catalog(clear_on_failure = true)
-            catalog = Puppet::Node::Catalog.new(Facter.value("hostname"))
-
-            # This should really use the 'delve' method, but this
-            # whole class is going away relatively soon, hopefully,
-            # so it's not worth it.
-            delver = proc do |obj|
-                obj.catalog = catalog
-                unless container = catalog.resource(obj.to_ref)
-                    container = obj.to_type
-                    catalog.add_resource container
-                end
-                obj.each do |child|
-                    child.catalog = catalog
-                    unless resource = catalog.resource(child.to_ref)
-                        resource = child.to_type
-                        catalog.add_resource resource
-                    end
-
-                    catalog.add_edge(container, resource)
-                    if child.is_a?(self.class)
-                        delver.call(child)
-                    end
-                end
-            end
-                
-            begin
-                delver.call(self)
-                catalog.finalize
-            rescue => detail
-                # This is important until we lose the global resource references.
-                catalog.clear if (clear_on_failure)
-                raise
-            end
-            
-            return catalog
-        end
-
-        def to_ref
-            unless defined? @ref
-                if self.type and self.name
-                    @ref = Puppet::ResourceReference.new(self.type, self.name)
-                elsif self.type and ! self.name # This is old-school node types
-                    @ref = Puppet::ResourceReference.new("node", self.type)
-                elsif ! self.type and self.name
-                    @ref = Puppet::ResourceReference.new("component", self.name)
-                else
-                    @ref = nil
-                end
-            end
-            @ref.to_s if @ref
-        end
-
-        def to_type
-            Puppet.debug("TransBucket '%s' has no type" % @name) unless defined? @type
-
-            # Nodes have the same name and type
-            trans = TransObject.new(to_ref, :component)
-            if defined? @parameters
-                @parameters.each { |param,value|
-                    Puppet.debug "Defining %s on %s" % [param, to_ref]
-                    trans[param] = value
-                }
-            end
-            return Puppet::Type::Component.create(trans)
-        end
-
-        def param(param,value)
-            unless defined? @parameters
-                @parameters = {}
-            end
-            @parameters[param] = value
-        end
-
-    end
-end
-
diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
deleted file mode 100644
index 7e86549..0000000
--- a/lib/puppet/type.rb
+++ /dev/null
@@ -1,2516 +0,0 @@
-require 'puppet'
-require 'puppet/util/log'
-require 'puppet/util/metric'
-require 'puppet/property'
-require 'puppet/parameter'
-require 'puppet/util'
-require 'puppet/util/autoload'
-require 'puppet/metatype/manager'
-require 'puppet/util/errors'
-require 'puppet/util/log_paths'
-require 'puppet/util/logging'
-require 'puppet/resource_reference'
-
-# see the bottom of the file for the rest of the inclusions
-
-module Puppet
-class Type
-    include Puppet::Util
-    include Puppet::Util::Errors
-    include Puppet::Util::LogPaths
-    include Puppet::Util::Logging
-
-    ###############################
-    # Code related to resource type attributes.
-    class << self
-        include Puppet::Util::ClassGen
-        include Puppet::Util::Warnings
-        attr_reader :properties
-    end
-
-    def self.states
-        warnonce "The states method is deprecated; use properties"
-        properties()
-    end
-
-    # All parameters, in the appropriate order.  The namevar comes first,
-    # then the properties, then the params and metaparams in the order they
-    # were specified in the files.
-    def self.allattrs
-        # now get all of the arguments, in a specific order
-        # Cache this, since it gets called so many times
-        namevar = self.namevar
-
-        order = [namevar]
-        if self.parameters.include?(:provider)
-            order << :provider
-        end
-        order << [self.properties.collect { |property| property.name },
-            self.parameters - [:provider],
-            self.metaparams].flatten.reject { |param|
-                # we don't want our namevar in there multiple times
-                param == namevar
-        }
-
-        order.flatten!
-
-        return order
-    end
-
-    # Retrieve an attribute alias, if there is one.
-    def self.attr_alias(param)
-        @attr_aliases[symbolize(param)]
-    end
-
-    # Create an alias to an existing attribute.  This will cause the aliased
-    # attribute to be valid when setting and retrieving values on the instance.
-    def self.set_attr_alias(hash)
-        hash.each do |new, old|
-            @attr_aliases[symbolize(new)] = symbolize(old)
-        end
-    end
-
-    # Find the class associated with any given attribute.
-    def self.attrclass(name)
-        @attrclasses ||= {}
-
-        # We cache the value, since this method gets called such a huge number
-        # of times (as in, hundreds of thousands in a given run).
-        unless @attrclasses.include?(name)
-            @attrclasses[name] = case self.attrtype(name)
-            when :property: @validproperties[name]
-            when :meta: @@metaparamhash[name]
-            when :param: @paramhash[name]
-            end
-        end
-        @attrclasses[name]
-    end
-
-    # What type of parameter are we dealing with? Cache the results, because
-    # this method gets called so many times.
-    def self.attrtype(attr)
-        @attrtypes ||= {}
-        unless @attrtypes.include?(attr)
-            @attrtypes[attr] = case
-                when @validproperties.include?(attr): :property
-                when @paramhash.include?(attr): :param
-                when @@metaparamhash.include?(attr): :meta
-                else
-                    raise Puppet::DevError,
-                        "Invalid attribute '%s' for class '%s'" %
-                        [attr, self.name]
-                end
-        end
-
-        @attrtypes[attr]
-    end
-
-    # Copy an existing class parameter.  This allows other types to avoid
-    # duplicating a parameter definition, and is mostly used by subclasses
-    # of the File class.
-    def self.copyparam(klass, name)
-        param = klass.attrclass(name)
-
-        unless param
-            raise Puppet::DevError, "Class %s has no param %s" % [klass, name]
-        end
-        @parameters << param
-        @parameters.each { |p| @paramhash[name] = p }
-
-        if param.isnamevar?
-            @namevar = param.name
-        end
-    end
-
-    # A similar function but one that yields the class and type.
-    # This is mainly so that setdefaults doesn't call quite so many functions.
-    def self.eachattr(*ary)
-        if ary.empty?
-            ary = nil
-        end
-
-        # We have to do this in a specific order, so that defaults are
-        # created in that order (e.g., providers should be set up before
-        # anything else).
-        allattrs.each do |name|
-            next unless ary.nil? or ary.include?(name)
-            if obj = @properties.find { |p| p.name == name }
-                yield obj, :property
-            elsif obj = @parameters.find { |p| p.name == name }
-                yield obj, :param
-            elsif obj = @@metaparams.find { |p| p.name == name }
-                yield obj, :meta
-            else
-                raise Puppet::DevError, "Could not find parameter %s" % name
-            end
-        end
-    end
-
-    def self.eachmetaparam
-        @@metaparams.each { |p| yield p.name }
-    end
-
-    # Create the 'ensure' class.  This is a separate method so other types
-    # can easily call it and create their own 'ensure' values.
-    def self.ensurable(&block)
-        if block_given?
-            self.newproperty(:ensure, :parent => Puppet::Property::Ensure, &block)
-        else
-            self.newproperty(:ensure, :parent => Puppet::Property::Ensure) do
-                self.defaultvalues
-            end
-        end
-    end
-
-    # Should we add the 'ensure' property to this class?
-    def self.ensurable?
-        # If the class has all three of these methods defined, then it's
-        # ensurable.
-        ens = [:exists?, :create, :destroy].inject { |set, method|
-            set &&= self.public_method_defined?(method)
-        }
-
-        return ens
-    end
-    
-    # Deal with any options passed into parameters.
-    def self.handle_param_options(name, options)
-        # If it's a boolean parameter, create a method to test the value easily
-        if options[:boolean]
-            define_method(name.to_s + "?") do
-                val = self[name]
-                if val == :true or val == true
-                    return true
-                end
-            end
-        end
-        
-        # If this param handles relationships, store that information
-    end
-
-    # Is the parameter in question a meta-parameter?
-    def self.metaparam?(param)
-        @@metaparamhash.include?(symbolize(param))
-    end
-
-    # Find the metaparameter class associated with a given metaparameter name.
-    def self.metaparamclass(name)
-        @@metaparamhash[symbolize(name)]
-    end
-
-    def self.metaparams
-        @@metaparams.collect { |param| param.name }
-    end
-
-    def self.metaparamdoc(metaparam)
-        @@metaparamhash[metaparam].doc
-    end
-
-    # Create a new metaparam.  Requires a block and a name, stores it in the
-    # @parameters array, and does some basic checking on it.
-    def self.newmetaparam(name, options = {}, &block)
-        @@metaparams ||= []
-        @@metaparamhash ||= {}
-        name = symbolize(name)
-
-        param = genclass(name,
-            :parent => options[:parent] || Puppet::Parameter,
-            :prefix => "MetaParam",
-            :hash => @@metaparamhash,
-            :array => @@metaparams,
-            :attributes => options[:attributes],
-            &block
-        )
-
-        # Grr.
-        if options[:required_features]
-            param.required_features = options[:required_features]
-        end
-        
-        handle_param_options(name, options)
-
-        param.metaparam = true
-
-        return param
-    end
-
-    # Find the namevar
-    def self.namevar
-        unless defined? @namevar
-            params = @parameters.find_all { |param|
-                param.isnamevar? or param.name == :name
-            }
-
-            if params.length > 1
-                raise Puppet::DevError, "Found multiple namevars for %s" % self.name
-            elsif params.length == 1
-                @namevar = params[0].name
-            else
-                raise Puppet::DevError, "No namevar for %s" % self.name
-            end
-        end
-        @namevar
-    end
-
-    # Create a new parameter.  Requires a block and a name, stores it in the
-    # @parameters array, and does some basic checking on it.
-    def self.newparam(name, options = {}, &block)
-        options[:attributes] ||= {}
-        param = genclass(name,
-            :parent => options[:parent] || Puppet::Parameter,
-            :attributes => options[:attributes],
-            :block => block,
-            :prefix => "Parameter",
-            :array => @parameters,
-            :hash => @paramhash
-        )
-        
-        handle_param_options(name, options)
-
-        # Grr.
-        if options[:required_features]
-            param.required_features = options[:required_features]
-        end
-
-        param.isnamevar if options[:namevar]
-
-        # These might be enabled later.
-#        define_method(name) do
-#            @parameters[name].value
-#        end
-#
-#        define_method(name.to_s + "=") do |value|
-#            newparam(param, value)
-#        end
-
-        if param.isnamevar?
-            @namevar = param.name
-        end
-
-        return param
-    end
-
-    def self.newstate(name, options = {}, &block)
-        Puppet.warning "newstate() has been deprecrated; use newproperty(%s)" %
-            name
-        newproperty(name, options, &block)
-    end
-
-    # Create a new property. The first parameter must be the name of the property;
-    # this is how users will refer to the property when creating new instances.
-    # The second parameter is a hash of options; the options are:
-    # * <tt>:parent</tt>: The parent class for the property.  Defaults to Puppet::Property.
-    # * <tt>:retrieve</tt>: The method to call on the provider or @parent object (if
-    #   the provider is not set) to retrieve the current value.
-    def self.newproperty(name, options = {}, &block)
-        name = symbolize(name)
-
-        # This is here for types that might still have the old method of defining
-        # a parent class.
-        unless options.is_a? Hash
-            raise Puppet::DevError,
-                "Options must be a hash, not %s" % options.inspect
-        end
-
-        if @validproperties.include?(name) 
-            raise Puppet::DevError, "Class %s already has a property named %s" %
-                [self.name, name]
-        end
-
-        if parent = options[:parent]
-            options.delete(:parent)
-        else
-            parent = Puppet::Property
-        end
-
-        # We have to create our own, new block here because we want to define
-        # an initial :retrieve method, if told to, and then eval the passed
-        # block if available.
-        prop = genclass(name, :parent => parent, :hash => @validproperties, :attributes => options) do
-            # If they've passed a retrieve method, then override the retrieve
-            # method on the class.
-            if options[:retrieve]
-                define_method(:retrieve) do
-                    provider.send(options[:retrieve])
-                end
-            end
-
-            if block
-                class_eval(&block)
-            end
-        end
-
-        # If it's the 'ensure' property, always put it first.
-        if name == :ensure
-            @properties.unshift prop
-        else
-            @properties << prop
-        end
-
-#        define_method(name) do
-#            @parameters[name].should
-#        end
-#
-#        define_method(name.to_s + "=") do |value|
-#            newproperty(name, :should => value)
-#        end
-
-        return prop
-    end
-
-    def self.paramdoc(param)
-        @paramhash[param].doc
-    end
-
-    # Return the parameter names
-    def self.parameters
-        return [] unless defined? @parameters
-        @parameters.collect { |klass| klass.name }
-    end
-
-    # Find the parameter class associated with a given parameter name.
-    def self.paramclass(name)
-        @paramhash[name]
-    end
-
-    # Return the property class associated with a name
-    def self.propertybyname(name)
-        @validproperties[name]
-    end
-
-    def self.validattr?(name)
-        name = symbolize(name)
-        return true if name == :name
-        @validattrs ||= {}
-
-        unless @validattrs.include?(name)
-            if self.validproperty?(name) or self.validparameter?(name) or self.metaparam?(name)
-                @validattrs[name] = true
-            else
-                @validattrs[name] = false
-            end
-        end
-
-        @validattrs[name]
-    end
-
-    # does the name reflect a valid property?
-    def self.validproperty?(name)
-        name = symbolize(name)
-        if @validproperties.include?(name)
-            return @validproperties[name]
-        else
-            return false
-        end
-    end
-
-    # Return the list of validproperties
-    def self.validproperties
-        return {} unless defined? @parameters
-
-        return @validproperties.keys
-    end
-
-    # does the name reflect a valid parameter?
-    def self.validparameter?(name)
-        unless defined? @parameters
-            raise Puppet::DevError, "Class %s has not defined parameters" % self
-        end
-        if @paramhash.include?(name) or @@metaparamhash.include?(name)
-            return true
-        else
-            return false
-        end
-    end
-
-    # fix any namevar => param translations
-    def argclean(oldhash)
-        # This duplication is here because it might be a transobject.
-        hash = oldhash.dup.to_hash
-
-        if hash.include?(:resource)
-            hash.delete(:resource)
-        end
-        namevar = self.class.namevar
-
-        # Do a simple translation for those cases where they've passed :name
-        # but that's not our namevar
-        if hash.include? :name and namevar != :name
-            if hash.include? namevar
-                raise ArgumentError, "Cannot provide both name and %s" % namevar
-            end
-            hash[namevar] = hash[:name]
-            hash.delete(:name)
-        end
-
-        # Make sure we have a name, one way or another
-        unless hash.include? namevar
-            if defined? @title and @title
-                hash[namevar] = @title
-            else
-                raise Puppet::Error, "Was not passed a namevar or title"
-            end
-        end
-
-        return hash
-    end
-
-    # Return either the attribute alias or the attribute.
-    def attr_alias(name)
-        name = symbolize(name)
-        if synonym = self.class.attr_alias(name)
-            return synonym
-        else
-            return name
-        end
-    end
-    
-    # Are we deleting this resource?
-    def deleting?
-        obj = @parameters[:ensure] and obj.should == :absent
-    end
-
-    # Create a new property if it is valid but doesn't exist
-    # Returns: true if a new parameter was added, false otherwise
-    def add_property_parameter(prop_name)
-        if self.class.validproperty?(prop_name) && !@parameters[prop_name]
-            self.newattr(prop_name)
-            return true
-        end
-        return false
-    end
-    
-    # abstract accessing parameters and properties, and normalize
-    # access to always be symbols, not strings
-    # This returns a value, not an object.  It returns the 'is'
-    # value, but you can also specifically return 'is' and 'should'
-    # values using 'object.is(:property)' or 'object.should(:property)'.
-    def [](name)
-        name = attr_alias(name)
-
-        unless self.class.validattr?(name)
-            raise TypeError.new("Invalid parameter %s(%s)" % [name, name.inspect])
-        end
-
-        if name == :name
-            name = self.class.namevar
-        end
-
-        if obj = @parameters[name]
-            # Note that if this is a property, then the value is the "should" value,
-            # not the current value.
-            obj.value
-        else
-            return nil
-        end
-    end
-
-    # Abstract setting parameters and properties, and normalize
-    # access to always be symbols, not strings.  This sets the 'should'
-    # value on properties, and otherwise just sets the appropriate parameter.
-    def []=(name,value)
-        name = attr_alias(name)
-
-        unless self.class.validattr?(name)
-            raise TypeError.new("Invalid parameter %s" % [name])
-        end
-
-        if name == :name
-            name = self.class.namevar
-        end
-        if value.nil?
-            raise Puppet::Error.new("Got nil value for %s" % name)
-        end
-
-        if obj = @parameters[name]
-            obj.value = value
-            return nil
-        else
-            self.newattr(name, :value => value)
-        end
-
-        nil
-    end
-
-    # remove a property from the object; useful in testing or in cleanup
-    # when an error has been encountered
-    def delete(attr)
-        attr = symbolize(attr)
-        if @parameters.has_key?(attr)
-            @parameters.delete(attr)
-        else
-            raise Puppet::DevError.new("Undefined attribute '#{attr}' in #{self}")
-        end
-    end
-
-    # iterate across the existing properties
-    def eachproperty
-        # properties() is a private method
-        properties().each { |property|
-            yield property
-        }
-    end
-
-    # retrieve the 'should' value for a specified property
-    def should(name)
-        name = attr_alias(name)
-        if prop = @parameters[name] and prop.is_a?(Puppet::Property)
-            return prop.should
-        else
-            return nil
-        end
-    end
-
-    # Create the actual attribute instance.  Requires either the attribute
-    # name or class as the first argument, then an optional hash of
-    # attributes to set during initialization.
-    def newattr(name, options = {})
-        if name.is_a?(Class)
-            klass = name
-            name = klass.name
-        end
-
-        unless klass = self.class.attrclass(name)
-            raise Puppet::Error, "Resource type %s does not support parameter %s" % [self.class.name, name]
-        end
-
-        if @parameters.include?(name)
-            raise Puppet::Error, "Parameter '%s' is already defined in %s" %
-                [name, self.ref]
-        end
-
-        if provider and ! provider.class.supports_parameter?(klass)
-            missing = klass.required_features.find_all { |f| ! provider.class.feature?(f) }
-            info "Provider %s does not support features %s; not managing attribute %s" % [provider.class.name, missing.join(", "), name]
-            return nil
-        end
-
-        # Add resource information at creation time, so it's available
-        # during validation.
-        options[:resource] = self
-        begin
-            # make sure the parameter doesn't have any errors
-            return @parameters[name] = klass.new(options)
-        rescue => detail
-            error = Puppet::Error.new("Parameter %s failed: %s" %
-                [name, detail])
-            error.set_backtrace(detail.backtrace)
-            raise error
-        end
-    end
-
-    # return the value of a parameter
-    def parameter(name)
-        unless name.is_a? Symbol
-            name = name.intern
-        end
-        return @parameters[name].value
-    end
-
-    # Is the named property defined?
-    def propertydefined?(name)
-        unless name.is_a? Symbol
-            name = name.intern
-        end
-        return @parameters.include?(name)
-    end
-
-    # return an actual type by name; to return the value, use 'inst[name]'
-    # FIXME this method should go away
-    def property(name)
-        if obj = @parameters[symbolize(name)] and obj.is_a?(Puppet::Property)
-            return obj
-        else
-            return nil
-        end
-    end
-
-#    def set(name, value)
-#        send(name.to_s + "=", value)
-#    end
-#
-#    def get(name)
-#        send(name)
-#    end
-
-    # For any parameters or properties that have defaults and have not yet been
-    # set, set them now.  This method can be handed a list of attributes,
-    # and if so it will only set defaults for those attributes.
-    def setdefaults(*ary)
-        #self.class.eachattr(*ary) { |klass, type|
-        self.class.eachattr(*ary) { |klass, type|
-            # not many attributes will have defaults defined, so we short-circuit
-            # those away
-            next unless klass.method_defined?(:default)
-            next if @parameters[klass.name]
-
-            next unless obj = self.newattr(klass)
-
-            # We have to check for nil values, not "truth", so we allow defaults
-            # to false.
-            value = obj.default and ! value.nil?
-            if ! value.nil?
-                obj.value = value
-            else
-                @parameters.delete(obj.name)
-            end
-        }
-    end
-
-    # Convert our object to a hash.  This just includes properties.
-    def to_hash
-        rethash = {}
-    
-        @parameters.each do |name, obj|
-            rethash[name] = obj.value
-        end
-
-        rethash
-    end
-
-    # Return a specific value for an attribute.
-    def value(name)
-        name = attr_alias(name)
-
-        if obj = @parameters[name] and obj.respond_to?(:value)
-            return obj.value
-        else
-            return nil
-        end
-    end
-
-    # Meta-parameter methods:  These methods deal with the results
-    # of specifying metaparameters
-
-    private
-
-    # Return all of the property objects, in the order specified in the
-    # class.
-    def properties
-        #debug "%s has %s properties" % [self, at parameters.length]
-        props = self.class.properties.collect { |prop|
-            @parameters[prop.name]
-        }.find_all { |p|
-            ! p.nil?
-        }.each do |prop|
-            unless prop.is_a?(Puppet::Property)
-                raise Puppet::DevError, "got a non-property %s(%s)" %
-                    [prop.class, prop.class.name]
-            end
-        end
-
-        props
-    end
-
-    public
-
-    ###############################
-    # Code related to the closure-like behaviour of the resource classes.
-    attr_writer :implicit
-
-    # Is this type's name isomorphic with the object?  That is, if the
-    # name conflicts, does it necessarily mean that the objects conflict?
-    # Defaults to true.
-    def self.isomorphic?
-        if defined? @isomorphic
-            return @isomorphic
-        else
-            return true
-        end
-    end
-
-    def implicit?
-        if defined? @implicit and @implicit
-            return true
-        else
-            return false
-        end
-    end
-
-    def isomorphic?
-        self.class.isomorphic?
-    end
-
-    # is the instance a managed instance?  A 'yes' here means that
-    # the instance was created from the language, vs. being created
-    # in order resolve other questions, such as finding a package
-    # in a list
-    def managed?
-        # Once an object is managed, it always stays managed; but an object
-        # that is listed as unmanaged might become managed later in the process,
-        # so we have to check that every time
-        if defined? @managed and @managed
-            return @managed
-        else
-            @managed = false
-            properties.each { |property|
-                s = property.should
-                if s and ! property.class.unmanaged
-                    @managed = true
-                    break
-                end
-            }
-            return @managed
-        end
-    end
-
-    ###############################
-    # Code related to the container behaviour.
-    def self.depthfirst?
-        if defined? @depthfirst
-            return @depthfirst
-        else
-            return false
-        end
-    end
-    
-    def depthfirst?
-        self.class.depthfirst?
-    end
-
-    # Add a hook for testing for recursion.
-    def parentof?(child)
-        if (self == child)
-            debug "parent is equal to child"
-            return true
-        elsif defined? @parent and @parent.parentof?(child)
-            debug "My parent is parent of child"
-            return true
-        else
-            return false
-        end
-    end
-
-    # Remove an object.  The argument determines whether the object's
-    # subscriptions get eliminated, too.
-    def remove(rmdeps = true)
-        # This is hackish (mmm, cut and paste), but it works for now, and it's
-        # better than warnings.
-        @parameters.each do |name, obj|
-            obj.remove
-        end
-        @parameters.clear
-        self.class.delete(self)
-
-        @parent = nil
-
-        # Remove the reference to the provider.
-        if self.provider
-            @provider.clear
-            @provider = nil
-        end
-    end
-
-    ###############################
-    # Code related to evaluating the resources.
-
-    # This method is responsible for collecting property changes we always
-    # descend into the children before we evaluate our current properties.
-    # This returns any changes resulting from testing, thus 'collect' rather
-    # than 'each'.
-    def evaluate
-        if self.provider.is_a?(Puppet::Provider)
-            unless provider.class.suitable?
-                raise Puppet::Error, "Provider %s is not functional on this platform" % provider.class.name
-            end
-        end
-        #Puppet.err "Evaluating %s" % self.path.join(":")
-        unless defined? @evalcount
-            self.err "No evalcount defined on '%s' of type '%s'" %
-                [self.title,self.class]
-            @evalcount = 0
-        end
-        @evalcount += 1
-
-        if p = self.provider and p.respond_to?(:prefetch)
-            p.prefetch
-        end
-
-        # this only operates on properties, not properties + children
-        # it's important that we call retrieve() on the type instance,
-        # not directly on the property, because it allows the type to override
-        # the method, like pfile does
-        currentvalues = self.retrieve
-
-        changes = propertychanges(currentvalues).flatten
-
-        # now record how many changes we've resulted in
-        if changes.length > 0
-            self.debug "%s change(s)" %
-                [changes.length]
-        end
-
-        # If we're in noop mode, we don't want to store the checked time,
-        # because it will result in the resource not getting scheduled if
-        # someone were to apply the catalog in non-noop mode.
-        # We're going to go ahead and record that we checked if there were
-        # no changes, since it's unlikely it will affect the scheduling.
-        noop = noop?
-        if ! noop or (noop && changes.length == 0)
-            self.cache(:checked, Time.now)
-        end
-        return changes.flatten
-    end
-
-    # Flush the provider, if it supports it.  This is called by the
-    # transaction.
-    def flush
-        if self.provider and self.provider.respond_to?(:flush)
-            self.provider.flush
-        end
-    end
-
-    # if all contained objects are in sync, then we're in sync
-    # FIXME I don't think this is used on the type instances any more,
-    # it's really only used for testing
-    def insync?(is)
-        insync = true
-        
-        if property = @parameters[:ensure]
-            unless is.include? property
-               raise Puppet::DevError,
-                        "The is value is not in the is array for '%s'" %
-                        [property.name]
-            end
-            ensureis = is[property]           
-            if property.insync?(ensureis) and property.should == :absent
-                return true
-            end
-        end
-
-        properties.each { |property|
-            unless is.include? property
-               raise Puppet::DevError,
-                        "The is value is not in the is array for '%s'" %
-                        [property.name]
-            end
-
-            propis = is[property]
-            unless property.insync?(propis)
-                property.debug("Not in sync: %s vs %s" %
-                    [propis.inspect, property.should.inspect])
-                insync = false
-            #else
-            #    property.debug("In sync")
-            end
-        }
-
-        #self.debug("%s sync status is %s" % [self,insync])
-        return insync
-    end
-        
-    # retrieve the current value of all contained properties
-    def retrieve
-        return currentpropvalues
-    end
-    
-    # Get a hash of the current properties.  Returns a hash with
-    # the actual property instance as the key and the current value
-    # as the, um, value.
-    def currentpropvalues
-        # It's important to use the 'properties' method here, as it follows the order
-        # in which they're defined in the class.  It also guarantees that 'ensure'
-        # is the first property, which is important for skipping 'retrieve' on
-        # all the properties if the resource is absent.
-        ensure_state = false
-        return properties().inject({}) do | prophash, property|
-            if property.name == :ensure
-                ensure_state = property.retrieve
-                prophash[property] = ensure_state
-            else
-                if ensure_state == :absent
-                    prophash[property] = :absent
-                else
-                    prophash[property] = property.retrieve
-                end
-            end
-            prophash
-        end
-    end
-
-    # Are we running in noop mode?
-    def noop?
-        if defined?(@noop)
-            @noop
-        else
-            Puppet[:noop]
-        end
-    end
-
-    def noop
-        noop?
-    end
-     
-    # Retrieve the changes associated with all of the properties.
-    def propertychanges(currentvalues)
-        # If we are changing the existence of the object, then none of
-        # the other properties matter.
-        changes = []
-        ensureparam = @parameters[:ensure]
-
-        # This allows resource types to have 'ensure' be a parameter, which allows them to
-        # just pass the parameter on to other generated resources.
-        ensureparam = nil unless ensureparam.is_a?(Puppet::Property)
-        if ensureparam && !currentvalues.include?(ensureparam)
-            raise Puppet::DevError, "Parameter ensure defined but missing from current values"
-        end
-
-        if ensureparam and ! ensureparam.insync?(currentvalues[ensureparam])
-            changes << Puppet::Transaction::Change.new(ensureparam, currentvalues[ensureparam])
-        # Else, if the 'ensure' property is correctly absent, then do
-        # nothing
-        elsif ensureparam and currentvalues[ensureparam] == :absent
-            return []
-        else
-            changes = properties().find_all { |property|
-                currentvalues[property] ||= :absent
-                ! property.insync?(currentvalues[property])
-            }.collect { |property|
-                Puppet::Transaction::Change.new(property, currentvalues[property])
-            }
-        end
-
-        if Puppet[:debug] and changes.length > 0
-            self.debug("Changing " + changes.collect { |ch| ch.property.name }.join(","))
-        end
-
-        changes
-    end
-
-    ###############################
-    # Code related to managing resource instances.
-    require 'puppet/transportable'
-
-    # Make 'new' private, so people have to use create instead.
-    class << self
-        private :new
-    end
-
-    # retrieve a named instance of the current type
-    def self.[](name)
-        @objects[name] || @aliases[name]
-    end
-
-    # add an instance by name to the class list of instances
-    def self.[]=(name,object)
-        newobj = nil
-        if object.is_a?(Puppet::Type)
-            newobj = object
-        else
-            raise Puppet::DevError, "must pass a Puppet::Type object"
-        end
-
-        if exobj = @objects[name] and self.isomorphic?
-            msg = "Object '%s[%s]' already exists" %
-                [newobj.class.name, name]
-
-            if exobj.file and exobj.line
-                msg += ("in file %s at line %s" %
-                    [object.file, object.line])
-            end
-            if object.file and object.line
-                msg += ("and cannot be redefined in file %s at line %s" %
-                    [object.file, object.line])
-            end
-            error = Puppet::Error.new(msg)
-            raise error
-        else
-            #Puppet.info("adding %s of type %s to class list" %
-            #    [name,object.class])
-            @objects[name] = newobj
-        end
-    end
-
-    # Create an alias.  We keep these in a separate hash so that we don't encounter
-    # the objects multiple times when iterating over them.
-    def self.alias(name, obj)
-        if @objects.include?(name)
-            unless @objects[name] == obj
-                raise Puppet::Error.new(
-                    "Cannot create alias %s: object already exists" %
-                    [name]
-                )
-            end
-        end
-
-        if @aliases.include?(name)
-            unless @aliases[name] == obj
-                raise Puppet::Error.new(
-                    "Object %s already has alias %s" %
-                    [@aliases[name].name, name]
-                )
-            end
-        end
-
-        @aliases[name] = obj
-    end
-
-    # remove all of the instances of a single type
-    def self.clear
-        if defined? @objects
-            @objects.each do |name, obj|
-                obj.remove(true)
-            end
-            @objects.clear
-        end
-        if defined? @aliases
-            @aliases.clear
-        end
-    end
-
-    # Force users to call this, so that we can merge objects if
-    # necessary.
-    def self.create(args)
-        # Don't modify the original hash; instead, create a duplicate and modify it.
-        # We have to dup and use the ! so that it stays a TransObject if it is
-        # one.
-        hash = args.dup
-        symbolizehash!(hash)
-
-        # If we're the base class, then pass the info on appropriately
-        if self == Puppet::Type
-            type = nil
-            if hash.is_a? Puppet::TransObject
-                type = hash.type
-            else
-                # If we're using the type to determine object type, then delete it
-                if type = hash[:type]
-                    hash.delete(:type)
-                end
-            end
-
-            # If they've specified a type and called on the base, then
-            # delegate to the subclass.
-            if type
-                if typeklass = self.type(type)
-                    return typeklass.create(hash)
-                else
-                    raise Puppet::Error, "Unknown type %s" % type
-                end
-            else
-                raise Puppet::Error, "No type found for %s" % hash.inspect
-            end
-        end
-
-        # Handle this new object being implicit
-        implicit = hash[:implicit] || false
-        if hash.include?(:implicit)
-            hash.delete(:implicit)
-        end
-
-        name = nil
-        unless hash.is_a? Puppet::TransObject
-            hash = self.hash2trans(hash)
-        end
-
-        # XXX This will have to change when transobjects change to using titles
-        title = hash.name
-
-        # if the object already exists
-        if self.isomorphic? and retobj = self[title]
-            # if only one of our objects is implicit, then it's easy to see
-            # who wins -- the non-implicit one.
-            if retobj.implicit? and ! implicit
-                Puppet.notice "Removing implicit %s" % retobj.title
-                # Remove all of the objects, but do not remove their subscriptions.
-                retobj.remove(false)
-
-                # now pass through and create the new object
-            elsif implicit
-                Puppet.debug "Ignoring implicit %s[%s]" % [self.name, title]
-                return nil
-            else
-                raise Puppet::Error, "%s is already being managed" % retobj.ref
-            end
-        end
-
-        # create it anew
-        # if there's a failure, destroy the object if it got that far, but raise
-        # the error.
-        begin
-            obj = new(hash)
-        rescue => detail
-            Puppet.err "Could not create %s: %s" % [title, detail.to_s]
-            if obj
-                obj.remove(true)
-            elsif obj = self[title]
-                obj.remove(true)
-            end
-            raise
-        end
-
-        if implicit
-            obj.implicit = true
-        end
-
-        # Store the object by title
-        self[obj.title] = obj
-
-        return obj
-    end
-
-    # remove a specified object
-    def self.delete(resource)
-        return unless defined? @objects
-        if @objects.include?(resource.title)
-            @objects.delete(resource.title)
-        end
-        if @aliases.include?(resource.title)
-            @aliases.delete(resource.title)
-        end
-        if @aliases.has_value?(resource)
-            names = []
-            @aliases.each do |name, otherres|
-                if otherres == resource
-                    names << name
-                end
-            end
-            names.each { |name| @aliases.delete(name) }
-        end
-    end
-
-    # iterate across each of the type's instances
-    def self.each
-        return unless defined? @objects
-        @objects.each { |name,instance|
-            yield instance
-        }
-    end
-
-    # does the type have an object with the given name?
-    def self.has_key?(name)
-        return @objects.has_key?(name)
-    end
-
-    # Convert a hash to a TransObject.
-    def self.hash2trans(hash)
-        title = nil
-        if hash.include? :title
-            title = hash[:title]
-            hash.delete(:title)
-        elsif hash.include? self.namevar
-            title = hash[self.namevar]
-            hash.delete(self.namevar)
-
-            if hash.include? :name
-                raise ArgumentError, "Cannot provide both name and %s to %s" %
-                    [self.namevar, self.name]
-            end
-        elsif hash[:name]
-            title = hash[:name]
-            hash.delete :name
-        end
-
-        if catalog = hash[:catalog]
-            hash.delete(:catalog)
-        end
-
-        raise(Puppet::Error, "You must specify a title for objects of type %s" % self.to_s) unless title
-
-        if hash.include? :type
-            unless self.validattr? :type
-                hash.delete :type
-            end
-        end
-
-        # okay, now make a transobject out of hash
-        begin
-            trans = Puppet::TransObject.new(title, self.name.to_s)
-            trans.catalog = catalog if catalog
-            hash.each { |param, value|
-                trans[param] = value
-            }
-        rescue => detail
-            raise Puppet::Error, "Could not create %s: %s" %
-                [name, detail]
-        end
-
-        return trans
-    end
-
-    # Retrieve all known instances.  Either requires providers or must be overridden.
-    def self.instances
-        unless defined?(@providers) and ! @providers.empty?
-            raise Puppet::DevError, "%s has no providers and has not overridden 'instances'" % self.name
-        end
-
-        # Put the default provider first, then the rest of the suitable providers.
-        provider_instances = {}
-        providers_by_source.collect do |provider|
-            provider.instances.collect do |instance|
-                # First try to get the resource if it already exists
-                # Skip instances that map to a managed resource with a different provider
-                next if resource = self[instance.name] and resource.provider.class != instance.class
-
-                # We always want to use the "first" provider instance we find, unless the resource
-                # is already managed and has a different provider set
-                if other = provider_instances[instance.name]
-                    Puppet.warning "%s %s found in both %s and %s; skipping the %s version" %
-                        [self.name.to_s.capitalize, instance.name, other.class.name, instance.class.name, instance.class.name]
-                    next
-                end
-                provider_instances[instance.name] = instance
-
-                if resource
-                    resource.provider = instance
-                    resource
-                else
-                    create(:name => instance.name, :provider => instance, :check => :all)
-                end
-            end
-        end.flatten.compact
-    end
-
-    # Return a list of one suitable provider per source, with the default provider first.
-    def self.providers_by_source
-        # Put the default provider first, then the rest of the suitable providers.
-        sources = []
-        [defaultprovider, suitableprovider].flatten.uniq.collect do |provider|
-            next if sources.include?(provider.source)
-
-            sources << provider.source
-            provider
-        end.compact
-    end
-
-    # Create the path for logging and such.
-    def pathbuilder
-        if p = parent
-            [p.pathbuilder, self.ref].flatten
-        else
-            [self.ref]
-        end
-    end
-
-    ###############################
-    # Add all of the meta parameters.
-    newmetaparam(:noop) do
-        desc "Boolean flag indicating whether work should actually
-            be done."
-            
-        newvalues(:true, :false)
-        munge do |value|
-            case value
-            when true, :true, "true": @resource.noop = true
-            when false, :false, "false": @resource.noop = false
-            end
-        end
-    end
-
-    newmetaparam(:schedule) do
-        desc "On what schedule the object should be managed.  You must create a
-            schedule object, and then reference the name of that object to use
-            that for your schedule::
-
-                schedule { daily:
-                    period => daily,
-                    range => \"2-4\"
-                }
-
-                exec { \"/usr/bin/apt-get update\":
-                    schedule => daily
-                }
-
-            The creation of the schedule object does not need to appear in the
-            configuration before objects that use it."
-    end
-
-    newmetaparam(:check) do
-        desc "Propertys which should have their values retrieved
-            but which should not actually be modified.  This is currently used
-            internally, but will eventually be used for querying, so that you
-            could specify that you wanted to check the install state of all
-            packages, and then query the Puppet client daemon to get reports
-            on all packages."
-
-        munge do |args|
-            # If they've specified all, collect all known properties
-            if args == :all
-                args = @resource.class.properties.find_all do |property|
-                    # Only get properties supported by our provider
-                    if @resource.provider
-                        @resource.provider.class.supports_parameter?(property)
-                    else
-                        true
-                    end
-                end.collect do |property|
-                    property.name
-                end
-            end
-
-            unless args.is_a?(Array)
-                args = [args]
-            end
-
-            unless defined? @resource
-                self.devfail "No parent for %s, %s?" %
-                    [self.class, self.name]
-            end
-
-            args.each { |property|
-                unless property.is_a?(Symbol)
-                    property = property.intern
-                end
-                next if @resource.propertydefined?(property)
-
-                unless propertyklass = @resource.class.validproperty?(property)
-                    if @resource.class.validattr?(property)
-                        next
-                    else
-                        raise Puppet::Error, "%s is not a valid attribute for %s" %
-                            [property, self.class.name]
-                    end
-                end
-                next unless propertyklass.checkable?
-                @resource.newattr(property)
-            }
-        end
-    end
-    
-    # We've got four relationship metaparameters, so this method is used
-    # to reduce code duplication between them.
-    def munge_relationship(param, values)
-        # We need to support values passed in as an array or as a
-        # resource reference.
-        result = []
-        
-        # 'values' could be an array or a reference.  If it's an array,
-        # it could be an array of references or an array of arrays.
-        if values.is_a?(Puppet::Type)
-            result << [values.class.name, values.title]
-        else
-            unless values.is_a?(Array)
-                devfail "Relationships must be resource references"
-            end
-            if values[0].is_a?(String) or values[0].is_a?(Symbol)
-                # we're a type/title array reference
-                values[0] = symbolize(values[0])
-                result << values
-            else
-                # we're an array of stuff
-                values.each do |value|
-                    if value.is_a?(Puppet::Type)
-                        result << [value.class.name, value.title]
-                    elsif value.is_a?(Array)
-                        value[0] = symbolize(value[0])
-                        result << value
-                    else
-                        devfail "Invalid relationship %s" % value.inspect
-                    end
-                end
-            end
-        end
-        
-        if existing = self[param]
-            result = existing + result
-        end
-        
-        result
-    end
-
-    newmetaparam(:loglevel) do
-        desc "Sets the level that information will be logged.
-             The log levels have the biggest impact when logs are sent to
-             syslog (which is currently the default)."
-        defaultto :notice
-
-        newvalues(*Puppet::Util::Log.levels)
-        newvalues(:verbose)
-
-        munge do |loglevel|
-            val = super(loglevel)
-            if val == :verbose
-                val = :info 
-            end        
-            val
-        end
-    end
-
-    newmetaparam(:alias) do
-        desc "Creates an alias for the object.  Puppet uses this internally when you
-            provide a symbolic name::
-            
-                file { sshdconfig:
-                    path => $operatingsystem ? {
-                        solaris => \"/usr/local/etc/ssh/sshd_config\",
-                        default => \"/etc/ssh/sshd_config\"
-                    },
-                    source => \"...\"
-                }
-
-                service { sshd:
-                    subscribe => file[sshdconfig]
-                }
-
-            When you use this feature, the parser sets ``sshdconfig`` as the name,
-            and the library sets that as an alias for the file so the dependency
-            lookup for ``sshd`` works.  You can use this parameter yourself,
-            but note that only the library can use these aliases; for instance,
-            the following code will not work::
-
-                file { \"/etc/ssh/sshd_config\":
-                    owner => root,
-                    group => root,
-                    alias => sshdconfig
-                }
-
-                file { sshdconfig:
-                    mode => 644
-                }
-
-            There's no way here for the Puppet parser to know that these two stanzas
-            should be affecting the same file.
-
-            See the `LanguageTutorial language tutorial`:trac: for more information.
-            
-            "
-
-        munge do |aliases|
-            unless aliases.is_a?(Array)
-                aliases = [aliases]
-            end
-
-            raise(ArgumentError, "Cannot add aliases without a catalog") unless @resource.catalog
-
-            aliases.each do |other|
-                if obj = @resource.catalog.resource(@resource.class.name, other)
-                    unless obj.object_id == @resource.object_id
-                        self.fail("%s can not create alias %s: object already exists" % [@resource.title, other])
-                    end
-                    next
-                end
-
-                # LAK:FIXME Old-school, add the alias to the class.
-                @resource.class.alias(other, @resource)
-
-                # Newschool, add it to the catalog.
-                @resource.catalog.alias(@resource, other)
-            end
-        end
-    end
-
-    newmetaparam(:tag) do
-        desc "Add the specified tags to the associated resource.  While all resources
-            are automatically tagged with as much information as possible
-            (e.g., each class and definition containing the resource), it can
-            be useful to add your own tags to a given resource.
-
-            Tags are currently useful for things like applying a subset of a
-            host's configuration::
-                
-                puppetd --test --tags mytag
-
-            This way, when you're testing a configuration you can run just the
-            portion you're testing."
-
-        munge do |tags|
-            tags = [tags] unless tags.is_a? Array
-
-            tags.each do |tag|
-                @resource.tag(tag)
-            end
-        end
-    end
-    
-    class RelationshipMetaparam < Puppet::Parameter
-        class << self
-            attr_accessor :direction, :events, :callback, :subclasses
-        end
-        
-        @subclasses = []
-        
-        def self.inherited(sub)
-            @subclasses << sub
-        end
-        
-        def munge(rels)
-            @resource.munge_relationship(self.class.name, rels)
-        end
-
-        def validate_relationship
-            @value.each do |value|
-                unless @resource.catalog.resource(*value)
-                    description = self.class.direction == :in ? "dependency" : "dependent"
-                    fail Puppet::Error, "Could not find %s %s[%s] for %s" % 
-                        [description, value[0].to_s.capitalize, value[1], resource.ref]
-                end
-            end
-        end
-        
-        # Create edges from each of our relationships.    :in
-        # relationships are specified by the event-receivers, and :out
-        # relationships are specified by the event generator.  This
-        # way 'source' and 'target' are consistent terms in both edges
-        # and events -- that is, an event targets edges whose source matches
-        # the event's source.  The direction of the relationship determines
-        # which resource is applied first and which resource is considered
-        # to be the event generator.
-        def to_edges
-            @value.collect do |value|
-                # we just have a name and a type, and we need to convert it
-                # to an object...
-                tname, name = value
-                reference = Puppet::ResourceReference.new(tname, name)
-                
-                # Either of the two retrieval attempts could have returned
-                # nil.
-                unless object = reference.resolve
-                    self.fail "Could not retrieve dependency '%s' of %s" % [reference, @resource.ref]
-                end
-
-                # Are we requiring them, or vice versa?  See the method docs
-                # for futher info on this.
-                if self.class.direction == :in
-                    source = object
-                    target = @resource
-                else
-                    source = @resource
-                    target = object
-                end
-
-                if method = self.class.callback
-                    subargs = {
-                        :event => self.class.events,
-                        :callback => method
-                    }
-                    self.debug("subscribes to %s" % [object.ref])
-                else
-                    # If there's no callback, there's no point in even adding
-                    # a label.
-                    subargs = nil
-                    self.debug("requires %s" % [object.ref])
-                end
-                
-                rel = Puppet::Relationship.new(source, target, subargs)
-            end
-        end
-    end
-    
-    def self.relationship_params
-        RelationshipMetaparam.subclasses
-    end
-
-
-    # Note that the order in which the relationships params is defined
-    # matters.  The labelled params (notify and subcribe) must be later,
-    # so that if both params are used, those ones win.  It's a hackish
-    # solution, but it works.
-
-    newmetaparam(:require, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
-        desc "One or more objects that this object depends on.
-            This is used purely for guaranteeing that changes to required objects
-            happen before the dependent object.  For instance::
-            
-                # Create the destination directory before you copy things down
-                file { \"/usr/local/scripts\":
-                    ensure => directory
-                }
-
-                file { \"/usr/local/scripts/myscript\":
-                    source => \"puppet://server/module/myscript\",
-                    mode => 755,
-                    require => File[\"/usr/local/scripts\"]
-                }
-
-            Multiple dependencies can be specified by providing a comma-seperated list
-            of resources, enclosed in square brackets::
-
-                require => [ File[\"/usr/local\"], File[\"/usr/local/scripts\"] ]
-
-            Note that Puppet will autorequire everything that it can, and
-            there are hooks in place so that it's easy for resources to add new
-            ways to autorequire objects, so if you think Puppet could be
-            smarter here, let us know.
-
-            In fact, the above code was redundant -- Puppet will autorequire
-            any parent directories that are being managed; it will
-            automatically realize that the parent directory should be created
-            before the script is pulled down.
-            
-            Currently, exec resources will autorequire their CWD (if it is
-            specified) plus any fully qualified paths that appear in the
-            command.   For instance, if you had an ``exec`` command that ran
-            the ``myscript`` mentioned above, the above code that pulls the
-            file down would be automatically listed as a requirement to the
-            ``exec`` code, so that you would always be running againts the
-            most recent version.
-            "
-    end
-
-    newmetaparam(:subscribe, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :ALL_EVENTS, :callback => :refresh}) do
-        desc "One or more objects that this object depends on.  Changes in the
-            subscribed to objects result in the dependent objects being
-            refreshed (e.g., a service will get restarted).  For instance::
-            
-                class nagios {
-                    file { \"/etc/nagios/nagios.conf\":
-                        source => \"puppet://server/module/nagios.conf\",
-                        alias => nagconf # just to make things easier for me
-                    }
-                    service { nagios:
-                        running => true,
-                        subscribe => File[nagconf]
-                    }
-                }
-	 		
-            Currently the ``exec``, ``mount`` and ``service`` type support
-            refreshing.
-            "
-    end
-
-    newmetaparam(:before, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
-        desc %{This parameter is the opposite of **require** -- it guarantees
-            that the specified object is applied later than the specifying
-            object::
-
-                file { "/var/nagios/configuration":
-                    source  => "...",
-                    recurse => true,
-                    before => Exec["nagios-rebuid"]
-                }
-
-                exec { "nagios-rebuild":
-                    command => "/usr/bin/make",
-                    cwd => "/var/nagios/configuration"
-                }
-            
-            This will make sure all of the files are up to date before the
-            make command is run.}
-    end
-    
-    newmetaparam(:notify, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :ALL_EVENTS, :callback => :refresh}) do
-        desc %{This parameter is the opposite of **subscribe** -- it sends events
-            to the specified object::
-
-                file { "/etc/sshd_config":
-                    source => "....",
-                    notify => Service[sshd]
-                }
-
-                service { sshd:
-                    ensure => running
-                }
-            
-            This will restart the sshd service if the sshd config file changes.}
-    end
-
-    ###############################
-    # All of the provider plumbing for the resource types.
-    require 'puppet/provider'
-    require 'puppet/util/provider_features'
-
-    # Add the feature handling module.
-    extend Puppet::Util::ProviderFeatures
-
-    attr_reader :provider
-
-    # the Type class attribute accessors
-    class << self
-        attr_accessor :providerloader
-        attr_writer :defaultprovider
-    end
-
-    # Find the default provider.
-    def self.defaultprovider
-        unless defined? @defaultprovider and @defaultprovider
-            suitable = suitableprovider()
-
-            # Find which providers are a default for this system.
-            defaults = suitable.find_all { |provider| provider.default? }
-
-            # If we don't have any default we use suitable providers
-            defaults = suitable if defaults.empty?
-            max = defaults.collect { |provider| provider.defaultnum }.max
-            defaults = defaults.find_all { |provider| provider.defaultnum == max }
-
-            retval = nil
-            if defaults.length > 1
-                Puppet.warning(
-                    "Found multiple default providers for %s: %s; using %s" %
-                    [self.name, defaults.collect { |i| i.name.to_s }.join(", "),
-                        defaults[0].name]
-                )
-                retval = defaults.shift
-            elsif defaults.length == 1
-                retval = defaults.shift
-            else
-                raise Puppet::DevError, "Could not find a default provider for %s" %
-                    self.name
-            end
-
-            @defaultprovider = retval
-        end
-
-        return @defaultprovider
-    end
-
-    # Convert a hash, as provided by, um, a provider, into an instance of self.
-    def self.hash2obj(hash)
-        obj = nil
-        
-        namevar = self.namevar
-        unless hash.include?(namevar) and hash[namevar]
-            raise Puppet::DevError, "Hash was not passed with namevar"
-        end
-
-        # if the obj already exists with that name...
-        if obj = self[hash[namevar]]
-            # We're assuming here that objects with the same name
-            # are the same object, which *should* be the case, assuming
-            # we've set up our naming stuff correctly everywhere.
-
-            # Mark found objects as present
-            hash.each { |param, value|
-                if property = obj.property(param)
-                elsif val = obj[param]
-                    obj[param] = val
-                else
-                    # There is a value on disk, but it should go away
-                    obj[param] = :absent
-                end
-            }
-        else
-            # create a new obj, since no existing one seems to
-            # match
-            obj = self.create(namevar => hash[namevar])
-
-            # We can't just pass the hash in at object creation time,
-            # because it sets the should value, not the is value.
-            hash.delete(namevar)
-            hash.each { |param, value|
-                obj[param] = value unless obj.add_property_parameter(param)
-            }
-        end
-
-        return obj
-    end
-
-    # Retrieve a provider by name.
-    def self.provider(name)
-        name = Puppet::Util.symbolize(name)
-
-        # If we don't have it yet, try loading it.
-        unless @providers.has_key?(name)
-            @providerloader.load(name)
-        end
-        return @providers[name]
-    end
-
-    # Just list all of the providers.
-    def self.providers
-        @providers.keys
-    end
-
-    def self.validprovider?(name)
-        name = Puppet::Util.symbolize(name)
-
-        return (@providers.has_key?(name) && @providers[name].suitable?)
-    end
-
-    # Create a new provider of a type.  This method must be called
-    # directly on the type that it's implementing.
-    def self.provide(name, options = {}, &block)
-        name = Puppet::Util.symbolize(name)
-
-        if obj = @providers[name]
-            Puppet.debug "Reloading %s %s provider" % [name, self.name]
-            unprovide(name)
-        end
-
-        parent = if pname = options[:parent]
-            options.delete(:parent)
-            if pname.is_a? Class
-                pname
-            else
-                if provider = self.provider(pname)
-                    provider
-                else
-                    raise Puppet::DevError,
-                        "Could not find parent provider %s of %s" %
-                            [pname, name]
-                end
-            end
-        else
-            Puppet::Provider
-        end
-
-        options[:resource_type] ||= self
-
-        self.providify
-
-        provider = genclass(name,
-            :parent => parent,
-            :hash => @providers,
-            :prefix => "Provider",
-            :block => block,
-            :include => feature_module,
-            :extend => feature_module,
-            :attributes => options
-        )
-
-        return provider
-    end
-
-    # Make sure we have a :provider parameter defined.  Only gets called if there
-    # are providers.
-    def self.providify
-        return if @paramhash.has_key? :provider
-
-        newparam(:provider) do
-            desc "The specific backend for #{self.name.to_s} to use. You will
-                seldom need to specify this -- Puppet will usually discover the
-                appropriate provider for your platform."
-
-            # This is so we can refer back to the type to get a list of
-            # providers for documentation.
-            class << self
-                attr_accessor :parenttype
-            end
-
-            # We need to add documentation for each provider.
-            def self.doc
-                @doc + "  Available providers are:\n\n" + parenttype().providers.sort { |a,b|
-                    a.to_s <=> b.to_s
-                }.collect { |i|
-                    "* **%s**: %s" % [i, parenttype().provider(i).doc]
-                }.join("\n")
-            end
-
-            defaultto {
-                @resource.class.defaultprovider.name
-            }
-
-            validate do |provider_class|
-                provider_class = provider_class[0] if provider_class.is_a? Array
-                if provider_class.is_a?(Puppet::Provider)
-                    provider_class = provider_class.class.name
-                end
-
-                unless provider = @resource.class.provider(provider_class)
-                    raise ArgumentError, "Invalid %s provider '%s'" % [@resource.class.name, provider_class]
-                end
-            end
-
-            munge do |provider|
-                provider = provider[0] if provider.is_a? Array
-                if provider.is_a? String
-                    provider = provider.intern
-                end
-                @resource.provider = provider
-
-                if provider.is_a?(Puppet::Provider)
-                    provider.class.name
-                else
-                    provider
-                end
-            end
-        end.parenttype = self
-    end
-
-    def self.unprovide(name)
-        if @providers.has_key? name
-            rmclass(name,
-                :hash => @providers,
-                :prefix => "Provider"
-            )
-            if @defaultprovider and @defaultprovider.name == name
-                @defaultprovider = nil
-            end
-        end
-    end
-
-    # Return an array of all of the suitable providers.
-    def self.suitableprovider
-        if @providers.empty?
-            providerloader.loadall
-        end
-        @providers.find_all { |name, provider|
-            provider.suitable?
-        }.collect { |name, provider|
-            provider
-        }.reject { |p| p.name == :fake } # For testing
-    end
-
-    def provider=(name)
-        if name.is_a?(Puppet::Provider)
-            @provider = name
-            @provider.resource = self
-        elsif klass = self.class.provider(name)
-            @provider = klass.new(self)
-        else
-            raise ArgumentError, "Could not find %s provider of %s" %
-                [name, self.class.name]
-        end
-    end
-
-    ###############################
-    # All of the relationship code.
-
-    # Specify a block for generating a list of objects to autorequire.  This
-    # makes it so that you don't have to manually specify things that you clearly
-    # require.
-    def self.autorequire(name, &block)
-        @autorequires ||= {}
-        @autorequires[name] = block
-    end
-
-    # Yield each of those autorequires in turn, yo.
-    def self.eachautorequire
-        @autorequires ||= {}
-        @autorequires.each { |type, block|
-            yield(type, block)
-        }
-    end
-
-    # Figure out of there are any objects we can automatically add as
-    # dependencies.
-    def autorequire
-        reqs = []
-        self.class.eachautorequire { |type, block|
-            # Ignore any types we can't find, although that would be a bit odd.
-            next unless typeobj = Puppet.type(type)
-
-            # Retrieve the list of names from the block.
-            next unless list = self.instance_eval(&block)
-            unless list.is_a?(Array)
-                list = [list]
-            end
-
-            # Collect the current prereqs
-            list.each { |dep|
-                obj = nil
-                # Support them passing objects directly, to save some effort.
-                unless dep.is_a? Puppet::Type
-                    # Skip autorequires that we aren't managing
-                    unless dep = typeobj[dep]
-                        next
-                    end
-                end
-                
-                reqs << Puppet::Relationship.new(dep, self)
-            }
-        }
-        
-        return reqs
-    end
-
-    # Build the dependencies associated with an individual object.
-    def builddepends
-        # Handle the requires
-        self.class.relationship_params.collect do |klass|
-            if param = @parameters[klass.name]
-                param.to_edges
-            end
-        end.flatten.reject { |r| r.nil? }
-    end
-    
-    # Does this resource have a relationship with the other?  We have to
-    # check each object for both directions of relationship.
-    def requires?(other)
-        them = [other.class.name, other.title]
-        me = [self.class.name, self.title]
-        self.class.relationship_params.each do |param|
-            case param.direction
-            when :in: return true if v = self[param.name] and v.include?(them)
-            when :out: return true if v = other[param.name] and v.include?(me)
-            end
-        end
-        return false
-    end
-
-    # we've received an event
-    # we only support local events right now, so we can pass actual
-    # objects around, including the transaction object
-    # the assumption here is that container objects will pass received
-    # methods on to contained objects
-    # i.e., we don't trigger our children, our refresh() method calls
-    # refresh() on our children
-    def trigger(event, source)
-        trans = event.transaction
-        if @callbacks.include?(source)
-            [:ALL_EVENTS, event.event].each { |eventname|
-                if method = @callbacks[source][eventname]
-                    if trans.triggered?(self, method) > 0
-                        next
-                    end
-                    if self.respond_to?(method)
-                        self.send(method)
-                    end
-
-                    trans.triggered(self, method)
-                end
-            }
-        end
-    end
-    
-    # Unsubscribe from a given object, possibly with a specific event.
-    def unsubscribe(object, event = nil)
-        # First look through our own relationship params
-        [:require, :subscribe].each do |param|
-            if values = self[param]
-                newvals = values.reject { |d|
-                    d == [object.class.name, object.title]
-                }
-                if newvals.length != values.length
-                    self.delete(param)
-                    self[param] = newvals
-                end
-            end
-        end
-    end
-
-    ###############################
-    # All of the scheduling code.
-
-    # Look up the schedule and set it appropriately.  This is done after
-    # the instantiation phase, so that the schedule can be anywhere in the
-    # file.
-    def schedule
-        unless defined? @schedule
-            if name = self[:schedule]
-                if sched = Puppet.type(:schedule)[name]
-                    @schedule = sched
-                else
-                    self.fail "Could not find schedule %s" % name
-                end
-            else
-                @schedule = nil
-            end
-        end
-        @schedule
-    end
-
-    # Check whether we are scheduled to run right now or not.
-    def scheduled?
-        return true if Puppet[:ignoreschedules]
-        return true unless schedule = self.schedule
-
-        # We use 'checked' here instead of 'synced' because otherwise we'll
-        # end up checking most resources most times, because they will generally
-        # have been synced a long time ago (e.g., a file only gets updated
-        # once a month on the server and its schedule is daily; the last sync time
-        # will have been a month ago, so we'd end up checking every run).
-        return schedule.match?(self.cached(:checked).to_i)
-    end
-
-    ###############################
-    # All of the tagging code.
-    attr_reader :tags
-
-    # Add a new tag.
-    def tag(tag)
-        tag = tag.intern if tag.is_a? String
-        unless @tags.include? tag
-            @tags << tag
-        end
-    end
-
-    # Define the initial list of tags.
-    def tags=(list)
-        list = [list] unless list.is_a? Array
-
-        @tags = list.collect do |t|
-            case t
-            when String: t.intern
-            when Symbol: t
-            else
-                self.warning "Ignoring tag %s of type %s" % [tag.inspect, tag.class]
-            end
-        end
-
-        @tags << self.class.name unless @tags.include?(self.class.name)
-    end
-
-    # Figure out of any of the specified tags apply to this object.  This is an
-    # OR operation.
-    def tagged?(tags)
-        tags = [tags] unless tags.is_a? Array
-
-        tags = tags.collect { |t| t.intern }
-
-        return tags.find { |tag| @tags.include? tag }
-    end
-
-    # Types (which map to resources in the languages) are entirely composed of
-    # attribute value pairs.  Generally, Puppet calls any of these things an
-    # 'attribute', but these attributes always take one of three specific
-    # forms:  parameters, metaparams, or properties.
-
-    # In naming methods, I have tried to consistently name the method so
-    # that it is clear whether it operates on all attributes (thus has 'attr' in
-    # the method name, or whether it operates on a specific type of attributes.
-    attr_accessor :file, :line
-
-    attr_writer :title
-    attr_writer :noop
-
-    include Enumerable
-    
-    # class methods dealing with Type management
-
-    public
-
-    # the Type class attribute accessors
-    class << self
-        attr_reader :name
-        attr_accessor :self_refresh
-        include Enumerable, Puppet::Util::ClassGen
-        include Puppet::MetaType::Manager
-
-        include Puppet::Util
-        include Puppet::Util::Logging
-    end
-
-    # all of the variables that must be initialized for each subclass
-    def self.initvars
-        # all of the instances of this class
-        @objects = Hash.new
-        @aliases = Hash.new
-
-        @providers = Hash.new
-        @defaults = {}
-
-        unless defined? @parameters
-            @parameters = []
-        end
-
-        @validproperties = {}
-        @properties = []
-        @parameters = []
-        @paramhash = {}
-
-        @attr_aliases = {}
-
-        @paramdoc = Hash.new { |hash,key|
-          if key.is_a?(String)
-            key = key.intern
-          end
-          if hash.include?(key)
-            hash[key]
-          else
-            "Param Documentation for %s not found" % key
-          end
-        }
-
-        unless defined? @doc
-            @doc = ""
-        end
-
-    end
-
-    def self.to_s
-        if defined? @name
-            "Puppet::Type::" + @name.to_s.capitalize
-        else
-            super
-        end
-    end
-
-    # Create a block to validate that our object is set up entirely.  This will
-    # be run before the object is operated on.
-    def self.validate(&block)
-        define_method(:validate, &block)
-        #@validate = block
-    end
-
-    # The catalog that this resource is stored in.
-    attr_accessor :catalog
-    
-    # create a log at specified level
-    def log(msg)
-        Puppet::Util::Log.create(
-            :level => @parameters[:loglevel].value,
-            :message => msg,
-            :source => self
-        )
-    end
-
-
-    # instance methods related to instance intrinsics
-    # e.g., initialize() and name()
-
-    public
-
-    def initvars
-        @evalcount = 0
-        @tags = []
-
-        # callbacks are per object and event
-        @callbacks = Hash.new { |chash, key|
-            chash[key] = {}
-        }
-
-        # properties and parameters are treated equivalently from the outside:
-        # as name-value pairs (using [] and []=)
-        # internally, however, parameters are merely a hash, while properties
-        # point to Property objects
-        # further, the lists of valid properties and parameters are defined
-        # at the class level
-        unless defined? @parameters
-            @parameters = {}
-        end
-
-        # keeping stats for the total number of changes, and how many were
-        # completely sync'ed
-        # this isn't really sufficient either, because it adds lots of special
-        # cases such as failed changes
-        # it also doesn't distinguish between changes from the current transaction
-        # vs. changes over the process lifetime
-        @totalchanges = 0
-        @syncedchanges = 0
-        @failedchanges = 0
-
-        @inited = true
-    end
-
-    # initialize the type instance
-    def initialize(hash)
-        unless defined? @inited
-            self.initvars
-        end
-        namevar = self.class.namevar
-
-        orighash = hash
-
-        # If we got passed a transportable object, we just pull a bunch of info
-        # directly from it.  This is the main object instantiation mechanism.
-        if hash.is_a?(Puppet::TransObject)
-            # XXX This will need to change when transobjects change to titles.
-            self.title = hash.name
-
-            #self[:name] = hash[:name]
-            [:file, :line, :tags, :catalog].each { |getter|
-                if hash.respond_to?(getter)
-                    setter = getter.to_s + "="
-                    if val = hash.send(getter)
-                        self.send(setter, val)
-                    end
-                end
-            }
-
-            hash = hash.to_hash
-        else
-            if hash[:title]
-                @title = hash[:title]
-                hash.delete(:title)
-            end
-        end
-
-        # Before anything else, set our parent if it was included
-        if hash.include?(:parent)
-            @parent = hash[:parent]
-            hash.delete(:parent)
-        end
-
-        # Munge up the namevar stuff so we only have one value.
-        hash = self.argclean(hash)
-
-        # Let's do the name first, because some things need to happen once
-        # we have the name but before anything else
-
-        attrs = self.class.allattrs
-
-        if hash.include?(namevar)
-            #self.send(namevar.to_s + "=", hash[namevar])
-            self[namevar] = hash[namevar]
-            hash.delete(namevar)
-            if attrs.include?(namevar)
-                attrs.delete(namevar)
-            else
-                self.devfail "My namevar isn't a valid attribute...?"
-            end
-        else
-            self.devfail "I was not passed a namevar"
-        end
-
-        # If the name and title differ, set up an alias
-        if self.name != self.title
-            if obj = self.class[self.name] 
-                if self.class.isomorphic?
-                    raise Puppet::Error, "%s already exists with name %s" %
-                        [obj.title, self.name]
-                end
-            else
-                self.class.alias(self.name, self)
-            end
-        end
-
-        if hash.include?(:provider)
-            self[:provider] = hash[:provider]
-            hash.delete(:provider)
-        else
-            setdefaults(:provider)
-        end
-
-        # This is all of our attributes except the namevar.
-        attrs.each { |attr|
-            if hash.include?(attr)
-                begin
-                    self[attr] = hash[attr]
-                rescue ArgumentError, Puppet::Error, TypeError
-                    raise
-                rescue => detail
-                    error = Puppet::DevError.new( "Could not set %s on %s: %s" % [attr, self.class.name, detail])
-                    error.set_backtrace(detail.backtrace)
-                    raise error
-                end
-                hash.delete attr
-            end
-        }
-        
-        # Set all default values.
-        self.setdefaults
-
-        if hash.length > 0
-            self.debug hash.inspect
-            self.fail("Class %s does not accept argument(s) %s" %
-                [self.class.name, hash.keys.join(" ")])
-        end
-
-        if self.respond_to?(:validate)
-            self.validate
-        end
-    end
-
-    # Set up all of our autorequires.
-    def finish
-        # Scheduling has to be done when the whole config is instantiated, so
-        # that file order doesn't matter in finding them.
-        self.schedule
-
-        # Make sure all of our relationships are valid.  Again, must be done
-        # when the entire catalog is instantiated.
-        self.class.relationship_params.collect do |klass|
-            if param = @parameters[klass.name]
-                param.validate_relationship
-            end
-        end.flatten.reject { |r| r.nil? }
-    end
-
-    # Return a cached value
-    def cached(name)
-        Puppet::Util::Storage.cache(self)[name]
-        #@cache[name] ||= nil
-    end
-
-    # Cache a value
-    def cache(name, value)
-        Puppet::Util::Storage.cache(self)[name] = value
-        #@cache[name] = value
-    end
-
-#    def set(name, value)
-#        send(name.to_s + "=", value)
-#    end
-#
-#    def get(name)
-#        send(name)
-#    end
-
-    # For now, leave the 'name' method functioning like it used to.  Once 'title'
-    # works everywhere, I'll switch it.
-    def name
-        return self[:name]
-    end
-
-    # Look up our parent in the catalog, if we have one.
-    def parent
-        return nil unless catalog
-
-        unless defined?(@parent)
-            # This is kinda weird.
-            if implicit?
-                parents = catalog.relationship_graph.adjacent(self, :direction => :in)
-            else
-                parents = catalog.adjacent(self, :direction => :in)
-            end
-            if parents
-                # We should never have more than one parent, so let's just ignore
-                # it if we happen to.
-                @parent = parents.shift
-            else
-                @parent = nil
-            end
-        end
-        @parent
-    end
-
-    # Return the "type[name]" style reference.
-    def ref
-        "%s[%s]" % [self.class.name.to_s.capitalize, self.title]
-    end
-    
-    def self_refresh?
-        self.class.self_refresh
-    end
-
-    # Mark that we're purging.
-    def purging
-        @purging = true
-    end
-
-    # Is this resource being purged?  Used by transactions to forbid
-    # deletion when there are dependencies.
-    def purging?
-        if defined? @purging
-            @purging
-        else
-            false
-        end
-    end
-
-    # Retrieve the title of an object.  If no title was set separately,
-    # then use the object's name.
-    def title
-        unless defined? @title and @title
-            namevar = self.class.namevar
-            if self.class.validparameter?(namevar)
-                @title = self[:name]
-            elsif self.class.validproperty?(namevar)
-                @title = self.should(namevar)
-            else
-                self.devfail "Could not find namevar %s for %s" %
-                    [namevar, self.class.name]
-            end
-        end
-
-        return @title
-    end
-
-    # convert to a string
-    def to_s
-        self.ref
-    end
-
-    # Convert to a transportable object
-    def to_trans(ret = true)
-        trans = TransObject.new(self.title, self.class.name)
-
-        values = retrieve()
-        values.each do |name, value|
-            trans[name.name] = value
-        end
-
-        @parameters.each do |name, param|
-            # Avoid adding each instance name as both the name and the namevar
-            next if param.class.isnamevar? and param.value == self.title
-
-            # We've already got property values
-            next if param.is_a?(Puppet::Property)
-            trans[name] = param.value
-        end
-
-        trans.tags = self.tags
-
-        # FIXME I'm currently ignoring 'parent' and 'path'
-
-        return trans
-    end
-
-end # Puppet::Type
-end
-
-require 'puppet/provider'
-
-# Always load these types.
-require 'puppet/type/component'
diff --git a/lib/puppet/type/component.rb b/lib/puppet/type/component.rb
deleted file mode 100644
index 3562050..0000000
--- a/lib/puppet/type/component.rb
+++ /dev/null
@@ -1,154 +0,0 @@
-
-# the object allowing us to build complex structures
-# this thing contains everything else, including itself
-
-require 'puppet'
-require 'puppet/type'
-require 'puppet/transaction'
-require 'puppet/pgraph'
-
-Puppet::Type.newtype(:component) do
-    include Enumerable
-    attr_accessor :children
-
-    newparam(:name) do
-        desc "The name of the component.  Generally optional."
-        isnamevar
-    end
-
-    newparam(:type) do
-        desc "The type that this component maps to.  Generally some kind of
-            class from the language."
-
-        defaultto "component"
-    end
-
-    # Remove a child from the component.
-    def delete(child)
-        if @children.include?(child)
-            @children.delete(child)
-            return true
-        else
-            return super
-        end
-    end
-
-    # Recurse deeply through the tree, but only yield types, not properties.
-    def delve(&block)
-        self.each do |obj|
-            if obj.is_a?(self.class)
-                obj.delve(&block)
-            end
-        end
-        block.call(self)
-    end
-
-    # Return each child in turn.
-    def each
-        @children.each { |child| yield child }
-    end
-
-    # Do all of the polishing off, mostly doing autorequires and making
-    # dependencies.  This will get run once on the top-level component,
-    # and it will do everything necessary.
-    def finalize
-        started = {}
-        finished = {}
-        
-        # First do all of the finish work, which mostly involves
-        self.delve do |object|
-            # Make sure we don't get into loops
-            if started.has_key?(object)
-                debug "Already finished %s" % object.title
-                next
-            else
-                started[object] = true
-            end
-            unless finished.has_key?(object)
-                object.finish
-                finished[object] = true
-            end
-        end
-
-        @finalized = true
-    end
-
-    def finalized?
-        if defined? @finalized
-            return @finalized
-        else
-            return false
-        end
-    end
-
-    # Initialize a new component
-    def initialize(*args)
-        @children = []
-        super
-
-        @reference = Puppet::ResourceReference.new(:component, @title)
-
-        unless self.class[@reference.to_s]
-            self.class.alias(@reference.to_s, self)
-        end
-    end
-
-    def initvars
-        super
-        @children = []
-    end
-
-    # Add a hook for testing for recursion.
-    def parentof?(child)
-        if super(child)
-            return true
-        elsif @children.include?(child)
-            debug "child is already in children array"
-            return true
-        else
-            return false
-        end
-    end
-    
-    # Component paths are special because they function as containers.
-    def pathbuilder
-        if @reference.type == "Class"
-            # 'main' is the top class, so we want to see '//' instead of
-            # its name.
-            if @reference.title == "main"
-                myname = ""
-            else
-                myname = @reference.title
-            end
-        else
-            myname = @reference.to_s
-        end
-        if p = self.parent
-            return [p.pathbuilder, myname]
-        else
-            return [myname]
-        end
-    end
-
-    def ref
-        @reference.to_s
-    end
-
-    # We want our title to just be the whole reference, rather than @title.
-    def title
-        @reference.to_s
-    end
-
-    def refresh
-        catalog.adjacent(self).each do |child|
-            if child.respond_to?(:refresh)
-                child.refresh
-                child.log "triggering %s" % :refresh
-            end
-        end
-    end
-
-    def to_s
-        @reference.to_s
-    end
-end
diff --git a/lib/puppet/type/cron.rb b/lib/puppet/type/cron.rb
deleted file mode 100755
index c46a7c8..0000000
--- a/lib/puppet/type/cron.rb
+++ /dev/null
@@ -1,429 +0,0 @@
-require 'etc'
-require 'facter'
-require 'puppet/util/filetype'
-
-Puppet::Type.newtype(:cron) do
-    @doc = "Installs and manages cron jobs.  All fields except the command 
-        and the user are optional, although specifying no periodic
-        fields would result in the command being executed every
-        minute.  While the name of the cron job is not part of the actual
-        job, it is used by Puppet to store and retrieve it.
-        
-        If you specify a cron job that matches an existing job in every way
-        except name, then the jobs will be considered equivalent and the
-        new name will be permanently associated with that job.  Once this
-        association is made and synced to disk, you can then manage the job
-        normally (e.g., change the schedule of the job).
-        
-        Example::
-            
-            cron { logrotate:
-                command => \"/usr/sbin/logrotate\",
-                user => root,
-                hour => 2,
-                minute => 0
-            }
-
-        Note that all cron values can be specified as an array of values::
-
-            cron { logrotate:
-                command => \"/usr/sbin/logrotate\",
-                user => root,
-                hour => [2, 4]
-            }
-
-        Or using ranges, or the step syntax ``*/2`` (although there's no guarantee that
-        your ``cron`` daemon supports it)::
-
-            cron { logrotate:
-                command => \"/usr/sbin/logrotate\",
-                user => root,
-                hour => ['2-4'],
-                minute => '*/10'
-            }
-        "
-    ensurable
-
-    # A base class for all of the Cron parameters, since they all have
-    # similar argument checking going on.
-    class CronParam < Puppet::Property
-        class << self
-            attr_accessor :boundaries, :default
-        end
-
-        # We have to override the parent method, because we consume the entire
-        # "should" array
-        def insync?(is)
-            if defined? @should and @should
-                self.is_to_s(is) == self.should_to_s
-            else
-                true
-            end
-        end
-
-        # A method used to do parameter input handling.  Converts integers
-        # in string form to actual integers, and returns the value if it's
-        # an integer or false if it's just a normal string.
-        def numfix(num)
-            if num =~ /^\d+$/
-                return num.to_i
-            elsif num.is_a?(Integer)
-                return num
-            else
-                return false
-            end
-        end
-
-        # Verify that a number is within the specified limits.  Return the
-        # number if it is, or false if it is not.
-        def limitcheck(num, lower, upper)
-            if num >= lower and num <= upper
-                return num
-            else
-                return false
-            end
-        end
-
-        # Verify that a value falls within the specified array.  Does case
-        # insensitive matching, and supports matching either the entire word
-        # or the first three letters of the word.
-        def alphacheck(value, ary)
-            tmp = value.downcase
-            
-            # If they specified a shortened version of the name, then see
-            # if we can lengthen it (e.g., mon => monday).
-            if tmp.length == 3
-                ary.each_with_index { |name, index|
-                    if name =~ /#{tmp}/i
-                        return index
-                    end
-                }
-            else
-                if ary.include?(tmp)
-                    return ary.index(tmp)
-                end
-            end
-
-            return false
-        end
-
-        def should_to_s(newvalue = @should)
-            if newvalue
-                unless newvalue.is_a?(Array)
-                    newvalue = [newvalue]
-                end
-                if self.name == :command or newvalue[0].is_a? Symbol
-                    newvalue[0]
-                else
-                    newvalue.join(",")
-                end
-            else
-                nil
-            end
-        end
-
-        def is_to_s(currentvalue = @is)
-            if currentvalue
-                unless currentvalue.is_a?(Array)
-                    return currentvalue
-                end
-
-                if self.name == :command or currentvalue[0].is_a? Symbol
-                    currentvalue[0]
-                else
-                    currentvalue.join(",")
-                end
-            else
-                nil
-            end
-        end
-
-        def should
-            if @should and @should[0] == :absent
-                :absent
-            else
-                @should
-            end
-        end
-
-        def should=(ary)
-            super
-            @should.flatten!
-        end
-
-        # The method that does all of the actual parameter value
-        # checking; called by all of the +param<name>=+ methods.
-        # Requires the value, type, and bounds, and optionally supports
-        # a boolean of whether to do alpha checking, and if so requires
-        # the ary against which to do the checking.
-        munge do |value|
-            # Support 'absent' as a value, so that they can remove
-            # a value
-            if value == "absent" or value == :absent
-                return :absent
-            end
-
-            # Allow the */2 syntax
-            if value =~ /^\*\/[0-9]+$/
-                return value
-            end
-
-            # Allow ranges
-            if value =~ /^[0-9]+-[0-9]+$/
-                return value
-            end
-
-            if value == "*"
-                return value
-            end
-
-            return value unless self.class.boundaries
-            lower, upper = self.class.boundaries
-            retval = nil
-            if num = numfix(value)
-                retval = limitcheck(num, lower, upper)
-            elsif respond_to?(:alpha)
-                # If it has an alpha method defined, then we check
-                # to see if our value is in that list and if so we turn
-                # it into a number
-                retval = alphacheck(value, alpha())
-            end
-
-            if retval
-                return retval.to_s
-            else
-                self.fail "%s is not a valid %s" %
-                    [value, self.class.name]
-            end
-        end
-    end
-
-    # Somewhat uniquely, this property does not actually change anything -- it
-    # just calls + at resource.sync+, which writes out the whole cron tab for
-    # the user in question.  There is no real way to change individual cron
-    # jobs without rewriting the entire cron file.
-    #
-    # Note that this means that managing many cron jobs for a given user
-    # could currently result in multiple write sessions for that user.
-    newproperty(:command, :parent => CronParam) do
-        desc "The command to execute in the cron job.  The environment
-            provided to the command varies by local system rules, and it is
-            best to always provide a fully qualified command.  The user's
-            profile is not sourced when the command is run, so if the
-            user's environment is desired it should be sourced manually.
-            
-            All cron parameters support ``absent`` as a value; this will
-            remove any existing values for that field."
-
-        def retrieve 
-          return_value = super
-          if return_value && return_value.is_a?(Array)
-            return_value = return_value[0]
-          end
-            
-          return return_value
-        end
-
-        def should
-            if @should
-                if @should.is_a? Array
-                    @should[0]
-                else
-                    devfail "command is not an array"
-                end
-            else
-                nil
-            end
-        end
-    end
-
-    newproperty(:special) do
-        desc "Special schedules only supported on FreeBSD."
-
-        def specials
-            %w{reboot yearly annually monthly weekly daily midnight hourly}
-        end
-
-        validate do |value|
-            unless specials().include?(value)
-                raise ArgumentError, "Invalid special schedule %s" %
-                    value.inspect
-            end
-        end
-    end
-
-    newproperty(:minute, :parent => CronParam) do
-        self.boundaries = [0, 59]
-        desc "The minute at which to run the cron job.
-            Optional; if specified, must be between 0 and 59, inclusive."
-    end
-
-    newproperty(:hour, :parent => CronParam) do
-        self.boundaries = [0, 23]
-        desc "The hour at which to run the cron job. Optional;
-            if specified, must be between 0 and 23, inclusive."
-    end
-
-    newproperty(:weekday, :parent => CronParam) do
-        def alpha
-            %w{sunday monday tuesday wednesday thursday friday saturday}
-        end
-        self.boundaries = [0, 6]
-        desc "The weekday on which to run the command.
-            Optional; if specified, must be between 0 and 6, inclusive, with
-            0 being Sunday, or must be the name of the day (e.g., Tuesday)."
-    end
-
-    newproperty(:month, :parent => CronParam) do
-        def alpha
-            %w{january february march april may june july
-                august september october november december}
-        end
-        self.boundaries = [1, 12]
-        desc "The month of the year.  Optional; if specified
-            must be between 1 and 12 or the month name (e.g., December)."
-    end
-
-    newproperty(:monthday, :parent => CronParam) do
-        self.boundaries = [1, 31]
-        desc "The day of the month on which to run the
-            command.  Optional; if specified, must be between 1 and 31."
-    end
-
-    newproperty(:environment) do
-        desc "Any environment settings associated with this cron job.  They
-            will be stored between the header and the job in the crontab.  There
-            can be no guarantees that other, earlier settings will not also
-            affect a given cron job.
-
-
-            Also, Puppet cannot automatically determine whether an existing,
-            unmanaged environment setting is associated with a given cron
-            job.  If you already have cron jobs with environment settings,
-            then Puppet will keep those settings in the same place in the file,
-            but will not associate them with a specific job.
-            
-            Settings should be specified exactly as they should appear in
-            the crontab, e.g., ``PATH=/bin:/usr/bin:/usr/sbin``."
-
-        validate do |value|
-            unless value =~ /^\s*(\w+)\s*=\s*(.+)\s*$/ or value == :absent or value == "absent"
-                raise ArgumentError, "Invalid environment setting %s" %
-                    value.inspect
-            end
-        end
-
-        def insync?(is)
-            if is.is_a? Array
-                return is.sort == @should.sort
-            else
-                return is == @should
-            end
-        end
-
-        def is_to_s(newvalue)
-            if newvalue 
-                if newvalue.is_a?(Array)
-                    newvalue.join(",")
-                else
-                    newvalue
-                end
-            else
-                nil
-            end
-        end
-
-        def should
-            @should
-        end
-
-        def should_to_s(newvalue = @should)
-            if newvalue
-                newvalue.join(",")
-            else
-                nil
-            end
-        end
-    end
-
-    newparam(:name) do
-        desc "The symbolic name of the cron job.  This name
-            is used for human reference only and is generated automatically
-            for cron jobs found on the system.  This generally won't
-            matter, as Puppet will do its best to match existing cron jobs
-            against specified jobs (and Puppet adds a comment to cron jobs it
-            adds), but it is at least possible that converting from
-            unmanaged jobs to managed jobs might require manual
-            intervention."
-
-        isnamevar
-    end
-
-    newproperty(:user) do
-        desc "The user to run the command as.  This user must
-            be allowed to run cron jobs, which is not currently checked by
-            Puppet.
-            
-            The user defaults to whomever Puppet is running as."
-
-        defaultto { Etc.getpwuid(Process.uid).name || "root" }
-    end
-
-    newproperty(:target) do
-        desc "Where the cron job should be stored.  For crontab-style
-            entries this is the same as the user and defaults that way.
-            Other providers default accordingly."
-
-        defaultto {
-            if provider.is_a?(@resource.class.provider(:crontab))
-                if val = @resource.should(:user)
-                    val
-                else
-                    raise ArgumentError,
-                        "You must provide a user with crontab entries"
-                end
-            elsif provider.class.ancestors.include?(Puppet::Provider::ParsedFile)
-                provider.class.default_target
-            else
-                nil
-            end
-        }
-    end
-
-    # We have to reorder things so that :provide is before :target
-
-    attr_accessor :uid
-
-    def value(name)
-        name = symbolize(name)
-        ret = nil
-        if obj = @parameters[name]
-            ret = obj.should
-
-            if ret.nil?
-                ret = obj.retrieve
-            end
-
-            if ret == :absent
-                ret = nil
-            end
-        end
-
-        unless ret
-            case name
-            when :command
-                devfail "No command, somehow"
-            when :special
-                # nothing
-            else
-                #ret = (self.class.validproperty?(name).default || "*").to_s
-                ret = "*"
-            end
-        end
-
-        ret
-    end
-end
-
-
-
diff --git a/lib/puppet/type/exec.rb b/lib/puppet/type/exec.rb
deleted file mode 100755
index d7c3a8a..0000000
--- a/lib/puppet/type/exec.rb
+++ /dev/null
@@ -1,622 +0,0 @@
-module Puppet
-    newtype(:exec) do
-        include Puppet::Util::Execution
-        require 'timeout'
-
-        @doc = "Executes external commands.  It is critical that all commands
-            executed using this mechanism can be run multiple times without
-            harm, i.e., they are *idempotent*.  One useful way to create idempotent
-            commands is to use the checks like ``creates`` to avoid running the
-            command unless some condition is met.
-
-            Note also that you can restrict an ``exec`` to only run when it receives
-            events by using the ``refreshonly`` parameter; this is a useful way to
-            have your configuration respond to events with arbitrary commands.
-
-            It is worth noting that ``exec`` is special, in that it is not
-            currently considered an error to have multiple ``exec`` instances
-            with the same name.  This was done purely because it had to be this
-            way in order to get certain functionality, but it complicates things.
-            In particular, you will not be able to use ``exec`` instances that
-            share their commands with other instances as a dependency, since
-            Puppet has no way of knowing which instance you mean.
-
-            For example::
-
-                # defined in the production class
-                exec { \"make\":
-                    cwd => \"/prod/build/dir\",
-                    path => \"/usr/bin:/usr/sbin:/bin\"
-                }
-
-                . etc. .
-
-                # defined in the test class
-                exec { \"make\":
-                    cwd => \"/test/build/dir\",
-                    path => \"/usr/bin:/usr/sbin:/bin\"
-                }
-
-            Any other type would throw an error, complaining that you had
-            the same instance being managed in multiple places, but these are
-            obviously different images, so ``exec`` had to be treated specially.
-
-            It is recommended to avoid duplicate names whenever possible.
-
-            Note that if an ``exec`` receives an event from another resource,
-            it will get executed again (or execute the command specified in
-            ``refresh``, if there is one).
-            
-            There is a strong tendency to use ``exec`` to do whatever work Puppet
-            can't already do; while this is obviously acceptable (and unavoidable)
-            in the short term, it is highly recommended to migrate work from ``exec``
-            to native Puppet types as quickly as possible.  If you find that
-            you are doing a lot of work with ``exec``, please at least notify
-            us at Reductive Labs what you are doing, and hopefully we can work with
-            you to get a native resource type for the work you are doing."
-
-        require 'open3'
-
-        # Create a new check mechanism.  It's basically just a parameter that
-        # provides one extra 'check' method.
-        def self.newcheck(name, &block)
-            @checks ||= {}
-
-            check = newparam(name, &block)
-            @checks[name] = check
-        end
-
-        def self.checks
-            @checks.keys
-        end
-
-        newproperty(:returns) do |property|
-            include Puppet::Util::Execution
-            munge do |value|
-                value.to_s
-            end
-
-            defaultto "0"
-
-            attr_reader :output
-            desc "The expected return code.  An error will be returned if the
-                executed command returns something else.  Defaults to 0."
-
-            # Make output a bit prettier
-            def change_to_s(currentvalue, newvalue)
-                return "executed successfully"
-            end
-
-            # First verify that all of our checks pass.
-            def retrieve
-                # Default to somethinng
-
-                if @resource.check
-                    return :notrun
-                else
-                    return self.should
-                end
-            end
-
-            # Actually execute the command.
-            def sync
-                olddir = nil
-
-                # We need a dir to change to, even if it's just the cwd
-                dir = self.resource[:cwd] || Dir.pwd
-
-                event = :executed_command
-
-                begin
-                    @output, status = @resource.run(self.resource[:command])
-                rescue Timeout::Error
-                    self.fail "Command exceeded timeout" % value.inspect
-                end
-
-                if log = @resource[:logoutput]
-                    case log 
-                    when :true 
-                        log = @resource[:loglevel]
-                    when :on_failure
-                        if status.exitstatus.to_s != self.should.to_s
-                            log = @resource[:loglevel]
-                        else
-                            log = :false
-                        end
-                    end
-                    unless log == :false
-                        @output.split(/\n/).each { |line|
-                            self.send(log, line)
-                        }
-                    end
-                end
-
-                if status.exitstatus.to_s != self.should.to_s
-                    self.fail("%s returned %s instead of %s" %
-                        [self.resource[:command], status.exitstatus, self.should.to_s])
-                end
-
-                return event
-            end
-        end
-
-        newparam(:command) do
-            isnamevar
-            desc "The actual command to execute.  Must either be fully qualified
-                or a search path for the command must be provided.  If the command
-                succeeds, any output produced will be logged at the instance's
-                normal log level (usually ``notice``), but if the command fails
-                (meaning its return code does not match the specified code) then
-                any output is logged at the ``err`` log level."
-        end
-
-        newparam(:path) do
-            desc "The search path used for command execution.
-                Commands must be fully qualified if no path is specified.  Paths
-                can be specified as an array or as a colon-separated list."
-
-            # Support both arrays and colon-separated fields.
-            def value=(*values)
-                @value = values.flatten.collect { |val|
-                    val.split(":")
-                }.flatten
-            end
-        end
-
-        newparam(:user) do
-            desc "The user to run the command as.  Note that if you
-                use this then any error output is not currently captured.  This
-                is because of a bug within Ruby.  If you are using Puppet to
-                create this user, the exec will automatically require the user,
-                as long as it is specified by name."
-
-            # Most validation is handled by the SUIDManager class.
-            validate do |user|
-                unless Puppet.features.root?
-                    self.fail "Only root can execute commands as other users"
-                end
-            end
-        end
-
-        newparam(:group) do
-            desc "The group to run the command as.  This seems to work quite
-                haphazardly on different platforms -- it is a platform issue
-                not a Ruby or Puppet one, since the same variety exists when
-                running commnands as different users in the shell."
-            # Validation is handled by the SUIDManager class.
-        end
-
-        newparam(:cwd) do
-            desc "The directory from which to run the command.  If
-                this directory does not exist, the command will fail."
-
-            validate do |dir|
-                unless dir =~ /^#{File::SEPARATOR}/
-                    self.fail("CWD must be a fully qualified path")
-                end
-            end
-
-            munge do |dir|
-                if dir.is_a?(Array)
-                    dir = dir[0]
-                end
-                
-                dir
-            end
-        end
-
-        newparam(:logoutput) do
-            desc "Whether to log output.  Defaults to logging output at the
-                loglevel for the ``exec`` resource. Use *on_failure* to only
-                log the output when the command reports an error.  Values are
-                **true**, *false*, *on_failure*, and any legal log level."
-
-            newvalues(:true, :false, :on_failure)
-        end
-
-        newparam(:refresh) do
-            desc "How to refresh this command.  By default, the exec is just
-                called again when it receives an event from another resource,
-                but this parameter allows you to define a different command
-                for refreshing."
-
-            validate do |command|
-                @resource.validatecmd(command)
-            end
-        end
-
-        newparam(:env) do
-            desc "This parameter is deprecated. Use 'environment' instead."
-
-            munge do |value|
-                warning "'env' is deprecated on exec; use 'environment' instead."
-                resource[:environment] = value
-            end
-        end
-
-        newparam(:environment) do
-            desc "Any additional environment variables you want to set for a
-                command.  Note that if you use this to set PATH, it will override
-                the ``path`` attribute.  Multiple environment variables should be
-                specified as an array."
-
-            validate do |values|
-                values = [values] unless values.is_a? Array
-                values.each do |value|
-                    unless value =~ /\w+=/
-                        raise ArgumentError, "Invalid environment setting '%s'" % value
-                    end
-                end
-            end
-        end
-        
-        newparam(:timeout) do
-            desc "The maximum time the command should take.  If the command takes
-                longer than the timeout, the command is considered to have failed
-                and will be stopped.  Use any negative number to disable the timeout.
-                The time is specified in seconds."
-            
-            munge do |value|
-                value = value.shift if value.is_a?(Array)
-                if value.is_a?(String)
-                    unless value =~ /^[-\d.]+$/
-                        raise ArgumentError, "The timeout must be a number."
-                    end
-                    Float(value)
-                else
-                    value
-                end
-            end
-            
-            defaultto 300
-        end
-
-        newcheck(:refreshonly) do
-            desc "The command should only be run as a
-                refresh mechanism for when a dependent object is changed.  It only
-                makes sense to use this option when this command depends on some
-                other object; it is useful for triggering an action::
-                    
-                    # Pull down the main aliases file
-                    file { \"/etc/aliases\":
-                        source => \"puppet://server/module/aliases\"
-                    }
-
-                    # Rebuild the database, but only when the file changes
-                    exec { newaliases:
-                        path => [\"/usr/bin\", \"/usr/sbin\"],
-                        subscribe => File[\"/etc/aliases\"],
-                        refreshonly => true
-                    }
-                
-                Note that only ``subscribe`` and ``notify`` can trigger actions, not ``require``,
-                so it only makes sense to use ``refreshonly`` with ``subscribe`` or ``notify``."
-
-            newvalues(:true, :false)
-
-            # We always fail this test, because we're only supposed to run
-            # on refresh.
-            def check(value)
-                # We have to invert the values.
-                if value == :true
-                    false
-                else
-                    true
-                end
-            end
-        end
-
-        newcheck(:creates) do 
-            desc "A file that this command creates.  If this
-                parameter is provided, then the command will only be run
-                if the specified file does not exist::
-
-                    exec { \"tar xf /my/tar/file.tar\":
-                        cwd => \"/var/tmp\",
-                        creates => \"/var/tmp/myfile\",
-                        path => [\"/usr/bin\", \"/usr/sbin\"]
-                    }
-                
-                "
-
-            # FIXME if they try to set this and fail, then we should probably 
-            # fail the entire exec, right?
-            validate do |files|
-                files = [files] unless files.is_a? Array
-
-                files.each do |file|
-                    self.fail("'creates' must be set to a fully qualified path") unless file
-
-                    unless file =~ %r{^#{File::SEPARATOR}}
-                        self.fail "'creates' files must be fully qualified."
-                    end
-                end
-            end
-
-            # If the file exists, return false (i.e., don't run the command),
-            # else return true
-            def check(value)
-                return ! FileTest.exists?(value)
-            end
-        end
-
-        newcheck(:unless) do
-            desc "If this parameter is set, then this ``exec`` will run unless
-                the command returns 0.  For example::
-                    
-                    exec { \"/bin/echo root >> /usr/lib/cron/cron.allow\":
-                        path => \"/usr/bin:/usr/sbin:/bin\",
-                        unless => \"grep root /usr/lib/cron/cron.allow 2>/dev/null\"
-                    }
-
-                This would add ``root`` to the cron.allow file (on Solaris) unless
-                ``grep`` determines it's already there.
-
-                Note that this command follows the same rules as the main command,
-                which is to say that it must be fully qualified if the path is not set.
-                "
-
-            validate do |cmds|
-                cmds = [cmds] unless cmds.is_a? Array
-
-                cmds.each do |cmd|
-                    @resource.validatecmd(cmd)
-                end
-            end
-
-            # Return true if the command does not return 0.
-            def check(value)
-                begin
-                    output, status = @resource.run(value, true)
-                rescue Timeout::Error
-                    err "Check %s exceeded timeout" % value.inspect
-                    return false
-                end
-
-                return status.exitstatus != 0
-            end
-        end
-
-        newcheck(:onlyif) do
-            desc "If this parameter is set, then this ``exec`` will only run if
-                the command returns 0.  For example::
-                    
-                    exec { \"logrotate\":
-                        path => \"/usr/bin:/usr/sbin:/bin\",
-                        onlyif => \"test `du /var/log/messages | cut -f1` -gt 100000\"
-                    }
-
-                This would run ``logrotate`` only if that test returned true.
-
-                Note that this command follows the same rules as the main command,
-                which is to say that it must be fully qualified if the path is not set.
-
-                Also note that onlyif can take an array as its value, eg:
-                    onlyif => [\"test -f /tmp/file1\", \"test -f /tmp/file2\"]
-
-                This will only run the exec if /all/ conditions in the array return true.
-                "
-
-            validate do |cmds|
-                cmds = [cmds] unless cmds.is_a? Array
-
-                cmds.each do |cmd|
-                    @resource.validatecmd(cmd)
-                end
-            end
-
-            # Return true if the command returns 0.
-            def check(value)
-                begin
-                    output, status = @resource.run(value, true)
-                rescue Timeout::Error
-                    err "Check %s exceeded timeout" % value.inspect
-                    return false
-                end
-
-                return status.exitstatus == 0
-            end
-        end
-
-        # Exec names are not isomorphic with the objects.
-        @isomorphic = false
-
-        validate do
-            validatecmd(self[:command])
-        end
-
-        # FIXME exec should autorequire any exec that 'creates' our cwd
-        autorequire(:file) do
-            reqs = []
-
-            # Stick the cwd in there if we have it
-            if self[:cwd]
-                reqs << self[:cwd]
-            end
-
-            self[:command].scan(/^(#{File::SEPARATOR}\S+)/) { |str|
-                reqs << str
-            }
-
-            [:onlyif, :unless].each { |param|
-                next unless tmp = self[param]
-
-                tmp = [tmp] unless tmp.is_a? Array
-
-                tmp.each do |line|
-                    # And search the command line for files, adding any we
-                    # find.  This will also catch the command itself if it's
-                    # fully qualified.  It might not be a bad idea to add
-                    # unqualified files, but, well, that's a bit more annoying
-                    # to do.
-                    reqs += line.scan(%r{(#{File::SEPARATOR}\S+)})
-                end
-            }
-
-            # For some reason, the += isn't causing a flattening
-            reqs.flatten!
-
-            reqs
-        end
-
-        autorequire(:user) do
-            # Autorequire users if they are specified by name
-            if user = self[:user] and user !~ /^\d+$/
-                user
-            end
-        end
-
-        def self.instances
-            []
-        end
-
-        # Verify that we pass all of the checks.  The argument determines whether
-        # we skip the :refreshonly check, which is necessary because we now check
-        # within refresh()
-        def check(refreshing = false)
-            self.class.checks.each { |check|
-                next if refreshing and check == :refreshonly
-                if @parameters.include?(check)
-                    val = @parameters[check].value
-                    val = [val] unless val.is_a? Array
-                    val.each do |value|
-                        unless @parameters[check].check(value)
-                            return false
-                        end
-                    end
-                end
-            }
-
-            return true
-        end
-
-        # Verify that we have the executable
-        def checkexe(cmd)
-            if cmd =~ /^\//
-                exe = cmd.split(/ /)[0]
-                unless FileTest.exists?(exe)
-                    raise ArgumentError, "Could not find executable %s" % exe
-                end
-                unless FileTest.executable?(exe)
-                    raise ArgumentError,
-                        "%s is not executable" % exe
-                end
-            elsif path = self[:path]
-                exe = cmd.split(/ /)[0]
-                withenv :PATH => self[:path].join(":") do
-                    path = %{which #{exe}}.chomp
-                    if path == ""
-                        raise ArgumentError,
-                            "Could not find command '%s'" % exe
-                    end
-                end
-            else
-                raise ArgumentError,
-                    "%s is somehow not qualified with no search path" %
-                        self[:command]
-            end
-        end
-
-        def output
-            if self.property(:returns).nil?
-                return nil
-            else
-                return self.property(:returns).output
-            end
-        end
-
-        # Run the command, or optionally run a separately-specified command.
-        def refresh
-            if self.check(true)
-                if cmd = self[:refresh]
-                    self.run(cmd)
-                else
-                    self.property(:returns).sync
-                end
-            end
-        end
-
-        # Run a command.
-        def run(command, check = false)
-            output = nil
-            status = nil
-
-            dir = nil
-
-            checkexe(command)
-
-            if dir = self[:cwd]
-                unless File.directory?(dir)
-                    if check
-                        dir = nil
-                    else
-                        self.fail "Working directory '%s' does not exist" % dir
-                    end
-                end
-            end
-
-            dir ||= Dir.pwd
-
-            if check
-                debug "Executing check '#{command}'"
-            else
-                debug "Executing '#{command}'"
-            end
-            begin
-                # Do our chdir
-                Dir.chdir(dir) do
-                    environment = {}
-
-                    if self[:path]
-                        environment[:PATH] = self[:path].join(":")
-                    end
-
-                    if envlist = self[:environment]
-                        envlist = [envlist] unless envlist.is_a? Array
-                        envlist.each do |setting|
-                            if setting =~ /^(\w+)=((.|\n)+)$/
-                                name = $1
-                                value = $2
-                                if environment.include? name
-                                    warning(
-                                    "Overriding environment setting '%s' with '%s'" %
-                                        [name, value]
-                                    )
-                                end
-                                environment[name] = value
-                            else
-                                warning "Cannot understand environment setting %s" % setting.inspect
-                            end
-                        end
-                    end
-
-                    withenv environment do
-                        Timeout::timeout(self[:timeout]) do
-                            output, status = Puppet::Util::SUIDManager.run_and_capture(
-                                [command], self[:user], self[:group]
-                            )
-                        end
-                        # The shell returns 127 if the command is missing.
-                        if status.exitstatus == 127
-                            raise ArgumentError, output
-                        end
-                    end
-                end
-            rescue Errno::ENOENT => detail
-                self.fail detail.to_s
-            end
-
-            return output, status
-        end
-
-        def validatecmd(cmd)
-            # if we're not fully qualified, require a path
-            if cmd !~ /^\//
-                if self[:path].nil?
-                    self.fail "'%s' is both unqualifed and specified no search path" % cmd
-                end
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/type/file.rb b/lib/puppet/type/file.rb
deleted file mode 100644
index 371571f..0000000
--- a/lib/puppet/type/file.rb
+++ /dev/null
@@ -1,1161 +0,0 @@
-require 'digest/md5'
-require 'cgi'
-require 'etc'
-require 'uri'
-require 'fileutils'
-require 'puppet/network/handler'
-require 'puppet/util/diff'
-require 'puppet/util/checksums'
-
-module Puppet
-    newtype(:file) do
-        include Puppet::Util::MethodHelper
-        include Puppet::Util::Checksums
-        @doc = "Manages local files, including setting ownership and
-            permissions, creation of both files and directories, and
-            retrieving entire files from remote servers.  As Puppet matures, it
-            expected that the ``file`` resource will be used less and less to
-            manage content, and instead native resources will be used to do so.
-            
-            If you find that you are often copying files in from a central
-            location, rather than using native resources, please contact
-            Reductive Labs and we can hopefully work with you to develop a
-            native resource to support what you are doing."
-
-        newparam(:path) do
-            desc "The path to the file to manage.  Must be fully qualified."
-            isnamevar
-
-            validate do |value|
-                unless value =~ /^#{File::SEPARATOR}/
-                    raise Puppet::Error, "File paths must be fully qualified"
-                end
-            end
-        end
-
-        newparam(:backup) do
-            desc "Whether files should be backed up before
-                being replaced.  The preferred method of backing files up is via
-                a ``filebucket``, which stores files by their MD5 sums and allows
-                easy retrieval without littering directories with backups.  You
-                can specify a local filebucket or a network-accessible
-                server-based filebucket by setting ``backup => bucket-name``.
-                Alternatively, if you specify any value that begins with a ``.``
-                (e.g., ``.puppet-bak``), then Puppet will use copy the file in
-                the same directory with that value as the extension of the
-                backup. Setting ``backup => false`` disables all backups of the
-                file in question.
-                
-                Puppet automatically creates a local filebucket named ``puppet`` and
-                defaults to backing up there.  To use a server-based filebucket,
-                you must specify one in your configuration::
-                    
-                    filebucket { main:
-                        server => puppet
-                    }
-
-                The ``puppetmasterd`` daemon creates a filebucket by default,
-                so you can usually back up to your main server with this
-                configuration.  Once you've described the bucket in your
-                configuration, you can use it in any file::
-
-                    file { \"/my/file\":
-                        source => \"/path/in/nfs/or/something\",
-                        backup => main
-                    }
-
-                This will back the file up to the central server.
-
-                At this point, the benefits of using a filebucket are that you do not
-                have backup files lying around on each of your machines, a given
-                version of a file is only backed up once, and you can restore
-                any given file manually, no matter how old.  Eventually,
-                transactional support will be able to automatically restore
-                filebucketed files.
-                "
-
-            defaultto { "puppet" }
-            
-            munge do |value|
-                # I don't really know how this is happening.
-                if value.is_a?(Array)
-                    value = value.shift
-                end
-                case value
-                when false, "false", :false:
-                    false
-                when true, "true", ".puppet-bak", :true:
-                    ".puppet-bak"
-                when /^\./
-                    value
-                when String:
-                    # We can't depend on looking this up right now,
-                    # we have to do it after all of the objects
-                    # have been instantiated.
-                    if bucketobj = Puppet::Type.type(:filebucket)[value]
-                        @resource.bucket = bucketobj.bucket
-                        bucketobj.title
-                    else
-                        # Set it to the string; finish() turns it into a
-                        # filebucket.
-                        @resource.bucket = value
-                        value
-                    end
-                when Puppet::Network::Client.client(:Dipper):
-                    @resource.bucket = value
-                    value.name
-                else
-                    self.fail "Invalid backup type %s" %
-                        value.inspect
-                end
-            end
-        end
-
-        newparam(:recurse) do
-            desc "Whether and how deeply to do recursive
-                management."
-
-            newvalues(:true, :false, :inf, /^[0-9]+$/)
-
-            # Replace the validation so that we allow numbers in
-            # addition to string representations of them.
-            validate { |arg| }
-            munge do |value|
-                newval = super(value)
-                case newval
-                when :true, :inf: true
-                when :false: false
-                when Integer, Fixnum, Bignum: value
-                when /^\d+$/: Integer(value)
-                else
-                    raise ArgumentError, "Invalid recurse value %s" % value.inspect
-                end
-            end
-        end
-
-        newparam(:replace, :boolean => true) do
-            desc "Whether or not to replace a file that is
-                sourced but exists.  This is useful for using file sources
-                purely for initialization."
-            newvalues(:true, :false)
-            aliasvalue(:yes, :true)
-            aliasvalue(:no, :false)
-            defaultto :true
-        end
-
-        newparam(:force, :boolean => true) do
-            desc "Force the file operation.  Currently only used when replacing
-                directories with links."
-            newvalues(:true, :false)
-            defaultto false
-        end
-
-        newparam(:ignore) do
-            desc "A parameter which omits action on files matching
-                specified patterns during recursion.  Uses Ruby's builtin globbing
-                engine, so shell metacharacters are fully supported, e.g. ``[a-z]*``.
-                Matches that would descend into the directory structure are ignored,
-                e.g., ``*/*``."
-       
-            defaultto false
-
-            validate do |value|
-                unless value.is_a?(Array) or value.is_a?(String) or value == false
-                    self.devfail "Ignore must be a string or an Array"
-                end
-            end
-        end
-
-        newparam(:links) do
-            desc "How to handle links during file actions.  During file copying,
-                ``follow`` will copy the target file instead of the link, ``manage``
-                will copy the link itself, and ``ignore`` will just pass it by.
-                When not copying, ``manage`` and ``ignore`` behave equivalently
-                (because you cannot really ignore links entirely during local
-                recursion), and ``follow`` will manage the file to which the
-                link points."
-
-            newvalues(:follow, :manage)
-
-            defaultto :manage
-        end
-
-        newparam(:purge, :boolean => true) do
-            desc "Whether unmanaged files should be purged.  If you have a filebucket
-                configured the purged files will be uploaded, but if you do not,
-                this will destroy data.  Only use this option for generated
-                files unless you really know what you are doing.  This option only
-                makes sense when recursively managing directories.
-                
-                Note that when using ``purge`` with ``source``, Puppet will purge any files
-                that are not on the remote system."
-
-            defaultto :false
-
-            newvalues(:true, :false)
-        end
-
-        newparam(:sourceselect) do
-            desc "Whether to copy all valid sources, or just the first one.  This parameter
-                is only used in recursive copies; by default, the first valid source is the
-                only one used as a recursive source, but if this parameter is set to ``all``,
-                then all valid sources will have all of their contents copied to the local host,
-                and for sources that have the same file, the source earlier in the list will
-                be used."
-
-            defaultto :first
-
-            newvalues(:first, :all)
-        end
-        
-        attr_accessor :bucket
-
-        # Autorequire any parent directories.
-        autorequire(:file) do
-            if self[:path]
-                File.dirname(self[:path])
-            else
-                Puppet.err "no path for %s, somehow; cannot setup autorequires" % self.ref
-                nil
-            end
-        end
-
-        # Autorequire the owner and group of the file.
-        {:user => :owner, :group => :group}.each do |type, property|
-            autorequire(type) do
-                if @parameters.include?(property)
-                    # The user/group property automatically converts to IDs
-                    next unless should = @parameters[property].shouldorig
-                    val = should[0]
-                    if val.is_a?(Integer) or val =~ /^\d+$/
-                        nil
-                    else
-                        val
-                    end
-                end
-            end
-        end
-        
-        CREATORS = [:content, :source, :target]
-
-        validate do
-            count = 0
-            CREATORS.each do |param|
-                count += 1 if self.should(param)
-            end
-            if count > 1
-                self.fail "You cannot specify more than one of %s" % CREATORS.collect { |p| p.to_s}.join(", ")
-            end
-        end
-        
-        def self.[](path)
-            return nil unless path
-            super(path.gsub(/\/+/, '/').sub(/\/$/, ''))
-        end
-
-        # List files, but only one level deep.
-        def self.instances(base = "/")
-            unless FileTest.directory?(base)
-                return []
-            end
-
-            files = []
-            Dir.entries(base).reject { |e|
-                e == "." or e == ".."
-            }.each do |name|
-                path = File.join(base, name)
-                if obj = self[path]
-                    obj[:check] = :all
-                    files << obj
-                else
-                    files << self.create(
-                        :name => path, :check => :all
-                    )
-                end
-            end
-            files
-        end
-
-        @depthfirst = false
-
-
-        def argument?(arg)
-            @arghash.include?(arg)
-        end
-
-        # Determine the user to write files as.
-        def asuser
-            if self.should(:owner) and ! self.should(:owner).is_a?(Symbol)
-                writeable = Puppet::Util::SUIDManager.asuser(self.should(:owner)) {
-                    FileTest.writable?(File.dirname(self[:path]))
-                }
-
-                # If the parent directory is writeable, then we execute
-                # as the user in question.  Otherwise we'll rely on
-                # the 'owner' property to do things.
-                if writeable
-                    asuser = self.should(:owner)
-                end
-            end
-
-            return asuser
-        end
-
-        # We have to do some extra finishing, to retrieve our bucket if
-        # there is one.
-        def finish
-            # Let's cache these values, since there should really only be
-            # a couple of these buckets
-            @@filebuckets ||= {}
-
-            # Look up our bucket, if there is one
-            if bucket = self.bucket
-                case bucket
-                when String:
-                    if obj = @@filebuckets[bucket]
-                        # This sets the @value on :backup, too
-                        self.bucket = obj
-                    elsif bucket == "puppet"
-                        obj = Puppet::Network::Client.client(:Dipper).new(
-                            :Path => Puppet[:clientbucketdir]
-                        )
-                        self.bucket = obj
-                        @@filebuckets[bucket] = obj
-                    elsif obj = Puppet::Type.type(:filebucket).bucket(bucket)
-                        @@filebuckets[bucket] = obj
-                        self.bucket = obj
-                    else
-                        self.fail "Could not find filebucket %s" % bucket
-                    end
-                when Puppet::Network::Client.client(:Dipper): # things are hunky-dorey
-                else
-                    self.fail "Invalid bucket type %s" % bucket.class
-                end
-            end
-            super
-        end
-        
-        # Create any children via recursion or whatever.
-        def eval_generate
-            recurse()
-        end
-
-        # Deal with backups.
-        def handlebackup(file = nil)
-            # let the path be specified
-            file ||= self[:path]
-            # if they specifically don't want a backup, then just say
-            # we're good
-            unless FileTest.exists?(file)
-                return true
-            end
-
-            unless self[:backup]
-                return true
-            end
-
-            case File.stat(file).ftype
-            when "directory":
-                if self[:recurse]
-                    # we don't need to backup directories when recurse is on
-                    return true
-                else
-                    backup = self.bucket || self[:backup]
-                    case backup
-                    when Puppet::Network::Client.client(:Dipper):
-                        notice "Recursively backing up to filebucket"
-                        require 'find'
-                        Find.find(self[:path]) do |f|
-                            if File.file?(f)
-                                sum = backup.backup(f)
-                                self.notice "Filebucketed %s to %s with sum %s" %
-                                    [f, backup.name, sum]
-                            end
-                        end
-
-                        return true
-                    when String:
-                        newfile = file + backup
-                        # Just move it, since it's a directory.
-                        if FileTest.exists?(newfile)
-                            remove_backup(newfile)
-                        end
-                        begin
-                            bfile = file + backup
-
-                            # Ruby 1.8.1 requires the 'preserve' addition, but
-                            # later versions do not appear to require it.
-                            FileUtils.cp_r(file, bfile, :preserve => true)
-                            return true
-                        rescue => detail
-                            # since they said they want a backup, let's error out
-                            # if we couldn't make one
-                            self.fail "Could not back %s up: %s" %
-                                [file, detail.message]
-                        end
-                    else
-                        self.err "Invalid backup type %s" % backup.inspect
-                        return false
-                    end
-                end
-            when "file":
-                backup = self.bucket || self[:backup]
-                case backup
-                when Puppet::Network::Client.client(:Dipper):
-                    sum = backup.backup(file)
-                    self.notice "Filebucketed to %s with sum %s" %
-                        [backup.name, sum]
-                    return true
-                when String:
-                    newfile = file + backup
-                    if FileTest.exists?(newfile)
-                        remove_backup(newfile)
-                    end
-                    begin
-                        # FIXME Shouldn't this just use a Puppet object with
-                        # 'source' specified?
-                        bfile = file + backup
-
-                        # Ruby 1.8.1 requires the 'preserve' addition, but
-                        # later versions do not appear to require it.
-                        FileUtils.cp(file, bfile, :preserve => true)
-                        return true
-                    rescue => detail
-                        # since they said they want a backup, let's error out
-                        # if we couldn't make one
-                        self.fail "Could not back %s up: %s" %
-                            [file, detail.message]
-                    end
-                else
-                    self.err "Invalid backup type %s" % backup.inspect
-                    return false
-                end
-            when "link": return true
-            else
-                self.notice "Cannot backup files of type %s" %
-                    File.stat(file).ftype
-                return false
-            end
-        end
-        
-        def handleignore(children)
-            return children unless self[:ignore]
-            self[:ignore].each { |ignore|
-                ignored = []
-                Dir.glob(File.join(self[:path],ignore), File::FNM_DOTMATCH) {
-                    |match| ignored.push(File.basename(match))
-                }
-                children = children - ignored
-            }
-            return children
-        end
-          
-        def initialize(hash)
-            # Store a copy of the arguments for later.
-            tmphash = hash.to_hash
-
-            # Used for caching clients
-            @clients = {}
-
-            super
-
-            # Get rid of any duplicate slashes, and remove any trailing slashes.
-            @title = @title.gsub(/\/+/, "/")
-            
-            @title.sub!(/\/$/, "") unless @title == "/"
-
-            # Clean out as many references to any file paths as possible.
-            # This was the source of many, many bugs.
-            @arghash = tmphash
-            @arghash.delete(self.class.namevar)
-
-            [:source, :parent].each do |param|
-                if @arghash.include?(param)
-                    @arghash.delete(param)
-                end
-            end
-
-            @stat = nil
-        end
-
-        # Build a recursive map of a link source
-        def linkrecurse(recurse)
-            target = @parameters[:target].should
-
-            method = :lstat
-            if self[:links] == :follow
-                method = :stat
-            end
-
-            targetstat = nil
-            unless FileTest.exist?(target)
-                return
-            end
-            # Now stat our target
-            targetstat = File.send(method, target)
-            unless targetstat.ftype == "directory"
-                return
-            end
-
-            # Now that we know our corresponding target is a directory,
-            # change our type
-            self[:ensure] = :directory
-
-            unless FileTest.readable? target
-                self.notice "Cannot manage %s: permission denied" % self.name
-                return
-            end
-
-            children = Dir.entries(target).reject { |d| d =~ /^\.+$/ }
-         
-            # Get rid of ignored children
-            if @parameters.include?(:ignore)
-                children = handleignore(children)
-            end
-
-            added = []
-            children.each do |file|
-                Dir.chdir(target) do
-                    longname = File.join(target, file)
-
-                    # Files know to create directories when recursion
-                    # is enabled and we're making links
-                    args = {
-                        :recurse => recurse,
-                        :ensure => longname
-                    }
-
-                    if child = self.newchild(file, true, args)
-                        added << child
-                    end
-                end
-            end
-            
-            added
-        end
-
-        # Build up a recursive map of what's around right now
-        def localrecurse(recurse)
-            unless FileTest.exist?(self[:path]) and self.stat.directory?
-                #self.info "%s is not a directory; not recursing" %
-                #    self[:path]
-                return
-            end
-
-            unless FileTest.readable? self[:path]
-                self.notice "Cannot manage %s: permission denied" % self.name
-                return
-            end
-
-            children = Dir.entries(self[:path])
-         
-            #Get rid of ignored children
-            if @parameters.include?(:ignore)
-                children = handleignore(children)
-            end
-
-            added = []
-            children.each { |file|
-                file = File.basename(file)
-                next if file =~ /^\.\.?$/ # skip . and .. 
-                options = {:recurse => recurse}
-
-                if child = self.newchild(file, true, options)
-                    added << child
-                end
-            }
-            
-            added
-        end
-        
-        # Create a new file or directory object as a child to the current
-        # object.
-        def newchild(path, local, hash = {})
-            raise(Puppet::DevError, "File recursion cannot happen without a catalog") unless catalog
-
-            # make local copy of arguments
-            args = symbolize_options(@arghash)
-
-            # There's probably a better way to do this, but we don't want
-            # to pass this info on.
-            if v = args[:ensure]
-                v = symbolize(v)
-                args.delete(:ensure)
-            end
-
-            if path =~ %r{^#{File::SEPARATOR}}
-                self.devfail(
-                    "Must pass relative paths to PFile#newchild()"
-                )
-            else
-                path = File.join(self[:path], path)
-            end
-
-            args[:path] = path
-
-            unless hash.include?(:recurse)
-                if args.include?(:recurse)
-                    if args[:recurse].is_a?(Integer)
-                        args[:recurse] -= 1 # reduce the level of recursion
-                    end
-                end
-
-            end
-
-            hash.each { |key,value|
-                args[key] = value
-            }
-
-            child = nil
-
-            # The child might already exist because 'localrecurse' runs
-            # before 'sourcerecurse'.  I could push the override stuff into
-            # a separate method or something, but the work is the same other
-            # than this last bit, so it doesn't really make sense.
-            if child = catalog.resource(:file, path)
-                unless child.parent.object_id == self.object_id
-                    self.debug "Not managing more explicit file %s" %
-                        path
-                    return nil
-                end
-
-                # This is only necessary for sourcerecurse, because we might have
-                # created the object with different 'should' values than are
-                # set remotely.
-                unless local
-                    args.each { |var,value|
-                        next if var == :path
-                        next if var == :name
-
-                        # behave idempotently
-                        unless child.should(var) == value
-                            child[var] = value
-                        end
-                    }
-                end
-                return nil
-            else # create it anew
-                #notice "Creating new file with args %s" % args.inspect
-                args[:parent] = self
-                begin
-                    # This method is used by subclasses of :file, so use the class name rather than hard-coding
-                    # :file.
-                    return nil unless child = catalog.create_implicit_resource(self.class.name, args)
-                rescue => detail
-                    self.notice "Cannot manage: %s" % [detail]
-                    return nil
-                end
-            end
-
-            # LAK:FIXME This shouldn't be necessary, but as long as we're
-            # modeling the relationship graph specifically, it is.
-            catalog.relationship_graph.add_edge self, child
-
-            return child
-        end
-
-        # Files handle paths specially, because they just lengthen their
-        # path names, rather than including the full parent's title each
-        # time.
-        def pathbuilder
-            # We specifically need to call the method here, so it looks
-            # up our parent in the catalog graph.
-            if parent = parent()
-                # We only need to behave specially when our parent is also
-                # a file
-                if parent.is_a?(self.class)
-                    # Remove the parent file name
-                    list = parent.pathbuilder
-                    list.pop # remove the parent's path info
-                    return list << self.ref
-                else
-                    return super
-                end
-            else
-                return [self.ref]
-            end
-        end
-        
-        # Should we be purging?
-        def purge?
-            @parameters.include?(:purge) and (self[:purge] == :true or self[:purge] == "true")
-        end
-
-        # Recurse into the directory.  This basically just calls 'localrecurse'
-        # and maybe 'sourcerecurse', returning the collection of generated
-        # files.
-        def recurse
-            # are we at the end of the recursion?
-            return unless self.recurse?
-
-            recurse = self[:recurse]
-            # we might have a string, rather than a number
-            if recurse.is_a?(String)
-                if recurse =~ /^[0-9]+$/
-                    recurse = Integer(recurse)
-                else # anything else is infinite recursion
-                    recurse = true
-                end
-            end
-
-            if recurse.is_a?(Integer)
-                recurse -= 1
-            end
-            
-            children = []
-            
-            # We want to do link-recursing before normal recursion so that all
-            # of the target stuff gets copied over correctly.
-            if @parameters.include? :target and ret = self.linkrecurse(recurse)
-                children += ret
-            end
-            if ret = self.localrecurse(recurse)
-                children += ret
-            end
-
-            # These will be files pulled in by the file source
-            sourced = false
-            if @parameters.include?(:source)
-                ret, sourced = self.sourcerecurse(recurse)
-                if ret
-                    children += ret
-                end
-            end
-
-            # The purge check needs to happen after all of the other recursion.
-            if self.purge?
-                children.each do |child|
-                    if (sourced and ! sourced.include?(child[:path])) or ! child.managed?
-                        child[:ensure] = :absent
-                    end
-                end
-            end
-            
-            children
-        end
-
-        # A simple method for determining whether we should be recursing.
-        def recurse?
-            return false unless @parameters.include?(:recurse)
-
-            val = @parameters[:recurse].value
-
-            if val and (val == true or val > 0)
-                return true
-            else
-                return false
-            end
-        end
-
-        # Remove the old backup.
-        def remove_backup(newfile)
-            if self.class.name == :file and self[:links] != :follow
-                method = :lstat
-            else
-                method = :stat
-            end
-            old = File.send(method, newfile).ftype
-
-            if old == "directory"
-                raise Puppet::Error,
-                    "Will not remove directory backup %s; use a filebucket" %
-                    newfile
-            end
-
-            info "Removing old backup of type %s" %
-                File.send(method, newfile).ftype
-
-            begin
-                File.unlink(newfile)
-            rescue => detail
-                puts detail.backtrace if Puppet[:trace]
-                self.err "Could not remove old backup: %s" % detail
-                return false
-            end
-        end
-
-        # Remove any existing data.  This is only used when dealing with
-        # links or directories.
-        def remove_existing(should)
-            return unless s = stat(true)
-
-            self.fail "Could not back up; will not replace" unless handlebackup
-
-            unless should.to_s == "link"
-                return if s.ftype.to_s == should.to_s 
-            end
-
-            case s.ftype
-            when "directory":
-                if self[:force] == :true
-                    debug "Removing existing directory for replacement with %s" % should
-                    FileUtils.rmtree(self[:path])
-                else
-                    notice "Not removing directory; use 'force' to override"
-                end
-            when "link", "file":
-                debug "Removing existing %s for replacement with %s" %
-                    [s.ftype, should]
-                File.unlink(self[:path])
-            else
-                self.fail "Could not back up files of type %s" % s.ftype
-            end
-        end
-
-        # a wrapper method to make sure the file exists before doing anything
-        def retrieve
-            unless stat = self.stat(true)
-                self.debug "File does not exist"
-                # If the file doesn't exist but we have a source, then call
-                # retrieve on that property
-
-                propertyvalues = properties().inject({}) { |hash, property|
-                                     hash[property] = :absent
-                                     hash
-                                  }
-
-                if @parameters.include?(:source)
-                    propertyvalues[:source] = @parameters[:source].retrieve
-                end
-                return propertyvalues
-            end
-
-            return currentpropvalues()
-        end
-
-        # This recurses against the remote source and makes sure the local
-        # and remote structures match.  It's run after 'localrecurse'.  This
-        # method only does anything when its corresponding remote entry is
-        # a directory; in that case, this method creates file objects that
-        # correspond to any contained remote files.
-        def sourcerecurse(recurse)
-            # we'll set this manually as necessary
-            if @arghash.include?(:ensure)
-                @arghash.delete(:ensure)
-            end
-            
-            r = false
-            if recurse
-                unless recurse == 0
-                    r = 1
-                end
-            end
-            
-            ignore = self[:ignore]
-
-            result = []
-            found = []
-
-            # Keep track of all the files we found in the source, so we can purge
-            # appropriately.
-            sourced = []
-
-            success = false
-            
-            @parameters[:source].should.each do |source|
-                sourceobj, path = uri2obj(source)
-
-                # okay, we've got our source object; now we need to
-                # build up a local file structure to match the remote
-                # one
-
-                server = sourceobj.server
-
-                desc = server.list(path, self[:links], r, ignore)
-                if desc == "" 
-                    next
-                end
-
-                success = true
-            
-                # Now create a new child for every file returned in the list.
-                result += desc.split("\n").collect { |line|
-                    file, type = line.split("\t")
-                    next if file == "/" # skip the listing object
-                    name = file.sub(/^\//, '')
-
-                    # This makes sure that the first source *always* wins
-                    # for conflicting files.
-                    next if found.include?(name)
-
-                    # For directories, keep all of the sources, so that
-                    # sourceselect still works as planned.
-                    if type == "directory"
-                        newsource = @parameters[:source].should.collect do |tmpsource|
-                            tmpsource + file
-                        end
-                    else
-                        newsource = source + file
-                    end
-                    args = {:source => newsource}
-                    if type == file
-                        args[:recurse] = nil
-                    end
-
-                    found << name
-                    sourced << File.join(self[:path], name)
-
-                    self.newchild(name, false, args)
-                }.reject {|c| c.nil? }
-
-                if self[:sourceselect] == :first
-                    return [result, sourced]
-                end
-            end
-
-            unless success
-                raise Puppet::Error, "None of the provided sources exist"
-            end
-
-            return [result, sourced]
-        end
-
-        # Set the checksum, from another property.  There are multiple
-        # properties that modify the contents of a file, and they need the
-        # ability to make sure that the checksum value is in sync.
-        def setchecksum(sum = nil)
-            if @parameters.include? :checksum
-                if sum
-                    @parameters[:checksum].checksum = sum
-                else
-                    # If they didn't pass in a sum, then tell checksum to
-                    # figure it out.
-                    currentvalue = @parameters[:checksum].retrieve
-                    @parameters[:checksum].checksum = currentvalue
-                end
-            end
-        end
-
-        # Stat our file.  Depending on the value of the 'links' attribute, we
-        # use either 'stat' or 'lstat', and we expect the properties to use the
-        # resulting stat object accordingly (mostly by testing the 'ftype'
-        # value).
-        def stat(refresh = false)
-            method = :stat
-
-            # Files are the only types that support links
-            if (self.class.name == :file and self[:links] != :follow) or self.class.name == :tidy
-                method = :lstat
-            end
-            path = self[:path]
-            # Just skip them when they don't exist at all.
-            unless FileTest.exists?(path) or FileTest.symlink?(path)
-                @stat = nil
-                return @stat
-            end
-            if @stat.nil? or refresh == true
-                begin
-                    @stat = File.send(method, self[:path])
-                rescue Errno::ENOENT => error
-                    @stat = nil
-                rescue Errno::EACCES => error
-                    self.warning "Could not stat; permission denied"
-                    @stat = nil
-                end
-            end
-
-            return @stat
-        end
-
-        # We have to hack this just a little bit, because otherwise we'll get
-        # an error when the target and the contents are created as properties on
-        # the far side.
-        def to_trans(retrieve = true)
-            obj = super
-            if obj[:target] == :notlink
-                obj.delete(:target)
-            end
-            obj
-        end
-
-        def localfileserver
-            unless defined? @@localfileserver
-                args = {
-                    :Local => true,
-                    :Mount => { "/" => "localhost" },
-                    :Config => false
-                }
-                @@localfileserver = Puppet::Network::Handler.handler(:fileserver).new(args)
-            end
-            @@localfileserver
-        end
-
-        def uri2obj(source)
-            sourceobj = Puppet::Type::File::FileSource.new
-            path = nil
-            unless source
-                devfail "Got a nil source"
-            end
-            if source =~ /^\//
-                source = "file://localhost/%s" % URI.escape(source)
-                sourceobj.mount = "localhost"
-                sourceobj.local = true
-            end
-            begin
-                uri = URI.parse(URI.escape(source))
-            rescue => detail
-                self.fail "Could not understand source %s: %s" %
-                    [source, detail.to_s]
-            end
-
-            case uri.scheme
-            when "file":
-                sourceobj.server = localfileserver
-                path = "/localhost" + uri.path
-            when "puppet":
-                # FIXME: We should cache clients by uri.host + uri.port
-                # not by the full source path
-                unless @clients.include?(source)
-                    host = uri.host
-                    host ||= Puppet[:server] unless Puppet[:name] == "puppet"
-                    if host.nil?
-                        server = localfileserver
-                    else
-                        args = { :Server => host }
-                        if uri.port
-                            args[:Port] = uri.port
-                        end
-                        server = Puppet::Network::Client.file.new(args)
-                    end
-                    @clients[source] = server
-                end
-                sourceobj.server = @clients[source]
-
-                tmp = uri.path
-                if tmp =~ %r{^/(\w+)}
-                    sourceobj.mount = $1
-                    path = tmp
-                    #path = tmp.sub(%r{^/\w+},'') || "/"
-                else
-                    self.fail "Invalid source path %s" % tmp
-                end
-            else
-                self.fail "Got other URL type '%s' from %s" %
-                        [uri.scheme, source]
-            end
-
-            return [sourceobj, path.sub(/\/\//, '/')]
-        end
-
-        # Write out the file.  Requires the content to be written,
-        # the property name for logging, and the checksum for validation.
-        def write(content, property, checksum = nil)
-            if validate = validate_checksum?
-                # Use the appropriate checksum type -- md5, md5lite, etc.
-                sumtype = property(:checksum).checktype
-                checksum ||= "{#{sumtype}}" + property(:checksum).send(sumtype, content)
-            end
-
-            remove_existing(:file)
-
-            use_temporary_file = (content.length != 0)
-            path = self[:path]
-            path += ".puppettmp" if use_temporary_file
-
-            mode = self.should(:mode) # might be nil
-            umask = mode ? 000 : 022
-
-            Puppet::Util.withumask(umask) do
-                File.open(path, File::CREAT|File::WRONLY|File::TRUNC, mode) { |f| f.print content }
-            end
-
-            # And put our new file in place
-            if use_temporary_file # This is only not true when our file is empty.
-                begin
-                    fail_if_checksum_is_wrong(path, checksum) if validate
-                    File.rename(path, self[:path])
-                rescue => detail
-                    self.err "Could not rename tmp %s for replacing: %s" % [self[:path], detail]
-                ensure
-                    # Make sure the created file gets removed
-                    File.unlink(path) if FileTest.exists?(path)
-                end
-            end
-
-            # make sure all of the modes are actually correct
-            property_fix
-
-            # And then update our checksum, so the next run doesn't find it.
-            self.setchecksum(checksum)
-        end
-
-        # Should we validate the checksum of the file we're writing?
-        def validate_checksum?
-            if sumparam = @parameters[:checksum]
-                return sumparam.checktype.to_s !~ /time/
-            else
-                return false
-            end
-        end
-
-        private
-
-        # Make sure the file we wrote out is what we think it is.
-        def fail_if_checksum_is_wrong(path, checksum)
-            if checksum =~ /^\{(\w+)\}.+/
-                sumtype = $1
-            else
-                # This shouldn't happen, but if it happens to, it's nicer
-                # to just use a default sumtype than fail.
-                sumtype = "md5"
-            end
-            newsum = property(:checksum).getsum(sumtype, path)
-            return if newsum == checksum
-
-            self.fail "File written to disk did not match checksum; discarding changes (%s vs %s)" % [checksum, newsum]
-        end
-
-        # Override the parent method, because we don't want to generate changes
-        # when the file is missing and there is no 'ensure' state.
-        def propertychanges(currentvalues)
-            unless self.stat
-                found = false
-                ([:ensure] + CREATORS).each do |prop|
-                    if @parameters.include?(prop)
-                        found = true
-                        break
-                    end
-                end
-                unless found
-                    return []
-                end
-            end
-            super
-        end
-
-        # There are some cases where all of the work does not get done on
-        # file creation/modification, so we have to do some extra checking.
-        def property_fix
-            properties.each do |thing|
-                next unless [:mode, :owner, :group].include?(thing.name)
-
-                # Make sure we get a new stat objct
-                self.stat(true)
-                currentvalue = thing.retrieve
-                unless thing.insync?(currentvalue)
-                    thing.sync
-                end
-            end
-        end
-    end # Puppet.type(:pfile)
-
-    # the filesource class can't include the path, because the path
-    # changes for every file instance
-    class ::Puppet::Type::File::FileSource
-        attr_accessor :mount, :root, :server, :local
-    end
-
-    # We put all of the properties in separate files, because there are so many
-    # of them.  The order these are loaded is important, because it determines
-    # the order they are in the property lit.
-    require 'puppet/type/file/checksum'
-    require 'puppet/type/file/content'     # can create the file
-    require 'puppet/type/file/source'      # can create the file
-    require 'puppet/type/file/target'      # creates a different type of file
-    require 'puppet/type/file/ensure'      # can create the file
-    require 'puppet/type/file/owner'
-    require 'puppet/type/file/group'
-    require 'puppet/type/file/mode'
-    require 'puppet/type/file/type'
-    require 'puppet/type/file/selcontext'  # SELinux file context
-end
diff --git a/lib/puppet/type/file/checksum.rb b/lib/puppet/type/file/checksum.rb
deleted file mode 100755
index 785ed0f..0000000
--- a/lib/puppet/type/file/checksum.rb
+++ /dev/null
@@ -1,278 +0,0 @@
-require 'puppet/util/checksums'
-
-# Keep a copy of the file checksums, and notify when they change.  This
-# property never actually modifies the system, it only notices when the system
-# changes on its own.
-Puppet::Type.type(:file).newproperty(:checksum) do
-    include Puppet::Util::Checksums
-
-    desc "How to check whether a file has changed.  This state is used internally
-        for file copying, but it can also be used to monitor files somewhat
-        like Tripwire without managing the file contents in any way.  You can
-        specify that a file's checksum should be monitored and then subscribe to
-        the file from another object and receive events to signify
-        checksum changes, for instance."
-
-    @event = :file_changed
-
-    @unmanaged = true
-
-    @validtypes = %w{md5 md5lite timestamp mtime time}
-
-    def self.validtype?(type)
-        @validtypes.include?(type)
-    end
-
-    @validtypes.each do |ctype|
-        newvalue(ctype) do
-            handlesum()
-        end
-    end
-
-    str = @validtypes.join("|")
-
-    # This is here because Puppet sets this internally, using
-    # {md5}......
-    newvalue(/^\{#{str}\}/) do
-        handlesum()
-    end
-
-    newvalue(:nosum) do
-        # nothing
-        :nochange
-    end
-
-    # If they pass us a sum type, behave normally, but if they pass
-    # us a sum type + sum, stick the sum in the cache.
-    munge do |value|
-        if value =~ /^\{(\w+)\}(.+)$/
-            type = symbolize($1)
-            sum = $2
-            cache(type, sum)
-            return type
-        else
-            if FileTest.directory?(@resource[:path])
-                return :time
-            elsif @resource[:source] and value.to_s != "md5"
-                 self.warning("Files with source set must use md5 as checksum. Forcing to md5 from %s for %s" % [ value, @resource[:path] ])
-                return :md5
-            else
-                return symbolize(value)
-            end
-        end
-    end
-
-    # Store the checksum in the data cache, or retrieve it if only the
-    # sum type is provided.
-    def cache(type, sum = nil)
-        unless type
-            raise ArgumentError, "A type must be specified to cache a checksum"
-        end
-        type = symbolize(type)
-        type = :mtime if type == :timestamp
-        type = :ctime if type == :time
-
-        unless state = @resource.cached(:checksums) 
-            self.debug "Initializing checksum hash"
-            state = {}
-            @resource.cache(:checksums, state)
-        end
-
-        if sum
-            unless sum =~ /\{\w+\}/
-                sum = "{%s}%s" % [type, sum]
-            end
-            state[type] = sum
-        else
-            return state[type]
-        end
-    end
-
-    # Because source and content and whomever else need to set the checksum
-    # and do the updating, we provide a simple mechanism for doing so.
-    def checksum=(value)
-        munge(@should)
-        self.updatesum(value)
-    end
-
-    def checktype
-        self.should || :md5
-    end
-
-    # Checksums need to invert how changes are printed.
-    def change_to_s(currentvalue, newvalue)
-        begin
-            if currentvalue == :absent
-                return "defined '%s' as '%s'" %
-                    [self.name, self.currentsum]
-            elsif newvalue == :absent
-                return "undefined %s from '%s'" %
-                    [self.name, self.is_to_s(currentvalue)]
-            else
-                if defined? @cached and @cached
-                    return "%s changed '%s' to '%s'" %
-                        [self.name, @cached, self.is_to_s(currentvalue)]
-                else
-                    return "%s changed '%s' to '%s'" %
-                        [self.name, self.currentsum, self.is_to_s(currentvalue)]
-                end
-            end
-        rescue Puppet::Error, Puppet::DevError
-            raise
-        rescue => detail
-            raise Puppet::DevError, "Could not convert change %s to string: %s" %
-                [self.name, detail]
-        end
-    end
-
-    def currentsum
-        cache(checktype())
-    end
-
-    # Retrieve the cached sum
-    def getcachedsum
-        hash = nil
-        unless hash = @resource.cached(:checksums) 
-            hash = {}
-            @resource.cache(:checksums, hash)
-        end
-
-        sumtype = self.should
-
-        if hash.include?(sumtype)
-            #self.notice "Found checksum %s for %s" %
-            #    [hash[sumtype] , at resource[:path]]
-            sum = hash[sumtype]
-
-            unless sum =~ /^\{\w+\}/
-                sum = "{%s}%s" % [sumtype, sum]
-            end
-            return sum
-        elsif hash.empty?
-            #self.notice "Could not find sum of type %s" % sumtype
-            return :nosum
-        else
-            #self.notice "Found checksum for %s but not of type %s" %
-            #    [@resource[:path],sumtype]
-            return :nosum
-        end
-    end
-
-    # Calculate the sum from disk.
-    def getsum(checktype, file = nil)
-        sum = ""
-
-        checktype = :mtime if checktype == :timestamp
-        checktype = :ctime if checktype == :time
-        self.should = checktype = :md5 if @resource.property(:source)
-
-        file ||= @resource[:path]
-
-        return nil unless FileTest.exist?(file)
-
-        if ! FileTest.file?(file)
-            checktype = :mtime
-        end
-        method = checktype.to_s + "_file"
-
-        self.fail("Invalid checksum type %s" % checktype) unless respond_to?(method)
-
-        return "{%s}%s" % [checktype, send(method, file)]
-    end
-
-    # At this point, we don't actually modify the system, we modify
-    # the stored state to reflect the current state, and then kick
-    # off an event to mark any changes.
-    def handlesum
-        currentvalue = self.retrieve
-        if currentvalue.nil?
-            raise Puppet::Error, "Checksum state for %s is somehow nil" %
-                @resource.title
-        end
-
-        if self.insync?(currentvalue)
-            self.debug "Checksum is already in sync"
-            return nil
-        end
-        # If we still can't retrieve a checksum, it means that
-        # the file still doesn't exist
-        if currentvalue == :absent
-            # if they're copying, then we won't worry about the file
-            # not existing yet
-            unless @resource.property(:source)
-                self.warning("File %s does not exist -- cannot checksum" % @resource[:path])
-            end
-            return nil
-        end
-        
-        # If the sums are different, then return an event.
-        if self.updatesum(currentvalue)
-            return :file_changed
-        else
-            return nil
-        end
-    end
-
-    def insync?(currentvalue)
-        @should = [checktype()]
-        if cache(checktype())
-            return currentvalue == currentsum()
-        else
-            # If there's no cached sum, then we don't want to generate
-            # an event.
-            return true
-        end
-    end
-    
-    # Even though they can specify multiple checksums, the insync?
-    # mechanism can really only test against one, so we'll just retrieve
-    # the first specified sum type.
-    def retrieve(usecache = false)
-        # When the 'source' is retrieving, it passes "true" here so
-        # that we aren't reading the file twice in quick succession, yo.
-        currentvalue = currentsum()
-        return currentvalue if usecache and currentvalue
-
-        stat = nil
-        return :absent unless stat = @resource.stat
-
-        if stat.ftype == "link" and @resource[:links] != :follow
-            self.debug "Not checksumming symlink"
-            # @resource.delete(:checksum)
-            return currentvalue
-        end
-
-        # Just use the first allowed check type
-        currentvalue = getsum(checktype())
-
-        # If there is no sum defined, then store the current value
-        # into the cache, so that we're not marked as being
-        # out of sync.  We don't want to generate an event the first
-        # time we get a sum.
-        self.updatesum(currentvalue) unless cache(checktype())
-        
-        # @resource.debug "checksum state is %s" % self.is
-        return currentvalue
-    end
-
-    # Store the new sum to the state db.
-    def updatesum(newvalue)
-        result = false
-
-        # if we're replacing, vs. updating
-        if sum = cache(checktype())
-            return false if newvalue == sum
-
-            self.debug "Replacing %s checksum %s with %s" % [@resource.title, sum, newvalue]
-            result = true
-        else
-            @resource.debug "Creating checksum %s" % newvalue
-            result = false
-        end
-
-        # Cache the sum so the log message can be right if possible.
-        @cached = sum
-        cache(checktype(), newvalue)
-        return result
-    end
-end
diff --git a/lib/puppet/type/file/content.rb b/lib/puppet/type/file/content.rb
deleted file mode 100755
index 1eb1423..0000000
--- a/lib/puppet/type/file/content.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-module Puppet
-    Puppet::Type.type(:file).newproperty(:content) do
-        include Puppet::Util::Diff
-
-        desc "Specify the contents of a file as a string.  Newlines, tabs, and
-            spaces can be specified using the escaped syntax (e.g., \\n for a
-            newline).  The primary purpose of this parameter is to provide a
-            kind of limited templating::
-
-                define resolve(nameserver1, nameserver2, domain, search) {
-                    $str = \"search $search
-                domain $domain
-                nameserver $nameserver1
-                nameserver $nameserver2
-                \"
-
-                    file { \"/etc/resolv.conf\":
-                        content => $str
-                    }
-                }
-            
-            This attribute is especially useful when used with
-            `PuppetTemplating templating`:trac:."
-
-        def change_to_s(currentvalue, newvalue)
-            newvalue = "{md5}" + Digest::MD5.hexdigest(newvalue)
-            if currentvalue == :absent
-                return "created file with contents %s" % newvalue
-            else
-                currentvalue = "{md5}" + Digest::MD5.hexdigest(currentvalue)
-                return "changed file contents from %s to %s" % [currentvalue, newvalue]
-            end
-        end
-
-        # Override this method to provide diffs if asked for.
-        # Also, fix #872: when content is used, and replace is true, the file
-        # should be insync when it exists
-        def insync?(is)
-            if ! @resource.replace? and File.exists?(@resource[:path])
-                return true
-            end
-
-            result = super
-            if ! result and Puppet[:show_diff] and File.exists?(@resource[:path])
-                string_file_diff(@resource[:path], self.should)
-            end
-            return result
-        end
-
-        def retrieve
-            return :absent unless stat = @resource.stat
-
-            return self.should if stat.ftype == "link" and @resource[:links] == :ignore
-
-            # Don't even try to manage the content on directories
-            return nil if stat.ftype == "directory"
-
-            begin
-                currentvalue = File.read(@resource[:path])
-                return currentvalue
-            rescue => detail
-                raise Puppet::Error, "Could not read %s: %s" %
-                    [@resource.title, detail]
-            end
-        end
-
-        # Make sure we're also managing the checksum property.
-        def should=(value)
-            super
-            @resource.newattr(:checksum) unless @resource.property(:checksum)
-        end
-
-        # Just write our content out to disk.
-        def sync
-            return_event = @resource.stat ? :file_changed : :file_created
-            
-            @resource.write(self.should, :content)
-
-            return return_event
-        end
-    end
-end
diff --git a/lib/puppet/type/file/ensure.rb b/lib/puppet/type/file/ensure.rb
deleted file mode 100755
index a9ddc2d..0000000
--- a/lib/puppet/type/file/ensure.rb
+++ /dev/null
@@ -1,176 +0,0 @@
-module Puppet
-    Puppet.type(:file).ensurable do
-        require 'etc'
-        desc "Whether to create files that don't currently exist.
-            Possible values are *absent*, *present* (will match any form of
-            file existence, and if the file is missing will create an empty
-            file), *file*, and *directory*.  Specifying ``absent`` will delete
-            the file, although currently this will not recursively delete
-            directories.
-
-            Anything other than those values will be considered to be a symlink.
-            For instance, the following text creates a link::
-                
-                # Useful on solaris
-                file { \"/etc/inetd.conf\":
-                    ensure => \"/etc/inet/inetd.conf\"
-                }
-            
-            You can make relative links::
-                
-                # Useful on solaris
-                file { \"/etc/inetd.conf\":
-                    ensure => \"inet/inetd.conf\"
-                }
-
-            If you need to make a relative link to a file named the same
-            as one of the valid values, you must prefix it with ``./`` or
-            something similar.
-
-            You can also make recursive symlinks, which will create a
-            directory structure that maps to the target directory,
-            with directories corresponding to each directory
-            and links corresponding to each file."
-
-        # Most 'ensure' properties have a default, but with files we, um, don't.
-        nodefault
-
-        newvalue(:absent) do
-            File.unlink(@resource[:path])
-        end
-
-        aliasvalue(:false, :absent)
-
-        newvalue(:file) do
-            # Make sure we're not managing the content some other way
-            if property = (@resource.property(:content) || @resource.property(:source))
-                property.sync
-            else
-                @resource.write("", :ensure)
-                mode = @resource.should(:mode)
-            end
-            return :file_created
-        end
-
-        #aliasvalue(:present, :file)
-        newvalue(:present) do
-            # Make a file if they want something, but this will match almost
-            # anything.
-            set_file
-        end
-
-        newvalue(:directory) do
-            mode = @resource.should(:mode)
-            parent = File.dirname(@resource[:path])
-            unless FileTest.exists? parent
-                raise Puppet::Error,
-                    "Cannot create %s; parent directory %s does not exist" %
-                        [@resource[:path], parent]
-            end
-            if mode
-                Puppet::Util.withumask(000) do
-                    Dir.mkdir(@resource[:path],mode)
-                end
-            else
-                Dir.mkdir(@resource[:path])
-            end
-            @resource.send(:property_fix)
-            @resource.setchecksum
-            return :directory_created
-        end
-
-
-        newvalue(:link) do
-            if property = @resource.property(:target)
-                property.retrieve
-
-                return property.mklink
-            else
-                self.fail "Cannot create a symlink without a target"
-            end
-        end
-
-        # Symlinks.
-        newvalue(/./) do
-            # This code never gets executed.  We need the regex to support
-            # specifying it, but the work is done in the 'symlink' code block.
-        end
-
-        munge do |value|
-            value = super(value)
-
-            # It doesn't make sense to try to manage links unless, well,
-            # we're managing links.
-            resource[:links] = :manage if value == :link
-            return value if value.is_a? Symbol
-
-            @resource[:target] = value
-            resource[:links] = :manage
-
-            return :link
-        end
-
-        def change_to_s(currentvalue, newvalue)
-            if property = (@resource.property(:content) || @resource.property(:source)) and ! property.insync?(currentvalue)
-                currentvalue = property.retrieve
-                
-                return property.change_to_s(property.retrieve, property.should)
-            else
-                super(currentvalue, newvalue)
-            end
-        end
-
-        # Check that we can actually create anything
-        def check
-            basedir = File.dirname(@resource[:path])
-
-            if ! FileTest.exists?(basedir)
-                raise Puppet::Error,
-                    "Can not create %s; parent directory does not exist" %
-                    @resource.title
-            elsif ! FileTest.directory?(basedir)
-                raise Puppet::Error,
-                    "Can not create %s; %s is not a directory" %
-                    [@resource.title, dirname]
-            end
-        end
-
-        # We have to treat :present specially, because it works with any
-        # type of file.
-        def insync?(currentvalue)
-            if self.should == :present
-                if currentvalue.nil? or currentvalue == :absent
-                    return false
-                else
-                    return true
-                end
-            else
-                return super(currentvalue)
-            end
-        end
-
-        def retrieve
-            if stat = @resource.stat(false)
-                return stat.ftype.intern
-            else
-                if self.should == :false
-                    return :false
-                else
-                    return :absent
-                end
-            end
-        end
-
-        def sync
-            @resource.remove_existing(self.should)
-            if self.should == :absent
-                return :file_removed
-            end
-
-            event = super
-
-            return event
-        end
-    end
-end
-
diff --git a/lib/puppet/type/file/group.rb b/lib/puppet/type/file/group.rb
deleted file mode 100755
index 56883ad..0000000
--- a/lib/puppet/type/file/group.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-require 'puppet/util/posix'
-
-# Manage file group ownership.
-module Puppet
-    Puppet.type(:file).newproperty(:group) do
-        include Puppet::Util::POSIX
-
-        require 'etc'
-        desc "Which group should own the file.  Argument can be either group
-            name or group ID."
-        @event = :file_changed
-
-        validate do |group|
-            raise(Puppet::Error, "Invalid group name '%s'" % group.inspect) unless group and group != ""
-        end
-
-        def id2name(id)
-            return id.to_s if id.is_a?(Symbol)
-            return nil if id > Puppet[:maximum_uid].to_i
-            begin
-                group = Etc.getgrgid(id)
-            rescue ArgumentError
-                return nil
-            end
-            if group.gid == ""
-                return nil
-            else
-                return group.name
-            end
-        end
-
-        # We want to print names, not numbers
-        def is_to_s(currentvalue)
-            if currentvalue.is_a? Integer
-                id2name(currentvalue) || currentvalue
-            else
-                return currentvalue.to_s
-            end
-        end
-
-        def should_to_s(newvalue = @should)
-            if newvalue.is_a? Integer
-                id2name(newvalue) || newvalue
-            else
-                return newvalue.to_s
-            end
-        end
-
-        def insync?(current)
-            @should.each do |value|
-                if value =~ /^\d+$/
-                    gid = Integer(value)
-                elsif value.is_a?(String)
-                    fail "Could not find group %s" % value unless gid = gid(value)
-                else
-                    gid = value
-                end
-
-                return true if gid == current
-            end
-            return false
-        end
-
-        def retrieve
-            return :absent unless stat = resource.stat(false)
-
-            currentvalue = stat.gid
-
-            # On OS X, files that are owned by -2 get returned as really
-            # large GIDs instead of negative ones.  This isn't a Ruby bug,
-            # it's an OS X bug, since it shows up in perl, too.
-            if currentvalue > Puppet[:maximum_uid].to_i
-                self.warning "Apparently using negative GID (%s) on a platform that does not consistently handle them" % currentvalue
-                currentvalue = :silly
-            end
-
-            return currentvalue
-        end
-
-        # Determine if the group is valid, and if so, return the GID
-        def validgroup?(value)
-            if number = gid(value)
-                return number
-            else
-                return false
-            end
-        end
-
-        # Normal users will only be able to manage certain groups.  Right now,
-        # we'll just let it fail, but we should probably set things up so
-        # that users get warned if they try to change to an unacceptable group.
-        def sync
-            # Set our method appropriately, depending on links.
-            if resource[:links] == :manage
-                method = :lchown
-            else
-                method = :chown
-            end
-
-            gid = nil
-            @should.each do |group|
-                break if gid = validgroup?(group)
-            end
-
-            raise Puppet::Error, "Could not find group(s) %s" % @should.join(",") unless gid
-
-            begin
-                # set owner to nil so it's ignored
-                File.send(method, nil, gid, resource[:path])
-            rescue => detail
-                error = Puppet::Error.new( "failed to chgrp %s to %s: %s" % [resource[:path], gid, detail.message])
-                raise error
-            end
-            return :file_changed
-        end
-    end
-end
diff --git a/lib/puppet/type/file/mode.rb b/lib/puppet/type/file/mode.rb
deleted file mode 100755
index 8674e0a..0000000
--- a/lib/puppet/type/file/mode.rb
+++ /dev/null
@@ -1,134 +0,0 @@
-# Manage file modes.  This state should support different formats
-# for specification (e.g., u+rwx, or -0011), but for now only supports
-# specifying the full mode.
-module Puppet
-    Puppet.type(:file).newproperty(:mode) do
-        require 'etc'
-        desc "Mode the file should be.  Currently relatively limited:
-            you must specify the exact mode the file should be."
-        @event = :file_changed
-
-        # Our modes are octal, so make sure they print correctly.  Other
-        # valid values are symbols, basically
-        def is_to_s(currentvalue)
-            case currentvalue
-            when Integer
-                return "%o" % currentvalue
-            when Symbol
-                return currentvalue
-            else
-                raise Puppet::DevError, "Invalid current value for mode: %s" %
-                    currentvalue.inspect
-            end
-        end
-
-        def should_to_s(newvalue = @should)
-            case newvalue
-            when Integer
-                return "%o" % newvalue
-            when Symbol
-                return newvalue
-            else
-                raise Puppet::DevError, "Invalid 'should' value for mode: %s" %
-                    newvalue.inspect
-            end
-        end
-
-        munge do |should|
-            # this is pretty hackish, but i need to make sure the number is in
-            # octal, yet the number can only be specified as a string right now
-            value = should
-            if value.is_a?(String)
-                unless value =~ /^\d+$/
-                    raise Puppet::Error, "File modes can only be numbers, not %s" %
-                        value.inspect
-                end
-                # Make sure our number looks like octal.
-                unless value =~ /^0/
-                    value = "0" + value
-                end
-                old = value
-                begin
-                    value = Integer(value)
-                rescue ArgumentError => detail
-                    raise Puppet::DevError, "Could not convert %s to integer" %
-                        old.inspect
-                end
-            end
-
-            return value
-        end
-
-        # If we're a directory, we need to be executable for all cases
-        # that are readable.  This should probably be selectable, but eh.
-        def dirmask(value)
-            if FileTest.directory?(@resource[:path])
-                if value & 0400 != 0
-                    value |= 0100
-                end
-                if value & 040 != 0
-                    value |= 010
-                end
-                if value & 04 != 0
-                    value |= 01
-                end
-            end
-
-            return value
-        end
-
-        def insync?(currentvalue)
-            if stat = @resource.stat and stat.ftype == "link" and @resource[:links] != :follow
-                self.debug "Not managing symlink mode"
-                return true
-            else
-                return super(currentvalue)
-            end
-        end
-
-        def retrieve
-            # If we're not following links and we're a link, then we just turn
-            # off mode management entirely.
-
-            if stat = @resource.stat(false)
-                unless defined? @fixed
-                    if defined? @should and @should
-                        @should = @should.collect { |s| self.dirmask(s) }
-                    end
-                end
-                return stat.mode & 007777
-            else
-                return :absent
-            end
-        end
-
-        def sync
-            unless @resource.stat(false)
-                stat = @resource.stat(true)
-
-                unless stat
-                    self.debug "File does not exist; cannot set mode"
-                    return nil
-                end
-            end
-
-            mode = self.should
-
-            if mode == :absent
-                # This is really only valid for create states...
-                return nil
-            end
-
-            begin
-                File.chmod(mode, @resource[:path])
-            rescue => detail
-                error = Puppet::Error.new("failed to chmod %s: %s" %
-                    [@resource[:path], detail.message])
-                error.set_backtrace detail.backtrace
-                raise error
-            end
-            return :file_changed
-        end
-    end
-end
-
diff --git a/lib/puppet/type/file/owner.rb b/lib/puppet/type/file/owner.rb
deleted file mode 100755
index 6f9bbd6..0000000
--- a/lib/puppet/type/file/owner.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-module Puppet
-    Puppet.type(:file).newproperty(:owner) do
-        require 'etc'
-        desc "To whom the file should belong.  Argument can be user name or
-            user ID."
-        @event = :file_changed
-
-        def id2name(id)
-            return id.to_s if id.is_a?(Symbol)
-            return nil if id > Puppet[:maximum_uid].to_i
-
-            begin
-                user = Etc.getpwuid(id)
-            rescue TypeError
-                return nil
-            rescue ArgumentError
-                return nil
-            end
-
-            if user.uid == ""
-                return nil
-            else
-                return user.name
-            end
-        end
-
-        def name2id(value)
-            if value.is_a?(Symbol)
-                return value.to_s
-            end
-            begin
-                user = Etc.getpwnam(value)
-                if user.uid == ""
-                    return nil
-                end
-                return user.uid
-            rescue ArgumentError => detail
-                return nil
-            end
-        end
-
-        # Determine if the user is valid, and if so, return the UID
-        def validuser?(value)
-            if value =~ /^\d+$/
-                value = value.to_i
-            end
-
-            if value.is_a?(Integer)
-                # verify the user is a valid user
-                if tmp = id2name(value)
-                    return value
-                else
-                    return false
-                end
-            else
-                if tmp = name2id(value)
-                    return tmp
-                else
-                    return false
-                end
-            end
-        end
-
-        # We want to print names, not numbers
-        def is_to_s(currentvalue)
-            id2name(currentvalue) || currentvalue
-        end
-
-        def should_to_s(newvalue = @should)
-            case newvalue
-            when Symbol
-                newvalue.to_s
-            when Integer
-                id2name(newvalue) || newvalue
-            when String
-                newvalue
-            else
-                raise Puppet::DevError, "Invalid uid type %s(%s)" %
-                    [newvalue.class, newvalue]
-            end
-        end
-
-        def retrieve
-            if self.should
-                @should = @should.collect do |val|
-                    unless val.is_a?(Integer)
-                        if tmp = validuser?(val)
-                            val = tmp
-                        else
-                            raise "Could not find user %s" % val
-                        end
-                    else
-                        val
-                    end
-                end
-            end
-            
-            unless stat = @resource.stat(false)
-                return :absent
-            end
-
-            # Set our method appropriately, depending on links.
-            if stat.ftype == "link" and @resource[:links] != :follow
-                @method = :lchown
-            else
-                @method = :chown
-            end
-
-            currentvalue = stat.uid
-            
-            # On OS X, files that are owned by -2 get returned as really
-            # large UIDs instead of negative ones.  This isn't a Ruby bug,
-            # it's an OS X bug, since it shows up in perl, too.
-            if currentvalue > Puppet[:maximum_uid].to_i
-                self.warning "Apparently using negative UID (%s) on a platform that does not consistently handle them" % currentvalue
-                currentvalue = :silly
-            end
-
-            return currentvalue
-        end
-
-        def sync
-            unless Puppet::Util::SUIDManager.uid == 0
-                unless defined? @@notifieduid
-                    self.notice "Cannot manage ownership unless running as root"
-                    #@resource.delete(self.name)
-                    @@notifieduid = true
-                end
-                return nil
-            end
-
-            user = nil
-            unless user = self.validuser?(self.should)
-                tmp = self.should
-                unless defined? @@usermissing
-                    @@usermissing = {}
-                end
-
-                if @@usermissing.include?(tmp)
-                    @@usermissing[tmp] += 1
-                else
-                    self.notice "user %s does not exist" % tmp
-                    @@usermissing[tmp] = 1
-                end
-                return nil
-            end
-
-            unless @resource.stat(false)
-                unless @resource.stat(true)
-                    self.debug "File does not exist; cannot set owner"
-                    return nil
-                end
-                #self.debug "%s: after refresh, is '%s'" % [self.class.name, at is]
-            end
-
-            begin
-                File.send(@method, user, nil, @resource[:path])
-            rescue => detail
-                raise Puppet::Error, "Failed to set owner to '%s': %s" %
-                    [user, detail]
-            end
-
-            return :file_changed
-        end
-    end
-end
-
diff --git a/lib/puppet/type/file/selcontext.rb b/lib/puppet/type/file/selcontext.rb
deleted file mode 100644
index d5111ca..0000000
--- a/lib/puppet/type/file/selcontext.rb
+++ /dev/null
@@ -1,104 +0,0 @@
-# Manage SELinux context of files.
-#
-# This code actually manages three pieces of data in the context.
-#
-# [root at delenn files]# ls -dZ /
-# drwxr-xr-x  root root system_u:object_r:root_t         /
-#
-# The context of '/' here is 'system_u:object_r:root_t'.  This is
-# three seperate fields:
-#
-# system_u is the user context
-# object_r is the role context
-# root_t is the type context
-#
-# All three of these fields are returned in a single string by the
-# output of the stat command, but set individually with the chcon
-# command.  This allows the user to specify a subset of the three
-# values while leaving the others alone.
-#
-# See http://www.nsa.gov/selinux/ for complete docs on SELinux.
-
-module Puppet
-    require 'puppet/util/selinux'
-
-    class SELFileContext < Puppet::Property
-        include Puppet::Util::SELinux
-
-        def retrieve
-            unless @resource.stat(false)
-                return :absent
-            end
-            context = self.get_selinux_current_context(@resource[:path])
-            return parse_selinux_context(name, context)
-        end
-
-        def retrieve_default_context(property)
-            unless context = self.get_selinux_default_context(@resource[:path])
-                return nil
-            end
-            property_default = self.parse_selinux_context(property, context)
-            self.debug "Found #{property} default '#{property_default}' for #{@resource[:path]}"
-            return property_default
-        end
-
-        def sync
-            unless @resource.stat(false)
-                stat = @resource.stat(true)
-                unless stat
-                    return nil
-                end
-            end
-
-            self.set_selinux_context(@resource[:path], @should, name)
-            return :file_changed
-        end
-    end
-
-    Puppet.type(:file).newproperty(:seluser, :parent => Puppet::SELFileContext) do
-        desc "What the SELinux user component of the context of the file should be.
-            Any valid SELinux user component is accepted.  For example ``user_u``.
-            If not specified it defaults to the value returned by matchpathcon for
-            the file, if any exists.  Only valid on systems with SELinux support
-            enabled."
-
-        @event = :file_changed
-        defaultto { self.retrieve_default_context(:seluser) }
-    end
-
-    Puppet.type(:file).newproperty(:selrole, :parent => Puppet::SELFileContext) do
-        desc "What the SELinux role component of the context of the file should be.
-            Any valid SELinux role component is accepted.  For example ``role_r``.
-            If not specified it defaults to the value returned by matchpathcon for
-            the file, if any exists.  Only valid on systems with SELinux support
-            enabled."
-
-        @event = :file_changed
-        defaultto { self.retrieve_default_context(:selrole) }
-    end
-
-    Puppet.type(:file).newproperty(:seltype, :parent => Puppet::SELFileContext) do
-        desc "What the SELinux type component of the context of the file should be.
-            Any valid SELinux type component is accepted.  For example ``tmp_t``.
-            If not specified it defaults to the value returned by matchpathcon for
-            the file, if any exists.  Only valid on systems with SELinux support
-            enabled."
-
-        @event = :file_changed
-        defaultto { self.retrieve_default_context(:seltype) }
-    end
-
-    Puppet.type(:file).newproperty(:selrange, :parent => Puppet::SELFileContext) do
-        desc "What the SELinux range component of the context of the file should be.
-            Any valid SELinux range component is accepted.  For example ``s0`` or
-            ``SystemHigh``.  If not specified it defaults to the value returned by
-            matchpathcon for the file, if any exists.  Only valid on systems with
-            SELinux support enabled and that have support for MCS (Multi-Category
-            Security)."
-
-        @event = :file_changed
-        defaultto { self.retrieve_default_context(:selrange) }
-    end
-
-end
-
diff --git a/lib/puppet/type/file/source.rb b/lib/puppet/type/file/source.rb
deleted file mode 100755
index 2514d3d..0000000
--- a/lib/puppet/type/file/source.rb
+++ /dev/null
@@ -1,276 +0,0 @@
-module Puppet
-    # Copy files from a local or remote source.  This state *only* does any work
-    # when the remote file is an actual file; in that case, this state copies
-    # the file down.  If the remote file is a dir or a link or whatever, then
-    # this state, during retrieval, modifies the appropriate other states
-    # so that things get taken care of appropriately.
-    Puppet.type(:file).newproperty(:source) do
-        include Puppet::Util::Diff
-
-        attr_accessor :source, :local
-        desc "Copy a file over the current file.  Uses ``checksum`` to
-            determine when a file should be copied.  Valid values are either
-            fully qualified paths to files, or URIs.  Currently supported URI
-            types are *puppet* and *file*.
-
-            This is one of the primary mechanisms for getting content into
-            applications that Puppet does not directly support and is very
-            useful for those configuration files that don't change much across
-            sytems.  For instance::
-
-                class sendmail {
-                    file { \"/etc/mail/sendmail.cf\":
-                        source => \"puppet://server/module/sendmail.cf\"
-                    }
-                }
-
-            You can also leave out the server name, in which case ``puppetd``
-            will fill in the name of its configuration server and ``puppet``
-            will use the local filesystem.  This makes it easy to use the same
-            configuration in both local and centralized forms.
-
-            Currently, only the ``puppet`` scheme is supported for source 
-            URL's. Puppet will connect to the file server running on 
-            ``server`` to retrieve the contents of the file. If the 
-            ``server`` part is empty, the behavior of the command-line 
-            interpreter (``puppet``) and the client demon (``puppetd``) differs
-            slightly: ``puppet`` will look such a file up on the module path
-            on the local host, whereas ``puppetd`` will connect to the 
-            puppet server that it received the manifest from.
-     
-            See the `FileServingConfiguration fileserver configuration documentation`:trac: for information on how to configure
-            and use file services within Puppet.
-
-            If you specify multiple file sources for a file, then the first
-            source that exists will be used.  This allows you to specify
-            what amount to search paths for files::
-
-                file { \"/path/to/my/file\":
-                    source => [
-                        \"/nfs/files/file.$host\",
-                        \"/nfs/files/file.$operatingsystem\",
-                        \"/nfs/files/file\"
-                    ]
-                }
-            
-            This will use the first found file as the source.
-            
-            You cannot currently copy links using this mechanism; set ``links``
-            to ``follow`` if any remote sources are links.
-            "
-
-        uncheckable
-        
-        validate do |source|
-            unless @resource.uri2obj(source)
-                raise Puppet::Error, "Invalid source %s" % source
-            end
-        end
-            
-        munge do |source|
-            # if source.is_a? Symbol
-            #     return source
-            # end
-
-            # Remove any trailing slashes
-            source.sub(/\/$/, '')
-        end
-        
-        def change_to_s(currentvalue, newvalue)
-            # newvalue = "{md5}" + @stats[:checksum]
-            if @resource.property(:ensure).retrieve == :absent
-                return "creating from source %s with contents %s" % [@source, @stats[:checksum]]
-            else
-                return "replacing from source %s with contents %s" % [@source, @stats[:checksum]]
-            end
-        end
-        
-        def checksum
-            if defined?(@stats)
-                @stats[:checksum]
-            else
-                nil
-            end
-        end
-
-        # Ask the file server to describe our file.
-        def describe(source)
-            sourceobj, path = @resource.uri2obj(source)
-            server = sourceobj.server
-
-            begin
-                desc = server.describe(path, @resource[:links])
-            rescue Puppet::Network::XMLRPCClientError => detail
-                fail detail, "Could not describe %s: %s" % [path, detail]
-            end
-
-            return nil if desc == ""
-
-            # Collect everything except the checksum
-            values = desc.split("\t")
-            other = values.pop
-            args = {}
-            pinparams.zip(values).each { |param, value|
-                if value =~ /^[0-9]+$/
-                    value = value.to_i
-                end
-                unless value.nil?
-                    args[param] = value
-                end
-            }
-
-            # Now decide whether we're doing checksums or symlinks
-            if args[:type] == "link"
-                args[:target] = other
-            else
-                args[:checksum] = other
-            end
-
-            # we can't manage ownership unless we're root, so don't even try
-            unless Puppet::Util::SUIDManager.uid == 0
-                args.delete(:owner)
-            end
-            
-            return args
-        end
-        
-        # Use the info we get from describe() to check if we're in sync.
-        def insync?(currentvalue)
-            if currentvalue == :nocopy
-                return true
-            end
-            
-            # the only thing this actual state can do is copy files around.  Therefore,
-            # only pay attention if the remote is a file.
-            unless @stats[:type] == "file" 
-                return true
-            end
-            
-            #FIXARB: Inefficient?  Needed to call retrieve on parent's ensure and checksum
-            parentensure = @resource.property(:ensure).retrieve
-            if parentensure != :absent and ! @resource.replace?
-                return true
-            end
-            # Now, we just check to see if the checksums are the same
-            parentchecksum = @resource.property(:checksum).retrieve
-            result = (!parentchecksum.nil? and (parentchecksum == @stats[:checksum]))
-
-            # Diff the contents if they ask it.  This is quite annoying -- we need to do this in
-            # 'insync?' because they might be in noop mode, but we don't want to do the file
-            # retrieval twice, so we cache the value.
-            if ! result and Puppet[:show_diff] and File.exists?(@resource[:path]) and ! @stats[:_diffed]
-                @stats[:_remote_content] = get_remote_content
-                string_file_diff(@resource[:path], @stats[:_remote_content])
-                @stats[:_diffed] = true
-            end
-            return result
-        end
-
-        def pinparams
-            [:mode, :type, :owner, :group]
-        end
-
-        def found?
-            ! (@stats.nil? or @stats[:type].nil?)
-        end
-
-        # This basically calls describe() on our file, and then sets all
-        # of the local states appropriately.  If the remote file is a normal
-        # file then we set it to copy; if it's a directory, then we just mark
-        # that the local directory should be created.
-        def retrieve(remote = true)
-            sum = nil
-            @source = nil
-
-            # This is set to false by the File#retrieve function on the second
-            # retrieve, so that we do not do two describes.
-            if remote
-                # Find the first source that exists.  @shouldorig contains
-                # the sources as specified by the user.
-                @should.each { |source|
-                    if @stats = self.describe(source)
-                        @source = source
-                        break
-                    end
-                }
-            end
-
-            if !found?
-                raise Puppet::Error, "No specified source was found from" + @should.inject("") { |s, source| s + " #{source},"}.gsub(/,$/,"")
-            end
-            
-            case @stats[:type]
-            when "directory", "file", "link":
-                @resource[:ensure] = @stats[:type] unless @resource.deleting?
-            else
-                self.info @stats.inspect
-                self.err "Cannot use files of type %s as sources" % @stats[:type]
-                return :nocopy
-            end
-
-            # Take each of the stats and set them as states on the local file
-            # if a value has not already been provided.
-            @stats.each { |stat, value|
-                next if stat == :checksum
-                next if stat == :type
-
-                # was the stat already specified, or should the value
-                # be inherited from the source?
-                @resource[stat] = value unless @resource.argument?(stat)
-            }
-
-            return @stats[:checksum]
-        end
-        
-        def should
-            @should
-        end
-        
-        # Make sure we're also checking the checksum
-        def should=(value)
-            super
-
-            checks = (pinparams + [:ensure])
-            checks.delete(:checksum)
-            
-            @resource[:check] = checks
-            @resource[:checksum] = :md5 unless @resource.property(:checksum)
-        end
-
-        def sync
-            contents = @stats[:_remote_content] || get_remote_content()
-
-            exists = File.exists?(@resource[:path])
-
-            @resource.write(contents, :source, @stats[:checksum])
-
-            if exists
-                return :file_changed
-            else
-                return :file_created
-            end
-        end
-
-        private
-
-        def get_remote_content
-            raise Puppet::DevError, "Got told to copy non-file %s" % @resource[:path] unless @stats[:type] == "file"
-
-            sourceobj, path = @resource.uri2obj(@source)
-
-            begin
-                contents = sourceobj.server.retrieve(path, @resource[:links])
-            rescue => detail
-                self.fail "Could not retrieve %s: %s" % [path, detail]
-            end
-
-            contents = CGI.unescape(contents) unless sourceobj.server.local
-
-            if contents == ""
-                self.notice "Could not retrieve contents for %s" % @source
-            end
-
-            return contents
-        end
-    end
-end
diff --git a/lib/puppet/type/file/target.rb b/lib/puppet/type/file/target.rb
deleted file mode 100644
index 8949c2a..0000000
--- a/lib/puppet/type/file/target.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-module Puppet
-    Puppet.type(:file).newproperty(:target) do
-        desc "The target for creating a link.  Currently, symlinks are the
-            only type supported."
-
-        newvalue(:notlink) do
-            # We do nothing if the value is absent
-            return :nochange
-        end
-
-        # Anything else, basically
-        newvalue(/./) do
-            if ! @resource.should(:ensure)
-                @resource[:ensure] = :link
-            end
-
-            # Only call mklink if ensure() didn't call us in the first place.
-            currentensure  = @resource.property(:ensure).retrieve
-            if @resource.property(:ensure).insync?(currentensure)
-                mklink()
-            end
-        end
-
-        # Create our link.
-        def mklink
-            target = self.should
-
-            # Clean up any existing objects.  The argument is just for logging,
-            # it doesn't determine what's removed.
-            @resource.remove_existing(target)
-
-            if FileTest.exists?(@resource[:path])
-                raise Puppet::Error, "Could not remove existing file"
-            end
-
-            Dir.chdir(File.dirname(@resource[:path])) do
-                Puppet::Util::SUIDManager.asuser(@resource.asuser()) do
-                    mode = @resource.should(:mode)
-                    if mode
-                        Puppet::Util.withumask(000) do
-                            File.symlink(target, @resource[:path])
-                        end
-                    else
-                        File.symlink(target, @resource[:path])
-                    end
-                end
-
-		@resource.send(:property_fix)
-
-                :link_created
-            end
-        end
-
-        def insync?(currentvalue)
-            if [:nochange, :notlink].include?(self.should) or @resource.recurse?
-                return true
-            elsif ! @resource.replace? and File.exists?(@resource[:path])
-                return true 
-            else
-                return super(currentvalue)
-            end
-        end
-
-
-        def retrieve
-            if stat = @resource.stat
-                if stat.ftype == "link"
-                    return File.readlink(@resource[:path])
-                else
-                    return :notlink
-                end
-            else
-                return :absent
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/type/file/type.rb b/lib/puppet/type/file/type.rb
deleted file mode 100755
index 6553979..0000000
--- a/lib/puppet/type/file/type.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-module Puppet
-    Puppet.type(:file).newproperty(:type) do
-        require 'etc'
-        desc "A read-only state to check the file type."
-
-        #munge do |value|
-        #    raise Puppet::Error, ":type is read-only"
-        #end
-        
-        def retrieve
-            currentvalue = :absent
-            if stat = @resource.stat(false)
-                currentvalue = stat.ftype
-            end
-            # so this state is never marked out of sync
-            @should = [currentvalue]
-            return currentvalue
-        end
-
-
-        def sync
-            raise Puppet::Error, ":type is read-only"
-        end
-    end
-end
-
diff --git a/lib/puppet/type/filebucket.rb b/lib/puppet/type/filebucket.rb
deleted file mode 100755
index b268610..0000000
--- a/lib/puppet/type/filebucket.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-module Puppet
-    require 'puppet/network/client'
-
-    newtype(:filebucket) do
-        @doc = "A repository for backing up files.  If no filebucket is
-            defined, then files will be backed up in their current directory,
-            but the filebucket can be either a host- or site-global repository
-            for backing up.  It stores files and returns the MD5 sum, which
-            can later be used to retrieve the file if restoration becomes
-            necessary.  A filebucket does not do any work itself; instead,
-            it can be specified as the value of *backup* in a **file** object.
-            
-            Currently, filebuckets are only useful for manual retrieval of
-            accidentally removed files (e.g., you look in the log for the md5
-            sum and retrieve the file with that sum from the filebucket), but
-            when transactions are fully supported filebuckets will be used to
-            undo transactions.
-            
-            You will normally want to define a single filebucket for your
-            whole network and then use that as the default backup location::
-            
-                # Define the bucket
-                filebucket { main: server => puppet }
-
-                # Specify it as the default target
-                File { backup => main }
-
-            Puppetmaster servers create a filebucket by default, so this will
-            work in a default configuration."
-
-        newparam(:name) do
-            desc "The name of the filebucket."
-            isnamevar
-        end
-
-        newparam(:server) do
-            desc "The server providing the filebucket.  If this is
-                not specified, then the bucket is local and *path* must be
-                specified."
-        end
-
-        newparam(:port) do
-            desc "The port on which the remote server is listening.
-                Defaults to the normal Puppet port, %s." % Puppet[:masterport]
-
-            defaultto Puppet[:masterport]
-        end
-
-        newparam(:path) do
-            desc "The path to the local filebucket.  If this is
-                not specified, then the bucket is remote and *server* must be
-                specified."
-
-            defaultto { Puppet[:clientbucketdir] }
-        end
-
-        # get the actual filebucket object
-        def self.bucket(name)
-            if object = self[name]
-                return object.bucket
-            else
-                return nil
-            end
-        end
-        
-        # Create a default filebucket.
-        def self.mkdefaultbucket
-            unless default = self["puppet"]
-                return self.create(:name => "puppet", :path => Puppet[:clientbucketdir])
-            end
-            return nil
-        end
-
-        def self.instances
-            []
-        end
-
-        def bucket
-            unless defined? @bucket
-                mkbucket()
-            end
-
-            @bucket
-        end
-
-        def mkbucket
-            if self[:server]
-                begin
-                    @bucket = Puppet::Network::Client.client(:Dipper).new( 
-                        :Server => self[:server],
-                        :Port => self[:port]
-                    )
-                rescue => detail
-                    self.fail(
-                        "Could not create remote filebucket: %s" % detail
-                    )
-                end
-            else
-                begin
-                    @bucket = Puppet::Network::Client.client(:Dipper).new(
-                        :Path => self[:path]
-                    )
-                rescue => detail
-                    if Puppet[:trace]
-                        puts detail.backtrace
-                    end
-                    self.fail(
-                        "Could not create local filebucket: %s" % detail
-                    )
-                end
-            end
-
-            @bucket.name = self.name
-        end
-    end
-end
-
diff --git a/lib/puppet/type/group.rb b/lib/puppet/type/group.rb
deleted file mode 100755
index cb11a60..0000000
--- a/lib/puppet/type/group.rb
+++ /dev/null
@@ -1,123 +0,0 @@
-# Manage Unix groups.  This class is annoyingly complicated; There
-# is some variety in whether systems use 'groupadd' or 'addgroup', but OS X
-# significantly complicates the picture by using NetInfo.  Eventually we
-# will also need to deal with systems that have their groups hosted elsewhere
-# (e.g., in LDAP).  That will likely only be a problem for OS X, since it
-# currently does not use the POSIX interfaces, since lookupd's cache screws
-# things up.
-
-require 'etc'
-require 'facter'
-
-module Puppet
-    newtype(:group) do
-        @doc = "Manage groups.  This type can only create groups.  Group
-            membership must be managed on individual users.  This resource type
-            uses the prescribed native tools for creating groups and generally
-            uses POSIX APIs for retrieving information about them.  It does
-            not directly modify ``/etc/group`` or anything.
-            
-            For most platforms, the tools used are ``groupadd`` and its ilk;
-            for Mac OS X, NetInfo is used.  This is currently unconfigurable,
-            but if you desperately need it to be so, please contact us."
-
-        newproperty(:ensure) do
-            desc "The basic state that the object should be in."
-
-            newvalue(:present) do
-                provider.create
-
-                :group_created
-            end
-
-            newvalue(:absent) do
-                provider.delete
-
-                :group_removed
-            end
-
-            # If they're talking about the thing at all, they generally want to
-            # say it should exist.
-            defaultto do
-                if @resource.managed?
-                    :present
-                else
-                    nil
-                end
-            end
-
-            def retrieve
-                return provider.exists? ? :present : :absent
-            end
-
-            # The default 'sync' method only selects among a list of registered
-            # values.
-            def sync
-                unless self.class.values
-                    self.devfail "No values defined for %s" %
-                        self.class.name
-                end
-
-                # Set ourselves to whatever our should value is.
-                self.set(self.should)
-            end
-
-        end
-
-        newproperty(:gid) do
-            desc "The group ID.  Must be specified numerically.  If not
-                specified, a number will be picked, which can result in ID
-                differences across systems and thus is not recommended.  The
-                GID is picked according to local system standards."
-
-            def retrieve
-                return provider.gid
-            end
-
-            def sync
-                if self.should == :absent
-                    raise Puppet::DevError, "GID cannot be deleted"
-                else
-                    provider.gid = self.should
-                    :group_modified
-                end
-            end
-
-            munge do |gid|
-                case gid
-                when String
-                    if gid =~ /^[-0-9]+$/
-                        gid = Integer(gid)
-                    else
-                        self.fail "Invalid GID %s" % gid
-                    end
-                when Symbol
-                    unless gid == :absent
-                        self.devfail "Invalid GID %s" % gid
-                    end
-                end
-
-                return gid
-            end
-        end
-
-        newparam(:name) do
-            desc "The group name.  While naming limitations vary by
-                system, it is advisable to keep the name to the degenerate
-                limitations, which is a maximum of 8 characters beginning with
-                a letter."
-
-            isnamevar
-        end
-
-        newparam(:allowdupe, :boolean => true) do
-            desc "Whether to allow duplicate GIDs.  This option does not work on
-                FreeBSD (contract to the ``pw`` man page)."
-                
-            newvalues(:true, :false)
-
-            defaultto false
-        end
-    end
-end
-
diff --git a/lib/puppet/type/host.rb b/lib/puppet/type/host.rb
deleted file mode 100755
index 53365bf..0000000
--- a/lib/puppet/type/host.rb
+++ /dev/null
@@ -1,104 +0,0 @@
-module Puppet
-    newtype(:host) do
-        ensurable
-
-        newproperty(:ip) do
-            desc "The host's IP address, IPv4 or IPv6."
-
-        validate do |value|
-           unless value =~ /((([0-9a-fA-F]+:){7}[0-9a-fA-F]+)|(([0-9a-fA-F]+:)*[0-9a-fA-F]+)?::(([0-9a-fA-F]+:)*[0-9a-fA-F]+)?)|((25[0-5]|2[0-4][\d]|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})/
-             raise Puppet::Error, "Invalid IP address"            
-           end
-        end
-
-        end
-
-        newproperty(:alias) do
-            desc "Any alias the host might have.  Multiple values must be
-                specified as an array.  Note that this state has the same name
-                as one of the metaparams; using this state to set aliases will
-                make those aliases available in your Puppet scripts and also on
-                disk."
-
-           def insync?(is)
-                is == @should
-            end
-            
-            def is_to_s(currentvalue = @is)
-                currentvalue = [currentvalue] unless currentvalue.is_a? Array
-                currentvalue.join(" ")
-            end
-
-            def retrieve
-                is = super
-                case is
-                when String
-                    is = is.split(/\s*,\s*/)
-                when Symbol:
-                    is = [is]
-                when Array
-                    # nothing
-                else
-                    raise Puppet::DevError, "Invalid @is type %s" % is.class
-                end
-                return is
-            end
-
-            # We actually want to return the whole array here, not just the first
-            # value.
-            def should
-                if defined? @should
-                    if @should == [:absent]
-                        return :absent
-                    else
-                        return @should
-                    end
-                else
-                    return nil
-                end
-            end
-
-            def should_to_s(newvalue = @should)
-                newvalue.join(" ")
-            end
-
-            validate do |value|
-                if value =~ /\s/
-                    raise Puppet::Error, "Aliases cannot include whitespace"
-                end
-            end
-        end
-
-        newproperty(:target) do
-            desc "The file in which to store service information.  Only used by
-                those providers that write to disk (i.e., not NetInfo)."
-
-            defaultto { if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
-                    @resource.class.defaultprovider.default_target
-                else
-                    nil
-                end
-            }
-        end
-
-        newparam(:name) do
-            desc "The host name."
-
-            isnamevar
-
-            validate do |value|
-               # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-               x = value.split('.').each do |hostpart| 
-                  unless hostpart =~ /^([\d\w]+|[\d\w][\d\w\-]+[\d\w])$/
-                     raise Puppet::Error, "Invalid host name"
-                  end
-               end
-            end 
-        end
-
-        @doc = "Installs and manages host entries.  For most systems, these
-            entries will just be in ``/etc/hosts``, but some systems (notably OS X)
-            will have different solutions."
-    end
-end
-
diff --git a/lib/puppet/type/k5login.rb b/lib/puppet/type/k5login.rb
deleted file mode 100644
index 2372f65..0000000
--- a/lib/puppet/type/k5login.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-# $Id: k5login.rb 2468 2007-08-07 23:30:20Z digant $
-#
-# Plug-in type for handling k5login files
-
-Puppet::Type.newtype(:k5login) do
-    @doc = "Manage the .k5login file for a user.  Specify the full path to 
-        the .k5login file as the name and an array of principals as the
-        property principals."
-
-    ensurable
-
-    # Principals that should exist in the file
-    newproperty(:principals, :array_matching => :all) do
-        desc "The principals present in the .k5login file."
-    end
-
-    # The path/name of the k5login file
-    newparam(:path) do
-        isnamevar
-        desc "The path to the file to manage.  Must be fully qualified."
-
-        validate do |value|
-            unless value =~ /^#{File::SEPARATOR}/
-                raise Puppet::Error, "File paths must be fully qualified"
-            end
-        end
-    end
-
-    # To manage the mode of the file
-    newproperty(:mode) do
-        desc "Manage the k5login file's mode"
-        defaultto { "644" }
-    end
-
-    provide(:k5login) do
-        desc "The k5login provider is the only provider for the k5login 
-            type."
-
-        # Does this file exist?
-        def exists?
-            File.exists?(@resource[:name])
-        end
-
-        # create the file
-        def create
-            write(@resource.should(:principals))
-            should_mode = @resource.should(:mode)
-            unless self.mode == should_mode
-                self.mode  should_mode
-            end
-        end
-
-        # remove the file
-        def destroy
-            File.unlink(@resource[:name])
-        end
-
-        # Return the principals
-        def principals
-            if File.exists?(@resource[:name])
-                File.readlines(@resource[:name]).collect { |line| line.chomp }
-            else
-                :absent
-            end
-        end
-
-        # Write the principals out to the k5login file
-        def principals=(value)
-            write(value)
-        end
-
-        # Return the mode as an octal string, not as an integer
-        def mode
-            "%o" % (File.stat(@resource[:name]).mode & 007777)
-        end
-
-        # Set the file mode, converting from a string to an integer.
-        def mode=(value)
-            File.chmod(Integer("0" + value), @resource[:name])
-        end
-
-        private
-        def write(value)
-            File.open(@resource[:name], "w") { |f| f.puts value.join("\n") }
-        end
-    end
-end
diff --git a/lib/puppet/type/mailalias.rb b/lib/puppet/type/mailalias.rb
deleted file mode 100755
index 50ca26e..0000000
--- a/lib/puppet/type/mailalias.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-module Puppet
-    newtype(:mailalias) do
-        @doc = "Creates an email alias in the local alias database."
-        
-        ensurable
-
-        newparam(:name, :namevar => true) do
-            desc "The alias name."
-        end
-
-        newproperty(:recipient, :array_matching => :all) do
-            desc "Where email should be sent.  Multiple values
-                should be specified as an array."
-
-            def is_to_s(value)
-                if value.include?(:absent)
-                    super
-                else
-                    value.join(",")
-                end
-            end
-
-            def should
-                @should
-            end
-
-            def should_to_s(value)
-                if value.include?(:absent)
-                    super
-                else
-                    value.join(",")
-                end
-            end
-        end
-
-        newproperty(:target) do
-            desc "The file in which to store the aliases.  Only used by
-                those providers that write to disk (i.e., not NetInfo)."
-
-            defaultto { if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
-                    @resource.class.defaultprovider.default_target
-                else
-                    nil
-                end
-            }
-        end
-    end
-end
-
diff --git a/lib/puppet/type/maillist.rb b/lib/puppet/type/maillist.rb
deleted file mode 100755
index 7273488..0000000
--- a/lib/puppet/type/maillist.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-module Puppet
-    newtype(:maillist) do
-        @doc = "Manage email lists.  This resource type currently can only create
-            and remove lists, it cannot reconfigure them."
-        
-        ensurable do
-            defaultvalues
-
-            newvalue(:purged) do
-                provider.purge
-            end
-        end
-
-        newparam(:name, :namevar => true) do
-            desc "The name of the email list."
-        end
-
-        newparam(:description) do
-            desc "The description of the mailing list."
-        end
-
-        newparam(:password) do
-            desc "The admin password."
-        end
-
-        newparam(:webserver) do
-            desc "The name of the host providing web archives and the administrative interface."
-        end
-
-        newparam(:mailserver) do
-            desc "The name of the host handling email for the list."
-        end
-
-        newparam(:admin) do
-            desc "The email address of the administrator."
-        end
-
-        def generate
-            if provider.respond_to?(:aliases)
-                should = self.should(:ensure) || :present
-                if should == :purged
-                    should = :absent
-                end
-                atype = Puppet::Type.type(:mailalias)
-                return provider.aliases.collect do |name, recipient|
-                    if atype[name]
-                        nil
-                    else
-                        malias = Puppet::Type.type(:mailalias).create(:name => name, :recipient => recipient, :ensure => should)
-                    end
-                end.compact
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/type/mount.rb b/lib/puppet/type/mount.rb
deleted file mode 100755
index 1679b73..0000000
--- a/lib/puppet/type/mount.rb
+++ /dev/null
@@ -1,212 +0,0 @@
-module Puppet
-    # We want the mount to refresh when it changes.
-    newtype(:mount, :self_refresh => true) do
-        @doc = "Manages mounted filesystems, including putting mount
-            information into the mount table. The actual behavior depends 
-            on the value of the 'ensure' parameter.
-	    
-            Note that if a ``mount`` receives an event from another resource,
-            it will try to remount the filesystems if ``ensure`` is set to ``mounted``."
-
-        feature :refreshable, "The provider can remount the filesystem.",
-            :methods => [:remount]
-        
-        # Use the normal parent class, because we actually want to
-        # call code when sync() is called.
-        newproperty(:ensure) do
-            desc "Control what to do with this mount. Set this attribute to
-                ``present`` to make sure the filesystem is in the filesystem table
-                but not mounted (if the filesystem is currently mounted, it will be
-                unmounted).  Set it to ``absent`` to unmount (if necessary) and remove
-                the filesystem from the fstab.  Set to ``mounted`` to add it to the
-                fstab and mount it."
-
-            newvalue(:present) do
-                if provider.mounted?
-                    syncothers()
-                    provider.unmount
-                    return :mount_unmounted
-                else
-                    provider.create
-                    return :mount_created
-                end
-            end
-            aliasvalue :unmounted, :present
-
-            newvalue(:absent, :event => :mount_deleted) do
-                if provider.mounted?
-                    provider.unmount
-                end
-
-                provider.destroy
-            end
-
-            newvalue(:mounted, :event => :mount_mounted) do
-                # Create the mount point if it does not already exist.
-                current_value = self.retrieve
-                provider.create if current_value.nil? or current_value == :absent 
-
-                syncothers()
-
-                # The fs can be already mounted if it was absent but mounted
-                provider.mount unless provider.mounted?
-            end
-
-            def retrieve
-                # We need to special case :mounted; if we're absent, we still
-                # want 
-                curval = super()
-                if curval == :absent
-                    return curval
-                elsif provider.mounted?
-                    return :mounted
-                else
-                    return curval
-                end
-            end
-
-            def syncothers
-                # We have to flush any changes to disk.
-                currentvalues = @resource.retrieve
-
-                # Determine if there are any out-of-sync properties.
-                oos = @resource.send(:properties).find_all do |prop|
-                    unless currentvalues.include?(prop)
-                        raise Puppet::DevError, "Parent has property %s but it doesn't appear in the current values", [prop.name]
-                    end
-                    if prop.name == :ensure
-                        false
-                    else
-                        ! prop.insync?(currentvalues[prop])
-                    end
-                end.each { |prop| prop.sync }.length
-                if oos > 0
-                    @resource.flush
-                end
-            end
-        end
-
-        newproperty(:device) do
-            desc "The device providing the mount.  This can be whatever
-                device is supporting by the mount, including network
-                devices or devices specified by UUID rather than device
-                path, depending on the operating system."
-        end
-
-        # Solaris specifies two devices, not just one.
-        newproperty(:blockdevice) do
-            desc "The device to fsck.  This is property is only valid
-                on Solaris, and in most cases will default to the correct
-                value."
-
-            # Default to the device but with "dsk" replaced with "rdsk".
-            defaultto do
-                if Facter["operatingsystem"].value == "Solaris"
-                    device = @resource.value(:device)
-                    if device =~ %r{/dsk/}
-                        device.sub(%r{/dsk/}, "/rdsk/")
-                    else
-                        nil
-                    end
-                else
-                    nil
-                end
-            end
-        end
-
-        newproperty(:fstype) do
-            desc "The mount type.  Valid values depend on the
-                operating system."
-        end
-
-        newproperty(:options) do
-            desc "Mount options for the mounts, as they would
-                appear in the fstab."
-        end
-
-        newproperty(:pass) do
-            desc "The pass in which the mount is checked."
-
-            defaultto {
-                if @resource.managed?
-                    0
-                end
-            }
-        end
-
-        newproperty(:atboot) do
-            desc "Whether to mount the mount at boot.  Not all platforms
-                support this."
-        end
-
-        newproperty(:dump) do
-            desc "Whether to dump the mount.  Not all platforms
-                support this. Valid values are ``1`` or ``0``. Default is ``0``."
-
-             newvalue(%r{(0|1)}) { }
-
-            defaultto {
-                if @resource.managed?
-                    0
-                end
-            }
-        end
-
-        newproperty(:target) do
-            desc "The file in which to store the mount table.  Only used by
-                those providers that write to disk (i.e., not NetInfo)."
-
-            defaultto { if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
-                    @resource.class.defaultprovider.default_target
-                else
-                    nil
-                end
-            }
-        end
-
-        newparam(:name) do
-            desc "The mount path for the mount."
-
-            isnamevar
-        end
-
-        newparam(:path) do
-            desc "The deprecated name for the mount point.  Please use ``name`` now."
-
-            def value=(value)
-                warning "'path' is deprecated for mounts.  Please use 'name'."
-                @resource[:name] = value
-                super
-            end
-        end
-        
-        newparam(:remounts) do
-            desc "Whether the mount can be remounted  ``mount -o remount``.  If
-                this is false, then the filesystem will be unmounted and remounted
-                manually, which is prone to failure."
-            
-            newvalues(:true, :false)
-            defaultto do
-                case Facter.value(:operatingsystem)
-                when "FreeBSD": false
-                else
-                    true
-                end
-            end
-        end
-
-        def refresh
-            # Only remount if we're supposed to be mounted.
-            provider.remount if self.should(:fstype) != "swap" and provider.mounted?
-        end
-
-        def value(name)
-            name = symbolize(name)
-            ret = nil
-            if property = @parameters[name]
-                return property.value
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/type/nagios_command.rb b/lib/puppet/type/nagios_command.rb
deleted file mode 100644
index 0d0e11b..0000000
--- a/lib/puppet/type/nagios_command.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :command
diff --git a/lib/puppet/type/nagios_contact.rb b/lib/puppet/type/nagios_contact.rb
deleted file mode 100644
index d5a1f3c..0000000
--- a/lib/puppet/type/nagios_contact.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :contact
diff --git a/lib/puppet/type/nagios_contactgroup.rb b/lib/puppet/type/nagios_contactgroup.rb
deleted file mode 100644
index b8f14c0..0000000
--- a/lib/puppet/type/nagios_contactgroup.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :contactgroup
diff --git a/lib/puppet/type/nagios_host.rb b/lib/puppet/type/nagios_host.rb
deleted file mode 100644
index f2e03f6..0000000
--- a/lib/puppet/type/nagios_host.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :host
diff --git a/lib/puppet/type/nagios_hostescalation.rb b/lib/puppet/type/nagios_hostescalation.rb
deleted file mode 100644
index 5d18af2..0000000
--- a/lib/puppet/type/nagios_hostescalation.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :hostescalation
diff --git a/lib/puppet/type/nagios_hostextinfo.rb b/lib/puppet/type/nagios_hostextinfo.rb
deleted file mode 100644
index da8e08d..0000000
--- a/lib/puppet/type/nagios_hostextinfo.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :hostextinfo
diff --git a/lib/puppet/type/nagios_hostgroup.rb b/lib/puppet/type/nagios_hostgroup.rb
deleted file mode 100644
index e1943be..0000000
--- a/lib/puppet/type/nagios_hostgroup.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :hostgroup
diff --git a/lib/puppet/type/nagios_hostgroupescalation.rb b/lib/puppet/type/nagios_hostgroupescalation.rb
deleted file mode 100644
index 21b39f6..0000000
--- a/lib/puppet/type/nagios_hostgroupescalation.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :hostgroupescalation
diff --git a/lib/puppet/type/nagios_service.rb b/lib/puppet/type/nagios_service.rb
deleted file mode 100644
index 22b987f..0000000
--- a/lib/puppet/type/nagios_service.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :service
diff --git a/lib/puppet/type/nagios_servicedependency.rb b/lib/puppet/type/nagios_servicedependency.rb
deleted file mode 100644
index 0e3340c..0000000
--- a/lib/puppet/type/nagios_servicedependency.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :servicedependency
diff --git a/lib/puppet/type/nagios_serviceescalation.rb b/lib/puppet/type/nagios_serviceescalation.rb
deleted file mode 100644
index cb2af15..0000000
--- a/lib/puppet/type/nagios_serviceescalation.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :serviceescalation
diff --git a/lib/puppet/type/nagios_serviceextinfo.rb b/lib/puppet/type/nagios_serviceextinfo.rb
deleted file mode 100644
index 6bdc709..0000000
--- a/lib/puppet/type/nagios_serviceextinfo.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :serviceextinfo
diff --git a/lib/puppet/type/nagios_servicegroup.rb b/lib/puppet/type/nagios_servicegroup.rb
deleted file mode 100644
index fef6696..0000000
--- a/lib/puppet/type/nagios_servicegroup.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :servicegroup
diff --git a/lib/puppet/type/nagios_timeperiod.rb b/lib/puppet/type/nagios_timeperiod.rb
deleted file mode 100644
index 25a06d3..0000000
--- a/lib/puppet/type/nagios_timeperiod.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'puppet/util/nagios_maker'
-
-Puppet::Util::NagiosMaker.create_nagios_type :timeperiod
diff --git a/lib/puppet/type/notify.rb b/lib/puppet/type/notify.rb
deleted file mode 100644
index 548cf76..0000000
--- a/lib/puppet/type/notify.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Simple module for logging messages on the client-side
-#
-
-module Puppet
-    newtype(:notify) do
-        @doc = "Sends an arbitrary message to the puppetd run-time log."
-
-        newproperty(:message) do
-            desc "The message to be sent to the log."
-            def sync
-                case @resource["withpath"]
-                when :true:
-                    send(@resource[:loglevel], self.should)
-                else  
-                    Puppet.send(@resource[:loglevel], self.should)
-                end
-                return
-            end
-
-            def retrieve
-                return
-            end
-
-            def insync?(is)
-                false
-            end
-
-            defaultto { @resource[:name] }
-        end
-
-        newparam(:withpath) do 
-            desc "Whether to not to show the full object path."
-            defaultto :false
-
-            newvalues(:true, :false) 
-        end
-
-        newparam(:name) do
-            desc "An arbitrary tag for your own reference; the name of the message."
-            isnamevar
-        end
-    end
-end
-
diff --git a/lib/puppet/type/package.rb b/lib/puppet/type/package.rb
deleted file mode 100644
index 0cea391..0000000
--- a/lib/puppet/type/package.rb
+++ /dev/null
@@ -1,342 +0,0 @@
-# Define the different packaging systems.  Each package system is implemented
-# in a module, which then gets used to individually extend each package object.
-# This allows packages to exist on the same machine using different packaging
-# systems.
-
-module Puppet
-    newtype(:package) do
-        @doc = "Manage packages.  There is a basic dichotomy in package
-            support right now:  Some package types (e.g., yum and apt) can
-            retrieve their own package files, while others (e.g., rpm and
-            sun) cannot.  For those package formats that cannot retrieve
-            their own files, you can use the ``source`` parameter to point to
-            the correct file.
-
-            Puppet will automatically guess the packaging format that you are
-            using based on the platform you are on, but you can override it
-            using the ``provider`` parameter; each provider defines what it
-            requires in order to function, and you must meet those requirements
-            to use a given provider."
-
-        feature :installable, "The provider can install packages.",
-            :methods => [:install]
-        feature :uninstallable, "The provider can uninstall packages.",
-            :methods => [:uninstall]
-        feature :upgradeable, "The provider can upgrade to the latest version of a
-                package.  This feature is used by specifying ``latest`` as the
-                desired value for the package.",
-            :methods => [:update, :latest]
-        feature :purgeable, "The provider can purge packages.  This generally means
-                that all traces of the package are removed, including
-                existing configuration files.  This feature is thus destructive
-                and should be used with the utmost care.",
-            :methods => [:purge]
-        feature :versionable, "The provider is capable of interrogating the
-                package database for installed version(s), and can select
-                which out of a set of available versions of a package to
-                install if asked."
-
-        ensurable do
-            desc "What state the package should be in.
-                *latest* only makes sense for those packaging formats that can
-                retrieve new packages on their own and will throw an error on
-                those that cannot.  For those packaging systems that allow you
-                to specify package versions, specify them here.  Similarly,
-                *purged* is only useful for packaging systems that support
-                the notion of managing configuration files separately from
-                'normal' system files."
-
-            attr_accessor :latest
-
-            newvalue(:present, :event => :package_installed) do
-                provider.install
-            end
-
-            newvalue(:absent, :event => :package_removed) do
-                provider.uninstall
-            end
-            
-            newvalue(:purged, :event => :package_purged, :required_features => :purgeable) do
-                provider.purge
-            end
-
-            # Alias the 'present' value.
-            aliasvalue(:installed, :present)
-
-            newvalue(:latest, :required_features => :upgradeable) do
-                # Because yum always exits with a 0 exit code, there's a retrieve
-                # in the "install" method.  So, check the current state now,
-                # to compare against later.
-                current = self.retrieve
-                begin
-                    provider.update
-                rescue => detail
-                    self.fail "Could not update: %s" % detail
-                end
-
-                if current == :absent
-                    :package_installed
-                else
-                    :package_changed
-                end
-            end
-
-            newvalue(/./, :required_features => :versionable) do
-                begin
-                    provider.install
-                rescue => detail
-                    self.fail "Could not update: %s" % detail
-                end
-
-                if self.retrieve == :absent
-                    :package_installed
-                else
-                    :package_changed
-                end
-            end
-
-
-            defaultto :installed
-
-            # Override the parent method, because we've got all kinds of
-            # funky definitions of 'in sync'.
-            def insync?(is)
-                @should ||= []
-
-                @latest = nil unless defined? @latest
-                @lateststamp ||= (Time.now.to_i - 1000)
-                # Iterate across all of the should values, and see how they
-                # turn out.
-
-                @should.each { |should|
-                    case should
-                    when :present
-                        return true unless [:absent, :purged].include?(is)
-                    when :latest
-                        # Short-circuit packages that are not present
-                        return false if is == :absent or is == :purged
- 
-                        # Don't run 'latest' more than about every 5 minutes
-                        if @latest and ((Time.now.to_i - @lateststamp) / 60) < 5
-                            #self.debug "Skipping latest check"
-                        else
-                            begin
-                                @latest = provider.latest
-                                @lateststamp = Time.now.to_i
-                            rescue => detail
-                                error = Puppet::Error.new("Could not get latest version: %s" % detail.to_s)
-                                error.set_backtrace(detail.backtrace)
-                                raise error
-                            end
-                        end
-
-                        case is
-                        when @latest:
-                            return true
-                        when :present:
-                            # This will only happen on retarded packaging systems
-                            # that can't query versions.
-                            return true
-                        else
-                            self.debug "%s %s is installed, latest is %s" %
-                                [@resource.name, is.inspect, @latest.inspect]
-                        end
-                    when :absent
-                        return true if is == :absent or is == :purged
-                    when :purged
-                        return true if is == :purged
-                    when is
-                        return true
-                    end
-                }
-
-                return false
-            end
-
-            # This retrieves the current state. LAK: I think this method is unused.
-            def retrieve
-                return provider.properties[:ensure]
-            end
-
-            # Provide a bit more information when logging upgrades.
-            def should_to_s(newvalue = @should)
-                if @latest
-                    @latest.to_s
-                else
-                    super(newvalue)
-                end
-            end
-        end
-
-        newparam(:name) do
-            desc "The package name.  This is the name that the packaging
-            system uses internally, which is sometimes (especially on Solaris)
-            a name that is basically useless to humans.  If you want to
-            abstract package installation, then you can use aliases to provide
-            a common name to packages::
-
-                # In the 'openssl' class
-                $ssl = $operatingsystem ? {
-                    solaris => SMCossl,
-                    default => openssl
-                }
-
-                # It is not an error to set an alias to the same value as the
-                # object name.
-                package { $ssl:
-                    ensure => installed,
-                    alias => openssl
-                }
-
-                . etc. .
-
-                $ssh = $operatingsystem ? {
-                    solaris => SMCossh,
-                    default => openssh
-                }
-
-                # Use the alias to specify a dependency, rather than
-                # having another selector to figure it out again.
-                package { $ssh:
-                    ensure => installed,
-                    alias => openssh,
-                    require => Package[openssl]
-                }
-            
-            "
-            isnamevar
-        end
-
-        newparam(:source) do
-            desc "Where to find the actual package.  This must be a local file
-                (or on a network file system) or a URL that your specific
-                packaging type understands; Puppet will not retrieve files for you."
-        end
-        newparam(:instance) do
-            desc "A read-only parameter set by the package."
-        end
-        newparam(:status) do
-            desc "A read-only parameter set by the package."
-        end
-
-        newparam(:type) do
-            desc "Deprecated form of ``provider``."
-
-            munge do |value|
-                warning "'type' is deprecated; use 'provider' instead"
-                @resource[:provider] = value
-
-                @resource[:provider]
-            end
-        end
-
-        newparam(:adminfile) do
-            desc "A file containing package defaults for installing packages.
-                This is currently only used on Solaris.  The value will be
-                validated according to system rules, which in the case of
-                Solaris means that it should either be a fully qualified path
-                or it should be in /var/sadm/install/admin."
-        end
-
-        newparam(:responsefile) do
-            desc "A file containing any necessary answers to questions asked by
-                the package.  This is currently used on Solaris and Debian.  The
-                value will be validated according to system rules, but it should
-                generally be a fully qualified path."
-        end
-
-        newparam(:configfiles) do
-            desc "Whether configfiles should be kept or replaced.  Most packages
-                types do not support this parameter."
-
-            defaultto :keep
-
-            newvalues(:keep, :replace)
-        end
-
-        newparam(:category) do
-            desc "A read-only parameter set by the package."
-        end
-        newparam(:platform) do
-            desc "A read-only parameter set by the package."
-        end
-        newparam(:root) do
-            desc "A read-only parameter set by the package."
-        end
-        newparam(:vendor) do
-            desc "A read-only parameter set by the package."
-        end
-        newparam(:description) do
-            desc "A read-only parameter set by the package."
-        end
-
-        newparam(:allowcdrom) do
-            desc "Tells apt to allow cdrom sources in the sources.list file.
-                Normally apt will bail if you try this."
-
-            newvalues(:true, :false)
-        end
-
-        autorequire(:file) do
-            autos = []
-            [:responsefile, :adminfile].each { |param|
-                if val = self[param]
-                    autos << val
-                end
-            }
-
-            if source = self[:source]
-                if source =~ /^#{File::SEPARATOR}/
-                    autos << source
-                end
-            end
-            autos
-        end
-
-        # This only exists for testing.
-        def clear
-            if obj = @parameters[:ensure]
-                obj.latest = nil
-            end
-        end
-
-        # The 'query' method returns a hash of info if the package
-        # exists and returns nil if it does not.
-        def exists?
-            @provider.get(:ensure) != :absent
-        end
-
-        def initialize(params)
-            self.initvars
-            provider = nil
-            [:provider, "use"].each { |label|
-                if params.include?(label)
-                    provider = params[label]
-                    params.delete(label)
-                end
-            }
-            if provider
-                self[:provider] = provider
-            else
-                self.setdefaults(:provider)
-            end
-
-            super(params)
-
-            unless @parameters.include?(:provider)
-                raise Puppet::DevError, "No package provider set"
-            end
-        end
-
-        def retrieve
-            @provider.properties.inject({}) do |props, ary|
-                name, value = ary
-                if prop = @parameters[name]
-                    props[prop] = value
-                end
-                props
-            end
-        end
-    end # Puppet.type(:package)
-end
-
diff --git a/lib/puppet/type/port.rb b/lib/puppet/type/port.rb
deleted file mode 100755
index db72b23..0000000
--- a/lib/puppet/type/port.rb
+++ /dev/null
@@ -1,118 +0,0 @@
-#module Puppet
-#    newtype(:port) do
-#        @doc = "Installs and manages port entries.  For most systems, these
-#            entries will just be in /etc/services, but some systems (notably OS X)
-#            will have different solutions."
-#
-#        ensurable
-#
-#        newproperty(:protocols) do
-#            desc "The protocols the port uses.  Valid values are *udp* and *tcp*.
-#                Most services have both protocols, but not all.  If you want
-#                both protocols, you must specify that; Puppet replaces the
-#                current values, it does not merge with them.  If you specify
-#                multiple protocols they must be as an array."
-#
-#            def is=(value)
-#                case value
-#                when String
-#                    @is = value.split(/\s+/)
-#                else
-#                    @is = value
-#                end
-#            end
-#
-#            def is
-#                @is
-#            end
-#
-#            # We actually want to return the whole array here, not just the first
-#            # value.
-#            def should
-#                if defined? @should
-#                    if @should[0] == :absent
-#                        return :absent
-#                    else
-#                        return @should
-#                    end
-#                else
-#                    return nil
-#                end
-#            end
-#
-#            validate do |value|
-#                valids = ["udp", "tcp", "ddp", :absent]
-#                unless valids.include? value
-#                    raise Puppet::Error,
-#                        "Protocols can be either 'udp' or 'tcp', not %s" % value
-#                end
-#            end
-#        end
-#
-#        newproperty(:number) do
-#            desc "The port number."
-#        end
-#
-#        newproperty(:description) do
-#            desc "The port description."
-#        end
-#
-#        newproperty(:alias) do
-#            desc "Any aliases the port might have.  Multiple values must be
-#                specified as an array.  Note that this property has the same name as
-#                one of the metaparams; using this property to set aliases will make
-#                those aliases available in your Puppet scripts and also on disk."
-#
-#            # We actually want to return the whole array here, not just the first
-#            # value.
-#            def should
-#                if defined? @should
-#                    if @should[0] == :absent
-#                        return :absent
-#                    else
-#                        return @should
-#                    end
-#                else
-#                    return nil
-#                end
-#            end
-#
-#            validate do |value|
-#                if value.is_a? String and value =~ /\s/
-#                    raise Puppet::Error,
-#                        "Aliases cannot have whitespace in them: %s" %
-#                        value.inspect
-#                end
-#            end
-#
-#            munge do |value|
-#                unless value == "absent" or value == :absent
-#                    # Add the :alias metaparam in addition to the property
-#                    @resource.newmetaparam(
-#                        @resource.class.metaparamclass(:alias), value
-#                    )
-#                end
-#                value
-#            end
-#        end
-#
-#        newproperty(:target) do
-#            desc "The file in which to store service information.  Only used by
-#                those providers that write to disk (i.e., not NetInfo)."
-#
-#            defaultto { if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
-#                    @resource.class.defaultprovider.default_target
-#                else
-#                    nil
-#                end
-#            }
-#        end
-#
-#        newparam(:name) do
-#            desc "The port name."
-#
-#            isnamevar
-#        end
-#    end
-#end
-
diff --git a/lib/puppet/type/resources.rb b/lib/puppet/type/resources.rb
deleted file mode 100644
index c0d892b..0000000
--- a/lib/puppet/type/resources.rb
+++ /dev/null
@@ -1,151 +0,0 @@
-#  Created by Luke Kanies on 2006-12-12.
-#  Copyright (c) 2006. All rights reserved.
-
-require 'puppet'
-
-Puppet::Type.newtype(:resources) do
-    @doc = "This is a metatype that can manage other resource types.  Any
-        metaparams specified here will be passed on to any generated resources,
-        so you can purge umanaged resources but set ``noop`` to true so the
-        purging is only logged and does not actually happen."
-    
-    
-    newparam(:name) do
-        desc "The name of the type to be managed."
-        
-        validate do |name|
-            unless Puppet::Type.type(name)
-                raise ArgumentError, "Could not find resource type '%s'" % name
-            end
-        end
-        
-        munge { |v| v.to_s }
-    end
-    
-    newparam(:purge, :boolean => true) do
-        desc "Purge unmanaged resources.  This will delete any resource
-            that is not specified in your configuration
-            and is not required by any specified resources."
-            
-        newvalues(:true, :false)
-        
-        validate do |value|
-            if [:true, true, "true"].include?(value)
-                unless @resource.resource_type.respond_to?(:instances)
-                    raise ArgumentError, "Purging resources of type %s is not supported, since they cannot be queried from the system" % @resource[:name]
-                end
-                unless @resource.resource_type.validproperty?(:ensure)
-                    raise ArgumentError, "Purging is only supported on types that accept 'ensure'"
-                end
-            end
-        end
-    end
-    
-    newparam(:unless_system_user) do
-        desc "This keeps system users from being purged.  By default, it
-            does not purge users whose UIDs are less than or equal to 500, but you can specify
-            a different UID as the inclusive limit."
-        
-        newvalues(:true, :false, /^\d+$/)
-        
-        munge do |value|
-            case value
-            when /^\d+/
-                Integer(value)
-            when :true, true
-                500
-            when :false, false
-                false
-            when Integer: value
-            else
-                raise ArgumentError, "Invalid value %s" % value.inspect
-            end
-        end
-        
-        defaultto {
-            if @resource[:name] == "user"
-                500
-            else
-                nil
-            end
-        }
-    end
-    
-    def check(resource)
-        unless defined? @checkmethod
-            @checkmethod = "%s_check" % self[:name]
-        end
-        unless defined? @hascheck
-            @hascheck = respond_to?(@checkmethod)
-        end
-        if @hascheck
-            return send(@checkmethod, resource)
-        else
-            return true
-        end
-    end
-    
-    # Generate any new resources we need to manage.  This is pretty hackish
-    # right now, because it only supports purging.
-    def generate
-        return [] unless self.purge?
-        hascheck = false
-        method = 
-        resource_type.instances.find_all do |resource|
-            ! resource.managed?
-        end.find_all do |resource|
-            check(resource)
-        end.each do |resource|
-            begin
-                resource[:ensure] = :absent
-            rescue ArgumentError, Puppet::Error => detail
-                err "The 'ensure' attribute on %s resources does not accept 'absent' as a value" %
-                    [self[:name]]
-                return []
-            end
-            @parameters.each do |name, param|
-                next unless param.metaparam?
-                resource[name] = param.value
-            end
-
-            # Mark that we're purging, so transactions can handle relationships
-            # correctly
-            resource.purging
-        end
-    end
-    
-    def resource_type
-        unless defined? @resource_type
-            unless type = Puppet::Type.type(self[:name])
-                raise Puppet::DevError, "Could not find resource type"
-            end
-            @resource_type = type
-        end
-        @resource_type
-    end
-    
-    # Make sure we don't purge users below a certain uid, if the check
-    # is enabled.
-    def user_check(resource)
-        return true unless self[:name] == "user"
-        return true unless self[:unless_system_user]
-        
-        resource[:check] = :uid
-        current_values = resource.retrieve
-        
-        if system_users().include?(resource[:name])
-            return false
-        end
-
-        if current_values[resource.property(:uid)] <= self[:unless_system_user]
-            return false
-        else
-            return true
-        end
-    end
-
-    def system_users
-        %w{root nobody bin noaccess daemon sys}
-    end
-end
-
diff --git a/lib/puppet/type/schedule.rb b/lib/puppet/type/schedule.rb
deleted file mode 100755
index b8479e0..0000000
--- a/lib/puppet/type/schedule.rb
+++ /dev/null
@@ -1,363 +0,0 @@
-module Puppet
-    newtype(:schedule) do
-        @doc = "Defined schedules for Puppet.  The important thing to understand
-            about how schedules are currently implemented in Puppet is that they
-            can only be used to stop a resource from being applied, they never
-            guarantee that it is applied.
-            
-            Every time Puppet applies its configuration, it will collect the
-            list of resources whose schedule does not eliminate them from
-            running right then, but there is currently no system in place to
-            guarantee that a given resource runs at a given time.  If you
-            specify a very  restrictive schedule and Puppet happens to run at a
-            time within that schedule, then the resources will get applied;
-            otherwise, that work may never get done.
-            
-            Thus, it behooves you to use wider scheduling (e.g., over a couple of
-            hours) combined with periods and repetitions.  For instance, if you
-            wanted to restrict certain resources to only running once, between
-            the hours of two and 4 AM, then you would use this schedule::
-                
-                schedule { maint:
-                    range => \"2 - 4\",
-                    period => daily,
-                    repeat => 1
-                }
-
-            With this schedule, the first time that Puppet runs between 2 and 4 AM,
-            all resources with this schedule will get applied, but they won't
-            get applied again between 2 and 4 because they will have already
-            run once that day, and they won't get applied outside that schedule
-            because they will be outside the scheduled range.
-            
-            Puppet automatically creates a schedule for each valid period with the
-            same name as that period (e.g., hourly and daily).  Additionally,
-            a schedule named *puppet* is created and used as the default,
-            with the following attributes::
-
-                schedule { puppet:
-                    period => hourly,
-                    repeat => 2
-                }
-
-            This will cause resources to be applied every 30 minutes by default.
-            "
-
-        newparam(:name) do
-            desc "The name of the schedule.  This name is used to retrieve the
-                schedule when assigning it to an object::
-                    
-                    schedule { daily:
-                        period => daily,
-                        range => [2, 4]
-                    }
-
-                    exec { \"/usr/bin/apt-get update\":
-                        schedule => daily
-                    }
-                
-                "
-            isnamevar
-        end
-
-        newparam(:range) do
-            desc "The earliest and latest that a resource can be applied.  This
-                is always a range within a 24 hour period, and hours must be
-                specified in numbers between 0 and 23, inclusive.  Minutes and
-                seconds can be provided, using the normal colon as a separator.
-                For instance::
-
-                    schedule { maintenance:
-                        range => \"1:30 - 4:30\"
-                    }
-                
-                This is mostly useful for restricting certain resources to being
-                applied in maintenance windows or during off-peak hours."
-
-            # This is lame; properties all use arrays as values, but parameters don't.
-            # That's going to hurt eventually.
-            validate do |values|
-                values = [values] unless values.is_a?(Array)
-                values.each { |value|
-                    unless  value.is_a?(String) and
-                            value =~ /\d+(:\d+){0,2}\s*-\s*\d+(:\d+){0,2}/
-                        self.fail "Invalid range value '%s'" % value
-                    end
-                }
-            end
-
-            munge do |values|
-                values = [values] unless values.is_a?(Array)
-                ret = []
-
-                values.each { |value|
-                    range = []
-                    # Split each range value into a hour, minute, second triad
-                    value.split(/\s*-\s*/).each { |val|
-                        # Add the values as an array.
-                        range << val.split(":").collect { |n| n.to_i }
-                    }
-
-                    if range.length != 2
-                        self.fail "Invalid range %s" % value
-                    end
-
-                    # Make sure the hours are valid
-                    [range[0][0], range[1][0]].each do |n|
-                        if n < 0 or n > 23
-                            raise ArgumentError, "Invalid hour '%s'" % n
-                        end
-                    end
-
-                    [range[0][1], range[1][1]].each do |n|
-                        if n and (n < 0 or n > 59)
-                            raise ArgumentError, "Invalid minute '%s'" % n
-                        end
-                    end
-                    if range[0][0] > range[1][0]
-                        self.fail(("Invalid range %s; " % value) +
-                            "ranges cannot span days."
-                        )
-                    end
-                    ret << range
-                }
-
-                # Now our array of arrays
-                ret
-            end
-
-            def match?(previous, now)
-                # The lowest-level array is of the hour, minute, second triad
-                # then it's an array of two of those, to present the limits
-                # then it's array of those ranges
-                unless @value[0][0].is_a?(Array)
-                    @value = [@value]
-                end
-
-                @value.each do |value|
-                    limits = value.collect do |range|
-                        ary = [now.year, now.month, now.day, range[0]]
-                        if range[1]
-                            ary << range[1]
-                        else
-                            ary << now.min
-                        end
-
-                        if range[2]
-                            ary << range[2]
-                        else
-                            ary << now.sec
-                        end
-
-                        time = Time.local(*ary)
-
-                        unless time.hour == range[0]
-                            self.devfail(
-                                "Incorrectly converted time: %s: %s vs %s" %
-                                    [time, time.hour, range[0]]
-                            )
-                        end
-
-                        time
-                    end
-
-                    unless limits[0] < limits[1]
-                        self.info(
-                        "Assuming upper limit should be that time the next day"
-                        )
-
-                        ary = limits[1].to_a
-                        ary[3] += 1
-                        limits[1] = Time.local(*ary)
-                            
-                        #self.devfail("Lower limit is above higher limit: %s" %
-                        #    limits.inspect
-                        #)
-                    end
-
-                    #self.info limits.inspect
-                    #self.notice now
-                    return now.between?(*limits)
-                end
-
-                # Else, return false, since our current time isn't between
-                # any valid times
-                return false
-            end
-        end
-
-        newparam(:periodmatch) do
-            desc "Whether periods should be matched by number (e.g., the two times
-                are in the same hour) or by distance (e.g., the two times are
-                60 minutes apart)."
-
-            newvalues(:number, :distance)
-
-            defaultto :distance
-        end
-
-        newparam(:period) do
-            desc "The period of repetition for a resource.  Choose from among
-                a fixed list of *hourly*, *daily*, *weekly*, and *monthly*.
-                The default is for a resource to get applied every time that
-                Puppet runs, whatever that period is.
-
-                Note that the period defines how often a given resource will get
-                applied but not when; if you would like to restrict the hours
-                that a given resource can be applied (e.g., only at night during
-                a maintenance window) then use the ``range`` attribute.
-
-                If the provided periods are not sufficient, you can provide a
-                value to the *repeat* attribute, which will cause Puppet to
-                schedule the affected resources evenly in the period the
-                specified number of times.  Take this schedule::
-
-                    schedule { veryoften:
-                        period => hourly,
-                        repeat => 6
-                    }
-
-                This can cause Puppet to apply that resource up to every 10 minutes.
-
-                At the moment, Puppet cannot guarantee that level of
-                repetition; that is, it can run up to every 10 minutes, but
-                internal factors might prevent it from actually running that
-                often (e.g., long-running Puppet runs will squash conflictingly
-                scheduled runs).
-                
-                See the ``periodmatch`` attribute for tuning whether to match
-                times by their distance apart or by their specific value."
-
-            newvalues(:hourly, :daily, :weekly, :monthly, :never)
-
-            @@scale = {
-                :hourly => 3600,
-                :daily => 86400,
-                :weekly => 604800,
-                :monthly => 2592000
-            }
-            @@methods = {
-                :hourly => :hour,
-                :daily => :day,
-                :monthly => :month,
-                :weekly => proc do |prev, now|
-                    prev.strftime("%U") != now.strftime("%U")
-                end
-            }
-
-            def match?(previous, now)
-                return false if value == :never
-
-                value = self.value
-                case @resource[:periodmatch]
-                when :number
-                    method = @@methods[value]
-                    if method.is_a?(Proc)
-                        return method.call(previous, now)
-                    else
-                        # We negate it, because if they're equal we don't run
-                        return now.send(method) != previous.send(method)
-                    end
-                when :distance
-                    scale = @@scale[value]
-
-                    # If the number of seconds between the two times is greater
-                    # than the unit of time, we match.  We divide the scale
-                    # by the repeat, so that we'll repeat that often within
-                    # the scale.
-                    diff = (now.to_i - previous.to_i)
-                    comparison = (scale / @resource[:repeat])
-
-                    return (now.to_i - previous.to_i) >= (scale / @resource[:repeat])
-                end
-            end
-        end
-
-        newparam(:repeat) do
-            desc "How often the application gets repeated in a given period.
-                Defaults to 1. Must be an integer."
-
-            defaultto 1
-
-            validate do |value|
-                unless value.is_a?(Integer) or value =~ /^\d+$/
-                    raise Puppet::Error,
-                        "Repeat must be a number"
-                end
-
-                # This implicitly assumes that 'periodmatch' is distance -- that
-                # is, if there's no value, we assume it's a valid value.
-                return unless @resource[:periodmatch]
-
-                if value != 1 and @resource[:periodmatch] != :distance
-                    raise Puppet::Error,
-                        "Repeat must be 1 unless periodmatch is 'distance', not '%s'" %
-                            @resource[:periodmatch]
-                end
-            end
-
-            munge do |value|
-                unless value.is_a?(Integer)
-                    value = Integer(value)
-                end
-
-                value
-            end
-
-            def match?(previous, now)
-                true
-            end
-        end
-
-        def self.instances
-            []
-        end
-
-        def self.mkdefaultschedules
-            return [] if self["puppet"]
-
-            result = []
-            Puppet.debug "Creating default schedules"
-            result << self.create(
-                :name => "puppet",
-                :period => :hourly,
-                :repeat => "2"
-            )
-
-            # And then one for every period
-            @parameters.find { |p| p.name == :period }.values.each { |value|
-                unless self[value.to_s]
-                    result << self.create(
-                        :name => value.to_s,
-                        :period => value
-                    )
-                end
-            }
-
-            result
-        end
-
-        def match?(previous = nil, now = nil)
-
-            # If we've got a value, then convert it to a Time instance
-            if previous
-                previous = Time.at(previous)
-            end
-
-            now ||= Time.now
-
-            # Pull them in order
-            self.class.allattrs.each { |param|
-                if @parameters.include?(param) and
-                    @parameters[param].respond_to?(:match?)
-                    return false unless @parameters[param].match?(previous, now)
-                end
-            }
-
-            # If we haven't returned false, then return true; in other words,
-            # any provided schedules need to all match
-            return true
-        end
-    end
-end
-
diff --git a/lib/puppet/type/selboolean.rb b/lib/puppet/type/selboolean.rb
deleted file mode 100644
index b1f12ca..0000000
--- a/lib/puppet/type/selboolean.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Simple module for manageing SELinux booleans
-#
-
-module Puppet
-    newtype(:selboolean) do
-        @doc = "Manages SELinux booleans on systems with SELinux support.  The supported booleans
-            are any of the ones found in /selinux/booleans/."
-
-        newparam(:name) do
-            desc "The name of the SELinux boolean to be managed."
-            isnamevar
-        end
-
-        newproperty(:value) do
-            desc "Whether the the SELinux boolean should be enabled or disabled."
-            newvalue(:on)
-            newvalue(:off)
-        end
-
-        newparam(:persistent) do
-            desc "If set true, SELinux booleans will be written to disk and persist accross reboots.
-                The default is ``false``."
-
-            defaultto :false
-            newvalues(:true, :false)
-        end
-
-    end
-end
-
diff --git a/lib/puppet/type/selmodule.rb b/lib/puppet/type/selmodule.rb
deleted file mode 100644
index 883cd95..0000000
--- a/lib/puppet/type/selmodule.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Simple module for manageing SELinux policy modules
-#
-
-Puppet::Type.newtype(:selmodule) do
-    @doc = "Manages loading and unloading of SELinux policy modules
-        on the system.  Requires SELinux support.  See man semodule(8)
-        for more information on SELinux policy modules."
-
-    ensurable
-
-    newparam(:name) do
-        desc "The name of the SELinux policy to be managed.  You should not
-            include the customary trailing .pp extension."
-        isnamevar
-    end
-
-    newparam(:selmoduledir) do
-
-        desc "The directory to look for the compiled pp module file in.
-            Currently defaults to /usr/share/selinux/targeted.  If selmodulepath
-            is not specified the module will be looked for in this directory in a
-            in a file called NAME.pp, where NAME is the value of the name parameter."
-
-        defaultto "/usr/share/selinux/targeted"
-    end
-
-    newparam(:selmodulepath) do
-
-        desc "The full path to the compiled .pp policy module.  You only need to use
-            this if the module file is not in the directory pointed at by selmoduledir."
-
-    end
-
-    newproperty(:syncversion) do
-
-        desc "If set to ``true``, the policy will be reloaded if the
-        version found in the on-disk file differs from the loaded
-        version.  If set to ``false`` (the default) the the only check
-        that will be made is if the policy is loaded at all or not."
-
-        newvalue(:true)
-        newvalue(:false)
-    end
-
-    autorequire(:file) do
-        if self[:selmodulepath]
-            [self[:selmodulepath]]
-        else
-            ["#{self[:selmoduledir]}/#{self[:name]}.pp"]
-        end       
-    end
-end
-
diff --git a/lib/puppet/type/service.rb b/lib/puppet/type/service.rb
deleted file mode 100644
index 560d81b..0000000
--- a/lib/puppet/type/service.rb
+++ /dev/null
@@ -1,194 +0,0 @@
-# This is our main way of managing processes right now.
-#
-# a service is distinct from a process in that services
-# can only be managed through the interface of an init script
-# which is why they have a search path for initscripts and such
-
-module Puppet
-
-    newtype(:service) do
-        @doc = "Manage running services.  Service support unfortunately varies
-            widely by platform -- some platforms have very little if any
-            concept of a running service, and some have a very codified and
-            powerful concept.  Puppet's service support will generally be able
-            to make up for any inherent shortcomings (e.g., if there is no
-            'status' command, then Puppet will look in the process table for a
-            command matching the service name), but the more information you
-            can provide the better behaviour you will get.  Or, you can just
-            use a platform that has very good service support.
-	    
-            Note that if a ``service`` receives an event from another resource,
-            the service will get restarted. The actual command to restart the
-            service depends on the platform. You can provide a special command
-            for restarting with the ``restart`` attribute."
-        
-        feature :refreshable, "The provider can restart the service.",
-            :methods => [:restart]
-        
-        feature :enableable, "The provider can enable and disable the service",
-            :methods => [:disable, :enable, :enabled?]
-
-        feature :controllable, "The provider uses a control variable."
-
-        newproperty(:enable, :required_features => :enableable) do
-            desc "Whether a service should be enabled to start at boot.
-                This property behaves quite differently depending on the platform;
-                wherever possible, it relies on local tools to enable or disable
-                a given service."
-
-            newvalue(:true, :event => :service_enabled) do
-                provider.enable
-            end
-
-            newvalue(:false, :event => :service_disabled) do
-                provider.disable
-            end
-
-            def retrieve
-                return provider.enabled?
-            end
-        end
-
-        # Handle whether the service should actually be running right now.
-        newproperty(:ensure) do
-            desc "Whether a service should be running."
-
-            newvalue(:stopped, :event => :service_stopped) do
-                provider.stop
-            end
-
-            newvalue(:running, :event => :service_started) do
-                provider.start
-            end
-
-            aliasvalue(:false, :stopped)
-            aliasvalue(:true, :running)
-
-            def retrieve
-                return provider.status
-            end
-
-            def sync
-                event = super()
-
-                if property = @resource.property(:enable)
-                    val = property.retrieve
-                    property.sync unless property.insync?(val)
-                end
-
-                return event
-            end
-        end
-
-        newparam(:binary) do
-            desc "The path to the daemon.  This is only used for
-                systems that do not support init scripts.  This binary will be
-                used to start the service if no ``start`` parameter is
-                provided."
-        end
-
-        newparam(:hasstatus) do
-            desc "Declare the the service's init script has a
-                functional status command.  Based on testing, it was found
-                that a large number of init scripts on different platforms do
-                not support any kind of status command; thus, you must specify
-                manually whether the service you are running has such a
-                command (or you can specify a specific command using the
-                ``status`` parameter).
-                
-                If you do not specify anything, then the service name will be
-                looked for in the process table."
-
-            newvalues(:true, :false)
-        end
-        newparam(:name) do
-            desc "The name of the service to run.  This name is used to find
-                the service in whatever service subsystem it is in."
-            isnamevar
-        end
-
-        newparam(:path) do
-            desc "The search path for finding init scripts.  Multiple values should
-                be separated by colons or provided as an array."
-
-            munge do |value|
-                value = [value] unless value.is_a?(Array)
-                # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-                # It affects stand-alone blocks, too.
-                paths = value.flatten.collect { |p| x = p.split(":") }.flatten.find_all do |path|
-                    if FileTest.directory?(path)
-                        true
-                    else
-                        if FileTest.exist?(path) and ! FileTest.directory?(path)
-                            @resource.debug "Search path %s is not a directory" % [path]
-                        else
-                            @resource.debug("Search path %s does not exist" % [path])
-                        end
-                        false
-                    end
-                end
-
-                paths
-            end
-
-            defaultto { provider.class.defpath if provider.class.respond_to?(:defpath) }
-        end
-        newparam(:pattern) do
-            desc "The pattern to search for in the process table.
-                This is used for stopping services on platforms that do not
-                support init scripts, and is also used for determining service
-                status on those service whose init scripts do not include a status
-                command.
-                
-                If this is left unspecified and is needed to check the status
-                of a service, then the service name will be used instead.
-                
-                The pattern can be a simple string or any legal Ruby pattern."
-
-            defaultto { @resource[:binary] || @resource[:name] }
-        end
-        newparam(:restart) do
-            desc "Specify a *restart* command manually.  If left
-                unspecified, the service will be stopped and then started."
-        end
-        newparam(:start) do
-            desc "Specify a *start* command manually.  Most service subsystems
-                support a ``start`` command, so this will not need to be
-                specified."
-        end
-        newparam(:status) do
-            desc "Specify a *status* command manually.  If left
-                unspecified, the status method will be determined
-                automatically, usually by looking for the service in the
-                process table."
-        end
-
-        newparam(:stop) do
-            desc "Specify a *stop* command manually."
-        end
-
-        newparam(:control) do
-            desc "The control variable used to manage services (originally for HP-UX).
-                Defaults to the upcased service name plus ``START`` replacing dots with
-                underscores, for those providers that support the ``controllable`` feature."
-            defaultto { resource.name.gsub(".","_").upcase + "_START" if resource.provider.controllable? }
-        end
-
-        newparam :hasrestart do
-            desc "Specify that an init script has a ``restart`` option.  Otherwise,
-                the init script's ``stop`` and ``start`` methods are used."
-            newvalues(:true, :false)
-        end
-
-        # Basically just a synonym for restarting.  Used to respond
-        # to events.
-        def refresh
-            # Only restart if we're actually running
-            if (@parameters[:ensure] || newattr(:ensure)).retrieve == :running
-                provider.restart
-            else
-                debug "Skipping restart; service is not running"
-            end
-        end
-    end
-end
diff --git a/lib/puppet/type/ssh_authorized_key.rb b/lib/puppet/type/ssh_authorized_key.rb
deleted file mode 100644
index 4afca1c..0000000
--- a/lib/puppet/type/ssh_authorized_key.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-module Puppet
-    newtype(:ssh_authorized_key) do
-        @doc = "Manages SSH authorized keys. Currently only type 2 keys are
-        supported."
-
-        ensurable
-
-        newparam(:name) do
-            desc "The SSH key comment."
-
-            isnamevar
-        end
-
-        newproperty(:type) do
-            desc "The encryption type used: ssh-dss or ssh-rsa."
-
-            newvalue("ssh-dss")
-            newvalue("ssh-rsa")
-
-            aliasvalue(:dsa, "ssh-dss")
-            aliasvalue(:rsa, "ssh-rsa")
-        end
-
-        newproperty(:key) do
-            desc "The key itself; generally a long string of hex digits."
-        end
-
-        newproperty(:user) do
-            desc "The user account in which the SSH key should be installed."
-        end
-
-        newproperty(:target) do
-            desc "The file in which to store the SSH key."
-        end
-
-        newproperty(:options, :array_matching => :all) do
-            desc "Key options, see sshd(8) for possible values. Multiple values 
-                  should be specified as an array."
-
-            defaultto do :absent end
-        end
-
-        autorequire(:user) do
-            if should(:user)
-                should(:user)
-            end
-        end
-
-        validate do
-            unless should(:target) or should(:user)
-                raise Puppet::Error, "Attribute 'user' or 'target' is mandatory"
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/type/sshkey.rb b/lib/puppet/type/sshkey.rb
deleted file mode 100755
index c2bdd39..0000000
--- a/lib/puppet/type/sshkey.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-module Puppet
-    newtype(:sshkey) do
-        @doc = "Installs and manages ssh host keys.  At this point, this type
-            only knows how to install keys into /etc/ssh/ssh_known_hosts, and
-            it cannot manage user authorized keys yet."
-        
-        ensurable
-
-        newproperty(:type) do
-            desc "The encryption type used.  Probably ssh-dss or ssh-rsa."
-            
-            newvalue("ssh-dss")
-            newvalue("ssh-rsa")
-            aliasvalue(:dsa, "ssh-dss")
-            aliasvalue(:rsa, "ssh-rsa")
-        end
-
-        newproperty(:key) do
-            desc "The key itself; generally a long string of hex digits."
-        end
-
-        # FIXME This should automagically check for aliases to the hosts, just
-        # to see if we can automatically glean any aliases.
-        newproperty(:alias) do
-            desc "Any alias the host might have.  Multiple values must be
-                specified as an array.  Note that this parameter has the same name
-                as one of the metaparams; using this parameter to set aliases will
-                make those aliases available in your Puppet scripts."
-
-            attr_accessor :meta
-
-            def insync?(is)
-                is == @should
-            end
-            # We actually want to return the whole array here, not just the first
-            # value.
-            def should
-                if defined? @should
-                    return @should
-                else
-                    return nil
-                end
-            end
-
-            validate do |value|
-                if value =~ /\s/
-                    raise Puppet::Error, "Aliases cannot include whitespace"
-                end
-                if value =~ /,/
-                    raise Puppet::Error, "Aliases cannot include whitespace"
-                end
-            end
-        end
-
-        newparam(:name) do
-            desc "The host name that the key is associated with."
-
-            isnamevar
-        end
-
-        newproperty(:target) do
-            desc "The file in which to store the ssh key.  Only used by
-                the ``parsed`` provider."
-
-            defaultto { if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
-                    @resource.class.defaultprovider.default_target
-                else
-                    nil
-                end
-            }
-        end
-    end
-end
-
diff --git a/lib/puppet/type/tidy.rb b/lib/puppet/type/tidy.rb
deleted file mode 100755
index fe8bde9..0000000
--- a/lib/puppet/type/tidy.rb
+++ /dev/null
@@ -1,303 +0,0 @@
-module Puppet
-    newtype(:tidy, :parent => Puppet.type(:file)) do
-        @doc = "Remove unwanted files based on specific criteria.  Multiple
-            criteria are OR'd together, so a file that is too large but is not
-            old enough will still get tidied."
-
-        newparam(:path) do
-            desc "The path to the file or directory to manage.  Must be fully
-                qualified."
-            isnamevar
-        end
-
-        newparam(:matches) do
-            desc "One or more file glob patterns, which restrict the list of
-                files to be tidied to those whose basenames match at least one
-                of the patterns specified.  Multiple patterns can be specified
-                using an array."
-        end
-
-        copyparam(Puppet.type(:file), :backup)
-        
-        newproperty(:ensure) do
-            desc "An internal attribute used to determine which files should be removed."
-
-            @nodoc = true
-            
-            TATTRS = [:age, :size]
-            
-            defaultto :anything # just so we always get this property
-
-            def change_to_s(currentvalue, newvalue)
-                start = "Tidying"
-                if @out.include?(:age)
-                    start += ", older than %s seconds" % @resource.should(:age)
-                end
-                if @out.include?(:size)
-                    start += ", larger than %s bytes" % @resource.should(:size)
-                end
-
-                start
-            end
-
-            def insync?(is)
-                if is.is_a?(Symbol)
-                    if [:absent, :notidy].include?(is)
-                        return true
-                    else
-                        return false
-                    end
-                else
-                    @out = []
-                    if @resource[:matches]
-                        basename = File.basename(@resource[:path])
-                        flags = File::FNM_DOTMATCH | File::FNM_PATHNAME
-                        unless @resource[:matches].any? {|pattern| File.fnmatch(pattern, basename, flags) }
-                            self.debug "No patterns specified match basename, skipping"
-                            return true
-                        end
-                    end
-                    TATTRS.each do |param|
-                        if property = @resource.property(param)
-                            self.debug "No is value for %s", [param] if is[property].nil?
-                            unless property.insync?(is[property])
-                                @out << param
-                            end
-                        end
-                    end
-                    
-                    if @out.length > 0
-                        return false
-                    else
-                        return true
-                    end
-                end
-            end
-            
-            def retrieve
-                stat = nil
-                unless stat = @resource.stat
-                    return { self => :absent}
-                end
-                
-                if stat.ftype == "directory" and ! @resource[:rmdirs]
-                    return {self => :notidy}
-                end
-
-                allprops = TATTRS.inject({}) { |prophash, param|
-                    if property = @resource.property(param)
-                        prophash[property] = property.assess(stat)
-                    end
-                    prophash
-                }
-                return { self => allprops } 
-            end
-
-            def sync
-                file = @resource[:path]
-                case File.lstat(file).ftype
-                when "directory":
-                    if @resource[:rmdirs]
-                        subs = Dir.entries(@resource[:path]).reject { |d|
-                            d == "." or d == ".."
-                        }.length
-                        if subs > 0
-                            self.info "%s has %s children; not tidying" %
-                                [@resource[:path], subs]
-                            self.info Dir.entries(@resource[:path]).inspect
-                        else
-                            Dir.rmdir(@resource[:path])
-                        end
-                    else
-                        self.debug "Not tidying directories"
-                        return nil
-                    end
-                when "file":
-                    @resource.handlebackup(file)
-                    File.unlink(file)
-                when "link":
-                    File.unlink(file)
-                else
-                    self.fail "Cannot tidy files of type %s" %
-                        File.lstat(file).ftype
-                end
-
-                return :file_tidied
-            end
-        end
-
-        newproperty(:age) do
-            desc "Tidy files whose age is equal to or greater than
-                the specified time.  You can choose seconds, minutes,
-                hours, days, or weeks by specifying the first letter of any
-                of those words (e.g., '1w')."
-
-            @@ageconvertors = {
-                :s => 1,
-                :m => 60
-            }
-
-            @@ageconvertors[:h] = @@ageconvertors[:m] * 60
-            @@ageconvertors[:d] = @@ageconvertors[:h] * 24
-            @@ageconvertors[:w] = @@ageconvertors[:d] * 7
-
-            def assess(stat)
-                type = nil
-                if stat.ftype == "directory"
-                    type = :mtime
-                else
-                    type = @resource[:type] || :atime
-                end
-                
-                return stat.send(type).to_i
-            end
-
-            def convert(unit, multi)
-                if num = @@ageconvertors[unit]
-                    return num * multi
-                else
-                    self.fail "Invalid age unit '%s'" % unit
-                end
-            end
-
-            def insync?(is)
-                if (Time.now.to_i - is) > self.should
-                    return false
-                end
-
-                true
-            end
-
-            munge do |age|
-                unit = multi = nil
-                case age
-                when /^([0-9]+)(\w)\w*$/:
-                    multi = Integer($1)
-                    unit = $2.downcase.intern
-                when /^([0-9]+)$/:
-                    multi = Integer($1)
-                    unit = :d
-                else
-                    self.fail "Invalid tidy age %s" % age
-                end
-
-                convert(unit, multi)
-            end
-        end
-
-        newproperty(:size) do
-            desc "Tidy files whose size is equal to or greater than
-                the specified size.  Unqualified values are in kilobytes, but
-                *b*, *k*, and *m* can be appended to specify *bytes*, *kilobytes*,
-                and *megabytes*, respectively.  Only the first character is
-                significant, so the full word can also be used."
-
-            @@sizeconvertors = {
-                :b => 0,
-                :k => 1,
-                :m => 2,
-                :g => 3
-            }
-
-            # Retrieve the size from a File::Stat object
-            def assess(stat)
-                return stat.size
-            end
-
-            def convert(unit, multi)
-                if num = @@sizeconvertors[unit]
-                    result = multi
-                    num.times do result *= 1024 end
-                    return result
-                else
-                    self.fail "Invalid size unit '%s'" % unit
-                end
-            end
-            
-            def insync?(is)
-                if is > self.should
-                    return false
-                end
-
-                true
-            end
-            
-            munge do |size|
-                case size
-                when /^([0-9]+)(\w)\w*$/:
-                    multi = Integer($1)
-                    unit = $2.downcase.intern
-                when /^([0-9]+)$/:
-                    multi = Integer($1)
-                    unit = :k
-                else
-                    self.fail "Invalid tidy size %s" % age
-                end
-
-                convert(unit, multi)
-            end
-        end
-
-        newparam(:type) do
-            desc "Set the mechanism for determining age."
-            
-            newvalues(:atime, :mtime, :ctime)
-
-            defaultto :atime
-        end
-
-        newparam(:recurse) do
-            desc "If target is a directory, recursively descend
-                into the directory looking for files to tidy."
-        end
-
-        newparam(:rmdirs) do
-            desc "Tidy directories in addition to files; that is, remove
-                directories whose age is older than the specified criteria.
-                This will only remove empty directories, so all contained
-                files must also be tidied before a directory gets removed."
-        end
-        
-        # Erase PFile's validate method
-        validate do
-        end
-
-        def self.instances
-            []
-        end
-
-        @depthfirst = true
-
-        def initialize(hash)
-            super
-
-            unless  @parameters.include?(:age) or
-                    @parameters.include?(:size)
-                unless FileTest.directory?(self[:path])
-                    # don't do size comparisons for directories
-                    self.fail "Tidy must specify size, age, or both"
-                end
-            end
-
-            # only allow backing up into filebuckets
-            unless self[:backup].is_a? Puppet::Network::Client.dipper
-                self[:backup] = false
-            end
-        end
-        
-        def retrieve
-            # Our ensure property knows how to retrieve everything for us.
-            if obj = @parameters[:ensure] 
-                return obj.retrieve
-            else
-                return {}
-            end
-        end
-        
-        # Hack things a bit so we only ever check the ensure property.
-        def properties
-            []
-        end
-    end
-end
-
diff --git a/lib/puppet/type/user.rb b/lib/puppet/type/user.rb
deleted file mode 100755
index 929e45d..0000000
--- a/lib/puppet/type/user.rb
+++ /dev/null
@@ -1,364 +0,0 @@
-require 'etc'
-require 'facter'
-require 'puppet/property/list'
-require 'puppet/property/keyvalue'
-
-module Puppet
-    newtype(:user) do
-        @doc = "Manage users.  This type is mostly built to manage system
-            users, so it is lacking some features useful for managing normal
-            users.
-            
-            This resource type uses the prescribed native tools for creating
-            groups and generally uses POSIX APIs for retrieving information
-            about them.  It does not directly modify /etc/passwd or anything."
-
-        feature :allows_duplicates,
-            "The provider supports duplicate users with the same UID."
-
-        feature :manages_homedir,
-            "The provider can create and remove home directories."
-
-        feature :manages_passwords,
-            "The provider can modify user passwords, by accepting a password
-            hash."
-
-        feature :manages_solaris_rbac,
-            "The provider can manage roles and normal users"
-
-        newproperty(:ensure, :parent => Puppet::Property::Ensure) do
-            newvalue(:present, :event => :user_created) do
-                provider.create
-            end
-
-            newvalue(:absent, :event => :user_removed) do
-                provider.delete
-            end
-
-            newvalue(:role, :event => :role_created, :required_features => :manages_solaris_rbac) do
-                provider.create_role
-            end
-
-            desc "The basic state that the object should be in."
-
-            # If they're talking about the thing at all, they generally want to
-            # say it should exist.
-            defaultto do
-                if @resource.managed?
-                    :present
-                else
-                    nil
-                end
-            end
-
-            def retrieve
-                if provider.exists?
-                    if provider.respond_to?(:is_role?) and provider.is_role?
-                        return :role
-                    else
-                        return :present
-                    end
-                else
-                    return :absent
-                end
-            end
-        end
-
-        newproperty(:uid) do
-            desc "The user ID.  Must be specified numerically.  For new users
-                being created, if no user ID is specified then one will be
-                chosen automatically, which will likely result in the same user
-                having different IDs on different systems, which is not
-                recommended.  This is especially noteworthy if you use Puppet
-                to manage the same user on both Darwin and other platforms,
-                since Puppet does the ID generation for you on Darwin, but the
-                tools do so on other platforms."
-
-            munge do |value|
-                case value
-                when String
-                    if value =~ /^[-0-9]+$/
-                        value = Integer(value)
-                    end
-                end
-
-                return value
-            end
-        end
-
-        newproperty(:gid) do
-            desc "The user's primary group.  Can be specified numerically or
-                by name."
-
-            munge do |value|
-                if value.is_a?(String) and value =~ /^[-0-9]+$/
-                    Integer(value)
-                else
-                    value
-                end
-            end
-
-            def sync
-                found = false
-                @should.each do |value|
-                    if number = Puppet::Util.gid(value)
-                        provider.gid = number
-                        found = true
-                        break
-                    end
-                end
-
-                fail "Could not find group(s) %s" % @should.join(",") unless found
-            end
-        end
-
-        newproperty(:comment) do
-            desc "A description of the user.  Generally is a user's full name."
-        end
-
-        newproperty(:home) do
-            desc "The home directory of the user.  The directory must be created
-                separately and is not currently checked for existence."
-        end
-
-        newproperty(:shell) do
-            desc "The user's login shell.  The shell must exist and be
-                executable."
-        end
-
-        newproperty(:password, :required_features => :manages_passwords) do
-            desc "The user's password, in whatever encrypted format the local machine requires. Be sure to enclose any value that includes a dollar sign ($) in single quotes (\')."
-
-            def change_to_s(currentvalue, newvalue)
-                if currentvalue == :absent
-                  return "created password"
-                else
-                  return "changed password"
-                end
-            end
-        end
-
-
-        newproperty(:groups, :parent => Puppet::Property::List) do
-            desc "The groups of which the user is a member.  The primary
-                group should not be listed.  Multiple groups should be
-                specified as an array."
-
-            validate do |value|
-                if value =~ /^\d+$/
-                    raise ArgumentError, "Group names must be provided, not numbers"
-                end
-                if value.include?(",")
-                    raise ArgumentError, "Group names must be provided as an array, not a comma-separated list"
-                end
-            end
-        end
-
-        newparam(:name) do
-            desc "User name.  While limitations are determined for
-                each operating system, it is generally a good idea to keep to
-                the degenerate 8 characters, beginning with a letter."
-            isnamevar
-        end
-
-        newparam(:membership) do
-            desc "Whether specified groups should be treated as the only groups
-                of which the user is a member or whether they should merely
-                be treated as the minimum membership list."
-
-            newvalues(:inclusive, :minimum)
-
-            defaultto :minimum
-        end
-
-        newparam(:allowdupe, :boolean => true) do
-            desc "Whether to allow duplicate UIDs."
-
-            newvalues(:true, :false)
-
-            defaultto false
-        end
-
-        newparam(:managehome, :boolean => true) do
-            desc "Whether to manage the home directory when managing the user."
-
-            newvalues(:true, :false)
-
-            defaultto false
-
-            validate do |val|
-                if val.to_s == "true"
-                    unless provider.class.manages_homedir?
-                        raise ArgumentError, "User provider %s can not manage home directories" % provider.class.name
-                    end
-                end
-            end
-        end
-
-        # Autorequire the group, if it's around
-        autorequire(:group) do
-            autos = []
-
-            if obj = @parameters[:gid] and groups = obj.shouldorig
-                groups = groups.collect { |group|
-                    if group =~ /^\d+$/
-                        Integer(group)
-                    else
-                        group
-                    end
-                }
-                groups.each { |group|
-                    case group
-                    when Integer:
-                        if obj = Puppet.type(:group).find { |gobj|
-                            gobj.should(:gid) == group
-                        }
-                            autos << obj
-
-                        end
-                    else
-                        autos << group
-                    end
-                }
-            end
-
-            if obj = @parameters[:groups] and groups = obj.should
-                autos += groups.split(",")
-            end
-
-            autos
-        end
-
-        def retrieve
-            absent = false
-            properties().inject({}) { |prophash, property|
-                current_value = :absent
-
-                if absent
-                    prophash[property] = :absent
-                else
-                    current_value = property.retrieve
-                    prophash[property] = current_value
-                end
-
-                if property.name == :ensure and current_value == :absent
-                    absent = true
-                end
-                prophash
-            }
-        end
-
-        newproperty(:roles, :parent => Puppet::Property::List, :required_features => :manages_solaris_rbac) do
-            desc "The roles the user has.  Multiple roles should be
-                specified as an array."
-
-            def membership
-                :role_membership
-            end
-
-            validate do |value|
-                if value =~ /^\d+$/
-                    raise ArgumentError, "Role names must be provided, not numbers"
-                end
-                if value.include?(",")
-                    raise ArgumentError, "Role names must be provided as an array, not a comma-separated list"
-                end
-            end
-        end
-
-        newparam(:role_membership) do
-            desc "Whether specified roles should be treated as the only roles
-                of which the user is a member or whether they should merely
-                be treated as the minimum membership list."
-
-            newvalues(:inclusive, :minimum)
-
-            defaultto :minimum
-        end
-
-        newproperty(:auths, :parent => Puppet::Property::List, :required_features => :manages_solaris_rbac) do
-            desc "The auths the user has.  Multiple auths should be
-                specified as an array."
-
-            def membership
-                :auth_membership
-            end
-
-            validate do |value|
-                if value =~ /^\d+$/
-                    raise ArgumentError, "Auth names must be provided, not numbers"
-                end
-                if value.include?(",")
-                    raise ArgumentError, "Auth names must be provided as an array, not a comma-separated list"
-                end
-            end
-        end
-
-        newparam(:auth_membership) do
-            desc "Whether specified auths should be treated as the only auths
-                of which the user is a member or whether they should merely
-                be treated as the minimum membership list."
-
-            newvalues(:inclusive, :minimum)
-
-            defaultto :minimum
-        end
-
-        newproperty(:profiles, :parent => Puppet::Property::List, :required_features => :manages_solaris_rbac) do
-            desc "The profiles the user has.  Multiple profiles should be
-                specified as an array."
-
-            def membership
-                :profile_membership
-            end
-
-            validate do |value|
-                if value =~ /^\d+$/
-                    raise ArgumentError, "Profile names must be provided, not numbers"
-                end
-                if value.include?(",")
-                    raise ArgumentError, "Profile names must be provided as an array, not a comma-separated list"
-                end
-            end
-        end
-
-        newparam(:profile_membership) do
-            desc "Whether specified roles should be treated as the only roles
-                of which the user is a member or whether they should merely
-                be treated as the minimum membership list."
-
-            newvalues(:inclusive, :minimum)
-
-            defaultto :minimum
-        end
-
-        newproperty(:keys, :parent => Puppet::Property::KeyValue, :required_features => :manages_solaris_rbac) do
-            desc "Specify user attributes in an array of keyvalue pairs"
-
-            def membership
-                :key_membership
-            end
-
-            validate do |value|
-                unless value.include?("=")
-                    raise ArgumentError, "key value pairs must be seperated by an ="
-                end
-            end
-        end
-
-        newparam(:key_membership) do
-            desc "Whether specified key value pairs should be treated as the only attributes
-                of the user or whether they should merely
-                be treated as the minimum list."
-
-            newvalues(:inclusive, :minimum)
-
-            defaultto :minimum
-        end
-
-        newproperty(:project, :required_features => :manages_solaris_rbac) do
-            desc "The name of the project associated with a user"
-        end
-    end
-end
-
diff --git a/lib/puppet/type/yumrepo.rb b/lib/puppet/type/yumrepo.rb
deleted file mode 100644
index 15e0319..0000000
--- a/lib/puppet/type/yumrepo.rb
+++ /dev/null
@@ -1,368 +0,0 @@
-# Description of yum repositories
-
-require 'puppet/util/inifile'
-
-module Puppet
-    # A property for one entry in a .ini-style file
-    class IniProperty < Puppet::Property
-        def insync?(is)
-            # A should property of :absent is the same as nil
-            if is.nil? && (should.nil? || should == :absent)
-                return true
-            end
-            return super(is)
-        end
-
-        def sync
-            if insync?(retrieve)
-                result = nil
-            else
-                result = set(self.should)
-                if should == :absent
-                    resource.section[inikey] = nil
-                else
-                    resource.section[inikey] = should
-                end
-            end
-            return result
-        end
-
-        def retrieve
-            return resource.section[inikey]
-        end
-        
-        def inikey
-            name.to_s
-        end
-
-        # Set the key associated with this property to KEY, instead
-        # of using the property's NAME
-        def self.inikey(key)
-            # Override the inikey instance method
-            # Is there a way to do this without resorting to strings ?
-            # Using a block fails because the block can't access
-            # the variable 'key' in the outer scope
-            self.class_eval("def inikey ; \"#{key.to_s}\" ; end")
-        end
-
-    end
-
-    # Doc string for properties that can be made 'absent'
-    ABSENT_DOC="Set this to 'absent' to remove it from the file completely"
-
-    newtype(:yumrepo) do
-        @doc = "The client-side description of a yum repository. Repository
-                configurations are found by parsing /etc/yum.conf and
-                the files indicated by reposdir in that file (see yum.conf(5)
-                for details)
-
-                Most parameters are identical to the ones documented 
-                in yum.conf(5)
-
-                Continuation lines that yum supports for example for the
-                baseurl are not supported. No attempt is made to access
-                files included with the **include** directive"
-
-        class << self
-            attr_accessor :filetype
-            # The writer is only used for testing, there should be no need
-            # to change yumconf in any other context
-            attr_accessor :yumconf
-        end
-
-        self.filetype = Puppet::Util::FileType.filetype(:flat)
-
-        @inifile = nil
-        
-        @yumconf = "/etc/yum.conf"
-
-        # Where to put files for brand new sections
-        @defaultrepodir = nil
-
-        def self.instances
-            l = []
-            check = validproperties
-            clear
-            inifile.each_section do |s|
-                next if s.name == "main"
-                obj = create(:name => s.name, :check => check)
-                current_values = obj.retrieve
-                obj.eachproperty do |property|
-                    if current_values[property].nil?
-                        obj.delete(property.name)
-                    else
-                        property.should = current_values[property]
-                    end
-                end
-                obj.delete(:check)
-                l << obj
-            end
-            l
-        end
-
-        # Return the Puppet::Util::IniConfig::File for the whole yum config
-        def self.inifile
-            if @inifile.nil?
-                @inifile = read()
-                main = @inifile['main']
-                if main.nil?
-                    raise Puppet::Error, "File #{yumconf} does not contain a main section" 
-                end
-                reposdir = main['reposdir'] 
-                reposdir ||= "/etc/yum.repos.d, /etc/yum/repos.d"
-                reposdir.gsub!(/[\n,]/, " ")
-                reposdir.split.each do |dir|
-                    Dir::glob("#{dir}/*.repo").each do |file|
-                        if File.file?(file)
-                            @inifile.read(file)
-                        end
-                    end
-                end
-                reposdir.split.each do |dir|
-                    if File::directory?(dir) && File::writable?(dir)
-                        @defaultrepodir = dir
-                        break
-                    end
-                end
-            end
-            return @inifile
-        end
-
-        # Parse the yum config files. Only exposed for the tests
-        # Non-test code should use self.inifile to get at the
-        # underlying file
-        def self.read
-            result = Puppet::Util::IniConfig::File.new()
-            result.read(yumconf)
-            main = result['main']
-            if main.nil?
-                raise Puppet::Error, "File #{yumconf} does not contain a main section" 
-            end
-            reposdir = main['reposdir']
-            reposdir ||= "/etc/yum.repos.d, /etc/yum/repos.d"
-            reposdir.gsub!(/[\n,]/, " ")
-            reposdir.split.each do |dir|
-                Dir::glob("#{dir}/*.repo").each do |file|
-                    if File.file?(file)
-                        result.read(file)
-                    end
-                end
-            end
-            if @defaultrepodir.nil?
-                reposdir.split.each do |dir|
-                    if File::directory?(dir) && File::writable?(dir)
-                        @defaultrepodir = dir
-                        break
-                    end
-                end
-            end
-            return result
-        end
-
-        # Return the Puppet::Util::IniConfig::Section with name NAME
-        # from the yum config
-        def self.section(name)
-            result = inifile[name]
-            if result.nil?
-                # Brand new section
-                path = yumconf
-                unless @defaultrepodir.nil?
-                    path = File::join(@defaultrepodir, "#{name}.repo")
-                end
-                Puppet::info "create new repo #{name} in file #{path}"
-                result = inifile.add_section(name, path)
-            end
-            return result
-        end
-
-        # Store all modifications back to disk
-        def self.store
-            inifile.store
-        end
-
-        def self.clear
-            @inifile = nil
-            @yumconf = "/etc/yum.conf"
-            @defaultrepodir = nil
-            super
-        end
-
-        # Return the Puppet::Util::IniConfig::Section for this yumrepo resource
-        def section
-            self.class.section(self[:name])
-        end
-
-        def evaluate
-            changes = super
-            # FIXME: Dirty, dirty hack
-            # We amend the go method of the last change to trigger
-            # writing the whole file
-            # A cleaner solution would be to either use the composite
-            # pattern and encapsulate all changes into a change that does
-            # not depend on a property and triggers storing, or insert another
-            # change at the end of changes to trigger storing Both
-            # solutions require that the PropertyChange interface be
-            # abstracted so that it can work with a change that is not
-            # directly backed by a Property
-            unless changes.empty?
-                class << changes[-1]
-                    def go
-                        result = super
-                        self.property.resource.store
-                        return result
-                    end
-                end
-            end
-            return changes
-        end
-
-        # Store modifications to this yumrepo resource back to disk
-        def store
-            self.class.store
-        end
-
-        newparam(:name) do
-            desc "The name of the repository."
-            isnamevar
-        end
-
-        newproperty(:descr, :parent => Puppet::IniProperty) do
-            desc "A human readable description of the repository. 
-                  #{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(/.*/) { }
-            inikey "name"
-        end
-        
-        newproperty(:mirrorlist, :parent => Puppet::IniProperty) do
-            desc "The URL that holds the list of mirrors for this repository.
-                  #{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            # Should really check that it's a valid URL
-            newvalue(/.*/) { }
-        end
-
-        newproperty(:baseurl, :parent => Puppet::IniProperty) do
-            desc "The URL for this repository.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            # Should really check that it's a valid URL
-            newvalue(/.*/) { }
-        end
-        
-        newproperty(:enabled, :parent => Puppet::IniProperty) do
-            desc "Whether this repository is enabled or disabled. Possible 
-                  values are '0', and '1'.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(%r{(0|1)}) { }
-        end
-
-        newproperty(:gpgcheck, :parent => Puppet::IniProperty) do
-            desc "Whether to check the GPG signature on packages installed
-                  from this repository. Possible values are '0', and '1'.
-                  \n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(%r{(0|1)}) { }
-        end
-
-        newproperty(:gpgkey, :parent => Puppet::IniProperty) do
-            desc "The URL for the GPG key with which packages from this
-                  repository are signed.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            # Should really check that it's a valid URL
-            newvalue(/.*/) { }
-        end
-
-        newproperty(:include, :parent => Puppet::IniProperty) do
-            desc "A URL from which to include the config.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            # Should really check that it's a valid URL
-            newvalue(/.*/) { }
-        end
-
-        newproperty(:exclude, :parent => Puppet::IniProperty) do
-            desc "List of shell globs. Matching packages will never be
-                  considered in updates or installs for this repo.
-                  #{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(/.*/) { }
-        end
-
-        newproperty(:includepkgs, :parent => Puppet::IniProperty) do
-            desc "List of shell globs. If this is set, only packages
-                  matching one of the globs will be considered for
-                  update or install.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(/.*/) { }
-        end
-
-        newproperty(:enablegroups, :parent => Puppet::IniProperty) do
-            desc "Determines whether yum will allow the use of
-              package groups for this  repository. Possible 
-              values are '0', and '1'.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(%r{(0|1)}) { }
-        end
-
-        newproperty(:failovermethod, :parent => Puppet::IniProperty) do
-            desc "Either 'roundrobin' or 'priority'.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(%r(roundrobin|priority)) { }
-        end
-
-        newproperty(:keepalive, :parent => Puppet::IniProperty) do
-            desc "Either '1' or '0'. This tells yum whether or not HTTP/1.1 
-              keepalive  should  be  used with this repository.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(%r{(0|1)}) { }
-        end
-
-        newproperty(:timeout, :parent => Puppet::IniProperty) do
-            desc "Number of seconds to wait for a connection before timing 
-                  out.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(%r{[0-9]+}) { }
-        end
-
-        newproperty(:metadata_expire, :parent => Puppet::IniProperty) do
-            desc "Number of seconds after which the metadata will expire.
-                  #{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(%r{[0-9]+}) { }
-        end
-
-        newproperty(:protect, :parent => Puppet::IniProperty) do
-            desc "Enable or disable protection for this repository. Requires 
-                  that the protectbase plugin is installed and enabled.
-                  #{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(%r{(0|1)}) { }
-        end
-
-        newproperty(:priority, :parent => Puppet::IniProperty) do
-            desc "Priority of this repository from 1-99. Requires that
-                  the priorities plugin is installed and enabled.
-                  #{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(%r{[1-9][0-9]?}) { }
-        end
-
-        newproperty(:proxy, :parent => Puppet::IniProperty) do
-            desc "URL to the proxy server for this repository.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            # Should really check that it's a valid URL
-            newvalue(/.*/) { }
-        end
-
-        newproperty(:proxy_username, :parent => Puppet::IniProperty) do
-            desc "Username for this proxy.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(/.*/) { }
-        end
-
-        newproperty(:proxy_password, :parent => Puppet::IniProperty) do
-            desc "Password for this proxy.\n#{ABSENT_DOC}"
-            newvalue(:absent) { self.should = :absent }
-            newvalue(/.*/) { }
-        end
-    end
-end
diff --git a/lib/puppet/type/zone.rb b/lib/puppet/type/zone.rb
deleted file mode 100644
index 7601ec4..0000000
--- a/lib/puppet/type/zone.rb
+++ /dev/null
@@ -1,406 +0,0 @@
-Puppet::Type.newtype(:zone) do
-    @doc = "Solaris zones."
-
-    # These properties modify the zone configuration, and they need to provide
-    # the text separately from syncing it, so all config statements can be rolled
-    # into a single creation statement.
-    class ZoneConfigProperty < Puppet::Property
-        # Perform the config operation.
-        def sync
-            provider.setconfig self.configtext
-        end
-    end
-
-    # Those properties that can have multiple instances.
-    class ZoneMultiConfigProperty < ZoneConfigProperty
-        def configtext
-            list = @should
-            
-            current_value = self.retrieve
-
-            unless current_value.is_a? Symbol
-                if current_value.is_a? Array
-                    list += current_value
-                else
-                    if current_value
-                        list << current_value
-                    end
-                end
-            end
-
-            # Some hackery so we can test whether current_value is an array or a symbol
-            if current_value.is_a? Array
-                tmpis = current_value
-            else
-                if current_value
-                    tmpis = [current_value]
-                else
-                    tmpis = []
-                end
-            end
-
-            rms = []
-            adds = []
-
-            # Collect the modifications to make
-            list.sort.uniq.collect do |obj|
-                # Skip objectories that are configured and should be
-                next if tmpis.include?(obj) and @should.include?(obj)
-
-                if tmpis.include?(obj)
-                    rms << obj
-                else
-                    adds << obj
-                end
-            end
-
-
-            # And then perform all of the removals before any of the adds.
-            (rms.collect { |o| rm(o) } + adds.collect { |o| add(o) }).join("\n")
-        end
-
-        # We want all specified directories to be included.
-        def insync?(current_value)
-            if current_value.is_a? Array and @should.is_a? Array
-                current_value.sort == @should.sort
-            else
-                current_value == @should
-            end
-        end
-    end
-
-    ensurable do
-        desc "The running state of the zone.  The valid states directly reflect
-            the states that ``zoneadm`` provides.  The states are linear,
-            in that a zone must be ``configured`` then ``installed``, and
-            only then can be ``running``.  Note also that ``halt`` is currently
-            used to stop zones."
-
-        @states = {}
-
-        def self.alias_state(values)
-            @state_aliases ||= {}
-            values.each do |nick, name|
-                @state_aliases[nick] = name
-            end
-        end
-
-        def self.newvalue(name, hash)
-            if @parametervalues.is_a? Hash
-                @parametervalues = []
-            end
-
-            @parametervalues << name
-
-            @states[name] = hash
-            hash[:name] = name
-        end
-
-        def self.state_name(name)
-            if other = @state_aliases[name]
-                other
-            else
-                name
-            end
-        end
-
-        newvalue :absent, :down => :destroy
-        newvalue :configured, :up => :configure, :down => :uninstall
-        newvalue :installed, :up => :install, :down => :stop
-        newvalue :running, :up => :start
-
-        alias_state :incomplete => :installed, :ready => :installed, :shutting_down => :running
-
-        defaultto :running
-
-        def self.state_index(value)
-            @parametervalues.index(state_name(value))
-        end
-
-        # Return all of the states between two listed values, exclusive
-        # of the first item.
-        def self.state_sequence(first, second)
-            findex = sindex = nil
-            unless findex = @parametervalues.index(state_name(first))
-                raise ArgumentError, "'%s' is not a valid zone state" % first
-            end
-            unless sindex = @parametervalues.index(state_name(second))
-                raise ArgumentError, "'%s' is not a valid zone state" % first
-            end
-            list = nil
-
-            # Apparently ranges are unidirectional, so we have to reverse
-            # the range op twice.
-            if findex > sindex
-                list = @parametervalues[sindex..findex].collect do |name|
-                    @states[name]
-                end.reverse
-            else
-                list = @parametervalues[findex..sindex].collect do |name|
-                    @states[name]
-                end
-            end
-
-            # The first result is the current state, so don't return it.
-            list[1..-1]
-        end
-
-        def retrieve
-            provider.properties[:ensure]
-        end
-
-        def sync
-            method = nil
-            if up?
-                direction = :up
-            else
-                direction = :down
-            end
-
-            # We need to get the state we're currently in and just call
-            # everything between it and us.
-            self.class.state_sequence(self.retrieve, self.should).each do |state|
-                if method = state[direction]
-                    warned = false
-                    while provider.processing?
-                        unless warned
-                            info "Waiting for zone to finish processing"
-                            warned = true
-                        end
-                        sleep 1
-                    end
-                    provider.send(method)
-                else
-                    raise Puppet::DevError, "Cannot move %s from %s" %
-                        [direction, st[:name]]
-                end
-            end
-
-            return ("zone_" + self.should.to_s).intern
-        end
-
-        # Are we moving up the property tree?
-        def up?
-            current_value = self.retrieve
-            self.class.state_index(current_value) < self.class.state_index(self.should)
-        end
-    end
-
-    newparam(:name) do
-        desc "The name of the zone."
-
-        isnamevar
-    end
-
-    newparam(:id) do
-        desc "The numerical ID of the zone.  This number is autogenerated
-            and cannot be changed."
-    end
-
-    newproperty(:ip, :parent => ZoneMultiConfigProperty) do
-        require 'ipaddr'
-
-        desc "The IP address of the zone.  IP addresses must be specified
-            with the interface, separated by a colon, e.g.: bge0:192.168.0.1.
-            For multiple interfaces, specify them in an array."
-
-        validate do |value|
-            unless value =~ /:/
-                raise ArgumentError,
-                    "IP addresses must specify the interface and the address, separated by a colon."
-            end
-
-            interface, address = value.split(':')
-            
-            begin
-                IPAddr.new(address)
-            rescue ArgumentError
-                raise ArgumentError, "'%s' is an invalid IP address" % address
-            end
-        end
-
-        # Add an interface.
-        def add(str)
-            interface, ip = ipsplit(str)
-            "add net
-set address=#{ip}
-set physical=#{interface}
-end
-"
-        end
-
-        # Convert a string into the component interface and address 
-        def ipsplit(str)
-            interface, address = str.split(':')
-            return interface, address
-        end
-
-        # Remove an interface.
-        def rm(str)
-            interface, ip = ipsplit(str)
-            # Reality seems to disagree with the documentation here; the docs
-            # specify that braces are required, but they're apparently only
-            # required if you're specifying multiple values.
-            "remove net address=#{ip}"
-        end
-    end
-
-    newproperty(:autoboot, :parent => ZoneConfigProperty) do
-        desc "Whether the zone should automatically boot."
-
-        defaultto true
-
-        newvalue(:true) {}
-        newvalue(:false) {}
-
-        def configtext
-            "set autoboot=#{self.should}"
-        end
-    end
-
-    newproperty(:pool, :parent => ZoneConfigProperty) do
-        desc "The resource pool for this zone." 
-
-        def configtext
-            "set pool=#{self.should}"
-        end
-    end
-
-    newproperty(:shares, :parent => ZoneConfigProperty) do
-        desc "Number of FSS CPU shares allocated to the zone."
-
-        def configtext
-            "add rctl\nset name=zone.cpu-shares\nadd value (priv=privileged,limit=#{self.should},action=none)\nend"
-        end
-    end
-
-    newproperty(:inherit, :parent => ZoneMultiConfigProperty) do
-        desc "The list of directories that the zone inherits from the global
-            zone.  All directories must be fully qualified."
-
-        validate do |value|
-            unless value =~ /^\//
-                raise ArgumentError, "Inherited filesystems must be fully qualified"
-            end
-        end
-
-        # Add a directory to our list of inherited directories.
-        def add(dir)
-            "add inherit-pkg-dir\nset dir=#{dir}\nend"
-        end
-
-        def rm(dir)
-            # Reality seems to disagree with the documentation here; the docs
-            # specify that braces are required, but they're apparently only
-            # required if you're specifying multiple values.
-            "remove inherit-pkg-dir dir=#{dir}"
-        end
-
-        def should
-            @should
-        end
-    end
-
-    # Specify the sysidcfg file.  This is pretty hackish, because it's
-    # only used to boot the zone the very first time.
-    newparam(:sysidcfg) do
-        desc %{The text to go into the sysidcfg file when the zone is first
-            booted.  The best way is to use a template::
-                
-                # $templatedir/sysidcfg
-                system_locale=en_US
-                timezone=GMT
-                terminal=xterms
-                security_policy=NONE
-                root_password=&lt;%= password %>
-                timeserver=localhost
-                name_service=DNS {domain_name=&lt;%= domain %>
-                        name_server=&lt;%= nameserver %>}
-                network_interface=primary {hostname=&lt;%= realhostname %>
-                        ip_address=&lt;%= ip %>
-                        netmask=&lt;%= netmask %>
-                        protocol_ipv6=no
-                        default_route=&lt;%= defaultroute %>}
-                nfs4_domain=dynamic
-
-            And then call that::
-
-                zone { myzone:
-                    ip => "bge0:192.168.0.23",
-                    sysidcfg => template(sysidcfg),
-                    path => "/opt/zones/myzone",
-                    realhostname => "fully.qualified.domain.name"
-                }
-
-            The sysidcfg only matters on the first booting of the zone,
-            so Puppet only checks for it at that time.}
-    end
-
-    newparam(:path) do
-        desc "The root of the zone's filesystem.  Must be a fully qualified
-            file name.  If you include '%s' in the path, then it will be
-            replaced with the zone's name.  At this point, you cannot use
-            Puppet to move a zone."
-
-        validate do |value|
-            unless value =~ /^\//
-                raise ArgumentError, "The zone base must be fully qualified"
-            end
-        end
-
-        munge do |value|
-            if value =~ /%s/
-                value % @resource[:name]
-            else
-                value
-            end
-        end
-    end
-
-    newparam(:realhostname) do
-        desc "The actual hostname of the zone."
-    end
-
-    # If Puppet is also managing the base dir or its parent dir, list them
-    # both as prerequisites.
-    autorequire(:file) do
-        if @parameters.include? :path
-            [@parameters[:path].value, File.dirname(@parameters[:path].value)]
-        else
-            nil
-        end
-    end
-
-    def retrieve
-        provider.flush
-        if hash = provider.properties() and hash[:ensure] != :absent
-            result = setstatus(hash)
-            result
-        else
-            # Return all properties as absent.
-            return properties().inject({}) do | prophash, property|
-                prophash[property] = :absent
-                prophash
-            end
-        end
-    end
-
-    # Take the results of a listing and set everything appropriately.
-    def setstatus(hash)
-        prophash = {}
-        hash.each do |param, value|
-            next if param == :name
-            case self.class.attrtype(param)
-            when :property:
-                # Only try to provide values for the properties we're managing
-                if prop = self.property(param)
-                    prophash[prop] = value
-                end
-            else
-                self[param] = value
-            end
-        end
-        return prophash
-    end
-end
-
diff --git a/lib/puppet/util.rb b/lib/puppet/util.rb
deleted file mode 100644
index 59f732d..0000000
--- a/lib/puppet/util.rb
+++ /dev/null
@@ -1,464 +0,0 @@
-# A module to collect utility functions.
-
-require 'sync'
-require 'puppet/external/lock'
-
-module Puppet
-    # A command failed to execute.
-    class ExecutionFailure < Puppet::Error
-    end
-module Util
-    require 'benchmark'
-    
-    require 'puppet/util/posix'
-    extend Puppet::Util::POSIX
-
-    # Create a hash to store the different sync objects.
-    @@syncresources = {}
-
-    # Return the sync object associated with a given resource.
-    def self.sync(resource)
-        @@syncresources[resource] ||= Sync.new
-        return @@syncresources[resource]
-    end
-
-    # Change the process to a different user
-    def self.chuser
-        if Facter["operatingsystem"].value == "Darwin"
-            $stderr.puts "Ruby on darwin is broken; puppetmaster will not set its UID to 'puppet' and must run as root"
-            return
-        end
-        if group = Puppet[:group]
-            group = self.gid(group)
-            unless group
-                raise Puppet::Error, "No such group %s" % Puppet[:group]
-            end
-            unless Puppet::Util::SUIDManager.gid == group
-                begin
-                    Puppet::Util::SUIDManager.egid = group 
-                    Puppet::Util::SUIDManager.gid = group 
-                rescue => detail
-                    Puppet.warning "could not change to group %s: %s" %
-                        [group.inspect, detail]
-                    $stderr.puts "could not change to group %s" % group.inspect
-
-                    # Don't exit on failed group changes, since it's
-                    # not fatal
-                    #exit(74)
-                end
-            end
-        end
-
-        if user = Puppet[:user]
-            user = self.uid(user)
-            unless user
-                raise Puppet::Error, "No such user %s" % Puppet[:user]
-            end
-            unless Puppet::Util::SUIDManager.uid == user
-                begin
-                    Puppet::Util::SUIDManager.uid = user 
-                    Puppet::Util::SUIDManager.euid = user 
-                rescue
-                    $stderr.puts "could not change to user %s" % user
-                    exit(74)
-                end
-            end
-        end
-    end
-
-    # Create a shared lock for reading
-    def self.readlock(file)
-        self.sync(file).synchronize(Sync::SH) do
-            File.open(file) { |f|
-                f.lock_shared { |lf| yield lf }
-            }
-        end
-    end
-
-    # Create an exclusive lock for writing, and do the writing in a
-    # tmp file.
-    def self.writelock(file, mode = 0600)
-        tmpfile = file + ".tmp"
-        unless FileTest.directory?(File.dirname(tmpfile))
-            raise Puppet::DevError, "Cannot create %s; directory %s does not exist" %
-                [file, File.dirname(file)]
-        end
-        self.sync(file).synchronize(Sync::EX) do
-            File.open(file, "w", mode) do |rf|
-                rf.lock_exclusive do |lrf|
-                    File.open(tmpfile, "w", mode) do |tf|
-                        yield tf
-                    end
-                    begin
-                        File.rename(tmpfile, file)
-                    rescue => detail
-                        Puppet.err "Could not rename %s to %s: %s" %
-                            [file, tmpfile, detail]
-                    end
-                end
-            end
-        end
-    end
-
-    # Create instance methods for each of the log levels.  This allows
-    # the messages to be a little richer.  Most classes will be calling this
-    # method.
-    def self.logmethods(klass, useself = true)
-        Puppet::Util::Log.eachlevel { |level|
-            klass.send(:define_method, level, proc { |args|
-                if args.is_a?(Array)
-                    args = args.join(" ")
-                end
-                if useself
-                    Puppet::Util::Log.create(
-                        :level => level,
-                        :source => self,
-                        :message => args
-                    )
-                else
-                    Puppet::Util::Log.create(
-                        :level => level,
-                        :message => args
-                    )
-                end
-            })
-        }
-    end
-
-    # Proxy a bunch of methods to another object.
-    def self.classproxy(klass, objmethod, *methods)
-        classobj = class << klass; self; end
-        methods.each do |method|
-            classobj.send(:define_method, method) do |*args|
-                obj = self.send(objmethod)
-
-                obj.send(method, *args)
-            end
-        end
-    end
-
-    # Proxy a bunch of methods to another object.
-    def self.proxy(klass, objmethod, *methods)
-        methods.each do |method|
-            klass.send(:define_method, method) do |*args|
-                obj = self.send(objmethod)
-
-                obj.send(method, *args)
-            end
-        end
-    end
-
-    # XXX this should all be done using puppet objects, not using
-    # normal mkdir
-    def self.recmkdir(dir,mode = 0755)
-        if FileTest.exist?(dir)
-            return false
-        else
-            tmp = dir.sub(/^\//,'')
-            path = [File::SEPARATOR]
-            tmp.split(File::SEPARATOR).each { |dir|
-                path.push dir
-                if ! FileTest.exist?(File.join(path))
-                    Dir.mkdir(File.join(path), mode)
-                elsif FileTest.directory?(File.join(path))
-                    next
-                else FileTest.exist?(File.join(path))
-                    raise "Cannot create %s: basedir %s is a file" %
-                        [dir, File.join(path)]
-                end
-            }
-            return true
-        end
-    end
-
-    # Execute a given chunk of code with a new umask.
-    def self.withumask(mask)
-        cur = File.umask(mask)
-
-        begin
-            yield
-        ensure
-            File.umask(cur)
-        end
-    end
-
-    def benchmark(*args)
-        msg = args.pop
-        level = args.pop
-        object = nil
-
-        if args.empty?
-            if respond_to?(level)
-                object = self
-            else
-                object = Puppet
-            end
-        else
-            object = args.pop
-        end
-
-        unless level
-            raise Puppet::DevError, "Failed to provide level to :benchmark"
-        end
-
-        unless level == :none or object.respond_to? level
-            raise Puppet::DevError, "Benchmarked object does not respond to %s" % level
-        end
-
-        # Only benchmark if our log level is high enough
-        if level != :none and Puppet::Util::Log.sendlevel?(level)
-            result = nil
-            seconds = Benchmark.realtime {
-                yield
-            }
-            object.send(level, msg + (" in %0.2f seconds" % seconds))
-            return seconds
-        else
-            yield
-        end
-    end
-
-    def binary(bin)
-        if bin =~ /^\//
-            if FileTest.file? bin and FileTest.executable? bin
-                return bin
-            else
-                return nil
-            end
-        else
-            x = %x{which #{bin} 2>/dev/null}.chomp
-            if x == ""
-                return nil
-            else
-                return x
-            end
-        end
-    end
-    module_function :binary
-
-    # Execute the provided command in a pipe, yielding the pipe object.
-    def execpipe(command, failonfail = true)
-        if respond_to? :debug
-            debug "Executing '%s'" % command
-        else
-            Puppet.debug "Executing '%s'" % command
-        end
-
-        output = open("| #{command} 2>&1") do |pipe|
-            yield pipe
-        end
-
-        if failonfail
-            unless $? == 0
-                raise ExecutionFailure, output
-            end
-        end
-
-        return output
-    end
-
-    def execfail(command, exception)
-        begin
-            output = execute(command)
-            return output
-        rescue ExecutionFailure
-            raise exception, output
-        end
-    end
-
-    # Execute the desired command, and return the status and output.
-    # def execute(command, failonfail = true, uid = nil, gid = nil)
-    def execute(command, arguments = {:failonfail => true})
-        if command.is_a?(Array)
-            command = command.flatten.collect { |i| i.to_s }
-            str = command.join(" ")
-        else
-            # We require an array here so we know where we're incorrectly
-            # using a string instead of an array.  Once everything is
-            # switched to an array, we might relax this requirement.
-            raise ArgumentError, "Must pass an array to execute()"
-        end
-
-        if respond_to? :debug
-            debug "Executing '%s'" % str
-        else
-            Puppet.debug "Executing '%s'" % str
-        end
-        
-        if arguments[:uid]
-            arguments[:uid] = Puppet::Util::SUIDManager.convert_xid(:uid, arguments[:uid])
-        end
-        if arguments[:gid]
-            arguments[:gid] = Puppet::Util::SUIDManager.convert_xid(:gid, arguments[:gid])
-        end
-        
-        @@os ||= Facter.value(:operatingsystem)
-        output = nil
-        child_pid, child_status = nil
-        # There are problems with read blocking with badly behaved children
-        # read.partialread doesn't seem to capture either stdout or stderr
-        # We hack around this using a temporary file
-
-        # The idea here is to avoid IO#read whenever possible.
-        output_file="/dev/null"
-        if ! arguments[:squelch]
-            require "tempfile"
-            output_file = Tempfile.new("puppet")
-        end
-
-        oldverb = $VERBOSE
-        $VERBOSE = false
-        child_pid = Kernel.fork
-        $VERBOSE = oldverb
-        if child_pid
-            # Parent process executes this
-            child_status = (Process.waitpid2(child_pid)[1]).to_i >> 8
-        else
-            # Child process executes this
-            Process.setsid
-            begin
-                $stdin.reopen("/dev/null")
-                $stdout.reopen(output_file)
-                $stderr.reopen(output_file)
-                3.upto(256){|fd| IO::new(fd).close rescue nil} 
-                if arguments[:gid]
-                    Process.egid = arguments[:gid]
-                    Process.gid = arguments[:gid] unless @@os == "Darwin"
-                end
-                if arguments[:uid]
-                    Process.euid = arguments[:uid]
-                    Process.uid = arguments[:uid] unless @@os == "Darwin"
-                end
-                ENV['LANG'] = ENV['LC_ALL'] = ENV['LC_MESSAGES'] = ENV['LANGUAGE'] = 'C'
-                if command.is_a?(Array)
-                    Kernel.exec(*command)
-                else
-                    Kernel.exec(command)
-                end
-            rescue => detail
-                puts detail.to_s
-                exit!(1)
-            end # begin; rescue
-        end # if child_pid
- 	
-        # read output in if required
-        if ! arguments[:squelch]
-
-            # Make sure the file's actually there.  This is
-            # basically a race condition, and is probably a horrible
-            # way to handle it, but, well, oh well.
-            unless FileTest.exists?(output_file.path)
-                Puppet.warning "sleeping"
-                sleep 0.5
-                unless FileTest.exists?(output_file.path)
-                    Puppet.warning "sleeping 2"
-                    sleep 1
-                    unless FileTest.exists?(output_file.path)
-                        Puppet.warning "Could not get output"
-                        output = ""
-                    end
-                end
-            end
-            unless output
-                # We have to explicitly open here, so that it reopens
-                # after the child writes.
-                output = output_file.open.read
-
-                # The 'true' causes the file to get unlinked right away.
-                output_file.close(true)
-            end
-        end
-
-        if arguments[:failonfail]
-            unless child_status == 0
-                raise ExecutionFailure, "Execution of '%s' returned %s: %s" % [str, child_status, output]
-            end
-        end
-
-        return output
-    end
-
-    module_function :execute
-
-    # Create an exclusive lock.
-    def threadlock(resource, type = Sync::EX)
-        Puppet::Util.sync(resource).synchronize(type) do
-            yield
-        end
-    end
-
-    # Because some modules provide their own version of this method.
-    alias util_execute execute
-
-    module_function :benchmark
-
-    def memory
-        unless defined? @pmap
-            pmap = %x{which pmap 2>/dev/null}.chomp
-            if $? != 0 or pmap =~ /^no/
-                @pmap = nil
-            else
-                @pmap = pmap
-            end
-        end
-        if @pmap
-            return %x{pmap #{Process.pid}| grep total}.chomp.sub(/^\s*total\s+/, '').sub(/K$/, '').to_i
-        else
-            0
-        end
-    end
-
-    def symbolize(value)
-        if value.respond_to? :intern
-            value.intern
-        else
-            value
-        end
-    end
-
-    def symbolizehash(hash)
-        newhash = {}
-        hash.each do |name, val|
-            if name.is_a? String
-                newhash[name.intern] = val
-            else
-                newhash[name] = val
-            end
-        end
-    end
-
-    def symbolizehash!(hash)
-        hash.each do |name, val|
-            if name.is_a? String
-                hash[name.intern] = val
-                hash.delete(name)
-            end
-        end
-
-        return hash
-    end
-    module_function :symbolize, :symbolizehash, :symbolizehash!
-
-    # Just benchmark, with no logging.
-    def thinmark
-        seconds = Benchmark.realtime {
-            yield
-        }
-
-        return seconds
-    end
-
-    module_function :memory, :thinmark
-end
-end
-
-require 'puppet/util/errors'
-require 'puppet/util/methodhelper'
-require 'puppet/util/metaid'
-require 'puppet/util/classgen'
-require 'puppet/util/docs'
-require 'puppet/util/execution'
-require 'puppet/util/logging'
-require 'puppet/util/package'
-require 'puppet/util/warnings'
-
diff --git a/lib/puppet/util/autoload.rb b/lib/puppet/util/autoload.rb
deleted file mode 100644
index 535d9ef..0000000
--- a/lib/puppet/util/autoload.rb
+++ /dev/null
@@ -1,146 +0,0 @@
-require 'puppet/util/warnings'
-
-# Autoload paths, either based on names or all at once.
-class Puppet::Util::Autoload
-    include Puppet::Util
-    include Puppet::Util::Warnings
-
-    @autoloaders = {}
-    @loaded = []
-
-    class << self
-        attr_reader :autoloaders
-        private :autoloaders
-    end
-
-    # Send [], []=, and :clear to the @autloaders hash
-    Puppet::Util.classproxy self, :autoloaders, "[]", "[]="
-
-    # List all loaded files.
-    def self.list_loaded
-        @loaded.sort { |a,b| a[0] <=> b[0] }.collect do |path, hash|
-            "%s: %s" % [path, hash[:file]]
-        end
-    end
-
-    # Has a given path been loaded?  This is used for testing whether a
-    # changed file should be loaded or just ignored.  This is only
-    # used in network/client/master, when downloading plugins, to
-    # see if a given plugin is currently loaded and thus should be
-    # reloaded.
-    def self.loaded?(path)
-        path = path.to_s.sub(/\.rb$/, '')
-        @loaded.include?(path)
-    end
-
-    # Save the fact that a given path has been loaded.  This is so
-    # we can load downloaded plugins if they've already been loaded
-    # into memory.
-    def self.loaded(file)
-        @loaded << file unless @loaded.include?(file)
-    end
-
-    attr_accessor :object, :path, :objwarn, :wrap
-
-    def initialize(obj, path, options = {})
-        @path = path.to_s
-        if @path !~ /^\w/
-            raise ArgumentError, "Autoload paths cannot be fully qualified"
-        end
-        @object = obj
-
-        self.class[obj] = self
-
-        options.each do |opt, value|
-            opt = opt.intern if opt.is_a? String
-            begin
-                self.send(opt.to_s + "=", value)
-            rescue NoMethodError
-                raise ArgumentError, "%s is not a valid option" % opt
-            end
-        end
-
-        unless defined? @wrap
-            @wrap = true
-        end
-    end
-
-    # Load a single plugin by name.  We use 'load' here so we can reload a
-    # given plugin.
-    def load(name)
-        path = name.to_s + ".rb"
-
-        eachdir do |dir|
-            file = File.join(dir, path)
-            next unless FileTest.exists?(file)
-            begin
-                Kernel.load file, @wrap
-                name = symbolize(name)
-                loaded name, file
-                return true
-            rescue LoadError => detail
-                # I have no idea what's going on here, but different versions
-                # of ruby are raising different errors on missing files.
-                unless detail.to_s =~ /^no such file/i
-                    warn "Could not autoload %s: %s" % [name, detail]
-                    if Puppet[:trace]
-                        puts detail.backtrace
-                    end
-                end
-                return false
-            end
-        end
-        return false
-    end
-
-    # Mark the named object as loaded.  Note that this supports unqualified
-    # queries, while we store the result as a qualified query in the class.
-    def loaded(name, file)
-        self.class.loaded(File.join(@path, name.to_s))
-    end
-
-    # Indicate whether the specfied plugin has been loaded.
-    def loaded?(name)
-        self.class.loaded?(File.join(@path, name.to_s))
-    end
-
-    # Load all instances that we can.  This uses require, rather than load,
-    # so that already-loaded files don't get reloaded unnecessarily.
-    def loadall
-        # Load every instance of everything we can find.
-        eachdir do |dir|
-            Dir.glob("#{dir}/*.rb").each do |file|
-                name = File.basename(file).sub(".rb", '').intern
-                next if loaded?(name)
-                begin
-                    Kernel.require file
-                    loaded(name, file)
-                rescue => detail
-                    if Puppet[:trace]
-                        puts detail.backtrace
-                    end
-                    warn "Could not autoload %s: %s" % [file.inspect, detail]
-                end
-            end
-        end
-    end
-
-    # Yield each subdir in turn.
-    def eachdir
-        searchpath.each do |dir|
-            subdir = File.join(dir, @path)
-            yield subdir if FileTest.directory?(subdir)
-        end
-    end
-
-    # The list of directories to search through for loadable plugins.
-    def searchpath
-        # JJM: Search for optional lib directories in each module bundle.
-        module_lib_dirs = Puppet[:modulepath].split(":").collect do |d|
-            Dir.glob("%s/*/{plugins,lib}" % d).select do |f|
-                FileTest.directory?(f) 
-            end
-        end.flatten
-        [module_lib_dirs, Puppet[:libdir], $:].flatten
-    end
-end
diff --git a/lib/puppet/util/checksums.rb b/lib/puppet/util/checksums.rb
deleted file mode 100644
index 15d2ead..0000000
--- a/lib/puppet/util/checksums.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-# A stand-alone module for calculating checksums
-# in a generic way.
-module Puppet::Util::Checksums
-    # Calculate a checksum using Digest::MD5.
-    def md5(content)
-        require 'digest/md5'
-        Digest::MD5.hexdigest(content)
-    end
-
-    # Calculate a checksum of the first 500 chars of the content using Digest::MD5.
-    def md5lite(content)
-        md5(content[0..511])
-    end
-
-    # Calculate a checksum of a file's content using Digest::MD5.
-    def md5_file(filename, lite = false)
-        require 'digest/md5'
-
-        digest = Digest::MD5.new()
-        return checksum_file(digest, filename,  lite)
-    end
-
-    # Calculate a checksum of the first 500 chars of a file's content using Digest::MD5.
-    def md5lite_file(filename)
-        md5_file(filename, true)
-    end
-
-    # Return the :mtime timestamp of a file.
-    def mtime_file(filename)
-        File.stat(filename).send(:mtime)
-    end
-
-    # Calculate a checksum using Digest::SHA1.
-    def sha1(content)
-        require 'digest/sha1'
-        Digest::SHA1.hexdigest(content)
-    end
-
-    # Calculate a checksum of the first 500 chars of the content using Digest::SHA1.
-    def sha1lite(content)
-        sha1(content[0..511])
-    end
-
-    # Calculate a checksum of a file's content using Digest::SHA1.
-    def sha1_file(filename, lite = false)
-        require 'digest/sha1'
-
-        digest = Digest::SHA1.new()
-        return checksum_file(digest, filename, lite)
-    end
-
-    # Calculate a checksum of the first 500 chars of a file's content using Digest::SHA1.
-    def sha1lite_file(filename)
-        sha1_file(filename, true)
-    end
-
-    # Return the :ctime of a file.
-    def ctime_file(filename)
-        File.stat(filename).send(:ctime)
-    end
-
-    private
-
-    # Perform an incremental checksum on a file.
-    def checksum_file(digest, filename, lite = false)
-        File.open(filename, 'r') do |file|
-            while content = file.read(512)
-                digest << content
-                break if lite
-            end
-        end
-
-        return digest.hexdigest
-    end
-end
diff --git a/lib/puppet/util/classgen.rb b/lib/puppet/util/classgen.rb
deleted file mode 100644
index 4e1e57c..0000000
--- a/lib/puppet/util/classgen.rb
+++ /dev/null
@@ -1,207 +0,0 @@
-module Puppet
-    class ConstantAlreadyDefined < Error; end
-    class SubclassAlreadyDefined < Error; end
-end
-
-module Puppet::Util::ClassGen
-    include Puppet::Util::MethodHelper
-    include Puppet::Util
-
-    # Create a new subclass.  Valid options are:
-    # * <tt>:array</tt>: An array of existing classes.  If specified, the new
-    #   class is added to this array.
-    # * <tt>:attributes</tt>: A hash of attributes to set before the block is
-    #   evaluated.
-    # * <tt>:block</tt>: The block to evaluate in the context of the class.
-    #   You can also just pass the block normally, but it will still be evaluated
-    #   with <tt>class_eval</tt>.
-    # * <tt>:constant</tt>: What to set the constant as.  Defaults to the
-    #   capitalized name.
-    # * <tt>:hash</tt>: A hash of existing classes.  If specified, the new
-    #   class is added to this hash, and it is also used for overwrite tests.
-    # * <tt>:overwrite</tt>: Whether to overwrite an existing class.
-    # * <tt>:parent</tt>: The parent class for the generated class.  Defaults to
-    #   self.
-    # * <tt>:prefix</tt>: The constant prefix.  Default to nothing; if specified,
-    #   the capitalized name is appended and the result is set as the constant.
-    def genclass(name, options = {}, &block)
-        genthing(name, Class, options, block)
-    end
-
-    # Create a new module.  Valid options are:
-    # * <tt>:array</tt>: An array of existing classes.  If specified, the new
-    #   class is added to this array.
-    # * <tt>:attributes</tt>: A hash of attributes to set before the block is
-    #   evaluated.
-    # * <tt>:block</tt>: The block to evaluate in the context of the class.
-    #   You can also just pass the block normally, but it will still be evaluated
-    #   with <tt>class_eval</tt>.
-    # * <tt>:constant</tt>: What to set the constant as.  Defaults to the
-    #   capitalized name.
-    # * <tt>:hash</tt>: A hash of existing classes.  If specified, the new
-    #   class is added to this hash, and it is also used for overwrite tests.
-    # * <tt>:overwrite</tt>: Whether to overwrite an existing class.
-    # * <tt>:prefix</tt>: The constant prefix.  Default to nothing; if specified,
-    #   the capitalized name is appended and the result is set as the constant.
-    def genmodule(name, options = {}, &block)
-        genthing(name, Module, options, block)
-    end
-
-    # Remove an existing class
-    def rmclass(name, options)
-        options = symbolize_options(options)
-        const = genconst_string(name, options)
-        retval = false
-        if const_defined? const
-            remove_const(const)
-            retval = true
-        end
-
-        if hash = options[:hash] and hash.include? name
-            hash.delete(name)
-            retval = true
-        end
-
-        # Let them know whether we did actually delete a subclass.
-        return retval
-    end
-
-    private
-
-    # Generate the constant to create or remove.
-    def genconst_string(name, options)
-        unless const = options[:constant]
-            prefix = options[:prefix] || ""
-            const = prefix + name2const(name)
-        end
-
-        return const
-    end
-
-    # This does the actual work of creating our class or module.  It's just a
-    # slightly abstract version of genclass.
-    def genthing(name, type, options, block)
-        options = symbolize_options(options)
-
-        name = symbolize(name.to_s.downcase)
-
-        if type == Module
-            #evalmethod = :module_eval
-            evalmethod = :class_eval
-            # Create the class, with the correct name.
-            klass = Module.new do
-                class << self
-                    attr_reader :name
-                end
-                @name = name
-            end
-        else 
-            options[:parent] ||= self
-            evalmethod = :class_eval
-            # Create the class, with the correct name.
-            klass = Class.new(options[:parent]) do
-                @name = name
-            end
-        end
-
-        # Create the constant as appropriation.
-        handleclassconst(klass, name, options)
-
-        # Initialize any necessary variables.
-        initclass(klass, options)
-
-        block ||= options[:block]
-
-        # Evaluate the passed block if there is one.  This should usually
-        # define all of the work.
-        if block
-            klass.send(evalmethod, &block)
-        end
-
-        if klass.respond_to? :postinit
-            klass.postinit
-        end
-
-        # Store the class in hashes or arrays or whatever.
-        storeclass(klass, name, options)
-
-        return klass
-    end
-
-    # Handle the setting and/or removing of the associated constant.
-    def handleclassconst(klass, name, options)
-        const = genconst_string(name, options)
-
-        if const_defined? const
-            if options[:overwrite]
-                Puppet.info "Redefining %s in %s" % [name, self]
-                remove_const(const)
-            else
-                raise Puppet::ConstantAlreadyDefined,
-                    "Class %s is already defined in %s" % [const, self]
-            end
-        end
-        const_set(const, klass)
-
-        return const
-    end
-
-    # Perform the initializations on the class.
-    def initclass(klass, options)
-        if klass.respond_to? :initvars
-            klass.initvars
-        end
-
-        if attrs = options[:attributes]
-            attrs.each do |param, value|
-                method = param.to_s + "="
-                if klass.respond_to? method
-                    klass.send(method, value)
-                end
-            end
-        end
-
-        [:include, :extend].each do |method|
-            if set = options[method]
-                set = [set] unless set.is_a?(Array)
-                set.each do |mod|
-                    klass.send(method, mod)
-                end
-            end
-        end
-
-        if klass.respond_to? :preinit
-            klass.preinit
-        end
-    end
-
-    # Convert our name to a constant.
-    def name2const(name)
-        name.to_s.capitalize
-    end
-
-    # Store the class in the appropriate places.
-    def storeclass(klass, klassname, options)
-        if hash = options[:hash]
-            if hash.include? klassname and ! options[:overwrite]
-                raise Puppet::SubclassAlreadyDefined,
-                    "Already a generated class named %s" % klassname
-            end
-
-            hash[klassname] = klass
-        end
-
-        # If we were told to stick it in a hash, then do so
-        if array = options[:array]
-            if (klass.respond_to? :name and
-                            array.find { |c| c.name == klassname } and
-                            ! options[:overwrite])
-                raise Puppet::SubclassAlreadyDefined,
-                    "Already a generated class named %s" % klassname
-            end
-
-            array << klass
-        end
-    end
-end
-
diff --git a/lib/puppet/util/config_store.rb b/lib/puppet/util/config_store.rb
deleted file mode 100644
index 668d73f..0000000
--- a/lib/puppet/util/config_store.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-module Puppet::Util
-    # The abstract base class for client configuration storage.
-    class ConfigStore
-        extend Puppet::Util
-        extend Puppet::Util::Docs
-        extend Puppet::Util::ClassGen
-
-        @loader = Puppet::Util::Autoload.new(self, "puppet/config_stores")
-        @stores = {}
-
-        # Add a new report type.
-        def self.newstore(name, options = {}, &block)
-            klass = genclass(name,
-                :block => block,
-                :prefix => "ConfigStore",
-                :hash => @stores,
-                :attributes => options
-            )
-        end
-
-        # Remove a store; really only used for testing.
-        def self.rmstore(name)
-            rmclass(name, :hash => @stores)
-        end
-
-        # Load a store.
-        def self.store(name)
-            name = symbolize(name)
-            unless @stores.include? name
-                if @loader.load(name)
-                    unless @stores.include? name
-                        Puppet.warning(
-                            "Loaded report file for %s but report was not defined" %
-                            name
-                        )
-                        return nil
-                    end
-                else
-                    return nil
-                end
-            end
-            @stores[name]
-        end
-
-        # Retrieve the config for a client.
-        def get(client)
-            raise Puppet::DevError, "%s has not overridden get" % self.class.name
-        end
-
-        # Store the config for a client.
-        def store(client, config)
-            raise Puppet::DevError, "%s has not overridden store" % self.class.name
-        end
-
-        def collect_exported(client, conditions)
-            raise Puppet::DevError, "%s has not overridden collect_exported" % self.class.name
-        end   
-          
-    end
-end
-
diff --git a/lib/puppet/util/constant_inflector.rb b/lib/puppet/util/constant_inflector.rb
deleted file mode 100644
index eeeaa06..0000000
--- a/lib/puppet/util/constant_inflector.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# Created on 2008-02-12
-# Copyright Luke Kanies
-
-# A common module for converting between constants and
-# file names.
-module Puppet::Util::ConstantInflector
-    def file2constant(file)
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = file.split("/").collect { |name| name.capitalize }.join("::").gsub(/_+(.)/) { |term| $1.capitalize }
-    end
-
-    def constant2file(constant)
-        constant.to_s.gsub(/([a-z])([A-Z])/) { |term| $1 + "_" + $2 }.gsub("::", "/").downcase
-    end
-end
diff --git a/lib/puppet/util/diff.rb b/lib/puppet/util/diff.rb
deleted file mode 100644
index f37ea08..0000000
--- a/lib/puppet/util/diff.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-# Provide a diff between two strings.
-module Puppet::Util::Diff
-    include Puppet::Util
-    require 'tempfile'
-
-    def diff(old, new)
-        command = [Puppet[:diff]]
-        if args = Puppet[:diff_args] and args != ""
-            command << args
-        end
-        command << old << new
-        execute(command, :failonfail => false)
-    end
-
-    module_function :diff
-
-    # return diff string of two input strings
-    # format defaults to unified
-    # context defaults to 3 lines
-    def lcs_diff(data_old, data_new, format=:unified, context_lines=3)
-        unless Puppet.features.diff?
-            Puppet.warning "Cannot provide diff without the diff/lcs Ruby library"
-            return ""
-        end
-        data_old = data_old.split(/\n/).map! { |e| e.chomp }
-        data_new = data_new.split(/\n/).map! { |e| e.chomp }
-
-        output = ""
-
-        diffs = ::Diff::LCS.diff(data_old, data_new)
-        return output if diffs.empty?
-
-        oldhunk = hunk = nil
-        file_length_difference = 0
-
-        diffs.each do |piece|
-            begin
-                hunk = ::Diff::LCS::Hunk.new(data_old, data_new, piece, 
-                                           context_lines, 
-                                           file_length_difference)
-                file_length_difference = hunk.file_length_difference
-            next unless oldhunk
-            # Hunks may overlap, which is why we need to be careful when our
-            # diff includes lines of context. Otherwise, we might print
-            # redundant lines.
-            if (context_lines > 0) and hunk.overlaps?(oldhunk)
-                hunk.unshift(oldhunk)
-            else
-                output << oldhunk.diff(format)
-            end
-            ensure
-                oldhunk = hunk
-                output << "\n"
-            end
-        end
-
-        # Handle the last remaining hunk
-        output << oldhunk.diff(format) << "\n"
-    end
-
-    def string_file_diff(path, string)
-        require 'tempfile'
-        tempfile = Tempfile.new("puppet-diffing")
-        tempfile.open
-        tempfile.print string
-        tempfile.close
-        print diff(path, tempfile.path)
-        tempfile.delete
-    end
-end
-
diff --git a/lib/puppet/util/docs.rb b/lib/puppet/util/docs.rb
deleted file mode 100644
index 54d1052..0000000
--- a/lib/puppet/util/docs.rb
+++ /dev/null
@@ -1,110 +0,0 @@
-# Some simple methods for helping manage automatic documentation generation.
-module Puppet::Util::Docs
-    # Specify the actual doc string.
-    def desc(str)
-        @doc = str
-    end
-
-    # Add a new autodoc block.  We have to define these as class methods,
-    # rather than just sticking them in a hash, because otherwise they're
-    # too difficult to do inheritance with.
-    def dochook(name, &block)
-        method = "dochook_" + name.to_s
-
-        meta_def method, &block
-    end
-
-    attr_writer :doc
-
-    # Generate the full doc string.
-    def doc
-        extra = methods.find_all { |m| m.to_s =~ /^dochook_.+/ }.sort.collect { |m|
-            self.send(m)
-        }.join("  ")
-
-        if defined? @doc and @doc
-            @doc + extra
-        else
-            extra
-        end
-    end
-
-    # Build a table
-    def doctable(headers, data)
-        str = "\n\n"
-
-        lengths = []
-        # Figure out the longest field for all columns
-        data.each do |name, values|
-            [name, values].flatten.each_with_index do |value, i|
-                lengths[i] ||= 0
-                lengths[i] = value.to_s.length if value.to_s.length > lengths[i]
-            end
-        end
-
-        # The headers could also be longest
-        headers.each_with_index do |value, i|
-            lengths[i] = value.to_s.length if value.to_s.length > lengths[i]
-        end
-
-        # Add the top header row
-        str += lengths.collect { |num| "=" * num }.join(" ") + "\n"
-
-        # And the header names
-        str += headers.zip(lengths).collect { |value, num| pad(value, num) }.join(" ") + "\n"
-
-        # And the second header row
-        str += lengths.collect { |num| "=" * num }.join(" ") + "\n"
-
-        # Now each data row
-        data.sort { |a, b| a[0].to_s <=> b[0].to_s }.each do |name, rows|
-            str += [name, rows].flatten.zip(lengths).collect do |value, length|
-                pad(value, length)
-            end.join(" ") + "\n"
-        end
-
-        # And the bottom line row
-        str += lengths.collect { |num| "=" * num }.join(" ") + "\n"
-
-        str + "\n"
-    end
-
-    attr_reader :nodoc
-    def nodoc?
-        nodoc
-    end
-
-    # Pad a field with spaces
-    def pad(value, length)
-        value.to_s + (" " * (length - value.to_s.length))
-    end
-
-    # Handle the inline indentation in the docs.
-    def scrub(text)
-        # Stupid markdown
-        #text = text.gsub("<%=", "&lt;%=")
-        # For text with no carriage returns, there's nothing to do.
-        if text !~ /\n/
-            return text
-        end
-        indent = nil
-
-        # If we can match an indentation, then just remove that same level of
-        # indent from every line.
-        if text =~ /^(\s+)/
-            indent = $1
-            begin
-                return text.gsub(/^#{indent}/,'')
-            rescue => detail
-                puts detail.backtrace
-                puts detail
-            end
-        else
-            return text
-        end
-
-    end
-
-    module_function :scrub
-end
-
diff --git a/lib/puppet/util/errors.rb b/lib/puppet/util/errors.rb
deleted file mode 100644
index badba59..0000000
--- a/lib/puppet/util/errors.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# Some helper methods for throwing errors.
-module Puppet::Util::Errors
-    # Throw a dev error.
-    def devfail(msg)
-        self.fail(Puppet::DevError, msg)
-    end
-
-    # Add line and file info if available and appropriate.
-    def adderrorcontext(error, other = nil)
-        error.line ||= self.line if self.respond_to?(:line) and self.line
-        error.file ||= self.file if self.respond_to?(:file) and self.file
-
-        if other and other.respond_to?(:backtrace)
-            error.set_backtrace other.backtrace
-        end
-
-        return error
-    end
-
-    # Wrap a call in such a way that we always throw the right exception and keep
-    # as much context as possible.
-    def exceptwrap(options = {})
-        options[:type] ||= Puppet::DevError
-        begin
-            return yield
-        rescue Puppet::Error => detail
-            raise adderrorcontext(detail)
-        rescue => detail
-            message = options[:message] || "%s failed with error %s: %s" %
-                    [self.class, detail.class, detail.to_s]
-
-            error = options[:type].new(message)
-            # We can't use self.fail here because it always expects strings,
-            # not exceptions.
-            raise adderrorcontext(error, detail)
-        end
-
-        return retval
-    end
-
-    # Throw an error, defaulting to a Puppet::Error.
-    def fail(*args)
-        if args[0].is_a?(Class)
-            type = args.shift
-        else
-            type = Puppet::Error
-        end
-
-        error = adderrorcontext(type.new(args.join(" ")))
-
-        raise error
-    end
-end
-
diff --git a/lib/puppet/util/execution.rb b/lib/puppet/util/execution.rb
deleted file mode 100644
index b8dcde5..0000000
--- a/lib/puppet/util/execution.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-module Puppet::Util::Execution
-    module_function 
-
-    # Run some code with a specific environment.  Resets the environment back to
-    # what it was at the end of the code.
-    def withenv(hash)
-        oldvals = {}
-        hash.each do |name, val|
-            name = name.to_s
-            oldvals[name] = ENV[name]
-            ENV[name] = val
-        end
-
-        yield
-    ensure
-        oldvals.each do |name, val|
-            ENV[name] = val
-        end
-    end
-end
-
diff --git a/lib/puppet/util/fact_store.rb b/lib/puppet/util/fact_store.rb
deleted file mode 100644
index a93aa42..0000000
--- a/lib/puppet/util/fact_store.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# Created on 2007-05-02
-# Copyright Luke Kanies
-
-module Puppet::Util
-    # The abstract base class for client fact storage.
-    class FactStore
-        extend Puppet::Util
-        extend Puppet::Util::Docs
-        extend Puppet::Util::ClassGen
-
-        @loader = Puppet::Util::Autoload.new(self, "puppet/fact_stores")
-        @stores = {}
-
-        # Add a new report type.
-        def self.newstore(name, options = {}, &block)
-            klass = genclass(name,
-                :block => block,
-                :prefix => "FactStore",
-                :hash => @stores,
-                :attributes => options
-            )
-        end
-
-        # Remove a store; really only used for testing.
-        def self.rmstore(name)
-            rmclass(name, :hash => @stores)
-        end
-
-        # Load a store.
-        def self.store(name)
-            name = symbolize(name)
-            unless @stores.include? name
-                if @loader.load(name)
-                    unless @stores.include? name
-                        Puppet.warning(
-                            "Loaded report file for %s but report was not defined" %
-                            name
-                        )
-                        return nil
-                    end
-                else
-                    return nil
-                end
-            end
-            @stores[name]
-        end
-
-        # Retrieve the facts for a node.
-        def get(node)
-            raise Puppet::DevError, "%s has not overridden get" % self.class.name
-        end
-
-        # Set the facts for a node.
-        def set(node, facts)
-            raise Puppet::DevError, "%s has not overridden set" % self.class.name
-        end
-    end
-end
-
diff --git a/lib/puppet/util/feature.rb b/lib/puppet/util/feature.rb
deleted file mode 100644
index 2669d1a..0000000
--- a/lib/puppet/util/feature.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-#  Created by Luke Kanies on 2006-11-07.
-#  Copyright (c) 2006. All rights reserved.
-
-class Puppet::Util::Feature
-    attr_reader :path
-
-    # Create a new feature test.  You have to pass the feature name,
-    # and it must be unique.  You can either provide a block that
-    # will get executed immediately to determine if the feature
-    # is present, or you can pass an option to determine it.
-    # Currently, the only supported option is 'libs' (must be
-    # passed as a symbol), which will make sure that each lib loads
-    # successfully.
-    def add(name, options = {})
-        method = name.to_s + "?"
-        if self.class.respond_to?(method)
-            raise ArgumentError, "Feature %s is already defined" % name
-        end
-
-        if block_given?
-            begin
-                result = yield
-            rescue => detail
-                warn "Failed to load feature test for %s: %s" % [name, detail]
-                result = false
-            end
-            @results[name] = result
-        end
-        
-        meta_def(method) do
-            unless @results.include?(name)
-                @results[name] = test(name, options)
-            end
-            @results[name]
-        end
-    end
-    
-    # Create a new feature collection.
-    def initialize(path)
-        @path = path
-        @results = {}
-        @loader = Puppet::Util::Autoload.new(self, @path)
-    end
-    
-    def load
-        @loader.loadall
-    end
-
-    def method_missing(method, *args)
-        return super unless method.to_s =~ /\?$/
-
-        feature = method.to_s.sub(/\?$/, '')
-        @loader.load(feature)
-
-        if respond_to?(method)
-            return self.send(method)
-        else
-            return false
-        end
-    end
-
-    # Actually test whether the feature is present.  We only want to test when
-    # someone asks for the feature, so we don't unnecessarily load
-    # files.
-    def test(name, options)
-        result = true
-        if ary = options[:libs]
-            ary = [ary] unless ary.is_a?(Array)
-            
-            ary.each do |lib|
-                unless lib.is_a?(String)
-                    raise ArgumentError, "Libraries must be passed as strings not %s" % lib.class
-                end
-            
-                begin
-                    require lib
-                rescue Exception
-                    Puppet.debug "Failed to load library '%s' for feature '%s'" % [lib, name]
-                    result = false
-                end
-            end
-        end
-        result
-    end
-end
diff --git a/lib/puppet/util/fileparsing.rb b/lib/puppet/util/fileparsing.rb
deleted file mode 100644
index 23d02ea..0000000
--- a/lib/puppet/util/fileparsing.rb
+++ /dev/null
@@ -1,399 +0,0 @@
-# A mini-language for parsing files.  This is only used file the ParsedFile
-# provider, but it makes more sense to split it out so it's easy to maintain
-# in one place.
-#
-# You can use this module to create simple parser/generator classes.  For instance,
-# the following parser should go most of the way to parsing /etc/passwd:
-#
-#   class Parser
-#       include Puppet::Util::FileParsing
-#       record_line :user, :fields => %w{name password uid gid gecos home shell},
-#           :separator => ":"
-#   end
-#
-# You would use it like this:
-#
-#   parser = Parser.new
-#   lines = parser.parse(File.read("/etc/passwd"))
-#
-#   lines.each do |type, hash| # type will always be :user, since we only have one
-#       p hash
-#   end
-#
-# Each line in this case would be a hash, with each field set appropriately.
-# You could then call 'parser.to_line(hash)' on any of those hashes to generate
-# the text line again.
-
-require 'puppet/util/methodhelper'
-
-module Puppet::Util::FileParsing
-    include Puppet::Util
-    attr_writer :line_separator, :trailing_separator
-
-    class FileRecord
-        include Puppet::Util
-        include Puppet::Util::MethodHelper
-        attr_accessor :absent, :joiner, :rts, :separator, :rollup, :name, :match, :block_eval
-
-        attr_reader :fields, :optional, :type
-
-        INVALID_FIELDS = [:record_type, :target, :on_disk]
-
-        # Customize this so we can do a bit of validation.
-        def fields=(fields)
-            @fields = fields.collect do |field|
-                r = symbolize(field)
-                if INVALID_FIELDS.include?(r)
-                    raise ArgumentError.new("Cannot have fields named %s" % r)
-                end
-                r
-            end
-        end
-
-        def initialize(type, options = {}, &block)
-            @type = symbolize(type)
-            unless [:record, :text].include?(@type)
-                raise ArgumentError, "Invalid record type %s" % @type
-            end
-
-            set_options(options)
-
-            if self.type == :record
-                # Now set defaults.
-                self.absent ||= ""
-                self.separator ||= /\s+/
-                self.joiner ||= " "
-                self.optional ||= []
-                unless defined? @rollup
-                    @rollup = true
-                end
-            end
-
-            if block_given?
-                @block_eval ||= :process
-
-                # Allow the developer to specify that a block should be instance-eval'ed.
-                if @block_eval == :instance
-                    instance_eval(&block)
-                else
-                    meta_def(@block_eval, &block)
-                end
-            end
-        end
-
-        # Convert a record into a line by joining the fields together appropriately.
-        # This is pulled into a separate method so it can be called by the hooks.
-        def join(details)
-            joinchar = self.joiner
-
-            fields.collect { |field|
-                # If the field is marked absent, use the appropriate replacement
-                if details[field] == :absent or details[field] == [:absent] or details[field].nil?
-                    if self.optional.include?(field)
-                        self.absent
-                    else
-                        raise ArgumentError, "Field '%s' is required" % field
-                    end
-                else
-                    details[field].to_s
-                end
-            }.reject { |c| c.nil?}.join(joinchar)
-        end
-
-        # Customize this so we can do a bit of validation.
-        def optional=(optional)
-            @optional = optional.collect do |field|
-                symbolize(field)
-            end
-        end
-
-        # Create a hook that modifies the hash resulting from parsing.
-        def post_parse=(block)
-            meta_def(:post_parse, &block)
-        end
-
-        # Create a hook that modifies the hash just prior to generation.
-        def pre_gen=(block)
-            meta_def(:pre_gen, &block)
-        end
-
-        # Are we a text type?
-        def text?
-            type == :text
-        end
-
-        def to_line=(block)
-            meta_def(:to_line, &block)
-        end
-    end
-
-    # Clear all existing record definitions.  Only used for testing.
-    def clear_records
-        @record_types.clear
-        @record_order.clear
-    end
-
-    def fields(type)
-        if record = record_type(type)
-            record.fields.dup
-        else
-            nil
-        end
-    end
-
-    # Try to match a specific text line.
-    def handle_text_line(line, record)
-        if line =~ record.match
-            return {:record_type => record.name, :line => line}
-        else
-            return nil
-        end
-    end
-
-    # Try to match a record.
-    def handle_record_line(line, record)
-        ret = nil
-        if record.respond_to?(:process)
-            if ret = record.send(:process, line.dup)
-                unless ret.is_a?(Hash)
-                    raise Puppet::DevError,
-                        "Process record type %s returned non-hash" % record.name
-                end
-            else
-                return nil
-            end
-        elsif regex = record.match
-            # In this case, we try to match the whole line and then use the
-            # match captures to get our fields.
-            if match = regex.match(line)
-                fields = []
-                ret = {}
-                record.fields.zip(match.captures).each do |field, value|
-                    if value == record.absent 
-                        ret[field] = :absent
-                    else
-                        ret[field] = value
-                    end
-                end
-            else
-                nil
-            end
-        else
-            ret = {}
-            sep = record.separator
-
-            # String "helpfully" replaces ' ' with /\s+/ in splitting, so we
-            # have to work around it.
-            if sep == " "
-                sep = / /
-            end
-            line_fields = line.split(sep)
-            record.fields.each do |param|
-                value = line_fields.shift
-                if value and value != record.absent
-                    ret[param] = value
-                else
-                    ret[param] = :absent
-                end
-            end
-
-            if record.rollup and ! line_fields.empty?
-                last_field = record.fields[-1]
-                val = ([ret[last_field]] + line_fields).join(record.joiner)
-                ret[last_field] = val
-            end
-        end
-
-        if ret
-            ret[:record_type] = record.name
-            return ret
-        else
-            return nil
-        end
-    end
-
-    def line_separator
-        unless defined?(@line_separator)
-            @line_separator = "\n"
-        end
-
-        @line_separator
-    end
-
-    # Split text into separate lines using the record separator.
-    def lines(text)
-        # Remove any trailing separators, and then split based on them
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        x = text.sub(/#{self.line_separator}\Q/,'').split(self.line_separator)
-    end
-
-    # Split a bunch of text into lines and then parse them individually.
-    def parse(text)
-        count = 1
-        lines(text).collect do |line|
-            count += 1
-            if val = parse_line(line)
-                val
-            else
-                error = Puppet::Error.new("Could not parse line %s" % line.inspect)
-                error.line = count
-                raise error
-            end
-        end
-    end
-
-    # Handle parsing a single line.
-    def parse_line(line)
-        unless records?
-            raise Puppet::DevError, "No record types defined; cannot parse lines"
-        end
-
-        @record_order.each do |record|
-            # These are basically either text or record lines.
-            method = "handle_%s_line" % record.type
-            if respond_to?(method)
-                if result = send(method, line, record)
-                    if record.respond_to?(:post_parse)
-                        record.send(:post_parse, result)
-                    end
-                    return result
-                end
-            else
-                raise Puppet::DevError,
-                    "Somehow got invalid line type %s" % record.type
-            end
-        end
-
-        return nil
-    end
-
-    # Define a new type of record.  These lines get split into hashes.  Valid
-    # options are:
-    # * <tt>:absent</tt>: What to use as value within a line, when a field is
-    #   absent.  Note that in the record object, the literal :absent symbol is
-    #   used, and not this value.  Defaults to "".
-    # * <tt>:fields</tt>: The list of fields, as an array.  By default, all
-    #   fields are considered required.
-    # * <tt>:joiner</tt>: How to join fields together.  Defaults to '\t'.
-    # * <tt>:optional</tt>: Which fields are optional.  If these are missing,
-    #   you'll just get the 'absent' value instead of an ArgumentError.
-    # * <tt>:rts</tt>: Whether to remove trailing whitespace.  Defaults to false.
-    #   If true, whitespace will be removed; if a regex, then whatever matches
-    #   the regex will be removed.
-    # * <tt>:separator</tt>: The record separator.  Defaults to /\s+/.
-    def record_line(name, options, &block)
-        unless options.include?(:fields)
-            raise ArgumentError, "Must include a list of fields"
-        end
-
-        record = FileRecord.new(:record, options, &block)
-        record.name = symbolize(name)
-
-        new_line_type(record)
-    end
-
-    # Are there any record types defined?
-    def records?
-        defined?(@record_types) and ! @record_types.empty?
-    end
-
-    # Define a new type of text record.
-    def text_line(name, options, &block)
-        unless options.include?(:match)
-            raise ArgumentError, "You must provide a :match regex for text lines"
-        end
-
-        record = FileRecord.new(:text, options, &block)
-        record.name = symbolize(name)
-
-        new_line_type(record)
-    end
-
-    # Generate a file from a bunch of hash records.
-    def to_file(records)
-        text = records.collect { |record| to_line(record) }.join(line_separator)
-
-        if trailing_separator
-            text += line_separator
-        end
-
-        return text
-    end
-
-    # Convert our parsed record into a text record.
-    def to_line(details)
-        unless record = record_type(details[:record_type])
-            raise ArgumentError, "Invalid record type %s" % details[:record_type].inspect
-        end
-
-        if record.respond_to?(:pre_gen)
-            details = details.dup
-            record.send(:pre_gen, details)
-        end
-
-        case record.type
-        when :text: return details[:line]
-        else
-            if record.respond_to?(:to_line)
-                return record.to_line(details)
-            end
-
-            line = record.join(details)
-
-            if regex = record.rts
-                # If they say true, then use whitespace; else, use their regex.
-                if regex == true
-                    regex = /\s+$/
-                end
-                return line.sub(regex,'')
-            else
-                return line
-            end
-        end
-    end
-
-    # Whether to add a trailing separator to the file.  Defaults to true
-    def trailing_separator
-        if defined? @trailing_separator
-            return @trailing_separator
-        else
-            return true
-        end
-    end
-
-    def valid_attr?(type, attr)
-        type = symbolize(type)
-        if record = record_type(type) and record.fields.include?(symbolize(attr))
-            return true
-        else
-            if symbolize(attr) == :ensure
-                return true
-            else
-                false
-            end
-        end
-    end
-
-    private
-
-    # Define a new type of record.
-    def new_line_type(record)
-        @record_types ||= {}
-        @record_order ||= []
-
-        if @record_types.include?(record.name)
-            raise ArgumentError, "Line type %s is already defined" % record.name
-        end
-
-        @record_types[record.name] = record
-        @record_order << record
-
-        return record
-    end
-
-    # Retrieve the record object.
-    def record_type(type)
-        @record_types[symbolize(type)]
-    end
-end
-
diff --git a/lib/puppet/util/filetype.rb b/lib/puppet/util/filetype.rb
deleted file mode 100755
index 7e799b6..0000000
--- a/lib/puppet/util/filetype.rb
+++ /dev/null
@@ -1,341 +0,0 @@
-# Basic classes for reading, writing, and emptying files.  Not much
-# to see here.
-
-require 'puppet/util/selinux'
-
-class Puppet::Util::FileType
-    attr_accessor :loaded, :path, :synced
-
-    include Puppet::Util::SELinux
-
-    class << self
-        attr_accessor :name
-        include Puppet::Util::ClassGen
-    end
-
-    # Create a new filetype.
-    def self.newfiletype(name, &block)
-        @filetypes ||= {}
-
-        klass = genclass(name,
-            :block => block,
-            :prefix => "FileType",
-            :hash => @filetypes
-        )
-
-        # Rename the read and write methods, so that we're sure they
-        # maintain the stats.
-        klass.class_eval do
-            # Rename the read method
-            define_method(:real_read, instance_method(:read))
-            define_method(:read) do
-                begin
-                    val = real_read()
-                    @loaded = Time.now
-                    if val
-                        return val.gsub(/# HEADER.*\n/,'')
-                    else
-                        return ""
-                    end
-                rescue Puppet::Error => detail
-                    raise
-                rescue => detail
-                    if Puppet[:trace]
-                        puts detail.backtrace
-                    end
-                    raise Puppet::Error, "%s could not read %s: %s" %
-                        [self.class, @path, detail]
-                end
-            end
-
-            # And then the write method
-            define_method(:real_write, instance_method(:write))
-            define_method(:write) do |text|
-                begin
-                    val = real_write(text)
-                    @synced = Time.now
-                    return val
-                rescue Puppet::Error => detail
-                    raise
-                rescue => detail
-                    if Puppet[:debug]
-                        puts detail.backtrace
-                    end
-                    raise Puppet::Error, "%s could not write %s: %s" %
-                        [self.class, @path, detail]
-                end
-            end
-        end
-    end
-
-    def self.filetype(type)
-        @filetypes[type]
-    end
-
-    # Back the file up before replacing it.
-    def backup
-        bucket.backup(@path) if FileTest.exists?(@path)
-    end
-
-    # Pick or create a filebucket to use.
-    def bucket
-        filebucket = Puppet::Type.type(:filebucket)
-        (filebucket["puppet"] || filebucket.mkdefaultbucket).bucket
-    end
-
-    def initialize(path)
-        raise ArgumentError.new("Path is nil") if path.nil?
-        @path = path
-    end
-
-    # Operate on plain files.
-    newfiletype(:flat) do
-        # Read the file.
-        def read
-            if File.exists?(@path)
-                File.read(@path)
-            else
-                return nil
-            end
-        end
-
-        # Remove the file.
-        def remove
-            if File.exists?(@path)
-                File.unlink(@path)
-            end
-        end
-
-        # Overwrite the file.
-        def write(text)
-            backup()
-            require "tempfile"
-            tf = Tempfile.new("puppet") 
-            tf.print text; tf.flush 
-            FileUtils.cp(tf.path, @path) 
-            tf.close
-            # If SELinux is present, we need to ensure the file has its expected context
-            set_selinux_default_context(@path)
-        end
-    end
-
-    # Operate on plain files.
-    newfiletype(:ram) do
-        @@tabs = {}
-
-        def self.clear
-            @@tabs.clear
-        end
-
-        def initialize(path)
-            super
-            @@tabs[@path] ||= ""
-        end
-
-        # Read the file.
-        def read
-            Puppet.info "Reading %s from RAM" % @path
-            @@tabs[@path]
-        end
-
-        # Remove the file.
-        def remove
-            Puppet.info "Removing %s from RAM" % @path
-            @@tabs[@path] = ""
-        end
-
-        # Overwrite the file.
-        def write(text)
-            Puppet.info "Writing %s to RAM" % @path
-            @@tabs[@path] = text
-        end
-    end
-
-    # Handle Linux-style cron tabs.
-    newfiletype(:crontab) do
-        def initialize(user)
-            self.path = user
-        end
-
-        def path=(user)
-            begin
-                @uid = Puppet::Util.uid(user)
-            rescue Puppet::Error => detail
-                raise Puppet::Error, "Could not retrieve user %s" % user
-            end
-
-            # XXX We have to have the user name, not the uid, because some
-            # systems *cough*linux*cough* require it that way
-            @path = user
-        end
-
-        # Read a specific @path's cron tab.
-        def read
-            %x{#{cmdbase()} -l 2>/dev/null}
-        end
-
-        # Remove a specific @path's cron tab.
-        def remove
-            if %w{Darwin FreeBSD}.include?(Facter.value("operatingsystem"))
-                %x{/bin/echo yes | #{cmdbase()} -r 2>/dev/null}
-            else
-                %x{#{cmdbase()} -r 2>/dev/null}
-            end
-        end
-
-        # Overwrite a specific @path's cron tab; must be passed the @path name
-        # and the text with which to create the cron tab.
-        def write(text)
-            IO.popen("#{cmdbase()} -", "w") { |p|
-                p.print text
-            }
-        end
-
-        private
-
-        # Only add the -u flag when the @path is different.  Fedora apparently
-        # does not think I should be allowed to set the @path to my own user name
-        def cmdbase
-            cmd = nil
-            if @uid == Puppet::Util::SUIDManager.uid
-                return "crontab"
-            else
-                return "crontab -u #{@path}"
-            end
-        end
-    end
-
-    # SunOS has completely different cron commands; this class implements
-    # its versions.
-    newfiletype(:suntab) do
-        # Read a specific @path's cron tab.
-        def read
-            begin
-                output = Puppet::Util.execute(%w{crontab -l}, :uid => @path)
-                return "" if output.include?("can't open your crontab")
-                return output
-            rescue
-                # If there's a failure, treat it like an empty file.
-                return ""
-            end
-        end
-
-        # Remove a specific @path's cron tab.
-        def remove
-            begin
-                Puppet::Util.execute(%w{crontab -r}, :uid => @path)
-            rescue => detail
-                raise Puppet::Error, "Could not remove crontab for %s: %s" % [@path, detail]
-            end
-        end
-
-        # Overwrite a specific @path's cron tab; must be passed the @path name
-        # and the text with which to create the cron tab.
-        def write(text)
-            puts text
-            require "tempfile"
-            output_file = Tempfile.new("puppet")
-            fh = output_file.open
-            fh.print text
-            fh.close
-
-            # We have to chown the stupid file to the user.
-            File.chown(Puppet::Util.uid(@path), nil, output_file.path)
-
-            begin
-                Puppet::Util.execute(["crontab", output_file.path], :uid => @path)
-            rescue => detail
-                raise Puppet::Error, "Could not write crontab for %s: %s" % [@path, detail]
-            end
-            output_file.delete
-        end
-    end
-
-    # Treat netinfo tables as a single file, just for simplicity of certain
-    # types
-    newfiletype(:netinfo) do
-        class << self
-            attr_accessor :format
-        end
-        def read
-            %x{nidump -r /#{@path} /}
-        end
-
-        # This really only makes sense for cron tabs.
-        def remove
-            %x{nireport / /#{@path} name}.split("\n").each do |name|
-                newname = name.gsub(/\//, '\/').sub(/\s+$/, '')
-                output = %x{niutil -destroy / '/#{@path}/#{newname}'}
-
-                unless $? == 0
-                    raise Puppet::Error, "Could not remove %s from %s" %
-                        [name, @path]
-                end
-            end
-        end
-
-        # Convert our table to an array of hashes.  This only works for
-        # handling one table at a time.
-        def to_array(text = nil)
-            unless text
-                text = read
-            end
-
-            hash = nil
-
-            # Initialize it with the first record
-            records = []
-            text.split("\n").each do |line|
-                next if line =~ /^[{}]$/ # Skip the wrapping lines
-                next if line =~ /"name" = \( "#{@path}" \)/ # Skip the table name
-                next if line =~ /CHILDREN = \(/ # Skip this header
-                next if line =~ /^  \)/ # and its closer
-
-                # Now we should have nothing but records, wrapped in braces
-
-                case line
-                when /^\s+\{/: hash = {}
-                when /^\s+\}/: records << hash
-                when /\s+"(\w+)" = \( (.+) \)/
-                    field = $1
-                    values = $2
-
-                    # Always use an array
-                    hash[field] = []
-
-                    values.split(/, /).each do |value|
-                        if value =~ /^"(.*)"$/
-                            hash[field] << $1
-                        else
-                            raise ArgumentError, "Could not match value %s" % value
-                        end
-                    end
-                else    
-                    raise ArgumentError, "Could not match line %s" % line
-                end
-            end
-
-            records
-        end
-
-        def write(text)
-            text.gsub!(/^#.*\n/,'')
-            text.gsub!(/^$/,'')
-            if text == "" or text == "\n"
-                self.remove
-                return
-            end
-            unless format = self.class.format
-                raise Puppe::DevError, "You must define the NetInfo format to inport"
-            end
-            IO.popen("niload -d #{format} . 1>/dev/null 2>/dev/null", "w") { |p|
-                p.print text
-            }
-
-            unless $? == 0
-                raise ArgumentError, "Failed to write %s" % @path
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/util/graph.rb b/lib/puppet/util/graph.rb
deleted file mode 100644
index d1ef36f..0000000
--- a/lib/puppet/util/graph.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-#  Created by Luke Kanies on 2006-11-16.
-#  Copyright (c) 2006. All rights reserved.
-
-require 'puppet'
-require 'puppet/pgraph'
-
-# A module that handles the small amount of graph stuff in Puppet.
-module Puppet::Util::Graph
-    # Make a graph where each of our children gets converted to
-    # the receiving end of an edge.  Call the same thing on all
-    # of our children, optionally using a block
-    def to_graph(graph = nil, &block)
-        # Allow our calling function to send in a graph, so that we
-        # can call this recursively with one graph.
-        graph ||= Puppet::PGraph.new
-        
-        self.each do |child|
-            unless block_given? and ! yield(child)
-                graph.add_edge(self, child)
-                
-                if child.respond_to?(:to_graph)
-                    child.to_graph(graph, &block)
-                end
-            end
-        end
-
-        # Do a topsort, which will throw an exception if the graph is cyclic.
-        
-        graph
-    end
-end
-
diff --git a/lib/puppet/util/inifile.rb b/lib/puppet/util/inifile.rb
deleted file mode 100644
index 9f5582e..0000000
--- a/lib/puppet/util/inifile.rb
+++ /dev/null
@@ -1,208 +0,0 @@
-# Module Puppet::IniConfig
-# A generic way to parse .ini style files and manipulate them in memory
-# One 'file' can be made up of several physical files. Changes to sections
-# on the file are tracked so that only the physical files in which
-# something has changed are written back to disk
-# Great care is taken to preserve comments and blank lines from the original
-# files
-# 
-# The parsing tries to stay close to python's ConfigParser
-
-require 'puppet/util/filetype'
-
-module Puppet::Util::IniConfig
-    # A section in a .ini file
-    class Section
-        attr_reader :name, :file
-
-        def initialize(name, file)
-            @name = name
-            @file = file
-            @dirty = false
-            @entries = []
-        end
-
-        # Has this section been modified since it's been read in
-        # or written back to disk
-        def dirty?
-            @dirty
-        end
-
-        # Should only be used internally
-        def mark_clean
-            @dirty = false
-        end
-
-        # Add a line of text (e.g., a comment) Such lines
-        # will be written back out in exactly the same
-        # place they were read in
-        def add_line(line)
-            @entries << line
-        end
-
-        # Set the entry 'key=value'. If no entry with the
-        # given key exists, one is appended to teh end of the section
-        def []=(key, value)
-            entry = find_entry(key)
-            @dirty = true
-            if entry.nil?
-                @entries << [key, value]
-            else
-                entry[1] = value
-            end
-        end
-
-        # Return the value associated with KEY. If no such entry
-        # exists, return nil
-        def [](key)
-            entry = find_entry(key)
-            if entry.nil?
-                return nil
-            end
-            return entry[1]
-        end
-
-        # Format the section as text in the way it should be
-        # written to file
-        def format
-            text = "[#{name}]\n"
-            @entries.each do |entry|
-                if entry.is_a?(Array)
-                    key, value = entry
-                    unless value.nil?
-                        text << "#{key}=#{value}\n"
-                    end
-                else
-                    text << entry
-                end
-            end
-            return text
-        end
-
-        private 
-        def find_entry(key)
-            @entries.each do |entry|
-                if entry.is_a?(Array) && entry[0] == key
-                    return entry
-                end
-            end
-            return nil
-        end
-        
-    end
-
-    # A logical .ini-file that can be spread across several physical
-    # files. For each physical file, call #read with the filename
-    class File
-        def initialize
-            @files = {}
-        end
-
-        # Add the contents of the file with name FILE to the
-        # already existing sections
-        def read(file)
-            text = Puppet::Util::FileType.filetype(:flat).new(file).read
-            if text.nil?
-                raise "Could not find #{file}"
-            end
-
-            section = nil   # The name of the current section
-            optname = nil   # The name of the last option in section
-            line = 0
-            @files[file] = []
-            text.each_line do |l|
-                line += 1
-                if l.strip.empty? || "#;".include?(l[0,1]) ||
-                        (l.split(nil, 2)[0].downcase == "rem" && 
-                         l[0,1].downcase == "r")
-                    # Whitespace or comment
-                    if section.nil?
-                        @files[file] << l
-                    else
-                        section.add_line(l)
-                    end
-                elsif " \t\r\n\f".include?(l[0,1]) && section && optname
-                    # continuation line
-                    section[optname] += "\n" + l.chomp
-                elsif l =~ /^\[([^\]]+)\]/
-                    # section heading
-                    section.mark_clean unless section.nil?
-                    section = add_section($1, file)
-                    optname = nil
-                elsif l =~ /^\s*([^\s=]+)\s*\=(.*)$/
-                    # We allow space around the keys, but not the values
-                    # For the values, we don't know if space is significant
-                    if section.nil?
-                        raise "#{file}:#{line}:Key/value pair outside of a section for key #{$1}"
-                    else
-                        section[$1] = $2
-                        optname = $1
-                    end
-                else
-                    raise "#{file}:#{line}: Can't parse '#{l.chomp}'"
-                end
-            end
-            section.mark_clean unless section.nil?
-        end
-
-        # Store all modifications made to sections in this file back
-        # to the physical files. If no modifications were made to 
-        # a physical file, nothing is written
-        def store
-            @files.each do |file, lines|
-                text = ""
-                dirty = false
-                lines.each do |l|
-                    if l.is_a?(Section)
-                        dirty ||= l.dirty?
-                        text << l.format
-                        l.mark_clean
-                    else
-                        text << l
-                    end
-                end
-                if dirty
-                    Puppet::Util::FileType.filetype(:flat).new(file).write(text)
-                end
-            end
-        end
-
-        # Execute BLOCK, passing each section in this file
-        # as an argument
-        def each_section(&block)
-            @files.each do |file, list|
-                list.each do |entry|
-                    if entry.is_a?(Section)
-                        yield(entry)
-                    end
-                end
-            end
-        end
-
-        # Return the Section with the given name or nil
-        def [](name)
-            name = name.to_s
-            each_section do |section|
-                return section if section.name == name
-            end
-            return nil
-        end
-
-        # Return true if the file contains a section with name NAME
-        def include?(name)
-            return ! self[name].nil?
-        end
-
-        # Add a section to be stored in FILE when store is called
-        def add_section(name, file)
-            if include?(name)
-                raise "A section with name #{name} already exists"
-            end
-            result = Section.new(name, file)
-            @files[file] ||= []
-            @files[file] << result
-            return result
-        end
-    end
-end
-
diff --git a/lib/puppet/util/instance_loader.rb b/lib/puppet/util/instance_loader.rb
deleted file mode 100755
index bf4f9b7..0000000
--- a/lib/puppet/util/instance_loader.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require 'puppet/util/autoload'
-require 'puppet/util'
-
-# A module that can easily autoload things for us.  Uses an instance
-# of Puppet::Util::Autoload
-module Puppet::Util::InstanceLoader
-    include Puppet::Util
-
-    # Are we instance-loading this type?
-    def instance_loading?(type)
-        defined?(@autoloaders) and @autoloaders.include?(symbolize(type))
-    end
-
-    # Define a new type of autoloading.
-    def instance_load(type, path, options = {})
-        @autoloaders ||= {}
-        @instances ||= {}
-        type = symbolize(type)
-        @instances[type] = {}
-        @autoloaders[type] = Puppet::Util::Autoload.new(self, path, options)
-
-        # Now define our new simple methods
-        unless respond_to?(type)
-            meta_def(type) do |name|
-                loaded_instance(type, name)
-            end
-        end
-    end
-
-    # Return a list of the names of all instances
-    def loaded_instances(type)
-        @instances[type].keys
-    end
-
-    # Collect the docs for all of our instances.
-    def instance_docs(type)
-        docs = ""
-
-        # Load all instances.
-        instance_loader(type).loadall
-
-        # Use this method so they all get loaded
-        loaded_instances(type).sort { |a,b| a.to_s <=> b.to_s }.each do |name|
-            mod = self.loaded_instance(name)
-            docs += "%s\n%s\n" % [name, "-" * name.to_s.length]
-
-            docs += Puppet::Util::Docs.scrub(mod.doc) + "\n\n"
-        end
-
-        docs
-    end
-
-    # Return the instance hash for our type.
-    def instance_hash(type)
-        @instances[symbolize(type)]
-    end
-
-    # Return the Autoload object for a given type.
-    def instance_loader(type)
-        @autoloaders[symbolize(type)]
-    end
-
-    # Retrieve an alread-loaded instance, or attempt to load our instance.
-    def loaded_instance(type, name)
-        name = symbolize(name)
-        return nil unless instances = instance_hash(type)
-        unless instances.include? name
-            if instance_loader(type).load(name)
-                unless instances.include? name
-                    Puppet.warning(
-                        "Loaded %s file for %s but %s was not defined" % [type, name, type]
-                    )
-                    return nil
-                end
-            else
-                return nil
-            end
-        end
-        instances[name]
-    end
-end
diff --git a/lib/puppet/util/ldap.rb b/lib/puppet/util/ldap.rb
deleted file mode 100644
index 33f01f7..0000000
--- a/lib/puppet/util/ldap.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-#  Created by Luke Kanies on 2008-3-23.
-#  Copyright (c) 2008. All rights reserved.
-module Puppet::Util::Ldap
-end
diff --git a/lib/puppet/util/ldap/connection.rb b/lib/puppet/util/ldap/connection.rb
deleted file mode 100644
index 70fe303..0000000
--- a/lib/puppet/util/ldap/connection.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-#  Created by Luke Kanies on 2008-3-23.
-#  Copyright (c) 2008. All rights reserved.
-require 'puppet/util/ldap'
-
-class Puppet::Util::Ldap::Connection
-    attr_accessor :host, :port, :user, :password, :reset, :ssl
-
-    attr_reader :connection
-
-    # Return a default connection, using our default settings.
-    def self.instance
-        ssl = if Puppet[:ldaptls]
-                  :tls
-              elsif Puppet[:ldapssl]
-                  true
-              else
-                  false
-              end
-
-        options = {}
-        options[:ssl] = ssl
-        if user = Puppet.settings[:ldapuser] and user != ""
-            options[:user] = user
-            if pass = Puppet.settings[:ldappassword] and pass != ""
-                options[:password] = pass
-            end
-        end
-
-        new(Puppet[:ldapserver], Puppet[:ldapport], options)
-    end
-
-    def close
-        connection.unbind if connection.bound?
-    end
-
-    def initialize(host, port, options = {})
-        raise Puppet::Error, "Could not set up LDAP Connection: Missing ruby/ldap libraries" unless Puppet.features.ldap?
-
-        @host, @port = host, port
-
-        options.each do |param, value|
-            begin
-                send(param.to_s + "=", value)
-            rescue
-                raise ArgumentError, "LDAP connections do not support %s parameters" % param
-            end
-        end
-    end
-
-    # Create a per-connection unique name.
-    def name
-        [host, port, user, password, ssl].collect { |p| p.to_s }.join("/")
-    end
-
-    # Should we reset the connection?
-    def reset?
-        reset
-    end
-
-    # Start our ldap connection.
-    def start
-        begin
-            case ssl
-            when :tls:
-                @connection = LDAP::SSLConn.new(host, port, true)
-            when true:
-                @connection = LDAP::SSLConn.new(host, port)
-            else
-                @connection = LDAP::Conn.new(host, port)
-            end
-            @connection.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
-            @connection.set_option(LDAP::LDAP_OPT_REFERRALS, LDAP::LDAP_OPT_ON)
-            @connection.simple_bind(user, password)
-        rescue => detail
-            raise Puppet::Error, "Could not connect to LDAP: %s" % detail
-        end
-    end
-end
diff --git a/lib/puppet/util/ldap/generator.rb b/lib/puppet/util/ldap/generator.rb
deleted file mode 100644
index 2a868b0..0000000
--- a/lib/puppet/util/ldap/generator.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-#  Created by Luke Kanies on 2008-3-28.
-#  Copyright (c) 2008. All rights reserved.
-require 'puppet/util/ldap'
-
-class Puppet::Util::Ldap::Generator
-    # Declare the attribute we'll use to generate the value.
-    def from(source)
-        @source = source
-        return self
-    end
-
-    # Actually do the generation.
-    def generate(value = nil)
-        if value.nil?
-            @generator.call
-        else
-            @generator.call(value)
-        end
-    end
-
-    # Initialize our generator with the name of the parameter
-    # being generated.
-    def initialize(name)
-        @name = name
-    end
-
-    def name
-        @name.to_s
-    end
-
-    def source
-        if defined?(@source) and @source
-            @source.to_s
-        else
-            nil
-        end
-    end
-
-    # Provide the code that does the generation.
-    def with(&block)
-        @generator = block
-        return self
-    end
-end
diff --git a/lib/puppet/util/ldap/manager.rb b/lib/puppet/util/ldap/manager.rb
deleted file mode 100644
index 8d44419..0000000
--- a/lib/puppet/util/ldap/manager.rb
+++ /dev/null
@@ -1,281 +0,0 @@
-require 'puppet/util/ldap'
-require 'puppet/util/ldap/connection'
-require 'puppet/util/ldap/generator'
-
-# The configuration class for LDAP providers, plus
-# connection handling for actually interacting with ldap.
-class Puppet::Util::Ldap::Manager
-    attr_reader :objectclasses, :puppet2ldap, :location, :rdn
-
-    # A null-op that just returns the config.
-    def and
-        return self
-    end
-
-    # Set the offset from the search base and return the config.
-    def at(location)
-        @location = location
-        return self
-    end
-
-    # The basic search base.
-    def base
-        [location, Puppet[:ldapbase]].join(",")
-    end
-
-    # Convert the name to a dn, then pass the args along to
-    # our connection.
-    def create(name, attributes)
-        attributes = attributes.dup
-
-        # Add the objectclasses
-        attributes["objectClass"] = objectclasses.collect { |o| o.to_s }
-        attributes["objectClass"] << "top" unless attributes["objectClass"].include?("top")
-
-        attributes[rdn.to_s] = [name]
-
-        # Generate any new values we might need.
-        generate(attributes)
-
-        # And create our resource.
-        connect { |conn| conn.add dn(name), attributes }
-    end
-
-    # Open, yield, and close the connection.  Cannot be left
-    # open, at this point.
-    def connect
-        raise ArgumentError, "You must pass a block to #connect" unless block_given?
-
-        unless defined?(@connection) and @connection
-            if Puppet[:ldaptls]
-                ssl = :tls
-            elsif Puppet[:ldapssl]
-                ssl = true
-            else
-                ssl = false
-            end
-            options = {:ssl => ssl}
-            if user = Puppet[:ldapuser] and user != ""
-                options[:user] = user
-            end
-            if password = Puppet[:ldappassword] and password != ""
-                options[:password] = password
-            end
-            @connection = Puppet::Util::Ldap::Connection.new(Puppet[:ldapserver], Puppet[:ldapport], options)
-        end
-        @connection.start
-        begin
-            yield @connection.connection
-        ensure
-            @connection.close
-        end
-        return nil
-    end
-
-    # Convert the name to a dn, then pass the args along to
-    # our connection.
-    def delete(name)
-        connect { |connection| connection.delete dn(name) }
-    end
-
-    # Calculate the dn for a given resource.
-    def dn(name)
-        ["%s=%s" % [rdn, name], base].join(",")
-    end
-
-    # Convert an ldap-style entry hash to a provider-style hash.
-    def entry2provider(entry)
-        raise ArgumentError, "Could not get dn from ldap entry" unless entry["dn"]
-
-        # DN is always a single-entry array.  Strip off the bits before the
-        # first comma, then the bits after the remaining equal sign.  This is the
-        # name.
-        name = entry["dn"].dup.pop.split(",").shift.split("=").pop
-
-        result = {:name => name}
-
-        @ldap2puppet.each do |ldap, puppet|
-            result[puppet] = entry[ldap.to_s] || :absent
-        end
-
-        result
-    end
-
-    # Create our normal search filter.
-    def filter
-        return "objectclass=%s" % objectclasses[0] if objectclasses.length == 1
-        return "(&(objectclass=" + objectclasses.join(")(objectclass=") + "))"
-    end
-
-    # Find the associated entry for a resource.  Returns a hash, minus
-    # 'dn', or nil if the entry cannot be found.
-    def find(name)
-        result = nil
-        connect do |conn|
-            begin
-                conn.search2(dn(name), 0, "objectclass=*") do |result|
-                    # Convert to puppet-appropriate attributes
-                    return entry2provider(result)
-                end
-            rescue => detail
-                return nil
-            end
-        end
-    end
-
-    # Declare a new attribute generator.
-    def generates(parameter)
-        @generators << Puppet::Util::Ldap::Generator.new(parameter)
-        @generators[-1]
-    end
-
-    # Generate any extra values we need to make the ldap entry work.
-    def generate(values)
-        return unless @generators.length > 0
-
-        @generators.each do |generator|
-            # Don't override any values that might exist.
-            next if values[generator.name]
-
-            if generator.source
-                unless value = values[generator.source]
-                    raise ArgumentError, "%s must be defined to generate %s" % [generator.source, generator.name]
-                end
-                result = generator.generate(value)
-            else
-                result = generator.generate
-            end
-
-            result = [result] unless result.is_a?(Array)
-            result = result.collect { |r| r.to_s }
-
-            values[generator.name] = result
-        end
-    end
-
-    def initialize
-        @rdn = :cn
-        @generators = []
-    end
-
-    # Specify what classes this provider models.
-    def manages(*classes)
-        @objectclasses = classes
-        return self
-    end
-
-    # Specify the attribute map.  Assumes the keys are the puppet
-    # attributes, and the values are the ldap attributes, and creates a map
-    # for each direction.
-    def maps(attributes)
-        # The map with the puppet attributes as the keys
-        @puppet2ldap = attributes
-
-        # and the ldap attributes as the keys.
-        @ldap2puppet = attributes.inject({}) { |map, ary| map[ary[1]] = ary[0]; map }
-
-        return self
-    end
-
-    # Return the ldap name for a puppet attribute.
-    def ldap_name(attribute)
-        @puppet2ldap[attribute].to_s
-    end
-
-    # Convert the name to a dn, then pass the args along to
-    # our connection.
-    def modify(name, mods)
-        connect { |connection| connection.modify dn(name), mods }
-    end
-
-    # Specify the rdn that we use to build up our dn.
-    def named_by(attribute)
-        @rdn = attribute
-        self
-    end
-
-    # Return the puppet name for an ldap attribute.
-    def puppet_name(attribute)
-        @ldap2puppet[attribute]
-    end
-
-    # Search for all entries at our base.  A potentially expensive search.
-    def search(sfilter = nil)
-        sfilter ||= filter()
-
-        result = []
-        connect do |conn|
-            conn.search2(base, 1, sfilter) do |entry|
-                result << entry2provider(entry)
-            end
-        end
-        return nil if result.empty?
-        return result
-    end
-
-    # Update the ldap entry with the desired state.
-    def update(name, is, should)
-        if should[:ensure] == :absent
-            Puppet.info "Removing %s from ldap" % dn(name)
-            delete(name)
-            return
-        end
-
-        # We're creating a new entry
-        if is.empty? or is[:ensure] == :absent
-            Puppet.info "Creating %s in ldap" % dn(name)
-            # Remove any :absent params and :ensure, then convert the names to ldap names.
-            attrs = ldap_convert(should)
-            create(name, attrs)
-            return
-        end
-
-        # We're modifying an existing entry.  Yuck.
-
-        mods = []
-        # For each attribute we're deleting that is present, create a
-        # modify instance for deletion.
-        [is.keys, should.keys].flatten.uniq.each do |property|
-            # They're equal, so do nothing.
-            next if is[property] == should[property]
-
-            attributes = ldap_convert(should)
-
-            prop_name = ldap_name(property).to_s
-
-            # We're creating it.
-            if is[property] == :absent or is[property].nil?
-                mods << LDAP::Mod.new(LDAP::LDAP_MOD_ADD, prop_name, attributes[prop_name])
-                next
-            end
-
-            # We're deleting it
-            if should[property] == :absent or should[property].nil?
-                mods << LDAP::Mod.new(LDAP::LDAP_MOD_DELETE, prop_name, [])
-                next
-            end
-
-            # We're replacing an existing value
-            mods << LDAP::Mod.new(LDAP::LDAP_MOD_REPLACE, prop_name, attributes[prop_name])
-        end
-
-        modify(name, mods)
-    end
-
-    # Is this a complete ldap configuration?
-    def valid?
-        location and objectclasses and ! objectclasses.empty? and puppet2ldap
-    end
-
-    private
-
-    # Convert a hash of attributes to ldap-like forms.  This mostly means
-    # getting rid of :ensure and making sure everything's an array of strings.
-    def ldap_convert(attributes)
-        attributes.reject { |param, value| value == :absent or param == :ensure }.inject({}) do |result, ary|
-            value = (ary[1].is_a?(Array) ? ary[1] : [ary[1]]).collect { |v| v.to_s }
-            result[ldap_name(ary[0])] = value
-            result
-        end
-    end
-end
diff --git a/lib/puppet/util/loadedfile.rb b/lib/puppet/util/loadedfile.rb
deleted file mode 100755
index c91fb84..0000000
--- a/lib/puppet/util/loadedfile.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-# A simple class that tells us when a file has changed and thus whether we
-# should reload it
-
-require 'puppet'
-
-module Puppet
-    class NoSuchFile < Puppet::Error; end
-    class Util::LoadedFile
-        attr_reader :file, :statted
-
-        # Provide a hook for setting the timestamp during testing, so we don't
-        # have to depend on the granularity of the filesystem.
-        attr_writer :tstamp
-
-        # Determine whether the file has changed and thus whether it should
-        # be reparsed.
-        def changed?
-            # Allow the timeout to be disabled entirely.
-            if Puppet[:filetimeout] < 0
-                return true
-            end
-            tmp = stamp()
-
-            # We use a different internal variable than the stamp method
-            # because it doesn't keep historical state and we do -- that is,
-            # we will always be comparing two timestamps, whereas
-            # stamp() just always wants the latest one.
-            if tmp == @tstamp
-                return false
-            else
-                @tstamp = tmp
-                return @tstamp
-            end
-        end
-
-        # Create the file.  Must be passed the file path.
-        def initialize(file)
-            @file = file
-            unless FileTest.exists?(@file)
-                raise Puppet::NoSuchFile,
-                    "Can not use a non-existent file for parsing"
-            end
-            @statted = 0
-            @stamp = nil
-            @tstamp = stamp()
-        end
-
-        # Retrieve the filestamp, but only refresh it if we're beyond our
-        # filetimeout
-        def stamp
-            if @stamp.nil? or (Time.now.to_i - @statted >= Puppet[:filetimeout])
-                @statted = Time.now.to_i
-                begin
-                    @stamp = File.stat(@file).ctime
-                rescue Errno::ENOENT
-                    @stamp = Time.now
-                end
-            end
-            return @stamp
-        end
-
-        def to_s
-            @file
-        end
-    end
-end
-
diff --git a/lib/puppet/util/log.rb b/lib/puppet/util/log.rb
deleted file mode 100644
index 0dfd36d..0000000
--- a/lib/puppet/util/log.rb
+++ /dev/null
@@ -1,547 +0,0 @@
-require 'syslog'
-require 'puppet/util/tagging'
-
-# Pass feedback to the user.  Log levels are modeled after syslog's, and it is
-# expected that that will be the most common log destination.  Supports
-# multiple destinations, one of which is a remote server.
-class Puppet::Util::Log
-    include Puppet::Util
-    include Puppet::Util::Tagging
-
-    @levels = [:debug,:info,:notice,:warning,:err,:alert,:emerg,:crit]
-    @loglevel = 2
-
-    @desttypes = {}
-
-    # A type of log destination.
-    class Destination
-        class << self
-            attr_accessor :name
-        end
-
-        def self.initvars
-            @matches = []
-        end
-
-        # Mark the things we're supposed to match.
-        def self.match(obj)
-            @matches ||= []
-            @matches << obj
-        end
-
-        # See whether we match a given thing.
-        def self.match?(obj)
-            # Convert single-word strings into symbols like :console and :syslog
-            if obj.is_a? String and obj =~ /^\w+$/
-                obj = obj.downcase.intern
-            end
-
-            @matches.each do |thing|
-                # Search for direct matches or class matches
-                return true if thing === obj or thing == obj.class.to_s
-            end
-            return false
-        end
-
-        def name
-            if defined? @name
-                return @name
-            else
-                return self.class.name
-            end
-        end
-
-        # Set how to handle a message.
-        def self.sethandler(&block)
-            define_method(:handle, &block)
-        end
-
-        # Mark how to initialize our object.
-        def self.setinit(&block)
-            define_method(:initialize, &block)
-        end
-    end
-
-    # Create a new destination type.
-    def self.newdesttype(name, options = {}, &block)
-        dest = genclass(name, :parent => Destination, :prefix => "Dest",
-            :block => block,
-            :hash => @desttypes,
-            :attributes => options
-        )
-        dest.match(dest.name)
-
-        return dest
-    end
-
-    @destinations = {}
-
-    class << self
-        include Puppet::Util
-        include Puppet::Util::ClassGen
-    end
-
-    # Reset all logs to basics.  Basically just closes all files and undefs
-    # all of the other objects.
-    def Log.close(dest = nil)
-        if dest
-            if @destinations.include?(dest)
-                if @destinations.respond_to?(:close)
-                    @destinations[dest].close
-                end
-                @destinations.delete(dest)
-            end
-        else
-            @destinations.each { |name, dest|
-                if dest.respond_to?(:flush)
-                    dest.flush
-                end
-                if dest.respond_to?(:close)
-                    dest.close
-                end
-            }
-            @destinations = {}
-        end
-    end
-
-    # Flush any log destinations that support such operations.
-    def Log.flush
-        @destinations.each { |type, dest|
-            if dest.respond_to?(:flush)
-                dest.flush
-            end
-        }
-    end
-
-    # Create a new log message.  The primary role of this method is to
-    # avoid creating log messages below the loglevel.
-    def Log.create(hash)
-        unless hash.include?(:level)
-            raise Puppet::DevError, "Logs require a level"
-        end
-        unless @levels.index(hash[:level])
-            raise Puppet::DevError, "Invalid log level %s" % hash[:level]
-        end
-        if @levels.index(hash[:level]) >= @loglevel 
-            return Puppet::Util::Log.new(hash)
-        else
-            return nil
-        end
-    end
-
-    def Log.destinations
-        return @destinations.keys
-    end
-
-    # Yield each valid level in turn
-    def Log.eachlevel
-        @levels.each { |level| yield level }
-    end
-
-    # Return the current log level.
-    def Log.level
-        return @levels[@loglevel]
-    end
-
-    # Set the current log level.
-    def Log.level=(level)
-        unless level.is_a?(Symbol)
-            level = level.intern
-        end
-
-        unless @levels.include?(level)
-            raise Puppet::DevError, "Invalid loglevel %s" % level
-        end
-
-        @loglevel = @levels.index(level)
-    end
-
-    def Log.levels
-        @levels.dup
-    end
-
-    newdesttype :syslog do
-        def close
-            Syslog.close
-        end
-
-        def initialize
-            if Syslog.opened?
-                Syslog.close
-            end
-            name = Puppet[:name]
-            name = "puppet-#{name}" unless name =~ /puppet/
-
-            options = Syslog::LOG_PID | Syslog::LOG_NDELAY
-
-            # XXX This should really be configurable.
-            str = Puppet[:syslogfacility]
-            begin
-                facility = Syslog.const_get("LOG_#{str.upcase}")
-            rescue NameError
-                raise Puppet::Error, "Invalid syslog facility %s" % str
-            end
-
-            @syslog = Syslog.open(name, options, facility)
-        end
-
-        def handle(msg)
-            # XXX Syslog currently has a bug that makes it so you
-            # cannot log a message with a '%' in it.  So, we get rid
-            # of them.
-            if msg.source == "Puppet"
-                @syslog.send(msg.level, msg.to_s.gsub("%", '%%'))
-            else
-                @syslog.send(msg.level, "(%s) %s" %
-                    [msg.source.to_s.gsub("%", ""),
-                        msg.to_s.gsub("%", '%%')
-                    ]
-                )
-            end
-        end
-    end
-
-    newdesttype :file do
-        match(/^\//)
-
-        def close
-            if defined? @file
-                @file.close
-                @file = nil
-            end
-        end
-
-        def flush
-            if defined? @file
-                @file.flush
-            end
-        end
-
-        def initialize(path)
-            @name = path
-            # first make sure the directory exists
-            # We can't just use 'Config.use' here, because they've
-            # specified a "special" destination.
-            unless FileTest.exist?(File.dirname(path))
-                Puppet.recmkdir(File.dirname(path))
-                Puppet.info "Creating log directory %s" % File.dirname(path)
-            end
-
-            # create the log file, if it doesn't already exist
-            file = File.open(path, File::WRONLY|File::CREAT|File::APPEND)
-
-            @file = file
-
-            @autoflush = Puppet[:autoflush]
-        end
-
-        def handle(msg)
-            @file.puts("%s %s (%s): %s" %
-                [msg.time, msg.source, msg.level, msg.to_s])
-
-            @file.flush if @autoflush
-        end
-    end
-
-    newdesttype :console do
-                
-        
-        RED 	= {:console => "", :html => "FFA0A0"}
-        GREEN 	= {:console => "", :html => "00CD00"}
-        YELLOW 	= {:console => "", :html => "FFFF60"}
-        BLUE 	= {:console => "", :html => "80A0FF"}
-        PURPLE 	= {:console => "", :html => "FFA500"}
-        CYAN 	= {:console => "", :html => "40FFFF"}
-        WHITE	= {:console => "", :html => "FFFFFF"}
-        HRED	= {:console => "", :html => "FFA0A0"}
-        HGREEN 	= {:console => "", :html => "00CD00"}
-        HYELLOW	= {:console => "", :html => "FFFF60"}
-        HBLUE 	= {:console => "", :html => "80A0FF"}
-        HPURPLE	= {:console => "", :html => "FFA500"}
-        HCYAN 	= {:console => "", :html => "40FFFF"}
-        HWHITE	= {:console => "", :html => "FFFFFF"}
-        RESET 	= {:console => "", :html => ""}
-
-        @@colormap = {
-            :debug => WHITE,
-            :info => GREEN,
-            :notice => CYAN,
-            :warning => YELLOW,
-            :err => HPURPLE,
-            :alert => RED,
-            :emerg => HRED,
-            :crit => HRED
-        }
-        
-        def colorize(level, str)
-            case Puppet[:color]
-            when false: str
-            when true, :ansi, "ansi": console_color(level, str)
-            when :html, "html": html_color(level, str)
-            end
-        end
-        
-        def console_color(level, str)
-            @@colormap[level][:console] + str + RESET[:console]
-        end
-        
-        def html_color(level, str)
-            %{<span style="color: %s">%s</span>} % [@@colormap[level][:html], str]
-        end
-
-        def initialize
-            # Flush output immediately.
-            $stdout.sync = true
-        end
-
-        def handle(msg)
-            if msg.source == "Puppet"
-                puts colorize(msg.level, "%s: %s" % [msg.level, msg.to_s])
-            else
-                puts colorize(msg.level, "%s: %s: %s" % [msg.level, msg.source, msg.to_s])
-            end
-        end
-    end
-
-    newdesttype :host do
-        def initialize(host)
-            Puppet.info "Treating %s as a hostname" % host
-            args = {}
-            if host =~ /:(\d+)/
-                args[:Port] = $1
-                args[:Server] = host.sub(/:\d+/, '')
-            else
-                args[:Server] = host
-            end
-
-            @name = host
-
-            @driver = Puppet::Network::Client::LogClient.new(args)
-        end
-
-        def handle(msg)
-            unless msg.is_a?(String) or msg.remote
-                unless defined? @hostname
-                    @hostname = Facter["hostname"].value
-                end
-                unless defined? @domain
-                    @domain = Facter["domain"].value
-                    if @domain
-                        @hostname += "." + @domain
-                    end
-                end
-                if msg.source =~ /^\//
-                    msg.source = @hostname + ":" + msg.source
-                elsif msg.source == "Puppet"
-                    msg.source = @hostname + " " + msg.source
-                else
-                    msg.source = @hostname + " " + msg.source
-                end
-                begin
-                    #puts "would have sent %s" % msg
-                    #puts "would have sent %s" %
-                    #    CGI.escape(YAML.dump(msg))
-                    begin
-                        tmp = CGI.escape(YAML.dump(msg))
-                    rescue => detail
-                        puts "Could not dump: %s" % detail.to_s
-                        return
-                    end
-                    # Add the hostname to the source
-                    @driver.addlog(tmp)
-                rescue => detail
-                    if Puppet[:trace]
-                        puts detail.backtrace
-                    end
-                    Puppet.err detail
-                    Puppet::Util::Log.close(self)
-                end
-            end
-        end
-    end
-
-    # Log to a transaction report.
-    newdesttype :report do
-        match "Puppet::Transaction::Report"
-
-        def initialize(report)
-            @report = report
-        end
-
-        def handle(msg)
-            # Only add messages from objects, since anything else is
-            # probably unrelated to this run.
-            if msg.objectsource?
-                @report.newlog(msg)
-            end
-        end
-    end
-
-    # Log to an array, just for testing.
-    newdesttype :array do
-        match "Array"
-
-        def initialize(array)
-            @array = array
-        end
-
-        def handle(msg)
-            @array << msg
-        end
-    end
-
-    # Create a new log destination.
-    def Log.newdestination(dest)
-        # Each destination can only occur once.
-        if @destinations.find { |name, obj| obj.name == dest }
-            return
-        end
-
-        name, type = @desttypes.find do |name, klass|
-            klass.match?(dest)
-        end
-
-        unless type
-            raise Puppet::DevError, "Unknown destination type %s" % dest
-        end
-
-        begin
-            if type.instance_method(:initialize).arity == 1
-                @destinations[dest] = type.new(dest)
-            else
-                @destinations[dest] = type.new()
-            end
-        rescue => detail
-            if Puppet[:debug]
-                puts detail.backtrace
-            end
-
-            # If this was our only destination, then add the console back in.
-            if @destinations.empty? and (dest != :console and dest != "console")
-                newdestination(:console)
-            end
-        end
-    end
-
-    # Route the actual message. FIXME There are lots of things this method
-    # should do, like caching, storing messages when there are not yet
-    # destinations, a bit more.  It's worth noting that there's a potential
-    # for a loop here, if the machine somehow gets the destination set as
-    # itself.
-    def Log.newmessage(msg)
-        if @levels.index(msg.level) < @loglevel 
-            return
-        end
-
-        @destinations.each do |name, dest|
-            threadlock(dest) do
-                dest.handle(msg)
-            end
-        end
-    end
-
-    def Log.sendlevel?(level)
-        @levels.index(level) >= @loglevel 
-    end
-
-    # Reopen all of our logs.
-    def Log.reopen
-        Puppet.notice "Reopening log files"
-        types = @destinations.keys
-        @destinations.each { |type, dest|
-            if dest.respond_to?(:close)
-                dest.close
-            end
-        }
-        @destinations.clear
-        # We need to make sure we always end up with some kind of destination
-        begin
-            types.each { |type|
-                Log.newdestination(type)
-            }
-        rescue => detail
-            if @destinations.empty?
-                Log.newdestination(:syslog)
-                Puppet.err detail.to_s
-            end
-        end
-    end
-
-    # Is the passed level a valid log level?
-    def self.validlevel?(level)
-        @levels.include?(level)
-    end
-
-    attr_accessor :level, :message, :time, :remote
-    attr_reader :source
-
-    def initialize(args)
-        unless args.include?(:level) && args.include?(:message)
-            raise ArgumentError, "Puppet::Util::Log called incorrectly"
-        end
-
-        if args[:level].class == String
-            @level = args[:level].intern
-        elsif args[:level].class == Symbol
-            @level = args[:level]
-        else
-            raise ArgumentError, "Level is not a string or symbol: #{args[:level].class}"
-        end
-
-        @message = args[:message].to_s
-        @time = Time.now
-
-        raise ArgumentError, "Invalid log level %s" % level unless self.class.validlevel?(level)
-
-        if tags = args[:tags]
-            tags.each { |t| self.tag(t) }
-        end
-
-        self.source = args[:source] || "Puppet"
-
-        # Tag myself with my log level
-        tag(level)
-
-        Log.newmessage(self)
-    end
-
-    # Was the source of this log a Puppet resource or parameter?
-    def objectsource?
-        if defined? @objectsource and @objectsource
-            @objectsource
-        else
-            false
-        end
-    end
-
-    # If they pass a source in to us, we make sure it is a string, and
-    # we retrieve any tags we can.
-    def source=(source)
-        # We can't store the actual source, we just store the path.
-        # We can't just check for whether it responds to :path, because
-        # plenty of providers respond to that in their normal function.
-        if (source.is_a?(Puppet::Type) or source.is_a?(Puppet::Parameter)) and source.respond_to?(:path)
-            @objectsource = true
-            @source = source.path
-        else
-            @objectsource = false
-            @source = source.to_s
-        end
-        if source.respond_to?(:tags)
-            source.tags.each { |t| tag(t) }
-        end
-    end
-
-    def to_report
-        "%s %s (%s): %s" % [self.time, self.source, self.level, self.to_s]
-    end
-
-    def to_s
-        return @message
-    end
-end
-
-# This is for backward compatibility from when we changed the constant to Puppet::Util::Log
-# because the reports include the constant name.  Apparently the alias was created in
-# March 2007, should could probably be removed soon.
-Puppet::Log = Puppet::Util::Log
diff --git a/lib/puppet/util/log_paths.rb b/lib/puppet/util/log_paths.rb
deleted file mode 100644
index 1a6bafc..0000000
--- a/lib/puppet/util/log_paths.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-#  Created by Luke Kanies on 2007-07-04.
-#  Copyright (c) 2007. All rights reserved.
-
-module Puppet::Util::LogPaths
-    # return the full path to us, for logging and rollback
-    # some classes (e.g., FileTypeRecords) will have to override this
-    def path
-        unless defined? @path
-            @path = pathbuilder
-        end
-
-        return "/" + @path.join("/")
-    end
-end
-
diff --git a/lib/puppet/util/logging.rb b/lib/puppet/util/logging.rb
deleted file mode 100644
index 1348074..0000000
--- a/lib/puppet/util/logging.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# A module to make logging a bit easier.
-require 'puppet/util/log'
-
-module Puppet::Util::Logging
-    # Create a method for each log level.
-    Puppet::Util::Log.eachlevel do |level|
-        define_method(level) do |args|
-            if args.is_a?(Array)
-                args = args.join(" ")
-            end
-            Puppet::Util::Log.create(
-                :level => level,
-                :source => self,
-                :message => args
-            )
-        end
-    end
-end
-
diff --git a/lib/puppet/util/metaid.rb b/lib/puppet/util/metaid.rb
deleted file mode 100644
index 0c38a5b..0000000
--- a/lib/puppet/util/metaid.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-class Object
-    # The hidden singleton lurks behind everyone
-    def metaclass; class << self; self; end; end
-    def meta_eval(&blk); metaclass.instance_eval(&blk); end
-
-    # Adds methods to a metaclass
-    def meta_def(name, &blk)
-        meta_eval { define_method name, &blk }
-    end
-
-    # Remove metaclass methods.
-    def meta_undef(name, &blk)
-        meta_eval { remove_method name }
-    end
-
-    # Defines an instance method within a class
-    def class_def(name, &blk)
-        class_eval { define_method name, &blk }
-    end
-end
-
diff --git a/lib/puppet/util/methodhelper.rb b/lib/puppet/util/methodhelper.rb
deleted file mode 100644
index 32fca18..0000000
--- a/lib/puppet/util/methodhelper.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# Where we store helper methods related to, um, methods.
-module Puppet::Util::MethodHelper
-    def requiredopts(*names)
-        names.each do |name|
-            if self.send(name).nil?
-                devfail("%s is a required option for %s" % [name, self.class])
-            end
-        end
-    end
-
-    # Iterate over a hash, treating each member as an attribute.
-    def set_options(options)
-        options.each do |param,value|
-            method = param.to_s + "="
-            begin
-                self.send(method, value)
-            rescue NoMethodError
-                raise ArgumentError, "Invalid parameter %s to object class %s" %
-                        [param,self.class.to_s]
-            end
-        end
-    end
-
-    # Take a hash and convert all of the keys to symbols if possible.
-    def symbolize_options(options)
-        options.inject({}) do |hash, opts|
-            if opts[0].respond_to? :intern
-                hash[opts[0].intern] = opts[1]
-            else
-                hash[opts[0]] = opts[1]
-            end
-            hash
-        end
-    end
-end
diff --git a/lib/puppet/util/metric.rb b/lib/puppet/util/metric.rb
deleted file mode 100644
index e6d7678..0000000
--- a/lib/puppet/util/metric.rb
+++ /dev/null
@@ -1,165 +0,0 @@
-# included so we can test object types
-require 'puppet'
-
-# A class for handling metrics.  This is currently ridiculously hackish.
-class Puppet::Util::Metric
-    
-    # Load the library as a feature, so we can test its presence.
-    # It's only used by this class, so there's no reason to move it
-    # to the main feature list.
-    Puppet.features.add :rrd, :libs => 'RRDtool'
-
-    attr_accessor :type, :name, :value, :label
-    attr_writer :values
-
-    attr_writer :basedir
-
-    # Return a specific value
-    def [](name)
-        if value = @values.find { |v| v[0] == name }
-            return value[2]
-        else
-            return nil
-        end
-    end
-
-    def basedir
-        if defined? @basedir
-            @basedir
-        else
-            Puppet[:rrddir]
-        end
-    end
-
-    def create(start = nil)
-        Puppet.settings.use(:main, :metrics)
-
-        start ||= Time.now.to_i - 5
-
-        @rrd = RRDtool.new(self.path)
-        args = [] 
-
-        values.each { |value|
-            # the 7200 is the heartbeat -- this means that any data that isn't
-            # more frequently than every two hours gets thrown away
-            args.push "DS:%s:GAUGE:7200:U:U" % [value[0]]
-        }
-        args.push "RRA:AVERAGE:0.5:1:300"
-
-        begin
-            @rrd.create( Puppet[:rrdinterval].to_i, start, args)
-        rescue => detail
-            raise "Could not create RRD file %s: %s" % [path,detail]
-        end
-    end
-
-    def dump
-        puts @rrd.info
-    end
-
-    def graph(range = nil)
-        unless Puppet.features.rrd?
-            Puppet.warning "RRD library is missing; cannot graph metrics"
-            return
-        end
-
-        unit = 60 * 60 * 24
-        colorstack = %w{#00ff00 #ff0000 #0000ff #ffff00 #ff99ff #ff9966 #66ffff #990000 #099000 #000990 #f00990 #0f0f0f #555555 #333333 #ffffff}
-
-        {:daily => unit, :weekly => unit * 7, :monthly => unit * 30, :yearly => unit * 365}.each do |name, time|
-            file = self.path.sub(/\.rrd$/, "-%s.png" % name)
-            args = [file]
-
-            args.push("--title",self.label)
-            args.push("--imgformat","PNG")
-            args.push("--interlace")
-            i = 0
-            defs = []
-            lines = []
-            #p @values.collect { |s,l| s }
-            values.zip(colorstack).each { |value,color|
-                next if value.nil?
-                # this actually uses the data label
-                defs.push("DEF:%s=%s:%s:AVERAGE" % [value[0],self.path,value[0]])
-                lines.push("LINE2:%s%s:%s" % [value[0],color,value[1]])
-            }
-            args << defs
-            args << lines
-            args.flatten!
-            if range 
-                args.push("--start",range[0],"--end",range[1])
-            else
-                args.push("--start", Time.now.to_i - time, "--end", Time.now.to_i)
-            end
-
-            begin
-                #Puppet.warning "args = #{args}"
-                RRDtool.graph( args )
-            rescue => detail
-                Puppet.err "Failed to graph %s: %s" % [self.name,detail]
-            end
-        end
-    end
-
-    def initialize(name,label = nil)
-        @name = name.to_s
-
-        @label = label || labelize(name)
-
-        @values = []
-    end
-
-    def path
-        return File.join(self.basedir, @name + ".rrd")
-    end
-
-    def newvalue(name,value,label = nil)
-        label ||= labelize(name)
-        @values.push [name,label,value]
-    end
-
-    def store(time)
-        unless Puppet.features.rrd?
-            Puppet.warning "RRD library is missing; cannot store metrics"
-            return
-        end
-        unless FileTest.exists?(self.path)
-            self.create(time - 5)
-        end
-
-        @rrd ||= RRDtool.new(self.path)
-
-        # XXX this is not terribly error-resistant
-        args = [time]
-        temps = []
-        values.each { |value|
-            #Puppet.warning "value[0]: #{value[0]}; value[1]: #{value[1]}; value[2]: #{value[2]}; "
-            args.push value[2]
-            temps.push value[0]
-        }
-        arg = args.join(":")
-        template = temps.join(":")
-        begin
-            @rrd.update( template, [ arg ] )
-            #system("rrdtool updatev %s '%s'" % [self.path, arg])
-        rescue => detail
-            raise Puppet::Error, "Failed to update %s: %s" % [self.name,detail]
-        end
-    end
-
-    def values
-        @values.sort { |a, b| a[1] <=> b[1] }
-    end
-
-    private
-    
-    # Convert a name into a label.
-    def labelize(name)
-        name.to_s.capitalize.gsub("_", " ")
-    end
-end
-
-# This is necessary because we changed the class path in early 2007,
-# and reports directly yaml-dump these metrics, so both client and server
-# have to agree on the class name.
-Puppet::Metric = Puppet::Util::Metric
diff --git a/lib/puppet/util/nagios_maker.rb b/lib/puppet/util/nagios_maker.rb
deleted file mode 100644
index a7aae4e..0000000
--- a/lib/puppet/util/nagios_maker.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'puppet/external/nagios'
-require 'puppet/external/nagios/base'
-require 'puppet/provider/naginator'
-
-module Puppet::Util::NagiosMaker
-    # Create a new nagios type, using all of the parameters
-    # from the parser.
-    def self.create_nagios_type(name)
-        name = name.to_sym
-        full_name = ("nagios_" + name.to_s).to_sym
-
-        raise(Puppet::DevError, "No nagios type for %s" % name) unless nagtype = Nagios::Base.type(name)
-
-        type = Puppet::Type.newtype(full_name) {}
-
-        type.ensurable
-
-        type.newparam(nagtype.namevar, :namevar => true) do
-            desc "The name parameter for Nagios type %s" % nagtype.name
-        end
-
-        # We deduplicate the parameters because it makes sense to allow Naginator to have dupes.
-        nagtype.parameters.uniq.each do |param|
-            next if param == nagtype.namevar
-
-            # We can't turn these parameter names into constants, so at least for now they aren't
-            # supported.
-            next if param.to_s =~ /^[0-9]/
-
-            type.newproperty(param) do
-                desc "Nagios configuration file parameter."
-            end
-        end
-
-        type.newproperty(:target) do
-            desc 'target'
-
-            defaultto do
-                resource.class.defaultprovider.default_target
-            end
-        end
-
-        target = "/etc/nagios/#{full_name.to_s}.cfg"
-        provider = type.provide(:naginator, :parent => Puppet::Provider::Naginator, :default_target => target) {}
-
-        type.desc "The Nagios type #{name.to_s}.  This resource type is autogenerated using the
-            model developed in Naginator_, and all of the Nagios types are generated using the
-            same code and the same library.
-
-            This type generates Nagios configuration statements in Nagios-parseable configuration
-            files.  By default, the statements will be added to ``#{target}``, but
-            you can send them to a different file by setting their ``target`` attribute.
-
-            .. _naginator: http://reductivelabs.com/trac/naginator
-        "
-    end
-end
diff --git a/lib/puppet/util/package.rb b/lib/puppet/util/package.rb
deleted file mode 100644
index 00e04f6..0000000
--- a/lib/puppet/util/package.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require 'puppet'
-
-module Puppet::Util::Package
-    def versioncmp(version_a, version_b)
-        vre = /[-.]|\d+|[^-.\d]+/
-        ax = version_a.scan(vre)
-        bx = version_b.scan(vre)
-
-        while (ax.length>0 && bx.length>0) do
-            a = ax.shift
-            b = bx.shift
-
-            if( a == b )                 then next
-            elsif (a == '-' && b == '-') then next 
-            elsif (a == '-')             then return -1
-            elsif (b == '-')             then return 1
-            elsif (a == '.' && b == '.') then next 
-            elsif (a == '.' )            then return -1
-            elsif (b == '.' )            then return 1
-            elsif (a =~ /^\d+$/ && b =~ /^\d+$/) then
-                if( a =~ /^0/ or b =~ /^0/ ) then
-                    return a.to_s.upcase <=> b.to_s.upcase
-                end
-                return a.to_i <=> b.to_i
-            else 
-                return a.upcase <=> b.upcase
-            end
-        end
-        return version_a <=> version_b;
-    end
-end
diff --git a/lib/puppet/util/pidlock.rb b/lib/puppet/util/pidlock.rb
deleted file mode 100644
index fae8134..0000000
--- a/lib/puppet/util/pidlock.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-require 'fileutils'
-
-class Puppet::Util::Pidlock
-	attr_reader :lockfile
-	
-	def initialize(lockfile)
-		@lockfile = lockfile
-	end
-	
-	def locked?
-		clear_if_stale
-		File.exists? @lockfile
-	end
-	
-	def mine?
-		Process.pid == lock_pid
-	end
-
-	def anonymous?
-		return false unless File.exists?(@lockfile)
-		File.read(@lockfile) == ""
-	end
-	
-	def lock(opts = {})
-		opts = {:anonymous => false}.merge(opts)
-
-		if locked?
-			mine?
-		else
-			if opts[:anonymous]
-				File.open(@lockfile, 'w') { |fd| true }
-			else
-				File.open(@lockfile, "w") { |fd| fd.write(Process.pid) }
-			end
-			true
-		end
-	end
-	
-	def unlock(opts = {})
-		opts = {:anonymous => false}.merge(opts)
-
-		if mine? or (opts[:anonymous] and anonymous?)
-			File.unlink(@lockfile)
-			true
-		else
-			false
-		end
-	end
-
-	private
-	def lock_pid
-		if File.exists? @lockfile
-			File.read(@lockfile).to_i
-		else
-			nil
-		end
-	end
-
-	def clear_if_stale
-		return if lock_pid.nil?
-		
-		begin
-			Process.kill(0, lock_pid)
-		rescue Errno::ESRCH
-			File.unlink(@lockfile)
-		end
-	end
-end
diff --git a/lib/puppet/util/posix.rb b/lib/puppet/util/posix.rb
deleted file mode 100755
index b969a04..0000000
--- a/lib/puppet/util/posix.rb
+++ /dev/null
@@ -1,176 +0,0 @@
-# Utility methods for interacting with POSIX objects; mostly user and group
-module Puppet::Util::POSIX
-
-    # Retrieve a field from a POSIX Etc object.  The id can be either an integer
-    # or a name.  This only works for users and groups.  It's also broken on
-    # some platforms, unfortunately, which is why we fall back to the other
-    # method search_posix_field in the gid and uid methods if a sanity check
-    # fails
-    def get_posix_field(space, field, id)
-        raise Puppet::DevError, "Did not get id from caller" unless id
-
-        if id.is_a?(Integer)
-            if id > Puppet[:maximum_uid].to_i
-                Puppet.err "Tried to get %s field for silly id %s" % [field, id]
-                return nil
-            end
-            method = methodbyid(space)
-        else
-            method = methodbyname(space)
-        end
-
-        begin
-            return Etc.send(method, id).send(field)
-        rescue ArgumentError => detail
-            # ignore it; we couldn't find the object
-            return nil
-        end
-    end
-
-    # A degenerate method of retrieving name/id mappings.  The job of this method is
-    # to retrieve all objects of a certain type, search for a specific entry 
-    # and then return a given field from that entry.
-    def search_posix_field(type, field, id)
-        idmethod = idfield(type)
-        integer = false
-        if id.is_a?(Integer)
-            integer = true
-            if id > Puppet[:maximum_uid].to_i
-                Puppet.err "Tried to get %s field for silly id %s" % [field, id]
-                return nil
-            end
-        end
-
-        Etc.send(type) do |object|
-            if integer and object.send(idmethod) == id
-                return object.send(field)
-            elsif object.name == id
-                return object.send(field)
-            end
-        end
-
-        # Apparently the group/passwd methods need to get reset; if we skip
-        # this call, then new users aren't found.
-        case type
-        when :passwd: Etc.send(:endpwent)
-        when :group: Etc.send(:endgrent)
-        end
-        return nil
-    end
-    
-    # Look in memory for an already-managed type and use its info if available.
-    # Currently unused.
-    def get_provider_value(type, field, id)
-        unless typeklass = Puppet::Type.type(type)
-            raise ArgumentError, "Invalid type %s" % type
-        end
-        
-        id = id.to_s
-        
-        chkfield = idfield(type)
-        obj = typeklass.find { |obj|
-            if id =~ /^\d+$/
-                obj.should(chkfield).to_s == id ||
-                    obj.provider.send(chkfield) == id
-            else 
-                obj[:name] == id
-            end                    
-        }
-        
-        return nil unless obj
-        
-        if obj.provider
-            begin
-                val = obj.provider.send(field)
-                if val == :absent
-                    return nil
-                else
-                    return val
-                end
-            rescue => detail
-                if Puppet[:trace]
-                    puts detail.backtrace
-                    Puppet.err detail
-                    return nil
-                end
-            end
-        end
-    end
-    
-    # Determine what the field name is for users and groups.
-    def idfield(space)
-        case Puppet::Util.symbolize(space)
-        when :gr, :group: return :gid
-        when :pw, :user, :passwd: return :uid
-        else
-            raise ArgumentError.new("Can only handle users and groups")
-        end
-    end
-    
-    # Determine what the method is to get users and groups by id
-    def methodbyid(space)
-        case Puppet::Util.symbolize(space)
-        when :gr, :group: return :getgrgid
-        when :pw, :user, :passwd: return :getpwuid
-        else
-            raise ArgumentError.new("Can only handle users and groups")
-        end
-    end
-    
-    # Determine what the method is to get users and groups by name
-    def methodbyname(space)
-        case Puppet::Util.symbolize(space)
-        when :gr, :group: return :getgrnam
-        when :pw, :user, :passwd: return :getpwnam
-        else
-            raise ArgumentError.new("Can only handle users and groups")
-        end
-    end
-    
-    # Get the GID of a given group, provided either a GID or a name
-    def gid(group)
-        begin
-            group = Integer(group)
-        rescue ArgumentError
-            # pass
-        end
-        if group.is_a?(Integer)
-            return nil unless name = get_posix_field(:group, :name, group)
-            gid = get_posix_field(:group, :gid, name)
-            check_value = gid
-        else
-            return nil unless gid = get_posix_field(:group, :gid, group)
-            name = get_posix_field(:group, :name, gid)
-            check_value = name
-        end
-        if check_value != group
-            return search_posix_field(:group, :gid, group)
-        else
-            return gid
-        end
-    end
-
-    # Get the UID of a given user, whether a UID or name is provided
-    def uid(user)
-        begin
-            user = Integer(user)
-        rescue ArgumentError
-            # pass
-        end
-        if user.is_a?(Integer)
-            return nil unless name = get_posix_field(:passwd, :name, user)
-            uid = get_posix_field(:passwd, :uid, name)
-            check_value = uid
-        else
-            return nil unless uid = get_posix_field(:passwd, :uid, user)
-            name = get_posix_field(:passwd, :name, uid)
-            check_value = name
-        end
-        if check_value != user
-            return search_posix_field(:passwd, :uid, user)
-        else
-            return uid
-        end
-    end
-end
-
diff --git a/lib/puppet/util/provider_features.rb b/lib/puppet/util/provider_features.rb
deleted file mode 100644
index 5b0c995..0000000
--- a/lib/puppet/util/provider_features.rb
+++ /dev/null
@@ -1,177 +0,0 @@
-# Provides feature definitions.
-require 'puppet/util/methodhelper'
-require 'puppet/util/docs'
-require 'puppet/util'
-module Puppet::Util::ProviderFeatures
-    include Puppet::Util::Docs
-    # The class that models the features and handles checking whether the features
-    # are present.
-    class ProviderFeature
-        include Puppet::Util
-        include Puppet::Util::MethodHelper
-        include Puppet::Util::Docs
-        attr_accessor :name, :docs, :methods
-
-        # Are all of the requirements met?
-        def available?(obj)
-            if self.methods 
-                if methods_available?(obj)
-                    return true
-                else
-                    return false
-                end
-            else
-                # In this case, the provider has to declare support for this
-                # feature, and that's been checked before we ever get to the
-                # method checks.
-                return false
-            end
-        end
-
-        def initialize(name, docs, hash)
-            self.name = symbolize(name)
-            self.docs = docs
-            hash = symbolize_options(hash)
-            set_options(hash)
-        end
-
-        private
-
-        # Are all of the required methods available?
-        def methods_available?(obj)
-            methods.each do |m|
-                if obj.is_a?(Class)
-                    return false unless obj.public_method_defined?(m)
-                else
-                    return false unless obj.respond_to?(m)
-                end
-            end
-            return true
-        end
-    end
-
-    # Define one or more features.  At a minimum, features require a name
-    # and docs, and at this point they should also specify a list of methods
-    # required to determine if the feature is present.
-    def feature(name, docs, hash = {})
-        @features ||= {}
-        raise(Puppet::DevError, "Feature %s is already defined" % name) if @features.include?(name)
-        begin
-            obj = ProviderFeature.new(name, docs, hash)
-            @features[obj.name] = obj
-        rescue ArgumentError => detail
-            error = ArgumentError.new(
-                "Could not create feature %s: %s" % [name, detail]
-            )
-            error.set_backtrace(detail.backtrace)
-            raise error
-        end
-    end
-
-    # Return a hash of all feature documentation.
-    def featuredocs
-        str = ""
-        @features ||= {}
-        return nil if @features.empty?
-        names = @features.keys.sort { |a,b| a.to_s <=> b.to_s }
-        names.each do |name|
-            doc = @features[name].docs.gsub(/\n\s+/, " ")
-            str += "- **%s**: %s\n" % [name, doc]
-        end
-
-        if providers.length > 0
-            headers = ["Provider", names].flatten
-            data = {}
-            providers.each do |provname|
-                data[provname] = []
-                prov = provider(provname)
-                names.each do |name|
-                    if prov.feature?(name)
-                        data[provname] << "**X**"
-                    else
-                        data[provname] << ""
-                    end
-                end
-            end
-            str += doctable(headers, data)
-        end
-        str
-    end
-
-    # Return a list of features.
-    def features
-        @features ||= {}
-        @features.keys
-    end
-
-    # Generate a module that sets up the boolean methods to test for given
-    # features.
-    def feature_module
-        unless defined? @feature_module
-            @features ||= {}
-            @feature_module = ::Module.new
-            const_set("FeatureModule", @feature_module)
-            features = @features
-            # Create a feature? method that can be passed a feature name and
-            # determine if the feature is present.
-            @feature_module.send(:define_method, :feature?) do |name|
-                method = name.to_s + "?"
-                if respond_to?(method) and send(method)
-                    return true
-                else
-                    return false
-                end
-            end
-
-            # Create a method that will list all functional features.
-            @feature_module.send(:define_method, :features) do
-                return false unless defined?(features)
-                features.keys.find_all { |n| feature?(n) }.sort { |a,b| 
-                    a.to_s <=> b.to_s 
-                }
-            end
-
-            # Create a method that will determine if a provided list of
-            # features are satisfied by the curred provider.
-            @feature_module.send(:define_method, :satisfies?) do |*needed|
-                ret = true
-                needed.flatten.each do |feature|
-                    unless feature?(feature)
-                        ret = false
-                        break
-                    end
-                end
-                ret
-            end
-
-            # Create a boolean method for each feature so you can test them
-            # individually as you might need.
-            @features.each do |name, feature|
-                method = name.to_s + "?"
-                @feature_module.send(:define_method, method) do
-                    (is_a?(Class) ?  declared_feature?(name) : self.class.declared_feature?(name)) or feature.available?(self)
-                end
-            end
-
-            # Allow the provider to declare that it has a given feature.
-            @feature_module.send(:define_method, :has_features) do |*names|
-                @declared_features ||= []
-                names.each do |name|
-                    name = symbolize(name)
-                    @declared_features << name
-                end
-            end
-            # Aaah, grammatical correctness
-            @feature_module.send(:alias_method, :has_feature, :has_features)
-        end
-        @feature_module
-    end
-
-    # Return the actual provider feature instance.  Really only used for testing.
-    def provider_feature(name)
-        return nil unless defined?(@features)
-
-        @features[name]
-    end
-end
-
diff --git a/lib/puppet/util/rails/collection_merger.rb b/lib/puppet/util/rails/collection_merger.rb
deleted file mode 100644
index 4a941b8..0000000
--- a/lib/puppet/util/rails/collection_merger.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-module Puppet::Util::CollectionMerger
-    # Merge new values with the old list.  This is only necessary
-    # because deletion seems to mess things up on unsaved objects.
-    def collection_merge(collection, args)
-        remove = []
-        list = args[:existing] || send(collection)
-        hash = args[:updates]
-        list.each do |object|
-            name = object.name
-            if existing = hash[name]
-                hash.delete(name)
-                if existing.respond_to?(:to_rails)
-                    existing.to_rails(self, object)
-                elsif args.include?(:modify)
-                    args[:modify].call(object, name, existing)
-                else
-                    raise ArgumentError, "Must pass :modify or the new objects must respond to :to_rails"
-                end
-            else
-                remove << object
-            end
-        end
-
-        # Make a new rails object for the rest of them
-        hash.each do |name, object|
-            if object.respond_to?(:to_rails)
-                object.to_rails(self)
-            elsif args.include?(:create)
-                args[:create].call(name, object)
-            else
-                raise ArgumentError, "Must pass :create or the new objects must respond to :to_rails"
-            end
-        end
-
-        # Now remove anything necessary.
-        remove.each do |object|
-            send(collection).delete(object)
-        end
-    end
-    
-    def ar_hash_merge(db_hash, mem_hash, args)
-        (db_hash.keys | mem_hash.keys).each do |key|
-            if (db_hash[key] && mem_hash[key])
-                # in both, update value
-                args[:modify].call(db_hash[key], mem_hash[key])
-            elsif (db_hash[key])
-                # in db, not memory, delete from database
-                args[:delete].call(db_hash[key])
-            else
-                # in mem, not in db, insert into the database
-                args[:create].call(key, mem_hash[key])
-            end
-        end
-    end
-end
-
diff --git a/lib/puppet/util/reference.rb b/lib/puppet/util/reference.rb
deleted file mode 100644
index 40e49f4..0000000
--- a/lib/puppet/util/reference.rb
+++ /dev/null
@@ -1,188 +0,0 @@
-require 'puppet/util/instance_loader'
-
-# Manage Reference Documentation.
-class Puppet::Util::Reference
-    include Puppet::Util
-    include Puppet::Util::Docs
-
-    extend Puppet::Util::InstanceLoader
-
-    instance_load(:reference, 'puppet/reference')
-
-    def self.footer
-        "\n\n----------------\n\n*This page autogenerated on %s*\n" % Time.now
-    end
-
-    def self.modes
-        %w{pdf trac text}
-    end
-
-    def self.newreference(name, options = {}, &block)
-        ref = self.new(name, options, &block)
-        instance_hash(:reference)[symbolize(name)] = ref
-
-        ref
-    end
-
-    def self.page(*sections)
-        depth = 4
-        # Use the minimum depth
-        sections.each do |name|
-            section = reference(name) or raise "Could not find section %s" % name
-            depth = section.depth if section.depth < depth
-        end
-        text = ".. contents:: :depth: 2\n\n"
-    end
-
-    def self.pdf(text)
-        puts "creating pdf"
-        File.open("/tmp/puppetdoc.txt", "w") do |f|
-            f.puts text
-        end
-        rst2latex = %x{which rst2latex}
-        if $? != 0 or rst2latex =~ /no /
-            rst2latex = %x{which rst2latex.py}
-        end
-        if $? != 0 or rst2latex =~ /no /
-            raise "Could not find rst2latex"
-        end
-        rst2latex.chomp!
-        cmd = %{#{rst2latex} /tmp/puppetdoc.txt > /tmp/puppetdoc.tex}
-        output = %x{#{cmd}}
-        unless $? == 0
-            $stderr.puts "rst2latex failed"
-            $stderr.puts output
-            exit(1)
-        end
-        $stderr.puts output
-
-        # Now convert to pdf
-        puts "handling pdf"
-        Dir.chdir("/tmp") do
-            %x{texi2pdf puppetdoc.tex >/dev/null 2>/dev/null}
-        end
-
-        #if FileTest.exists?("/tmp/puppetdoc.pdf")
-        #    FileUtils.mv("/tmp/puppetdoc.pdf", "/export/apache/docroots/reductivelabs.com/htdocs/downloads/puppet/reference.pdf")
-        #end
-    end
-
-    def self.references
-        instance_loader(:reference).loadall
-        loaded_instances(:reference).sort { |a,b| a.to_s <=> b.to_s }
-    end
-
-    HEADER_LEVELS = [nil, "=", "-", "+", "'", "~"]
-
-    attr_accessor :page, :depth, :header, :title, :dynamic
-    attr_writer :doc
-
-    def doc
-        if defined?(@doc)
-            return "%s - %s" % [@name, @doc]
-        else
-            return @title
-        end
-    end
-
-    def dynamic?
-        self.dynamic
-    end
-
-    def h(name, level)
-        return "%s\n%s\n\n" % [name, HEADER_LEVELS[level] * name.to_s.length]
-    end
-
-    def initialize(name, options = {}, &block)
-        @name = name
-        options.each do |option, value|
-            send(option.to_s + "=", value)
-        end
-
-        meta_def(:generate, &block)
-
-        # Now handle the defaults
-        @title ||= "%s Reference" % @name.to_s.capitalize
-        @page ||= @title.gsub(/\s+/, '')
-        @depth ||= 2
-        @header ||= ""
-    end
-
-    # Indent every line in the chunk except those which begin with '..'.
-    def indent(text, tab)
-        return text.gsub(/(^|\A)/, tab).gsub(/^ +\.\./, "..")
-    end
-
-    def option(name, value)
-        ":%s: %s\n" % [name.to_s.capitalize, value]
-    end
-
-    def paramwrap(name, text, options = {})
-        options[:level] ||= 5
-        #str = "%s : " % name
-        str = h(name, options[:level])
-        if options[:namevar]
-            str += "- **namevar**\n\n"
-        end
-        str += text
-        #str += text.gsub(/\n/, "\n    ")
-
-        str += "\n\n"
-        return str
-    end
-
-    # Remove all trac links.
-    def strip_trac(text)
-        text.gsub(/`\w+\s+([^`]+)`:trac:/) { |m| $1 }
-    end
-
-    def text
-        puts output
-    end
-
-    def to_rest(withcontents = true)
-        # First the header
-        text = h(@title, 1)
-        text += "\n\n**This page is autogenerated; any changes will get overwritten** *(last generated on #{Time.now.to_s})*\n\n"
-        if withcontents
-            text +=  ".. contents:: :depth: %s\n\n" % @depth
-        end
-
-        text += @header
-
-        text += generate()
-
-        if withcontents
-            text += self.class.footer
-        end
-
-        return text
-    end
-
-    def to_text(withcontents = true)
-        strip_trac(to_rest(withcontents))
-    end
-
-    def to_trac(with_contents = true)
-        "{{{\n#!rst\n#{self.to_rest(with_contents)}\n}}}"
-    end
-
-    def trac
-        File.open("/tmp/puppetdoc.txt", "w") do |f|
-            f.puts self.to_trac
-        end
-
-        puts "Writing %s reference to trac as %s" % [@name, @page]
-        cmd = %{sudo trac-admin /opt/rl/trac/puppet wiki import %s /tmp/puppetdoc.txt} % self.page
-        output = %x{#{cmd}}
-        unless $? == 0
-            $stderr.puts "trac-admin failed"
-            $stderr.puts output
-            exit(1)
-        end
-        unless output =~ /^\s+/
-            $stderr.puts output
-        end
-    end
-end
-
diff --git a/lib/puppet/util/resource_template.rb b/lib/puppet/util/resource_template.rb
deleted file mode 100644
index 53066a1..0000000
--- a/lib/puppet/util/resource_template.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-require 'puppet/util'
-require 'puppet/util/logging'
-require 'erb'
-
-# A template wrapper that evaluates a template in the
-# context of a resource, allowing the resource attributes
-# to be looked up from within the template.
-#  This provides functionality essentially equivalent to
-# the language's template() function.  You pass your file
-# path and the resource you want to use into the initialization
-# method, then call result() on the instance, and you get back
-# a chunk of text.
-#  The resource's parameters are available as instance variables
-# (as opposed to the language, where we use a method_missing trick).
-#  For example, say you have a resource that generates a file.  You would
-# need to implement the following style of `generate` method:
-#
-#   def generate
-#       template = Puppet::Util::ResourceTemplate.new("/path/to/template", self)
-#
-#       return Puppet::Type.type(:file).create :path => "/my/file",
-#           :content => template.evaluate
-#   end
-#
-# This generated file gets added to the catalog (which is what `generate` does),
-# and its content is the result of the template.  You need to use instance
-# variables in your template, so if your template just needs to have the name
-# of the generating resource, it would just have:
-#
-#   <%= @name %>
-#
-# Since the ResourceTemplate class sets as instance variables all of the resource's
-# parameters.
-#
-# Note that this example uses the generating resource as its source of
-# parameters, which is generally most useful, since it allows you to configure
-# the generated resource via the generating resource.
-class Puppet::Util::ResourceTemplate
-    include Puppet::Util::Logging
-
-    def evaluate
-        set_resource_variables
-        ERB.new(File.read(@file), 0, "-").result(binding)
-    end
-
-    def initialize(file, resource)
-        raise ArgumentError, "Template %s does not exist" % file unless FileTest.exist?(file)
-        @file = file
-        @resource = resource
-    end
-
-    private
-
-    def set_resource_variables
-        @resource.to_hash.each do |param, value|
-            var = "@#{param.to_s}"
-            instance_variable_set(var, value)
-        end
-    end
-end
-
diff --git a/lib/puppet/util/selinux.rb b/lib/puppet/util/selinux.rb
deleted file mode 100644
index 1487489..0000000
--- a/lib/puppet/util/selinux.rb
+++ /dev/null
@@ -1,139 +0,0 @@
-# Provides utility functions to help interfaces Puppet to SELinux.
-#
-# Currently this is implemented via the command line tools.  At some
-# point support should be added to use the new SELinux ruby bindings
-# as that will be faster and more reliable then shelling out when they
-# are available.  At this time (2008-09-26) these bindings aren't bundled on
-# any SELinux-using distribution I know of.
-
-require 'puppet/util'
-
-module Puppet::Util::SELinux
-
-    include Puppet::Util
-
-    def selinux_support?
-        FileTest.exists?("/selinux/enforce")
-    end
-
-    # Retrieve and return the full context of the file.  If we don't have
-    # SELinux support or if the stat call fails then return nil.
-    def get_selinux_current_context(file)
-        unless selinux_support?
-            return nil
-        end
-        context = ""
-        begin
-            execpipe("/usr/bin/stat -c %C #{file}") do |out|
-                out.each do |line|
-                    context << line
-                end
-            end
-        rescue Puppet::ExecutionFailure
-            return nil
-        end
-        context.chomp!
-        # Handle the case that the system seems to have SELinux support but
-        # stat finds unlabled files.
-        if context == "(null)"
-            return nil
-        end
-        return context
-    end
-
-    # Use the matchpathcon command, if present, to return the SELinux context
-    # which the SELinux policy on the system expects the file to have.  We can
-    # use this to obtain a good default context.  If the command does not
-    # exist or the call fails return nil.
-    #
-    # Note: For this command to work a full, non-relative, filesystem path
-    # should be given.
-    def get_selinux_default_context(file)
-        unless selinux_support?
-            return nil
-        end
-        unless FileTest.executable?("/usr/sbin/matchpathcon")
-            return nil
-        end
-        context = ""
-        begin
-            execpipe("/usr/sbin/matchpathcon #{file}") do |out|
-                out.each do |line|
-                    context << line
-                end
-            end
-        rescue Puppet::ExecutionFailure
-            return nil
-        end
-        # For a successful match, matchpathcon returns two fields separated by
-        # a variable amount of whitespace.  The second field is the full context.
-        context = context.split(/\s/)[1]
-        return context
-    end
-
-    # Take the full SELinux context returned from the tools and parse it
-    # out to the three (or four) component parts.  Supports :seluser, :selrole,
-    # :seltype, and on systems with range support, :selrange.
-    def parse_selinux_context(component, context)
-        if context.nil? or context == "unlabeled"
-            return nil
-        end
-        unless context =~ /^([a-z0-9_]+):([a-z0-9_]+):([a-z0-9_]+)(?::([a-zA-Z0-9:,._-]+))?/
-            raise Puppet::Error, "Invalid context to parse: #{context}"
-        end
-        ret = {
-            :seluser => $1,
-            :selrole => $2,
-            :seltype => $3,
-            :selrange => $4,
-        }
-        return ret[component]
-    end
-
-    # This updates the actual SELinux label on the file.  You can update
-    # only a single component or update the entire context.  It is just a
-    # wrapper around the chcon command.
-    def set_selinux_context(file, value, component = false)
-        unless selinux_support?
-            return nil
-        end
-        case component
-            when :seluser
-                flag = "-u"
-            when :selrole
-                flag = "-r"
-            when :seltype
-                flag = "-t"
-            when :selrange
-                flag = "-l"
-            else
-                flag = nil
-        end
-
-        if flag.nil?
-            cmd = ["/usr/bin/chcon","-h",value,file]
-        else
-            cmd = ["/usr/bin/chcon","-h",flag,value,file]
-        end
-        execute(cmd)
-        return true
-    end
-
-    # Since this call relies on get_selinux_default_context it also needs a
-    # full non-relative path to the file.  Fortunately, that seems to be all
-    # Puppet uses.  This will set the file's SELinux context to the policy's
-    # default context (if any) if it differs from the context currently on
-    # the file.
-    def set_selinux_default_context(file)
-        new_context = get_selinux_default_context(file)
-        unless new_context
-            return nil
-        end
-        cur_context = get_selinux_current_context(file)
-        if new_context != cur_context
-            set_selinux_context(file, new_context)
-            return new_context
-        end
-        return nil
-    end
-end
diff --git a/lib/puppet/util/settings.rb b/lib/puppet/util/settings.rb
deleted file mode 100644
index 1e49a3a..0000000
--- a/lib/puppet/util/settings.rb
+++ /dev/null
@@ -1,1306 +0,0 @@
-require 'puppet'
-require 'sync'
-require 'puppet/transportable'
-require 'getoptlong'
-
-
-# The class for handling configuration files.
-class Puppet::Util::Settings
-    include Enumerable
-    include Puppet::Util
-
-    @@sync = Sync.new
-
-    attr_accessor :file
-    attr_reader :timer
-
-    # Retrieve a config value
-    def [](param)
-        value(param)
-    end
-
-    # Set a config value.  This doesn't set the defaults, it sets the value itself.
-    def []=(param, value)
-        @@sync.synchronize do # yay, thread-safe
-            param = symbolize(param)
-            unless element = @config[param]
-                raise ArgumentError,
-                    "Attempt to assign a value to unknown configuration parameter %s" % param.inspect
-            end
-            if element.respond_to?(:munge)
-                value = element.munge(value)
-            end
-            if element.respond_to?(:handle)
-                element.handle(value)
-            end
-            # Reset the name, so it's looked up again.
-            if param == :name
-                @name = nil
-            end
-            @values[:memory][param] = value
-            @cache.clear
-        end
-
-        return value
-    end
-
-    # Generate the list of valid arguments, in a format that GetoptLong can
-    # understand, and add them to the passed option list.
-    def addargs(options)
-        # Hackish, but acceptable.  Copy the current ARGV for restarting.
-        Puppet.args = ARGV.dup
-
-        # Add all of the config parameters as valid options.
-        self.each { |name, element|
-            element.getopt_args.each { |args| options << args }
-        }
-
-        return options
-    end
-
-    # Turn the config into a Puppet configuration and apply it
-    def apply
-        trans = self.to_transportable
-        begin
-            config = trans.to_catalog
-            config.store_state = false
-            config.apply
-            config.clear
-        rescue => detail
-            if Puppet[:trace]
-                puts detail.backtrace
-            end
-            Puppet.err "Could not configure myself: %s" % detail
-        end
-    end
-
-    # Is our parameter a boolean parameter?
-    def boolean?(param)
-        param = symbolize(param)
-        if @config.include?(param) and @config[param].kind_of? CBoolean
-            return true
-        else
-            return false
-        end
-    end
-
-    # Remove all set values, potentially skipping cli values.
-    def clear(exceptcli = false)
-        @config.each { |name, obj|
-            unless exceptcli and obj.setbycli
-                obj.clear
-            end
-        }
-        @values.each do |name, values|
-            next if name == :cli and exceptcli
-            @values.delete(name) 
-        end
-
-        # Don't clear the 'used' in this case, since it's a config file reparse,
-        # and we want to retain this info.
-        unless exceptcli
-            @used = []
-        end
-
-        @cache.clear
-
-        @name = nil
-    end
-
-    # This is mostly just used for testing.
-    def clearused
-        @cache.clear
-        @used = []
-    end
-
-    # Do variable interpolation on the value.
-    def convert(value, environment = nil)
-        return value unless value
-        return value unless value.is_a? String
-        newval = value.gsub(/\$(\w+)|\$\{(\w+)\}/) do |value|
-            varname = $2 || $1
-            if varname == "environment" and environment
-                environment
-            elsif pval = self.value(varname)
-                pval
-            else
-                raise Puppet::DevError, "Could not find value for %s" % value
-            end
-        end
-
-        return newval
-    end
-
-    # Return a value's description.
-    def description(name)
-        if obj = @config[symbolize(name)]
-            obj.desc
-        else
-            nil
-        end
-    end
-
-    def each
-        @config.each { |name, object|
-            yield name, object
-        }
-    end
-
-    # Iterate over each section name.
-    def eachsection
-        yielded = []
-        @config.each do |name, object|
-            section = object.section
-            unless yielded.include? section
-                yield section
-                yielded << section
-            end
-        end
-    end
-
-    # Return an object by name.
-    def element(param)
-        param = symbolize(param)
-        @config[param]
-    end
-
-    # Handle a command-line argument.
-    def handlearg(opt, value = nil)
-        @cache.clear
-        value = munge_value(value) if value
-        str = opt.sub(/^--/,'')
-        bool = true
-        newstr = str.sub(/^no-/, '')
-        if newstr != str
-            str = newstr
-            bool = false
-        end
-        str = str.intern
-        if self.valid?(str)
-            if self.boolean?(str)
-                @values[:cli][str] = bool
-            else
-                @values[:cli][str] = value
-            end
-        else
-            raise ArgumentError, "Invalid argument %s" % opt
-        end
-    end
-
-    def include?(name)
-        name = name.intern if name.is_a? String
-        @config.include?(name)
-    end
-
-    # check to see if a short name is already defined
-    def shortinclude?(short)
-        short = short.intern if name.is_a? String
-        @shortnames.include?(short)
-    end
-
-    # Create a new config object
-    def initialize
-        @config = {}
-        @shortnames = {}
-
-        @created = []
-        @searchpath = nil
-
-        # Keep track of set values.
-        @values = Hash.new { |hash, key| hash[key] = {} }
-
-        # And keep a per-environment cache
-        @cache = Hash.new { |hash, key| hash[key] = {} }
-
-        # A central concept of a name.
-        @name = nil
-
-        # The list of sections we've used.
-        @used = []
-    end
-
-    # NOTE: ACS ahh the util classes. . .sigh
-    # as part of a fix for 1183, I pulled the logic for the following 5 methods out of the executables and puppet.rb
-    # They probably deserve their own class, but I don't want to do that until I can refactor environments
-    # its a little better than where they were
-
-    # Prints the contents of a config file with the available config elements, or it
-    # prints a single value of a config element.
-    def print_config_options
-        env = value(:environment)
-        val = value(:configprint)
-        if val == "all"
-            hash = {}
-            each do |name, obj|
-                val = value(name,env)
-                val = val.inspect if val == ""
-                hash[name] = val
-            end
-            hash.sort { |a,b| a[0].to_s <=> b[0].to_s }.each do |name, val|
-                puts "%s = %s" % [name, val]
-            end
-        else
-            val.split(/\s*,\s*/).sort.each do |v|
-                if include?(v)
-                    #if there is only one value, just print it for back compatibility
-                    if v == val
-                         puts value(val,env)
-                         break
-                    end
-                    puts "%s = %s" % [v, value(v,env)]
-                else
-                    puts "invalid parameter: %s" % v
-                    return false
-                end
-            end
-        end
-        true
-    end
-
-    def generate_config
-        puts to_config
-        true
-    end
-
-    def generate_manifest
-        puts to_manifest
-        true
-    end
-
-    def print_configs
-        return print_config_options if value(:configprint) != ""
-        return generate_config if value(:genconfig)
-        return generate_manifest if value(:genmanifest)
-    end
-
-    def print_configs?
-        return (value(:configprint) != "" || value(:genconfig) || value(:genmanifest)) && true
-    end
-
-    # Return a given object's file metadata.
-    def metadata(param)
-        if obj = @config[symbolize(param)] and obj.is_a?(CFile)
-            return [:owner, :group, :mode].inject({}) do |meta, p|
-                if v = obj.send(p)
-                    meta[p] = v
-                end
-                meta
-            end
-        else
-            nil
-        end
-    end
-
-    # Make a directory with the appropriate user, group, and mode
-    def mkdir(default)
-        obj = get_config_file_default(default)
-
-        Puppet::Util::SUIDManager.asuser(obj.owner, obj.group) do
-            mode = obj.mode || 0750
-            Dir.mkdir(obj.value, mode)
-        end
-    end
-
-    # Figure out our name.
-    def name
-        unless @name
-            unless @config[:name]
-                return nil
-            end
-            searchpath.each do |source|
-                next if source == :name
-                break if @name = @values[source][:name]
-            end
-            unless @name
-                @name = convert(@config[:name].default).intern
-            end
-        end
-        @name
-    end
-
-    # Return all of the parameters associated with a given section.
-    def params(section = nil)
-        if section
-            section = section.intern if section.is_a? String
-            @config.find_all { |name, obj|
-                obj.section == section
-            }.collect { |name, obj|
-                name
-            }
-        else
-            @config.keys
-        end
-    end
-
-    # Parse the configuration file.
-    def parse(file)
-        clear(true)
-
-        parse_file(file).each do |area, values|
-            @values[area] = values
-        end
-
-        # Determine our environment, if we have one.
-        if @config[:environment]
-            env = self.value(:environment).to_sym
-        else
-            env = "none"
-        end
-
-        # Call any hooks we should be calling.
-        settings_with_hooks.each do |setting|
-            each_source(env) do |source|
-                if value = @values[source][setting.name]
-                    # We still have to use value() to retrieve the value, since
-                    # we want the fully interpolated value, not $vardir/lib or whatever.
-                    # This results in extra work, but so few of the settings
-                    # will have associated hooks that it ends up being less work this
-                    # way overall.
-                    setting.handle(self.value(setting.name, env))
-                    break
-                end
-            end
-        end
-
-        # We have to do it in the reverse of the search path,
-        # because multiple sections could set the same value
-        # and I'm too lazy to only set the metadata once.
-        searchpath.reverse.each do |source|
-            if meta = @values[source][:_meta]
-                set_metadata(meta)
-            end
-        end
-    end
-
-    # Parse the configuration file.  As of May 2007, this is a backward-compatibility method and
-    # will be deprecated soon.
-    def old_parse(file)
-        text = nil
-
-        if file.is_a? Puppet::Util::LoadedFile
-            @file = file
-        else
-            @file = Puppet::Util::LoadedFile.new(file)
-        end
-
-        # Don't create a timer for the old style parsing.
-        # settimer()
-
-        begin
-            text = File.read(@file.file)
-        rescue Errno::ENOENT
-            raise Puppet::Error, "No such file %s" % file
-        rescue Errno::EACCES
-            raise Puppet::Error, "Permission denied to file %s" % file
-        end
-
-        @values = Hash.new { |names, name|
-            names[name] = {}
-        }
-
-        # Get rid of the values set by the file, keeping cli values.
-        self.clear(true)
-
-        section = "puppet"
-        metas = %w{owner group mode}
-        values = Hash.new { |hash, key| hash[key] = {} }
-        text.split(/\n/).each { |line|
-            case line
-            when /^\[(\w+)\]$/: section = $1 # Section names
-            when /^\s*#/: next # Skip comments
-            when /^\s*$/: next # Skip blanks
-            when /^\s*(\w+)\s*=\s*(.+)$/: # settings
-                var = $1.intern
-                if var == :mode
-                    value = $2
-                else
-                    value = munge_value($2)
-                end
-
-                # Only warn if we don't know what this config var is.  This
-                # prevents exceptions later on.
-                unless @config.include?(var) or metas.include?(var.to_s)
-                    Puppet.warning "Discarded unknown configuration parameter %s" % var.inspect
-                    next # Skip this line.
-                end
-
-                # Mmm, "special" attributes
-                if metas.include?(var.to_s)
-                    unless values.include?(section)
-                        values[section] = {}
-                    end
-                    values[section][var.to_s] = value
-
-                    # If the parameter is valid, then set it.
-                    if section == Puppet[:name] and @config.include?(var)
-                        #@config[var].value = value
-                        @values[:main][var] = value
-                    end
-                    next
-                end
-
-                # Don't override set parameters, since the file is parsed
-                # after cli arguments are handled.
-                unless @config.include?(var) and @config[var].setbycli
-                    Puppet.debug "%s: Setting %s to '%s'" % [section, var, value]
-                    @values[:main][var] = value
-                end
-                @config[var].section = symbolize(section)
-
-                metas.each { |meta|
-                    if values[section][meta]
-                        if @config[var].respond_to?(meta + "=")
-                            @config[var].send(meta + "=", values[section][meta])
-                        end
-                    end
-                }
-            else
-                raise Puppet::Error, "Could not match line %s" % line
-            end
-        }
-    end
-
-    # Create a new element.  The value is passed in because it's used to determine
-    # what kind of element we're creating, but the value itself might be either
-    # a default or a value, so we can't actually assign it.
-    def newelement(hash)
-        value = hash[:value] || hash[:default]
-        klass = nil
-        if hash[:section]
-            hash[:section] = symbolize(hash[:section])
-        end
-        case value
-        when true, false, "true", "false":
-            klass = CBoolean
-        when /^\$\w+\//, /^\//:
-            klass = CFile
-        when String, Integer, Float: # nothing
-            klass = CElement
-        else
-            raise Puppet::Error, "Invalid value '%s' for %s" % [value.inspect, hash[:name]]
-        end
-        hash[:parent] = self
-        element = klass.new(hash)
-
-        return element
-    end
-
-    # This has to be private, because it doesn't add the elements to @config
-    private :newelement
-
-    # Iterate across all of the objects in a given section.
-    def persection(section)
-        section = symbolize(section)
-        self.each { |name, obj|
-            if obj.section == section
-                yield obj
-            end
-        }
-    end
-
-    # Reparse our config file, if necessary.
-    def reparse
-        if defined? @file and @file.changed?
-            Puppet.notice "Reparsing %s" % @file.file
-            @@sync.synchronize do
-                parse(@file)
-            end
-            reuse()
-        end
-    end
-
-    def reuse
-        return unless defined? @used
-        @@sync.synchronize do # yay, thread-safe
-            @used.each do |section|
-                @used.delete(section)
-                self.use(section)
-            end
-        end
-    end
-
-    # The order in which to search for values.
-    def searchpath(environment = nil)
-        if environment
-            [:cli, :memory, environment, :name, :main]
-        else
-            [:cli, :memory, :name, :main]
-        end
-    end
-
-    # Get a list of objects per section
-    def sectionlist
-        sectionlist = []
-        self.each { |name, obj|
-            section = obj.section || "puppet"
-            sections[section] ||= []
-            unless sectionlist.include?(section)
-                sectionlist << section
-            end
-            sections[section] << obj
-        }
-
-        return sectionlist, sections
-    end
-
-    # Convert a single section into transportable objects.
-    def section_to_transportable(section, done = nil)
-        done ||= Hash.new { |hash, key| hash[key] = {} }
-        objects = []
-        persection(section) do |obj|
-            if @config[:mkusers] and value(:mkusers)
-                objects += add_user_resources(section, obj, done)
-            end
-
-            value = obj.value
-
-            # Only files are convertable to transportable resources.
-            next unless obj.respond_to? :to_transportable and transobjects = obj.to_transportable
-
-            transobjects = [transobjects] unless transobjects.is_a? Array
-            transobjects.each do |trans|
-                # transportable could return nil
-                next unless trans
-                unless done[:file].include? trans.name
-                    @created << trans.name
-                    objects << trans
-                    done[:file][trans.name] = trans
-                end
-            end
-        end
-
-        bucket = Puppet::TransBucket.new
-        bucket.type = "Settings"
-        bucket.name = section
-        bucket.push(*objects)
-        bucket.keyword = "class"
-
-        return bucket
-    end
-
-    # Set a bunch of defaults in a given section.  The sections are actually pretty
-    # pointless, but they help break things up a bit, anyway.
-    def setdefaults(section, defs)
-        section = symbolize(section)
-        call = []
-        defs.each { |name, hash|
-            if hash.is_a? Array
-                unless hash.length == 2
-                    raise ArgumentError, "Defaults specified as an array must contain only the default value and the decription"
-                end
-                tmp = hash
-                hash = {}
-                [:default, :desc].zip(tmp).each { |p,v| hash[p] = v }
-            end
-            name = symbolize(name)
-            hash[:name] = name
-            hash[:section] = section
-            name = hash[:name]
-            if @config.include?(name)
-                raise ArgumentError, "Parameter %s is already defined" % name
-            end
-            tryconfig = newelement(hash)
-            if short = tryconfig.short
-                if other = @shortnames[short]
-                    raise ArgumentError, "Parameter %s is already using short name '%s'" % [other.name, short]
-                end
-                @shortnames[short] = tryconfig
-            end
-            @config[name] = tryconfig
-
-            # Collect the settings that need to have their hooks called immediately.
-            # We have to collect them so that we can be sure we're fully initialized before
-            # the hook is called.
-            call << tryconfig if tryconfig.call_on_define
-        }
-
-        call.each { |setting| setting.handle(self.value(setting.name)) }
-    end
-
-    # Create a timer to check whether the file should be reparsed.
-    def settimer
-        if Puppet[:filetimeout] > 0
-            @timer = Puppet.newtimer(
-                :interval => Puppet[:filetimeout],
-                :tolerance => 1,
-                :start? => true
-            ) do
-                self.reparse()
-            end
-        end
-    end
-
-    # Convert our list of objects into a component that can be applied.
-    def to_configuration
-        transport = self.to_transportable
-        return transport.to_catalog
-    end
-
-    # Convert our list of config elements into a configuration file.
-    def to_config
-        str = %{The configuration file for #{Puppet[:name]}.  Note that this file
-is likely to have unused configuration parameters in it; any parameter that's
-valid anywhere in Puppet can be in any config file, even if it's not used.
-
-Every section can specify three special parameters: owner, group, and mode.
-These parameters affect the required permissions of any files specified after
-their specification.  Puppet will sometimes use these parameters to check its
-own configured state, so they can be used to make Puppet a bit more self-managing.
-
-Generated on #{Time.now}.
-
-}.gsub(/^/, "# ")
-
-        # Add a section heading that matches our name.
-        if @config.include?(:name)
-            str += "[%s]\n" % self[:name]
-        end
-        eachsection do |section|
-            persection(section) do |obj|
-                str += obj.to_config + "\n"
-            end
-        end
-
-        return str
-    end
-
-    # Convert our configuration into a list of transportable objects.
-    def to_transportable(*sections)
-        done = Hash.new { |hash, key|
-            hash[key] = {}
-        }
-
-        topbucket = Puppet::TransBucket.new
-        if defined? @file.file and @file.file
-            topbucket.name = @file.file
-        else
-            topbucket.name = "top"
-        end
-        topbucket.type = "Settings"
-        topbucket.top = true
-
-        # Now iterate over each section
-        if sections.empty?
-            eachsection do |section|
-                sections << section
-            end
-        end
-        sections.each do |section|
-            obj = section_to_transportable(section, done)
-            topbucket.push obj
-        end
-
-        topbucket
-    end
-
-    # Convert to a parseable manifest
-    def to_manifest
-        transport = self.to_transportable
-
-        manifest = transport.to_manifest + "\n"
-        eachsection { |section|
-            manifest += "include #{section}\n"
-        }
-
-        return manifest
-    end
-
-    # Create the necessary objects to use a section.  This is idempotent;
-    # you can 'use' a section as many times as you want.
-    def use(*sections)
-        @@sync.synchronize do # yay, thread-safe
-            sections = sections.reject { |s| @used.include?(s.to_sym) }
-
-            return if sections.empty?
-
-            bucket = to_transportable(*sections)
-
-            begin
-                catalog = bucket.to_catalog
-            rescue => detail
-                puts detail.backtrace if Puppet[:trace]
-                Puppet.err "Could not create resources for managing Puppet's files and directories: %s" % detail
-
-                # We need some way to get rid of any resources created during the catalog creation
-                # but not cleaned up.
-                return
-            end
-
-            begin
-                catalog.host_config = false
-                catalog.apply do |transaction|
-                    if transaction.any_failed?
-                        report = transaction.report
-                        failures = report.logs.find_all { |log| log.level == :err }
-                        raise "Got %s failure(s) while initializing: %s" % [failures.length, failures.collect { |l| l.to_s }.join("; ")] 
-                    end
-                end
-            ensure
-                catalog.clear
-            end
-
-            sections.each { |s| @used << s }
-            @used.uniq!
-        end
-    end
-
-    def valid?(param)
-        param = symbolize(param)
-        @config.has_key?(param)
-    end
-
-    # Find the correct value using our search path.  Optionally accept an environment
-    # in which to search before the other configuration sections.
-    def value(param, environment = nil)
-        param = symbolize(param)
-        environment = symbolize(environment) if environment
-
-        # Short circuit to nil for undefined parameters.
-        return nil unless @config.include?(param)
-
-        # Yay, recursion.
-        self.reparse() unless param == :filetimeout
-
-        # Check the cache first.  It needs to be a per-environment
-        # cache so that we don't spread values from one env
-        # to another.
-        if cached = @cache[environment||"none"][param]
-            return cached
-        end
-
-        # See if we can find it within our searchable list of values
-        val = nil
-        each_source(environment) do |source|
-            # Look for the value.  We have to test the hash for whether
-            # it exists, because the value might be false.
-            if @values[source].include?(param)
-                val = @values[source][param]
-                break
-            end
-        end
-
-        # If we didn't get a value, use the default
-        val = @config[param].default if val.nil?
-
-        # Convert it if necessary
-        val = convert(val, environment)
-
-        # And cache it
-        @cache[environment||"none"][param] = val
-        return val
-    end
-
-    # Open a file with the appropriate user, group, and mode
-    def write(default, *args, &bloc)
-        obj = get_config_file_default(default)
-        writesub(default, value(obj.name), *args, &bloc)
-    end
-
-    # Open a non-default file under a default dir with the appropriate user,
-    # group, and mode
-    def writesub(default, file, *args, &bloc)
-        obj = get_config_file_default(default)
-        chown = nil
-        if Puppet::Util::SUIDManager.uid == 0
-            chown = [obj.owner, obj.group]
-        else
-            chown = [nil, nil]
-        end
-
-        Puppet::Util::SUIDManager.asuser(*chown) do
-            mode = obj.mode || 0640
-            if args.empty?
-                args << "w"
-            end
-
-            args << mode
-
-            # Update the umask to make non-executable files
-            Puppet::Util.withumask(File.umask ^ 0111) do
-                File.open(file, *args) do |file|
-                    yield file
-                end
-            end
-        end
-    end
-
-    def readwritelock(default, *args, &bloc)
-        file = value(get_config_file_default(default).name)
-        tmpfile = file + ".tmp"
-        sync = Sync.new
-        unless FileTest.directory?(File.dirname(tmpfile))
-            raise Puppet::DevError, "Cannot create %s; directory %s does not exist" %
-                [file, File.dirname(file)]
-        end
-
-        sync.synchronize(Sync::EX) do
-            File.open(file, "r+", 0600) do |rf|
-                rf.lock_exclusive do
-                    if File.exist?(tmpfile)
-                        raise Puppet::Error, ".tmp file already exists for %s; Aborting locked write. Check the .tmp file and delete if appropriate" %
-                            [file]
-                    end
-
-                    writesub(default, tmpfile, *args, &bloc)
-
-                    begin
-                        File.rename(tmpfile, file)
-                    rescue => detail
-                        Puppet.err "Could not rename %s to %s: %s" %
-                            [file, tmpfile, detail]
-                    end
-                end
-            end
-        end
-    end
-
-    private
-
-    def get_config_file_default(default)
-        obj = nil
-        unless obj = @config[default]
-            raise ArgumentError, "Unknown default %s" % default
-        end
-
-        unless obj.is_a? CFile
-            raise ArgumentError, "Default %s is not a file" % default
-        end
-
-        return obj
-    end
-    
-    # Create the transportable objects for users and groups.
-    def add_user_resources(section, obj, done)
-        resources = []
-        [:owner, :group].each do |attr|
-            type = nil
-            if attr == :owner
-                type = :user
-            else
-                type = attr
-            end
-            # If a user and/or group is set, then make sure we're
-            # managing that object
-            if obj.respond_to? attr and name = obj.send(attr)
-                # Skip root or wheel
-                next if %w{root wheel}.include?(name.to_s)
-
-                # Skip owners and groups we've already done, but tag
-                # them with our section if necessary
-                if done[type].include?(name)
-                    tags = done[type][name].tags
-                    unless tags.include?(section)
-                        done[type][name].tags = tags << section
-                    end
-                else
-                    newobj = Puppet::TransObject.new(name, type.to_s)
-                    newobj.tags = ["puppet", "configuration", section]
-                    newobj[:ensure] = :present
-                    if type == :user
-                        newobj[:comment] ||= "%s user" % name
-                    end
-                    # Set the group appropriately for the user
-                    if type == :user
-                        newobj[:gid] = Puppet[:group]
-                    end
-                    done[type][name] = newobj
-                    resources << newobj
-                end
-            end
-        end
-        resources
-    end
-
-    # Yield each search source in turn.
-    def each_source(environment)
-        searchpath(environment).each do |source|
-            # Modify the source as necessary.
-            source = self.name if source == :name
-            yield source
-        end
-    end
-
-    # Return all elements that have associated hooks; this is so
-    # we can call them after parsing the configuration file.
-    def settings_with_hooks
-        @config.values.find_all { |setting| setting.respond_to?(:handle) }
-    end
-
-    # Extract extra setting information for files.
-    def extract_fileinfo(string)
-        result = {}
-        value = string.sub(/\{\s*([^}]+)\s*\}/) do
-            params = $1
-            params.split(/\s*,\s*/).each do |str|
-                if str =~ /^\s*(\w+)\s*=\s*([\w\d]+)\s*$/
-                    param, value = $1.intern, $2
-                    result[param] = value
-                    unless [:owner, :mode, :group].include?(param)
-                        raise ArgumentError, "Invalid file option '%s'" % param
-                    end
-
-                    if param == :mode and value !~ /^\d+$/
-                        raise ArgumentError, "File modes must be numbers"
-                    end
-                else
-                    raise ArgumentError, "Could not parse '%s'" % string
-                end
-            end
-            ''
-        end
-        result[:value] = value.sub(/\s*$/, '')
-        return result
-
-        return nil
-    end
-
-    # Convert arguments into booleans, integers, or whatever.
-    def munge_value(value)
-        # Handle different data types correctly
-        return case value
-            when /^false$/i: false
-            when /^true$/i: true
-            when /^\d+$/i: Integer(value)
-            else
-                value.gsub(/^["']|["']$/,'').sub(/\s+$/, '')
-        end
-    end
-
-    # This is an abstract method that just turns a file in to a hash of hashes.
-    # We mostly need this for backward compatibility -- as of May 2007 we need to
-    # support parsing old files with any section, or new files with just two
-    # valid sections.
-    def parse_file(file)
-        text = read_file(file)
-
-        # Create a timer so that this file will get checked automatically
-        # and reparsed if necessary.
-        settimer()
-
-        result = Hash.new { |names, name|
-            names[name] = {}
-        }
-
-        count = 0
-
-        # Default to 'main' for the section.
-        section = :main
-        result[section][:_meta] = {}
-        text.split(/\n/).each { |line|
-            count += 1
-            case line
-            when /^\s*\[(\w+)\]$/:
-                section = $1.intern # Section names
-                # Add a meta section
-                result[section][:_meta] ||= {}
-            when /^\s*#/: next # Skip comments
-            when /^\s*$/: next # Skip blanks
-            when /^\s*(\w+)\s*=\s*(.*)$/: # settings
-                var = $1.intern
-
-                # We don't want to munge modes, because they're specified in octal, so we'll
-                # just leave them as a String, since Puppet handles that case correctly.
-                if var == :mode
-                    value = $2
-                else
-                    value = munge_value($2)
-                end
-
-                # Check to see if this is a file argument and it has extra options
-                begin
-                    if value.is_a?(String) and options = extract_fileinfo(value)
-                        value = options[:value]
-                        options.delete(:value)
-                        result[section][:_meta][var] = options
-                    end
-                    result[section][var] = value
-                rescue Puppet::Error => detail
-                    detail.file = file
-                    detail.line = line
-                    raise
-                end
-            else
-                error = Puppet::Error.new("Could not match line %s" % line)
-                error.file = file
-                error.line = line
-                raise error
-            end
-        }
-
-        return result
-    end
-
-    # Read the file in.
-    def read_file(file)
-        if file.is_a? Puppet::Util::LoadedFile
-            @file = file
-        else
-            @file = Puppet::Util::LoadedFile.new(file)
-        end
-
-        begin
-            return File.read(@file.file)
-        rescue Errno::ENOENT
-            raise ArgumentError, "No such file %s" % file
-        rescue Errno::EACCES
-            raise ArgumentError, "Permission denied to file %s" % file
-        end
-    end
-
-    # Set file metadata.
-    def set_metadata(meta)
-        meta.each do |var, values|
-            values.each do |param, value|
-                @config[var].send(param.to_s + "=", value)
-            end
-        end
-    end
-
-    # The base element type.
-    class CElement
-        attr_accessor :name, :section, :default, :parent, :setbycli, :call_on_define
-        attr_reader :desc, :short
-
-        # Unset any set value.
-        def clear
-            @value = nil
-        end
-
-        def desc=(value)
-            @desc = value.gsub(/^\s*/, '')
-        end
-
-        # get the arguments in getopt format
-        def getopt_args
-            if short
-                [["--#{name}", "-#{short}", GetoptLong::REQUIRED_ARGUMENT]]
-            else
-                [["--#{name}", GetoptLong::REQUIRED_ARGUMENT]]
-            end
-        end
-
-        def hook=(block)
-            meta_def :handle, &block
-        end
-
-        # Create the new element.  Pretty much just sets the name.
-        def initialize(args = {})
-            if args.include?(:parent)
-                self.parent = args[:parent]
-                args.delete(:parent)
-            end
-            args.each do |param, value|
-                method = param.to_s + "="
-                unless self.respond_to? method
-                    raise ArgumentError, "%s does not accept %s" % [self.class, param]
-                end
-
-                self.send(method, value)
-            end
-
-            unless self.desc
-                raise ArgumentError, "You must provide a description for the %s config option" % self.name
-            end
-        end
-
-        def iscreated
-            @iscreated = true
-        end
-
-        def iscreated?
-            if defined? @iscreated
-                return @iscreated
-            else
-                return false
-            end
-        end
-
-        def set?
-            if defined? @value and ! @value.nil?
-                return true
-            else
-                return false
-            end
-        end
-
-        # short name for the celement
-        def short=(value)
-            if value.to_s.length != 1
-                raise ArgumentError, "Short names can only be one character."
-            end
-            @short = value.to_s
-        end
-
-        # Convert the object to a config statement.
-        def to_config
-            str = @desc.gsub(/^/, "# ") + "\n"
-
-            # Add in a statement about the default.
-            if defined? @default and @default
-                str += "# The default value is '%s'.\n" % @default
-            end
-
-            # If the value has not been overridden, then print it out commented
-            # and unconverted, so it's clear that that's the default and how it
-            # works.
-            value = @parent.value(self.name)
-
-            if value != @default
-                line = "%s = %s" % [@name, value]
-            else
-                line = "# %s = %s" % [@name, @default]
-            end
-
-            str += line + "\n"
-
-            str.gsub(/^/, "    ")
-        end
-
-        # Retrieves the value, or if it's not set, retrieves the default.
-        def value
-            @parent.value(self.name)
-        end
-    end
-
-    # A file.
-    class CFile < CElement
-        attr_writer :owner, :group
-        attr_accessor :mode, :create
-
-        def group
-            if defined? @group
-                return @parent.convert(@group)
-            else
-                return nil
-            end
-        end
-
-        def owner
-            if defined? @owner
-                return @parent.convert(@owner)
-            else
-                return nil
-            end
-        end
-
-        # Set the type appropriately.  Yep, a hack.  This supports either naming
-        # the variable 'dir', or adding a slash at the end.
-        def munge(value)
-            # If it's not a fully qualified path...
-            if value.is_a?(String) and value !~ /^\$/ and value !~ /^\// and value != 'false'
-                # Make it one
-                value = File.join(Dir.getwd, value)
-            end
-            if value.to_s =~ /\/$/
-                @type = :directory
-                return value.sub(/\/$/, '')
-            end
-            return value
-        end
-
-        # Return the appropriate type.
-        def type
-            value = @parent.value(self.name)
-            if @name.to_s =~ /dir/
-                return :directory
-            elsif value.to_s =~ /\/$/
-                return :directory
-            elsif value.is_a? String
-                return :file
-            else
-                return nil
-            end
-        end
-
-        # Convert the object to a TransObject instance.
-        def to_transportable
-            type = self.type
-            return nil unless type
-
-            path = self.value
-
-            return nil unless path.is_a?(String)
-            return nil if path =~ /^\/dev/
-            return nil if Puppet::Type.type(:file)[path] # skip files that are in our global resource list.
-
-            objects = []
-
-            # Skip plain files that don't exist, since we won't be managing them anyway.
-            return nil unless self.name.to_s =~ /dir$/ or File.exist?(path) or self.create
-            obj = Puppet::TransObject.new(path, "file")
-
-            # Only create directories, or files that are specifically marked to
-            # create.
-            if type == :directory or self.create
-                obj[:ensure] = type
-            end
-            [:mode].each { |var|
-                if value = self.send(var)
-                    # Don't bother converting the mode, since the file type
-                    # can handle it any old way.
-                    obj[var] = value
-                end
-            }
-
-            # Only chown or chgrp when root
-            if Puppet.features.root?
-                [:group, :owner].each { |var|
-                    if value = self.send(var)
-                        obj[var] = value
-                    end
-                }
-            end
-
-            # And set the loglevel to debug for everything
-            obj[:loglevel] = "debug"
-            
-            # We're not actually modifying any files here, and if we allow a
-            # filebucket to get used here we get into an infinite recursion
-            # trying to set the filebucket up.
-            obj[:backup] = false
-
-            if self.section
-                obj.tags += ["puppet", "configuration", self.section, self.name]
-            end
-            objects << obj
-            objects
-        end
-
-        # Make sure any provided variables look up to something.
-        def validate(value)
-            return true unless value.is_a? String
-            value.scan(/\$(\w+)/) { |name|
-                name = $1
-                unless @parent.include?(name)
-                    raise ArgumentError,
-                        "Settings parameter '%s' is undefined" %
-                        name
-                end
-            }
-        end
-    end
-
-    # A simple boolean.
-    class CBoolean < CElement
-        # get the arguments in getopt format
-        def getopt_args
-            if short
-                [["--#{name}", "-#{short}", GetoptLong::NO_ARGUMENT],
-                 ["--no-#{name}", GetoptLong::NO_ARGUMENT]]
-            else
-                [["--#{name}", GetoptLong::NO_ARGUMENT],
-                 ["--no-#{name}", GetoptLong::NO_ARGUMENT]]
-            end
-        end
-
-        def munge(value)
-            case value
-            when true, "true": return true
-            when false, "false": return false
-            else
-                raise ArgumentError, "Invalid value '%s' for %s" %
-                    [value.inspect, @name]
-            end
-        end
-    end
-end
diff --git a/lib/puppet/util/storage.rb b/lib/puppet/util/storage.rb
deleted file mode 100644
index dc4e9cd..0000000
--- a/lib/puppet/util/storage.rb
+++ /dev/null
@@ -1,105 +0,0 @@
-require 'yaml'
-require 'sync'
-
-# a class for storing state
-class Puppet::Util::Storage
-    include Singleton
-    include Puppet::Util
-
-    def self.state
-        return @@state
-    end
-
-    def initialize
-        self.class.load
-    end
-
-    # Return a hash that will be stored to disk.  It's worth noting
-    # here that we use the object's full path, not just the name/type
-    # combination.  At the least, this is useful for those non-isomorphic
-    # types like exec, but it also means that if an object changes locations
-    # in the configuration it will lose its cache.
-    def self.cache(object)
-        if object.is_a? Puppet::Type
-            # We used to store things by path, now we store them by ref.
-            # In oscar(0.20.0) this changed to using the ref.
-            if @@state.include?(object.path)
-                @@state[object.ref] = @@state[object.path]
-                @@state.delete(object.path)
-            end
-            name = object.ref
-        elsif object.is_a?(Symbol)
-            name = object
-        else
-            raise ArgumentError, "You can only cache information for Types and symbols"
-        end
-
-        return @@state[name] ||= {}
-    end
-
-    def self.clear
-        @@state.clear
-        Storage.init
-    end
-
-    def self.init
-        @@state = {}
-        @@splitchar = "\t"
-    end
-
-    self.init
-
-    def self.load
-        Puppet.settings.use(:main) unless FileTest.directory?(Puppet[:statedir])
-
-        unless File.exists?(Puppet[:statefile])
-            unless defined? @@state and ! @@state.nil?
-                self.init
-            end
-            return
-        end
-        Puppet::Util.benchmark(:debug, "Loaded state") do
-            Puppet::Util.readlock(Puppet[:statefile]) do |file|
-                begin
-                    @@state = YAML.load(file)
-                rescue => detail
-                    Puppet.err "Checksumfile %s is corrupt (%s); replacing" %
-                        [Puppet[:statefile], detail]
-                    begin
-                        File.rename(Puppet[:statefile],
-                            Puppet[:statefile] + ".bad")
-                    rescue
-                        raise Puppet::Error,
-                            "Could not rename corrupt %s; remove manually" %
-                            Puppet[:statefile]
-                    end
-                end
-            end
-        end
-
-        unless @@state.is_a?(Hash)
-            Puppet.err "State got corrupted"
-            self.init
-        end
-
-        #Puppet.debug "Loaded state is %s" % @@state.inspect
-    end
-
-    def self.stateinspect
-        @@state.inspect
-    end
-
-    def self.store
-        Puppet.debug "Storing state"
-
-        unless FileTest.exist?(Puppet[:statefile])
-            Puppet.info "Creating state file %s" % Puppet[:statefile]
-        end
-
-        Puppet::Util.benchmark(:debug, "Stored state") do
-            Puppet::Util.writelock(Puppet[:statefile], 0660) do |file|
-                file.print YAML.dump(@@state)
-            end
-        end
-    end
-end
diff --git a/lib/puppet/util/subclass_loader.rb b/lib/puppet/util/subclass_loader.rb
deleted file mode 100644
index dd0d6dd..0000000
--- a/lib/puppet/util/subclass_loader.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-# A module for loading subclasses into an array and retrieving
-# them by name.  Also sets up a method for each class so
-# that you can just do Klass.subclass, rather than Klass.subclass(:subclass).
-#
-# This module is currently used by network handlers and clients.
-module Puppet::Util::SubclassLoader
-    attr_accessor :loader, :classloader
-
-    # Iterate over each of the subclasses.
-    def each
-        @subclasses ||= []
-        @subclasses.each { |c| yield c }
-    end
-
-    # The hook method that sets up subclass loading.  We need the name
-    # of the method to create and the path in which to look for them.
-    def handle_subclasses(name, path)
-        unless self.is_a?(Class)
-            raise ArgumentError, "Must be a class to use SubclassLoader"
-        end
-        @subclasses = []
-        @loader = Puppet::Util::Autoload.new(self,
-            path, :wrap => false
-        )
-
-        @subclassname = name
-
-        @classloader = self
-
-        # Now create a method for retrieving these subclasses by name.  Note
-        # that we're defining a class method here, not an instance.
-        meta_def(name) do |subname|
-            subname = subname.to_s.downcase
-        
-            unless c = @subclasses.find { |c| c.name.to_s.downcase == subname }
-                loader.load(subname)
-                c = @subclasses.find { |c| c.name.to_s.downcase == subname }
-
-                # Now make the method that returns this subclass.  This way we
-                # normally avoid the method_missing method.
-                if c and ! respond_to?(subname)
-                    define_method(subname) { c }
-                end
-            end
-            return c
-        end
-    end
-
-    # Add a new class to our list.  Note that this has to handle subclasses of
-    # subclasses, thus the reason we're keeping track of the @@classloader.
-    def inherited(sub)
-        @subclasses ||= []
-        sub.classloader = self.classloader
-        if self.classloader == self
-            @subclasses << sub
-        else
-            @classloader.inherited(sub)
-        end
-    end
-
-    # See if we can load a class.
-    def method_missing(method, *args)
-        unless self == self.classloader
-            super
-        end
-        return nil unless defined? @subclassname
-        if c = self.send(@subclassname, method)
-            return c
-        else
-            return nil
-        end
-    end
-
-    # Retrieve or calculate a name.
-    def name
-        unless defined? @name
-            @name = self.to_s.sub(/.+::/, '').intern
-        end
-
-        return @name
-    end
-
-    # Provide a list of all subclasses.
-    def subclasses
-        @loader.loadall
-        @subclasses.collect { |klass| klass.name }
-    end
-end
-
diff --git a/lib/puppet/util/suidmanager.rb b/lib/puppet/util/suidmanager.rb
deleted file mode 100644
index b071dca..0000000
--- a/lib/puppet/util/suidmanager.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require 'facter'
-require 'puppet/util/warnings'
-require 'forwardable'
-
-module Puppet::Util::SUIDManager
-    include Puppet::Util::Warnings
-    extend Forwardable
-
-    to_delegate_to_process = [ :euid=, :euid, :egid=, :egid,
-                               :uid=, :uid, :gid=, :gid ]
-
-    to_delegate_to_process.each do |method|
-        def_delegator Process, method
-        module_function method
-    end
-
-    if Facter['kernel'].value == 'Darwin'
-        # Cannot change real UID on Darwin so we set euid
-        alias :uid :euid
-        alias :gid :egid
-    end
-
-    # Runs block setting uid and gid if provided then restoring original ids
-    def asuser(new_uid=nil, new_gid=nil)
-        return yield unless Process.uid == 0
-        # We set both because some programs like to drop privs, i.e. bash.
-        old_uid, old_gid = self.uid, self.gid
-        old_euid, old_egid = self.euid, self.egid
-        begin
-            self.egid = convert_xid :gid, new_gid if new_gid
-            self.euid = convert_xid :uid, new_uid if new_uid
-  
-            yield
-        ensure
-            self.euid, self.egid = old_euid, old_egid
-        end
-    end
-    module_function :asuser
-    
-    # Make sure the passed argument is a number.
-    def convert_xid(type, id)
-        map = {:gid => :group, :uid => :user}
-        raise ArgumentError, "Invalid id type %s" % type unless map.include?(type)
-        ret = Puppet::Util.send(type, id)
-        if ret == nil
-          raise Puppet::Error, "Invalid %s: %s" % [map[type], id]
-        end
-        return ret
-    end
-    module_function :convert_xid
-
-
-    def run_and_capture(command, new_uid=nil, new_gid=nil)
-        output = Puppet::Util.execute(command, :failonfail => false, :uid => new_uid, :gid => new_gid)
-        [output, $?.dup]
-    end
-    module_function :run_and_capture
-
-    def system(command, new_uid=nil, new_gid=nil)
-        status = nil
-        asuser(new_uid, new_gid) do
-            Kernel.system(command)
-            status = $?.dup
-        end
-        status
-    end
-    module_function :system
-end
-
diff --git a/lib/puppet/util/tagging.rb b/lib/puppet/util/tagging.rb
deleted file mode 100644
index e06e13a..0000000
--- a/lib/puppet/util/tagging.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# Created on 2008-01-19
-# Copyright Luke Kanies
-
-# A common module to handle tagging.
-module Puppet::Util::Tagging
-    # Add a tag to our current list.  These tags will be added to all
-    # of the objects contained in this scope.
-    def tag(*ary)
-        @tags ||= []
-
-        qualified = []
-
-        ary.collect { |tag| tag.to_s.downcase }.each do |tag|
-            fail(Puppet::ParseError, "Invalid tag %s" % tag.inspect) unless valid_tag?(tag)
-            qualified << tag if tag.include?("::")
-            @tags << tag unless @tags.include?(tag)
-        end
-
-        # LAK:NOTE See http://snurl.com/21zf8  [groups_google_com] 
-        qualified.collect { |name| x = name.split("::") }.flatten.each { |tag| @tags << tag unless @tags.include?(tag) }
-    end
-
-    # Are we tagged with the provided tag?
-    def tagged?(tag)
-        defined?(@tags) and @tags.include?(tag.to_s)
-    end
-
-    # Return a copy of the tag list, so someone can't ask for our tags
-    # and then modify them.
-    def tags
-        @tags ||= []
-        @tags.dup
-    end
-
-    private
-
-    def valid_tag?(tag)
-        tag =~ /^\w[-\w:.]*$/
-    end
-end
diff --git a/lib/puppet/util/uri_helper.rb b/lib/puppet/util/uri_helper.rb
deleted file mode 100644
index cb93203..0000000
--- a/lib/puppet/util/uri_helper.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-#  Created by Luke Kanies on 2007-10-16.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'uri'
-require 'puppet/util'
-
-# Helper methods for dealing with URIs.
-module Puppet::Util::URIHelper
-    def key2uri(key)
-        # Return it directly if it's fully qualified.
-        if key =~ /^#{::File::SEPARATOR}/
-            key = "file://" + key
-        end
-
-        begin
-            uri = URI.parse(URI.escape(key))
-        rescue => detail
-            raise ArgumentError, "Could not understand URI %s: %s" % [key, detail.to_s]
-        end
-    end
-end
diff --git a/lib/puppet/util/user_attr.rb b/lib/puppet/util/user_attr.rb
deleted file mode 100644
index db8fb81..0000000
--- a/lib/puppet/util/user_attr.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-class UserAttr
-    def self.get_attributes_by_name(name)
-        attributes = nil
-
-        File.readlines('/etc/user_attr').each do |line|
-            next if line =~ /^#/
-
-            token = line.split(':')
-
-            if token[0] == name
-                attributes = {:name => name}
-                token[4].split(';').each do |attr|
-                    key_value = attr.split('=')
-                    attributes[key_value[0].intern] = key_value[1].strip
-                end
-                break
-            end
-        end
-        return attributes
-    end
-end
diff --git a/lib/puppet/util/warnings.rb b/lib/puppet/util/warnings.rb
deleted file mode 100644
index 97c96b7..0000000
--- a/lib/puppet/util/warnings.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# Methods to help with handling warnings.
-module Puppet::Util::Warnings
-    module_function
-
-    def warnonce(msg)
-        $stampwarnings ||= {}
-        $stampwarnings[self.class] ||= []
-        unless $stampwarnings[self.class].include? msg
-            Puppet.warning msg
-            $stampwarnings[self.class] << msg
-        end
-
-        return nil
-    end
-
-    def clear_warnings()
-        $stampwarnings = {}
-        return nil
-    end
-end
-
diff --git a/man/man8/filebucket.8 b/man/man8/filebucket.8
deleted file mode 100644
index 0ef4c38..0000000
--- a/man/man8/filebucket.8
+++ /dev/null
@@ -1,116 +0,0 @@
-.TH   "" "" ""
-.SH NAME
- \- 
-
-.\" Man page generated from reStructeredText.
-
-.SH SYNOPSIS
-A stand\-alone Puppet filebucket client.
-
-
-.SH USAGE
-
-.\" visit_block_quote
-
-.TP
-.B filebucket [\-h|\-\-help] [\-V|\-\-version] [\-d|\-\-debug] [\-v|\-\-verbose]
-[\-l|\-\-local] [\-r|\-\-remote]
-[\-s|\-\-server <server>] [\-b|\-\-bucket <directory>] <file> <file> ...
-
-
-.\" depart_block_quote
-
-.SH DESCRIPTION
-This is a stand\-alone filebucket client for sending files to a local or
-central filebucket.
-
-
-.SH USAGE
-This client can operate in three modes, with only one mode per call:
-
-
-.TP
-.B backup:  Send one or more files to the specified file bucket. Each sent
-file is printed with its resulting md5 sum.
-
-
-.TP
-.B get:     Return the text associated with an md5 sum. The text is printed
-to stdout, and only one file can be retrieved at a time.
-
-
-.TP
-.B restore: Given a file path and an md5 sum, store the content associated
-with the sum into the specified file path. You can specify an
-entirely new path to this argument; you are not restricted to
-restoring the content to its original location.
-
-Note that +filebucket+ defaults to using a network\-based filebucket
-available on the server named +puppet+. To use this, you\'ll have to be
-running as a user with valid Puppet certificates. Alternatively, you can
-use your local file bucket by specifying +\-\-local+.
-
-
-.SH EXAMPLE
-
-.\" visit_block_quote
-$ filebucket backup /etc/passwd
-/etc/passwd: 429b225650b912a2ee067b0a4cf1e949
-$ filebucket restore /tmp/passwd 429b225650b912a2ee067b0a4cf1e949
-$
-
-
-.\" depart_block_quote
-
-.SH OPTIONS
-Note that any configuration parameter that\'s valid in the configuration
-file is also a valid long argument. For example, \'ssldir\' is a valid
-configuration parameter, so you can specify \'\-\-ssldir <directory>\' as an
-argument.
-
-See the configuration file documentation at
-http://reductivelabs.com/projects/puppet/reference/configref.html for
-the full list of acceptable parameters. A commented list of all
-configuration options can also be generated by running puppet with
-\'\-\-genconfig\'.
-
-debug:   Enable full debugging.
-
-help:    Print this help message
-
-
-.TP
-.B local:   Use the local filebucket. This will use the default
-configuration information.
-
-
-.TP
-.B remote:  Use a remote filebucket. This will use the default
-configuration information.
-
-server:  The server to send the file to, instead of locally.
-
-verbose: Print extra information.
-
-version: Print version information.
-
-
-.SH EXAMPLE
-
-.\" visit_block_quote
-filebucket \-b /tmp/filebucket /my/file
-
-
-.\" depart_block_quote
-
-.SH AUTHOR
-Luke Kanies
-
-
-.SH COPYRIGHT
-Copyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public
-License
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/man/man8/pi.8 b/man/man8/pi.8
deleted file mode 100644
index ba68579..0000000
--- a/man/man8/pi.8
+++ /dev/null
@@ -1,34 +0,0 @@
-.TH   "" "" ""
-.SH NAME
- \- 
-
-.\" Man page generated from reStructeredText.
-
-.TP
-.B bin/pi [options] [type]
-
-.TP
-.B Print documentation for puppet types and their parameters
-
-.TP
-.B \-l , \-\-list
-List all types
-
-
-.TP
-.B \-p , \-\-providers
-Describe providers in detail
-
-
-.TP
-.B \-s , \-\-short
-Only list parameters without detail
-
-
-.TP
-.B \-m , \-\-meta
-Include metaparams
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/man/man8/puppet.8 b/man/man8/puppet.8
deleted file mode 100644
index 990b7ce..0000000
--- a/man/man8/puppet.8
+++ /dev/null
@@ -1,78 +0,0 @@
-.TH   "" "" ""
-.SH NAME
- \- 
-
-.\" Man page generated from reStructeredText.
-
-.SH SYNOPSIS
-Run a stand\-alone +puppet+ script.
-
-
-.SH USAGE
-
-.\" visit_block_quote
-
-.TP
-.B puppet [\-h|\-\-help] [\-V|\-\-version] [\-d|\-\-debug] [\-v|\-\-verbose]
-[\-l|\-\-logdest <file>] <file>
-
-
-.\" depart_block_quote
-
-.SH DESCRIPTION
-This is the standalone puppet execution script; use it to execute
-individual scripts that you write. If you need to execute site\-wide
-scripts, use +puppetd+ and +puppetmasterd+.
-
-
-.SH OPTIONS
-Note that any configuration parameter that\'s valid in the configuration
-file is also a valid long argument. For example, \'ssldir\' is a valid
-configuration parameter, so you can specify \'\-\-ssldir <directory>\' as an
-argument.
-
-See the configuration file documentation at
-http://reductivelabs.com/projects/puppet/reference/configref.html for
-the full list of acceptable parameters. A commented list of all
-configuration options can also be generated by running puppet with
-\'\-\-genconfig\'.
-
-debug:       Enable full debugging.
-
-help:        Print this help message
-
-
-.TP
-.B loadclasses: Load any stored classes. +puppetd+ caches configured
-classes (usually at /etc/puppet/classes.txt), and setting
-this option causes all of those classes to be set in your
-+puppet+ manifest.
-
-
-.TP
-.B logdest:     Where to send messages. Choose between syslog, the console,
-and a log file. Defaults to sending messages to the
-console.
-
-verbose:     Print extra information.
-
-
-.SH EXAMPLE
-
-.\" visit_block_quote
-puppet \-l /tmp/script.log script.pp
-
-
-.\" depart_block_quote
-
-.SH AUTHOR
-Luke Kanies
-
-
-.SH COPYRIGHT
-Copyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public
-License
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/man/man8/puppet.conf.8 b/man/man8/puppet.conf.8
deleted file mode 100644
index 1bc1eb6..0000000
--- a/man/man8/puppet.conf.8
+++ /dev/null
@@ -1,1747 +0,0 @@
-.TH Configuration Reference  "" "" ""
-.SH NAME
-Configuration Reference \- 
-
-.\" Man page generated from reStructeredText.
-This page is autogenerated; any changes will get overwritten 
-.I (last generated on Mon May 05 09:33:01 +1000 2008)
-
-
-
-.\" topic: Contents
-.\" 
-.\" Specifying Configuration Parameters
-.\" 
-.\" Signals
-.\" 
-.\" Configuration Parameter Reference
-
-.SH Specifying Configuration Parameters
-
-.SS On The Command\-Line
-Every Puppet executable (with the exception of 
-.\" visit_literal
-puppetdoc
-.\" depart_literal
-) accepts all of
-the parameters below, but not all of the arguments make sense for every executable.
-Each parameter has a section listed with it in parentheses; often, that section
-will map to an executable (e.g., 
-.\" visit_literal
-puppetd
-.\" depart_literal
-), in which case it probably only
-makes sense for that one executable.  If 
-.\" visit_literal
-main
-.\" depart_literal
- is listed as the section,
-it is most likely an option that is valid for everyone.
-
-I have tried to be as thorough as possible in the descriptions of the
-arguments, so it should be obvious whether an argument is appropriate or not.
-
-These parameters can be supplied to the executables either as command\-line
-options or in the configuration file.  For instance, the command\-line
-invocation below would set the configuration directory to 
-.\" visit_literal
-/private/puppet
-.\" depart_literal
-:
-
-
-.nf
-$ puppetd \-\-confdir=/private/puppet
-.fi
-Note that boolean options are turned on and off with a slightly different
-syntax on the command line:
-
-
-.nf
-$ puppetd \-\-storeconfigs
-
-$ puppetd \-\-no\-storeconfigs
-.fi
-The invocations above will enable and disable, respectively, the storage of
-the client configuration.
-
-
-.SS Configuration Files
-As mentioned above, the configuration parameters can also be stored in a
-configuration file, located in the configuration directory.  As root, the
-default configuration directory is 
-.\" visit_literal
-/etc/puppet
-.\" depart_literal
-, and as a regular user, the
-default configuration directory is 
-.\" visit_literal
-~user/.puppet
-.\" depart_literal
-.  As of 0.23.0, all
-executables look for 
-.\" visit_literal
-puppet.conf
-.\" depart_literal
- in their configuration directory
-(although they previously looked for separate files).  For example,
-
-.\" visit_literal
-puppet.conf
-.\" depart_literal
- is located at 
-.\" visit_literal
-/etc/puppet/puppet.conf
-.\" depart_literal
- as root and
-
-.\" visit_literal
-~user/.puppet/puppet.conf
-.\" depart_literal
- as a regular user by default.
-
-All executables will set any parameters set within the 
-.\" visit_literal
-main
-.\" depart_literal
- section,
-while each executable will also look for a section named for the executable
-and load those parameters.  For example, 
-.\" visit_literal
-puppetd
-.\" depart_literal
- will look for a
-section named 
-.\" visit_literal
-puppetd
-.\" depart_literal
-, and 
-.\" visit_literal
-puppetmasterd
-.\" depart_literal
- looks for a section
-named 
-.\" visit_literal
-puppetmasterd
-.\" depart_literal
-.  This allows you to use a single configuration file
-to customize the settings for all of your executables.
-
-
-.SS File Format
-The file follows INI\-style formatting.  Here is an example of a very simple
-
-.\" visit_literal
-puppet.conf
-.\" depart_literal
- file:
-
-
-.nf
-[main]
-    confdir = /private/puppet
-    storeconfigs = true
-.fi
-Note that boolean parameters must be explicitly specified as 
-.I true
- or
-
-.I false
- as seen above.
-
-If you need to change file parameters (e.g., reset the mode or owner), do
-so within curly braces on the same line:
-
-
-.nf
-[main]
-    myfile = /tmp/whatever {owner = root, mode = 644}
-.fi
-If you\'re starting out with a fresh configuration, you may wish to let
-the executable generate a template configuration file for you by invoking
-the executable in question with the 
-.I \-\-genconfig
- command.  The executable
-will print a template configuration to standard output, which can be
-redirected to a file like so:
-
-
-.nf
-$ puppetd \-\-genconfig > /etc/puppet/puppet.conf
-.fi
-Note that this invocation will replace the contents of any pre\-existing
-
-.I puppet.conf
- file, so make a backup of your present config if it contains
-valuable information.
-
-All parameters will be under a single section heading matching the name of
-the process used to generate the configuraiton (\'puppetd\', in this case).
-
-Like the 
-.I \-\-genconfig
- argument, the executables also accept a 
-.I \-\-genmanifest
-
-argument, which will generate a manifest that can be used to manage all of
-Puppet\'s directories and files and prints it to standard output.  This can
-likewise be redirected to a file:
-
-
-.nf
-$ puppetd \-\-genmanifest > /etc/puppet/manifests/site.pp
-.fi
-Puppet can also create user and group accounts for itself (one 
-.I puppet
- group
-and one 
-.I puppet
- user) if it is invoked as 
-.I root
- with the 
-.I \-\-mkusers
- argument:
-
-
-.nf
-$ puppetd \-\-mkusers
-.fi
-
-.SH Signals
-The 
-.\" visit_literal
-puppetd
-.\" depart_literal
- and 
-.\" visit_literal
-puppetmasterd
-.\" depart_literal
- executables catch some signals for special
-handling.  Both daemons catch (
-.\" visit_literal
-SIGHUP
-.\" depart_literal
-), which forces the server to restart
-tself.  Predictably, interrupt and terminate (
-.\" visit_literal
-SIGINT
-.\" depart_literal
- and 
-.\" visit_literal
-SIGHUP
-.\" depart_literal
-) will shut
-down the server, whether it be an instance of 
-.\" visit_literal
-puppetd
-.\" depart_literal
- or 
-.\" visit_literal
-puppetmasterd
-.\" depart_literal
-.
-
-Sending the 
-.\" visit_literal
-SIGUSR1
-.\" depart_literal
- signal to an instance of 
-.\" visit_literal
-puppetd
-.\" depart_literal
- will cause it to
-immediately begin a new configuration transaction with the server.  This
-signal has no effect on 
-.\" visit_literal
-puppetmasterd
-.\" depart_literal
-.
-
-
-.SH Configuration Parameter Reference
-Below is a list of all documented parameters.  Not all of them are valid with all
-Puppet executables, but the executables will ignore any inappropriate values.
-
-
-.SS authconfig
-The configuration file that defines the rights to the different namespaces and methods.  This can be used as a coarse\-grained authorization system for both 
-.\" visit_literal
-puppetd
-.\" depart_literal
- and 
-.\" visit_literal
-puppetmasterd
-.\" depart_literal
-.
-
-
-.TP 2
-\(bu
-Default: $confdir/namespaceauth.conf
-
-
-.SS autoflush
-Whether log files should always flush to disk.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS autosign
-Whether to enable autosign.  Valid values are true (which autosigns any key request, and is a very bad idea), false (which never autosigns any key request), and the path to a file, which uses that configuration file to determine which keys to sign.
-
-
-.TP 2
-\(bu
-Default: $confdir/autosign.conf
-
-
-.SS bindaddress
-The address to bind to.  Mongrel servers default to 127.0.0.1 and WEBrick defaults to 0.0.0.0.
-
-
-.SS bucketdir
-Where FileBucket files are stored.
-
-
-.TP 2
-\(bu
-Default: $vardir/bucket
-
-
-.SS ca
-Wether the master should function as a certificate authority.
-
-
-.TP 2
-\(bu
-Default: true
-
-
-.SS ca_days
-How long a certificate should be valid.  This parameter is deprecated, use ca_ttl instead
-
-
-.SS ca_md
-The type of hash used in certificates.
-
-
-.TP 2
-\(bu
-Default: md5
-
-
-.SS ca_port
-The port to use for the certificate authority.
-
-
-.TP 2
-\(bu
-Default: $masterport
-
-
-.SS ca_server
-The server to use for certificate authority requests.  It\'s a separate server because it cannot and does not need to horizontally scale.
-
-
-.TP 2
-\(bu
-Default: $server
-
-
-.SS ca_ttl
-The default TTL for new certificates; valid values  must be an integer, optionally followed by one of the units  \'y\' (years of 365 days), \'d\' (days), \'h\' (hours), or  \'s\' (seconds). The unit defaults to seconds. If this parameter is set, ca_days is ignored. Examples are \'3600\' (one hour)  and \'1825d\', which is the same as \'5y\' (5 years)
-
-
-.TP 2
-\(bu
-Default: 5y
-
-
-.SS cacert
-The CA certificate.
-
-
-.TP 2
-\(bu
-Default: $cadir/ca_crt.pem
-
-
-.SS cacrl
-The certificate revocation list (CRL) for the CA. Set this to \'false\' if you do not want to use a CRL.
-
-
-.TP 2
-\(bu
-Default: $cadir/ca_crl.pem
-
-
-.SS cadir
-The root directory for the certificate authority.
-
-
-.TP 2
-\(bu
-Default: $ssldir/ca
-
-
-.SS cakey
-The CA private key.
-
-
-.TP 2
-\(bu
-Default: $cadir/ca_key.pem
-
-
-.SS capass
-Where the CA stores the password for the private key
-
-
-.TP 2
-\(bu
-Default: $caprivatedir/ca.pass
-
-
-.SS caprivatedir
-Where the CA stores private certificate information.
-
-
-.TP 2
-\(bu
-Default: $cadir/private
-
-
-.SS capub
-The CA public key.
-
-
-.TP 2
-\(bu
-Default: $cadir/ca_pub.pem
-
-
-.SS casesensitive
-Whether matching in case statements and selectors should be case\-sensitive.  Case insensitivity is handled by downcasing all values before comparison.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS cert_inventory
-A Complete listing of all certificates
-
-
-.TP 2
-\(bu
-Default: $cadir/inventory.txt
-
-
-.SS certdir
-The certificate directory.
-
-
-.TP 2
-\(bu
-Default: $ssldir/certs
-
-
-.SS certdnsnames
-The DNS names on the Server certificate as a colon\-separated list. If it\'s anything other than an empty string, it will be used as an alias in the created certificate.  By default, only the server gets an alias set up, and only for \'puppet\'.
-
-
-.SS certname
-The name to use when handling certificates.  Defaults to the fully qualified domain name.
-
-
-.TP 2
-\(bu
-Default: absinthe.lovedthanlost.net
-
-
-.SS classfile
-The file in which puppetd stores a list of the classes associated with the retrieved configuration.  Can be loaded in the separate 
-.\" visit_literal
-puppet
-.\" depart_literal
- executable using the 
-.\" visit_literal
-\-\-loadclasses
-.\" depart_literal
- option.
-
-
-.TP 2
-\(bu
-Default: $statedir/classes.txt
-
-
-.SS clientbucketdir
-Where FileBucket files are stored locally.
-
-
-.TP 2
-\(bu
-Default: $vardir/clientbucket
-
-
-.SS code
-Code to parse directly.  This is essentially only used by 
-.\" visit_literal
-puppet
-.\" depart_literal
-, and should only be set if you\'re writing your own Puppet executable
-
-
-.SS color
-Whether to use colors when logging to the console. Valid values are 
-.\" visit_literal
-ansi
-.\" depart_literal
- (equivalent to 
-.\" visit_literal
-true
-.\" depart_literal
-), 
-.\" visit_literal
-html
-.\" depart_literal
- (mostly used during testing with TextMate), and 
-.\" visit_literal
-false
-.\" depart_literal
-, which produces no color.
-
-
-.TP 2
-\(bu
-Default: ansi
-
-
-.SS confdir
-The main Puppet configuration directory.  The default for this parameter is calculated based on the user.  If the process is runnig as root or the user that 
-.\" visit_literal
-puppetmasterd
-.\" depart_literal
- is supposed to run as, it defaults to a system directory, but if it\'s running as any other user, it defaults to being in 
-.\" visit_literal
-~
-.\" depart_literal
-.
-
-
-.TP 2
-\(bu
-Default: /etc/puppet
-
-
-.SS config
-The configuration file for puppetdoc.
-
-
-.TP 2
-\(bu
-Default: $confdir/puppet.conf
-
-
-.SS configprint
-Print the value of a specific configuration parameter.  If a parameter is provided for this, then the value is printed and puppet exits.  Comma\-separate multiple values.  For a list of all values, specify \'all\'.  This feature is only available in Puppet versions higher than 0.18.4.
-
-
-.SS configtimeout
-How long the client should wait for the configuration to be retrieved before considering it a failure.  This can help reduce flapping if too many clients contact the server at one time.
-
-
-.TP 2
-\(bu
-Default: 120
-
-
-.SS csrdir
-Where the CA stores certificate requests
-
-
-.TP 2
-\(bu
-Default: $cadir/requests
-
-
-.SS daemonize
-Send the process into the background.  This is the default.
-
-
-.TP 2
-\(bu
-Default: true
-
-
-.SS dbadapter
-The type of database to use.
-
-
-.TP 2
-\(bu
-Default: sqlite3
-
-
-.SS dblocation
-The database cache for client configurations.  Used for querying within the language.
-
-
-.TP 2
-\(bu
-Default: $statedir/clientconfigs.sqlite3
-
-
-.SS dbmigrate
-Whether to automatically migrate the database.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS dbname
-The name of the database to use.
-
-
-.TP 2
-\(bu
-Default: puppet
-
-
-.SS dbpassword
-The database password for Client caching. Only used when networked databases are used.
-
-
-.TP 2
-\(bu
-Default: puppet
-
-
-.SS dbserver
-The database server for Client caching. Only used when networked databases are used.
-
-
-.TP 2
-\(bu
-Default: localhost
-
-
-.SS dbsocket
-The database socket location. Only used when networked databases are used.  Will be ignored if the value is an empty string.
-
-
-.SS dbuser
-The database user for Client caching. Only used when networked databases are used.
-
-
-.TP 2
-\(bu
-Default: puppet
-
-
-.SS diff
-Which diff command to use when printing differences between files.
-
-
-.TP 2
-\(bu
-Default: diff
-
-
-.SS diff_args
-Which arguments to pass to the diff command when printing differences between files.
-
-
-.SS downcasefacts
-Whether facts should be made all lowercase when sent to the server.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS dynamicfacts
-Facts that are dynamic; these facts will be ignored when deciding whether changed facts should result in a recompile.  Multiple facts should be comma\-separated.
-
-
-.TP 2
-\(bu
-Default: memorysize,memoryfree,swapsize,swapfree
-
-
-.SS environment
-The environment Puppet is running in.  For clients (e.g., 
-.\" visit_literal
-puppetd
-.\" depart_literal
-) this determines the environment itself, which is used to find modules and much more.  For servers (i.e., 
-.\" visit_literal
-puppetmasterd
-.\" depart_literal
-) this provides the default environment for nodes we know nothing about.
-
-
-.TP 2
-\(bu
-Default: production
-
-
-.SS environments
-The valid environments for Puppet clients. This is more useful as a server\-side setting than client, but any environment chosen must be in this list.  Values should be separated by a comma.
-
-
-.TP 2
-\(bu
-Default: production,development
-
-
-.SS evaltrace
-Whether each resource should log when it is being evaluated.  This allows you to interactively see exactly what is being done.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS external_nodes
-An external command that can produce node information.  The output must be a YAML dump of a hash, and that hash must have one or both of 
-.\" visit_literal
-classes
-.\" depart_literal
- and 
-.\" visit_literal
-parameters
-.\" depart_literal
-, where 
-.\" visit_literal
-classes
-.\" depart_literal
- is an array and 
-.\" visit_literal
-parameters
-.\" depart_literal
- is a hash.  For unknown nodes, the commands should exit with a non\-zero exit code. This command makes it straightforward to store your node mapping information in other data sources like databases.
-
-
-.TP 2
-\(bu
-Default: none
-
-
-.SS factdest
-Where Puppet should store facts that it pulls down from the central server.
-
-
-.TP 2
-\(bu
-Default: $vardir/facts
-
-
-.SS factpath
-Where Puppet should look for facts.  Multiple directories should be colon\-separated, like normal PATH variables.
-
-
-.TP 2
-\(bu
-Default: $vardir/facts
-
-
-.SS factsignore
-What files to ignore when pulling down facts.
-
-
-.TP 2
-\(bu
-Default: .svn CVS
-
-
-.SS factsource
-From where to retrieve facts.  The standard Puppet 
-.\" visit_literal
-file
-.\" depart_literal
- type is used for retrieval, so anything that is a valid file source can be used here.
-
-
-.TP 2
-\(bu
-Default: puppet://$server/facts
-
-
-.SS factsync
-Whether facts should be synced with the central server.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS fileserverconfig
-Where the fileserver configuration is stored.
-
-
-.TP 2
-\(bu
-Default: $confdir/fileserver.conf
-
-
-.SS filetimeout
-The minimum time to wait (in seconds) between checking for updates in configuration files.  This timeout determines how quickly Puppet checks whether a file (such as manifests or templates) has changed on disk.
-
-
-.TP 2
-\(bu
-Default: 15
-
-
-.SS genconfig
-Whether to just print a configuration to stdout and exit.  Only makes sense when used interactively.  Takes into account arguments specified on the CLI.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS genmanifest
-Whether to just print a manifest to stdout and exit.  Only makes sense when used interactively.  Takes into account arguments specified on the CLI.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS graph
-Whether to create dot graph files for the different configuration graphs.  These dot files can be interpreted by tools like OmniGraffle or dot (which is part of ImageMagick).
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS graphdir
-Where to store dot\-outputted graphs.
-
-
-.TP 2
-\(bu
-Default: $statedir/graphs
-
-
-.SS group
-The group puppetmasterd should run as.
-
-
-.TP 2
-\(bu
-Default: puppet
-
-
-.SS hostcert
-Where individual hosts store and look for their certificates.
-
-
-.TP 2
-\(bu
-Default: $certdir/$certname.pem
-
-
-.SS hostcsr
-Where individual hosts store and look for their certificates.
-
-
-.TP 2
-\(bu
-Default: $ssldir/csr_$certname.pem
-
-
-.SS hostprivkey
-Where individual hosts store and look for their private key.
-
-
-.TP 2
-\(bu
-Default: $privatekeydir/$certname.pem
-
-
-.SS hostpubkey
-Where individual hosts store and look for their public key.
-
-
-.TP 2
-\(bu
-Default: $publickeydir/$certname.pem
-
-
-.SS http_enable_post_connection_check
-Boolean; wheter or not puppetd should validate the server SSL certificate against the request hostname.
-
-
-.TP 2
-\(bu
-Default: true
-
-
-.SS http_proxy_host
-The HTTP proxy host to use for outgoing connections.  Note: You may need to use a FQDN for the server hostname when using a proxy.
-
-
-.TP 2
-\(bu
-Default: none
-
-
-.SS http_proxy_port
-The HTTP proxy port to use for outgoing connections
-
-
-.TP 2
-\(bu
-Default: 3128
-
-
-.SS httplog
-Where the puppetd web server logs.
-
-
-.TP 2
-\(bu
-Default: $logdir/http.log
-
-
-.SS ignorecache
-Ignore cache and always recompile the configuration.  This is useful for testing new configurations, where the local cache may in fact be stale even if the timestamps are up to date \- if the facts change or if the server changes.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS ignoreimport
-A parameter that can be used in commit hooks, since it enables you to parse\-check a single file rather than requiring that all files exist.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS ignoreschedules
-Boolean; whether puppetd should ignore schedules.  This is useful for initial puppetd runs.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS keylength
-The bit length of keys.
-
-
-.TP 2
-\(bu
-Default: 1024
-
-
-.SS ldapattrs
-The LDAP attributes to include when querying LDAP for nodes.  All returned attributes are set as variables in the top\-level scope. Multiple values should be comma\-separated.  The value \'all\' returns all attributes.
-
-
-.TP 2
-\(bu
-Default: all
-
-
-.SS ldapbase
-The search base for LDAP searches.  It\'s impossible to provide a meaningful default here, although the LDAP libraries might have one already set.  Generally, it should be the \'ou=Hosts\' branch under your main directory.
-
-
-.SS ldapclassattrs
-The LDAP attributes to use to define Puppet classes.  Values should be comma\-separated.
-
-
-.TP 2
-\(bu
-Default: puppetclass
-
-
-.SS ldapnodes
-Whether to search for node configurations in LDAP.  See http://reductivelabs.com/puppet/trac/wiki/LdapNodes/ for more information.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS ldapparentattr
-The attribute to use to define the parent node.
-
-
-.TP 2
-\(bu
-Default: parentnode
-
-
-.SS ldappassword
-The password to use to connect to LDAP.
-
-
-.SS ldapport
-The LDAP port.  Only used if 
-.\" visit_literal
-ldapnodes
-.\" depart_literal
- is enabled.
-
-
-.TP 2
-\(bu
-Default: 389
-
-
-.SS ldapserver
-The LDAP server.  Only used if 
-.\" visit_literal
-ldapnodes
-.\" depart_literal
- is enabled.
-
-
-.TP 2
-\(bu
-Default: ldap
-
-
-.SS ldapssl
-Whether SSL should be used when searching for nodes. Defaults to false because SSL usually requires certificates to be set up on the client side.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS ldapstring
-The search string used to find an LDAP node.
-
-
-.TP 2
-\(bu
-Default: (&(objectclass=puppetClient)(cn=%s))
-
-
-.SS ldaptls
-Whether TLS should be used when searching for nodes. Defaults to false because TLS usually requires certificates to be set up on the client side.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS ldapuser
-The user to use to connect to LDAP.  Must be specified as a full DN.
-
-
-.SS lexical
-Whether to use lexical scoping (vs. dynamic).
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS libdir
-An extra search path for Puppet.  This is only useful for those files that Puppet will load on demand, and is only guaranteed to work for those cases.  In fact, the autoload mechanism is responsible for making sure this directory is in Ruby\'s search path
-
-
-.TP 2
-\(bu
-Default: $vardir/lib
-
-
-.SS listen
-Whether puppetd should listen for connections.  If this is true, then by default only the 
-.\" visit_literal
-runner
-.\" depart_literal
- server is started, which allows remote authorized and authenticated nodes to connect and trigger 
-.\" visit_literal
-puppetd
-.\" depart_literal
- runs.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS localcacert
-Where each client stores the CA certificate.
-
-
-.TP 2
-\(bu
-Default: $certdir/ca.pem
-
-
-.SS localconfig
-Where puppetd caches the local configuration.  An extension indicating the cache format is added automatically.
-
-
-.TP 2
-\(bu
-Default: $statedir/localconfig
-
-
-.SS logdir
-The Puppet log directory.
-
-
-.TP 2
-\(bu
-Default: $vardir/log
-
-
-.SS manifest
-The entry\-point manifest for puppetmasterd.
-
-
-.TP 2
-\(bu
-Default: $manifestdir/site.pp
-
-
-.SS manifestdir
-Where puppetmasterd looks for its manifests.
-
-
-.TP 2
-\(bu
-Default: $confdir/manifests
-
-
-.SS masterhttplog
-Where the puppetmasterd web server logs.
-
-
-.TP 2
-\(bu
-Default: $logdir/masterhttp.log
-
-
-.SS masterlog
-Where puppetmasterd logs.  This is generally not used, since syslog is the default log destination.
-
-
-.TP 2
-\(bu
-Default: $logdir/puppetmaster.log
-
-
-.SS masterport
-Which port puppetmasterd listens on.
-
-
-.TP 2
-\(bu
-Default: 8140
-
-
-.SS maximum_uid
-The maximum allowed UID.  Some platforms use negative UIDs but then ship with tools that do not know how to handle signed ints, so the UIDs show up as huge numbers that can then not be fed back into the system.  This is a hackish way to fail in a slightly more useful way when that happens.
-
-
-.TP 2
-\(bu
-Default: 4294967290
-
-
-.SS mkusers
-Whether to create the necessary user and group that puppetd will run as.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS modulepath
-The search path for modules as a colon\-separated list of directories.
-
-
-.TP 2
-\(bu
-Default: $confdir/modules:/usr/share/puppet/modules
-
-
-.SS name
-The name of the service, if we are running as one.  The default is essentially $0 without the path or 
-.\" visit_literal
-.rb
-.\" depart_literal
-.
-
-
-.TP 2
-\(bu
-Default: puppetdoc
-
-
-.SS node_name
-How the puppetmaster determines the client\'s identity  and sets the \'hostname\', \'fqdn\' and \'domain\' facts for use in the manifest,  in particular for determining which \'node\' statement applies to the client.  Possible values are \'cert\' (use the subject\'s CN in the client\'s  certificate) and \'facter\' (use the hostname that the client  reported in its facts)
-
-
-.TP 2
-\(bu
-Default: cert
-
-
-.SS node_terminus
-Where to find information about nodes.
-
-
-.TP 2
-\(bu
-Default: plain
-
-
-.SS noop
-Whether puppetd should be run in noop mode.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS paramcheck
-Whether to validate parameters during parsing.
-
-
-.TP 2
-\(bu
-Default: true
-
-
-.SS parseonly
-Just check the syntax of the manifests.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS passfile
-Where puppetd stores the password for its private key. Generally unused.
-
-
-.TP 2
-\(bu
-Default: $privatedir/password
-
-
-.SS path
-The shell search path.  Defaults to whatever is inherited from the parent process.
-
-
-.TP 2
-\(bu
-Default: none
-
-
-.SS pidfile
-The pid file
-
-
-.SS plugindest
-Where Puppet should store plugins that it pulls down from the central server.
-
-
-.TP 2
-\(bu
-Default: $libdir
-
-
-.SS pluginpath
-Where Puppet should look for plugins.  Multiple directories should be colon\-separated, like normal PATH variables.  As of 0.23.1, this option is deprecated; download your custom libraries to the $libdir instead.
-
-
-.TP 2
-\(bu
-Default: $vardir/plugins
-
-
-.SS pluginsignore
-What files to ignore when pulling down plugins.
-
-
-.TP 2
-\(bu
-Default: .svn CVS
-
-
-.SS pluginsource
-From where to retrieve plugins.  The standard Puppet 
-.\" visit_literal
-file
-.\" depart_literal
- type is used for retrieval, so anything that is a valid file source can be used here.
-
-
-.TP 2
-\(bu
-Default: puppet://$server/plugins
-
-
-.SS pluginsync
-Whether plugins should be synced with the central server.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS privatedir
-Where the client stores private certificate information.
-
-
-.TP 2
-\(bu
-Default: $ssldir/private
-
-
-.SS privatekeydir
-The private key directory.
-
-
-.TP 2
-\(bu
-Default: $ssldir/private_keys
-
-
-.SS publickeydir
-The public key directory.
-
-
-.TP 2
-\(bu
-Default: $ssldir/public_keys
-
-
-.SS puppetdlockfile
-A lock file to temporarily stop puppetd from doing anything.
-
-
-.TP 2
-\(bu
-Default: $statedir/puppetdlock
-
-
-.SS puppetdlog
-The log file for puppetd.  This is generally not used.
-
-
-.TP 2
-\(bu
-Default: $logdir/puppetd.log
-
-
-.SS puppetport
-Which port puppetd listens on.
-
-
-.TP 2
-\(bu
-Default: 8139
-
-
-.SS rails_loglevel
-The log level for Rails connections.  The value must be a valid log level within Rails.  Production environments normally use 
-.\" visit_literal
-info
-.\" depart_literal
- and other environments normally use 
-.\" visit_literal
-debug
-.\" depart_literal
-.
-
-
-.TP 2
-\(bu
-Default: info
-
-
-.SS railslog
-Where Rails\-specific logs are sent
-
-
-.TP 2
-\(bu
-Default: $logdir/rails.log
-
-
-.SS report
-Whether to send reports after every transaction.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS reportdir
-The directory in which to store reports received from the client.  Each client gets a separate subdirectory.
-
-
-.TP 2
-\(bu
-Default: $vardir/reports
-
-
-.SS reportfrom
-The \'from\' email address for the reports.
-
-
-.TP 2
-\(bu
-Default: report at absinthe.lovedthanlost.net
-
-
-.SS reports
-The list of reports to generate.  All reports are looked for in puppet/reports/<name>.rb, and multiple report names should be comma\-separated (whitespace is okay).
-
-
-.TP 2
-\(bu
-Default: store
-
-
-.SS reportserver
-The server to which to send transaction reports.
-
-
-.TP 2
-\(bu
-Default: $server
-
-
-.SS req_bits
-The bit length of the certificates.
-
-
-.TP 2
-\(bu
-Default: 2048
-
-
-.SS rrddir
-The directory where RRD database files are stored. Directories for each reporting host will be created under this directory.
-
-
-.TP 2
-\(bu
-Default: $vardir/rrd
-
-
-.SS rrdgraph
-Whether RRD information should be graphed.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS rrdinterval
-How often RRD should expect data. This should match how often the hosts report back to the server.
-
-
-.TP 2
-\(bu
-Default: $runinterval
-
-
-.SS rundir
-Where Puppet PID files are kept.
-
-
-.TP 2
-\(bu
-Default: $vardir/run
-
-
-.SS runinterval
-How often puppetd applies the client configuration; in seconds.
-
-
-.TP 2
-\(bu
-Default: 1800
-
-
-.SS sendmail
-Where to find the sendmail binary with which to send email.
-
-
-.SS serial
-Where the serial number for certificates is stored.
-
-
-.TP 2
-\(bu
-Default: $cadir/serial
-
-
-.SS server
-The server to which server puppetd should connect
-
-
-.TP 2
-\(bu
-Default: puppet
-
-
-.SS servertype
-The type of server to use.  Currently supported options are webrick and mongrel.  If you use mongrel, you will need a proxy in front of the process or processes, since Mongrel cannot speak SSL.
-
-
-.TP 2
-\(bu
-Default: webrick
-
-
-.SS show_diff
-Whether to print a contextual diff when files are being replaced.  The diff is printed on stdout, so this option is meaningless unless you are running Puppet interactively. This feature currently requires the 
-.\" visit_literal
-diff/lcs
-.\" depart_literal
- Ruby library.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS signeddir
-Where the CA stores signed certificates.
-
-
-.TP 2
-\(bu
-Default: $cadir/signed
-
-
-.SS smtpserver
-The server through which to send email reports.
-
-
-.TP 2
-\(bu
-Default: none
-
-
-.SS splay
-Whether to sleep for a pseudo\-random (but consistent) amount of time before a run.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS splaylimit
-The maximum time to delay before runs.  Defaults to being the same as the run interval.
-
-
-.TP 2
-\(bu
-Default: $runinterval
-
-
-.SS ssl_client_header
-The header containing an authenticated client\'s SSL DN.  Only used with Mongrel.  This header must be set by the proxy to the authenticated client\'s SSL DN (e.g., 
-.\" visit_literal
-/CN=puppet.reductivelabs.com
-.\" depart_literal
-). See http://reductivelabs.com/puppet/trac/wiki/UsingMongrel for more information.
-
-
-.TP 2
-\(bu
-Default: HTTP_X_CLIENT_DN
-
-
-.SS ssl_client_verify_header
-The header containing the status message of the client verification. Only used with Mongrel.  This header must be set by the proxy to \'SUCCESS\' if the client successfully authenticated, and anything else otherwise. See http://reductivelabs.com/puppet/trac/wiki/UsingMongrel for more information.
-
-
-.TP 2
-\(bu
-Default: HTTP_X_CLIENT_VERIFY
-
-
-.SS ssldir
-Where SSL certificates are kept.
-
-
-.TP 2
-\(bu
-Default: $confdir/ssl
-
-
-.SS statedir
-The directory where Puppet state is stored.  Generally, this directory can be removed without causing harm (although it might result in spurious service restarts).
-
-
-.TP 2
-\(bu
-Default: $vardir/state
-
-
-.SS statefile
-Where puppetd and puppetmasterd store state associated with the running configuration.  In the case of puppetmasterd, this file reflects the state discovered through interacting with clients.
-
-
-.TP 2
-\(bu
-Default: $statedir/state.yaml
-
-
-.SS storeconfigs
-Whether to store each client\'s configuration.  This requires ActiveRecord from Ruby on Rails.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS summarize
-Whether to print a transaction summary.
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS syslogfacility
-What syslog facility to use when logging to syslog.  Syslog has a fixed list of valid facilities, and you must choose one of those; you cannot just make one up.
-
-
-.TP 2
-\(bu
-Default: daemon
-
-
-.SS tagmap
-The mapping between reporting tags and email addresses.
-
-
-.TP 2
-\(bu
-Default: $confdir/tagmail.conf
-
-
-.SS tags
-Tags to use to find resources.  If this is set, then only resources tagged with the specified tags will be applied. Values must be comma\-separated.
-
-
-.SS templatedir
-Where Puppet looks for template files.
-
-
-.TP 2
-\(bu
-Default: $vardir/templates
-
-
-.SS trace
-Whether to print stack traces on some errors
-
-
-.TP 2
-\(bu
-Default: false
-
-
-.SS typecheck
-Whether to validate types during parsing.
-
-
-.TP 2
-\(bu
-Default: true
-
-
-.SS usecacheonfailure
-Whether to use the cached configuration when the remote configuration will not compile.  This option is useful for testing new configurations, where you want to fix the broken configuration rather than reverting to a known\-good one.
-
-
-.TP 2
-\(bu
-Default: true
-
-
-.SS user
-The user puppetmasterd should run as.
-
-
-.TP 2
-\(bu
-Default: puppet
-
-
-.SS vardir
-Where Puppet stores dynamic and growing data.  The default for this parameter is calculated specially, like confdir.
-
-
-.TP 2
-\(bu
-Default: /var/puppet
-
-
-.SS yamldir
-The directory in which YAML data is stored, usually in a subdirectory.
-
-
-.TP 2
-\(bu
-Default: $vardir/yaml
-
-
-.sp
-.ce
-----
-
-.ce 0
-.sp
-
-.I This page autogenerated on Mon May 05 09:33:01 +1000 2008
-
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/man/man8/puppetca.8 b/man/man8/puppetca.8
deleted file mode 100644
index f9f89a9..0000000
--- a/man/man8/puppetca.8
+++ /dev/null
@@ -1,118 +0,0 @@
-.TH   "" "" ""
-.SH NAME
- \- 
-
-.\" Man page generated from reStructeredText.
-
-.SH SYNOPSIS
-Stand\-alone certificate authority. Capable of generating certificates
-but mostly meant for signing certificate requests from puppet clients.
-
-
-.SH USAGE
-
-.\" visit_block_quote
-
-.TP
-.B puppetca [\-h|\-\-help] [\-V|\-\-version] [\-d|\-\-debug] [\-v|\-\-verbose]
-[\-g|\-\-generate] [\-l|\-\-list] [\-s|\-\-sign] [\-r|\-\-revoke]
-[\-p|\-\-print] [\-c|\-\-clean] [\-\-verify] [host]
-
-
-.\" depart_block_quote
-
-.SH DESCRIPTION
-Because the puppetmasterd daemon defaults to not signing client
-certificate requests, this script is available for signing outstanding
-requests. It can be used to list outstanding requests and then either
-sign them individually or sign all of them.
-
-
-.SH OPTIONS
-Note that any configuration parameter that\'s valid in the configuration
-file is also a valid long argument. For example, \'ssldir\' is a valid
-configuration parameter, so you can specify \'\-\-ssldir <directory>\' as an
-argument.
-
-See the configuration file documentation at
-http://reductivelabs.com/projects/puppet/reference/configref.html for
-the full list of acceptable parameters. A commented list of all
-configuration options can also be generated by running puppetca with
-\'\-\-genconfig\'.
-
-
-.TP
-.B all:      Operate on all items. Currently only makes sense with
-\'\-\-sign\', \'\-\-clean\', or \'\-\-list\'.
-
-
-.TP
-.B clean:    Remove all files related to a host from puppetca\'s storage.
-This is useful when rebuilding hosts, since new certificate
-signing requests will only be honored if puppetca does not
-have a copy of a signed certificate for that host. The
-certificate of the host remains valid. If \'\-\-all\' is specified
-then all host certificates, both signed and unsigned, will be
-removed.
-
-debug:    Enable full debugging.
-
-
-.TP
-.B generate: Generate a certificate for a named client. A
-certificate/keypair will be generated for each client named on
-the command line.
-
-help:     Print this help message
-
-
-.TP
-.B list:     List outstanding certificate requests. If \'\-\-all\' is
-specified, signed certificates are also listed, prefixed by
-\'+\'.
-
-print:    Print the full\-text version of a host\'s certificate.
-
-
-.TP
-.B revoke:   Revoke the certificate of a client. The certificate can be
-specified either by its serial number, given as a decimal
-number or a hexadecimal number prefixed by \'0x\', or by its
-hostname. The certificate is revoked by adding it to the
-Certificate Revocation List given by the \'cacrl\' config
-parameter. Note that the puppetmasterd needs to be restarted
-after revoking certificates.
-
-
-.TP
-.B sign:     Sign an outstanding certificate request. Unless \'\-\-all\' is
-specified, hosts must be listed after all flags.
-
-verbose:  Enable verbosity.
-
-version:  Print the puppet version number and exit.
-
-verify:   Verify the named certificate against the local CA certificate.
-
-
-.SH EXAMPLE
-
-.\" visit_block_quote
-$ puppetca \-l
-culain.madstop.com
-$ puppetca \-s culain.madstop.com
-
-
-.\" depart_block_quote
-
-.SH AUTHOR
-Luke Kanies
-
-
-.SH COPYRIGHT
-Copyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public
-License
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/man/man8/puppetd.8 b/man/man8/puppetd.8
deleted file mode 100644
index 9cadcd4..0000000
--- a/man/man8/puppetd.8
+++ /dev/null
@@ -1,184 +0,0 @@
-.TH Synopsis  "" "" ""
-.SH NAME
-Synopsis \- 
-
-.\" Man page generated from reStructeredText.
-Retrieve the client configuration from the central puppet server and
-apply it to the local host.
-
-Currently must be run out periodically, using cron or something similar.
-
-
-.SH USAGE
-
-.\" visit_block_quote
-
-.TP
-.B puppetd  [\-D|\-\-daemonize|\-\-no\-daemonize] [\-d|\-\-debug] [\-\-disable] [\-\-enable]
-[\-h|\-\-help] [\-\-fqdn <host name>] [\-l|\-\-logdest syslog|<file>|console]
-[\-o|\-\-onetime] [\-\-serve <handler>] [\-t|\-\-test]
-[\-V|\-\-version] [\-v|\-\-verbose] [\-w|\-\-waitforcert <seconds>]
-
-
-.\" depart_block_quote
-
-.SH DESCRIPTION
-This is the main puppet client. Its job is to retrieve the local
-machine\'s configuration from a remote server and apply it. In order to
-successfully communicate with the remote server, the client must have a
-certificate signed by a certificate authority that the server trusts;
-the recommended method for this, at the moment, is to run a certificate
-authority as part of the puppet server (which is the default). The
-client will connect and request a signed certificate, and will continue
-connecting until it receives one.
-
-Once the client has a signed certificate, it will retrieve its
-configuration and apply it.
-
-
-.SH USAGE NOTES
-+puppetd+ does its best to find a compromise between interactive use and
-daemon use. Run with no arguments and no configuration, it will go into
-the backgroun, attempt to get a signed certificate, and retrieve and
-apply its configuration every 30 minutes.
-
-Some flags are meant specifically for interactive use \-\- in particular,
-+test+ and +tags+ are useful. +test+ enables verbose logging, causes the
-daemon to stay in the foreground, exits if the server\'s configuration is
-invalid (this happens if, for instance, you\'ve left a syntax error on
-the server), and exits after running the configuration once (rather than
-hanging around as a long\-running process).
-
-+tags+ allows you to specify what portions of a configuration you want
-to apply. Puppet elements are tagged with all of the class or definition
-names that contain them, and you can use the +tags+ flag to specify one
-of these names, causing only configuration elements contained within
-that class or definition to be applied. This is very useful when you are
-testing new configurations \-\- for instance, if you are just starting to
-manage +ntpd+, you would put all of the new elements into an +ntpd+
-class, and call puppet with +\-\-tags ntpd+, which would only apply that
-small portion of the configuration during your testing, rather than
-applying the whole thing.
-
-
-.SH OPTIONS
-Note that any configuration parameter that\'s valid in the configuration
-file is also a valid long argument. For example, \'server\' is a valid
-configuration parameter, so you can specify \'\-\-server <servername>\' as
-an argument.
-
-See the configuration file documentation at
-http://reductivelabs.com/projects/puppet/reference/configref.html for
-the full list of acceptable parameters. A commented list of all
-configuration options can also be generated by running puppetd with
-\'\-\-genconfig\'.
-
-daemonize:    Send the process into the background. This is the default.
-
-no\-daemonize: Do not send the process into the background.
-
-debug:        Enable full debugging.
-
-
-.TP
-.B disable:      Disable working on the local system. This puts a lock file
-in place, causing +puppetd+ not to work on the system
-until the lock file is removed. This is useful if you are
-testing a configuration and do not want the central
-configuration to override the local state until everything
-is tested and committed.
-
-+puppetd+ uses the same lock file while it is running, so no more than
-one +puppetd+ process is working at a time.
-
-+puppetd+ exits after executing this.
-
-
-.TP
-.B enable:       Enable working on the local system. This removes any lock
-file, causing +puppetd+ to start managing the local system
-again (although it will continue to use its normal
-scheduling, so it might not start for another half hour).
-
-+puppetd+ exits after executing this.
-
-
-.TP
-.B fqdn:         Set the fully\-qualified domain name of the client. This is
-only used for certificate purposes, but can be used to
-override the discovered hostname. If you need to use this
-flag, it is generally an indication of a setup problem.
-
-help:         Print this help message
-
-
-.TP
-.B logdest:      Where to send messages. Choose between syslog, the
-console, and a log file. Defaults to sending messages to
-syslog, or the console if debugging or verbosity is
-enabled.
-
-
-.TP
-.B no\-client:    Do not create a config client. This will cause the daemon
-to run without ever checking for its configuration
-automatically, and only makes sense when used in
-conjunction with \-\-listen.
-
-
-.TP
-.B onetime:      Run the configuration once, rather than as a long\-running
-daemon. This is useful for interactively running puppetd.
-
-
-.TP
-.B serve:        Start another type of server. By default, +puppetd+ will
-start a service handler that allows authenticated and
-authorized remote nodes to trigger the configuration to be
-pulled down and applied. You can specify any handler here
-that does not require configuration, e.g., filebucket, ca,
-or resource. The handlers are in
-+lib/puppet/network/handler+, and the names must match
-exactly, both in the call to +serve+ and in
-+namespaceauth.conf+.
-
-
-.TP
-.B test:         Enable the most common options used for testing. These are
-+onetime+, +verbose+, +ignorecache, and
-+no\-usecacheonfailure+.
-
-verbose:      Turn on verbose reporting.
-
-version:      Print the puppet version number and exit.
-
-
-.TP
-.B waitforcert:  This option only matters for daemons that do not yet have
-certificates and it is enabled by default, with a value of
-120 (seconds). This causes +puppetd+ to connect to the
-server every 2 minutes and ask it to sign a certificate
-request. This is useful for the initial setup of a puppet
-client. You can turn off waiting for certificates by
-specifying a time of 0.
-
-
-.SH EXAMPLE
-
-.\" visit_block_quote
-puppetd \-\-server puppet.domain.com
-
-
-.\" depart_block_quote
-
-.SH AUTHOR
-Luke Kanies
-
-
-.SH COPYRIGHT
-Copyright (c) 2005, 2006 Reductive Labs, LLC Licensed under the GNU
-Public License
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/man/man8/puppetdoc.8 b/man/man8/puppetdoc.8
deleted file mode 100644
index 8303b7a..0000000
--- a/man/man8/puppetdoc.8
+++ /dev/null
@@ -1,62 +0,0 @@
-.TH   "" "" ""
-.SH NAME
- \- 
-
-.\" Man page generated from reStructeredText.
-
-.SH SYNOPSIS
-Generate a reference for all Puppet types. Largely meant for internal
-Reductive Labs use.
-
-
-.SH USAGE
-
-.\" visit_block_quote
-puppetdoc [\-a|\-\-all] [\-h|\-\-help] [\-m|\-\-mode <text|pdf|trac> [\-r|\-\-reference <[type]|configuration|..>]
-
-
-.\" depart_block_quote
-
-.SH DESCRIPTION
-This command generates a restructured\-text document describing all
-installed Puppet types or all allowable arguments to puppet executables.
-It is largely meant for internal use and is used to generate the
-reference document available on the Reductive Labs web site.
-
-
-.SH OPTIONS
-all:       Output the docs for all of the reference types.
-
-help:      Print this help message
-
-
-.TP
-.B mode:      Determine the output mode. Valid modes are \'text\', \'trac\',
-and \'pdf\'. Note that \'trac\' mode only works on Reductive Labs
-servers. The default mode is \'text\'.
-
-
-.TP
-.B reference: Build a particular reference. Get a list of references by
-running +puppetdoc \-\-list+.
-
-
-.SH EXAMPLE
-
-.\" visit_block_quote
-$ puppetdoc \-r type > /tmp/type_reference.rst
-
-
-.\" depart_block_quote
-
-.SH AUTHOR
-Luke Kanies
-
-
-.SH COPYRIGHT
-Copyright (c) 2005\-2007 Reductive Labs, LLC Licensed under the GNU
-Public License
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/man/man8/puppetmasterd.8 b/man/man8/puppetmasterd.8
deleted file mode 100644
index c14da72..0000000
--- a/man/man8/puppetmasterd.8
+++ /dev/null
@@ -1,87 +0,0 @@
-.TH   "" "" ""
-.SH NAME
- \- 
-
-.\" Man page generated from reStructeredText.
-
-.SH SYNOPSIS
-The central puppet server. Functions as a certificate authority by
-default.
-
-
-.SH USAGE
-
-.\" visit_block_quote
-
-.TP
-.B puppetmasterd [\-D|\-\-daemonize|\-\-no\-daemonize] [\-d|\-\-debug] [\-h|\-\-help]
-[\-l|\-\-logdest <file>|console|syslog] [\-\-nobucket] [\-\-nonodes]
-[\-v|\-\-verbose] [\-V|\-\-version]
-
-
-.\" depart_block_quote
-
-.SH DESCRIPTION
-This is the puppet central daemon.
-
-
-.SH OPTIONS
-Note that any configuration parameter that\'s valid in the configuration
-file is also a valid long argument. For example, \'ssldir\' is a valid
-configuration parameter, so you can specify \'\-\-ssldir <directory>\' as an
-argument.
-
-See the configuration file documentation at
-http://reductivelabs.com/projects/puppet/reference/configref.html for
-the full list of acceptable parameters. A commented list of all
-configuration options can also be generated by running puppetmasterdd
-with \'\-\-genconfig\'.
-
-daemonize:    Send the process into the background. This is the default.
-
-no\-daemonize: Do not send the process into the background.
-
-debug:        Enable full debugging.
-
-help:         Print this help message.
-
-
-.TP
-.B logdest:      Where to send messages. Choose between syslog, the
-console, and a log file. Defaults to sending messages to
-syslog, or the console if debugging or verbosity is
-enabled.
-
-nobucket:     Do not function as a file bucket.
-
-
-.TP
-.B nonodes:      Do not use individual node designations; each node will
-receive the result of evaluating the entire configuration.
-
-noreports:    Do not start the reports server.
-
-verbose:      Enable verbosity.
-
-version:      Print the puppet version number and exit.
-
-
-.SH EXAMPLE
-
-.\" visit_block_quote
-puppetmasterd
-
-
-.\" depart_block_quote
-
-.SH AUTHOR
-Luke Kanies
-
-
-.SH COPYRIGHT
-Copyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public
-License
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/man/man8/puppetrun.8 b/man/man8/puppetrun.8
deleted file mode 100644
index 6b40481..0000000
--- a/man/man8/puppetrun.8
+++ /dev/null
@@ -1,151 +0,0 @@
-.TH   "" "" ""
-.SH NAME
- \- 
-
-.\" Man page generated from reStructeredText.
-
-.SH SYNOPSIS
-Trigger a puppetd run on a set of hosts.
-
-
-.SH USAGE
-
-.\" visit_block_quote
-
-.TP
-.B puppetrun [\-a|\-\-all] [\-c|\-\-class <class>] [\-d|\-\-debug] [\-f|\-\-foreground]
-[\-h|\-\-help] [\-\-host <host>] [\-\-no\-fqdn] [\-\-ignoreschedules]
-[\-t|\-\-tag <tag>] [\-\-test]
-
-
-.\" depart_block_quote
-
-.SH DESCRIPTION
-This script can be used to connect to a set of machines running
-+puppetd+ and trigger them to run their configurations. The most common
-usage would be to specify a class of hosts and a set of tags, and
-+puppetrun+ would look up in LDAP all of the hosts matching that class,
-then connect to each host and trigger a run of all of the objects with
-the specified tags.
-
-If you are not storing your host configurations in LDAP, you can specify
-hosts manually.
-
-You will most likely have to run +puppetrun+ as root to get access to
-the SSL certificates.
-
-+puppetrun+ reads +puppetmaster+\'s configuration file, so that it can
-copy things like LDAP settings.
-
-
-.SH USAGE NOTES
-+puppetrun+ is useless unless +puppetd+ is listening. See its
-documentation for more information, but the gist is that you must enable
-+listen+ on the +puppetd+ daemon, either using +\-\-listen+ on the command
-line or adding \'listen: true\' in its config file. In addition, you need
-to set the daemons up to specifically allow connections by creating the
-+namespaceauth+ file, normally at \'/etc/puppet/namespaceauth.conf\'. This
-file specifies who has access to each namespace; if you create the file
-you must add every namespace you want any Puppet daemon to allow \-\- it
-is currently global to all Puppet daemons.
-
-An example file looks like this:
-
-
-.nf
-[fileserver]
-    allow *.madstop.com
-
-[puppetmaster]
-    allow *.madstop.com
-
-[puppetrunner]
-    allow culain.madstop.com
-.fi
-This is what you would install on your Puppet master; non\-master hosts
-could leave off the \'fileserver\' and \'puppetmaster\' namespaces.
-
-Expect more documentation on this eventually.
-
-
-.SH OPTIONS
-Note that any configuration parameter that\'s valid in the configuration
-file is also a valid long argument. For example, \'ssldir\' is a valid
-configuration parameter, so you can specify \'\-\-ssldir <directory>\' as an
-argument.
-
-See the configuration file documentation at
-http://reductivelabs.com/projects/puppet/reference/configref.html for
-the full list of acceptable parameters. A commented list of all
-configuration options can also be generated by running puppetmasterdd
-with \'\-\-genconfig\'.
-
-
-.TP
-.B all:             Connect to all available hosts. Requires LDAP support
-at this point.
-
-
-.TP
-.B class:           Specify a class of machines to which to connect. This
-only works if you have LDAP configured, at the moment.
-
-debug:           Enable full debugging.
-
-
-.TP
-.B foreground:      Run each configuration in the foreground; that is, when
-connecting to a host, do not return until the host has
-finished its run. The default is false.
-
-help:            Print this help message
-
-
-.TP
-.B host:            A specific host to which to connect. This flag can be
-specified more than once.
-
-
-.TP
-.B ignoreschedules: Whether the client should ignore schedules when running
-its configuration. This can be used to force the client
-to perform work it would not normally perform so soon.
-The default is false.
-
-
-.TP
-.B parallel:        How parallel to make the connections. Parallelization
-is provided by forking for each client to which to
-connect. The default is 1, meaning serial execution.
-
-
-.TP
-.B tag:             Specify a tag for selecting the objects to apply. Does
-not work with the \-\-test option.
-
-
-.TP
-.B test:            Print the hosts you would connect to but do not
-actually connect. This option requires LDAP support at
-this point.
-
-
-.SH EXAMPLE
-
-.\" visit_block_quote
-sudo puppetrun \-p 10 \-\-host host1 \-\-host host2 \-t remotefile \-t webserver
-
-
-.\" depart_block_quote
-
-.SH AUTHOR
-Luke Kanies
-
-
-.SH COPYRIGHT
-Copyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public
-License
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/man/man8/ralsh.8 b/man/man8/ralsh.8
deleted file mode 100644
index 89c99c9..0000000
--- a/man/man8/ralsh.8
+++ /dev/null
@@ -1,135 +0,0 @@
-.TH   "" "" ""
-.SH NAME
- \- 
-
-.\" Man page generated from reStructeredText.
-vim: softtabstop=4 shiftwidth=4 expandtab
-
-
-.SH SYNOPSIS
-Use the Puppet RAL to directly interact with the system.
-
-
-.SH USAGE
-
-.\" visit_block_quote
-
-.TP
-.B ralsh [\-h|\-\-help] [\-d|\-\-debug] [\-v|\-\-verbose] [\-e|\-\-edit] [\-H|\-\-host <host>]
-[\-p|\-\-param <param>] [\-t|\-\-types] type <name>
-
-
-.\" depart_block_quote
-
-.SH DESCRIPTION
-This command provides simple facilities for converting current system
-state into Puppet code, along with some ability to use Puppet to affect
-the current state.
-
-By default, you must at least provide a type to list, which case ralsh
-will tell you everything it knows about all instances of that type. You
-can optionally specify an instance name, and ralsh will only describe
-that single instance.
-
-You can also add +\-\-edit+ as an argument, and ralsh will write its
-output to a file, open that file in an editor, and then apply the file
-as a Puppet transaction. You can easily use this to use Puppet to make
-simple changes to a system.
-
-
-.SH OPTIONS
-Note that any configuration parameter that\'s valid in the configuration
-file is also a valid long argument. For example, \'ssldir\' is a valid
-configuration parameter, so you can specify \'\-\-ssldir <directory>\' as an
-argument.
-
-See the configuration file documentation at
-http://reductivelabs.com/projects/puppet/reference/configref.html for
-the full list of acceptable parameters. A commented list of all
-configuration options can also be generated by running puppet with
-\'\-\-genconfig\'.
-
-debug: Enable full debugging.
-
-edit:
-
-
-.\" visit_block_quote
-Write the results of the query to a file, open the file in an editor,
-and read the file back in as an executable Puppet manifest.
-
-
-.\" depart_block_quote
-host:
-
-
-.\" visit_block_quote
-When specified, connect to the resource server on the named host
-and retrieve the list of resouces of the type specified.
-
-
-.\" depart_block_quote
-help:
-
-
-.\" visit_block_quote
-Print this help message.
-
-
-.\" depart_block_quote
-param:
-
-
-.\" visit_block_quote
-Add more parameters to be outputted from queries.
-
-
-.\" depart_block_quote
-types:
-
-
-.\" visit_block_quote
-List all available types.
-
-
-.\" depart_block_quote
-verbose: Print extra information.
-
-
-.SH EXAMPLE
-This example uses 
-.\" visit_literal
-ralsh
-.\" depart_literal
- to return Puppet configuration for the user
-
-.\" visit_literal
-luke
-.\" depart_literal
-:
-
-
-.nf
-$ ralsh user luke
-user { \'luke\':
-  home => \'/home/luke\',
-  uid => \'100\',
-  ensure => \'present\',
-  comment => \'Luke Kanies,,,\',
-  gid => \'1000\',
-  shell => \'/bin/bash\',
-  groups => [\'sysadmin\',\'audio\',\'video\',\'puppet\']
-}
-.fi
-
-.SH AUTHOR
-Luke Kanies
-
-
-.SH COPYRIGHT
-Copyright (c) 2005\-2007 Reductive Labs, LLC Licensed under the GNU
-Public License
-
-
-.\" Generated by docutils manpage writer on 2008-05-05 09:33.
-.\" 
diff --git a/test/README b/test/README
deleted file mode 100644
index 82a749a..0000000
--- a/test/README
+++ /dev/null
@@ -1,24 +0,0 @@
-$Id$
-
-To run all tests, run: 'rake test'.  To run an individual suite, run the file
-directly.  e.g. cd test/util; ./utiltest.rb
-
-You might need to run some tests as root.
-
-If you do not have rake installed:
-  gem install rake
-
-## The following information is possibly out of date?
-
-Tests are organized into a dual hierarchy: each subdirectory is
-considered a test suite, and each file in the subdirectory is considered
-a test case.  You can use any test case as an example of how to write
-more of them, but basically the only requirements are that they each have
-their own class names, their names each match /tc_.+\.r/, and that they have
-the following header:
-
-if __FILE__ == $0
-    $:.unshift '..'
-    $:.unshift '../../lib'
-    $blinkbase = "../.."
-end
diff --git a/test/Rakefile b/test/Rakefile
deleted file mode 100644
index a8118c1..0000000
--- a/test/Rakefile
+++ /dev/null
@@ -1,97 +0,0 @@
-# let Emacs know it's -*- ruby -*-
-begin
-    require 'rake/testtask'
-rescue LoadError
-    $stderr.puts "You must have 'rake' installed to use this file"
-    exit(1)
-end
-
-require 'find'
-
-include Find
-include FileTest
-
-$exclusions = %W(lib data)
-$test_library_paths = %W(lib ../lib)
-
-$: << File.join(Dir.getwd, "lib")
-
-require 'rake/puppet_testtask'
-
-filemap = Hash.new { |hash, key| hash[key] = [] }
-
-allfiles = []
-
-# First collect the entire file list.
-find(".") do |f|
-    # Get rid of the leading ./
-    f = f.sub(/^\.\//, '')
-
-    file = File.basename(f)
-    dir = File.dirname(f)
-
-    # Prune . directories and excluded dirs
-    if (file =~ /^\./ and f != ".") or $exclusions.include?(File.basename(file))
-        prune
-        next
-    end
-    next if f == "."
-    next if dir == "."
-
-    # If we're a ruby script, then add it to the list of files for that dir
-    if file =~ /\.rb$/
-        allfiles << f
-        # Add it to all of the parent dirs, not just our own
-        parts = File.split(dir)
-        if parts[0] == "."
-            parts.shift
-        end
-        parts.each_with_index { |part, i|
-            path = File.join(parts[0..i])
-            filemap[path] << f
-        }
-    end
-end
-
-desc "Run the full test suite"
-Rake::PuppetTestTask.new :test do |t|
-    t.libs << $test_library_paths
-
-    # Add every file as a test file to run
-    t.test_files = allfiles
-    t.verbose = true
-end
-
-task :default => :test
-
-# Now create a task for every directory
-filemap.each do |dir, files|
-    ns = dir.gsub "/", ":"
-
-    # First create a separate task for each file in the namespace.
-    namespace ns do
-        files.each do |file|
-            Rake::PuppetTestTask.new File.basename(file, '.rb').to_sym do |t|
-                t.libs << $test_library_paths + ['..']
-                t.test_files = [ file ]
-                t.verbose = true 
-            end 
-        end
-    end
-
-    # Then create a task that matches the directory itself.
-    Rake::PuppetTestTask.new dir do |t|
-       t.libs << $test_library_paths
-       if ENV["TESTFILES"]
-           t.test_files = ENV["TESTFILES"].split(/\s+/)
-       else
-           t.test_files = files.sort
-       end
-       t.verbose = true
-    end
-
-    # And alias it with a slash on the end
-    task(dir + "/" => dir)
-end
-
-# $Id$
diff --git a/test/certmgr/ca.rb b/test/certmgr/ca.rb
deleted file mode 100755
index e354f3d..0000000
--- a/test/certmgr/ca.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/sslcertificates/ca.rb'
-require 'puppettest'
-require 'puppettest/certificates'
-require 'mocha'
-
-class TestCA < Test::Unit::TestCase
-    include PuppetTest
-
-    def setup
-      super
-      Puppet::Util::SUIDManager.stubs(:asuser).yields
-    end
-
-    def hosts
-        %w{host.domain.com Other.Testing.Com}
-    end
-    def mkca
-        Puppet::SSLCertificates::CA.new
-    end
-    
-    def test_clean
-        dirs = [:csrdir, :signeddir, :publickeydir, :privatekeydir, :certdir]
-        ca = mkca
-        
-        hosts.each do |host|
-            files = []
-            dirs.each do |dir|
-                dir = Puppet[dir]
-                # We handle case insensitivity through downcasing
-                file = File.join(dir, host.downcase + ".pem")
-                File.open(file, "w") do |f|
-                    f.puts "testing"
-                end
-                files << file
-            end
-            assert_nothing_raised do
-                ca.clean(host)
-            end
-            files.each do |f|
-                assert(! FileTest.exists?(f), "File %s was not deleted" % f)
-            end
-        end
-    end
-    
-    def test_host2Xfile
-        ca = mkca
-        hosts.each do |host|
-            {:signeddir => :host2certfile, :csrdir => :host2csrfile}.each do |dir, method|
-                val = nil
-                assert_nothing_raised do
-                    val = ca.send(method, host)
-                end
-                assert_equal(File.join(Puppet[dir], host.downcase + ".pem"), val,
-                    "incorrect response from %s" % method)
-            end
-        end
-    end
-    
-    def test_list
-        ca = mkca
-        # Make a fake csr
-        dir = Puppet[:csrdir]
-        list = []
-        hosts.each do |host|
-            file = File.join(dir, host.downcase + ".pem")
-            File.open(file, "w") { |f| f.puts "yay" }
-            list << host.downcase
-        end
-        
-        assert_equal(list.sort, ca.list.sort, "list was not correct")
-    end
-
-    # #142 - test storing the public key
-    def test_store_public_key
-        ca = mkca
-        assert_nothing_raised do
-            ca.mkrootcert
-        end
-        assert(FileTest.exists?(Puppet[:capub]), "did not store public key")
-    end
-end
-
diff --git a/test/certmgr/certmgr.rb b/test/certmgr/certmgr.rb
deleted file mode 100755
index 0337000..0000000
--- a/test/certmgr/certmgr.rb
+++ /dev/null
@@ -1,299 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/sslcertificates.rb'
-require 'puppettest'
-require 'puppettest/certificates'
-require 'mocha'
-
-class TestCertMgr < Test::Unit::TestCase
-    include PuppetTest::Certificates
-    def setup
-        super
-        #@dir = File.join(Puppet[:certdir], "testing")
-        @dir = File.join(@configpath, "certest")
-        system("mkdir -p %s" % @dir)
-
-        Puppet::Util::SUIDManager.stubs(:asuser).yields
-    end
-
-    def testCreateSelfSignedCertificate
-        cert = nil
-        name = "testing"
-        newcert = proc {
-            Puppet::SSLCertificates::Certificate.new(
-                :name => name,
-                :selfsign => true
-            )
-        }
-        assert_nothing_raised {
-            cert = newcert.call()
-        }
-        assert_nothing_raised {
-            cert.mkselfsigned
-        }
-
-        assert_raise(Puppet::Error) {
-            cert.mkselfsigned
-        }
-
-        assert_nothing_raised {
-            cert.write
-        }
-
-        assert(FileTest.exists?(cert.certfile))
-
-        assert_nothing_raised {
-            cert.delete
-        }
-
-        assert_nothing_raised {
-            cert = newcert.call()
-        }
-        assert_nothing_raised {
-            cert.mkselfsigned
-        }
-
-        assert_nothing_raised {
-            cert.delete
-        }
-
-    end
-
-    def disabled_testCreateEncryptedSelfSignedCertificate
-        cert = nil
-        name = "testing"
-        keyfile = mkPassFile
-        assert_nothing_raised {
-            cert = Puppet::SSLCertificates::Certificate.new(
-                :name => name,
-                :selfsign => true,
-                :capass => keyfile
-            )
-        }
-        assert_nothing_raised {
-            cert.mkselfsigned
-        }
-        assert_nothing_raised {
-            cert.mkhash
-        }
-
-        assert_raise(Puppet::Error) {
-            cert.mkselfsigned
-        }
-
-        assert(FileTest.exists?(cert.certfile))
-        assert(FileTest.exists?(cert.hash))
-
-        assert_nothing_raised {
-            cert.delete
-        }
-
-        assert_nothing_raised {
-            cert.mkselfsigned
-        }
-
-        assert_nothing_raised {
-            cert.delete
-        }
-
-    end
-
-    def testCreateCA
-        ca = nil
-        assert_nothing_raised {
-            ca = Puppet::SSLCertificates::CA.new()
-        }
-
-        # make the CA again and verify it doesn't fail because everything
-        # still exists
-        assert_nothing_raised {
-            ca = Puppet::SSLCertificates::CA.new()
-        }
-
-    end
-
-    def testSignCert
-        ca = mkCA()
-
-        cert = nil
-        assert_nothing_raised {
-            cert = Puppet::SSLCertificates::Certificate.new(
-                :name => "signedcertest",
-                :property => "TN",
-                :city => "Nashville",
-                :country => "US",
-                :email => "luke at madstop.com",
-                :org => "Reductive",
-                :ou => "Development",
-                :encrypt => mkPassFile()
-            )
-
-        }
-
-        assert_nothing_raised {
-            cert.mkcsr
-        }
-
-        signedcert = nil
-        cacert = nil
-
-        assert_nothing_raised {
-            signedcert, cacert = ca.sign(cert.csr)
-        }
-
-        assert_instance_of(OpenSSL::X509::Certificate, signedcert)
-        assert_instance_of(OpenSSL::X509::Certificate, cacert)
-
-        assert_nothing_raised {
-            cert.cert = signedcert
-            cert.cacert = cacert
-            cert.write
-        }
-        #system("find %s" % Puppet[:ssldir])
-        #system("cp -R %s /tmp/ssltesting" % Puppet[:ssldir])
-
-        output = nil
-        assert_nothing_raised {
-            output = %x{openssl verify -CAfile #{Puppet[:cacert]} -purpose sslserver #{cert.certfile}}
-            #output = %x{openssl verify -CApath #{Puppet[:certdir]} -purpose sslserver #{cert.certfile}}
-        }
-
-        assert_equal($?,0)
-        assert_equal(File.join(Puppet[:certdir], "signedcertest.pem: OK\n"), output)
-    end
- 
-
-    def test_interactiveca
-        ca = nil
-
-        assert_nothing_raised {
-            ca = Puppet::SSLCertificates::CA.new
-        }
-
-        # basic initialization
-        hostname = "test.hostname.com"
-        cert = mkcert(hostname)
-
-        # create the csr
-        csr = nil
-        assert_nothing_raised {
-            csr = cert.mkcsr
-        }
-
-        assert_nothing_raised {
-            ca.storeclientcsr(csr)
-        }
-
-        # store it
-        pulledcsr = nil
-        assert_nothing_raised {
-            pulledcsr = ca.getclientcsr(hostname)
-        }
-
-        assert_equal(csr.to_pem, pulledcsr.to_pem)
-
-        signedcert = nil
-        assert_nothing_raised {
-            signedcert, cacert = ca.sign(csr)
-        }
-
-        assert_instance_of(OpenSSL::X509::Certificate, signedcert)
-        newsignedcert = nil
-        assert_nothing_raised {
-            newsignedcert, cacert = ca.getclientcert(hostname)
-        }
-
-        assert(newsignedcert)
-
-        assert_equal(signedcert.to_pem, newsignedcert.to_pem)
-    end
-
-    def test_cafailures
-        ca = mkCA()
-        cert = cacert = nil
-        assert_nothing_raised {
-            cert, cacert = ca.getclientcert("nohost")
-        }
-        assert_nil(cert)
-    end
-
-    def test_crl
-        ca = mkCA()
-        h1 = mksignedcert(ca, "host1.example.com")
-        h2 = mksignedcert(ca, "host2.example.com")
-        
-        assert(ca.cert.verify(ca.cert.public_key))
-        assert(h1.verify(ca.cert.public_key))
-        assert(h2.verify(ca.cert.public_key))
-
-        crl = ca.crl
-        assert_not_nil(crl)
-        
-        store = mkStore(ca)
-        assert( store.verify(ca.cert))
-        assert( store.verify(h1, [ca.cert]))
-        assert( store.verify(h2, [ca.cert]))
-
-        ca.revoke(h1.serial)
-
-        oldcert = File.read(Puppet.settings[:cacert])
-        oldserial = File.read(Puppet.settings[:serial])
-
-        # Recreate the CA from disk
-        ca = mkCA()
-        newcert = File.read(Puppet.settings[:cacert])
-        newserial = File.read(Puppet.settings[:serial])
-        assert_equal(oldcert, newcert, "The certs are not equal after making a new CA.")
-        assert_equal(oldserial, newserial, "The serials are not equal after making a new CA.")
-        store = mkStore(ca)
-        assert( store.verify(ca.cert), "Could not verify CA certs after reloading certs.")
-        assert(!store.verify(h1, [ca.cert]), "Incorrectly verified revoked cert.")
-        assert( store.verify(h2, [ca.cert]), "Could not verify certs with reloaded CA.")
-        
-        ca.revoke(h2.serial)
-        assert_equal(1, ca.crl.extensions.size)
-
-        # Recreate the CA from disk
-        ca = mkCA()
-        store = mkStore(ca)
-        assert( store.verify(ca.cert))
-        assert(!store.verify(h1, [ca.cert]), "first revoked cert passed")
-        assert(!store.verify(h2, [ca.cert]), "second revoked cert passed")
-    end
-
-    def test_ttl
-        cert = mksignedcert
-        assert_equal(5 * 365 * 24 * 60 * 60,  cert.not_after - cert.not_before)
-
-        Puppet[:ca_ttl] = 7 * 24 * 60 * 60
-        cert = mksignedcert
-        assert_equal(7 * 24 * 60 * 60,  cert.not_after - cert.not_before)
-
-        Puppet[:ca_ttl] = "2y"
-        cert = mksignedcert
-        assert_equal(2 * 365 * 24 * 60 * 60,  cert.not_after - cert.not_before)
-
-        Puppet[:ca_ttl] = "2y"
-        cert = mksignedcert
-        assert_equal(2 * 365 * 24 * 60 * 60,  cert.not_after - cert.not_before)
-
-        Puppet[:ca_ttl] = "1h"
-        cert = mksignedcert
-        assert_equal(60 * 60,  cert.not_after - cert.not_before)
-
-        Puppet[:ca_ttl] = "900s"
-        cert = mksignedcert
-        assert_equal(900,  cert.not_after - cert.not_before)
-
-        # This needs to be last, to make sure that setting ca_days
-        # overrides setting ca_ttl
-        Puppet[:ca_days] = 3
-        cert = mksignedcert
-        assert_equal(3 * 24 * 60 * 60,  cert.not_after - cert.not_before)
-
-    end
-end
-
diff --git a/test/certmgr/inventory.rb b/test/certmgr/inventory.rb
deleted file mode 100755
index 9c1e19f..0000000
--- a/test/certmgr/inventory.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest/certificates'
-require 'puppet/sslcertificates/inventory.rb'
-require 'mocha'
-
-class TestCertInventory < Test::Unit::TestCase
-    include PuppetTest::Certificates
-
-    Inventory = Puppet::SSLCertificates::Inventory
-
-    def setup
-      super
-      Puppet::Util::SUIDManager.stubs(:asuser).yields
-    end
-
-    def test_format
-        cert = mksignedcert
-
-        format = nil
-        assert_nothing_raised do
-            format = Inventory.format(cert)
-        end
-
-        assert(format =~ /^0x0001 \S+ \S+ #{cert.subject}/,
-              "Did not create correct format")
-      end
-
-    def test_init
-        # First create a couple of certificates
-        ca = mkCA
-
-        cert1 = mksignedcert(ca, "host1.madstop.com")
-        cert2 = mksignedcert(ca, "host2.madstop.com")
-
-        init = nil
-        assert_nothing_raised do
-            init = Inventory.init
-        end
-
-        [cert1, cert2].each do |cert|
-            assert(init.include?(cert.subject.to_s),
-                "Did not catch %s" % cert.subject.to_s)
-        end
-    end
-
-    def test_add
-        ca = mkCA
-        cert = mksignedcert(ca, "host.domain.com")
-
-        assert_nothing_raised do
-            file = mock()
-            file.expects(:puts).with do |written|
-                written.include? cert.subject.to_s
-            end
-            Puppet::Util::Settings.any_instance.stubs(:write)
-            Puppet::Util::Settings.any_instance.expects(:write).
-              with(:cert_inventory, 'a').yields(file)
-
-            Puppet::SSLCertificates::Inventory.add(cert)
-        end
-    end
-end
-
diff --git a/test/certmgr/support.rb b/test/certmgr/support.rb
deleted file mode 100755
index 10d4319..0000000
--- a/test/certmgr/support.rb
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/sslcertificates/support'
-require 'mocha'
-
-class TestCertSupport < Test::Unit::TestCase
-    include PuppetTest
-    MissingCertificate = Puppet::SSLCertificates::Support::MissingCertificate
-
-    class CertUser
-        include Puppet::SSLCertificates::Support
-    end
-
-    def setup
-        super
-        Puppet::Util::SUIDManager.stubs(:asuser).yields
-        @user = CertUser.new
-        @ca = Puppet::SSLCertificates::CA.new
-        @client = Puppet::Network::Client.ca.new(:CA => @ca)
-    end
-
-    # Yay, metaprogramming
-    def test_keytype
-        [:key, :csr, :cert, :ca_cert].each do |name|
-            assert(Puppet::SSLCertificates::Support.method_defined?(name),
-                "No retrieval method for %s" % name)
-            maker = "mk_%s" % name
-            assert(Puppet::SSLCertificates::Support.method_defined?(maker),
-                "No maker method for %s" % name)
-        end
-    end
-
-    def test_keys
-        keys = [:hostprivkey, :hostpubkey].each { |n| Puppet[n] = tempfile }
-
-        key = nil
-        assert_nothing_raised do
-            key = @user.key
-        end
-
-        assert_logged(:info, /Creating a new SSL/, "Did not log about new key")
-        keys.each do |file|
-            assert(FileTest.exists?(Puppet[file]),
-                "Did not create %s key file" % file)
-        end
-
-        # Make sure it's a valid key
-        assert_nothing_raised("Created key is invalid") do
-            OpenSSL::PKey::RSA.new(File.read(Puppet[:hostprivkey]))
-        end
-
-        # now make sure we can read it in
-        other = CertUser.new
-        assert_nothing_raised("Could not read key in") do
-            other.key
-        end
-
-        assert_equal(@user.key.to_s, other.key.to_s, "Keys are not equal")
-    end
-
-    def test_csr
-        csr = nil
-        assert_nothing_raised("Could not create csr") do
-            csr = @user.csr
-        end
-
-        assert(FileTest.exists?(Puppet[:hostcsr]), "did not create csr file")
-        assert_instance_of(OpenSSL::X509::Request, csr)
-    end
-
-    def test_cacert
-        @user = CertUser.new
-
-        assert_raise(MissingCertificate, "Did not fail when missing cacert") do
-            @user.ca_cert
-        end
-    end
-
-    # Fixing #1382.  This test will always fail on Darwin, because its
-    # FS is case-insensitive.
-    unless Facter.value(:operatingsystem) == "Darwin"
-        def test_uppercase_files_are_renamed_and_read
-            # Write a key out to disk in a file containing upper-case.
-            key = OpenSSL::PKey::RSA.new(32)
-            should_path = Puppet[:hostprivkey]
-            puts "%s: %s" % [should_path, FileTest.exist?(should_path).inspect]
-
-            dir, file = File.split(should_path)
-            newfile = file.sub(/^([a-z.]+)\./) { $1.upcase + "."}
-            puts "%s: %s" % [should_path, FileTest.exist?(should_path).inspect]
-            upper_path = File.join(dir, newfile)
-            puts "%s: %s" % [should_path, FileTest.exist?(should_path).inspect]
-            puts "%s: %s" % [upper_path, FileTest.exist?(upper_path).inspect]
-            File.open(upper_path, "w") { |f| f.print key.to_s }
-            puts "%s: %s" % [should_path, FileTest.exist?(should_path).inspect]
-            puts "%s: %s" % [upper_path, FileTest.exist?(upper_path).inspect]
-
-            user = CertUser.new
-
-            assert_equal(key.to_s, user.read_key.to_s, "Did not read key in from disk")
-            assert(! FileTest.exist?(upper_path), "Upper case file was not removed")
-            assert(FileTest.exist?(should_path), "File was not renamed to lower-case file")
-            assert_equal(key.to_s, user.read_key.to_s, "Did not read key in from disk")
-        end
-    end
-end
diff --git a/test/data/failers/badclassnoparam b/test/data/failers/badclassnoparam
deleted file mode 100644
index a0397aa..0000000
--- a/test/data/failers/badclassnoparam
+++ /dev/null
@@ -1,10 +0,0 @@
-class comp() {
-    file { "/etc/passwd":
-        mode => 644
-    }
-}
-
-# this argument is invalid, thus we should get a falure
-comp {
-    fakearg => "yay"
-}
diff --git a/test/data/failers/badclassparam b/test/data/failers/badclassparam
deleted file mode 100644
index 4c9ff61..0000000
--- a/test/data/failers/badclassparam
+++ /dev/null
@@ -1,10 +0,0 @@
-class comp(arg1) {
-    file { "/etc/passwd":
-        mode => 644
-    }
-}
-
-# i've specified an arg but it's an invalid one
-comp {
-    fakearg => "yay"
-}
diff --git a/test/data/failers/badcompnoparam b/test/data/failers/badcompnoparam
deleted file mode 100644
index fd25c94..0000000
--- a/test/data/failers/badcompnoparam
+++ /dev/null
@@ -1,9 +0,0 @@
-define comp() {
-    file { "/etc/passwd":
-        mode => 644
-    }
-}
-
-comp {
-    fakearg => "yay"
-}
diff --git a/test/data/failers/badcompparam b/test/data/failers/badcompparam
deleted file mode 100644
index 346e64b..0000000
--- a/test/data/failers/badcompparam
+++ /dev/null
@@ -1,9 +0,0 @@
-define comp($arg1) {
-    file { "/etc/passwd":
-        mode => 644
-    }
-}
-
-comp {
-    fakearg => "yay"
-}
diff --git a/test/data/failers/badtypeparam b/test/data/failers/badtypeparam
deleted file mode 100644
index 4634f20..0000000
--- a/test/data/failers/badtypeparam
+++ /dev/null
@@ -1,3 +0,0 @@
-file { "/etc/passwd":
-    fakeparam => 644
-}
diff --git a/test/data/failers/noobjectrvalue b/test/data/failers/noobjectrvalue
deleted file mode 100644
index ef60647..0000000
--- a/test/data/failers/noobjectrvalue
+++ /dev/null
@@ -1 +0,0 @@
-$variable = file { "/etc/passwd": owner => root }
diff --git a/test/data/providers/cron/crontab.allthree b/test/data/providers/cron/crontab.allthree
deleted file mode 100644
index dd2a404..0000000
--- a/test/data/providers/cron/crontab.allthree
+++ /dev/null
@@ -1,17 +0,0 @@
---- 
-- |
-  # comment 1
-  # Puppet Name: name2
-  env3=val
-  * * * * * command4
-  # comment 5
-
-- - :record_type: :comment
-    :line: "# comment 1"
-  - :command: command4
-    :environment: 
-    - env3=val
-    :name: name2
-    :record_type: :crontab
-  - :record_type: :comment
-    :line: "# comment 5"
diff --git a/test/data/providers/cron/crontab.envNcomment b/test/data/providers/cron/crontab.envNcomment
deleted file mode 100644
index 63effe0..0000000
--- a/test/data/providers/cron/crontab.envNcomment
+++ /dev/null
@@ -1,12 +0,0 @@
---- 
-- |
-  # comment 9
-  env10=val
-  * * * * * command11
-
-- - :record_type: :comment
-    :line: "# comment 9"
-  - :record_type: :environment
-    :line: env10=val
-  - :command: command11
-    :record_type: :crontab
diff --git a/test/data/providers/cron/crontab.envNname b/test/data/providers/cron/crontab.envNname
deleted file mode 100644
index cc05824..0000000
--- a/test/data/providers/cron/crontab.envNname
+++ /dev/null
@@ -1,11 +0,0 @@
---- 
-- |
-  env6=val
-  # Puppet Name: name7
-  * * * * * command8
-
-- - :record_type: :environment
-    :line: env6=val
-  - :command: command8
-    :record_type: :crontab
-    :name: name7
diff --git a/test/data/providers/cron/crontab.multirecords b/test/data/providers/cron/crontab.multirecords
deleted file mode 100644
index 63effe0..0000000
--- a/test/data/providers/cron/crontab.multirecords
+++ /dev/null
@@ -1,12 +0,0 @@
---- 
-- |
-  # comment 9
-  env10=val
-  * * * * * command11
-
-- - :record_type: :comment
-    :line: "# comment 9"
-  - :record_type: :environment
-    :line: env10=val
-  - :command: command11
-    :record_type: :crontab
diff --git a/test/data/providers/cron/crontab_collections.yaml b/test/data/providers/cron/crontab_collections.yaml
deleted file mode 100644
index 45c8eaf..0000000
--- a/test/data/providers/cron/crontab_collections.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
---- 
-:with_name: 
-- :name
-- :spaces_in_command_with_times
-:with_env: 
-- :environment
-- :spaces_in_command_with_times
-:simple: 
-- :spaces_in_command_with_times
-:with_multiple_envs: 
-- :environment
-- :lowercase_environment
-- :spaces_in_command_with_times
-:with_name_and_env: 
-- :name_with_spaces
-- :another_env
-- :spaces_in_command_with_times
-:with_name_and_multiple_envs: 
-- :long_name
-- :another_env
-- :fourth_env
-- :spaces_in_command_with_times
---- 
-:with_name: 
-- :name
-- :spaces_in_command_with_times
-:with_env: 
-- :environment
-- :spaces_in_command_with_times
-:simple: 
-- :spaces_in_command_with_times
-:with_multiple_envs: 
-- :environment
-- :lowercase_environment
-- :spaces_in_command_with_times
-:with_name_and_env: 
-- :name_with_spaces
-- :another_env
-- :spaces_in_command_with_times
-:with_name_and_multiple_envs: 
-- :long_name
-- :another_env
-- :fourth_env
-- :spaces_in_command_with_times
diff --git a/test/data/providers/cron/crontab_multiple_with_env.yaml b/test/data/providers/cron/crontab_multiple_with_env.yaml
deleted file mode 100644
index 8573bd4..0000000
--- a/test/data/providers/cron/crontab_multiple_with_env.yaml
+++ /dev/null
@@ -1,54 +0,0 @@
---- 
-- |
-  # comment 1
-  # Puppet Name: name2
-  env3=val
-  * * * * * command4
-  # Puppet Name: name with spaces
-  env3=val
-  env4=other
-  * * * * * command5
-  # comment 5
-
-- - :record_type: :comment
-    :line: "# comment 1"
-  - :command: command4
-    :environment: 
-    - env3=val
-    :name: name2
-    :record_type: :crontab
-  - :command: command5
-    :environment: 
-    - env3=val
-    - env4=other
-    :name: name with spaces
-    :record_type: :crontab
-  - :record_type: :comment
-    :line: "# comment 5"
---- 
-- |
-  # comment 1
-  # Puppet Name: name2
-  env3=val
-  * * * * * command4
-  # Puppet Name: name with spaces
-  env3=val
-  env4=other
-  * * * * * command5
-  # comment 5
-
-- - :record_type: :comment
-    :line: "# comment 1"
-  - :command: command4
-    :environment: 
-    - env3=val
-    :name: name2
-    :record_type: :crontab
-  - :command: command5
-    :environment: 
-    - env3=val
-    - env4=other
-    :name: name with spaces
-    :record_type: :crontab
-  - :record_type: :comment
-    :line: "# comment 5"
diff --git a/test/data/providers/cron/crontab_sample_records.yaml b/test/data/providers/cron/crontab_sample_records.yaml
deleted file mode 100644
index cafe9de..0000000
--- a/test/data/providers/cron/crontab_sample_records.yaml
+++ /dev/null
@@ -1,272 +0,0 @@
---- 
-:longcommment: 
-  :text: "# This is a comment"
-  :record: 
-    :line: "# This is a comment"
-    :record_type: :comment
-:special: 
-  :text: "@hourly /bin/date"
-  :record: 
-    :special: hourly
-    :command: /bin/date
-    :record_type: :freebsd_special
-:long_name: 
-  :text: "# Puppet Name: long_name"
-  :record: 
-    :line: "# Puppet Name: long_name"
-    :name: long_name
-    :record_type: :comment
-:multiple_minutes: 
-  :text: 5,15 * * * * /bin/date
-  :record: 
-    :minute: 
-    - "5"
-    - "15"
-    :command: /bin/date
-    :record_type: :crontab
-:environment: 
-  :text: ONE=TWO
-  :record: 
-    :line: ONE=TWO
-    :record_type: :environment
-:empty: 
-  :text: ""
-  :record: 
-    :line: ""
-    :record_type: :blank
-:simple: 
-  :text: "* * * * * /bin/date"
-  :record: 
-    :command: /bin/date
-    :record_type: :crontab
-:whitespace: 
-  :text: "   "
-  :record: 
-    :line: "   "
-    :record_type: :blank
-:minute_and_hour: 
-  :text: 5 15 * * * /bin/date
-  :record: 
-    :minute: 
-    - "5"
-    :hour: 
-    - "15"
-    :command: /bin/date
-    :record_type: :crontab
-:lowercase_environment: 
-  :text: a=b
-  :record: 
-    :line: a=b
-    :record_type: :environment
-:special_with_spaces: 
-  :text: "@daily /bin/echo testing"
-  :record: 
-    :special: daily
-    :command: /bin/echo testing
-    :record_type: :freebsd_special
-:tabs: 
-  :text: !binary |
-    CQ==
-
-  :record: 
-    :line: !binary |
-      CQ==
-
-    :record_type: :blank
-:multiple_minute_and_hour: 
-  :text: 5,10 15,20 * * * /bin/date
-  :record: 
-    :minute: 
-    - "5"
-    - "10"
-    :hour: 
-    - "15"
-    - "20"
-    :command: /bin/date
-    :record_type: :crontab
-:name: 
-  :text: "# Puppet Name: testing"
-  :record: 
-    :line: "# Puppet Name: testing"
-    :name: testing
-    :record_type: :comment
-:another_env: 
-  :text: Testing=True
-  :record: 
-    :line: Testing=True
-    :record_type: :environment
-:shortcomment: 
-  :text: "#"
-  :record: 
-    :line: "#"
-    :record_type: :comment
-:spaces_in_command: 
-  :text: "* * * * * /bin/echo testing"
-  :record: 
-    :command: /bin/echo testing
-    :record_type: :crontab
-:fourth_env: 
-  :text: True=False
-  :record: 
-    :line: True=False
-    :record_type: :environment
-:simple_with_minute: 
-  :text: 5 * * * * /bin/date
-  :record: 
-    :minute: 
-    - "5"
-    :command: /bin/date
-    :record_type: :crontab
-:spaces_in_command_with_times: 
-  :text: 5,10 15,20 * * * /bin/echo testing
-  :record: 
-    :minute: 
-    - "5"
-    - "10"
-    :hour: 
-    - "15"
-    - "20"
-    :command: /bin/echo testing
-    :record_type: :crontab
-:name_with_spaces: 
-  :text: "# Puppet Name: another name"
-  :record: 
-    :line: "# Puppet Name: another name"
-    :name: another name
-    :record_type: :comment
---- 
-:longcommment: 
-  :text: "# This is a comment"
-  :record: 
-    :line: "# This is a comment"
-    :record_type: :comment
-:special: 
-  :text: "@hourly /bin/date"
-  :record: 
-    :special: hourly
-    :command: /bin/date
-    :record_type: :freebsd_special
-:long_name: 
-  :text: "# Puppet Name: long_name"
-  :record: 
-    :line: "# Puppet Name: long_name"
-    :name: long_name
-    :record_type: :comment
-:multiple_minutes: 
-  :text: 5,15 * * * * /bin/date
-  :record: 
-    :minute: 
-    - "5"
-    - "15"
-    :command: /bin/date
-    :record_type: :crontab
-:environment: 
-  :text: ONE=TWO
-  :record: 
-    :line: ONE=TWO
-    :record_type: :environment
-:empty: 
-  :text: ""
-  :record: 
-    :line: ""
-    :record_type: :blank
-:simple: 
-  :text: "* * * * * /bin/date"
-  :record: 
-    :command: /bin/date
-    :record_type: :crontab
-:whitespace: 
-  :text: "   "
-  :record: 
-    :line: "   "
-    :record_type: :blank
-:minute_and_hour: 
-  :text: 5 15 * * * /bin/date
-  :record: 
-    :minute: 
-    - "5"
-    :hour: 
-    - "15"
-    :command: /bin/date
-    :record_type: :crontab
-:lowercase_environment: 
-  :text: a=b
-  :record: 
-    :line: a=b
-    :record_type: :environment
-:special_with_spaces: 
-  :text: "@daily /bin/echo testing"
-  :record: 
-    :special: daily
-    :command: /bin/echo testing
-    :record_type: :freebsd_special
-:tabs: 
-  :text: !binary |
-    CQ==
-
-  :record: 
-    :line: !binary |
-      CQ==
-
-    :record_type: :blank
-:multiple_minute_and_hour: 
-  :text: 5,10 15,20 * * * /bin/date
-  :record: 
-    :minute: 
-    - "5"
-    - "10"
-    :hour: 
-    - "15"
-    - "20"
-    :command: /bin/date
-    :record_type: :crontab
-:name: 
-  :text: "# Puppet Name: testing"
-  :record: 
-    :line: "# Puppet Name: testing"
-    :name: testing
-    :record_type: :comment
-:another_env: 
-  :text: Testing=True
-  :record: 
-    :line: Testing=True
-    :record_type: :environment
-:shortcomment: 
-  :text: "#"
-  :record: 
-    :line: "#"
-    :record_type: :comment
-:spaces_in_command: 
-  :text: "* * * * * /bin/echo testing"
-  :record: 
-    :command: /bin/echo testing
-    :record_type: :crontab
-:fourth_env: 
-  :text: True=False
-  :record: 
-    :line: True=False
-    :record_type: :environment
-:simple_with_minute: 
-  :text: 5 * * * * /bin/date
-  :record: 
-    :minute: 
-    - "5"
-    :command: /bin/date
-    :record_type: :crontab
-:spaces_in_command_with_times: 
-  :text: 5,10 15,20 * * * /bin/echo testing
-  :record: 
-    :minute: 
-    - "5"
-    - "10"
-    :hour: 
-    - "15"
-    - "20"
-    :command: /bin/echo testing
-    :record_type: :crontab
-:name_with_spaces: 
-  :text: "# Puppet Name: another name"
-  :record: 
-    :line: "# Puppet Name: another name"
-    :name: another name
-    :record_type: :comment
diff --git a/test/data/providers/cron/examples/freebsd b/test/data/providers/cron/examples/freebsd
deleted file mode 100644
index fba1e31..0000000
--- a/test/data/providers/cron/examples/freebsd
+++ /dev/null
@@ -1,2 +0,0 @@
- at daily /path/to/some/job
- at reboot /path/to/some/job
diff --git a/test/data/providers/cron/examples/one b/test/data/providers/cron/examples/one
deleted file mode 100644
index 9cddf97..0000000
--- a/test/data/providers/cron/examples/one
+++ /dev/null
@@ -1,14 +0,0 @@
-TZ=Europe/Paris
-#
-# Some comments
-# and more comments
-#
-SHELL=/bin/sh
-0 0 * * * /usr/local/bin/savelogs --period --postmovehook="/usr/local/apache/bin/apachectl graceful" --apacheconf=/www/conf/httpd.conf
-58 23 * * * /usr/bin/diff /var/log/slow-queries.log /backup/var/log/slow-queries.log
-59 23 * * * /usr/bin/diff /var/db/mysql/*.err /backup/var/db/mysql/*.err
-0 7 * * Mon cd /usr/local/install; find . -maxdepth 1 -type f -mtime -30 -exec ls -l {} \; | mail -E -s 'Recent vinstall kits' vinstall at domain.com
-#* * * * * /bin/ls|mail -s 'test !!' gg at domain.com
-47 4 * * 1 /usr/local/bin/wget 'ftp://ftp.perl.org/pub/CPAN/MIRRORED.BY' -O /home/installman/www/install.domain.com/inst/MIRRORED.BY
-25 */2 * * * /usr/local/bin/freshclam --quiet
-#* * * * * /root/top.sh
diff --git a/test/data/providers/cron/examples/openbsd b/test/data/providers/cron/examples/openbsd
deleted file mode 100644
index d77597d..0000000
--- a/test/data/providers/cron/examples/openbsd
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-SHELL=/bin/sh
-PATH=/bin:/sbin:/usr/bin:/usr/sbin
-HOME=/var/log
-#
-#minute hour    mday    month   wday    command
-#
-# sendmail clientmqueue runner
-*/30    *       *       *       *       /usr/sbin/sendmail -L sm-msp-queue -Ac -q
-#
-# rotate log files every hour, if necessary
-0       *       *       *       *       /usr/bin/newsyslog
-# send log file notifications, if necessary
-#1-59   *       *       *       *       /usr/bin/newsyslog -m
-#
-# do daily/weekly/monthly maintenance
-30      1       *       *       *       /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out | mail -s "`/bin/hostname` daily output" root
-30      3       *       *       6       /bin/sh /etc/weekly 2>&1 | tee /var/log/weekly.out | mail -s "`/bin/hostname` weekly output" root
-30      5       1       *       *       /bin/sh /etc/monthly 2>&1 | tee /var/log/monthly.out | mail -s "`/bin/hostname` monthly output" root
-#0      *       *       *       *       /usr/libexec/spamd-setup
diff --git a/test/data/providers/package/testpackages.yaml b/test/data/providers/package/testpackages.yaml
deleted file mode 100644
index 8d8935e..0000000
--- a/test/data/providers/package/testpackages.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
---- 
-- :operatingsystem: Solaris
-  :files: 
-  - /usr/local/pkg/rdesktop-1.3.1-sol10-intel-local
-  - /usr/local/pkg/rdesktop-1.4.1-sol10-x86-local
-  :hardwareisa: i386
-  :name: SMCrdesk
-  :operatingsystemrelease: "5.10"
-  :provider: :sun
-- :operatingsystem: Solaris
-  :name: cabextract
-  :provider: :blastwave
-- :operatingsystem: Solaris
-  :files: 
-  - /usr/local/pkg/arc-5.21e-sol8-sparc-local
-  :hardwareisa: sparc
-  :name: SMCarc
-  :operatingsystemrelease: "5.8"
-  :provider: :sun
-- :operatingsystem: Solaris
-  :files: 
-  - /usr/local/pkg/arc-5.21e-sol8-intel-local
-  :hardwareisa: i386
-  :name: SMCarc
-  :operatingsystemrelease: "5.8"
-  :provider: :sun
-- :operatingsystem: OpenBSD
-  :files: 
-  - ftp://ftp.usa.openbsd.org/pub/OpenBSD/3.8/packages/i386/aalib-1.2-no_x11.tgz
-  :name: aalib
-  :provider: :openbsd
-- :operatingsystem: Debian
-  :name: zec
-  :provider: :apt
-- :operatingsystem: Debian
-  :name: zec
-  :provider: :aptitude
-- :operatingsystem: Fedora
-  :name: wv
-  :provider: :yum
-- :operatingsystem:
-  - Fedora
-  - CentOS
-  - RedHat
-  :files: 
-  - /home/luke/rpm/RPMS/noarch/enhost-1.0.1-1.noarch.rpm
-  - /home/luke/rpm/RPMS/noarch/enhost-1.0.2-1.noarch.rpm
-  :name: enhost
-  :provider: :rpm
-- :operatingsystem: Darwin
-  :name: aop
-  :provider: :darwinports
-- :operatingsystem: FreeBSD
-  :name: yahtzee
-  :provider: :ports
-- :provider: :apple
-  :files:
-  - /Users/luke/Documents/Puppet/pkgtesting.pkg
-  :name: pkgtesting
-  :cleanup: rm -rf /Library/Receipts/pkgtesting.pkg/ /tmp/file
-- :provider: :gem
-  :name: wxrubylayouts
-  :versions:
-  - 0.0.2
-  - 0.0.3
diff --git a/test/data/providers/ssh_authorized_key/parsed/authorized_keys b/test/data/providers/ssh_authorized_key/parsed/authorized_keys
deleted file mode 100644
index 033f98b..0000000
--- a/test/data/providers/ssh_authorized_key/parsed/authorized_keys
+++ /dev/null
@@ -1,5 +0,0 @@
-ssh-dss AAAAB3NzaC1kc3MAAACBAJkupmdsJSDXfUy5EU5NTRBDr9Woo3w0YnB8KmnJW9ghU8C7SkWPB1fIHVe+esFfd3qWBseb83PoFX63geZJAg6bjV4/Rdn1zEoa9EO2QyUdYUen4+rpsh3vVKZ6HFNsn3+W5+kPYgE1F/N4INqkbjY3sqCkP/W1BL9+sbVVbuJFAAAAFQCfjWDk5XhvGUkPjNWWVqltBYzHtwAAAIEAg/XL7ky7x9Ad5banzPFAfmM+DGFe0A/JEbLDjKmr5KBM5x4RFohtEvZ8ECuVGUOqBWdgAjyYwsG4oRVjLnKrf/rgmbNRzSFgEWkcAye3BVwk7Dt6hh4knEl+mNfOLq+FH0011UhecOiqTcESMzQDtgQ1vJh2VchElBLjl3x/ZugAAACAAh5jGQC338t5ObP8trSlOefkx0sXmmEzUbo3Mt8mGUuGJPx8m+X0L8Xd+l5rQxytqE3SmV/RD+6REqBuPqHM8RQuqAzfjdOeg/Ajdggx1CRMTVhltZsgQoxO30cz9Qo0SdPoL+Jp1fLuaLZq7m/RmsWYvoLT3jebBlpvvQE8YlI= francois.deppierraz at nimag.net
-ssh-dss AAAAB3NzaC1kc3MAAACBAJkupmdsJSDXfUy5EU5NTRBDr9Woo3w0YnB8KmnJW9ghU8C7SkWPB1fIHVe+esFfd3qWBseb83PoFX63geZJAg6bjV4/Rdn1zEoa9EO2QyUdYUen4+rpsh3vVKZ6HFNsn3+W5+kPYgE1F/N4INqkbjY3sqCkP/W1BL9+sbVVbuJFAAAAFQCfjWDk5XhvGUkPjNWWVqltBYzHtwAAAIEAg/XL7ky7x9Ad5banzPFAfmM+DGFe0A/JEbLDjKmr5KBM5x4RFohtEvZ8ECuVGUOqBWdgAjyYwsG4oRVjLnKrf/rgmbNRzSFgEWkcAye3BVwk7Dt6hh4knEl+mNfOLq+FH0011UhecOiqTcESMzQDtgQ1vJh2VchElBLjl3x/ZugAAACAAh5jGQC338t5ObP8trSlOefkx0sXmmEzUbo3Mt8mGUuGJPx8m+X0L8Xd+l5rQxytqE3SmV/RD+6REqBuPqHM8RQuqAzfjdOeg/Ajdggx1CRMTVhltZsgQoxO30cz9Qo0SdPoL+Jp1fLuaLZq7m/RmsWYvoLT3jebBlpvvQE8YlI= Francois Deppierraz <francois at ctrlaltdel.ch>
-from="192.168.1.1",command="/bin/false",no-pty,no-port-forwarding ssh-dss AAAAB3NzaC1kc3MAAACBAJkupmdsJSDXfUy5EU5NTRBDr9Woo3w0YnB8KmnJW9ghU8C7SkWPB1fIHVe+esFfd3qWBseb83PoFX63geZJAg6bjV4/Rdn1zEoa9EO2QyUdYUen4+rpsh3vVKZ6HFNsn3+W5+kPYgE1F/N4INqkbjY3sqCkP/W1BL9+sbVVbuJFAAAAFQCfjWDk5XhvGUkPjNWWVqltBYzHtwAAAIEAg/XL7ky7x9Ad5banzPFAfmM+DGFe0A/JEbLDjKmr5KBM5x4RFohtEvZ8ECuVGUOqBWdgAjyYwsG4oRVjLnKrf/rgmbNRzSFgEWkcAye3BVwk7Dt6hh4knEl+mNfOLq+FH0011UhecOiqTcESMzQDtgQ1vJh2VchElBLjl3x/ZugAAACAAh5jGQC338t5ObP8trSlOefkx0sXmmEzUbo3Mt8mGUuGJPx8m+X0L8Xd+l5rQxytqE3SmV/RD+6REqBuPqHM8RQuqAzfjdOeg/Ajdggx1CRMTVhltZsgQoxO30cz9Qo0SdPoL+Jp1fLuaLZq7m/RmsWYvoLT3jebBlpvvQE8YlI= Francois Deppierraz
-ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA2Vi+TdC3iOGYcIo5vGTvC9P9rjHl9RxCuZmSfn+YDFQ35RXf0waijtjp9I7GYh6R4hBjA5z0u/Pzi95LET5NfRM0Gdc0DJyvBI7K+ALBxIT383Iz6Yz4iKxe1TEJgHGM2he4+7BHkjc3kdIZqIpZjucCk4VsXSxujO4MKKvtaKK2l+kahlLQHHw/vZkDpIgL52iGVsjW9l8RLJaKHZ4mDHJN/Q/Rzn2W4EvcdHUzwhvGMwZlm8clDwITBrSsawYtnivJrQSYcmTRqJuS8wprNDrLIhTGjrwFg5WpruUuMt6fLuCqwe6TeEL+nh3DQ4g554c5aRp3oU6LGBKTvNZGWQ== francois at korn
-ssh-dss AAAAB3NzaC1kc3MAAACBAMPpCYnjywOemd8LqbbmC+bePNR3/H1rXsiFwjSLhYE3bbOpvclvOzN1DruFc34m0FopVnMkP+aubjdIYF8pijl+5hg9ggB7Kno2dl0Dd1rGN/swvmhA8OpLAQv7Qt7UnXKVho3as08zYZsrHxYFu0wlnkdbsv4cy4aXyQKd4MPVAAAAFQDSyQFWg8Qt3wU05buhZ10psoR7tQAAAIEAmAhguXwUnI3P2FF5NAW/mpJUmUERdL4pyZARUyAgpf7ezwrh9TJqrvGTQNBF97Xqaivyncm5JWQdMIsTBxEFaXZGkmBta02KnWcn447qvIh7iv8XpNL6M9flCkBEZOJ4t9El0ytTSHHaiCz8A20Et+E8evWyi1kXkFDt8ML2dGgAAACBAK0X4ympbdEjgV/ZyOc+BU22u7vOnfSOUJmyar4Ax1MIDNnoyNWKnGvxRutydQcQOKQHZEU0fE8MhPFn6nLF6CoVfEl/oz0EYz3hjV4WPFpHrF5DY/rhvNj8iuneKJ5P0dy/rG6m5qey25PnHyGFVoIRlkHJvBCJT40dHs40YEjI francois at korn
diff --git a/test/data/providers/ssh_authorized_key/parsed/authorized_keys1 b/test/data/providers/ssh_authorized_key/parsed/authorized_keys1
deleted file mode 100644
index 7aa0647..0000000
--- a/test/data/providers/ssh_authorized_key/parsed/authorized_keys1
+++ /dev/null
@@ -1,3 +0,0 @@
-1024 35 167576894966720957580065952882142495543043407324667405194097438434880798807651864847570827148390962746149410384891026772700627764845955493549511618975091512997118590589399665757714186775228807376424903966072778732134483862302766419277581465932186641863495699668069439475320990051723279127881281145164415361627 francois at korn
-2048 35 27332429396020032283276339339051507284036000350350092862949624519871013308460312287866673933080560923221560798334008554200019645416448528663000202951887890525621015333936122655294782671001073795264378070156670395703161543893088138531854776737799752600933431638059304355933305878665812555436198516842364330938321746086651639330436648850787370397302524667456837036413634152938122227368132322078811602953517461933179827432019932348409533535942749570969101453655028606209719023224268890314608444789012688070463327764203306501923404494017305972543000091038543051645924928018568725584728655193415567703220002707737714942757 francois at korn
-from="192.168.1.1",command="/bin/false",no-pty,no-port-forwarding 2048 35 27332429396020032283276339339051507284036000350350092862949624519871013308460312287866673933080560923221560798334008554200019645416448528663000202951887890525621015333936122655294782671001073795264378070156670395703161543893088138531854776737799752600933431638059304355933305878665812555436198516842364330938321746086651639330436648850787370397302524667456837036413634152938122227368132322078811602953517461933179827432019932348409533535942749570969101453655028606209719023224268890314608444789012688070463327764203306501923404494017305972543000091038543051645924928018568725584728655193415567703220002707737714942757 francois at korn
diff --git a/test/data/reports/1.yaml b/test/data/reports/1.yaml
deleted file mode 100644
index 3805e90..0000000
--- a/test/data/reports/1.yaml
+++ /dev/null
@@ -1,108 +0,0 @@
---- !ruby/object:Puppet::Transaction::Report 
-host: culain.madstop.com
-logs: 
-- !ruby/object:Puppet::Log 
-  level: :notice
-  message: executed successfully
-  objectsource: true
-  source: //culain.madstop.com/puppetserver/exec=/bin/echo testing/returns
-  tags: 
-  - :puppetserver
-  - :puppetserver
-  - :basenode
-  - :"culain.madstop.com"
-  - :puppet
-  - :exec
-  - :returns
-  time: 2006-09-21 13:06:59.867782 -05:00
-- !ruby/object:Puppet::Log 
-  level: :notice
-  message: ensure changed 'stopped' to 'running'
-  objectsource: true
-  source: //culain.madstop.com/mailserver/service=spamassassin/ensure
-  tags: 
-  - :mailserver
-  - :mailserver
-  - :basenode
-  - :"culain.madstop.com"
-  - :puppet
-  - :service
-  - :ensure
-  time: 2006-09-21 13:07:01.336511 -05:00
-- !ruby/object:Puppet::Log 
-  level: :notice
-  message: ensure changed 'stopped' to 'running'
-  objectsource: true
-  source: //culain.madstop.com/mailserver/service=courier-imap-ssl/ensure
-  tags: 
-  - :mailserver
-  - :mailserver
-  - :basenode
-  - :"culain.madstop.com"
-  - :puppet
-  - :service
-  - :ensure
-  time: 2006-09-21 13:07:01.573506 -05:00
-- !ruby/object:Puppet::Log 
-  level: :notice
-  message: ensure changed 'stopped' to 'running'
-  objectsource: true
-  source: //culain.madstop.com/mailserver/service=courier-authdaemon/ensure
-  tags: 
-  - :mailserver
-  - :mailserver
-  - :basenode
-  - :"culain.madstop.com"
-  - :puppet
-  - :service
-  - :ensure
-  time: 2006-09-21 13:07:01.680440 -05:00
-metrics: 
-  time: !ruby/object:Puppet::Metric 
-    label: Time
-    name: time
-    values: 
-    - - :config_retrieval
-      - Config retrieval
-      - 2.26467204093933
-    - - :total
-      - Total
-      - 21.7894113063812
-  changes: !ruby/object:Puppet::Metric 
-    label: Changes
-    name: changes
-    values: 
-    - - :total
-      - Total
-      - 4
-  objects: !ruby/object:Puppet::Metric 
-    label: Objects
-    name: objects
-    values: 
-    - - :scheduled
-      - Scheduled
-      - 78
-    - - :applied
-      - Applied
-      - 4
-    - - :restarted
-      - Restarted
-      - 0
-    - - :skipped
-      - Skipped
-      - 0
-    - - :failed_restarts
-      - Failed restarts
-      - 0
-    - - :out_of_sync
-      - Out of sync
-      - 4
-    - - :failed
-      - Failed
-      - 0
-    - - :total
-      - Total
-      - 79
-records: {}
-
-time: 2006-09-21 13:07:06.825337 -05:00
diff --git a/test/data/reports/2.yaml b/test/data/reports/2.yaml
deleted file mode 100644
index 3805e90..0000000
--- a/test/data/reports/2.yaml
+++ /dev/null
@@ -1,108 +0,0 @@
---- !ruby/object:Puppet::Transaction::Report 
-host: culain.madstop.com
-logs: 
-- !ruby/object:Puppet::Log 
-  level: :notice
-  message: executed successfully
-  objectsource: true
-  source: //culain.madstop.com/puppetserver/exec=/bin/echo testing/returns
-  tags: 
-  - :puppetserver
-  - :puppetserver
-  - :basenode
-  - :"culain.madstop.com"
-  - :puppet
-  - :exec
-  - :returns
-  time: 2006-09-21 13:06:59.867782 -05:00
-- !ruby/object:Puppet::Log 
-  level: :notice
-  message: ensure changed 'stopped' to 'running'
-  objectsource: true
-  source: //culain.madstop.com/mailserver/service=spamassassin/ensure
-  tags: 
-  - :mailserver
-  - :mailserver
-  - :basenode
-  - :"culain.madstop.com"
-  - :puppet
-  - :service
-  - :ensure
-  time: 2006-09-21 13:07:01.336511 -05:00
-- !ruby/object:Puppet::Log 
-  level: :notice
-  message: ensure changed 'stopped' to 'running'
-  objectsource: true
-  source: //culain.madstop.com/mailserver/service=courier-imap-ssl/ensure
-  tags: 
-  - :mailserver
-  - :mailserver
-  - :basenode
-  - :"culain.madstop.com"
-  - :puppet
-  - :service
-  - :ensure
-  time: 2006-09-21 13:07:01.573506 -05:00
-- !ruby/object:Puppet::Log 
-  level: :notice
-  message: ensure changed 'stopped' to 'running'
-  objectsource: true
-  source: //culain.madstop.com/mailserver/service=courier-authdaemon/ensure
-  tags: 
-  - :mailserver
-  - :mailserver
-  - :basenode
-  - :"culain.madstop.com"
-  - :puppet
-  - :service
-  - :ensure
-  time: 2006-09-21 13:07:01.680440 -05:00
-metrics: 
-  time: !ruby/object:Puppet::Metric 
-    label: Time
-    name: time
-    values: 
-    - - :config_retrieval
-      - Config retrieval
-      - 2.26467204093933
-    - - :total
-      - Total
-      - 21.7894113063812
-  changes: !ruby/object:Puppet::Metric 
-    label: Changes
-    name: changes
-    values: 
-    - - :total
-      - Total
-      - 4
-  objects: !ruby/object:Puppet::Metric 
-    label: Objects
-    name: objects
-    values: 
-    - - :scheduled
-      - Scheduled
-      - 78
-    - - :applied
-      - Applied
-      - 4
-    - - :restarted
-      - Restarted
-      - 0
-    - - :skipped
-      - Skipped
-      - 0
-    - - :failed_restarts
-      - Failed restarts
-      - 0
-    - - :out_of_sync
-      - Out of sync
-      - 4
-    - - :failed
-      - Failed
-      - 0
-    - - :total
-      - Total
-      - 79
-records: {}
-
-time: 2006-09-21 13:07:06.825337 -05:00
diff --git a/test/data/reports/tagmail_failers.conf b/test/data/reports/tagmail_failers.conf
deleted file mode 100644
index d116b5f..0000000
--- a/test/data/reports/tagmail_failers.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-tag:
-: abuse at domain.com
-invalid!tag: abuse at domain.com
diff --git a/test/data/reports/tagmail_passers.conf b/test/data/reports/tagmail_passers.conf
deleted file mode 100644
index 6cadf03..0000000
--- a/test/data/reports/tagmail_passers.conf
+++ /dev/null
@@ -1,30 +0,0 @@
-# A comment
-# or maybe two
-# plus some blank lines
-    # with some blanks plus a comment
-
-# a simple tag report
-one: abuse at domain.com
-
-# with weird spacing
- one : abuse at domain.com 
-
-# with multiple tags
-one, two: abuse at domain.com
-
-# again with the weird syntax
- one , two : abuse at domain.com
-
-# Some negations
-one, !two: abuse at domain.com
-
-# some oddly-formatted tags
-one, two-three, !four-five, !six: abuse at domain.com
-
-# multiple addresses
-one, two: abuse at domain.com, testing at domain.com
-
-# and with weird spacing
-one, two: abuse at domain.com , testing at domain.com    
-
-# and a trailing comment
diff --git a/test/data/snippets/aliastest.pp b/test/data/snippets/aliastest.pp
deleted file mode 100644
index f2b6159..0000000
--- a/test/data/snippets/aliastest.pp
+++ /dev/null
@@ -1,16 +0,0 @@
-file { "a file":
-    path => "/tmp/aliastest",
-    ensure => file
-}
-
-file { "another":
-    path => "/tmp/aliastest2",
-    ensure => file,
-    require => File["a file"]
-}
-
-file { "a third":
-    path => "/tmp/aliastest3",
-    ensure => file,
-    require => File["/tmp/aliastest"]
-}
diff --git a/test/data/snippets/append.pp b/test/data/snippets/append.pp
deleted file mode 100644
index 28edeb1..0000000
--- a/test/data/snippets/append.pp
+++ /dev/null
@@ -1,11 +0,0 @@
-$var=['/tmp/file1','/tmp/file2']
-
-class arraytest {
-	$var += ['/tmp/file3', '/tmp/file4']
-	file {
-		$var:
-			content => "test"
-	}
-}
-
-include arraytest
diff --git a/test/data/snippets/argumentdefaults b/test/data/snippets/argumentdefaults
deleted file mode 100644
index eac9dd7..0000000
--- a/test/data/snippets/argumentdefaults
+++ /dev/null
@@ -1,14 +0,0 @@
-# $Id$
-
-define testargs($file, $mode = 755) {
-    file { $file: ensure => file, mode => $mode }
-}
-
-testargs { "testingname":
-    file => "/tmp/argumenttest1"
-}
-
-testargs { "testingother":
-    file => "/tmp/argumenttest2",
-    mode => 644
-}
diff --git a/test/data/snippets/arithmetic_expression.pp b/test/data/snippets/arithmetic_expression.pp
deleted file mode 100644
index aae98a4..0000000
--- a/test/data/snippets/arithmetic_expression.pp
+++ /dev/null
@@ -1,8 +0,0 @@
-
-$one = 1.30
-$two = 2.034e-2
-
-$result = ((( $two + 2) / $one) + 4 * 5.45) - (6 << 7) + (0x800 + -9)
-
-
-notice("result is $result == 1295.87692307692")
\ No newline at end of file
diff --git a/test/data/snippets/arraytrailingcomma.pp b/test/data/snippets/arraytrailingcomma.pp
deleted file mode 100644
index a410f95..0000000
--- a/test/data/snippets/arraytrailingcomma.pp
+++ /dev/null
@@ -1,3 +0,0 @@
-file {
-    ["/tmp/arraytrailingcomma1","/tmp/arraytrailingcomma2", ]: content => "tmp"
-}
diff --git a/test/data/snippets/casestatement.pp b/test/data/snippets/casestatement.pp
deleted file mode 100644
index 4fcf2e4..0000000
--- a/test/data/snippets/casestatement.pp
+++ /dev/null
@@ -1,58 +0,0 @@
-# $Id$
-
-$var = "value"
-
-case $var {
-  "nope": {
-     file { "/tmp/fakefile": mode => 644, ensure => file }
-  }
-  "value": {
-     file { "/tmp/existsfile": mode => 755, ensure => file }
-  }
-}
-
-$ovar = "yayness"
-
-case $ovar {
-    "fooness": {
-         file { "/tmp/nostillexistsfile": mode => 644, ensure => file }
-    }
-    "booness", "yayness": {
-        case $var {
-            "nep": { 
-                 file { "/tmp/noexistsfile": mode => 644, ensure => file }
-            }
-            "value": { 
-                 file { "/tmp/existsfile2": mode => 755, ensure => file }
-            }
-        }
-    }
-}
-
-case $ovar {
-    "fooness": {
-         file { "/tmp/nostillexistsfile": mode => 644, ensure => file }
-    }
-    default: {
-        file { "/tmp/existsfile3": mode => 755, ensure => file }
-    }
-}
-
-$bool = true
-
-case $bool {
-    true: {
-        file { "/tmp/existsfile4": mode => 755, ensure => file }
-    }
-}
-
-$yay = yay
-$a = yay
-$b = boo
-
-case $yay {
-    $a: { file { "/tmp/existsfile5": mode => 755, ensure => file } }
-    $b: { file { "/tmp/existsfile5": mode => 644, ensure => file } }
-    default: { file { "/tmp/existsfile5": mode => 711, ensure => file } }
-
-}
diff --git a/test/data/snippets/classheirarchy.pp b/test/data/snippets/classheirarchy.pp
deleted file mode 100644
index 36619d8..0000000
--- a/test/data/snippets/classheirarchy.pp
+++ /dev/null
@@ -1,15 +0,0 @@
-# $Id$
-
-class base {
-    file { "/tmp/classheir1": ensure => file, mode => 755 }
-}
-
-class sub1 inherits base {
-    file { "/tmp/classheir2": ensure => file, mode => 755 }
-}
-
-class sub2 inherits base {
-    file { "/tmp/classheir3": ensure => file, mode => 755 }
-}
-
-include sub1, sub2
diff --git a/test/data/snippets/classincludes.pp b/test/data/snippets/classincludes.pp
deleted file mode 100644
index 9278005..0000000
--- a/test/data/snippets/classincludes.pp
+++ /dev/null
@@ -1,17 +0,0 @@
-# $Id$
-
-class base {
-    file { "/tmp/classincludes1": ensure => file, mode => 755 }
-}
-
-class sub1 inherits base {
-    file { "/tmp/classincludes2": ensure => file, mode => 755 }
-}
-
-class sub2 inherits base {
-    file { "/tmp/classincludes3": ensure => file, mode => 755 }
-}
-
-$sub = "sub2" 
-
-include sub1, $sub
diff --git a/test/data/snippets/classpathtest b/test/data/snippets/classpathtest
deleted file mode 100644
index 5803333..0000000
--- a/test/data/snippets/classpathtest
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-define mytype {
-    file { "/tmp/classtest": ensure => file, mode => 755 }
-}
-
-class testing {
-    mytype { "componentname": }
-}
-
-include testing
diff --git a/test/data/snippets/collection.pp b/test/data/snippets/collection.pp
deleted file mode 100644
index bc29510..0000000
--- a/test/data/snippets/collection.pp
+++ /dev/null
@@ -1,10 +0,0 @@
-class one {
-    @file { "/tmp/colltest1": content => "one" }
-    @file { "/tmp/colltest2": content => "two" }
-}
-
-class two {
-    File <| content == "one" |>
-}
-
-include one, two
diff --git a/test/data/snippets/collection_within_virtual_definitions.pp b/test/data/snippets/collection_within_virtual_definitions.pp
deleted file mode 100644
index 3c21468..0000000
--- a/test/data/snippets/collection_within_virtual_definitions.pp
+++ /dev/null
@@ -1,20 +0,0 @@
-define test($name) {
-    file {"/tmp/collection_within_virtual_definitions1_$name.txt":
-        content => "File name $name\n"
-    }
-    Test2 <||>
-}
-
-define test2() {
-    file {"/tmp/collection_within_virtual_definitions2_$name.txt":
-        content => "This is a test\n"
-    }
-}
-
-node default {
-    @test {"foo":
-        name => "foo"
-    }
-    @test2 {"foo2": }
-    Test <||>
-}
diff --git a/test/data/snippets/componentmetaparams.pp b/test/data/snippets/componentmetaparams.pp
deleted file mode 100644
index 7d9f0c2..0000000
--- a/test/data/snippets/componentmetaparams.pp
+++ /dev/null
@@ -1,11 +0,0 @@
-file { "/tmp/component1":
-    ensure => file
-}
-
-define thing {
-    file { $name: ensure => file }
-}
-
-thing { "/tmp/component2":
-    require => File["/tmp/component1"]
-}
diff --git a/test/data/snippets/componentrequire.pp b/test/data/snippets/componentrequire.pp
deleted file mode 100644
index a61d205..0000000
--- a/test/data/snippets/componentrequire.pp
+++ /dev/null
@@ -1,8 +0,0 @@
-define testfile($mode) {
-    file { $name: mode => $mode, ensure => present }
-}
-
-testfile { "/tmp/testing_component_requires2": mode => 755 }
-
-file { "/tmp/testing_component_requires1": mode => 755, ensure => present,
-    require => Testfile["/tmp/testing_component_requires2"] }
diff --git a/test/data/snippets/deepclassheirarchy.pp b/test/data/snippets/deepclassheirarchy.pp
deleted file mode 100644
index 249e633..0000000
--- a/test/data/snippets/deepclassheirarchy.pp
+++ /dev/null
@@ -1,23 +0,0 @@
-# $Id$
-
-class base {
-    file { "/tmp/deepclassheir1": ensure => file, mode => 755 }
-}
-
-class sub1 inherits base {
-    file { "/tmp/deepclassheir2": ensure => file, mode => 755 }
-}
-
-class sub2 inherits sub1 {
-    file { "/tmp/deepclassheir3": ensure => file, mode => 755 }
-}
-
-class sub3 inherits sub2 {
-    file { "/tmp/deepclassheir4": ensure => file, mode => 755 }
-}
-
-class sub4 inherits sub3 {
-    file { "/tmp/deepclassheir5": ensure => file, mode => 755 }
-}
-
-include sub4
diff --git a/test/data/snippets/defineoverrides.pp b/test/data/snippets/defineoverrides.pp
deleted file mode 100644
index c68b139..0000000
--- a/test/data/snippets/defineoverrides.pp
+++ /dev/null
@@ -1,17 +0,0 @@
-# $Id$
-
-$file = "/tmp/defineoverrides1"
-
-define myfile($mode) {
-    file { $name: ensure => file, mode => $mode }
-}
-
-class base {
-    myfile { $file: mode => 644 }
-}
-
-class sub inherits base {
-    Myfile[$file] { mode => 755, } # test the end-comma
-}
-
-include sub
diff --git a/test/data/snippets/emptyclass.pp b/test/data/snippets/emptyclass.pp
deleted file mode 100644
index 48047e7..0000000
--- a/test/data/snippets/emptyclass.pp
+++ /dev/null
@@ -1,9 +0,0 @@
-# $Id$
-
-define component {
-}
-
-class testing {
-}
-
-include testing
diff --git a/test/data/snippets/emptyexec.pp b/test/data/snippets/emptyexec.pp
deleted file mode 100644
index 847a30d..0000000
--- a/test/data/snippets/emptyexec.pp
+++ /dev/null
@@ -1,3 +0,0 @@
-exec { "touch /tmp/emptyexectest":
-    path => "/usr/bin:/bin"
-}
diff --git a/test/data/snippets/emptyifelse.pp b/test/data/snippets/emptyifelse.pp
deleted file mode 100644
index 598b486..0000000
--- a/test/data/snippets/emptyifelse.pp
+++ /dev/null
@@ -1,9 +0,0 @@
-
-if false {
-} else {
-  # nothing here
-}
-
-if true {
-  # still nothing
-}
diff --git a/test/data/snippets/falsevalues.pp b/test/data/snippets/falsevalues.pp
deleted file mode 100644
index 2143b79..0000000
--- a/test/data/snippets/falsevalues.pp
+++ /dev/null
@@ -1,3 +0,0 @@
-$value = false
-
-file { "/tmp/falsevalues$value": ensure => file }
diff --git a/test/data/snippets/filecreate b/test/data/snippets/filecreate
deleted file mode 100644
index d7972c2..0000000
--- a/test/data/snippets/filecreate
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-file {
-    "/tmp/createatest": ensure => file, mode => 755;
-    "/tmp/createbtest": ensure => file, mode => 755
-}
-
-file {
-    "/tmp/createctest": ensure => file;
-    "/tmp/createdtest": ensure => file;
-}
diff --git a/test/data/snippets/fqdefinition.pp b/test/data/snippets/fqdefinition.pp
deleted file mode 100644
index ddb0675..0000000
--- a/test/data/snippets/fqdefinition.pp
+++ /dev/null
@@ -1,5 +0,0 @@
-define one::two($ensure) {
-    file { "/tmp/fqdefinition": ensure => $ensure }
-}
-
-one::two { "/tmp/fqdefinition": ensure => file }
diff --git a/test/data/snippets/fqparents.pp b/test/data/snippets/fqparents.pp
deleted file mode 100644
index 40fb933..0000000
--- a/test/data/snippets/fqparents.pp
+++ /dev/null
@@ -1,11 +0,0 @@
-class base {
-    class one {
-        file { "/tmp/fqparent1": ensure => file }
-    }   
-}   
-
-class two::three inherits base::one {
-    file { "/tmp/fqparent2": ensure => file }
-}
-
-include two::three
diff --git a/test/data/snippets/funccomma.pp b/test/data/snippets/funccomma.pp
deleted file mode 100644
index 32e34f9..0000000
--- a/test/data/snippets/funccomma.pp
+++ /dev/null
@@ -1,5 +0,0 @@
- at file {
-    ["/tmp/funccomma1","/tmp/funccomma2"]: content => "1"
-}
-
-realize( File["/tmp/funccomma1"], File["/tmp/funccomma2"] , )
diff --git a/test/data/snippets/ifexpression.rb b/test/data/snippets/ifexpression.rb
deleted file mode 100644
index eea3b85..0000000
--- a/test/data/snippets/ifexpression.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-$one = 1
-$two = 2
-
-if ($one < $two) and (($two < 3) or ($two == 2)) {
-    notice("True!")
-}
diff --git a/test/data/snippets/implicititeration b/test/data/snippets/implicititeration
deleted file mode 100644
index 6f34cb2..0000000
--- a/test/data/snippets/implicititeration
+++ /dev/null
@@ -1,15 +0,0 @@
-# $Id$
-
-$files = ["/tmp/iterationatest", "/tmp/iterationbtest"]
-
-file { $files: ensure => file, mode => 755 }
-
-file { ["/tmp/iterationctest", "/tmp/iterationdtest"]:
-    ensure => file,
-    mode => 755
-}
-
-file {
-    ["/tmp/iterationetest", "/tmp/iterationftest"]: ensure => file, mode => 755;
-    ["/tmp/iterationgtest", "/tmp/iterationhtest"]: ensure => file, mode => 755;
-}
diff --git a/test/data/snippets/multipleinstances b/test/data/snippets/multipleinstances
deleted file mode 100644
index 2f9b3c2..0000000
--- a/test/data/snippets/multipleinstances
+++ /dev/null
@@ -1,7 +0,0 @@
-# $Id$
-
-file {
-    "/tmp/multipleinstancesa": ensure => file, mode => 755;
-    "/tmp/multipleinstancesb": ensure => file, mode => 755;
-    "/tmp/multipleinstancesc": ensure => file, mode => 755;
-}
diff --git a/test/data/snippets/multisubs.pp b/test/data/snippets/multisubs.pp
deleted file mode 100644
index bcec69e..0000000
--- a/test/data/snippets/multisubs.pp
+++ /dev/null
@@ -1,13 +0,0 @@
-class base {
-    file { "/tmp/multisubtest": content => "base", mode => 644 }
-}
-
-class sub1 inherits base {
-    File["/tmp/multisubtest"] { mode => 755 }
-}
-
-class sub2 inherits base {
-    File["/tmp/multisubtest"] { content => sub2 }
-}
-
-include sub1, sub2
diff --git a/test/data/snippets/namevartest b/test/data/snippets/namevartest
deleted file mode 100644
index dbee1c3..0000000
--- a/test/data/snippets/namevartest
+++ /dev/null
@@ -1,9 +0,0 @@
-define filetest($mode, $ensure = file) {
-    file { $name:
-        mode => $mode,
-        ensure => $ensure
-    }
-}
-
-filetest { "/tmp/testfiletest": mode => 644}
-filetest { "/tmp/testdirtest": mode => 755, ensure => directory}
diff --git a/test/data/snippets/scopetest b/test/data/snippets/scopetest
deleted file mode 100644
index 3314917..0000000
--- a/test/data/snippets/scopetest
+++ /dev/null
@@ -1,13 +0,0 @@
-
-$mode = 640
-
-define thing {
-    file { "/tmp/$name": ensure => file, mode => $mode }
-}
-
-class testing {
-    $mode = 755
-    thing {scopetest: }
-}
-
-include testing
diff --git a/test/data/snippets/selectorvalues.pp b/test/data/snippets/selectorvalues.pp
deleted file mode 100644
index cd8cf77..0000000
--- a/test/data/snippets/selectorvalues.pp
+++ /dev/null
@@ -1,42 +0,0 @@
-$value1 = ""
-$value2 = true
-$value3 = false
-$value4 = yay
-
-$test = "yay"
-
-$mode1 = $value1 ? {
-    "" => 755,
-    default => 644
-}
-
-$mode2 = $value2 ? {
-    true => 755,
-    default => 644
-}
-
-$mode3 = $value3 ? {
-    false => 755,
-    default => 644
-}
-
-$mode4 = $value4 ? {
-    $test => 755,
-    default => 644
-}
-
-$mode5 = yay ? {
-    $test => 755,
-    default => 644
-}
-
-$mode6 = $mode5 ? {
-    755 => 755
-}
-
-file { "/tmp/selectorvalues1": ensure => file, mode => $mode1 }
-file { "/tmp/selectorvalues2": ensure => file, mode => $mode2 }
-file { "/tmp/selectorvalues3": ensure => file, mode => $mode3 }
-file { "/tmp/selectorvalues4": ensure => file, mode => $mode4 }
-file { "/tmp/selectorvalues5": ensure => file, mode => $mode5 }
-file { "/tmp/selectorvalues6": ensure => file, mode => $mode6 }
diff --git a/test/data/snippets/simpledefaults b/test/data/snippets/simpledefaults
deleted file mode 100644
index 63d199a..0000000
--- a/test/data/snippets/simpledefaults
+++ /dev/null
@@ -1,5 +0,0 @@
-# $Id$
-
-File { mode => 755 }
-
-file { "/tmp/defaulttest": ensure => file }
diff --git a/test/data/snippets/simpleselector b/test/data/snippets/simpleselector
deleted file mode 100644
index 8b9bc72..0000000
--- a/test/data/snippets/simpleselector
+++ /dev/null
@@ -1,38 +0,0 @@
-# $Id$
-
-$var = "value"
-
-file { "/tmp/snippetselectatest":
-    ensure => file,
-    mode => $var ? {
-        nottrue => 641,
-        value => 755
-    }
-}
-
-file { "/tmp/snippetselectbtest":
-    ensure => file,
-    mode => $var ? {
-        nottrue => 644,
-        default => 755
-    }
-}
-
-$othervar = "complex value"
-
-file { "/tmp/snippetselectctest":
-    ensure => file,
-    mode => $othervar ? {
-        "complex value" => 755,
-        default => 644
-    }
-}
-$anothervar = Yayness
-
-file { "/tmp/snippetselectdtest":
-    ensure => file,
-    mode => $anothervar ? {
-        Yayness => 755,
-        default => 644
-    }
-}
diff --git a/test/data/snippets/singleary.pp b/test/data/snippets/singleary.pp
deleted file mode 100644
index 9ce56dd..0000000
--- a/test/data/snippets/singleary.pp
+++ /dev/null
@@ -1,19 +0,0 @@
-# $Id$
-
-file { "/tmp/singleary1":
-    ensure => file
-}
-
-file { "/tmp/singleary2":
-    ensure => file
-}
-
-file { "/tmp/singleary3":
-    ensure => file,
-    require => [File["/tmp/singleary1"], File["/tmp/singleary2"]]
-}
-
-file { "/tmp/singleary4":
-    ensure => file,
-    require => [File["/tmp/singleary1"]]
-}
diff --git a/test/data/snippets/singlequote.pp b/test/data/snippets/singlequote.pp
deleted file mode 100644
index dc876a2..0000000
--- a/test/data/snippets/singlequote.pp
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-file { "/tmp/singlequote1":
-    ensure => file,
-    content => 'a $quote'
-}
-
-file { "/tmp/singlequote2":
-    ensure => file,
-    content => 'some "\yayness\"'
-}
diff --git a/test/data/snippets/singleselector.pp b/test/data/snippets/singleselector.pp
deleted file mode 100644
index 520a140..0000000
--- a/test/data/snippets/singleselector.pp
+++ /dev/null
@@ -1,22 +0,0 @@
-$value1 = ""
-$value2 = true
-$value3 = false
-$value4 = yay
-
-$test = "yay"
-
-$mode1 = $value1 ? {
-    "" => 755
-}
-
-$mode2 = $value2 ? {
-    true => 755
-}
-
-$mode3 = $value3 ? {
-    default => 755
-}
-
-file { "/tmp/singleselector1": ensure => file, mode => $mode1 }
-file { "/tmp/singleselector2": ensure => file, mode => $mode2 }
-file { "/tmp/singleselector3": ensure => file, mode => $mode3 }
diff --git a/test/data/snippets/subclass_name_duplication.pp b/test/data/snippets/subclass_name_duplication.pp
deleted file mode 100755
index 10f1d75..0000000
--- a/test/data/snippets/subclass_name_duplication.pp
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env puppet
-
-class one::fake {
-    file { "/tmp/subclass_name_duplication1": ensure => present }
-}
-
-class two::fake {
-    file { "/tmp/subclass_name_duplication2": ensure => present }
-}
-
-include one::fake, two::fake
diff --git a/test/data/snippets/tag.pp b/test/data/snippets/tag.pp
deleted file mode 100644
index e6e770d..0000000
--- a/test/data/snippets/tag.pp
+++ /dev/null
@@ -1,9 +0,0 @@
-# $Id$
-
-$variable = value
-
-tag yayness, rahness
-
-tag booness, $variable
-
-file { "/tmp/settestingness": ensure => file }
diff --git a/test/data/snippets/tagged.pp b/test/data/snippets/tagged.pp
deleted file mode 100644
index 7bf90a6..0000000
--- a/test/data/snippets/tagged.pp
+++ /dev/null
@@ -1,35 +0,0 @@
-# $Id$
-
-tag testing
-tag(funtest)
-
-class tagdefine {
-    $path = tagged(tagdefine) ? {
-        true => "true", false => "false"
-    }
-
-    file { "/tmp/taggeddefine$path": ensure => file }
-}
-
-include tagdefine
-
-$yayness = tagged(yayness) ? {
-    true => "true", false => "false"
-}
-
-$funtest = tagged(testing) ? {
-    true => "true", false => "false"
-}
-
-$both = tagged(testing, yayness) ? {
-    true => "true", false => "false"
-}
-
-$bothtrue = tagged(testing, testing) ? {
-    true => "true", false => "false"
-}
-
-file { "/tmp/taggedyayness$yayness": ensure => file }
-file { "/tmp/taggedtesting$funtest": ensure => file }
-file { "/tmp/taggedboth$both": ensure => file }
-file { "/tmp/taggedbothtrue$bothtrue": ensure => file }
diff --git a/test/data/snippets/virtualresources.pp b/test/data/snippets/virtualresources.pp
deleted file mode 100644
index a29406b..0000000
--- a/test/data/snippets/virtualresources.pp
+++ /dev/null
@@ -1,14 +0,0 @@
-class one {
-    @file { "/tmp/virtualtest1": content => "one" }
-    @file { "/tmp/virtualtest2": content => "two" }
-    @file { "/tmp/virtualtest3": content => "three" }
-    @file { "/tmp/virtualtest4": content => "four" }
-}
-
-class two {
-    File <| content == "one" |>
-    realize File["/tmp/virtualtest2"]
-    realize(File["/tmp/virtualtest3"], File["/tmp/virtualtest4"])
-}
-
-include one, two
diff --git a/test/data/types/hosts/1 b/test/data/types/hosts/1
deleted file mode 100644
index f0b27f3..0000000
--- a/test/data/types/hosts/1
+++ /dev/null
@@ -1,3 +0,0 @@
-# Do not remove the following line, or various programs
-# that require network functionality will fail.
-127.0.0.1               hostname.domain.net hostname localhost.localdomain localhost 
diff --git a/test/data/types/hosts/2 b/test/data/types/hosts/2
deleted file mode 100644
index a25c39c..0000000
--- a/test/data/types/hosts/2
+++ /dev/null
@@ -1,13 +0,0 @@
-127.0.0.1		localhost
-192.168.0.3		culain.madstop.com	culain
-192.168.0.100		yaytest
-
-# The following lines are desirable for IPv6 capable hosts
-# (added automatically by netbase upgrade)
-
-::1     ip6-localhost ip6-loopback
-fe00::0 ip6-localnet
-ff00::0 ip6-mcastprefix
-ff02::1 ip6-allnodes
-ff02::2 ip6-allrouters
-ff02::3 ip6-allhosts
diff --git a/test/data/types/hosts/solaris b/test/data/types/hosts/solaris
deleted file mode 100644
index be3b97f..0000000
--- a/test/data/types/hosts/solaris
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Internet host table
-#
-127.0.0.1	localhost
-192.168.0.50	sol10b
diff --git a/test/data/types/mailalias/file1 b/test/data/types/mailalias/file1
deleted file mode 100644
index a7cbd4e..0000000
--- a/test/data/types/mailalias/file1
+++ /dev/null
@@ -1,183 +0,0 @@
-# This is the aliases file - it says who gets mail for whom.
-# It was originally generated by `eximconfig', part of the exim package
-# distributed with Debian, but it may edited by the mail system administrator.
-# This file originally generated by eximconfig at Tue Jul 12345 12345:12345:12345 CDT 12345
-# See exim info section for details of the things that can be configured here.
-
-# Local aliases
-eight-phone: 12345 at domain.com
-eight-pager: eight-phone
-eight-sms: eight-phone
-cindy-phone: 12345 at domain.com
-cindy-pager: cindy-phone
-cindy-sms: cindy-phone
-
-ben-phone: 12345 at txt.att.net
-ben: eight
-ajax: eight
-
-teyo: teyo at brainfinger.org
-
-#----------------#
-# Family aliases #
-#----------------#
-
-smithes: eight,six,two,seven,isaiah,kristen,cindy,three
-smith: smithes
-#morris: morrisbpaddlin at hotmail.com
-#six: grendelwench at hotmail.com
-two: twosmith at thirddomain.com
-seven: sevensmith at thirddomain.com
-isaiah: ismith at thirddomain.com
-kristen: kristenwells at thirddomain.com
-one-phone: 12345 at otherdomain.com
-one-pager: one-phone
-seven-phone: 12345 at otherdomain.com
-seven-pager: seven-phone
-seven-sms: seven-phone
-ike-phone: 12345 at otherdomain.com
-ike-page: ike-phone
-ike-sms: ike-phone
-six-phone: 12345 at otherdomain.com
-six-page: six-phone
-six-sms: six-phone
-three: tferguson at mmc.edu
-three-phone: 12345 at otherdomain.com
-three-page: three-phone
-three-sms: three-phone
-four-phone: 12345 at otherdomain.com
-four-page: four-phone
-four-sms: four-phone
-two-phone: 12345 at otherdomain.com
-two-page: two-phone
-two-sms: two-phone
-five-phone: 12345 at otherdomain.com
-five-page: five-phone
-five-sms: five-phone
-
-#----------------#
-# work aliases #
-#----------------#
-consulting: eight
-svn: eight
-info: eight
-blog: eight
-paypal: eight
-trac: puppet-dev
-dev: eight
-sales: eight
-training: eight
-support: eight
-faq: eight
-puppet-docs: eight,nine at domain.com,ten at domain.com,eleven at other.com
-docs: puppet-docs
-jobs: eight
-
-# System stuff
-postmaster: eight
-root: eight
-
-daemon: root
-bin: root
-sys: root
-sync: root
-games: root
-man: root
-lp: root
-mail: root
-news: root
-uucp: root
-proxy: root
-postgres: root
-www-data: root
-backup: root
-operator: root
-list: root
-irc: root
-gnats: root
-nobody: root
-
-filemaker: eight
-
-hostmaster: root
-usenet: root
-webmaster: root
-www: root
-ftp: root
-abuse: root
-noc: root
-security: root
-
-mailer-daemon: postmaster
-
-tap: one at two.com,two at three.com,three at four.com,four at five.com,five at six.com
-
-mailman:              "|/var/lib/mailman/mail/mailman post mailman"
-mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
-mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
-mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
-mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
-mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
-mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
-mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
-mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
-mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"
-
-puppet-dev:              "|/var/lib/mailman/mail/mailman post puppet-dev"
-puppet-dev-admin:        "|/var/lib/mailman/mail/mailman admin puppet-dev"
-puppet-dev-bounces:      "|/var/lib/mailman/mail/mailman bounces puppet-dev"
-puppet-dev-confirm:      "|/var/lib/mailman/mail/mailman confirm puppet-dev"
-puppet-dev-join:         "|/var/lib/mailman/mail/mailman join puppet-dev"
-puppet-dev-leave:        "|/var/lib/mailman/mail/mailman leave puppet-dev"
-puppet-dev-owner:        "|/var/lib/mailman/mail/mailman owner puppet-dev"
-puppet-dev-request:      "|/var/lib/mailman/mail/mailman request puppet-dev"
-puppet-dev-subscribe:    "|/var/lib/mailman/mail/mailman subscribe puppet-dev"
-puppet-dev-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe puppet-dev"
-
-## puppet-commit mailing list
-puppet-commit:              "|/var/lib/mailman/mail/mailman post puppet-commit"
-puppet-commit-admin:        "|/var/lib/mailman/mail/mailman admin puppet-commit"
-puppet-commit-bounces:      "|/var/lib/mailman/mail/mailman bounces puppet-commit"
-puppet-commit-confirm:      "|/var/lib/mailman/mail/mailman confirm puppet-commit"
-puppet-commit-join:         "|/var/lib/mailman/mail/mailman join puppet-commit"
-puppet-commit-leave:        "|/var/lib/mailman/mail/mailman leave puppet-commit"
-puppet-commit-owner:        "|/var/lib/mailman/mail/mailman owner puppet-commit"
-puppet-commit-request:      "|/var/lib/mailman/mail/mailman request puppet-commit"
-puppet-commit-subscribe:    "|/var/lib/mailman/mail/mailman subscribe puppet-commit"
-puppet-commit-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe puppet-commit"
-
-## bnageek mailing list
-bnageek:              "|/var/lib/mailman/mail/mailman post bnageek"
-bnageek-admin:        "|/var/lib/mailman/mail/mailman admin bnageek"
-bnageek-bounces:      "|/var/lib/mailman/mail/mailman bounces bnageek"
-bnageek-confirm:      "|/var/lib/mailman/mail/mailman confirm bnageek"
-bnageek-join:         "|/var/lib/mailman/mail/mailman join bnageek"
-bnageek-leave:        "|/var/lib/mailman/mail/mailman leave bnageek"
-bnageek-owner:        "|/var/lib/mailman/mail/mailman owner bnageek"
-bnageek-request:      "|/var/lib/mailman/mail/mailman request bnageek"
-bnageek-subscribe:    "|/var/lib/mailman/mail/mailman subscribe bnageek"
-bnageek-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe bnageek"
-
-## puppet-users mailing list
-puppet-users:              "|/var/lib/mailman/mail/mailman post puppet-users"
-puppet-users-admin:        "|/var/lib/mailman/mail/mailman admin puppet-users"
-puppet-users-bounces:      "|/var/lib/mailman/mail/mailman bounces puppet-users"
-puppet-users-confirm:      "|/var/lib/mailman/mail/mailman confirm puppet-users"
-puppet-users-join:         "|/var/lib/mailman/mail/mailman join puppet-users"
-puppet-users-leave:        "|/var/lib/mailman/mail/mailman leave puppet-users"
-puppet-users-owner:        "|/var/lib/mailman/mail/mailman owner puppet-users"
-puppet-users-request:      "|/var/lib/mailman/mail/mailman request puppet-users"
-puppet-users-subscribe:    "|/var/lib/mailman/mail/mailman subscribe puppet-users"
-puppet-users-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe puppet-users"
-
-## puppet-bugs mailing list
-puppet-bugs:              "|/var/lib/mailman/mail/mailman post puppet-bugs"
-puppet-bugs-admin:        "|/var/lib/mailman/mail/mailman admin puppet-bugs"
-puppet-bugs-bounces:      "|/var/lib/mailman/mail/mailman bounces puppet-bugs"
-puppet-bugs-confirm:      "|/var/lib/mailman/mail/mailman confirm puppet-bugs"
-puppet-bugs-join:         "|/var/lib/mailman/mail/mailman join puppet-bugs"
-puppet-bugs-leave:        "|/var/lib/mailman/mail/mailman leave puppet-bugs"
-puppet-bugs-owner:        "|/var/lib/mailman/mail/mailman owner puppet-bugs"
-puppet-bugs-request:      "|/var/lib/mailman/mail/mailman request puppet-bugs"
-puppet-bugs-subscribe:    "|/var/lib/mailman/mail/mailman subscribe puppet-bugs"
-puppet-bugs-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe puppet-bugs"
diff --git a/test/data/types/mount/freebsd.fstab b/test/data/types/mount/freebsd.fstab
deleted file mode 100644
index c39416b..0000000
--- a/test/data/types/mount/freebsd.fstab
+++ /dev/null
@@ -1,7 +0,0 @@
-# Device		Mountpoint	FStype	Options		Dump	Pass#
-/dev/ad0s1b		none		swap	sw		0	0
-/dev/ad0s1a		/		ufs	rw		1	1
-/dev/ad0s1e		/tmp		ufs	rw		2	2
-/dev/ad0s1f		/usr		ufs	rw		2	2
-/dev/ad0s1d		/var		ufs	rw		2	2
-/dev/acd0		/cdrom		cd9660	ro,noauto	0	0
diff --git a/test/data/types/mount/linux.fstab b/test/data/types/mount/linux.fstab
deleted file mode 100644
index b1debff..0000000
--- a/test/data/types/mount/linux.fstab
+++ /dev/null
@@ -1,11 +0,0 @@
-# A sample fstab, typical for a Fedora system
-/dev/vg00/lv00          /                       ext3    defaults        1 1
-LABEL=/boot             /boot                   ext3    defaults        1 2
-devpts                  /dev/pts                devpts  gid=5,mode=620  0
-tmpfs                   /dev/shm                tmpfs   defaults        0
-LABEL=/home             /home                   ext3    defaults        1 2
-/home                   /homes                  auto    bind            0 2
-proc                    /proc                   proc    defaults        0 0
-/dev/vg00/lv01          /spare                  ext3    defaults        1 2
-sysfs                   /sys                    sysfs   defaults        0 0
-LABEL=SWAP-hda6         swap                    swap    defaults        0 0
diff --git a/test/data/types/mount/solaris.fstab b/test/data/types/mount/solaris.fstab
deleted file mode 100644
index c7de967..0000000
--- a/test/data/types/mount/solaris.fstab
+++ /dev/null
@@ -1,11 +0,0 @@
-#device		device		mount		FS	fsck	mount	mount
-#to mount	to fsck		point		type	pass	at boot	options
-#
-fd	-	/dev/fd	fd	-	no	-
-/proc	-	/proc	proc	-	no	-
-/dev/dsk/c0d0s0	/dev/rdsk/c0d0s0	/	ufs	1	no	-
-/dev/dsk/c0d0p0:boot	-	/boot	pcfs	-	no	-
-/devices	-	/devices	devfs	-	no	-
-ctfs	-	/system/contract	ctfs	-	no	-
-objfs	-	/system/object	objfs	-	no	-
-#swap	-	/tmp	tmpfs	-	yes	-
diff --git a/test/data/types/port/1 b/test/data/types/port/1
deleted file mode 100644
index 8fcc801..0000000
--- a/test/data/types/port/1
+++ /dev/null
@@ -1,533 +0,0 @@
-# Network services, Internet style
-#
-# Note that it is presently the policy of IANA to assign a single well-known
-# port number for both TCP and UDP; hence, officially ports have two entries
-# even if the protocol doesn't support UDP operations.
-#
-# Updated from http://www.iana.org/assignments/port-numbers and other
-# sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services .
-# New ports will be added on request if they have been officially assigned
-# by IANA and used in the real-world or are needed by a debian package.
-# If you need a huge list of used numbers please install the nmap package.
-
-tcpmux		1/tcp				# TCP port service multiplexer
-echo		7/tcp
-echo		7/udp
-discard		9/tcp		sink null
-discard		9/udp		sink null
-systat		11/tcp		users
-daytime		13/tcp
-daytime		13/udp
-netstat		15/tcp
-qotd		17/tcp		quote
-msp		18/tcp				# message send protocol
-msp		18/udp
-chargen		19/tcp		ttytst source
-chargen		19/udp		ttytst source
-ftp-data	20/tcp
-ftp		21/tcp
-fsp		21/udp		fspd
-ssh		22/tcp				# SSH Remote Login Protocol
-ssh		22/udp
-telnet		23/tcp
-smtp		25/tcp		mail
-time		37/tcp		timserver
-time		37/udp		timserver
-rlp		39/udp		resource	# resource location
-nameserver	42/tcp		name		# IEN 116
-whois		43/tcp		nicname
-tacacs		49/tcp				# Login Host Protocol (TACACS)
-tacacs		49/udp
-re-mail-ck	50/tcp				# Remote Mail Checking Protocol
-re-mail-ck	50/udp
-domain		53/tcp		nameserver	# name-domain server
-domain		53/udp		nameserver
-mtp		57/tcp				# deprecated
-tacacs-ds	65/tcp				# TACACS-Database Service
-tacacs-ds	65/udp
-bootps		67/tcp				# BOOTP server
-bootps		67/udp
-bootpc		68/tcp				# BOOTP client
-bootpc		68/udp
-tftp		69/udp
-gopher		70/tcp				# Internet Gopher
-gopher		70/udp
-rje		77/tcp		netrjs
-finger		79/tcp
-www		80/tcp		http		# WorldWideWeb HTTP
-www		80/udp				# HyperText Transfer Protocol
-link		87/tcp		ttylink
-kerberos	88/tcp		kerberos5 krb5 kerberos-sec	# Kerberos v5
-kerberos	88/udp		kerberos5 krb5 kerberos-sec	# Kerberos v5
-supdup		95/tcp
-hostnames	101/tcp		hostname	# usually from sri-nic
-iso-tsap	102/tcp		tsap		# part of ISODE
-acr-nema	104/tcp		dicom		# Digital Imag. & Comm. 300
-acr-nema	104/udp		dicom		# Digital Imag. & Comm. 300
-csnet-ns	105/tcp		cso-ns		# also used by CSO name server
-csnet-ns	105/udp		cso-ns
-rtelnet		107/tcp				# Remote Telnet
-rtelnet		107/udp
-pop2		109/tcp		postoffice pop-2 # POP version 2
-pop2		109/udp		pop-2
-pop3		110/tcp		pop-3		# POP version 3
-pop3		110/udp		pop-3
-sunrpc		111/tcp		portmapper	# RPC 4.0 portmapper
-sunrpc		111/udp		portmapper
-auth		113/tcp		authentication tap ident
-sftp		115/tcp
-uucp-path	117/tcp
-nntp		119/tcp		readnews untp	# USENET News Transfer Protocol
-ntp		123/tcp
-ntp		123/udp				# Network Time Protocol
-pwdgen		129/tcp				# PWDGEN service
-pwdgen		129/udp				# PWDGEN service
-loc-srv		135/tcp		epmap		# Location Service
-loc-srv		135/udp		epmap
-netbios-ns	137/tcp				# NETBIOS Name Service
-netbios-ns	137/udp
-netbios-dgm	138/tcp				# NETBIOS Datagram Service
-netbios-dgm	138/udp
-netbios-ssn	139/tcp				# NETBIOS session service
-netbios-ssn	139/udp
-imap2		143/tcp		imap		# Interim Mail Access P 2 and 4
-imap2		143/udp		imap
-snmp		161/tcp				# Simple Net Mgmt Protocol
-snmp		161/udp				# Simple Net Mgmt Protocol
-snmp-trap	162/tcp		snmptrap	# Traps for SNMP
-snmp-trap	162/udp		snmptrap	# Traps for SNMP
-cmip-man	163/tcp				# ISO mgmt over IP (CMOT)
-cmip-man	163/udp
-cmip-agent	164/tcp
-cmip-agent	164/udp
-mailq		174/tcp			# Mailer transport queue for Zmailer
-mailq		174/udp			# Mailer transport queue for Zmailer
-xdmcp		177/tcp				# X Display Mgr. Control Proto
-xdmcp		177/udp
-nextstep	178/tcp		NeXTStep NextStep	# NeXTStep window
-nextstep	178/udp		NeXTStep NextStep	#  server
-bgp		179/tcp				# Border Gateway Protocol
-bgp		179/udp
-prospero	191/tcp				# Cliff Neuman's Prospero
-prospero	191/udp
-irc		194/tcp				# Internet Relay Chat
-irc		194/udp
-smux		199/tcp				# SNMP Unix Multiplexer
-smux		199/udp
-at-rtmp		201/tcp				# AppleTalk routing
-at-rtmp		201/udp
-at-nbp		202/tcp				# AppleTalk name binding
-at-nbp		202/udp
-at-echo		204/tcp				# AppleTalk echo
-at-echo		204/udp
-at-zis		206/tcp				# AppleTalk zone information
-at-zis		206/udp
-qmtp		209/tcp				# Quick Mail Transfer Protocol
-qmtp		209/udp				# Quick Mail Transfer Protocol
-z3950		210/tcp		wais		# NISO Z39.50 database
-z3950		210/udp		wais
-ipx		213/tcp				# IPX
-ipx		213/udp
-imap3		220/tcp				# Interactive Mail Access
-imap3		220/udp				# Protocol v3
-pawserv		345/tcp				# Perf Analysis Workbench
-pawserv		345/udp
-zserv		346/tcp				# Zebra server
-zserv		346/udp
-fatserv		347/tcp				# Fatmen Server
-fatserv		347/udp
-rpc2portmap	369/tcp
-rpc2portmap	369/udp				# Coda portmapper
-codaauth2	370/tcp
-codaauth2	370/udp				# Coda authentication server
-clearcase	371/tcp		Clearcase
-clearcase	371/udp		Clearcase
-ulistserv	372/tcp				# UNIX Listserv
-ulistserv	372/udp
-ldap		389/tcp			# Lightweight Directory Access Protocol
-ldap		389/udp
-imsp		406/tcp			# Interactive Mail Support Protocol
-imsp		406/udp
-https		443/tcp				# http protocol over TLS/SSL
-https		443/udp
-snpp		444/tcp				# Simple Network Paging Protocol
-snpp		444/udp
-microsoft-ds	445/tcp				# Microsoft Naked CIFS
-microsoft-ds	445/udp
-saft		487/tcp			# Simple Asynchronous File Transfer
-saft		487/udp
-isakmp		500/tcp			# IPsec - Internet Security Association
-isakmp		500/udp			#  and Key Management Protocol
-rtsp		554/tcp			# Real Time Stream Control Protocol
-rtsp		554/udp			# Real Time Stream Control Protocol
-nqs		607/tcp				# Network Queuing system
-nqs		607/udp
-npmp-local	610/tcp		dqs313_qmaster		# npmp-local / DQS
-npmp-local	610/udp		dqs313_qmaster
-npmp-gui	611/tcp		dqs313_execd		# npmp-gui / DQS
-npmp-gui	611/udp		dqs313_execd
-hmmp-ind	612/tcp		dqs313_intercell	# HMMP Indication / DQS
-hmmp-ind	612/udp		dqs313_intercell
-ipp		631/tcp				# Internet Printing Protocol
-ipp		631/udp
-#
-# UNIX specific services
-#
-exec		512/tcp
-biff		512/udp		comsat
-login		513/tcp
-who		513/udp		whod
-shell		514/tcp		cmd		# no passwords used
-syslog		514/udp
-printer		515/tcp		spooler		# line printer spooler
-talk		517/udp
-ntalk		518/udp
-route		520/udp		router routed	# RIP
-timed		525/udp		timeserver
-tempo		526/tcp		newdate
-courier		530/tcp		rpc
-conference	531/tcp		chat
-netnews		532/tcp		readnews
-netwall		533/udp				# for emergency broadcasts
-gdomap		538/tcp				# GNUstep distributed objects
-gdomap		538/udp
-uucp		540/tcp		uucpd		# uucp daemon
-klogin		543/tcp				# Kerberized `rlogin' (v5)
-kshell		544/tcp		krcmd		# Kerberized `rsh' (v5)
-afpovertcp	548/tcp				# AFP over TCP
-afpovertcp	548/udp
-remotefs	556/tcp		rfs_server rfs	# Brunhoff remote filesystem
-nntps		563/tcp		snntp		# NNTP over SSL
-nntps		563/udp		snntp
-submission	587/tcp				# Submission [RFC2476]
-submission	587/udp
-ldaps		636/tcp				# LDAP over SSL
-ldaps		636/udp
-tinc		655/tcp				# tinc control port
-tinc		655/udp
-silc		706/tcp
-silc		706/udp
-kerberos-adm	749/tcp				# Kerberos `kadmin' (v5)
-#
-webster		765/tcp				# Network dictionary
-webster		765/udp
-rsync		873/tcp
-rsync		873/udp
-ftps-data	989/tcp				# FTP over SSL (data)
-ftps		990/tcp
-telnets		992/tcp				# Telnet over SSL
-telnets		992/udp
-imaps		993/tcp				# IMAP over SSL
-imaps		993/udp
-ircs		994/tcp				# IRC over SSL
-ircs		994/udp
-pop3s		995/tcp				# POP-3 over SSL
-pop3s		995/udp
-#
-# From ``Assigned Numbers'':
-#
-#> The Registered Ports are not controlled by the IANA and on most systems
-#> can be used by ordinary user processes or programs executed by ordinary
-#> users.
-#
-#> Ports are used in the TCP [45,106] to name the ends of logical
-#> connections which carry long term conversations.  For the purpose of
-#> providing services to unknown callers, a service contact port is
-#> defined.  This list specifies the port used by the server process as its
-#> contact port.  While the IANA can not control uses of these ports it
-#> does register or list uses of these ports as a convienence to the
-#> community.
-#
-socks		1080/tcp			# socks proxy server
-socks		1080/udp
-proofd		1093/tcp
-proofd		1093/udp
-rootd		1094/tcp
-rootd		1094/udp
-openvpn		1194/tcp
-openvpn		1194/udp
-rmiregistry	1099/tcp			# Java RMI Registry
-rmiregistry	1099/udp
-kazaa		1214/tcp
-kazaa		1214/udp
-nessus		1241/tcp			# Nessus vulnerability
-nessus		1241/udp			#  assessment scanner
-lotusnote	1352/tcp	lotusnotes	# Lotus Note
-lotusnote	1352/udp	lotusnotes
-ms-sql-s	1433/tcp			# Microsoft SQL Server
-ms-sql-s	1433/udp
-ms-sql-m	1434/tcp			# Microsoft SQL Monitor
-ms-sql-m	1434/udp
-ingreslock	1524/tcp
-ingreslock	1524/udp
-prospero-np	1525/tcp			# Prospero non-privileged
-prospero-np	1525/udp
-datametrics	1645/tcp	old-radius
-datametrics	1645/udp	old-radius
-sa-msg-port	1646/tcp	old-radacct
-sa-msg-port	1646/udp	old-radacct
-kermit		1649/tcp
-kermit		1649/udp
-l2f		1701/tcp	l2tp
-l2f		1701/udp	l2tp
-radius		1812/tcp
-radius		1812/udp
-radius-acct	1813/tcp	radacct		# Radius Accounting
-radius-acct	1813/udp	radacct
-unix-status	1957/tcp			# remstats unix-status server
-log-server	1958/tcp			# remstats log server
-remoteping	1959/tcp			# remstats remoteping server
-rtcm-sc104	2101/tcp			# RTCM SC-104 IANA 1/29/99
-rtcm-sc104	2101/udp
-cvspserver	2401/tcp			# CVS client/server operations
-cvspserver	2401/udp
-venus		2430/tcp			# codacon port
-venus		2430/udp			# Venus callback/wbc interface
-venus-se	2431/tcp			# tcp side effects
-venus-se	2431/udp			# udp sftp side effect
-codasrv		2432/tcp			# not used
-codasrv		2432/udp			# server port
-codasrv-se	2433/tcp			# tcp side effects
-codasrv-se	2433/udp			# udp sftp side effect
-mon		2583/tcp			# MON
-mon		2583/udp
-dict		2628/tcp			# Dictionary server
-dict		2628/udp
-gpsd		2947/tcp
-gpsd		2947/udp
-gds_db		3050/tcp			# InterBase server
-gds_db		3050/udp
-icpv2		3130/tcp	icp		# Internet Cache Protocol
-icpv2		3130/udp	icp
-mysql		3306/tcp
-mysql		3306/udp
-nut		3493/tcp			# Network UPS Tools
-nut		3493/udp
-distcc		3632/tcp			# distributed compiler
-distcc		3632/udp
-daap		3689/tcp			# Digital Audio Access Protocol
-daap		3689/udp
-svn		3690/tcp	subversion	# Subversion protocol
-svn		3690/udp	subversion
-iax		4569/tcp			# Inter-Asterisk eXchange
-iax		4569/udp
-radmin-port	4899/tcp			# RAdmin Port
-radmin-port	4899/udp
-rfe		5002/udp			# Radio Free Ethernet
-rfe		5002/tcp
-sip		5060/tcp			# Session Initiation Protocol
-sip		5060/udp
-sip-tls		5061/tcp
-sip-tls		5061/udp
-xmpp-client	5222/tcp	jabber-client	# Jabber Client Connection
-xmpp-client	5222/udp	jabber-client
-xmpp-server	5269/tcp	jabber-server	# Jabber Server Connection
-xmpp-server	5269/udp	jabber-server
-cfengine	5308/tcp
-cfengine	5308/udp
-postgresql	5432/tcp	postgres	# PostgreSQL Database
-postgresql	5432/udp	postgres
-x11		6000/tcp	x11-0		# X Window System
-x11		6000/udp	x11-0
-x11-1		6001/tcp
-x11-1		6001/udp
-x11-2		6002/tcp
-x11-2		6002/udp
-x11-3		6003/tcp
-x11-3		6003/udp
-x11-4		6004/tcp
-x11-4		6004/udp
-x11-5		6005/tcp
-x11-5		6005/udp
-x11-6		6006/tcp
-x11-6		6006/udp
-x11-7		6007/tcp
-x11-7		6007/udp
-gnutella-svc	6346/tcp			# gnutella
-gnutella-svc	6346/udp
-gnutella-rtr	6347/tcp			# gnutella 
-gnutella-rtr	6347/udp
-afs3-fileserver 7000/tcp	bbs		# file server itself
-afs3-fileserver 7000/udp	bbs
-afs3-callback	7001/tcp			# callbacks to cache managers
-afs3-callback	7001/udp
-afs3-prserver	7002/tcp			# users & groups database
-afs3-prserver	7002/udp
-afs3-vlserver	7003/tcp			# volume location database
-afs3-vlserver	7003/udp
-afs3-kaserver	7004/tcp			# AFS/Kerberos authentication
-afs3-kaserver	7004/udp
-afs3-volser	7005/tcp			# volume managment server
-afs3-volser	7005/udp
-afs3-errors	7006/tcp			# error interpretation service
-afs3-errors	7006/udp
-afs3-bos	7007/tcp			# basic overseer process
-afs3-bos	7007/udp
-afs3-update	7008/tcp			# server-to-server updater
-afs3-update	7008/udp
-afs3-rmtsys	7009/tcp			# remote cache manager service
-afs3-rmtsys	7009/udp
-font-service	7100/tcp	xfs		# X Font Service
-font-service	7100/udp	xfs
-bacula-dir	9101/tcp			# Bacula Director
-bacula-dir	9101/udp
-bacula-fd	9102/tcp			# Bacula File Daemon
-bacula-fd	9102/udp
-bacula-sd	9103/tcp			# Bacula Storage Daemon
-bacula-sd	9103/udp
-amanda		10080/tcp			# amanda backup services
-amanda		10080/udp
-hkp		11371/tcp			# OpenPGP HTTP Keyserver
-hkp		11371/udp			# OpenPGP HTTP Keyserver
-bprd            13720/tcp			# VERITAS NetBackup
-bprd            13720/udp
-bpdbm           13721/tcp			# VERITAS NetBackup
-bpdbm           13721/udp
-bpjava-msvc     13722/tcp			# BP Java MSVC Protocol
-bpjava-msvc     13722/udp
-vnetd           13724/tcp			# Veritas Network Utility
-vnetd           13724/udp
-bpcd            13782/tcp			# VERITAS NetBackup
-bpcd            13782/udp
-vopied          13783/tcp			# VERITAS NetBackup
-vopied          13783/udp
-wnn6		22273/tcp			# wnn6
-wnn6		22273/udp
-
-#
-# Datagram Delivery Protocol services
-#
-rtmp		1/ddp			# Routing Table Maintenance Protocol
-nbp		2/ddp			# Name Binding Protocol
-echo		4/ddp			# AppleTalk Echo Protocol
-zip		6/ddp			# Zone Information Protocol
-
-#=========================================================================
-# The remaining port numbers are not as allocated by IANA.
-#=========================================================================
-
-# Kerberos (Project Athena/MIT) services
-# Note that these are for Kerberos v4, and are unofficial.  Sites running
-# v4 should uncomment these and comment out the v5 entries above.
-#
-kerberos4	750/udp		kerberos-iv kdc	# Kerberos (server)
-kerberos4	750/tcp		kerberos-iv kdc
-kerberos_master	751/udp				# Kerberos authentication
-kerberos_master	751/tcp	
-passwd_server	752/udp				# Kerberos passwd server
-krb_prop	754/tcp		krb5_prop hprop	# Kerberos slave propagation
-krbupdate	760/tcp		kreg		# Kerberos registration
-kpasswd		761/tcp		kpwd		# Kerberos "passwd"
-swat		901/tcp				# swat
-kpop		1109/tcp			# Pop with Kerberos
-knetd		2053/tcp			# Kerberos de-multiplexor
-zephyr-srv	2102/udp			# Zephyr server
-zephyr-clt	2103/udp			# Zephyr serv-hm connection
-zephyr-hm	2104/udp			# Zephyr hostmanager
-eklogin		2105/tcp			# Kerberos encrypted rlogin
-# Hmmm. Are we using Kv4 or Kv5 now? Worrying.
-# The following is probably Kerberos v5  --- ajt at debian.org (11/02/2000)
-kx		2111/tcp			# X over Kerberos
-iprop		2121/tcp			# incremental propagation
-#
-# Unofficial but necessary (for NetBSD) services
-#
-supfilesrv	871/tcp				# SUP server
-supfiledbg	1127/tcp			# SUP debugging
-
-#
-# Services added for the Debian GNU/Linux distribution
-#
-linuxconf	98/tcp				# LinuxConf
-poppassd	106/tcp				# Eudora
-poppassd	106/udp
-ssmtp		465/tcp		smtps		# SMTP over SSL
-moira_db	775/tcp				# Moira database
-moira_update	777/tcp				# Moira update protocol
-moira_ureg	779/udp				# Moira user registration
-spamd		783/tcp				# spamassassin daemon
-omirr		808/tcp		omirrd		# online mirror
-omirr		808/udp		omirrd
-customs		1001/tcp			# pmake customs server
-customs		1001/udp
-skkserv		1178/tcp			# skk jisho server port
-predict		1210/udp			# predict -- satellite tracking
-rmtcfg		1236/tcp			# Gracilis Packeten remote config server
-wipld		1300/tcp			# Wipl network monitor
-xtel		1313/tcp			# french minitel
-xtelw		1314/tcp			# french minitel
-support		1529/tcp			# GNATS
-sieve		2000/tcp			# Sieve mail filter daemon
-cfinger		2003/tcp			# GNU Finger
-ndtp		2010/tcp			# Network dictionary transfer protocol
-frox		2121/tcp			# frox: caching ftp proxy
-ninstall	2150/tcp			# ninstall service
-ninstall	2150/udp
-zebrasrv	2600/tcp			# zebra service
-zebra		2601/tcp			# zebra vty
-ripd		2602/tcp			# ripd vty (zebra)
-ripngd		2603/tcp			# ripngd vty (zebra)
-ospfd		2604/tcp			# ospfd vty (zebra)
-bgpd		2605/tcp			# bgpd vty (zebra)
-ospf6d		2606/tcp			# ospf6d vty (zebra)
-ospfapi		2607/tcp			# OSPF-API
-isisd		2608/tcp			# ISISd vty (zebra)
-afbackup	2988/tcp			# Afbackup system
-afbackup	2988/udp
-afmbackup	2989/tcp			# Afmbackup system
-afmbackup	2989/udp
-xtell		4224/tcp			# xtell server
-fax		4557/tcp			# FAX transmission service (old)
-hylafax		4559/tcp			# HylaFAX client-server protocol (new)
-distmp3		4600/tcp			# distmp3host daemon
-munin		4949/tcp	lrrd		# Munin
-enbd-cstatd	5051/tcp			# ENBD client statd
-enbd-sstatd	5052/tcp			# ENBD server statd
-pcrd		5151/tcp			# PCR-1000 Daemon
-noclog		5354/tcp			# noclogd with TCP (nocol)
-noclog		5354/udp			# noclogd with UDP (nocol)
-hostmon		5355/tcp			# hostmon uses TCP (nocol)
-hostmon		5355/udp			# hostmon uses UDP (nocol)
-rplay		5555/udp			# RPlay audio service
-rplay		5555/tcp
-rptp		5556/udp			# Remote Play Transfer Protocol
-rptp		5556/tcp
-nsca		5667/tcp			# Nagios Agent - NSCA
-mrtd		5674/tcp			# MRT Routing Daemon
-bgpsim		5675/tcp			# MRT Routing Simulator
-canna		5680/tcp			# cannaserver
-sane-port	6566/tcp	sane saned	# SANE network scanner daemon
-ircd		6667/tcp			# Internet Relay Chat
-zope-ftp	8021/tcp			# zope management by ftp
-webcache	8080/tcp			# WWW caching service
-tproxy		8081/tcp			# Transparent Proxy
-omniorb		8088/tcp			# OmniORB
-omniorb		8088/udp
-clc-build-daemon 8990/tcp			# Common lisp build daemon
-xinetd		9098/tcp
-mandelspawn	9359/udp	mandelbrot	# network mandelbrot
-zope		9673/tcp			# zope server
-kamanda		10081/tcp			# amanda backup services (Kerberos)
-kamanda		10081/udp
-amandaidx	10082/tcp			# amanda backup services
-amidxtape	10083/tcp			# amanda backup services
-smsqp		11201/tcp			# Alamin SMS gateway
-smsqp		11201/udp
-xpilot		15345/tcp			# XPilot Contact Port
-xpilot		15345/udp
-sgi-cmsd	17001/udp		# Cluster membership services daemon
-sgi-crsd	17002/udp
-sgi-gcd		17003/udp			# SGI Group membership daemon
-sgi-cad		17004/tcp			# Cluster Admin daemon
-isdnlog		20011/tcp			# isdn logging system
-isdnlog		20011/udp
-vboxd		20012/tcp			# voice box system
-vboxd		20012/udp
-binkp		24554/tcp			# binkp fidonet protocol
-asp		27374/tcp			# Address Search Protocol
-asp		27374/udp
-dircproxy	57000/tcp			# Detachable IRC Proxy
-tfido		60177/tcp			# fidonet EMSI over telnet
-fido		60179/tcp			# fidonet EMSI over TCP
-
-# Local services
diff --git a/test/data/types/port/darwin b/test/data/types/port/darwin
deleted file mode 100644
index 8c6b355..0000000
--- a/test/data/types/port/darwin
+++ /dev/null
@@ -1,11866 +0,0 @@
-#
-# Network services, Internet style
-#
-# Note that it is presently the policy of IANA to assign a single well-known
-# port number for both TCP and UDP; hence, most entries here have two entries
-# even if the protocol doesn't support UDP operations.
-#
-# The latest IANA port assignments can be gotten from
-#
-#	http://www.iana.org/assignments/port-numbers
-#
-# The Well Known Ports are those from 0 through 1023.
-# The Registered Ports are those from 1024 through 49151
-# The Dynamic and/or Private Ports are those from 49152 through 65535
-#
-# $FreeBSD: src/etc/services,v 1.89 2002/12/17 23:59:10 eric Exp $
-#	From: @(#)services	5.8 (Berkeley) 5/9/91
-#
-# WELL KNOWN PORT NUMBERS
-#
-rtmp              1/ddp    #Routing Table Maintenance Protocol
-tcpmux            1/udp     # TCP Port Service Multiplexer
-tcpmux            1/tcp     # TCP Port Service Multiplexer
-#                          Mark Lottor <MKL at nisc.sri.com>
-nbp               2/ddp    #Name Binding Protocol
-compressnet       2/udp     # Management Utility
-compressnet       2/tcp     # Management Utility
-compressnet       3/udp     # Compression Process
-compressnet       3/tcp     # Compression Process
-#                          Bernie Volz <VOLZ at PROCESS.COM>
-echo              4/ddp    #AppleTalk Echo Protocol
-#                 4/tcp    Unassigned
-#                 4/udp    Unassigned
-rje               5/udp     # Remote Job Entry
-rje               5/tcp     # Remote Job Entry
-#                          Jon Postel <postel at isi.edu>
-zip               6/ddp    #Zone Information Protocol
-#                 6/tcp    Unassigned
-#                 6/udp    Unassigned
-echo              7/udp     # Echo
-echo              7/tcp     # Echo
-#                          Jon Postel <postel at isi.edu>
-#                 8/tcp    Unassigned
-#                 8/udp    Unassigned
-discard           9/udp     # Discard
-discard           9/tcp     # Discard
-#                          Jon Postel <postel at isi.edu>
-#                10/tcp    Unassigned
-#                10/udp    Unassigned
-systat           11/udp     # Active Users
-systat           11/tcp     # Active Users
-#                          Jon Postel <postel at isi.edu>
-#                12/tcp    Unassigned
-#                12/udp    Unassigned
-daytime          13/udp     # Daytime (RFC 867)
-daytime          13/tcp     # Daytime (RFC 867)
-#                          Jon Postel <postel at isi.edu>
-#                14/tcp    Unassigned
-#                14/udp    Unassigned
-#                15/tcp    Unassigned [was netstat]
-#                15/udp    Unassigned
-#                16/tcp    Unassigned
-#                16/udp    Unassigned
-qotd             17/udp     # Quote of the Day
-qotd             17/tcp     # Quote of the Day
-#                          Jon Postel <postel at isi.edu>
-msp              18/udp     # Message Send Protocol
-msp              18/tcp     # Message Send Protocol
-#                          Rina Nethaniel <---none--->
-chargen          19/udp     # Character Generator
-chargen          19/tcp     # Character Generator
-ftp-data         20/udp     # File Transfer [Default Data]
-ftp-data         20/tcp     # File Transfer [Default Data]
-ftp              21/udp     # File Transfer [Control]
-ftp              21/tcp     # File Transfer [Control]
-#                          Jon Postel <postel at isi.edu>
-ssh              22/udp     # SSH Remote Login Protocol
-ssh              22/tcp     # SSH Remote Login Protocol
-#                          Tatu Ylonen <ylo at cs.hut.fi>
-telnet           23/udp     # Telnet
-telnet           23/tcp     # Telnet
-#                          Jon Postel <postel at isi.edu>
-                 24/udp     # any private mail system
-                 24/tcp     # any private mail system
-#                          Rick Adams <rick at UUNET.UU.NET>
-smtp             25/udp     # Simple Mail Transfer
-smtp             25/tcp     # Simple Mail Transfer
-#                          Jon Postel <postel at isi.edu>
-#                26/tcp    Unassigned
-#                26/udp    Unassigned
-nsw-fe           27/udp     # NSW User System FE
-nsw-fe           27/tcp     # NSW User System FE
-#                          Robert Thomas <BThomas at F.BBN.COM>
-#                28/tcp    Unassigned
-#                28/udp    Unassigned
-msg-icp          29/udp     # MSG ICP
-msg-icp          29/tcp     # MSG ICP
-#                          Robert Thomas <BThomas at F.BBN.COM>
-#                30/tcp    Unassigned
-#                30/udp    Unassigned
-msg-auth         31/udp     # MSG Authentication
-msg-auth         31/tcp     # MSG Authentication
-#                          Robert Thomas <BThomas at F.BBN.COM>
-#                32/tcp    Unassigned
-#                32/udp    Unassigned
-dsp              33/udp     # Display Support Protocol
-dsp              33/tcp     # Display Support Protocol
-#                          Ed Cain <cain at edn-unix.dca.mil>
-#                34/tcp    Unassigned
-#                34/udp    Unassigned
-                 35/udp     # any private printer server
-                 35/tcp     # any private printer server
-#                          Jon Postel <postel at isi.edu>
-#                36/tcp    Unassigned
-#                36/udp    Unassigned
-time             37/udp     # Time
-time             37/tcp     # Time
-#                          Jon Postel <postel at isi.edu>
-rap              38/udp     # Route Access Protocol
-rap              38/tcp     # Route Access Protocol
-#                          Robert Ullmann <ariel at world.std.com>
-rlp              39/udp     # Resource Location Protocol
-rlp              39/tcp     # Resource Location Protocol
-#                          Mike Accetta <MIKE.ACCETTA at CMU-CS-A.EDU>
-#                40/tcp    Unassigned
-#                40/udp    Unassigned
-graphics         41/udp     # Graphics
-graphics         41/tcp     # Graphics
-name             42/udp     nameserver # Host Name Server
-name             42/tcp     nameserver # Host Name Server
-nicname          43/udp     # Who Is
-nicname          43/tcp     # Who Is
-mpm-flags        44/udp     # MPM FLAGS Protocol
-mpm-flags        44/tcp     # MPM FLAGS Protocol
-mpm              45/udp     # Message Processing Module [recv]
-mpm              45/tcp     # Message Processing Module [recv]
-mpm-snd          46/udp     # MPM [default send]
-mpm-snd          46/tcp     # MPM [default send]
-#                          Jon Postel <postel at isi.edu>
-ni-ftp           47/udp     # NI FTP
-ni-ftp           47/tcp     # NI FTP
-#                          Steve Kille <S.Kille at isode.com>
-auditd           48/udp     # Digital Audit Daemon
-auditd           48/tcp     # Digital Audit Daemon
-#                          Larry Scott <scott at zk3.dec.com>
-tacacs           49/udp     # Login Host Protocol (TACACS)
-tacacs           49/tcp     # Login Host Protocol (TACACS)
-#                          Pieter Ditmars <pditmars at BBN.COM>
-re-mail-ck       50/udp     # Remote Mail Checking Protocol
-re-mail-ck       50/tcp     # Remote Mail Checking Protocol
-#                          Steve Dorner <s-dorner at UIUC.EDU>
-la-maint         51/udp     # IMP Logical Address Maintenance
-la-maint         51/tcp     # IMP Logical Address Maintenance
-#                          Andy Malis <malis_a at timeplex.com>
-xns-time         52/udp     # XNS Time Protocol
-xns-time         52/tcp     # XNS Time Protocol
-#                          Susie Armstrong <Armstrong.wbst128 at XEROX>
-domain           53/udp     # Domain Name Server
-domain           53/tcp     # Domain Name Server
-#                          Paul Mockapetris <PVM at ISI.EDU>
-xns-ch           54/udp     # XNS Clearinghouse
-xns-ch           54/tcp     # XNS Clearinghouse
-#                          Susie Armstrong <Armstrong.wbst128 at XEROX>
-isi-gl           55/udp     # ISI Graphics Language
-isi-gl           55/tcp     # ISI Graphics Language
-xns-auth         56/udp     # XNS Authentication
-xns-auth         56/tcp     # XNS Authentication
-#                          Susie Armstrong <Armstrong.wbst128 at XEROX>
-                 57/udp     # any private terminal access
-                 57/tcp     # any private terminal access
-#                          Jon Postel <postel at isi.edu>
-xns-mail         58/udp     # XNS Mail
-xns-mail         58/tcp     # XNS Mail
-#                          Susie Armstrong <Armstrong.wbst128 at XEROX>
-                 59/udp     # any private file service
-                 59/tcp     # any private file service
-#                          Jon Postel <postel at isi.edu>
-                 60/udp     # Unassigned
-                 60/tcp     # Unassigned
-ni-mail          61/udp     # NI MAIL
-ni-mail          61/tcp     # NI MAIL
-#                          Steve Kille <S.Kille at isode.com>
-acas             62/udp     # ACA Services
-acas             62/tcp     # ACA Services
-#                          E. Wald <ewald at via.enet.dec.com>
-whois++          63/udp     # whois++
-whois++          63/tcp     # whois++
-#                          Rickard Schoultz <schoultz at sunet.se>
-covia            64/udp     # Communications Integrator (CI)
-covia            64/tcp     # Communications Integrator (CI)
-#                          Dan Smith <dan.smith at den.galileo.com>
-tacacs-ds        65/udp     # TACACS-Database Service
-tacacs-ds        65/tcp     # TACACS-Database Service
-#                          Kathy Huber <khuber at bbn.com>
-sql*net          66/udp     # Oracle SQL*NET
-sql*net          66/tcp     # Oracle SQL*NET
-#                          Jack Haverty <jhaverty at ORACLE.COM>
-bootps           67/udp     # Bootstrap Protocol Server
-bootps           67/tcp     # Bootstrap Protocol Server
-bootpc           68/udp     # Bootstrap Protocol Client
-bootpc           68/tcp     # Bootstrap Protocol Client
-#                          Bill Croft <Croft at SUMEX-AIM.STANFORD.EDU>
-tftp             69/udp     # Trivial File Transfer
-tftp             69/tcp     # Trivial File Transfer
-#                          David Clark <ddc at LCS.MIT.EDU>
-gopher           70/udp     # Gopher
-gopher           70/tcp     # Gopher
-#                          Mark McCahill <mpm at boombox.micro.umn.edu>
-netrjs-1         71/udp     # Remote Job Service
-netrjs-1         71/tcp     # Remote Job Service
-netrjs-2         72/udp     # Remote Job Service
-netrjs-2         72/tcp     # Remote Job Service
-netrjs-3         73/udp     # Remote Job Service
-netrjs-3         73/tcp     # Remote Job Service
-netrjs-4         74/udp     # Remote Job Service
-netrjs-4         74/tcp     # Remote Job Service
-#                          Bob Braden <Braden at ISI.EDU>
-                 75/udp     # any private dial out service
-                 75/tcp     # any private dial out service
-#                          Jon Postel <postel at isi.edu>
-deos             76/udp     # Distributed External Object Store
-deos             76/tcp     # Distributed External Object Store
-#                          Robert Ullmann <ariel at world.std.com>
-                 77/udp     # any private RJE service
-                 77/tcp     # any private RJE service
-#                          Jon Postel <postel at isi.edu>
-vettcp           78/udp     # vettcp
-vettcp           78/tcp     # vettcp
-#                          Christopher Leong <leong at kolmod.mlo.dec.com>
-finger           79/udp     # Finger
-finger           79/tcp     # Finger
-#                          David Zimmerman <dpz at RUTGERS.EDU>
-http             80/udp     www www-http # World Wide Web HTTP
-http             80/tcp     www www-http # World Wide Web HTTP
-#                          Tim Berners-Lee <timbl at W3.org>
-hosts2-ns        81/udp     # HOSTS2 Name Server
-hosts2-ns        81/tcp     # HOSTS2 Name Server
-#                          Earl Killian <EAK at MORDOR.S1.GOV>
-xfer             82/udp     # XFER Utility
-xfer             82/tcp     # XFER Utility
-#                          Thomas M. Smith <Thomas.M.Smith at lmco.com>
-mit-ml-dev       83/udp     # MIT ML Device
-mit-ml-dev       83/tcp     # MIT ML Device
-#                          David Reed <--none--->
-ctf              84/udp     # Common Trace Facility
-ctf              84/tcp     # Common Trace Facility
-#                          Hugh Thomas <thomas at oils.enet.dec.com>
-mit-ml-dev       85/udp     # MIT ML Device
-mit-ml-dev       85/tcp     # MIT ML Device
-#                          David Reed <--none--->
-mfcobol          86/udp     # Micro Focus Cobol
-mfcobol          86/tcp     # Micro Focus Cobol
-#                          Simon Edwards <--none--->
-                 87/udp     # any private terminal link
-                 87/tcp     # any private terminal link
-#                          Jon Postel <postel at isi.edu>
-kerberos         88/udp     # Kerberos
-kerberos         88/tcp     # Kerberos
-#                          B. Clifford Neuman <bcn at isi.edu>
-su-mit-tg        89/udp     # SU/MIT Telnet Gateway
-su-mit-tg        89/tcp     # SU/MIT Telnet Gateway
-#                          Mark Crispin <MRC at PANDA.COM>
-########### PORT 90 also being used unofficially by Pointcast #########
-dnsix            90/udp     # DNSIX Securit Attribute Token Map
-dnsix            90/tcp     # DNSIX Securit Attribute Token Map
-#                          Charles Watt <watt at sware.com>
-mit-dov          91/udp     # MIT Dover Spooler
-mit-dov          91/tcp     # MIT Dover Spooler
-#                          Eliot Moss <EBM at XX.LCS.MIT.EDU>
-npp              92/udp     # Network Printing Protocol
-npp              92/tcp     # Network Printing Protocol
-#                          Louis Mamakos <louie at sayshell.umd.edu>
-dcp              93/udp     # Device Control Protocol
-dcp              93/tcp     # Device Control Protocol
-#                          Daniel Tappan <Tappan at BBN.COM>
-objcall          94/udp     # Tivoli Object Dispatcher
-objcall          94/tcp     # Tivoli Object Dispatcher
-#                          Tom Bereiter <--none--->
-supdup           95/udp     # SUPDUP
-supdup           95/tcp     # SUPDUP
-#                          Mark Crispin <MRC at PANDA.COM>
-dixie            96/udp     # DIXIE Protocol Specification
-dixie            96/tcp     # DIXIE Protocol Specification
-#                Tim Howes <Tim.Howes at terminator.cc.umich.edu>
-swift-rvf        97/udp     # Swift Remote Virtural File Protocol
-swift-rvf        97/tcp     # Swift Remote Virtural File Protocol
-#                          Maurice R. Turcotte
-#                <mailrus!uflorida!rm1!dnmrt%rmatl at uunet.UU.NET> 
-tacnews          98/udp     # TAC News
-tacnews          98/tcp     # TAC News
-#                          Jon Postel <postel at isi.edu>
-metagram         99/udp     # Metagram Relay
-metagram         99/tcp     # Metagram Relay
-#                          Geoff Goodfellow <Geoff at FERNWOOD.MPK.CA.US>
-newacct         100/tcp     # [unauthorized use]
-hostname        101/udp     # NIC Host Name Server
-hostname        101/tcp     # NIC Host Name Server
-#                          Jon Postel <postel at isi.edu>
-iso-tsap        102/udp     # ISO-TSAP Class 0
-iso-tsap        102/tcp     # ISO-TSAP Class 0
-#                          Marshall Rose <mrose at dbc.mtview.ca.us>
-gppitnp         103/udp     # Genesis Point-to-Point Trans Net
-gppitnp         103/tcp     # Genesis Point-to-Point Trans Net
-acr-nema        104/udp     # ACR-NEMA Digital Imag. & Comm. 300
-acr-nema        104/tcp     # ACR-NEMA Digital Imag. & Comm. 300
-#                          Patrick McNamee <--none--->
-cso             105/udp     # CCSO name server protocol
-cso             105/tcp     # CCSO name server protocol
-#                          Martin Hamilton <martin at mrrl.lut.as.uk>           
-csnet-ns        105/udp     # Mailbox Name Nameserver
-csnet-ns        105/tcp     # Mailbox Name Nameserver
-#                          Marvin Solomon <solomon at CS.WISC.EDU>
-3com-tsmux      106/udp     # 3COM-TSMUX
-3com-tsmux      106/tcp     # 3COM-TSMUX
-#                          Jeremy Siegel <jzs at NSD.3Com.COM>
-##########      106        Unauthorized use by insecure poppassd protocol
-rtelnet         107/udp     # Remote Telnet Service
-rtelnet         107/tcp     # Remote Telnet Service
-#                          Jon Postel <postel at isi.edu>
-snagas          108/udp     # SNA Gateway Access Server
-snagas          108/tcp     # SNA Gateway Access Server
-#                          Kevin Murphy <murphy at sevens.lkg.dec.com>
-pop2            109/udp     # Post Office Protocol - Version 2
-pop2            109/tcp     # Post Office Protocol - Version 2
-#                          Joyce K. Reynolds <jkrey at isi.edu>
-pop3            110/udp     # Post Office Protocol - Version 3
-pop3            110/tcp     # Post Office Protocol - Version 3
-#                          Marshall Rose <mrose at dbc.mtview.ca.us>
-sunrpc          111/udp     # SUN Remote Procedure Call
-sunrpc          111/tcp     # SUN Remote Procedure Call
-#                          Chuck McManis <cmcmanis at freegate.net>
-mcidas          112/udp     # McIDAS Data Transmission Protocol
-mcidas          112/tcp     # McIDAS Data Transmission Protocol
-#                          Glenn Davis <support at unidata.ucar.edu>
-auth            113/udp     # Authentication Service
-ident           113/tcp     auth # 
-#                          Mike St. Johns <stjohns at arpa.mil>
-audionews       114/udp     # Audio News Multicast
-audionews       114/tcp     # Audio News Multicast
-#                          Martin Forssen <maf at dtek.chalmers.se>
-sftp            115/udp     # Simple File Transfer Protocol
-sftp            115/tcp     # Simple File Transfer Protocol
-#                          Mark Lottor <MKL at nisc.sri.com>
-ansanotify      116/udp     # ANSA REX Notify
-ansanotify      116/tcp     # ANSA REX Notify
-#                          Nicola J. Howarth <njh at ansa.co.uk>
-uucp-path       117/udp     # UUCP Path Service
-uucp-path       117/tcp     # UUCP Path Service
-sqlserv         118/udp     # SQL Services
-sqlserv         118/tcp     # SQL Services
-#                          Larry Barnes <barnes at broke.enet.dec.com>
-nntp            119/udp     # Network News Transfer Protocol
-nntp            119/tcp     # Network News Transfer Protocol
-#                          Phil Lapsley <phil at UCBARPA.BERKELEY.EDU>
-cfdptkt         120/udp     # CFDPTKT
-cfdptkt         120/tcp     # CFDPTKT
-#                          John Ioannidis <ji at close.cs.columbia.ed>
-erpc            121/udp     # Encore Expedited Remote Pro.Call
-erpc            121/tcp     # Encore Expedited Remote Pro.Call
-#                          Jack O'Neil <---none--->
-smakynet        122/udp     # SMAKYNET
-smakynet        122/tcp     # SMAKYNET
-#                          Pierre Arnaud <pierre.arnaud at iname.com>
-ntp             123/udp     # Network Time Protocol
-ntp             123/tcp     # Network Time Protocol
-#                          Dave Mills <Mills at HUEY.UDEL.EDU>
-ansatrader      124/udp     # ANSA REX Trader
-ansatrader      124/tcp     # ANSA REX Trader
-#                          Nicola J. Howarth <njh at ansa.co.uk>
-locus-map       125/udp     # Locus PC-Interface Net Map Ser
-locus-map       125/tcp     # Locus PC-Interface Net Map Ser
-#                          Eric Peterson <lcc.eric at SEAS.UCLA.EDU>
-nxedit		126/udp     # NXEdit
-nxedit		126/tcp     # NXEdit
-#			   Don Payette <Don.Payette at unisys.com>
-###########Port 126 Previously assigned to application below#######
-#unitary         126/tcp    Unisys Unitary Login
-#unitary         126/udp    Unisys Unitary Login
-#                          <feil at kronos.nisd.cam.unisys.com>
-###########Port 126 Previously assigned to application above#######
-locus-con       127/udp     # Locus PC-Interface Conn Server
-locus-con       127/tcp     # Locus PC-Interface Conn Server
-#                          Eric Peterson <lcc.eric at SEAS.UCLA.EDU>
-gss-xlicen      128/udp     # GSS X License Verification
-gss-xlicen      128/tcp     # GSS X License Verification
-#                          John Light <johnl at gssc.gss.com>
-pwdgen          129/udp     # Password Generator Protocol
-pwdgen          129/tcp     # Password Generator Protocol
-#                          Frank J. Wacho <WANCHO at WSMR-SIMTEL20.ARMY.MIL>
-cisco-fna       130/udp     # cisco FNATIVE
-cisco-fna       130/tcp     # cisco FNATIVE
-cisco-tna       131/udp     # cisco TNATIVE
-cisco-tna       131/tcp     # cisco TNATIVE
-cisco-sys       132/udp     # cisco SYSMAINT
-cisco-sys       132/tcp     # cisco SYSMAINT
-statsrv         133/udp     # Statistics Service
-statsrv         133/tcp     # Statistics Service
-#                          Dave Mills <Mills at HUEY.UDEL.EDU>
-ingres-net      134/udp     # INGRES-NET Service
-ingres-net      134/tcp     # INGRES-NET Service
-#                          Mike Berrow <---none--->
-epmap           135/udp     # DCE endpoint resolution
-epmap           135/tcp     # DCE endpoint resolution
-#                          Joe Pato <pato at apollo.hp.com>
-profile         136/udp     # PROFILE Naming System           
-profile         136/tcp     # PROFILE Naming System           
-#                          Larry Peterson <llp at ARIZONA.EDU>
-netbios-ns      137/udp     # NETBIOS Name Service    
-netbios-ns      137/tcp     # NETBIOS Name Service    
-netbios-dgm     138/udp     # NETBIOS Datagram Service
-netbios-dgm     138/tcp     # NETBIOS Datagram Service
-netbios-ssn     139/udp     # NETBIOS Session Service
-netbios-ssn     139/tcp     # NETBIOS Session Service
-#                          Jon Postel <postel at isi.edu>
-emfis-data      140/udp     # EMFIS Data Service
-emfis-data      140/tcp     # EMFIS Data Service
-emfis-cntl      141/udp     # EMFIS Control Service
-emfis-cntl      141/tcp     # EMFIS Control Service
-#                          Gerd Beling <GBELING at ISI.EDU>
-bl-idm          142/udp     # Britton-Lee IDM           
-bl-idm          142/tcp     # Britton-Lee IDM           
-#                          Susie Snitzer <---none--->
-imap            143/udp     # Internet Message Access Protocol
-imap            143/tcp     # Internet Message Access Protocol
-#                          Mark Crispin <MRC at CAC.Washington.EDU>
-uma		144/udp     # Universal Management Architecture
-uma 		144/tcp     # Universal Management Architecture
-#			   Jay Whitney <jw at powercenter.com>
-uaac            145/udp     # UAAC Protocol             
-uaac            145/tcp     # UAAC Protocol             
-#                          David A. Gomberg <gomberg at GATEWAY.MITRE.ORG>
-iso-tp0         146/udp     # ISO-IP0
-iso-tp0         146/tcp     # ISO-IP0
-iso-ip          147/udp     # ISO-IP
-iso-ip          147/tcp     # ISO-IP
-#                          Marshall Rose <mrose at dbc.mtview.ca.us>
-jargon          148/udp     # Jargon
-jargon          148/tcp     # Jargon
-#			   Bill Weinman <wew at bearnet.com>
-aed-512         149/udp     # AED 512 Emulation Service           
-aed-512         149/tcp     # AED 512 Emulation Service           
-#                          Albert G. Broscius <broscius at DSL.CIS.UPENN.EDU>
-sql-net         150/udp     # SQL-NET                    
-sql-net         150/tcp     # SQL-NET                    
-#                          Martin Picard <<---none--->
-hems            151/udp     # HEMS                              
-hems            151/tcp     # HEMS                              
-bftp            152/udp     # Background File Transfer Program 
-bftp            152/tcp     # Background File Transfer Program 
-#                          Annette DeSchon <DESCHON at ISI.EDU>
-sgmp            153/udp     # SGMP                    
-sgmp            153/tcp     # SGMP                    
-#                          Marty Schoffstahl <schoff at NISC.NYSER.NET>
-netsc-prod      154/udp     # NETSC                             
-netsc-prod      154/tcp     # NETSC                             
-netsc-dev       155/udp     # NETSC                             
-netsc-dev       155/tcp     # NETSC                             
-#                          Sergio Heker <heker at JVNCC.CSC.ORG>
-sqlsrv          156/udp     # SQL Service                  
-sqlsrv          156/tcp     # SQL Service                  
-#                          Craig Rogers <Rogers at ISI.EDU>
-knet-cmp        157/udp     # KNET/VM Command/Message Protocol
-knet-cmp        157/tcp     # KNET/VM Command/Message Protocol
-#                          Gary S. Malkin <GMALKIN at XYLOGICS.COM>
-pcmail-srv      158/udp     # PCMail Server                 
-pcmail-srv      158/tcp     # PCMail Server                 
-#                          Mark L. Lambert <markl at PTT.LCS.MIT.EDU>
-nss-routing     159/udp     # NSS-Routing                  
-nss-routing     159/tcp     # NSS-Routing                  
-#                          Yakov Rekhter <Yakov at IBM.COM>
-sgmp-traps      160/udp     # SGMP-TRAPS                
-sgmp-traps      160/tcp     # SGMP-TRAPS                
-#                          Marty Schoffstahl <schoff at NISC.NYSER.NET>
-snmp            161/udp     # SNMP
-snmp            161/tcp     # SNMP
-snmptrap        162/udp     # SNMPTRAP
-snmptrap        162/tcp     # SNMPTRAP
-#                          Marshall Rose <mrose at dbc.mtview.ca.us>
-cmip-man        163/udp     # CMIP/TCP Manager   
-cmip-man        163/tcp     # CMIP/TCP Manager   
-cmip-agent      164/udp     # CMIP/TCP Agent     
-cmip-agent      164/tcp     # CMIP/TCP Agent     
-#                          Amatzia Ben-Artzi <---none--->
-xns-courier     165/udp     # Xerox                          
-xns-courier     165/tcp     # Xerox                          
-#                          Susie Armstrong <Armstrong.wbst128 at XEROX.COM>
-s-net           166/udp     # Sirius Systems          
-s-net           166/tcp     # Sirius Systems          
-#                          Brian Lloyd <brian at lloyd.com>
-namp            167/udp     # NAMP                    
-namp            167/tcp     # NAMP                    
-#                          Marty Schoffstahl <schoff at NISC.NYSER.NET>
-rsvd            168/udp     # RSVD                              
-rsvd            168/tcp     # RSVD                              
-#                          Neil Todd <mcvax!ist.co.uk!neil at UUNET.UU.NET>
-send            169/udp     # SEND                              
-send            169/tcp     # SEND                              
-#                          William D. Wisner <wisner at HAYES.FAI.ALASKA.EDU>
-print-srv       170/udp     # Network PostScript              
-print-srv       170/tcp     # Network PostScript              
-#                          Brian Reid <reid at DECWRL.DEC.COM>
-multiplex       171/udp     # Network Innovations Multiplex
-multiplex       171/tcp     # Network Innovations Multiplex
-cl/1            172/udp     # Network Innovations CL/1     
-cl/1            172/tcp     # Network Innovations CL/1     
-#                          Kevin DeVault <<---none--->
-xyplex-mux      173/udp     # Xyplex                          
-xyplex-mux      173/tcp     # Xyplex                          
-#                          Bob Stewart <STEWART at XYPLEX.COM>
-mailq           174/udp     # MAILQ                               
-mailq           174/tcp     # MAILQ                               
-#                          Rayan Zachariassen <rayan at AI.TORONTO.EDU>
-vmnet           175/udp     # VMNET  
-vmnet           175/tcp     # VMNET                                
-#                          Christopher Tengi <tengi at Princeton.EDU>
-genrad-mux      176/udp     # GENRAD-MUX                      
-genrad-mux      176/tcp     # GENRAD-MUX                      
-#                          Ron Thornton <thornton at qm7501.genrad.com>
-xdmcp           177/udp     # X Display Manager Control Protocol  
-xdmcp           177/tcp     # X Display Manager Control Protocol  
-#                          Robert W. Scheifler <RWS at XX.LCS.MIT.EDU>
-nextstep        178/udp     # NextStep Window Server     
-nextstep        178/tcp     # NextStep Window Server     
-#                          Leo Hourvitz <leo at NEXT.COM>
-bgp             179/udp     # Border Gateway Protocol             
-bgp             179/tcp     # Border Gateway Protocol             
-#                          Kirk Lougheed <LOUGHEED at MATHOM.CISCO.COM>
-ris             180/udp     # Intergraph                         
-ris             180/tcp     # Intergraph                         
-#                          Dave Buehmann <ingr!daveb at UUNET.UU.NET>
-unify           181/udp     # Unify                  
-unify           181/tcp     # Unify                  
-#                          Mark Ainsley <ianaportmaster at unify.com>
-audit           182/udp     # Unisys Audit SITP                  
-audit           182/tcp     # Unisys Audit SITP                  
-#                          Gil Greenbaum <gcole at nisd.cam.unisys.com>
-ocbinder        183/udp     # OCBinder                     
-ocbinder        183/tcp     # OCBinder                     
-ocserver        184/udp     # OCServer                     
-ocserver        184/tcp     # OCServer                     
-#                          Jerrilynn Okamura <--none--->
-remote-kis      185/udp     # Remote-KIS                        
-remote-kis      185/tcp     # Remote-KIS                        
-kis             186/udp     # KIS Protocol                      
-kis             186/tcp     # KIS Protocol                      
-#                          Ralph Droms <rdroms at NRI.RESTON.VA.US>
-aci             187/udp     # Application Communication Interface
-aci             187/tcp     # Application Communication Interface
-#                          Rick Carlos <rick.ticipa.csc.ti.com>
-mumps           188/udp     # Plus Five's MUMPS            
-mumps           188/tcp     # Plus Five's MUMPS            
-#                          Hokey Stenn <hokey at PLUS5.COM>
-qft             189/udp     # Queued File Transport        
-qft             189/tcp     # Queued File Transport        
-#                          Wayne Schroeder <schroeder at SDS.SDSC.EDU>
-gacp            190/udp     # Gateway Access Control Protocol
-gacp            190/tcp     # Gateway Access Control Protocol
-#                          C. Philip Wood <cpw at LANL.GOV>
-prospero        191/udp     # Prospero Directory Service      
-prospero        191/tcp     # Prospero Directory Service      
-#                          B. Clifford Neuman <bcn at isi.edu>
-osu-nms         192/udp     # OSU Network Monitoring System       
-osu-nms         192/tcp     # OSU Network Monitoring System       
-#                          Doug Karl <KARL-D at OSU-20.IRCC.OHIO-STATE.EDU>
-srmp            193/udp     # Spider Remote Monitoring Protocol 
-srmp            193/tcp     # Spider Remote Monitoring Protocol 
-#                          Ted J. Socolofsky <Teds at SPIDER.CO.UK>
-irc             194/udp     # Internet Relay Chat Protocol        
-irc             194/tcp     # Internet Relay Chat Protocol        
-#                          Jarkko Oikarinen <jto at TOLSUN.OULU.FI>
-dn6-nlm-aud     195/udp     # DNSIX Network Level Module Audit    
-dn6-nlm-aud     195/tcp     # DNSIX Network Level Module Audit    
-dn6-smm-red     196/udp     # DNSIX Session Mgt Module Audit Redir
-dn6-smm-red     196/tcp     # DNSIX Session Mgt Module Audit Redir
-#                          Lawrence Lebahn <DIA3 at PAXRV-NES.NAVY.MIL>
-dls             197/udp     # Directory Location Service        
-dls             197/tcp     # Directory Location Service        
-dls-mon         198/udp     # Directory Location Service Monitor
-dls-mon         198/tcp     # Directory Location Service Monitor
-#                          Scott Bellew <smb at cs.purdue.edu>
-smux            199/udp     # SMUX
-smux            199/tcp     # SMUX
-#                          Marshall Rose <mrose at dbc.mtview.ca.us>
-src             200/udp     # IBM System Resource Controller
-src             200/tcp     # IBM System Resource Controller
-#                          Gerald McBrearty <---none--->
-at-rtmp         201/udp     # AppleTalk Routing Maintenance       
-at-rtmp         201/tcp     # AppleTalk Routing Maintenance       
-at-nbp          202/udp     # AppleTalk Name Binding              
-at-nbp          202/tcp     # AppleTalk Name Binding              
-at-3            203/udp     # AppleTalk Unused                    
-at-3            203/tcp     # AppleTalk Unused                    
-at-echo         204/udp     # AppleTalk Echo                      
-at-echo         204/tcp     # AppleTalk Echo                      
-at-5            205/udp     # AppleTalk Unused                    
-at-5            205/tcp     # AppleTalk Unused                    
-at-zis          206/udp     # AppleTalk Zone Information          
-at-zis          206/tcp     # AppleTalk Zone Information          
-at-7            207/udp     # AppleTalk Unused                    
-at-7            207/tcp     # AppleTalk Unused                    
-at-8            208/udp     # AppleTalk Unused                    
-at-8            208/tcp     # AppleTalk Unused                    
-#                          Rob Chandhok <chandhok at gnome.cs.cmu.edu>
-qmtp            209/udp     # The Quick Mail Transfer Protocol
-qmtp            209/tcp     # The Quick Mail Transfer Protocol
-#                          Dan Bernstein <djb at silverton.berkeley.edu>
-z39.50          210/udp     # ANSI Z39.50
-z39.50          210/tcp     # ANSI Z39.50
-#                          Mark H. Needleman <markn at sirsi.com> 
-914c/g          211/udp     # Texas Instruments 914C/G Terminal
-914c/g          211/tcp     # Texas Instruments 914C/G Terminal
-#                          Bill Harrell <---none--->
-anet            212/udp     # ATEXSSTR   
-anet            212/tcp     # ATEXSSTR   
-#                          Jim Taylor <taylor at heart.epps.kodak.com>
-ipx             213/udp     # IPX                                
-ipx             213/tcp     # IPX         	                      
-#                          Don Provan <donp at xlnvax.novell.com>
-vmpwscs         214/udp     # VM PWSCS                         
-vmpwscs         214/tcp     # VM PWSCS                         
-#                          Dan Shia <dset!shia at uunet.UU.NET>
-softpc          215/udp     # Insignia Solutions
-softpc          215/tcp     # Insignia Solutions
-#                          Martyn Thomas <---none--->
-CAIlic          216/udp     # Computer Associates Int'l License Server
-CAIlic          216/tcp     # Computer Associates Int'l License Server
-#                          Chuck Spitz <spich04 at cai.com>
-dbase           217/udp     # dBASE Unix
-dbase           217/tcp     # dBASE Unix
-#                          Don Gibson
-#            <sequent!aero!twinsun!ashtate.A-T.COM!dong at uunet.UU.NET> 
-mpp             218/udp     # Netix Message Posting Protocol
-mpp             218/tcp     # Netix Message Posting Protocol
-#                          Shannon Yeh <yeh at netix.com>
-uarps           219/udp     # Unisys ARPs               
-uarps           219/tcp     # Unisys ARPs               
-#                          Ashok Marwaha <---none--->
-imap3           220/udp     # Interactive Mail Access Protocol v3
-imap3           220/tcp     # Interactive Mail Access Protocol v3
-#                          James Rice <RICE at SUMEX-AIM.STANFORD.EDU>
-fln-spx         221/udp     # Berkeley rlogind with SPX auth   
-fln-spx         221/tcp     # Berkeley rlogind with SPX auth   
-rsh-spx         222/udp     # Berkeley rshd with SPX auth      
-rsh-spx         222/tcp     # Berkeley rshd with SPX auth      
-cdc             223/udp     # Certificate Distribution Center  
-cdc             223/tcp     # Certificate Distribution Center  
-#               Kannan Alagappan <kannan at sejour.enet.dec.com>
-########### Possible Conflict of Port 222 with "Masqdialer"##############
-### Contact for Masqdialer is Charles Wright <cpwright at villagenet.com>###
-masqdialer	224/udp     # masqdialer
-masqdialer	224/tcp     # masqdialer
-#			   Charles Wright <cpwright at villagenet.com>
-#               225-241    Reserved
-#                          Jon Postel <postel at isi.edu>
-direct          242/udp     # Direct
-direct          242/tcp     # Direct
-#                          Herb Sutter <HerbS at cntc.com>
-sur-meas        243/udp     # Survey Measurement          
-sur-meas        243/tcp     # Survey Measurement          
-#                          Dave Clark <ddc at LCS.MIT.EDU>
-inbusiness      244/udp     # inbusiness
-inbusiness      244/tcp     # inbusiness
-#			   Derrick Hisatake <derrick.i.hisatake at intel.com>
-link            245/udp     # LINK
-link            245/tcp     # LINK
-dsp3270         246/udp     # Display Systems Protocol        
-dsp3270         246/tcp     # Display Systems Protocol        
-#                          Weldon J. Showalter <Gamma at MINTAKA.DCA.MIL>
-subntbcst_tftp  247/udp     # SUBNTBCST_TFTP
-subntbcst_tftp  247/tcp     # SUBNTBCST_TFTP
-#			   John Fake <fake at us.ibm.com>
-bhfhs		248/udp     # bhfhs
-bhfhs		248/tcp     # bhfhs
-#			   John Kelly <johnk at bellhow.com>
-#               249-255    Reserved
-#                          Jon Postel <postel at isi.edu>
-rap             256/udp     # RAP
-rap             256/tcp     # RAP
-#                          J.S. Greenfield <greeny at raleigh.ibm.com>
-set             257/udp     # Secure Electronic Transaction
-set             257/tcp     # Secure Electronic Transaction
-#                          Donald Eastlake <dee3 at torque.pothole.com>
-yak-chat        258/udp     # Yak Winsock Personal Chat
-yak-chat        258/tcp     # Yak Winsock Personal Chat
-#                          Brian Bandy <bbandy at swbell.net>
-esro-gen        259/udp     # Efficient Short Remote Operations
-esro-gen        259/tcp     # Efficient Short Remote Operations
-#                          Mohsen Banan <mohsen at rostam.neda.com>
-openport        260/udp     # Openport
-openport        260/tcp     # Openport
-#                          John Marland <jmarland at dean.openport.com>
-nsiiops		261/udp     # IIOP Name Service over TLS/SSL
-nsiiops 	261/tcp     # IIOP Name Service over TLS/SSL
-#                          Jeff Stewart <jstewart at netscape.com>
-arcisdms	262/udp	    # Arcisdms
-arcisdms	262/tcp     # Arcisdms
-#			   Russell Crook (rmc at sni.ca>
-hdap		263/udp     # HDAP
-hdap		263/tcp     # HDAP
-#			   Troy Gau <troy at zyxel.com>
-bgmp		264/udp     # BGMP
-bgmp		264/tcp     # BGMP
-#			   Dave Thaler <thalerd at eecs.umich.edu>
-x-bone-ctl	265/udp     # X-Bone CTL
-x-bone-ctl	265/tcp     # X-Bone CTL
-#			   Joe Touch <touch at isi.edu>
-sst             266/udp     # SCSI on ST
-sst             266/tcp     # SCSI on ST
-#                          Donald D. Woelz <don at genroco.com>
-td-service      267/udp     # Tobit David Service Layer
-td-service      267/tcp     # Tobit David Service Layer
-td-replica      268/udp     # Tobit David Replica
-td-replica      268/tcp     # Tobit David Replica
-#                          Franz-Josef Leuders <development at tobit.com>
-#               269-279    Unassigned
-http-mgmt       280/udp     # http-mgmt
-http-mgmt       280/tcp     # http-mgmt
-#                          Adrian Pell
-#                          <PELL_ADRIAN/HP-UnitedKingdom_om6 at hplb.hpl.hp.com>
-personal-link	281/udp     # Personal Link
-personal-link   281/tcp	    # Personal Link
-#			   Dan Cummings <doc at cnr.com>
-cableport-ax	282/udp     # Cable Port A/X
-cableport-ax	282/tcp     # Cable Port A/X
-#			   Craig Langfahl <Craig_J_Langfahl at ccm.ch.intel.com>
-rescap		283/udp     # rescap
-rescap		283/tcp     # rescap
-#			   Paul Hoffman <phoffman at imc.org>
-corerjd		284/udp     # corerjd
-corerjd		284/tcp     # corerjd
-#			   Chris Thornhill <cjt at corenetworks.com>
-#               285        Unassigned  
-fxp-1           286/udp     # FXP-1
-fxp-1           286/tcp     # FXP-1
-#                          James Darnall <jim at cennoid.com>   
-k-block         287/udp     # K-BLOCK
-k-block         287/tcp     # K-BLOCK
-#                          Simon P Jackson <jacko at kring.co.uk>    
-#               288-307    Unassigned
-novastorbakcup	308/udp     # Novastor Backup
-novastorbakcup	308/tcp     # Novastor Backup
-#			   Brian Dickman <brian at novastor.com>
-entrusttime     309/udp     # EntrustTime    
-entrusttime     309/tcp     # EntrustTime    
-#                          Peter Whittaker <pww at entrust.com>
-bhmds 		310/udp     # bhmds
-bhmds		310/tcp     # bhmds
-#			   John Kelly <johnk at bellhow.com>
-asip-webadmin	311/udp     # AppleShare IP WebAdmin
-asip-webadmin	311/tcp     # AppleShare IP WebAdmin
-#			   Ann Huang <annhuang at apple.com>
-vslmp		312/udp     # VSLMP
-vslmp		312/tcp     # VSLMP
-#			   Gerben Wierda <Gerben_Wierda at RnA.nl>
-magenta-logic	313/udp	    # Magenta Logic
-magenta-logic	313/tcp     # Magenta Logic
-#			   Karl Rousseau <kr at netfusion.co.uk>
-opalis-robot	314/udp     # Opalis Robot
-opalis-robot	314/tcp     # Opalis Robot
-#			   Laurent Domenech, Opalis <ldomenech at opalis.com>
-dpsi		315/udp     # DPSI
-dpsi		315/tcp     # DPSI
-#			   Tony Scamurra <Tony at DesktopPaging.com>
-decauth		316/udp     # decAuth
-decauth		316/tcp     # decAuth
-#			   Michael Agishtein <misha at unx.dec.com>
-zannet		317/udp     # Zannet
-zannet		317/tcp     # Zannet
-#			   Zan Oliphant <zan at accessone.com>
-pkix-timestamp	318/udp     # PKIX TimeStamp
-pkix-timestamp	318/tcp     # PKIX TimeStamp
-#			   Robert Zuccherato <robert.zuccherato at entrust.com>
-ptp-event	319/udp     # PTP Event
-ptp-event	319/tcp     # PTP Event
-ptp-general	320/udp     # PTP General
-ptp-general	320/tcp     # PTP General
-#			   John Eidson <eidson at hpl.hp.com>
-pip		321/udp     # PIP
-pip		321/tcp     # PIP
-#			   Gordon Mohr <gojomo at usa.net>
-rtsps		322/udp     # RTSPS
-rtsps		322/tcp     # RTSPS
-#			   Anders Klemets <anderskl at microsoft.com>
-#               323-332    Unassigned
-texar		333/udp     # Texar Security Port
-texar		333/tcp     # Texar Security Port
-#			   Eugen Bacic <ebacic at texar.com>
-#		334-343    Unassigned
-pdap            344/udp     # Prospero Data Access Protocol
-pdap            344/tcp     # Prospero Data Access Protocol
-#                          B. Clifford Neuman <bcn at isi.edu>
-pawserv         345/udp     # Perf Analysis Workbench
-pawserv         345/tcp     # Perf Analysis Workbench
-zserv           346/udp     # Zebra server
-zserv           346/tcp     # Zebra server
-fatserv         347/udp     # Fatmen Server
-fatserv         347/tcp     # Fatmen Server
-csi-sgwp        348/udp     # Cabletron Management Protocol
-csi-sgwp        348/tcp     # Cabletron Management Protocol
-mftp            349/udp     # mftp
-mftp            349/tcp     # mftp
-#                          Dave Feinleib <davefe at microsoft.com>
-matip-type-a	350/udp     # MATIP Type A
-matip-type-a    350/tcp     # MATIP Type A
-matip-type-b    351/udp     # MATIP Type B
-matip-type-b    351/tcp     # MATIP Type B
-#			   Alain Robert <arobert at par.sita.int>
-# The following entry records an unassigned but widespread use
-bhoetty		351/udp     # bhoetty
-bhoetty		351/tcp	    # bhoetty (added 5/21/97)
-#			   John Kelly <johnk at bellhow.com>
-dtag-ste-sb	352/udp	    # DTAG
-dtag-ste-sb	352/tcp	    # DTAG (assigned long ago)
-#			   Ruediger Wald <wald at ez-darmstadt.telekom.de>
-# The following entry records an unassigned but widespread use
-bhoedap4	352/udp     # bhoedap4
-bhoedap4	352/tcp     # bhoedap4 (added 5/21/97)
-#			   John Kelly <johnk at bellhow.com>
-ndsauth		353/udp     # NDSAUTH
-ndsauth		353/tcp     # NDSAUTH
-#			   Jayakumar Ramalingam <jayakumar at novell.com>
-bh611		354/udp     # bh611
-bh611		354/tcp	    # bh611
-#			   John Kelly <johnk at bellhow.com>
-datex-asn	355/udp     # DATEX-ASN
-datex-asn	355/tcp	    # DATEX-ASN
-#			   Kenneth Vaughn <kvaughn at mail.viggen.com>
-cloanto-net-1	356/udp     # Cloanto Net 1
-cloanto-net-1	356/tcp     # Cloanto Net 1
-#			   Michael Battilana <mcb-iana at cloanto.com>
-bhevent		357/udp     # bhevent
-bhevent		357/tcp	    # bhevent
-#			   John Kelly <johnk at bellhow.com>
-shrinkwrap	358/udp     # Shrinkwrap
-shrinkwrap	358/tcp     # Shrinkwrap
-#			   Bill Simpson <wsimpson at greendragon.com>
-nsrmp      	359/udp     # Network Security Risk Management Protocol
-nsrmp	        359/tcp     # Network Security Risk Management Protocol
-#			   Eric Jacksch <jacksch at tenebris.ca>
-scoi2odialog	360/udp     # scoi2odialog
-scoi2odialog	360/tcp     # scoi2odialog
-#			   Keith Petley <keithp at sco.COM>
-semantix	361/udp     # Semantix
-semantix	361/tcp     # Semantix
-#		   	   Semantix <xsSupport at semantix.com>
-srssend		362/udp     # SRS Send
-srssend		362/tcp     # SRS Send
-#			   Curt Mayer <curt at emergent.com>
-rsvp_tunnel	363/udp     # RSVP Tunnel
-rsvp_tunnel	363/tcp     # RSVP Tunnel
-#			   Andreas Terzis <terzis at cs.ucla.edu>
-aurora-cmgr	364/udp     # Aurora CMGR
-aurora-cmgr	364/tcp     # Aurora CMGR
-#			   Philip Budne <budne at auroratech.com>
-dtk		365/udp     # DTK
-dtk		365/tcp     # DTK
-#			   Fred Cohen <fc at all.net>
-odmr		366/udp     # ODMR
-odmr		366/tcp     # ODMR
-#			   Randall Gellens <randy at qualcomm.com>
-mortgageware	367/udp     # MortgageWare
-mortgageware	367/tcp     # MortgageWare
-#			   Ole Hellevik <oleh at interlinq.com>
-qbikgdp		368/udp     # QbikGDP
-qbikgdp		368/tcp     # QbikGDP
-#			   Adrien de Croy <adrien at qbik.com>
-rpc2portmap	369/udp     # rpc2portmap
-rpc2portmap	369/tcp     # rpc2portmap 
-codaauth2	370/udp     # codaauth2
-codaauth2	370/tcp     # codaauth2
-#			   Robert Watson <robert at cyrus.watson.org>
-clearcase       371/udp     # Clearcase
-clearcase       371/tcp     # Clearcase
-#                          Dave LeBlang <leglang at atria.com>
-ulistproc       372/udp     # ListProcessor
-ulistproc       372/tcp     # ListProcessor
-#                          Anastasios Kotsikonas <tasos at cs.bu.edu>
-legent-1        373/udp     # Legent Corporation
-legent-1        373/tcp     # Legent Corporation
-legent-2        374/udp     # Legent Corporation
-legent-2        374/tcp     # Legent Corporation
-#                          Keith Boyce <---none--->
-hassle          375/udp     # Hassle
-hassle          375/tcp     # Hassle
-#                          Reinhard Doelz <doelz at comp.bioz.unibas.ch>
-nip             376/udp     # Amiga Envoy Network Inquiry Proto
-nip             376/tcp     # Amiga Envoy Network Inquiry Proto   
-#                          Heinz Wrobel <hwrobel at gmx.de>
-tnETOS          377/udp     # NEC Corporation
-tnETOS          377/tcp     # NEC Corporation
-dsETOS          378/udp     # NEC Corporation
-dsETOS          378/tcp     # NEC Corporation
-#                          Tomoo Fujita <tf at arc.bs1.fc.nec.co.jp>
-is99c           379/udp     # TIA/EIA/IS-99 modem client
-is99c           379/tcp     # TIA/EIA/IS-99 modem client
-is99s           380/udp     # TIA/EIA/IS-99 modem server
-is99s           380/tcp     # TIA/EIA/IS-99 modem server
-#                          Frank Quick <fquick at qualcomm.com>
-hp-collector    381/udp     # hp performance data collector
-hp-collector    381/tcp     # hp performance data collector
-hp-managed-node 382/udp     # hp performance data managed node
-hp-managed-node 382/tcp     # hp performance data managed node
-hp-alarm-mgr    383/udp     # hp performance data alarm manager
-hp-alarm-mgr    383/tcp     # hp performance data alarm manager
-#                          Frank Blakely <frankb at hpptc16.rose.hp.com>
-arns            384/udp     # A Remote Network Server System
-arns            384/tcp     # A Remote Network Server System
-#                          David Hornsby <djh at munnari.OZ.AU>
-ibm-app         385/udp     # IBM Application
-ibm-app         385/tcp     # IBM Application
-#                          Lisa Tomita <---none--->
-asa             386/udp     # ASA Message Router Object Def.
-asa             386/tcp     # ASA Message Router Object Def.
-#                          Steve Laitinen <laitinen at brutus.aa.ab.com>
-aurp            387/udp     # Appletalk Update-Based Routing Pro.
-aurp            387/tcp     # Appletalk Update-Based Routing Pro.
-#                          Chris Ranch <cranch at novell.com>
-unidata-ldm     388/udp     # Unidata LDM 
-unidata-ldm     388/tcp     # Unidata LDM  
-#                          Glenn Davis <support at unidata.ucar.edu>
-ldap            389/udp     # Lightweight Directory Access Protocol
-ldap            389/tcp     # Lightweight Directory Access Protocol
-#                          Tim Howes <Tim.Howes at terminator.cc.umich.edu>
-uis             390/udp     # UIS
-uis             390/tcp     # UIS
-#                          Ed Barron <---none---> 
-synotics-relay  391/udp     # SynOptics SNMP Relay Port
-synotics-relay  391/tcp     # SynOptics SNMP Relay Port
-synotics-broker 392/udp     # SynOptics Port Broker Port
-synotics-broker 392/tcp     # SynOptics Port Broker Port
-#                          Illan Raab <iraab at synoptics.com>
-meta5           393/udp     # Meta5
-meta5           393/tcp     # Meta5
-#                          Jim Kanzler <jim.kanzler at meta5.com>
-embl-ndt        394/udp     # EMBL Nucleic Data Transfer
-embl-ndt        394/tcp     # EMBL Nucleic Data Transfer
-#                          Peter Gad <peter at bmc.uu.se>
-netcp           395/udp     # NETscout Control Protocol
-netcp           395/tcp     # NETscout Control Protocol
-#                          Anil Singhal <---none--->
-netware-ip      396/udp     # Novell Netware over IP
-netware-ip      396/tcp     # Novell Netware over IP
-mptn            397/udp     # Multi Protocol Trans. Net.
-mptn            397/tcp     # Multi Protocol Trans. Net.
-#                          Soumitra Sarkar <sarkar at vnet.ibm.com>
-kryptolan       398/udp     # Kryptolan
-kryptolan       398/tcp     # Kryptolan
-#                          Peter de Laval <pdl at sectra.se>
-iso-tsap-c2     399/udp     # ISO Transport Class 2 Non-Control over UDP
-iso-tsap-c2     399/tcp     # ISO Transport Class 2 Non-Control over TCP
-#                          Yanick Pouffary <pouffary at taec.enet.dec.com>
-work-sol        400/udp     # Workstation Solutions
-work-sol        400/tcp     # Workstation Solutions
-#                          Jim Ward <jimw at worksta.com>
-ups             401/udp     # Uninterruptible Power Supply
-ups             401/tcp     # Uninterruptible Power Supply
-#                          Charles Bennett <chuck at benatong.com>
-genie           402/udp     # Genie Protocol
-genie           402/tcp     # Genie Protocol
-#                          Mark Hankin <---none--->
-decap           403/udp     # decap
-decap           403/tcp     # decap
-nced            404/udp     # nced
-nced            404/tcp     # nced
-ncld            405/udp     # ncld
-ncld            405/tcp     # ncld
-#                          Richard Jones <---none--->
-imsp            406/udp     # Interactive Mail Support Protocol
-imsp            406/tcp     # Interactive Mail Support Protocol
-#                          John Myers <jgm+ at cmu.edu>
-timbuktu        407/udp     # Timbuktu
-timbuktu        407/tcp     # Timbuktu
-#                          Marc Epard <marc at netopia.com>
-prm-sm          408/udp     # Prospero Resource Manager Sys. Man.
-prm-sm          408/tcp     # Prospero Resource Manager Sys. Man.
-prm-nm          409/udp     # Prospero Resource Manager Node Man.
-prm-nm          409/tcp     # Prospero Resource Manager Node Man.
-#                          B. Clifford Neuman <bcn at isi.edu>
-decladebug      410/udp     # DECLadebug Remote Debug Protocol
-decladebug      410/tcp     # DECLadebug Remote Debug Protocol
-#                          Anthony Berent <anthony.berent at reo.mts.dec.com>
-rmt             411/udp     # Remote MT Protocol
-rmt             411/tcp     # Remote MT Protocol
-#                          Peter Eriksson <pen at lysator.liu.se>
-synoptics-trap  412/udp     # Trap Convention Port
-synoptics-trap  412/tcp     # Trap Convention Port
-#                          Illan Raab <iraab at synoptics.com>
-smsp            413/udp     # Storage Management Services Protocol
-smsp            413/tcp     # Storage Management Services Protocol
-#                          Murthy Srinivas <murthy at novell.com>
-infoseek        414/udp     # InfoSeek
-infoseek        414/tcp     # InfoSeek
-#                          Steve Kirsch <stk at infoseek.com>
-bnet            415/udp     # BNet
-bnet            415/tcp     # BNet
-#                          Jim Mertz <JMertz+RV09 at rvdc.unisys.com>
-silverplatter   416/udp     # Silverplatter
-silverplatter   416/tcp     # Silverplatter
-#                          Peter Ciuffetti <petec at silverplatter.com>
-onmux           417/udp     # Onmux
-onmux           417/tcp     # Onmux
-#                          Stephen Hanna <hanna at world.std.com>
-hyper-g         418/udp     # Hyper-G
-hyper-g         418/tcp     # Hyper-G
-#                          Frank Kappe <fkappe at iicm.tu-graz.ac.at>
-ariel1          419/udp     # Ariel 1
-ariel1          419/tcp     # Ariel 1
-#                          Joel Karafin <jkarafin at infotrieve.com>
-smpte           420/udp     # SMPTE
-smpte           420/tcp     # SMPTE
-#                          Si Becker <71362.22 at CompuServe.COM>
-ariel2          421/udp     # Ariel 2
-ariel2          421/tcp     # Ariel 2
-ariel3          422/udp     # Ariel 3 
-ariel3          422/tcp     # Ariel 3
-#                          Joel Karafin <jkarafin at infotrieve.com>
-opc-job-start   423/udp     # IBM Operations Planning and Control Start
-opc-job-start   423/tcp     # IBM Operations Planning and Control Start
-opc-job-track   424/udp     # IBM Operations Planning and Control Track
-opc-job-track   424/tcp     # IBM Operations Planning and Control Track
-#                          Conny Larsson  <cocke at VNET.IBM.COM>
-icad-el         425/udp     # ICAD
-icad-el         425/tcp     # ICAD
-#		           Larry Stone	<lcs at icad.com>
-smartsdp        426/udp     # smartsdp
-smartsdp        426/tcp     # smartsdp
-#                          Alexander Dupuy <dupuy at smarts.com>
-svrloc          427/udp     # Server Location
-svrloc          427/tcp     # Server Location
-#                          <veizades at ftp.com>
-ocs_cmu         428/udp     # OCS_CMU
-ocs_cmu         428/tcp     # OCS_CMU
-ocs_amu         429/udp     # OCS_AMU
-ocs_amu         429/tcp     # OCS_AMU
-#                          Florence Wyman <wyman at peabody.plk.af.mil>
-utmpsd          430/udp     # UTMPSD
-utmpsd          430/tcp     # UTMPSD
-utmpcd          431/udp     # UTMPCD
-utmpcd          431/tcp     # UTMPCD
-iasd            432/udp     # IASD  
-iasd            432/tcp     # IASD  
-#                          Nir Baroz <nbaroz at encore.com>
-nnsp            433/udp     # NNSP
-nnsp            433/tcp     # NNSP
-#                          Rob Robertson <rob at gangrene.berkeley.edu>
-mobileip-agent  434/udp     # MobileIP-Agent
-mobileip-agent  434/tcp     # MobileIP-Agent
-mobilip-mn      435/udp     # MobilIP-MN
-mobilip-mn      435/tcp     # MobilIP-MN
-#                          Kannan Alagappan <kannan at sejour.lkg.dec.com>
-dna-cml         436/udp     # DNA-CML   
-dna-cml         436/tcp     # DNA-CML   
-#                          Dan Flowers <flowers at smaug.lkg.dec.com>
-comscm          437/udp     # comscm
-comscm          437/tcp     # comscm
-#                          Jim Teague <teague at zso.dec.com>
-dsfgw           438/udp     # dsfgw
-dsfgw           438/tcp     # dsfgw
-#                          Andy McKeen <mckeen at osf.org>
-dasp            439/udp     # dasp      tommy at inlab.m.eunet.de
-dasp            439/tcp     # dasp      Thomas Obermair
-#                          Thomas Obermair <tommy at inlab.m.eunet.de>
-sgcp            440/udp     # sgcp      
-sgcp            440/tcp     # sgcp      
-#                          Marshall Rose <mrose at dbc.mtview.ca.us>
-decvms-sysmgt   441/udp     # decvms-sysmgt
-decvms-sysmgt   441/tcp     # decvms-sysmgt
-#                          Lee Barton <barton at star.enet.dec.com>
-cvc_hostd       442/udp     # cvc_hostd
-cvc_hostd       442/tcp     # cvc_hostd
-#                          Bill Davidson <billd at equalizer.cray.com>
-https           443/udp     # http protocol over TLS/SSL
-https           443/tcp     # http protocol over TLS/SSL
-#                          Kipp E.B. Hickman <kipp at mcom.com>
-snpp            444/udp     # Simple Network Paging Protocol
-snpp            444/tcp     # Simple Network Paging Protocol
-#                          [RFC1568]
-microsoft-ds    445/udp     # Microsoft-DS
-microsoft-ds    445/tcp     # Microsoft-DS
-#                          Pradeep Bahl <pradeepb at microsoft.com>
-ddm-rdb         446/udp     # DDM-RDB
-ddm-rdb         446/tcp     # DDM-RDB
-ddm-dfm         447/udp     # DDM-RFM
-ddm-dfm         447/tcp     # DDM-RFM
-#                          Jan David Fisher <jdfisher at VNET.IBM.COM>
-ddm-ssl         448/udp     # DDM-SSL
-ddm-ssl         448/tcp     # DDM-SSL
-#			   Steve Ritland <srr at vnet.ibm.com>
-as-servermap    449/udp     # AS Server Mapper
-as-servermap    449/tcp     # AS Server Mapper
-#                          Barbara Foss <BGFOSS at rchvmv.vnet.ibm.com>
-tserver         450/udp     # Computer Supported Telecomunication Applications
-tserver         450/tcp     # Computer Supported Telecomunication Applications
-#                          Harvey S. Schultz <harvey at acm.org>
-sfs-smp-net     451/udp     # Cray Network Semaphore server
-sfs-smp-net     451/tcp     # Cray Network Semaphore server
-sfs-config	452/udp     # Cray SFS config server
-sfs-config	452/tcp     # Cray SFS config server
-#                          Walter Poxon <wdp at ironwood.cray.com>
-creativeserver  453/udp     # CreativeServer
-creativeserver  453/tcp     # CreativeServer
-contentserver   454/udp     # ContentServer
-contentserver   454/tcp     # ContentServer
-creativepartnr  455/udp     # CreativePartnr
-creativepartnr  455/tcp     # CreativePartnr
-#                          Jesus Ortiz <jesus_ortiz at emotion.com>
-macon-udp       456/udp     # macon-udp
-macon-tcp       456/tcp     # macon-tcp
-#                          Yoshinobu Inoue
-#                          <shin at hodaka.mfd.cs.fujitsu.co.jp>
-scohelp         457/udp     # scohelp
-scohelp         457/tcp     # scohelp
-#                          Faith Zack <faithz at sco.com>
-appleqtc        458/udp     # apple quick time
-appleqtc        458/tcp     # apple quick time
-#                          Murali Ranganathan 
-#                          <murali_ranganathan at quickmail.apple.com>
-ampr-rcmd       459/udp     # ampr-rcmd              
-ampr-rcmd       459/tcp     # ampr-rcmd              
-#                          Rob Janssen <rob at sys3.pe1chl.ampr.org>
-skronk          460/udp     # skronk
-skronk          460/tcp     # skronk
-#                          Henry Strickland <strick at yak.net>
-datasurfsrv     461/udp     # DataRampSrv
-datasurfsrv     461/tcp     # DataRampSrv
-datasurfsrvsec  462/udp     # DataRampSrvSec
-datasurfsrvsec  462/tcp     # DataRampSrvSec
-#                          Diane Downie <downie at jibe.MV.COM>
-alpes           463/udp     # alpes
-alpes           463/tcp     # alpes
-#                          Alain Durand <Alain.Durand at imag.fr>
-kpasswd         464/udp     # kpasswd
-kpasswd         464/tcp     # kpasswd
-#                          Theodore Ts'o <tytso at MIT.EDU>
-igmpv3lite      465/udp     # IGMP over UDP for SSM 
-urd             465/tcp     # URL Rendesvous Directory for SSM
-#                          Toerless Eckert <eckert at cisco.com>
-digital-vrc     466/udp     # digital-vrc
-digital-vrc     466/tcp     # digital-vrc
-#                          Peter Higginson <higginson at mail.dec.com>
-mylex-mapd      467/udp     # mylex-mapd
-mylex-mapd      467/tcp     # mylex-mapd
-#                          Gary Lewis <GaryL at hq.mylex.com>
-photuris        468/udp     # proturis
-photuris        468/tcp     # proturis
-#                          Bill Simpson <Bill.Simpson at um.cc.umich.edu>
-rcp             469/udp     # Radio Control Protocol
-rcp             469/tcp     # Radio Control Protocol
-#                          Jim Jennings +1-708-538-7241
-scx-proxy       470/udp     # scx-proxy
-scx-proxy       470/tcp     # scx-proxy
-#                          Scott Narveson <sjn at cray.com>
-mondex          471/udp     # Mondex
-mondex          471/tcp     # Mondex
-#                          Bill Reding <redingb at nwdt.natwest.co.uk>
-ljk-login       472/udp     # ljk-login
-ljk-login       472/tcp     # ljk-login
-#                          LJK Software, Cambridge, Massachusetts
-#                          <support at ljk.com>
-hybrid-pop      473/udp     # hybrid-pop
-hybrid-pop      473/tcp     # hybrid-pop
-#                          Rami Rubin <rami at hybrid.com>
-tn-tl-w2        474/udp     # tn-tl-w2
-tn-tl-w1        474/tcp     # tn-tl-w1
-#                          Ed Kress <eskress at thinknet.com>
-tcpnethaspsrv   475/udp     # tcpnethaspsrv
-tcpnethaspsrv   475/tcp     # tcpnethaspsrv
-#                          Charlie Hava <charlie at aladdin.co.il>
-tn-tl-fd1       476/udp     # tn-tl-fd1
-tn-tl-fd1       476/tcp     # tn-tl-fd1
-#                          Ed Kress <eskress at thinknet.com>
-ss7ns           477/udp     # ss7ns
-ss7ns           477/tcp     # ss7ns
-#                          Jean-Michel URSCH <ursch at taec.enet.dec.com>
-spsc            478/udp     # spsc
-spsc            478/tcp     # spsc
-#                          Mike Rieker <mikea at sp32.com>
-iafserver       479/udp     # iafserver
-iafserver       479/tcp     # iafserver
-iafdbase        480/udp     # iafdbase
-iafdbase        480/tcp     # iafdbase
-#                          ricky at solect.com <Rick Yazwinski>
-ph              481/udp     # Ph service
-ph              481/tcp     # Ph service
-#                          Roland Hedberg <Roland.Hedberg at umdac.umu.se>
-bgs-nsi         482/udp     # bgs-nsi
-bgs-nsi         482/tcp     # bgs-nsi
-#                          Jon Saperia <saperia at bgs.com>         
-ulpnet          483/udp     # ulpnet
-ulpnet          483/tcp     # ulpnet
-#                          Kevin Mooney <kevinm at bfs.unibol.com>
-integra-sme     484/udp     # Integra Software Management Environment
-integra-sme     484/tcp     # Integra Software Management Environment
-#                          Randall Dow <rand at randix.m.isr.de>
-powerburst      485/udp     # Air Soft Power Burst
-powerburst      485/tcp     # Air Soft Power Burst
-#                          <gary at airsoft.com>
-avian           486/udp     # avian
-avian           486/tcp     # avian
-#                          Robert Ullmann 
-#                          <Robert_Ullmann/CAM/Lotus.LOTUS at crd.lotus.com>
-saft            487/udp     # saft Simple Asynchronous File Transfer
-saft            487/tcp     # saft Simple Asynchronous File Transfer
-#                          Ulli Horlacher <framstag at rus.uni-stuttgart.de>
-gss-http        488/udp     # gss-http
-gss-http        488/tcp     # gss-http
-#                          Doug Rosenthal <rosenthl at krypton.einet.net>
-nest-protocol   489/udp     # nest-protocol
-nest-protocol   489/tcp     # nest-protocol
-#                          Gilles Gameiro <ggameiro at birdland.com>
-micom-pfs       490/udp     # micom-pfs
-micom-pfs       490/tcp     # micom-pfs
-#                          David Misunas <DMisunas at micom.com>
-go-login        491/udp     # go-login
-go-login        491/tcp     # go-login
-#                          Troy Morrison <troy at graphon.com>
-ticf-1          492/udp     # Transport Independent Convergence for FNA
-ticf-1          492/tcp     # Transport Independent Convergence for FNA
-ticf-2          493/udp     # Transport Independent Convergence for FNA
-ticf-2          493/tcp     # Transport Independent Convergence for FNA
-#                          Mamoru Ito <Ito at pcnet.ks.pfu.co.jp>
-pov-ray         494/udp     # POV-Ray
-pov-ray         494/tcp     # POV-Ray
-#                          POV-Team Co-ordinator 
-#                          <iana-port.remove-spamguard at povray.org>
-intecourier     495/udp     # intecourier
-intecourier     495/tcp     # intecourier
-#                          Steve Favor <sfavor at tigger.intecom.com>
-pim-rp-disc     496/udp     # PIM-RP-DISC
-pim-rp-disc     496/tcp     # PIM-RP-DISC
-#                          Dino Farinacci <dino at cisco.com>
-dantz           497/udp     # dantz
-dantz           497/tcp     # dantz
-#                          Richard Zulch <richard_zulch at dantz.com>
-siam            498/udp     # siam
-siam            498/tcp     # siam
-#                          Philippe Gilbert <pgilbert at cal.fr>
-iso-ill         499/udp     # ISO ILL Protocol
-iso-ill         499/tcp     # ISO ILL Protocol
-#                          Mark H. Needleman <markn at sirsi.com>
-isakmp          500/udp     # isakmp
-isakmp          500/tcp     # isakmp
-#                          Mark Schertler <mjs at tycho.ncsc.mil>
-stmf            501/udp     # STMF
-stmf            501/tcp     # STMF
-#                          Alan Ungar <aungar at farradyne.com>
-asa-appl-proto  502/udp     # asa-appl-proto
-asa-appl-proto  502/tcp     # asa-appl-proto
-#                          Dennis Dube <ddube at modicon.com>
-intrinsa        503/udp     # Intrinsa
-intrinsa        503/tcp     # Intrinsa
-#                          Robert Ford <robert at intrinsa.com>
-citadel         504/udp     # citadel
-citadel         504/tcp     # citadel
-#                          Art Cancro <ajc at uncnsrd.mt-kisco.ny.us>
-mailbox-lm      505/udp     # mailbox-lm
-mailbox-lm      505/tcp     # mailbox-lm
-#                          Beverly Moody <Beverly_Moody at stercomm.com>
-ohimsrv         506/udp     # ohimsrv
-ohimsrv         506/tcp     # ohimsrv
-#                          Scott Powell <spowell at openhorizon.com>
-crs             507/udp     # crs
-crs             507/tcp     # crs
-#                          Brad Wright <bradwr at microsoft.com>
-xvttp           508/udp     # xvttp
-xvttp           508/tcp     # xvttp
-#                          Keith J. Alphonso <alphonso at ncs-ssc.com>
-snare           509/udp     # snare
-snare           509/tcp     # snare
-#                          Dennis Batchelder <dennis at capres.com>
-fcp             510/udp     # FirstClass Protocol
-fcp             510/tcp     # FirstClass Protocol
-#                          Mike Marshburn <paul at softarc.com>
-passgo          511/udp     # PassGo
-passgo          511/tcp     # PassGo
-#                          John Rainford <jrainford at passgo.com>
-exec            512/tcp     # remote process execution;
-#                          authentication performed using
-#                          passwords and UNIX login names
-comsat          512/udp biff # 
-#                          of new mail received; currently
-#                          receives messages only from 
-#                          processes on the same machine
-login           513/tcp     # remote login a la telnet;
-#                          automatic authentication performed
-#                          based on priviledged port numbers
-#                          and distributed data bases which
-#                          identify "authentication domains"
-who             513/udp     # maintains data bases showing who's
-#                          logged in to machines on a local 
-#                          net and the load average of the
-#                          machine
-shell           514/tcp     # cmd
-#                          like exec, but automatic authentication 
-#                          is performed as for login server
-syslog          514/udp # 
-printer         515/udp     # spooler
-printer         515/tcp     # spooler
-videotex        516/udp     # videotex
-videotex        516/tcp     # videotex
-#                          Daniel Mavrakis <system at venus.mctel.fr>
-talk            517/tcp     # like tenex link, but across
-#                          machine - unfortunately, doesn't
-#                          use link protocol (this is actually
-#                          just a rendezvous port from which a
-#                          tcp connection is established)
-talk            517/udp     # like tenex link, but across
-#                          machine - unfortunately, doesn't
-#                          use link protocol (this is actually
-#                          just a rendezvous port from which a
-#                          tcp connection is established)
-ntalk           518/udp # 
-ntalk           518/tcp # 
-utime           519/udp     # unixtime
-utime           519/tcp     # unixtime
-router          520/udp     # local routing process (on site);
-efs             520/tcp     # extended file name server
-#                          uses variant of Xerox NS routing
-#                          information protocol - RIP
-ripng           521/udp     # ripng
-ripng           521/tcp     # ripng
-#                          Robert E. Minnear <minnear at ipsilon.com>
-ulp             522/udp     # ULP    
-ulp             522/tcp     # ULP    
-#                          Max Morris <maxm at MICROSOFT.com>
-ibm-db2         523/udp     # IBM-DB2
-ibm-db2         523/tcp     # IBM-DB2
-#                          Peter Pau <pau at VNET.IBM.COM>
-ncp             524/udp     # NCP    
-ncp             524/tcp     # NCP
-#                          Don Provan <donp at sjf.novell.com>
-timed           525/udp     # timeserver
-timed  	        525/tcp     # timeserver
-tempo	        526/udp     # newdate
-tempo	        526/tcp     # newdate
-#                          Unknown
-stx             527/udp     # Stock IXChange
-stx             527/tcp     # Stock IXChange
-custix          528/udp     # Customer IXChange
-custix          528/tcp     # Customer IXChange
-#                          Ferdi Ladeira <ferdi.ladeira at ixchange.com> 
-irc-serv        529/udp     # IRC-SERV
-irc-serv        529/tcp     # IRC-SERV
-#                          Brian Tackett <cym at acrux.net>
-courier         530/udp     # rpc
-courier         530/tcp     # rpc
-conference      531/udp     # chat
-conference      531/tcp     # chat
-netnews         532/udp     # readnews
-netnews         532/tcp     # readnews
-netwall	        533/udp     # for emergency broadcasts
-netwall	        533/tcp     # for emergency broadcasts
-mm-admin        534/udp     # MegaMedia Admin
-mm-admin        534/tcp     # MegaMedia Admin
-#                          Andreas Heidemann <a.heidemann at ais-gmbh.de>
-iiop            535/udp     # iiop
-iiop            535/tcp     # iiop
-#                          Jeff M.Michaud <michaud at zk3.dec.com>
-opalis-rdv      536/udp     # opalis-rdv
-opalis-rdv      536/tcp     # opalis-rdv
-#                          Laurent Domenech <ldomenech at opalis.com>
-nmsp            537/udp     # Networked Media Streaming Protocol
-nmsp            537/tcp     # Networked Media Streaming Protocol
-#                          Paul Santinelli Jr. <psantinelli at narrative.com>
-gdomap          538/udp     # gdomap
-gdomap          538/tcp     # gdomap
-#                          Richard Frith-Macdonald <richard at brainstorm.co.uk>
-apertus-ldp     539/udp     # Apertus Technologies Load Determination
-apertus-ldp     539/tcp     # Apertus Technologies Load Determination
-uucp	        540/udp     # uucpd		
-uucp	        540/tcp     # uucpd		
-uucp-rlogin     541/udp     # uucp-rlogin
-uucp-rlogin     541/tcp     # uucp-rlogin  
-#                          Stuart Lynne <sl at wimsey.com>
-commerce        542/udp     # commerce
-commerce        542/tcp     # commerce
-#                          Randy Epstein <repstein at host.net>
-klogin          543/udp # 
-klogin          543/tcp # 
-kshell 	        544/udp     # krcmd
-kshell 	        544/tcp     # krcmd
-appleqtcsrvr    545/udp     # appleqtcsrvr
-appleqtcsrvr    545/tcp     # appleqtcsrvr
-#                          Murali Ranganathan 
-#                          <Murali_Ranganathan at quickmail.apple.com>
-dhcpv6-client   546/udp     # DHCPv6 Client
-dhcpv6-client   546/tcp     # DHCPv6 Client
-dhcpv6-server   547/udp     # DHCPv6 Server
-dhcpv6-server   547/tcp     # DHCPv6 Server
-#                          Jim Bound <bound at zk3.dec.com>
-afpovertcp      548/udp     # AFP over TCP
-afpovertcp      548/tcp     # AFP over TCP
-#                          Leland Wallace <randall at apple.com>
-idfp            549/udp     # IDFP
-idfp            549/tcp     # IDFP
-#                          Ramana Kovi <ramana at kovi.com>
-new-rwho        550/udp     # new-who
-new-rwho        550/tcp     # new-who
-cybercash       551/udp     # cybercash
-cybercash       551/tcp     # cybercash
-#                          Donald E. Eastlake 3rd <dee at cybercash.com>
-devshr-nts      552/udp     # DeviceShare
-devshr-nts      552/tcp     # DeviceShare
-#                          Benjamin Rosenberg <brosenberg at advsyscon.com>
-pirp            553/udp     # pirp
-pirp            553/tcp     # pirp
-#                          D. J. Bernstein <djb at silverton.berkeley.edu>
-rtsp            554/udp     # Real Time Stream Control Protocol
-rtsp            554/tcp     # Real Time Stream Control Protocol
-#                          Rob Lanphier <robla at prognet.com>
-dsf             555/udp # 
-dsf             555/tcp # 
-remotefs        556/udp     # rfs server
-remotefs        556/tcp     # rfs server
-openvms-sysipc  557/udp     # openvms-sysipc
-openvms-sysipc  557/tcp     # openvms-sysipc
-#                          Alan Potter <potter at movies.enet.dec.com>
-sdnskmp         558/udp     # SDNSKMP
-sdnskmp         558/tcp     # SDNSKMP
-teedtap         559/udp     # TEEDTAP
-teedtap         559/tcp     # TEEDTAP
-#                          Mort Hoffman <hoffman at mail.ndhm.gtegsc.com>
-rmonitor        560/udp     # rmonitord
-rmonitor        560/tcp     # rmonitord
-monitor         561/udp # 
-monitor         561/tcp # 
-chshell         562/udp     # chcmd
-chshell         562/tcp     # chcmd
-nntps           563/udp     # nntp protocol over TLS/SSL (was snntp)
-nntps           563/tcp     # nntp protocol over TLS/SSL (was snntp)
-#                          Kipp E.B. Hickman <kipp at netscape.com>
-9pfs            564/udp     # plan 9 file service
-9pfs            564/tcp     # plan 9 file service
-whoami          565/udp     # whoami
-whoami          565/tcp     # whoami
-streettalk      566/udp     # streettalk
-streettalk      566/tcp     # streettalk
-banyan-rpc      567/udp     # banyan-rpc
-banyan-rpc      567/tcp     # banyan-rpc
-#                          Tom Lemaire <toml at banyan.com>
-ms-shuttle      568/udp     # microsoft shuttle
-ms-shuttle      568/tcp     # microsoft shuttle
-#                          Rudolph Balaz <rudolphb at microsoft.com>
-ms-rome         569/udp     # microsoft rome
-ms-rome         569/tcp     # microsoft rome
-#                          Rudolph Balaz <rudolphb at microsoft.com>
-meter           570/udp     # demon
-meter           570/tcp     # demon
-meter	        571/udp     # udemon
-meter	        571/tcp     # udemon
-sonar           572/udp     # sonar
-sonar           572/tcp     # sonar
-#                          Keith Moore <moore at cs.utk.edu>
-banyan-vip      573/udp     # banyan-vip
-banyan-vip      573/tcp     # banyan-vip
-#                          Denis Leclerc <DLeclerc at banyan.com>
-ftp-agent       574/udp     # FTP Software Agent System
-ftp-agent       574/tcp     # FTP Software Agent System
-#                          Michael S. Greenberg <arnoff at ftp.com>
-vemmi           575/udp     # VEMMI
-vemmi           575/tcp     # VEMMI
-#                          Daniel Mavrakis <mavrakis at mctel.fr>
-ipcd            576/udp     # ipcd
-ipcd            576/tcp     # ipcd
-vnas            577/udp     # vnas
-vnas            577/tcp     # vnas
-ipdd            578/udp     # ipdd
-ipdd            578/tcp     # ipdd
-#                          Jay Farhat <jfarhat at ipass.com>
-decbsrv		579/udp     # decbsrv
-decbsrv		579/tcp     # decbsrv
-#			   Rudi Martin <movies::martin"@movies.enet.dec.com>
-sntp-heartbeat  580/udp	    # SNTP HEARTBEAT
-sntp-heartbeat  580/tcp     # SNTP HEARTBEAT
-#			   Louis Mamakos <louie at uu.net>
-bdp		581/udp	    # Bundle Discovery Protocol
-bdp		581/tcp     # Bundle Discovery Protocol
-#			   Gary Malkin <gmalkin at xylogics.com>
-scc-security    582/udp	    # SCC Security
-scc-security    582/tcp     # SCC Security
-#			   Prashant Dholakia <prashant at semaphorecom.com>
-philips-vc	583/udp     # Philips Video-Conferencing
-philips-vc	583/tcp     # Philips Video-Conferencing
-#			   Janna Chang <janna at pmc.philips.com>
-keyserver	584/udp	    # Key Server
-keyserver	584/tcp     # Key Server
-#			   Gary Howland <gary at systemics.com>
-imap4-ssl	585/udp     # IMAP4+SSL (use 993 instead)
-imap4-ssl	585/tcp     # IMAP4+SSL (use 993 instead)
-#			   Terry Gray <gray at cac.washington.edu>
-#               Use of 585 is not recommended, use 993 instead
-password-chg	586/udp	    # Password Change
-password-chg 	586/tcp     # Password Change
-submission	587/udp     # Submission
-submission	587/tcp     # Submission
-#			   Randy Gellens <randy at qualcomm.com>
-cal		588/udp     # CAL
-cal		588/tcp     # CAL
-#			   Myron Hattig <Myron_Hattig at ccm.jf.intel.com>
-eyelink		589/udp	    # EyeLink
-eyelink		589/tcp     # EyeLink
-#			   Dave Stampe <dstampe at psych.toronto.edu>
-tns-cml		590/udp     # TNS CML
-tns-cml		590/tcp     # TNS CML
-#			   Jerome Albin <albin at taec.enet.dec.com>
-http-alt	591/udp     # FileMaker, Inc. - HTTP Alternate (see Port 80)
-http-alt	591/tcp     # FileMaker, Inc. - HTTP Alternate (see Port 80)
-#			   Clay Maeckel <clay_maeckel at filemaker.com>
-eudora-set	592/udp	    # Eudora Set
-eudora-set	592/tcp     # Eudora Set
-#			   Randall Gellens <randy at qualcomm.com>
-http-rpc-epmap  593/udp     # HTTP RPC Ep Map
-http-rpc-epmap  593/tcp     # HTTP RPC Ep Map
-#			   Edward Reus <edwardr at microsoft.com>
-tpip		594/udp     # TPIP
-tpip		594/tcp     # TPIP
-#			   Brad Spear <spear at platinum.com>
-cab-protocol	595/udp     # CAB Protocol
-cab-protocol	595/tcp     # CAB Protocol
-#			   Winston Hetherington
-smsd            596/udp     # SMSD
-smsd            596/tcp     # SMSD
-#                          Wayne Barlow <web at unx.dec.com>
-ptcnameservice	597/udp     # PTC Name Service
-ptcnameservice	597/tcp     # PTC Name Service
-#                          Yuri Machkasov <yuri at ptc.com>
-sco-websrvrmg3	598/udp     # SCO Web Server Manager 3
-sco-websrvrmg3	598/tcp     # SCO Web Server Manager 3
-#                          Simon Baldwin <simonb at sco.com>
-acp             599/udp     # Aeolon Core Protocol
-acp             599/tcp     # Aeolon Core Protocol
-#                          Michael Alyn Miller <malyn at aeolon.com>
-ipcserver       600/udp     # Sun IPC server
-ipcserver       600/tcp     # Sun IPC server
-#                          Bill Schiefelbein <schief at aspen.cray.com>
-syslog-conn     601/udp     # Reliable Syslog Service
-syslog-conn     601/tcp     # Reliable Syslog Service
-#                          RFC 3195
-xmlrpc-beep     602/udp     # XML-RPC over BEEP
-xmlrpc-beep     602/tcp     # XML-RPC over BEEP
-#                          RFC3529 <ftp://ftp.isi.edu/in-notes/rfc3529.txt> March 2003
-idxp            603/udp     # IDXP
-idxp            603/tcp     # IDXP
-#                          RFC-ietf-idwg-beep-idxp-07.txt
-tunnel          604/udp     # TUNNEL
-tunnel          604/tcp     # TUNNEL
-#                          RFC-ietf-idwg-beep-tunnel-05.txt
-soap-beep       605/udp     # SOAP over BEEP
-soap-beep       605/tcp     # SOAP over BEEP
-#                          RFC3288 <ftp://ftp.isi.edu/in-notes/rfc3288.txt> April 2002
-urm             606/udp     # Cray Unified Resource Manager
-urm             606/tcp     # Cray Unified Resource Manager
-nqs             607/udp     # nqs
-nqs             607/tcp     # nqs
-#                          Bill Schiefelbein <schief at aspen.cray.com>
-sift-uft        608/udp     # Sender-Initiated/Unsolicited File Transfer
-sift-uft        608/tcp     # Sender-Initiated/Unsolicited File Transfer 
-#                          Rick Troth <troth at rice.edu>
-npmp-trap       609/udp     # npmp-trap
-npmp-trap       609/tcp     # npmp-trap
-npmp-local      610/udp     # npmp-local
-npmp-local      610/tcp     # npmp-local
-npmp-gui        611/udp     # npmp-gui  
-npmp-gui        611/tcp     # npmp-gui  
-#                          John Barnes <jbarnes at crl.com>
-hmmp-ind	612/udp	    # HMMP Indication
-hmmp-ind	612/tcp     # HMMP Indication
-hmmp-op		613/udp	    # HMMP Operation
-hmmp-op		613/tcp     # HMMP Operation
-#			   Andrew Sinclair <andrsin at microsoft.com>
-sshell   	614/udp	    # SSLshell
-sshell		614/tcp     # SSLshell
-#			   Simon J. Gerraty <sjg at quick.com.au>
-sco-inetmgr	615/udp     # Internet Configuration Manager
-sco-inetmgr	615/tcp	    # Internet Configuration Manager
-sco-sysmgr	616/udp     # SCO System Administration Server
-sco-sysmgr	616/tcp     # SCO System Administration Server
-sco-dtmgr	617/udp     # SCO Desktop Administration Server
-sco-dtmgr	617/tcp     # SCO Desktop Administration Server
-#			   Christopher Durham <chrisdu at sco.com>
-dei-icda	618/udp     # DEI-ICDA
-dei-icda	618/tcp     # DEI-ICDA
-#			   David Turner <digital at Quetico.tbaytel.net>
-compaq-evm	619/udp     # Compaq EVM
-compaq-evm	619/tcp     # Compaq EVM
-#			   Jem Treadwell <Jem.Treadwell at compaq.com>
-sco-websrvrmgr  620/udp     # SCO WebServer Manager
-sco-websrvrmgr  620/tcp     # SCO WebServer Manager
-#			   Christopher Durham <chrisdu at sco.com>
-escp-ip		621/udp     # ESCP
-escp-ip		621/tcp     # ESCP
-#			   Lai Zit Seng <lzs at pobox.com>
-collaborator	622/udp	    # Collaborator
-collaborator	622/tcp     # Collaborator
-#			   Johnson Davis <johnsond at opteamasoft.com>
-asf-rmcp        623/udp     # ASF Remote Management and Control Protocol
-asf-rmcp        623/tcp     # ASF Remote Management and Control Protocol
-#                          Carl First <Carl.L.First at intel.com>
-cryptoadmin	624/udp     # Crypto Admin
-cryptoadmin	624/tcp     # Crypto Admin
-#			   Tony Walker <tony at cryptocard.com>
-dec_dlm		625/udp     # DEC DLM
-dec_dlm		625/tcp     # DEC DLM
-#			   Rudi Martin <Rudi.Martin at edo.mts.dec.com>
-asia		626/udp     # ASIA
-asia		626/tcp     # ASIA
-#			   Michael Dasenbrock <dasenbro at apple.com>
-passgo-tivoli	627/udp     # PassGo Tivoli
-passgo-tivoli	627/tcp     # PassGo Tivoli
-#			   Chris Hall <chall at passgo.com>
-qmqp		628/udp     # QMQP
-qmqp		628/tcp     # QMQP
-#			   Dan Bernstein <djb at cr.yp.to>
-3com-amp3	629/udp     # 3Com AMP3
-3com-amp3	629/tcp     # 3Com AMP3
-#			   Prakash Banthia <prakash_banthia at 3com.com>
-rda		630/udp     # RDA
-rda		630/tcp     # RDA
-#			   John Hadjioannou <john at minster.co.uk>
-ipp		631/udp     # IPP (Internet Printing Protocol)
-ipp		631/tcp     # IPP (Internet Printing Protocol)
-#			   Carl-Uno Manros <manros at cp10.es.xerox.com>
-bmpp		632/udp     # bmpp
-bmpp		632/tcp     # bmpp
-#			   Troy Rollo <troy at kroll.corvu.com.au>	
-servstat	633/udp     # Service Status update (Sterling Software)
-servstat	633/tcp     # Service Status update (Sterling Software)
-#                          Greg Rose <Greg_Rose at sydney.sterling.com>
-ginad           634/udp     # ginad
-ginad           634/tcp     # ginad
-#                          Mark Crother <mark at eis.calstate.edu>
-rlzdbase        635/udp     # RLZ DBase
-rlzdbase        635/tcp     # RLZ DBase
-#                          Michael Ginn <ginn at tyxar.com>
-ldaps           636/udp     # ldap protocol over TLS/SSL (was sldap)
-ldaps           636/tcp     # ldap protocol over TLS/SSL (was sldap)
-#                          Pat Richard <patr at xcert.com>
-lanserver       637/udp     # lanserver
-lanserver       637/tcp     # lanserver
-#                          Chris Larsson <clarsson at VNET.IBM.COM>
-mcns-sec	638/udp     # mcns-sec
-mcns-sec	638/tcp     # mcns-sec
-#			   Kaz Ozawa <k.ozawa at cablelabs.com>
-msdp		639/udp     # MSDP
-msdp		639/tcp     # MSDP
-#			   Dino Farinacci <dino at cisco.com>
-entrust-sps	640/udp     # entrust-sps
-entrust-sps	640/tcp     # entrust-sps
-#			   Marek Buchler <Marek.Buchler at entrust.com>
-repcmd		641/udp     # repcmd
-repcmd		641/tcp     # repcmd
-#			   Scott Dale <scott at Replicase.com>
-esro-emsdp	642/udp     # ESRO-EMSDP V1.3
-esro-emsdp	642/tcp     # ESRO-EMSDP V1.3
-#			   Mohsen Banan <mohsen at neda.com> 
-sanity		643/udp     # SANity
-sanity		643/tcp     # SANity
-#			   Peter Viscarola <PeterGV at osr.com>
-dwr		644/udp     # dwr
-dwr		644/tcp     # dwr
-#			   Bill Fenner <fenner at parc.xerox.com>
-pssc		645/udp     # PSSC
-pssc		645/tcp     # PSSC
-#			   Egon Meier-Engelen <egon.meier-engelen at dlr.de>
-ldp		646/udp     # LDP
-ldp		646/tcp     # LDP
-#			   Bob Thomas <rhthomas at cisco.com>
-dhcp-failover   647/udp     # DHCP Failover
-dhcp-failover   647/tcp     # DHCP Failover
-#                          Bernard Volz <volz at ipworks.com> 
-rrp             648/udp     # Registry Registrar Protocol (RRP)
-rrp             648/tcp     # Registry Registrar Protocol (RRP)
-#                          Scott Hollenbeck <shollenb at netsol.com>	
-cadview-3d      649/udp     # Cadview-3d - streaming 3d models over the internet
-cadview-3d      649/tcp     # Cadview-3d - streaming 3d models over the internet
-#                          David Cooper <david.cooper at oracle.com> 
-obex		650/udp     # OBEX
-obex		650/tcp     # OBEX
-#			   Jeff Garbers <FJG030 at email.mot.com>
-ieee-mms	651/udp     # IEEE MMS
-ieee-mms	651/tcp     # IEEE MMS
-#			   Curtis Anderson <canderson at turbolinux.com>
-hello-port	652/udp     # HELLO_PORT	
-hello-port	652/tcp     # HELLO_PORT
-#			   Patrick Cipiere <Patrick.Cipiere at UDcast.com>
-repscmd		653/udp     # RepCmd
-repscmd		653/tcp     # RepCmd
-#			   Scott Dale <scott at tioga.com>
-aodv		654/udp	    # AODV
-aodv		654/tcp	    # AODV
-#			   Charles Perkins <cperkins at eng.sun.com>
-tinc		655/udp     # TINC
-tinc		655/tcp     # TINC
-#			   Ivo Timmermans <itimmermans at bigfoot.com>
-spmp		656/udp     # SPMP
-spmp		656/tcp     # SPMP
-#			   Jakob Kaivo <jkaivo at nodomainname.net>
-rmc		657/udp     # RMC
-rmc		657/tcp     # RMC
-#			   Michael Schmidt <mmaass at us.ibm.com>
-tenfold		658/udp     # TenFold
-tenfold		658/tcp     # TenFold
-#			   Louis Olszyk <lolszyk at 10fold.com>
-#               659        Removed (2001-06-06)
-mac-srvr-admin  660/udp     # MacOS Server Admin
-mac-srvr-admin  660/tcp     # MacOS Server Admin
-#                          Forest Hill <forest at apple.com>
-hap             661/udp     # HAP
-hap             661/tcp     # HAP
-#                          Igor Plotnikov <igor at uroam.com>
-pftp            662/udp     # PFTP
-pftp            662/tcp     # PFTP
-#                          Ben Schluricke <support at pftp.de>
-purenoise       663/udp     # PureNoise
-purenoise       663/tcp     # PureNoise
-#                          Sam Osa <pristine at mailcity.com>
-asf-secure-rmcp 664/udp     # ASF Secure Remote Management and Control Protocol
-asf-secure-rmcp 664/tcp     # ASF Secure Remote Management and Control Protocol
-#                          Carl First <Carl.L.First at intel.com>
-sun-dr          665/udp     # Sun DR
-sun-dr          665/tcp     # Sun DR
-#                          Harinder Bhasin <Harinder.Bhasin at Sun.COM>
-mdqs            666/udp	 doom # 
-mdqs            666/tcp	 doom # 
-#                          <ddt at idcube.idsoftware.com>
-disclose        667/udp     # campaign contribution disclosures - SDR Technologies
-disclose        667/tcp     # campaign contribution disclosures - SDR Technologies
-#                          Jim Dixon  <jim at lambda.com>
-mecomm          668/udp     # MeComm
-mecomm          668/tcp     # MeComm
-meregister      669/udp     # MeRegister
-meregister      669/tcp     # MeRegister
-#                          Armin Sawusch <armin at esd1.esd.de>
-vacdsm-sws      670/udp     # VACDSM-SWS
-vacdsm-sws      670/tcp     # VACDSM-SWS
-vacdsm-app      671/udp     # VACDSM-APP
-vacdsm-app      671/tcp     # VACDSM-APP
-vpps-qua        672/udp     # VPPS-QUA
-vpps-qua        672/tcp     # VPPS-QUA
-cimplex         673/udp     # CIMPLEX
-cimplex         673/tcp     # CIMPLEX
-#                          Ulysses G. Smith Jr. <ugsmith at cesi.com>
-acap            674/udp	    # ACAP
-acap            674/tcp     # ACAP
-#                          Chris Newman <chris.newman at sun.com>
-dctp		675/udp     # DCTP
-dctp		675/tcp     # DCTP
-#			   Andre Kramer <Andre.Kramer at ansa.co.uk>
-vpps-via	676/udp     # VPPS Via
-vpps-via	676/tcp     # VPPS Via
-#			   Ulysses G. Smith Jr. <ugsmith at cesi.com>
-vpp		677/udp     # Virtual Presence Protocol 
-vpp		677/tcp     # Virtual Presence Protocol 
-#			   Klaus Wolf <wolf at cobrow.com>
-ggf-ncp		678/udp     # GNU Generation Foundation NCP
-ggf-ncp		678/tcp     # GNU Generation Foundation NCP
-#			   Noah Paul <noahp at altavista.net>
-mrm		679/udp     # MRM
-mrm		679/tcp     # MRM
-#			   Liming Wei <lwei at cisco.com>
-entrust-aaas	680/udp     # entrust-aaas 
-entrust-aaas	680/tcp     # entrust-aaas 
-entrust-aams	681/udp     # entrust-aams
-entrust-aams	681/tcp     # entrust-aams
-#			   Adrian Mancini <adrian.mancini at entrust.com>
-xfr		682/udp     # XFR
-xfr		682/tcp     # XFR
-#			   Noah Paul <noahp at ultranet.com>
-corba-iiop	683/udp     # CORBA IIOP 
-corba-iiop	683/tcp     # CORBA IIOP 
-corba-iiop-ssl	684/udp     # CORBA IIOP SSL
-corba-iiop-ssl	684/tcp     # CORBA IIOP SSL
-#			   Henry Lowe <lowe at omg.org>
-mdc-portmapper	685/udp     # MDC Port Mapper
-mdc-portmapper	685/tcp     # MDC Port Mapper
-#			   Noah Paul <noahp at altavista.net>
-hcp-wismar	686/udp     # Hardware Control Protocol Wismar
-hcp-wismar	686/tcp     # Hardware Control Protocol Wismar
-#			   David Merchant <d.f.merchant at livjm.ac.uk>	
-asipregistry	687/udp     # asipregistry
-asipregistry	687/tcp     # asipregistry
-#			   Erik Sea <sea at apple.com>
-realm-rusd	688/udp     # REALM-RUSD
-realm-rusd	688/tcp     # REALM-RUSD
-#			   Jerry Knight <jknight at realminfo.com>
-nmap		689/udp     # NMAP
-nmap		689/tcp     # NMAP
-#			   Peter Dennis Bartok <peter at novonyx.com>
-vatp		690/udp     # VATP
-vatp		690/tcp     # VATP
-#			   Atica Software <comercial at aticasoft.es>
-msexch-routing	691/udp     # MS Exchange Routing
-msexch-routing	691/tcp     # MS Exchange Routing
-#			   David Lemson <dlemson at microsoft.com>
-hyperwave-isp	692/udp     # Hyperwave-ISP
-hyperwave-isp	692/tcp     # Hyperwave-ISP
-#			   Gerald Mesaric <gmesaric at hyperwave.com>
-connendp	693/udp     # connendp
-connendp	693/tcp     # connendp
-#			   Ronny Bremer <rbremer at future-gate.com>
-ha-cluster	694/udp     # ha-cluster
-ha-cluster	694/tcp     # ha-cluster
-#			   Alan Robertson <alanr at unix.sh>
-ieee-mms-ssl    695/udp     # IEEE-MMS-SSL
-ieee-mms-ssl    695/tcp     # IEEE-MMS-SSL
-#                          Curtis Anderson <ecanderson at turbolinux.com> 
-rushd           696/udp     # RUSHD
-rushd           696/tcp     # RUSHD
-#                          Greg Ercolano <erco at netcom.com>
-uuidgen         697/udp     # UUIDGEN
-uuidgen         697/tcp     # UUIDGEN
-#                          James Falkner <james.falkner at sun.com>
-olsr            698/udp     # OLSR
-olsr            698/tcp     # OLSR
-#                          Thomas Clausen <thomas.clausen at inria.fr>   
-accessnetwork   699/udp     # Access Network
-accessnetwork   699/tcp     # Access Network
-#                          Yingchun Xu <Yingchun_Xu at 3com.com>
-#               700-703    Unassigned
-elcsd	        704/udp     # errlog copy/server daemon
-elcsd	        704/tcp     # errlog copy/server daemon
-agentx		705/udp     # AgentX
-agentx	        705/tcp     # AgentX
-#			   Bob Natale <natale at acec.com>
-silc            706/udp     # SILC
-silc		706/tcp     # SILC
-#                          Pekka Riikonen <priikone at poseidon.pspt.fi>	
-borland-dsj	707/udp	    # Borland DSJ
-borland-dsj	707/tcp     # Borland DSJ
-#			   Gerg Cole <gcole at corp.borland.com>
-#		708        Unassigned
-entrust-kmsh    709/udp     # Entrust Key Management Service Handler
-entrust-kmsh    709/tcp     # Entrust Key Management Service Handler
-entrust-ash     710/udp     # Entrust Administration Service Handler
-entrust-ash     710/tcp     # Entrust Administration Service Handler
-#                          Peter Whittaker <pww at entrust.com>
-cisco-tdp	711/udp     # Cisco TDP
-cisco-tdp	711/tcp     # Cisco TDP
-#			   Bruce Davie <bsd at cisco.com>
-#               712-728    Unassigned
-netviewdm1      729/udp     # IBM NetView DM/6000 Server/Client
-netviewdm1      729/tcp     # IBM NetView DM/6000 Server/Client
-netviewdm2      730/udp     # IBM NetView DM/6000 send/tcp
-netviewdm2      730/tcp     # IBM NetView DM/6000 send/tcp
-netviewdm3      731/udp     # IBM NetView DM/6000 receive/tcp
-netviewdm3      731/tcp     # IBM NetView DM/6000 receive/tcp
-#                          Philippe Binet  (phbinet at vnet.IBM.COM)
-#               732-740    Unassigned           
-netgw           741/udp     # netGW
-netgw           741/tcp     # netGW
-#                          Oliver Korfmacher (okorf at netcs.com)
-netrcs          742/udp     # Network based Rev. Cont. Sys.
-netrcs          742/tcp     # Network based Rev. Cont. Sys.
-#                          Gordon C. Galligher <gorpong at ping.chi.il.us>
-#               743        Unassigned
-flexlm          744/udp     # Flexible License Manager
-flexlm          744/tcp     # Flexible License Manager
-#                          Matt Christiano
-#                          <globes at matt@oliveb.atc.olivetti.com> 
-#               745-746    Unassigned
-fujitsu-dev     747/udp     # Fujitsu Device Control
-fujitsu-dev     747/tcp     # Fujitsu Device Control
-ris-cm          748/udp     # Russell Info Sci Calendar Manager
-ris-cm          748/tcp     # Russell Info Sci Calendar Manager
-kerberos-adm    749/udp     # kerberos administration
-kerberos-adm    749/tcp     # kerberos administration
-loadav          750/udp kerberos-iv # 
-rfile 	        750/tcp # 
-#                          Martin Hamilton <martin at mrrl.lut.as.uk>
-pump	        751/udp # 
-pump	        751/tcp # 
-qrh	        752/udp # 
-qrh	        752/tcp # 
-rrh	        753/udp # 
-rrh    	        753/tcp # 
-tell	        754/udp	    # send
-tell	        754/tcp	    # send
-#                          Josyula R. Rao <jrrao at watson.ibm.com>
-#               755-756    Unassigned
-nlogin	        758/udp # 
-nlogin	        758/tcp # 
-con	        759/udp # 
-con	        759/tcp # 
-ns	        760/udp # 
-ns	        760/tcp # 
-rxe	        761/udp # 
-rxe	        761/tcp # 
-quotad	        762/udp # 
-quotad	        762/tcp # 
-cycleserv       763/udp # 
-cycleserv       763/tcp # 
-omserv	        764/udp # 
-omserv	        764/tcp # 
-webster	        765/udp # 
-webster	        765/tcp # 
-#                          Josyula R. Rao <jrrao at watson.ibm.com>
-#               766        Unassigned
-phonebook       767/udp	    # phone
-phonebook       767/tcp	    # phone
-#                          Josyula R. Rao <jrrao at watson.ibm.com>
-#               768        Unassigned
-vid	        769/udp # 
-vid	        769/tcp # 
-cadlock         770/udp # 
-cadlock         770/tcp # 
-rtip 	        771/udp # 
-rtip 	        771/tcp # 
-cycleserv2      772/udp # 
-cycleserv2      772/tcp # 
-notify	        773/udp # 
-submit	        773/tcp # 
-acmaint_dbd     774/udp # 
-rpasswd	        774/tcp # 
-acmaint_transd	775/udp # 
-entomb	        775/tcp # 
-wpages          776/udp # 
-wpages		776/tcp # 
-#                          Josyula R. Rao <jrrao at watson.ibm.com>
-multiling-http	777/udp     # Multiling HTTP
-multiling-http	777/tcp     # Multiling HTTP
-#			   Alejandro Bonet <babel at ctv.es>
-#		778-779    Unassigned
-wpgs		780/udp # 
-wpgs		780/tcp # 
-#                          Josyula R. Rao <jrrao at watson.ibm.com>
-#               781-785    Unassigned
-#               786        Unassigned (Removed 2002-05-08)
-#               787        Unassigned (Removed 2002-10-08)
-#               788-799    Unassigned
-mdbs_daemon	800/udp	 # 
-mdbs_daemon	800/tcp	 # 
-device		801/udp # 
-device		801/tcp # 
-#		802-809    Unassigned
-fcp-udp		810/udp     # FCP Datagram
-fcp-udp		810/tcp     # FCP
-#			   Paul Whittemore <paul at softarc.com>
-#		811-827    Unassigned
-itm-mcell-s	828/udp     # itm-mcell-s
-itm-mcell-s	828/tcp     # itm-mcell-s
-#			   Miles O'Neal <meo at us.itmasters.com>
-pkix-3-ca-ra    829/udp     # PKIX-3 CA/RA
-pkix-3-ca-ra	829/tcp     # PKIX-3 CA/RA
-#			   Carlisle Adams <Cadams at entrust.com>
-#               830-846    Unassigned
-dhcp-failover2  847/udp     # dhcp-failover 2
-dhcp-failover2  847/tcp     # dhcp-failover 2
-#                          Bernard Volz <volz at ipworks.com> 
-gdoi            848/udp     # GDOI
-gdoi            848/tcp     # GDOI
-#                          RFC-ietf-msec-gdoi-07.txt
-#               849-859    Unassigned
-iscsi           860/udp     # iSCSI
-iscsi           860/tcp     # iSCSI
-#                          RFC-draft-ietf-ips-iscsi-20.txt
-#               861-872    Unassigned
-rsync           873/udp     # rsync
-rsync           873/tcp     # rsync
-#                          Andrew Tridgell <tridge at samba.anu.edu.au>
-#               874-885    Unassigned
-iclcnet-locate  886/udp     # ICL coNETion locate server
-iclcnet-locate  886/tcp     # ICL coNETion locate server
-#                          Bob Lyon <bl at oasis.icl.co.uk>
-iclcnet_svinfo  887/udp     # ICL coNETion server info
-iclcnet_svinfo  887/tcp     # ICL coNETion server info
-#                          Bob Lyon <bl at oasis.icl.co.uk>
-accessbuilder   888/udp     # AccessBuilder
-accessbuilder   888/tcp     # AccessBuilder
-#                          Steve Sweeney <Steven_Sweeney at 3mail.3com.com>
-# The following entry records an unassigned but widespread use
-cddbp           888/tcp     # CD Database Protocol
-#                          Steve Scherf <steve at moonsoft.com>
-#
-#		889-899    Unassigned
-omginitialrefs  900/udp     # OMG Initial Refs
-omginitialrefs  900/tcp     # OMG Initial Refs
-#			   Christian Callsen <Christian.Callsen at eng.sun.com>
-smpnameres      901/udp     # SMPNAMERES
-smpnameres      901/tcp     # SMPNAMERES
-#                          Leif Ekblad <leif at rdos.net>
-ideafarm-chat   902/udp     # IDEAFARM-CHAT
-ideafarm-chat   902/tcp     # IDEAFARM-CHAT
-ideafarm-catch  903/udp     # IDEAFARM-CATCH
-ideafarm-catch  903/tcp     # IDEAFARM-CATCH
-#                          Wo'o Ideafarm <wo at ideafarm.com> 
-#               904-910    Unassigned
-xact-backup     911/udp     # xact-backup
-xact-backup     911/tcp     # xact-backup
-#                          Bill Carroll <billc at xactlabs.com>
-apex-mesh       912/udp     # APEX relay-relay service
-apex-mesh       912/tcp     # APEX relay-relay service
-apex-edge       913/udp     # APEX endpoint-relay service    
-apex-edge       913/tcp     # APEX endpoint-relay service
-#                          [RFC3340]
-#               914-988    Unassigned
-ftps-data	989/udp     # ftp protocol, data, over TLS/SSL
-ftps-data	989/tcp     # ftp protocol, data, over TLS/SSL
-ftps		990/udp     # ftp protocol, control, over TLS/SSL
-ftps		990/tcp     # ftp protocol, control, over TLS/SSL
-#			   Christopher Allen <ChristopherA at consensus.com>
-nas		991/udp     # Netnews Administration System
-nas		991/tcp     # Netnews Administration System
-#			   Vera Heinau <heinau at fu-berlin.de>
-#			   Heiko Schlichting <heiko at fu-berlin.de>
-telnets		992/udp     # telnet protocol over TLS/SSL
-telnets		992/tcp     # telnet protocol over TLS/SSL
-imaps		993/udp     # imap4 protocol over TLS/SSL
-imaps		993/tcp     # imap4 protocol over TLS/SSL
-ircs		994/udp     # irc protocol over TLS/SSL
-ircs		994/tcp     # irc protocol over TLS/SSL
-#			   Christopher Allen <ChristopherA at consensus.com>
-pop3s           995/udp     # pop3 protocol over TLS/SSL (was spop3)
-pop3s           995/tcp     # pop3 protocol over TLS/SSL (was spop3)
-#                          Gordon Mangione <gordm at microsoft.com>
-vsinet          996/udp     # vsinet
-vsinet          996/tcp     # vsinet
-#                          Rob Juergens <robj at vsi.com>
-maitrd		997/udp # 
-maitrd		997/tcp # 
-puparp		998/udp # 
-busboy		998/tcp # 
-applix		999/udp	        puprouter # Applix ac
-garcon		999/tcp puprouter # 
-cadlock2	1000/udp # 
-cadlock2	1000/tcp # 
-#               1001-1009      Unassigned
-#		1008/udp   Possibly used by Sun Solaris????
-surf		1010/udp        # surf
-surf		1010/tcp        # surf
-#			       Joseph Geer <jgeer at peapod.com>	 
-#		1011-1022      Reserved
-	        1023/udp        # Reserved
-                1023/tcp        # Reserved
-#                              IANA <iana at iana.org>
-                1024/udp    # Reserved             
-                1024/tcp    # Reserved		
-#                          IANA <iana at iana.org>
-#
-# REGISTERED PORT NUMBERS
-#
-blackjack       1025/udp    # network blackjack
-blackjack       1025/tcp    # network blackjack
-#                          Unknown contact
-cap             1026/udp    # Calender Access Protocol
-cap             1026/tcp    # Calender Access Protocol
-#                          Doug Royer <Doug at Royer.com> June 2002
-exosee          1027/udp    # ExoSee
-exosee          1027/tcp    # ExoSee
-#                          Chagdali Isamail <chagdali at free.fr> June 2003
-#               1028-1029  Unassigned 
-iad1            1030/udp    # BBN IAD
-iad1            1030/tcp    # BBN IAD
-iad2            1031/udp    # BBN IAD
-iad2            1031/tcp    # BBN IAD
-iad3            1032/udp    # BBN IAD
-iad3            1032/tcp    # BBN IAD
-#                          Andy Malis <malis_a at timeplex.com>
-netinfo-local   1033/udp    # local netinfo port
-netinfo-local   1033/tcp    # local netinfo port
-#                          Marc Majka <majka at apple.com> August 2002
-activesync      1034/udp    # ActiveSync Notifications
-activesync      1034/tcp    # ActiveSync Notifications
-#                          Sandra Vargas <Sandrama at microsoft.com> March 2003
-mxxrlogin       1035/udp    # MX-XR RPC
-mxxrlogin       1035/tcp    # MX-XR RPC
-#                          Arnold E. Mauer <amauer at vrms.com> April 2003
-pcg-radar       1036/udp    # RADAR Service Protocol
-pcg-radar       1036/tcp    # RADAR Service Protocol
-#                          Steve Ravida <Steve at pcguru.com>
-#               1037-1039  Unassigned
-netarx          1040/udp    # Netarx
-netarx          1040/tcp    # Netarx
-#                          Fredrick Paul Eisele <phreed at netarx.com>
-#               1041-1044  Unassigned
-fpitp           1045/udp    # Fingerprint Image Transfer Protocol
-fpitp           1045/tcp    # Fingerprint Image Transfer Protocol
-#                          Steven Fields <sfields at identix.com> February 2002
-#               1046       Unassigned
-neod1           1047/udp    # Sun's NEO Object Request Broker
-neod1           1047/tcp    # Sun's NEO Object Request Broker
-neod2           1048/udp    # Sun's NEO Object Request Broker
-neod2           1048/tcp    # Sun's NEO Object Request Broker
-#                          Rohit Garg <rohit.garg at eng.sun.com>
-td-postman      1049/udp    # Tobit David Postman VPMN
-td-postman      1049/tcp    # Tobit David Postman VPMN
-#                          Franz-Josef Leuders <development at tobit.com>
-cma             1050/udp    # CORBA Management Agent
-cma             1050/tcp    # CORBA Management Agent
-#                          Ramy Zaarour <ramy at lumos.com>  
-optima-vnet     1051/udp    # Optima VNET
-optima-vnet     1051/tcp    # Optima VNET
-#                          Ralf Doewich <ralf.doewich at optimatele.com>
-ddt             1052/udp    # Dynamic DNS Tools
-ddt             1052/tcp    # Dynamic DNS Tools
-#                          Remi Lefebvre <remi at debian.org>
-remote-as       1053/udp    # Remote Assistant (RA)
-remote-as       1053/tcp    # Remote Assistant (RA)
-#                          Roman Kriis <roman at previo.ee>   
-brvread         1054/udp    # BRVREAD
-brvread         1054/tcp    # BRVREAD
-#                          Gilles Roussel <groussel at eu-symtrax.com>
-ansyslmd        1055/udp    # ANSYS - License Manager
-ansyslmd        1055/tcp    # ANSYS - License Manager 
-#                          Suzanne Lorrin <suzanne.lorrin at ansys.com>
-vfo             1056/udp    # VFO 
-vfo             1056/tcp    # VFO
-#                          Anthony Gonzalez <agonzal1 at telcordia.com>
-startron        1057/udp    # STARTRON
-startron        1057/tcp    # STARTRON
-#                          Markus Sabadello <sabadello at startron.org> 
-nim             1058/udp    # nim
-nim             1058/tcp    # nim
-nimreg          1059/udp    # nimreg
-nimreg          1059/tcp    # nimreg
-#                          Robert Gordon <rbg at austin.ibm.com>
-polestar        1060/udp    # POLESTAR
-polestar        1060/tcp    # POLESTAR
-#                          Masakuni Okada <masakuni at jp.ibm.com>
-kiosk           1061/udp    # KIOSK
-kiosk           1061/tcp    # KIOSK
-#                          Howard Buck <hbuck at maytag.com>
-veracity        1062/udp    # Veracity
-veracity        1062/tcp    # Veracity
-#                          Ross Williams <ross at rocksoft.com>
-kyoceranetdev   1063/udp    # KyoceraNetDev
-kyoceranetdev   1063/tcp    # KyoceraNetDev
-#                          Shigenaka Kanemitsu 
-#                          <Shigenaka_Kanemitsu at ypd.kyocera.co.jp>
-jstel           1064/udp    # JSTEL
-jstel           1064/tcp    # JSTEL
-#                          Duane Kiser <dkiser at jsexpress.com> 
-syscomlan       1065/udp    # SYSCOMLAN
-syscomlan       1065/tcp    # SYSCOMLAN
-#                          Urs Ryf <urs.ryf at selectron.ch>
-fpo-fns         1066/udp    # FPO-FNS
-fpo-fns         1066/tcp    # FPO-FNS
-#                          Jens Klose <jklose at intercope.com>
-instl_boots     1067/udp    # Installation Bootstrap Proto. Serv. 
-instl_boots     1067/tcp    # Installation Bootstrap Proto. Serv. 
-instl_bootc     1068/udp    # Installation Bootstrap Proto. Cli.  
-instl_bootc     1068/tcp    # Installation Bootstrap Proto. Cli.  
-#                          David Arko <darko at hpfcrn.fc.hp.com>
-cognex-insight  1069/udp    # COGNEX-INSIGHT
-cognex-insight  1069/tcp    # COGNEX-INSIGHT
-#                          Steve Olson <solson at cognex.com>
-gmrupdateserv   1070/udp    # GMRUpdateSERV
-gmrupdateserv   1070/tcp    # GMRUpdateSERV
-#                          Steve Kellogg <stevekellogg at mezzogmr.com>
-bsquare-voip    1071/udp    # BSQUARE-VOIP
-bsquare-voip    1071/tcp    # BSQUARE-VOIP
-#                          Yen Lee <YenL at bsquare.com>
-cardax          1072/udp    # CARDAX
-cardax          1072/tcp    # CARDAX
-#                          Charles Oram <charleso at cardax.com>
-bridgecontrol   1073/udp    # Bridge Control
-bridgecontrol   1073/tcp    # Bridge Control
-#                          Andy Heron <btexact.ports at bt.com>
-fastechnologlm  1074/udp    # FASTechnologies License Manager
-fastechnologlm  1074/tcp    # FASTechnologies License Manager
-#                          Robert C. Henningsgard
-#                          <rhenn at fastechnologies.com>
-rdrmshc         1075/udp    # RDRMSHC
-rdrmshc         1075/tcp    # RDRMSHC
-#                          Ericko Shimada <eriko at kel.fujitsu.co.jp> 
-dab-sti-c       1076/udp    # DAB STI-C
-dab-sti-c       1076/tcp    # DAB STI-C
-#                          World DAB <worlddab_irc at worlddab.org>
-imgames         1077/udp    # IMGames
-imgames         1077/tcp    # IMGames
-#                          Jean A. Ames <engr-admin at flipside.com>
-avocent-proxy   1078/udp    # Avocent Proxy Protocol
-avocent-proxy   1078/tcp    # Avocent Proxy Protocol
-#                          Steven W. Clark <steven.clark at avocent.com> 
-asprovatalk     1079/udp    # ASPROVATalk
-asprovatalk     1079/tcp    # ASPROVATalk
-#                          Chiew Farn Chung <cfchung at asprova.com>
-socks           1080/udp    # Socks    
-socks           1080/tcp    # Socks    
-#                          Ying-Da Lee <ylee at syl.dl.nec.com
-pvuniwien       1081/udp    # PVUNIWIEN
-pvuniwien       1081/tcp    # PVUNIWIEN
-#                          Peter Lipp >Peter.Lipp at iaik.at>
-amt-esd-prot    1082/udp    # AMT-ESD-PROT 
-amt-esd-prot    1082/tcp    # AMT-ESD-PROT
-#                          AMTEC S.p.A <sp.amtec at interbusiness.it>
-ansoft-lm-1     1083/udp    # Anasoft License Manager
-ansoft-lm-1     1083/tcp    # Anasoft License Manager
-ansoft-lm-2     1084/udp    # Anasoft License Manager
-ansoft-lm-2     1084/tcp    # Anasoft License Manager
-webobjects	1085/udp    # Web Objects
-webobjects	1085/tcp    # Web Objects
-#			   Andy Belk <abelk at apple.com>
-cplscrambler-lg 1086/udp    # CPL Scrambler Logging
-cplscrambler-lg 1086/tcp    # CPL Scrambler Logging
-cplscrambler-in 1087/udp    # CPL Scrambler Internal 
-cplscrambler-in 1087/tcp    # CPL Scrambler Internal
-cplscrambler-al 1088/udp    # CPL Scrambler Alarm Log
-cplscrambler-al 1088/tcp    # CPL Scrambler Alarm Log
-#                          Richard Corn <rac at racc.com> 
-ff-annunc       1089/udp    # FF Annunciation 
-ff-annunc       1089/tcp    # FF Annunciation 
-ff-fms          1090/udp    # FF Fieldbus Message Specification
-ff-fms          1090/tcp    # FF Fieldbus Message Specification 
-ff-sm           1091/udp    # FF System Management
-ff-sm           1091/tcp    # FF System Management
-#                          Fieldbus Foundation <dave.glanzer at fieldbus.org>
-obrpd           1092/udp    # Open Business Reporting Protocol
-obrpd           1092/tcp    # Open Business Reporting Protocol
-#                          William Randolph Royere III 
-#                          <william at royere.net>
-proofd          1093/udp    # PROOFD
-proofd          1093/tcp    # PROOFD
-rootd           1094/udp    # ROOTD
-rootd           1094/tcp    # ROOTD
-#                          Fons Rademakers <Fons.Rademakers at cern.ch>
-nicelink        1095/udp    # NICELink
-nicelink        1095/tcp    # NICELink
-#                          Jordi Lisbona <jlisbona at tango04.net>   
-cnrprotocol     1096/udp    # Common Name Resolution Protocol
-cnrprotocol     1096/tcp    # Common Name Resolution Protocol
-#                          Michael Mealling <michaelm at netsol.com> 
-sunclustermgr	1097/udp    # Sun Cluster Manager
-sunclustermgr	1097/tcp    # Sun Cluster Manager
-#                          Ashit Patel <Ashit.Patel at eng.Sun.COM>
-rmiactivation	1098/udp    # RMI Activation
-rmiactivation	1098/tcp    # RMI Activation
-rmiregistry     1099/udp    # RMI Registry
-rmiregistry     1099/tcp    # RMI Registry
-#                          Mark Hodapp <mark.hodapp at sun.com>
-mctp            1100/udp    # MCTP
-mctp            1100/tcp    # MCTP 
-#                          Vitaly Revsin <vitaly at webmanage.com>
-pt2-discover    1101/udp    # PT2-DISCOVER
-pt2-discover    1101/tcp    # PT2-DISCOVER
-#                          Ralph Kammerlander 
-#                          <ralph.kammerlander at khe.siemens.de> 
-adobeserver-1   1102/udp    # ADOBE SERVER 1
-adobeserver-1   1102/tcp    # ADOBE SERVER 1
-adobeserver-2   1103/udp    # ADOBE SERVER 2
-adobeserver-2   1103/tcp    # ADOBE SERVER 2
-#                          Frank Soetebeer <frsoeteb at adobe.com>
-xrl             1104/udp    # XRL
-xrl             1104/tcp    # XRL
-#                          Patrick Robinson <probinson at plosive.com>
-ftranhc         1105/udp    # FTRANHC
-ftranhc         1105/tcp    # FTRANHC
-#                          Eriko Shimada <eriko at kel.fujitsu.co.jp> 
-isoipsigport-1  1106/udp    # ISOIPSIGPORT-1 
-isoipsigport-1  1106/tcp    # ISOIPSIGPORT-1
-isoipsigport-2  1107/udp    # ISOIPSIGPORT-2 
-isoipsigport-2  1107/tcp    # ISOIPSIGPORT-2 
-#                          Peter Egli <peter.egli at inalp.com> 
-ratio-adp       1108/udp    # ratio-adp
-ratio-adp       1108/tcp    # ratio-adp
-#                          Oliver Thulke <oth at ratio.de>
-#               1109       Reserved - IANA
-nfsd-keepalive  1110/udp    # Client status info
-nfsd-status     1110/tcp    # Cluster status info
-#                          Edgar Circenis <ec at hpfclj.fc.hp.com>
-lmsocialserver  1111/udp    # LM Social Server
-lmsocialserver  1111/tcp    # LM Social Server
-#                          Ron Lussier <coyote at likeminds.com>
-icp             1112/udp    # Intelligent Communication Protocol
-icp             1112/tcp    # Intelligent Communication Protocol
-#                          Mark H. David <mhd at gensym.com>   
-#               1113       Unassigned 
-mini-sql        1114/udp    # Mini SQL
-mini-sql        1114/tcp    # Mini SQL
-#                          David Hughes <bambi at Hughes.com.au>
-ardus-trns      1115/udp    # ARDUS Transfer
-ardus-trns      1115/tcp    # ARDUS Transfer
-ardus-cntl      1116/udp    # ARDUS Control
-ardus-cntl      1116/tcp    # ARDUS Control
-ardus-mtrns     1117/udp    # ARDUS Multicast Transfer
-ardus-mtrns     1117/tcp    # ARDUS Multicast Transfer
-#                          Shinya Abe <abeabe at pfu.co.jp>
-#               1118-1121  Unassigned
-availant-mgr    1122/udp    # availant-mgr
-availant-mgr    1122/tcp    # availant-mgr
-#                          Steven Pelletier <stevep at Availant.com> 
-murray          1123/udp    # Murray
-murray          1123/tcp    # Murray
-#                          Stu Mark <fordii at j51.com>
-#               1124-1154  Unassigned 
-nfa             1155/udp    # Network File Access                
-nfa             1155/tcp    # Network File Access                
-#                          James Powell <james at mailhost.unidata.com>
-#               1156-1160  Unassigned
-health-polling  1161/udp    # Health Polling
-health-polling  1161/tcp    # Health Polling
-health-trap     1162/udp    # Health Trap
-health-trap     1162/tcp    # Health Trap
-#               1163-1167  Unassigned
-vchat           1168/udp    # VChat Conference Service
-vchat           1168/tcp    # VChat Conference Service
-#                          Andreas Wetzel <mickey at enforcer.cc> September 2002
-tripwire        1169/udp    # TRIPWIRE
-tripwire        1169/tcp    # TRIPWIRE
-#                          Ed Metcalf <emetcalf at tripwiresecurity.com>
-#                          Albert Holt <alberth at triosoftware.com>
-#               1170-1179  Unassigned
-mc-client       1180/udp    # Millicent Client Proxy
-mc-client       1180/tcp    # Millicent Client Proxy
-#                          Steve Glassman <steveg at pa.dec.com>
-#               1181-1182  Unassigned
-llsurfup-http   1183/udp    # LL Surfup HTTP
-llsurfup-http   1183/tcp    # LL Surfup HTTP
-llsurfup-https  1184/udp    # LL Surfup HTTPS
-llsurfup-https  1184/tcp    # LL Surfup HTTPS
-#                          Katy Lynn McCullough <KatyM at LapLink.com>
-catchpole       1185/udp    # Catchpole port
-catchpole       1185/tcp    # Catchpole port
-#                          Christian Catchpole <christian at catchpole.net> March 2002
-#               1186-1187  Unassigned
-hp-webadmin     1188/udp    # HP Web Admin
-hp-webadmin     1188/tcp    # HP Web Admin
-#                          Lance Kind <lance_kind at hp.com>
-#               1189-1198  Unassigned
-dmidi           1199/udp    # DMIDI
-dmidi           1199/tcp    # DMIDI
-#                          Phil Kerr <phil at plus24.com> February 2002
-scol            1200/udp    # SCOL
-scol            1200/tcp    # SCOL
-#                          Cryo-Networks <p.favre at cryo-networks.fr>
-nucleus-sand    1201/udp    # Nucleus Sand
-nucleus-sand    1201/tcp    # Nucleus Sand
-#                          James Marsh <James.Marsh at sandtechnology.com>
-caiccipc        1202/udp    # caiccipc
-caiccipc        1202/tcp    # caiccipc
-#                          Vince Re <Vincent.Re at cai.com>
-ssslic-mgr      1203/udp    # License Validation
-ssslic-mgr      1203/tcp    # License Validation
-ssslog-mgr      1204/udp    # Log Request Listener
-ssslog-mgr      1204/tcp    # Log Request Listener
-#                          Eric Bruno <ebruno at solution-soft.com>
-accord-mgc      1205/udp    # Accord-MGC
-accord-mgc      1205/tcp    # Accord-MGC
-#                          Roni Even <roni_e at accord.co.il>
-anthony-data    1206/udp    # Anthony Data
-anthony-data    1206/tcp    # Anthony Data
-#                          Paul Dollemore <pauld at anthonydata.com>
-metasage        1207/udp    # MetaSage
-metasage        1207/tcp    # MetaSage
-#                          Peter Anvelt <panvelt at xnai.com> 
-seagull-ais     1208/udp    # SEAGULL AIS
-seagull-ais     1208/tcp    # SEAGULL AIS
-#                          Lee Breisacher <lbreisacher at seagullsw.com> 
-ipcd3           1209/udp    # IPCD3
-ipcd3           1209/tcp    # IPCD3
-#                          Mark Ciskey <mlciskey at plato.com>  
-eoss            1210/udp    # EOSS
-eoss            1210/tcp    # EOSS
-#                          Robert Armes <rarmes at axarte.com>
-groove-dpp      1211/udp    # Groove DPP
-groove-dpp      1211/tcp    # Groove DPP
-#                          Ken Moore <kmoore at groove.net>
-lupa            1212/udp    # lupa
-lupa            1212/tcp    # lupa
-#                          Barney Wolff <barney at databus.com>
-mpc-lifenet     1213/udp    # MPC LIFENET
-mpc-lifenet     1213/tcp    # MPC LIFENET
-#                          Ward Silver <hwardsil at wolfenet.com>
-kazaa           1214/udp    # KAZAA
-kazaa           1214/tcp    # KAZAA
-#                          Ahti Heinla <ahti at ahti.bluemoon.ee>  
-scanstat-1      1215/udp    # scanSTAT 1.0
-scanstat-1      1215/tcp    # scanSTAT 1.0
-#                          William Scheding <wls at wls.org>
-etebac5         1216/udp    # ETEBAC 5
-etebac5         1216/tcp    # ETEBAC 5
-#                          GSIT <jl.barbut at gsit.fr>
-hpss-ndapi      1217/udp    # HPSS-NDAPI
-hpss-ndapi      1217/tcp    # HPSS-NDAPI
-#                          Michael Gleicher <mkg at san.rr.com>
-aeroflight-ads  1218/udp    # AeroFlight-ADs
-aeroflight-ads  1218/tcp    # AeroFlight-ADs
-aeroflight-ret  1219/udp    # AeroFlight-Ret
-aeroflight-ret  1219/tcp    # AeroFlight-Ret
-#                          Eric Johnson <eric at gruver.net>
-qt-serveradmin  1220/udp    # QT SERVER ADMIN
-qt-serveradmin  1220/tcp    # QT SERVER ADMIN
-#                          Chris LeCroy <lecroy at apple.com>
-sweetware-apps  1221/udp    # SweetWARE Apps
-sweetware-apps  1221/tcp    # SweetWARE Apps
-#                          David Dunetz <david at sweetware.com> 
-nerv            1222/udp    # SNI R&D network                  
-nerv            1222/tcp    # SNI R&D network                  
-#                          Martin Freiss <freiss.pad at sni.de>
-tgp             1223/udp    # TGP
-tgp             1223/tcp    # TGP
-#                          Gur Kimchi <gur at mail.trulyglobal.com>  
-vpnz            1224/udp    # VPNz
-vpnz            1224/tcp    # VPNz
-#                          Tom Strack <TSTRACK at Advnw.com>      
-slinkysearch    1225/udp    # SLINKYSEARCH
-slinkysearch    1225/tcp    # SLINKYSEARCH
-#                          Desmond Chan <deschan at prismedia.com>
-stgxfws         1226/udp    # STGXFWS
-stgxfws         1226/tcp    # STGXFWS
-#                          Tetsuya Shioda <tetsuya at saint.nm.fujitsu.co.jp>   
-dns2go          1227/udp    # DNS2Go
-dns2go          1227/tcp    # DNS2Go
-#                          Mark Richards <mark.richards at deerfield.com>
-florence        1228/udp    # FLORENCE
-florence        1228/tcp    # FLORENCE
-#                          Brian Trammell <btrammell at iventurelab.com>
-novell-zfs      1229/udp    # Novell ZFS
-novell-zfs      1229/tcp    # Novell ZFS
-#                          Ty Ellis <tellis at novell.com> 
-periscope       1230/udp    # Periscope
-periscope       1230/tcp    # Periscope
-#                          Kevin Madden <Kevin at emailxtras.com>
-menandmice-lpm  1231/udp    # menandmice-lpm
-menandmice-lpm  1231/tcp    # menandmice-lpm
-#                          Sigfus Magnusson <sigfusm at menandmice.com>
-#####  Microsoft (unoffically) using 1232     #####
-univ-appserver  1233/udp    # Universal App Server
-univ-appserver  1233/tcp    # Universal App Server
-#                          Tim Sent <tim.sent at systemsarchitects.com>
-search-agent    1234/udp    # Infoseek Search Agent
-search-agent    1234/tcp    # Infoseek Search Agent
-#                          Jackie Wu <jackiew at infoseek.com>
-mosaicsyssvc1   1235/udp    # mosaicsyssvc1
-mosaicsyssvc1   1235/tcp    # mosaicsyssvc1
-#                          Brian Matthews <bmatthews at mosaicsystems.com>	
-bvcontrol       1236/udp    # bvcontrol
-bvcontrol       1236/tcp    # bvcontrol
-#                          Daniel J Walsh <dwalsh at bindview.com>
-tsdos390        1237/udp    # tsdos390
-tsdos390        1237/tcp    # tsdos390
-#                          Ben Pracht <ben.pracht at tivoli.com> 
-hacl-qs	        1238/udp    # hacl-qs
-hacl-qs	        1238/tcp    # hacl-qs
-#                          Farid Faez <farid_faez at hp.com>
-nmsd            1239/udp    # NMSD
-nmsd            1239/tcp    # NMSD
-#                          Yuri Machkasov <yuri at ptc.com>
-instantia       1240/udp    # Instantia
-instantia       1240/tcp    # Instantia
-#                          Ruth Slater <ruth.slater at ideagen.co.uk> 
-nessus	        1241/udp    # nessus
-nessus	        1241/tcp    # nessus
-#                          Jordan Hrycaj <jordan at mjh.teddy-net.com>
-nmasoverip      1242/udp    # NMAS over IP
-nmasoverip      1242/tcp    # NMAS over IP
-#                          Hal Henderson <hhenders at novell.com>		
-serialgateway   1243/udp    # SerialGateway
-serialgateway   1243/tcp    # SerialGateway
-#                          Stephen LaValley <lavalley at lucent.com>
-isbconference1  1244/udp    # isbconference1
-isbconference1  1244/tcp    # isbconference1
-isbconference2  1245/udp    # isbconference2
-isbconference2  1245/tcp    # isbconference2
-#                          Arnold Dittmann <dittmann at isbcad.de>
-payrouter       1246/udp    # payrouter
-payrouter       1246/tcp    # payrouter
-#                          David Wilson <dwilson at integral-ie.com>
-visionpyramid   1247/udp    # VisionPyramid
-visionpyramid   1247/tcp    # VisionPyramid
-#                          Gavin Hutchinson <gavinh at visionlogistics.com>
-hermes		1248/udp    # hermes
-hermes		1248/tcp    # hermes
-#                          Not known
-mesavistaco	1249/udp    # Mesa Vista Co
-mesavistaco	1249/tcp    # Mesa Vista Co
-#                          Rick LaBanca <rel at mesasys.com>
-swldy-sias	1250/udp    # swldy-sias
-swldy-sias	1250/tcp    # swldy-sias
-#                          Peter E Williams <peter.williams at smallworld-us.com>
-servergraph	1251/udp    # servergraph
-servergraph     1251/tcp    # servergraph
-#                          Lindsay Morris <lmorris at servergraph.com>
-bspne-pcc       1252/udp    # bspne-pcc
-bspne-pcc	1252/tcp    # bspne-pcc
-q55-pcc		1253/udp    # q55-pcc
-q55-pcc         1253/tcp    # q55-pcc
-#                          Prem Tirilok <Prem.Tirilok at tellabs.com>	
-de-noc		1254/udp    # de-noc
-de-noc		1254/tcp    # de-noc
-de-cache-query  1255/udp    # de-cache-query
-de-cache-query  1255/tcp    # de-cache-query
-de-server	1256/udp    # de-server
-de-server	1256/tcp    # de-server
-#			   Jeff Burdette <support at digitalenvoy.net>
-shockwave2	1257/udp    # Shockwave 2
-shockwave2      1257/tcp    # Shockwave 2
-#			   Dave Simmons <dsimmons at macromedia.com>	
-opennl		1258/udp    # Open Network Library
-opennl		1258/tcp    # Open Network Library
-opennl-voice	1259/udp    # Open Network Library Voice
-opennl-voice    1259/tcp    # Open Network Library Voice
-#                          Phil Frisbie <phil at hawksoft.com> 
-ibm-ssd		1260/udp    # ibm-ssd
-ibm-ssd		1260/tcp    # ibm-ssd
-#			   Barry Whyte <barry_whyte at uk.ibm.com>
-mpshrsv		1261/udp    # mpshrsv
-mpshrsv         1261/tcp    # mpshrsv
-#                          Makoto Ikeyama <ikeyama at ael.fujitsu.co.jp>
-qnts-orb        1262/udp    # QNTS-ORB
-qnts-orb	1262/tcp    # QNTS-ORB
-#                          Raghurama Bhat <raghu at quintus.com> 
-dka		1263/udp    # dka
-dka		1263/tcp    # dka
-#                          Chris Griffin <cgriffin at dka.com>
-prat            1264/udp    # PRAT
-prat		1264/tcp    # PRAT
-#                          Keith Wood <keith.wood at epid.eurotherm.co.uk> 
-dssiapi         1265/udp    # DSSIAPI
-dssiapi         1265/tcp    # DSSIAPI
-#                          Steve Sando <steve.sando at diversifiedsoftware.com> 
-dellpwrappks    1266/udp    # DELLPWRAPPKS
-dellpwrappks    1266/tcp    # DELLPWRAPPKS
-#                          David Troeger <David_Troeger at dell.com> 
-epc             1267/udp    # eTrust Policy Compliance
-epc             1267/tcp    # eTrust Policy Compliance
-#                          Aaron Stein <aaron.stein at ca.com>
-propel-msgsys   1268/udp    # PROPEL-MSGSYS
-propel-msgsys   1268/tcp    # PROPEL-MSGSYS
-#                          Bert Van der Linden <bert at propel.com>
-watilapp        1269/udp    # WATiLaPP
-watilapp        1269/tcp    # WATiLaPP
-#                          Frederic Weymann <Fizzban at swcombine.com>
-opsmgr          1270/udp    # Microsoft Operations Manager
-opsmgr          1270/tcp    # Microsoft Operations Manager
-#                          Ashvin Sanghvi <AshvinS at microsoft.com>
-dabew           1271/udp    # Dabew
-dabew           1271/tcp    # Dabew
-#                          Norm Freedman <normfree at att.net>
-cspmlockmgr     1272/udp    # CSPMLockMgr
-cspmlockmgr     1272/tcp    # CSPMLockMgr
-#                          Ibtsam Mahfouz <imahfouz at cisco.com>
-emc-gateway     1273/udp    # EMC-Gateway
-emc-gateway     1273/tcp    # EMC-Gateway
-#                          Rene Fontaine <fontaine_rene at emc.com>
-t1distproc      1274/udp    # t1distproc
-t1distproc      1274/tcp    # t1distproc
-#                          Julian Biddle <julian_biddle at TechnologyOneCorp.com>
-ivcollector     1275/udp    # ivcollector
-ivcollector     1275/tcp    # ivcollector
-ivmanager       1276/udp    # ivmanager
-ivmanager       1276/tcp    # ivmanager
-#                          Xavier Roques <xroques at infovista.fr>
-miva-mqs        1277/udp    # mqs
-miva-mqs        1277/tcp    # mqs
-#                          Miva Corporation <jwoods at miva.com.au>
-dellwebadmin-1  1278/udp    # Dell Web Admin 1
-dellwebadmin-1  1278/tcp    # Dell Web Admin 1
-dellwebadmin-2  1279/udp    # Dell Web Admin 2   
-dellwebadmin-2  1279/tcp    # Dell Web Admin 2
-#                          Bridget Navoda <Bridget_Navoda at dell.com> 
-pictrography    1280/udp    # Pictrography
-pictrography    1280/tcp    # Pictrography
-#                          Takashi Hoshino <hoshino at miya.fujifilm.co.jp>   
-healthd         1281/udp    # healthd
-healthd         1281/tcp    # healthd
-#                          James E. Housley <jim at thehousleys.net> 
-emperion        1282/udp    # Emperion
-emperion        1282/tcp    # Emperion
-#                          Claus Thor Barth <ctb at satworks.net>
-productinfo     1283/udp    # ProductInfo
-productinfo     1283/tcp    # ProductInfo
-iee-qfx         1284/udp    # IEE-QFX
-iee-qfx         1284/tcp    # IEE-QFX
-#                          Kevin D. Quitt <KQuitt at IEEInc.com>
-neoiface        1285/udp    # neoiface
-neoiface        1285/tcp    # neoiface
-#                          Jason McManus <jasonm at neoinformatics.com>
-netuitive       1286/udp    # netuitive 
-netuitive       1286/tcp    # netuitive
-#                          Clayton Wilkinson <cwilkinson at netuitive.com>
-#               1287       Unassigned
-navbuddy        1288/udp    # NavBuddy
-navbuddy        1288/tcp    # NavBuddy
-#                          Eric Hackman <ehackman at millapps.com>
-jwalkserver     1289/udp    # JWalkServer
-jwalkserver     1289/tcp    # JWalkServer
-winjaserver     1290/udp    # WinJaServer  
-winjaserver     1290/tcp    # WinJaServer 
-seagulllms      1291/udp    # SEAGULLLMS
-seagulllms      1291/tcp    # SEAGULLLMS
-#                          Lee Breisacher <lbreisacher at seafullsw.com>
-dsdn            1292/udp    # dsdn
-dsdn            1292/tcp    # dsdn
-#                          Stanislaw Skowronek <thesis at elementary.pl>
-pkt-krb-ipsec   1293/udp    # PKT-KRB-IPSec
-pkt-krb-ipsec   1293/tcp    # PKT-KRB-IPSec
-#                          Nancy Davoust <n.davoust at cablelabs.com>
-cmmdriver       1294/udp    # CMMdriver
-cmmdriver       1294/tcp    # CMMdriver
-#                          Lutz Karras <karras at zeiss.de>
-ehtp            1295/udp    # End-by-Hop Transmission Protocol
-ehtp            1295/tcp    # End-by-Hop Transmission Protocol
-#                          Alexander Bogdanov <alexandr_bgd at softhome.net>  
-dproxy          1296/udp    # dproxy
-dproxy          1296/tcp    # dproxy
-sdproxy         1297/udp    # sdproxy
-sdproxy         1297/tcp    # sdproxy
-#                          Raimond Diederik <rdiederik at descartes.com> 
-lpcp            1298/udp    # lpcp
-lpcp            1298/tcp    # lpcp
-#                          Christian Stredicke <stredicke at snom.de>
-hp-sci          1299/udp    # hp-sci
-hp-sci          1299/tcp    # hp-sci
-#                          Kim Scott <kims at cup.hp.com>       
-h323hostcallsc	1300/udp    # H323 Host Call Secure
-h323hostcallsc	1300/tcp    # H323 Host Call Secure
-#			   Jim Toga <jtoga at ideal.jf.intel.com>
-ci3-software-1  1301/udp    # CI3-Software-1
-ci3-software-1  1301/tcp    # CI3-Software-1
-ci3-software-2  1302/udp    # CI3-Software-2
-ci3-software-2  1302/tcp    # CI3-Software-2
-#                          Kelli Watson <kwatson at ci3software.com>
-sftsrv          1303/udp    # sftsrv
-sftsrv          1303/tcp    # sftsrv
-#                          Robert Frazier <BobF at mrp3.com>
-boomerang       1304/udp    # Boomerang
-boomerang       1304/tcp    # Boomerang
-#                          Bruce Lueckenhoff <brucelu at cisco.com>
-pe-mike         1305/udp    # pe-mike
-pe-mike	        1305/tcp    # pe-mike
-#                          Stephen Hemminger <shemminger at passedge.com>
-re-conn-proto   1306/udp    # RE-Conn-Proto
-re-conn-proto   1306/tcp    # RE-Conn-Proto
-#                          Sandeep Singhal <sandeep at reefedge.com>
-pacmand         1307/udp    # Pacmand
-pacmand         1307/tcp    # Pacmand
-#                          Edward T. O'Shea <oshea at bellsouth.net> 
-odsi            1308/udp    # Optical Domain Service Interconnect (ODSI)
-odsi            1308/tcp    # Optical Domain Service Interconnect (ODSI)
-#                          K. Arvind <arvind at tenornetworks.com> 
-jtag-server     1309/udp    # JTAG server
-jtag-server     1309/tcp    # JTAG server
-#                          Andrew Draper <adraper at altera.com>
-husky		1310/udp    # Husky
-husky		1310/tcp    # Husky
-#			   Mark Zang <mark at zang.com>
-rxmon		1311/udp    # RxMon
-rxmon		1311/tcp    # RxMon
-#			   Javier Jiminez <javier_l_jimenez at dell.com>
-sti-envision	1312/udp    # STI Envision
-sti-envision	1312/tcp    # STI Envision
-#			   Don Stedman <dones at stisystems.com>
-bmc_patroldb    1313/udp    # BMC_PATROLDB
-bmc_patroldb    1313/tcp    # BMC_PATROLDB
-#                          Devon Shows <Devon_Shows at crow.bmc.com>
-pdps            1314/udp    # Photoscript Distributed Printing System
-pdps		1314/tcp    # Photoscript Distributed Printing System
-#			   Les Klein <sgy at cix.compulink.co.uk>
-els		1315/udp    # E.L.S., Event Listener Service
-els		1315/tcp    # E.L.S., Event Listener Service
-#			   Jim Cleppe <clep13 at cfer.com>
-exbit-escp      1316/udp    # Exbit-ESCP
-exbit-escp      1316/tcp    # Exbit-ESCP
-#                          Morten Christensen <mjc at exbit.dk>
-vrts-ipcserver  1317/udp    # vrts-ipcserver
-vrts-ipcserver  1317/tcp    # vrts-ipcserver
-#                          Bruce Hestand <Bruce.Hestand at veritas.com>
-krb5gatekeeper  1318/udp    # krb5gatekeeper
-krb5gatekeeper  1318/tcp    # krb5gatekeeper
-#                          Patrick Moore <pcmoore at sandia.gov> 
-panja-icsp      1319/udp    # Panja-ICSP
-panja-icsp      1319/tcp    # Panja-ICSP
-#                          Ron Barber <ron.barber at panja.com>     
-panja-axbnet	1320/udp    # Panja-AXBNET
-panja-axbnet	1320/tcp    # Panja-AXBNET
-#			   Andrew van Wensen <avanwensen at panja.com>
-pip		1321/udp    # PIP
-pip		1321/tcp    # PIP
-#			   Gordon Mohr <gojomo at usa.net>
-novation        1322/udp    # Novation
-novation        1322/tcp    # Novation
-#                          Alan Dano <wiseobject at yahoo.com>
-brcd            1323/udp    # brcd
-brcd            1323/tcp    # brcd
-#                          Todd Picquelle <todd at convergence.net>
-delta-mcp       1324/udp    # delta-mcp
-delta-mcp       1324/tcp    # delta-mcp
-#                          Quinton Tormanen <quinton at deltacompsys.com> 
-dx-instrument   1325/udp    # DX-Instrument
-dx-instrument   1325/tcp    # DX-Instrument
-#                          Walt Modic <Walt.Modic at dionex.com>
-wimsic          1326/udp    # WIMSIC
-wimsic          1326/tcp    # WIMSIC
-#                          James Brown <ender at admdev.com>
-ultrex          1327/udp    # Ultrex
-ultrex          1327/tcp    # Ultrex
-#                          Tim Walsh <tim at ultrex.com>
-ewall           1328/udp    # EWALL
-ewall           1328/tcp    # EWALL
-#                          Jeff Busma <busma at echogent.com>
-netdb-export    1329/udp    # netdb-export
-netdb-export    1329/tcp    # netdb-export
-#                          Konstantinos Kostis <netdb at kostis.net>
-streetperfect   1330/udp    # StreetPerfect
-streetperfect   1330/tcp    # StreetPerfect
-#                          Michael R. Young <michael.young at tor.sunpub.com> 
-intersan        1331/udp    # intersan
-intersan        1331/tcp    # intersan
-#                          Barry H. Feild <barry at intersan.net> 
-pcia-rxp-b      1332/udp    # PCIA RXP-B
-pcia-rxp-b      1332/tcp    # PCIA RXP-B
-#                          James Dabbs <jdabbs at tga.com>
-passwrd-policy  1333/udp    # Password Policy
-passwrd-policy  1333/tcp    # Password Policy
-#                          Tonio Pirotta <tonio at tpis.com.au> 
-writesrv        1334/udp    # writesrv
-writesrv        1334/tcp    # writesrv
-#                          Marvin Toungate <toungate at austin.ibm.com>   
-digital-notary	1335/udp    # Digital Notary Protocol
-digital-notary	1335/tcp    # Digital Notary Protocol
-#			   Wes Doonan
-ischat          1336/udp    # Instant Service Chat
-ischat	        1336/tcp    # Instant Service Chat
-#                          Mike Clise <mikec at instantservice.com>
-menandmice-dns  1337/udp    # menandmice DNS
-menandmice-dns  1337/tcp    # menandmice DNS
-#                          Sigfus Magnusson <sigfusm at menandmice.com>
-wmc-log-svc     1338/udp    # WMC-log-svr
-wmc-log-svc     1338/tcp    # WMC-log-svr
-#                          Stephen Brosseau <brosseau at workingmachines.com>  
-kjtsiteserver   1339/udp    # kjtsiteserver
-kjtsiteserver   1339/tcp    # kjtsiteserver
-#                          Jason Aubain <jaubain at kjt.com>
-naap            1340/udp    # NAAP
-naap		1340/tcp    # NAAP
-#                          Henry Haverinen <henry.haverinen at nokia.com>	
-qubes		1341/udp    # QuBES
-qubes           1341/tcp    # QuBES
-#                          Eric Grange <egrange at creative-it.net> 
-esbroker	1342/udp    # ESBroker
-esbroker	1342/tcp    # ESBroker
-#                          Alexander Medvinsky <smedvinsky at gi.com>
-re101           1343/udp    # re101
-re101		1343/tcp    # re101
-#                          Doriano Blengino <tecnico at xonelectronics.it>
-icap            1344/udp    # ICAP
-icap		1344/tcp    # ICAP
-#                          Jeremy Elson <jelson at isi.edu>
-vpjp            1345/udp    # VPJP
-vpjp            1345/tcp    # VPJP
-#                          Michael Collins <UBMCollins at aol.com>
-alta-ana-lm     1346/udp    # Alta Analytics License Manager 
-alta-ana-lm     1346/tcp    # Alta Analytics License Manager 
-bbn-mmc		1347/udp    # multi media conferencing
-bbn-mmc		1347/tcp    # multi media conferencing
-bbn-mmx		1348/udp    # multi media conferencing
-bbn-mmx		1348/tcp    # multi media conferencing
-sbook           1349/udp    # Registration Network Protocol       
-sbook           1349/tcp    # Registration Network Protocol       
-editbench       1350/udp    # Registration Network Protocol       
-editbench       1350/tcp    # Registration Network Protocol       
-#                          Simson L. Garfinkel <simsong at next.cambridge.ma.us>
-equationbuilder 1351/udp    # Digital Tool Works (MIT)            
-equationbuilder 1351/tcp    # Digital Tool Works (MIT)            
-#                          Terrence J. Talbot <lexcube!tjt at bu.edu>
-lotusnote       1352/udp    # Lotus Note                          
-lotusnote       1352/tcp    # Lotus Note                          
-#                          Greg Pflaum <iris.com!Greg_Pflaum at uunet.uu.net>
-relief          1353/udp    # Relief Consulting                   
-relief          1353/tcp    # Relief Consulting                   
-#                          John Feiler <relief!jjfeiler at uu2.psi.com>
-rightbrain      1354/udp    # RightBrain Software              
-rightbrain      1354/tcp    # RightBrain Software              
-#                          Glenn Reid <glann at rightbrain.com>
-intuitive-edge  1355/udp    # Intuitive Edge 
-intuitive-edge  1355/tcp    # Intuitive Edge 
-#                          Montgomery Zukowski
-#                          <monty at nextnorth.acs.ohio-state.edu> 
-cuillamartin    1356/udp    # CuillaMartin Company 
-cuillamartin    1356/tcp    # CuillaMartin Company 
-pegboard        1357/udp    # Electronic PegBoard  
-pegboard        1357/tcp    # Electronic PegBoard  
-#                          Chris Cuilla
-#                          <balr!vpnet!cuilla!chris at clout.chi.il.us> 
-connlcli        1358/udp    # CONNLCLI                             
-connlcli        1358/tcp    # CONNLCLI                             
-ftsrv           1359/udp    # FTSRV                                
-ftsrv           1359/tcp    # FTSRV                                
-#                          Ines Homem de Melo <sidinf at brfapesp.bitnet>
-mimer           1360/udp    # MIMER                               
-mimer           1360/tcp    # MIMER                               
-#                          Per Schroeder  <Per.Schroder at mimer.se>
-linx            1361/udp    # LinX                        
-linx            1361/tcp    # LinX                        
-#                          Steffen Schilke <---none--->
-timeflies       1362/udp    # TimeFlies                           
-timeflies       1362/tcp    # TimeFlies                           
-#                          Doug Kent <mouthers at slugg@nwnexus.wa.com>
-ndm-requester   1363/udp    # Network DataMover Requester
-ndm-requester   1363/tcp    # Network DataMover Requester
-ndm-server      1364/udp    # Network DataMover Server   
-ndm-server      1364/tcp    # Network DataMover Server   
-#                          Toshio Watanabe
-#                          <watanabe at godzilla.rsc.spdd.ricoh.co.j> 
-adapt-sna       1365/udp    # Network Software Associates
-adapt-sna       1365/tcp    # Network Software Associates
-#                          Jeffery Chiao <714-768-401>
-netware-csp     1366/udp    # Novell NetWare Comm Service Platform
-netware-csp     1366/tcp    # Novell NetWare Comm Service Platform
-#                          Laurie Lindsey <llindsey at novell.com>
-dcs             1367/udp    # DCS                             
-dcs             1367/tcp    # DCS                             
-#                          Stefan Siebert <ssiebert at dcs.de>
-screencast      1368/udp    # ScreenCast                          
-screencast      1368/tcp    # ScreenCast                          
-#                          Bill Tschumy <other!bill at uunet.UU.NET>
-gv-us           1369/udp    # GlobalView to Unix Shell             
-gv-us           1369/tcp    # GlobalView to Unix Shell             
-us-gv           1370/udp    # Unix Shell to GlobalView             
-us-gv           1370/tcp    # Unix Shell to GlobalView             
-#                          Makoto Mita <mita at ssdev.ksp.fujixerox.co.jp>
-fc-cli          1371/udp    # Fujitsu Config Protocol             
-fc-cli          1371/tcp    # Fujitsu Config Protocol             
-fc-ser          1372/udp    # Fujitsu Config Protocol             
-fc-ser          1372/tcp    # Fujitsu Config Protocol             
-#                          Ryuichi Horie <horie at spad.sysrap.cs.fujitsu.co.jp>
-chromagrafx     1373/udp    # Chromagrafx                         
-chromagrafx     1373/tcp    # Chromagrafx                         
-#                          Mike Barthelemy <msb at chromagrafx.com>
-molly           1374/udp    # EPI Software Systems        
-molly           1374/tcp    # EPI Software Systems        
-#                          Jim Vlcek <jvlcek at veeco.com>
-bytex           1375/udp    # Bytex                             
-bytex           1375/tcp    # Bytex                             
-#                          Mary Ann Burt <bytex!ws054!maryann at uunet.UU.NET>
-ibm-pps         1376/udp    # IBM Person to Person Software     
-ibm-pps         1376/tcp    # IBM Person to Person Software     
-#                          Simon Phipps <sphipps at vnet.ibm.com>
-cichlid         1377/udp    # Cichlid License Manager       
-cichlid         1377/tcp    # Cichlid License Manager       
-#                          Andy Burgess <aab at cichlid.com>
-elan            1378/udp    # Elan License Manager   
-elan            1378/tcp    # Elan License Manager   
-#                          Ken Greer <kg at elan.com>
-dbreporter      1379/udp    # Integrity Solutions                 
-dbreporter      1379/tcp    # Integrity Solutions                 
-#                          Tim Dawson <tdawson%mspboss at uunet.UU.NET>
-telesis-licman  1380/udp    # Telesis Network License Manager     
-telesis-licman  1380/tcp    # Telesis Network License Manager     
-#                          Karl Schendel, Jr. <wiz at telesis.com>
-apple-licman    1381/udp    # Apple Network License Manager 
-apple-licman    1381/tcp    # Apple Network License Manager 
-#                          Earl Wallace <earlw at apple.com>
-udt_os          1382/udp    # udt_os
-udt_os          1382/tcp    # udt_os
-gwha            1383/udp    # GW Hannaway Network License Manager
-gwha            1383/tcp    # GW Hannaway Network License Manager
-#                          J. Gabriel Foster <fop at gwha.com>
-os-licman       1384/udp    # Objective Solutions License Manager 
-os-licman       1384/tcp    # Objective Solutions License Manager 
-#                          Donald Cornwell <don.cornwell at objective.com>
-atex_elmd       1385/udp    # Atex Publishing License Manager
-atex_elmd       1385/tcp    # Atex Publishing License Manager
-#                          Brett Sorenson <bcs at atex.com>
-checksum        1386/udp    # CheckSum License Manager            
-checksum        1386/tcp    # CheckSum License Manager            
-#                          Andreas Glocker <glocker at sirius.com>
-cadsi-lm        1387/udp    # Computer Aided Design Software Inc LM 
-cadsi-lm        1387/tcp    # Computer Aided Design Software Inc LM 
-#                          Sulistio Muljadi <e-mail?>
-objective-dbc   1388/udp    # Objective Solutions DataBase Cache
-objective-dbc   1388/tcp    # Objective Solutions DataBase Cache
-#                          Donald Cornwell <e-mail?>
-iclpv-dm        1389/udp    # Document Manager                    
-iclpv-dm        1389/tcp    # Document Manager                    
-iclpv-sc        1390/udp    # Storage Controller                  
-iclpv-sc        1390/tcp    # Storage Controller                  
-iclpv-sas       1391/udp    # Storage Access Server               
-iclpv-sas       1391/tcp    # Storage Access Server               
-iclpv-pm        1392/udp    # Print Manager                       
-iclpv-pm        1392/tcp    # Print Manager                       
-iclpv-nls       1393/udp    # Network Log Server                  
-iclpv-nls       1393/tcp    # Network Log Server                  
-iclpv-nlc       1394/udp    # Network Log Client                  
-iclpv-nlc       1394/tcp    # Network Log Client                  
-iclpv-wsm       1395/udp    # PC Workstation Manager software     
-iclpv-wsm       1395/tcp    # PC Workstation Manager software     
-#                          A.P. Hobson <A.P.Hobson at bra0112.wins.icl.co.uk>
-dvl-activemail  1396/udp    # DVL Active Mail                     
-dvl-activemail  1396/tcp    # DVL Active Mail                     
-audio-activmail 1397/udp    # Audio Active Mail                   
-audio-activmail 1397/tcp    # Audio Active Mail                   
-video-activmail 1398/udp    # Video Active Mail                   
-video-activmail 1398/tcp    # Video Active Mail                   
-#                          Avshalom Houri <Avshalom at ubique.com>
-cadkey-licman   1399/udp    # Cadkey License Manager         
-cadkey-licman   1399/tcp    # Cadkey License Manager         
-cadkey-tablet   1400/udp    # Cadkey Tablet Daemon           
-cadkey-tablet   1400/tcp    # Cadkey Tablet Daemon           
-#                          Joe McCollough <joe at cadkey.com>
-goldleaf-licman 1401/udp    # Goldleaf License Manager
-goldleaf-licman 1401/tcp    # Goldleaf License Manager
-#                          John Fox <---none--->
-prm-sm-np       1402/udp    # Prospero Resource Manager
-prm-sm-np       1402/tcp    # Prospero Resource Manager
-prm-nm-np       1403/udp    # Prospero Resource Manager
-prm-nm-np       1403/tcp    # Prospero Resource Manager
-#                          B. Clifford Neuman <bcn at isi.edu>
-igi-lm          1404/udp    # Infinite Graphics License Manager
-igi-lm          1404/tcp    # Infinite Graphics License Manager
-ibm-res         1405/udp    # IBM Remote Execution Starter
-ibm-res         1405/tcp    # IBM Remote Execution Starter
-netlabs-lm      1406/udp    # NetLabs License Manager
-netlabs-lm      1406/tcp    # NetLabs License Manager
-dbsa-lm         1407/udp    # DBSA License Manager        
-dbsa-lm         1407/tcp    # DBSA License Manager        
-#                          Scott Shattuck <ss at dbsa.com>
-sophia-lm       1408/udp    # Sophia License Manager              
-sophia-lm       1408/tcp    # Sophia License Manager              
-#                          Eric Brown <sst!emerald!eric at uunet.UU.net>
-here-lm         1409/udp    # Here License Manager             
-here-lm         1409/tcp    # Here License Manager             
-#                          David Ison  <here at dialup.oar.net>
-hiq             1410/udp    # HiQ License Manager               
-hiq             1410/tcp    # HiQ License Manager               
-#                          Rick Pugh <rick at bilmillennium.com>
-af              1411/udp    # AudioFile                  
-af              1411/tcp    # AudioFile                  
-#                          Jim Gettys <jg at crl.dec.com>
-innosys         1412/udp    # InnoSys               
-innosys         1412/tcp    # InnoSys               
-innosys-acl     1413/udp    # Innosys-ACL           
-innosys-acl     1413/tcp    # Innosys-ACL           
-#                          Eric Welch <--none--->
-ibm-mqseries    1414/udp    # IBM MQSeries                        
-ibm-mqseries    1414/tcp    # IBM MQSeries                        
-#                          Roger Meli <rmmeli%winvmd at vnet.ibm.com>
-dbstar          1415/udp    # DBStar                          
-dbstar          1415/tcp    # DBStar                          
-#                          Jeffrey Millman <jcm at dbstar.com>
-novell-lu6.2    1416/udp    # Novell LU6.2         
-novell-lu6.2    1416/tcp    # Novell LU6.2         
-#                          Peter Liu <--none--->
-timbuktu-srv1   1417/udp    # Timbuktu Service 1 Port            
-timbuktu-srv1   1417/tcp    # Timbuktu Service 1 Port            
-timbuktu-srv2   1418/udp    # Timbuktu Service 2 Port            
-timbuktu-srv2   1418/tcp    # Timbuktu Service 2 Port            
-timbuktu-srv3   1419/udp    # Timbuktu Service 3 Port            
-timbuktu-srv3   1419/tcp    # Timbuktu Service 3 Port            
-timbuktu-srv4   1420/udp    # Timbuktu Service 4 Port            
-timbuktu-srv4   1420/tcp    # Timbuktu Service 4 Port            
-#                          Marc Epard <marc at netopia.com>
-gandalf-lm      1421/udp    # Gandalf License Manager
-gandalf-lm      1421/tcp    # Gandalf License Manager
-#                          gilmer at gandalf.ca
-autodesk-lm     1422/udp    # Autodesk License Manager   
-autodesk-lm     1422/tcp    # Autodesk License Manager   
-#                          David Ko <dko at autodesk.com>
-essbase         1423/udp    # Essbase Arbor Software     
-essbase         1423/tcp    # Essbase Arbor Software     
-hybrid          1424/udp    # Hybrid Encryption Protocol  
-hybrid          1424/tcp    # Hybrid Encryption Protocol  
-#                          Howard Hart <hch at hybrid.com>
-zion-lm         1425/udp    # Zion Software License Manager 
-zion-lm         1425/tcp    # Zion Software License Manager 
-#                          David Ferrero <david at zion.com>
-sais            1426/udp    # Satellite-data Acquisition System 1
-sais            1426/tcp    # Satellite-data Acquisition System 1
-#                          Bill Taylor <sais at ssec.wisc.edu>
-mloadd          1427/udp    # mloadd monitoring tool     
-mloadd          1427/tcp    # mloadd monitoring tool     
-#                          Bob Braden <braden at isi.edu>
-informatik-lm   1428/udp    # Informatik License Manager
-informatik-lm   1428/tcp    # Informatik License Manager
-#                          Harald Schlangmann
-#                          <schlangm at informatik.uni-muenchen.de> 
-nms             1429/udp    # Hypercom NMS                      
-nms             1429/tcp    # Hypercom NMS                      
-tpdu            1430/udp    # Hypercom TPDU                     
-tpdu            1430/tcp    # Hypercom TPDU                     
-#                          Noor Chowdhury <noor at hypercom.com>
-rgtp            1431/udp    # Reverse Gossip Transport
-rgtp            1431/tcp    # Reverse Gossip Transport
-#                          Ian Jackson  <iwj at cam-orl.co.uk>
-blueberry-lm    1432/udp    # Blueberry Software License Manager  
-blueberry-lm    1432/tcp    # Blueberry Software License Manager  
-#                          Steve Beigel <ublueb!steve at uunet.uu.net>
-ms-sql-s        1433/udp    # Microsoft-SQL-Server 
-ms-sql-s        1433/tcp    # Microsoft-SQL-Server 
-ms-sql-m        1434/udp    # Microsoft-SQL-Monitor                
-ms-sql-m        1434/tcp    # Microsoft-SQL-Monitor
-#                          Peter Hussey <peterhus at microsoft.com>
-ibm-cics        1435/udp    # IBM CICS
-ibm-cics        1435/tcp    # IBM CICS
-#                          Geoff Meacock <gbibmswl at ibmmail.COM>
-saism           1436/udp    # Satellite-data Acquisition System 2
-saism           1436/tcp    # Satellite-data Acquisition System 2
-#                          Bill Taylor <sais at ssec.wisc.edu>
-tabula          1437/udp    # Tabula
-tabula          1437/tcp    # Tabula
-#                          Marcelo Einhorn
-#                          <KGUNE%HUJIVM1.bitnet at taunivm.tau.ac.il> 
-eicon-server    1438/udp    # Eicon Security Agent/Server         
-eicon-server    1438/tcp    # Eicon Security Agent/Server         
-eicon-x25       1439/udp    # Eicon X25/SNA Gateway               
-eicon-x25       1439/tcp    # Eicon X25/SNA Gateway               
-eicon-slp       1440/udp    # Eicon Service Location Protocol     
-eicon-slp       1440/tcp    # Eicon Service Location Protocol     
-#                          Pat Calhoun <CALHOUN at admin.eicon.qc.ca>
-cadis-1         1441/udp    # Cadis License Management       
-cadis-1         1441/tcp    # Cadis License Management       
-cadis-2         1442/udp    # Cadis License Management       
-cadis-2         1442/tcp    # Cadis License Management       
-#                          Todd Wichers <twichers at csn.org>
-ies-lm          1443/udp    # Integrated Engineering Software     
-ies-lm          1443/tcp    # Integrated Engineering Software     
-#                          David Tong <David_Tong at integrated.mb.ca>
-marcam-lm       1444/udp    # Marcam  License Management    
-marcam-lm       1444/tcp    # Marcam  License Management    
-#                          Therese Hunt <hunt at marcam.com>
-proxima-lm      1445/udp    # Proxima License Manager       
-proxima-lm      1445/tcp    # Proxima License Manager       
-ora-lm          1446/udp    # Optical Research Associates License Manager
-ora-lm          1446/tcp    # Optical Research Associates License Manager
-apri-lm         1447/udp    # Applied Parallel Research LM
-apri-lm         1447/tcp    # Applied Parallel Research LM
-#                          Jim Dillon <jed at apri.com>
-oc-lm           1448/udp    # OpenConnect License Manager
-oc-lm           1448/tcp    # OpenConnect License Manager
-#                          Sue Barnhill <snb at oc.com>
-peport          1449/udp    # PEport                               
-peport          1449/tcp    # PEport                               
-#                          Qentin Neill <quentin at ColumbiaSC.NCR.COM>
-dwf             1450/udp    # Tandem Distributed Workbench Facility 
-dwf             1450/tcp    # Tandem Distributed Workbench Facility 
-#                          Mike Bert <BERG_MIKE at tandem.com>
-infoman         1451/udp    # IBM Information Management
-infoman         1451/tcp    # IBM Information Management
-#                          Karen Burns <---none--->
-gtegsc-lm       1452/udp    # GTE Government Systems License Man   
-gtegsc-lm       1452/tcp    # GTE Government Systems License Man   
-#                          Mike Gregory <Gregory_Mike at msmail.iipo.gtegsc.com>
-genie-lm        1453/udp    # Genie License Manager                
-genie-lm        1453/tcp    # Genie License Manager                
-#                          Paul Applegate <p.applegate2 at genie.geis.com>
-interhdl_elmd   1454/udp    # interHDL License Manager      
-interhdl_elmd   1454/tcp    # interHDL License Manager      
-#                          Eli Sternheim eli at interhdl.com
-esl-lm          1455/udp    # ESL License Manager           
-esl-lm          1455/tcp    # ESL License Manager           
-#                          Abel Chou <abel at willy.esl.com>
-dca             1456/udp    # DCA           
-dca             1456/tcp    # DCA           
-#                          Jeff Garbers <jgarbers at netcom.com>
-valisys-lm      1457/udp    # Valisys License Manager
-valisys-lm      1457/tcp    # Valisys License Manager
-#                          Leslie Lincoln <leslie_lincoln at valisys.com>
-nrcabq-lm       1458/udp    # Nichols Research Corp.
-nrcabq-lm       1458/tcp    # Nichols Research Corp.
-#                          Howard Cole <hcole at tumbleweed.nrcabq.com>
-proshare1       1459/udp    # Proshare Notebook Application
-proshare1       1459/tcp    # Proshare Notebook Application
-proshare2       1460/udp    # Proshare Notebook Application
-proshare2       1460/tcp    # Proshare Notebook Application
-#                          Robin Kar <Robin_Kar at ccm.hf.intel.com>
-ibm_wrless_lan  1461/udp    # IBM Wireless LAN 
-ibm_wrless_lan  1461/tcp    # IBM Wireless LAN 
-#                          <flanne at vnet.IBM.COM>
-world-lm        1462/udp    # World License Manager
-world-lm        1462/tcp    # World License Manager
-#                          Michael S Amirault <ambi at world.std.com>
-nucleus         1463/udp    # Nucleus
-nucleus         1463/tcp    # Nucleus
-#                          Venky Nagar <venky at fafner.Stanford.EDU>
-msl_lmd         1464/udp     # MSL License Manager
-msl_lmd         1464/tcp     # MSL License Manager
-#                           Matt Timmermans
-pipes           1465/udp     # Pipes Platform  mfarlin at peerlogic.com
-pipes           1465/tcp     # Pipes Platform 
-#                           Mark Farlin <mfarlin at peerlogic.com>
-oceansoft-lm    1466/udp     # Ocean Software License Manager
-oceansoft-lm    1466/tcp     # Ocean Software License Manager
-#                           Randy Leonard <randy at oceansoft.com>
-csdmbase        1467/udp     # CSDMBASE  
-csdmbase        1467/tcp     # CSDMBASE  
-csdm            1468/udp     # CSDM      
-csdm            1468/tcp     # CSDM      
-#               Robert Stabl <stabl at informatik.uni-muenchen.de>
-aal-lm          1469/udp     # Active Analysis Limited License Manager
-aal-lm          1469/tcp     # Active Analysis Limited License Manager
-#                           David Snocken  +44 (71)437-7009
-uaiact          1470/udp     # Universal Analytics  
-uaiact          1470/tcp     # Universal Analytics  
-#                           Mark R. Ludwig <Mark-Ludwig at uai.com>
-csdmbase        1471/udp     # csdmbase   
-csdmbase        1471/tcp     # csdmbase   
-csdm            1472/udp     # csdm       
-csdm            1472/tcp     # csdm       
-#               Robert Stabl <stabl at informatik.uni-muenchen.de>
-openmath        1473/udp     # OpenMath   
-openmath        1473/tcp     # OpenMath   
-#                           Garth Mayville <mayville at maplesoft.on.ca>
-telefinder      1474/udp     # Telefinder 
-telefinder      1474/tcp     # Telefinder 
-#                           Jim White <Jim_White at spiderisland.com>
-taligent-lm     1475/udp     # Taligent License Manager  
-taligent-lm     1475/tcp     # Taligent License Manager  
-#               Mark Sapsford <Mark_Sapsford@@taligent.com>
-clvm-cfg        1476/udp     # clvm-cfg  
-clvm-cfg        1476/tcp     # clvm-cfg  
-#                           Eric Soderberg <seric at cup.hp.com>
-ms-sna-server   1477/udp     # ms-sna-server  
-ms-sna-server   1477/tcp     # ms-sna-server  
-ms-sna-base     1478/udp     # ms-sna-base    
-ms-sna-base     1478/tcp     # ms-sna-base    
-#                           Gordon Mangione <gordm at microsoft.com>
-dberegister     1479/udp     # dberegister  
-dberegister     1479/tcp     # dberegister  
-#                           Brian Griswold <brian at dancingbear.com>
-pacerforum      1480/udp     # PacerForum  
-pacerforum      1480/tcp     # PacerForum  
-#                           Peter Caswell <pfc at pacvax.pacersoft.com>
-airs            1481/udp     # AIRS        
-airs            1481/tcp     # AIRS        
-#                           Bruce Wilson, 905-771-6161
-miteksys-lm     1482/udp     # Miteksys License Manager
-miteksys-lm     1482/tcp     # Miteksys License Manager
-#                           Shane McRoberts <mcroberts at miteksys.com>
-afs             1483/udp     # AFS License Manager   
-afs             1483/tcp     # AFS License Manager   
-#                           Michael R. Pizolato <michael at afs.com>
-confluent       1484/udp     # Confluent License Manager 
-confluent       1484/tcp     # Confluent License Manager 
-#                           James Greenfiel <jim at pa.confluent.com>
-lansource       1485/udp     # LANSource 
-lansource       1485/tcp     # LANSource 
-#                           Christopher Wells <Christopher_Wells at 3com.com>
-nms_topo_serv   1486/udp     # nms_topo_serv  
-nms_topo_serv   1486/tcp     # nms_topo_serv  
-#                           Sylvia Siu <Sylvia_Siu at Novell.CO>
-localinfosrvr   1487/udp     # LocalInfoSrvr  
-localinfosrvr   1487/tcp     # LocalInfoSrvr  
-#               Brian Matthews <brian_matthews at ibist.ibis.com>
-docstor         1488/udp     # DocStor  
-docstor         1488/tcp     # DocStor  
-#                           Brian Spears <bspears at salix.com>
-dmdocbroker     1489/udp     # dmdocbroker  
-dmdocbroker     1489/tcp     # dmdocbroker  
-#                           Razmik Abnous <abnous at documentum.com>
-insitu-conf     1490/udp     # insitu-conf  
-insitu-conf     1490/tcp     # insitu-conf  
-#                           Paul Blacknell <paul at insitu.com>
-anynetgateway   1491/udp     # anynetgateway  
-anynetgateway   1491/tcp     # anynetgateway  
-#                           Dan Poirier <poirier at VNET.IBM.COM>
-stone-design-1  1492/udp     # stone-design-1  
-stone-design-1  1492/tcp     # stone-design-1  
-#                           Andrew Stone <andrew at stone.com>
-netmap_lm       1493/udp     # netmap_lm  
-netmap_lm       1493/tcp     # netmap_lm  
-#                           Phillip Magson <philm at extro.ucc.su.OZ.AU>
-ica             1494/udp     # ica   
-ica             1494/tcp     # ica   
-#                           John Richardson, Citrix Systems
-cvc             1495/udp     # cvc  
-cvc             1495/tcp     # cvc  
-#                           Bill Davidson <billd at equalizer.cray.com>
-liberty-lm      1496/udp     # liberty-lm
-liberty-lm      1496/tcp     # liberty-lm
-#                           Jim Rogers <trane!jimbo at pacbell.com>
-rfx-lm          1497/udp     # rfx-lm
-rfx-lm          1497/tcp     # rfx-lm
-#                           Bill Bishop <bil at rfx.rfx.com>
-sybase-sqlany   1498/udp     # Sybase SQL Any
-sybase-sqlany   1498/tcp     # Sybase SQL Any
-#                           Dave Neudoerffer <Dave.Neudoerffer at ianywhere.com>
-fhc             1499/udp     # Federico Heinz Consultora
-fhc             1499/tcp     # Federico Heinz Consultora
-#                           Federico Heinz <federico at heinz.com>
-vlsi-lm         1500/udp     # VLSI License Manager
-vlsi-lm         1500/tcp     # VLSI License Manager
-#                           Shue-Lin Kuo <shuelin at mdk.sanjose.vlsi.com>
-saiscm          1501/udp     # Satellite-data Acquisition System 3 
-saiscm          1501/tcp     # Satellite-data Acquisition System 3 
-#                           Bill Taylor <sais at ssec.wisc.edu>
-shivadiscovery  1502/udp     # Shiva
-shivadiscovery  1502/tcp     # Shiva
-#                           Jonathan Wenocur <jhw at Shiva.COM>
-imtc-mcs        1503/udp     # Databeam
-imtc-mcs        1503/tcp     # Databeam
-#                           Jim Johnston <jjohnston at databeam.com>
-evb-elm         1504/udp     # EVB Software Engineering License Manager
-evb-elm         1504/tcp     # EVB Software Engineering License Manager
-#                           B.G. Mahesh < mahesh at sett.com>
-funkproxy       1505/udp     # Funk Software, Inc.
-funkproxy       1505/tcp     # Funk Software, Inc.
-#                           Robert D. Vincent <bert at willowpond.com>
-utcd            1506/udp     # Universal Time daemon (utcd)
-utcd            1506/tcp     # Universal Time daemon (utcd)
-#                           Walter Poxon <wdp at ironwood.cray.com>
-symplex         1507/udp     # symplex
-symplex         1507/tcp     # symplex
-#                           Mike Turley <turley at symplex.com>
-diagmond        1508/udp     # diagmond
-diagmond        1508/tcp     # diagmond
-#                           Pete Moscatelli <moscat at hprdstl0.rose.hp.com>
-robcad-lm       1509/udp     # Robcad, Ltd. License Manager
-robcad-lm       1509/tcp     # Robcad, Ltd. License Manager
-#                           Hindin Joseph <hindin%robcad at uunet.uu.net>
-mvx-lm          1510/udp     # Midland Valley Exploration Ltd. Lic. Man.
-mvx-lm          1510/tcp     # Midland Valley Exploration Ltd. Lic. Man.
-#                           Neil Salter <neil at indigo2.mvel.demon.co.uk>Laszlo
-3l-l1           1511/udp     # 3l-l1
-3l-l1           1511/tcp     # 3l-l1
-#                           Ian A. Young <iay at threel.co.uk>
-wins            1512/udp     # Microsoft's Windows Internet Name Service
-wins            1512/tcp     # Microsoft's Windows Internet Name Service
-#                           Pradeep Bahl <pradeepb at microsoft.com>
-fujitsu-dtc     1513/udp     # Fujitsu Systems Business of America, Inc
-fujitsu-dtc     1513/tcp     # Fujitsu Systems Business of America, Inc
-fujitsu-dtcns   1514/udp     # Fujitsu Systems Business of America, Inc
-fujitsu-dtcns   1514/tcp     # Fujitsu Systems Business of America, Inc
-#                           Charles A. Higgins <75730.2257 at compuserve.com>
-ifor-protocol   1515/udp     # ifor-protocol
-ifor-protocol   1515/tcp     # ifor-protocol
-#                           Dr. R.P. Alston <robin at gradient.com>
-vpad            1516/udp     # Virtual Places Audio data
-vpad            1516/tcp     # Virtual Places Audio data
-vpac            1517/udp     # Virtual Places Audio control
-vpac            1517/tcp     # Virtual Places Audio control
-vpvd            1518/udp     # Virtual Places Video data
-vpvd            1518/tcp     # Virtual Places Video data
-vpvc            1519/udp     # Virtual Places Video control
-vpvc            1519/tcp     # Virtual Places Video control
-#                           Avshalom Houri <Avshalom at ubique.com>
-atm-zip-office  1520/udp     # atm zip office
-atm-zip-office  1520/tcp     # atm zip office
-#                           Wilson Kwan <wilsonk%toronto at zip.atm.com>
-ncube-lm        1521/udp     # nCube License Manager
-ncube-lm        1521/tcp     # nCube License Manager
-#                           Maxine Yuen <maxine at hq.ncube.com>
-ricardo-lm      1522/udp     # Ricardo North America License Manager
-ricardo-lm      1522/tcp     # Ricardo North America License Manager
-#                           Mike Flemming <mf at xnet.com>
-cichild-lm      1523/udp     # cichild
-cichild-lm      1523/tcp     # cichild
-#                           Andy Burgess <aab at cichlid.com>
-ingreslock	1524/udp     # ingres
-ingreslock	1524/tcp     # ingres
-orasrv          1525/udp     prospero-np # oracle
-orasrv          1525/tcp     prospero-np # oracle
-pdap-np         1526/udp     # Prospero Data Access Prot non-priv 
-pdap-np         1526/tcp     # Prospero Data Access Prot non-priv 
-#                           B. Clifford Neuman <bcn at isi.edu>
-tlisrv          1527/udp     # oracle
-tlisrv          1527/tcp     # oracle
-mciautoreg      1528/udp     # micautoreg
-mciautoreg      1528/tcp     # micautoreg
-#                           John Klensin <klensin at MAIL1.RESTON.MCI.NET>
-coauthor        1529/udp     # oracle
-coauthor        1529/tcp     # oracle
-rap-service     1530/udp     # rap-service
-rap-service     1530/tcp     # rap-service
-rap-listen      1531/udp     # rap-listen
-rap-listen      1531/tcp     # rap-listen
-#                           Phil Servita <meister at ftp.com>
-miroconnect     1532/udp     # miroconnect
-miroconnect     1532/tcp     # miroconnect
-#                           Michael Fischer +49 531 21 13 0
-virtual-places  1533/udp     # Virtual Places Software
-virtual-places  1533/tcp     # Virtual Places Software
-#                           Avshalom Houri <Avshalom at ubique.com> 
-micromuse-lm    1534/udp     # micromuse-lm    
-micromuse-lm    1534/tcp     # micromuse-lm    
-#                           Adam Kerrison <adam at micromuse.co.uk>
-ampr-info       1535/udp     # ampr-info    
-ampr-info       1535/tcp     # ampr-info    
-ampr-inter      1536/udp     # ampr-inter
-ampr-inter      1536/tcp     # ampr-inter
-#                           Rob Janssen <rob at sys3.pe1chl.ampr.org>
-sdsc-lm         1537/udp     # isi-lm
-sdsc-lm         1537/tcp     # isi-lm
-#                           Len Wanger <lrw at sdsc.edu>
-3ds-lm          1538/udp     # 3ds-lm
-3ds-lm          1538/tcp     # 3ds-lm
-#                           Keith Trummel <ktrummel at autodesk.com>
-intellistor-lm  1539/udp     # Intellistor License Manager
-intellistor-lm  1539/tcp     # Intellistor License Manager
-#                           Ron Vaughn <rv at intellistor.com>
-rds             1540/udp     # rds
-rds             1540/tcp     # rds
-rds2            1541/udp     # rds2
-rds2            1541/tcp     # rds2
-#                           Sudhakar Rajamannar <mobius1 at cerfnet.com>
-gridgen-elmd    1542/udp     # gridgen-elmd
-gridgen-elmd    1542/tcp     # gridgen-elmd
-#                           John R. Chawner +1 817 354-1004
-simba-cs        1543/udp     # simba-cs
-simba-cs        1543/tcp     # simba-cs
-#                           Betsy Alexander +1 604-681-4549
-aspeclmd        1544/udp     # aspeclmd
-aspeclmd        1544/tcp     # aspeclmd
-#                           V. Balaji <balaji at aspec.com>
-vistium-share   1545/udp     # vistium-share
-vistium-share   1545/tcp     # vistium-share
-#                           Allison Carleton 
-#                           <acarleto at naper1.napervilleil.ncr.com>
-abbaccuray      1546/udp     # abbaccuray
-abbaccuray      1546/tcp     # abbaccuray
-#                           John Wendt 614-261-2000
-laplink         1547/udp     # laplink
-laplink         1547/tcp     # laplink
-#                           Michael Crawford <MichaelC at dev.travsoft.com>
-axon-lm         1548/udp     # Axon License Manager
-axon-lm         1548/tcp     # Axon License Manager
-#   Mark Pearce <<Mark_A.._Pearce/AXON_Networks_Inc.. at notes.axon.com>
-shivasound      1549/udp     # Shiva Sound
-shivahose       1549/tcp     # Shiva Hose
-#                           Kin Chan <kchan at shiva.com>
-3m-image-lm     1550/udp     # Image Storage license manager 3M Company
-3m-image-lm     1550/tcp     # Image Storage license manager 3M Company
-#                           J. C. Canessa <jccanessa at mmm.com>
-hecmtl-db       1551/udp     # HECMTL-DB
-hecmtl-db       1551/tcp     # HECMTL-DB
-#                           Maxime Belanger <R173 at hec.ca>
-pciarray        1552/udp     # pciarray
-pciarray        1552/tcp     # pciarray
-#                           Ron Folk <rfolkes at avl.com>
-sna-cs          1553/udp     # sna-cs
-sna-cs          1553/tcp     # sna-cs
-#                           Tony Sowter <ts at datcon.co.uk>
-caci-lm         1554/udp     # CACI Products Company License Manager
-caci-lm         1554/tcp     # CACI Products Company License Manager
-#                           Erik Blume <erikb at caciasl.com>
-livelan         1555/udp     # livelan
-livelan         1555/tcp     # livelan
-#                           khedayat at roadrunner.pictel.com <Kaynam Hedayat>
-ashwin          1556/udp     # AshWin CI Tecnologies
-ashwin          1556/tcp     # AshWin CI Tecnologies
-#                           Dave Neal <daven at ashwin.com>
-arbortext-lm    1557/udp     # ArborText License Manager
-arbortext-lm    1557/tcp     # ArborText License Manager
-#                           David J. Wilson <djw at arbortext.com>
-xingmpeg        1558/udp     # xingmpeg
-xingmpeg        1558/tcp     # xingmpeg
-#                           Howard Gordon <hgordon at system.xingtech.com>
-web2host        1559/udp     # web2host
-web2host        1559/tcp     # web2host
-#                           Stephen Johnson <sjohnson at mindspring.com>
-asci-val        1560/udp     # ASCI-RemoteSHADOW
-asci-val        1560/tcp     # ASCI-RemoteSHADOW
-#                           Benjamin Rosenberg <brosenberg at advsyscon.com>
-facilityview    1561/udp     # facilityview
-facilityview    1561/tcp     # facilityview
-#                           Ed Green <egreen at pmeasuring.com>
-pconnectmgr     1562/udp     # pconnectmgr
-pconnectmgr     1562/tcp     # pconnectmgr
-#                           Bob Kaiser <BKaiser at palindrome.com>
-cadabra-lm      1563/udp     # Cadabra License Manager
-cadabra-lm      1563/tcp     # Cadabra License Manager
-#                           Arthur Castonguay <arthurc at doe.carleton.ca>
-pay-per-view    1564/udp     # Pay-Per-View
-pay-per-view    1564/tcp     # Pay-Per-View
-#                           Brian Tung <brian at isi.edu>
-winddlb         1565/udp     # WinDD
-winddlb         1565/tcp     # WinDD
-#                           Kelly Sims <kellys at garnet.wv.tek.com>
-corelvideo      1566/udp     # CORELVIDEO
-corelvideo      1566/tcp     # CORELVIDEO
-#                           Ming Poon <mingp at corel.ca>
-jlicelmd        1567/udp     # jlicelmd
-jlicelmd        1567/tcp     # jlicelmd
-#                           Christian Schormann <100410.3063 at compuserve.com>
-tsspmap         1568/udp     # tsspmap
-tsspmap         1568/tcp     # tsspmap
-#                           Paul W. Nelson <nelson at thursby.com>
-ets             1569/udp     # ets
-ets             1569/tcp     # ets
-#                           Carstein Seeberg <case at boole.no> 
-orbixd          1570/udp     # orbixd
-orbixd          1570/tcp     # orbixd
-#                           Bridget Walsh <bwalsh at iona.ie>
-rdb-dbs-disp    1571/udp     # Oracle Remote Data Base
-rdb-dbs-disp    1571/tcp     # Oracle Remote Data Base
-#                           <mackin at us.oracle.com>
-chip-lm         1572/udp     # Chipcom License Manager
-chip-lm         1572/tcp     # Chipcom License Manager
-#                           Jerry Natowitz <Jerry Natowitz>
-itscomm-ns      1573/udp     # itscomm-ns
-itscomm-ns      1573/tcp     # itscomm-ns
-#                           Rich Thompson <richt at watson.ibm.com>
-mvel-lm         1574/udp     # mvel-lm
-mvel-lm         1574/tcp     # mvel-lm
-#                           David Bisset <dbisset at mvel.demon.co.uk>
-oraclenames     1575/udp     # oraclenames
-oraclenames     1575/tcp     # oraclenames
-#                           P.V.Shivkumar <PSHIVKUM at us.oracle.com>
-moldflow-lm     1576/udp     # moldflow-lm
-moldflow-lm     1576/tcp     # moldflow-lm
-#                           Paul Browne <browne at moldflow.com.au>
-hypercube-lm    1577/udp     # hypercube-lm
-hypercube-lm    1577/tcp     # hypercube-lm
-#                           Christopher McLendon <cem at hyper.com>
-jacobus-lm      1578/udp     # Jacobus License Manager
-jacobus-lm      1578/tcp     # Jacobus License Manager
-#                           Tony Cleveland <tony.cleveland at jacobus.com>
-ioc-sea-lm      1579/udp     # ioc-sea-lm
-ioc-sea-lm      1579/tcp     # ioc-sea-lm
-#                           Paul Nelson <paul at ioc-sea.com>
-tn-tl-r2        1580/udp     # tn-tl-r2
-tn-tl-r1        1580/tcp     # tn-tl-r1
-#                           Ed Kress <eskress at thinknet.com>
-mil-2045-47001  1581/udp     # MIL-2045-47001
-mil-2045-47001  1581/tcp     # MIL-2045-47001
-#                           Eric Whitehill <eawhiteh at itt.com>
-msims           1582/udp     # MSIMS
-msims           1582/tcp     # MSIMS
-#                           Glenn Olander <gjo at msi.com>
-simbaexpress    1583/udp     # simbaexpress
-simbaexpress    1583/tcp     # simbaexpress
-#                           Betsy Alexander +1 604-681-4549
-tn-tl-fd2       1584/udp     # tn-tl-fd2
-tn-tl-fd2       1584/tcp     # tn-tl-fd2
-#                           Ed Kress <eskress at thinknet.com>
-intv            1585/udp     # intv
-intv            1585/tcp     # intv
-#                           Dermot Tynand <dtynan at claddagh.ie>
-ibm-abtact      1586/udp     # ibm-abtact
-ibm-abtact      1586/tcp     # ibm-abtact
-#                           Sandeep K. Singhal <singhal at CS.Stanford.EDU>
-pra_elmd        1587/udp     # pra_elmd
-pra_elmd        1587/tcp     # pra_elmd
-#                           Dennis Mastin <dennis at tasmania.platte.com>
-triquest-lm     1588/udp     # triquest-lm 
-triquest-lm     1588/tcp     # triquest-lm 
-#                           Nand Kumar <nkumar at triquest-da.com>
-vqp             1589/udp     # VQP
-vqp             1589/tcp     # VQP
-#                           Keith McCloghrie <kzm at cisco.com>
-gemini-lm       1590/udp     # gemini-lm
-gemini-lm       1590/tcp     # gemini-lm
-#                           Tony Sawyer <tonys at gemtech.com>
-ncpm-pm         1591/udp     # ncpm-pm
-ncpm-pm         1591/tcp     # ncpm-pm
-#                           Ted Power <tedp at hpinpcb.cup.hp.com>
-commonspace     1592/udp     # commonspace
-commonspace     1592/tcp     # commonspace
-#                           Rob Chandhok <chandhok at within.com>
-mainsoft-lm     1593/udp     # mainsoft-lm
-mainsoft-lm     1593/tcp     # mainsoft-lm
-#                           Anand Gangadharan <anand at goa.mainsoft.com>
-sixtrak         1594/udp     # sixtrak
-sixtrak         1594/tcp     # sixtrak
-#                           Bob Rennie <rjrennie at wizvax.net>
-radio           1595/udp     # radio
-radio           1595/tcp     # radio
-radio-bc        1596/udp     # radio-bc
-radio-sm        1596/tcp     # radio-sm
-#                           Ken Chapman <kchapman at isis.com>
-orbplus-iiop    1597/udp     # orbplus-iiop
-orbplus-iiop    1597/tcp     # orbplus-iiop
-#                           Robert A. Kukura <kukura at apollo.hp.com>
-picknfs         1598/udp     # picknfs
-picknfs         1598/tcp     # picknfs
-#                           John Lombardo <johnl at picksys.com>
-simbaservices   1599/udp     # simbaservices
-simbaservices   1599/tcp     # simbaservices
-#                           Betsy Alexander +1 604-681-4549
-issd		1600/udp # 
-issd		1600/tcp # 
-aas             1601/udp    # aas
-aas             1601/tcp    # aas
-#                          Bob Beard <bobb at lachman.com>
-inspect         1602/udp    # inspect
-inspect         1602/tcp    # inspect
-#                          Frank O'Neill <frank at morse.ilo.dec.com>
-picodbc         1603/udp    # pickodbc
-picodbc         1603/tcp    # pickodbc
-#                          John Lombardo <johnl at picksys.com>
-icabrowser      1604/udp    # icabrowser
-icabrowser      1604/tcp    # icabrowser
-#                          Brad Pedersen <bradp at citrix.com>       
-slp             1605/udp    # Salutation Manager (Salutation Protocol)
-slp             1605/tcp    # Salutation Manager (Salutation Protocol)
-slm-api         1606/udp    # Salutation Manager (SLM-API)
-slm-api         1606/tcp    # Salutation Manager (SLM-API)
-#                          Tohru Mori <tmori at VNET.IBM.COM>       
-stt             1607/udp    # stt
-stt             1607/tcp    # stt
-#                          Ryan Bolz <ryanbo at microsoft.com>
-smart-lm        1608/udp    # Smart Corp. License Manager
-smart-lm        1608/tcp    # Smart Corp. License Manager
-#                          Connie Qiu <connie at scdb.com>
-isysg-lm        1609/udp    # isysg-lm
-isysg-lm        1609/tcp    # isysg-lm
-#                          Adam Curtin <adam.curtin at isysg.com>
-taurus-wh       1610/udp    # taurus-wh
-taurus-wh       1610/tcp    # taurus-wh
-#                          Jeff Moffatt <jeff at taurus.com>
-ill             1611/udp    # Inter Library Loan
-ill             1611/tcp    # Inter Library Loan
-#                          Niall Murphy <niallm at orca.ucd.ie>
-netbill-trans   1612/udp    # NetBill Transaction Server
-netbill-trans   1612/tcp    # NetBill Transaction Server
-netbill-keyrep  1613/udp    # NetBill Key Repository
-netbill-keyrep  1613/tcp    # NetBill Key Repository
-netbill-cred    1614/udp    # NetBill Credential Server
-netbill-cred    1614/tcp    # NetBill Credential Server
-netbill-auth    1615/udp    # NetBill Authorization Server
-netbill-auth    1615/tcp    # NetBill Authorization Server
-netbill-prod    1616/udp    # NetBill Product Server
-netbill-prod    1616/tcp    # NetBill Product Server
-#                          Marvin Sirbu <sirbu+ at andrew.cmu.edu>
-nimrod-agent    1617/udp    # Nimrod Inter-Agent Communication
-nimrod-agent    1617/tcp    # Nimrod Inter-Agent Communication
-#                          Charles Lynn <clynn at bbn.com>
-skytelnet       1618/udp    # skytelnet
-skytelnet       1618/tcp    # skytelnet
-#                          Byron Jones <byronj at bellsouth.net>
-xs-openstorage  1619/udp   # xs-openstorage
-xs-openstorage  1619/tcp   # xs-openstorage
-#                         XuiS Software Ltd. <100322.2376 at compuserve.com>
-faxportwinport  1620/udp   # faxportwinport
-faxportwinport  1620/tcp   # faxportwinport
-#                         Chris Wells <chris_wells at lansource.com>
-softdataphone   1621/udp   # softdataphone
-softdataphone   1621/tcp   # softdataphone
-#                         Dror Gill <drorgi at VNET.IBM.COM>n
-ontime          1622/udp   # ontime
-ontime          1622/tcp   # ontime
-#                         Keith Rhodes 810-559-5955
-jaleosnd        1623/udp   # jaleosnd
-jaleosnd        1623/tcp   # jaleosnd
-#                         Christian Schormann <100410.3063 at compuserve.com>
-udp-sr-port     1624/udp   # udp-sr-port
-udp-sr-port     1624/tcp   # udp-sr-port
-#                         Herb Jensen <HWJensen at nfsrv.avionics.itt.com>
-svs-omagent     1625/udp   # svs-omagent
-svs-omagent     1625/tcp   # svs-omagent
-#                         Alberto Berlen <aberlen at VNET.IBM.COM>
-shockwave	1626/udp   # Shockwave
-shockwave	1626/tcp   # Shockwave
-#			  Sarah Allen <sallen at macromedia.com>
-t128-gateway	1627/udp   # T.128 Gateway
-t128-gateway	1627/tcp   # T.128 Gateway
-#			  Phil May <pm at datcon.co.uk>
-lontalk-norm	1628/udp   # LonTalk normal
-lontalk-norm	1628/tcp   # LonTalk normal
-lontalk-urgnt	1629/udp   # LonTalk urgent
-lontalk-urgnt	1629/tcp   # LonTalk urgent
-#			  Dan Wing <dwing at cisco.com>
-oraclenet8cman	1630/udp   # Oracle Net8 Cman
-oraclenet8cman	1630/tcp   # Oracle Net8 Cman
-#			  Tong-Ming Lee <tmlee at us.oracle.com>
-visitview	1631/udp   # Visit view 	
-visitview	1631/tcp   # Visit view 	
-#			  Tom Whittaker <tomw at ssec.wisc.edu>
-pammratc	1632/udp   # PAMMRATC
-pammratc	1632/tcp   # PAMMRATC
-pammrpc		1633/udp   # PAMMRPC
-pammrpc		1633/tcp   # PAMMRPC
-#			  John Britton <johnb at peakaudio.com>
-loaprobe	1634/udp   # Log On America Probe
-loaprobe	1634/tcp   # Log On America Probe
-#			  James Tavares, Log On America <krontor at loa.com> 
-edb-server1     1635/udp   # EDB Server 1
-edb-server1     1635/tcp   # EDB Server 1
-#                         Carlos Portela <cportela at simple-sw.com>
-cncp            1636/udp   # CableNet Control Protocol
-cncp            1636/tcp   # CableNet Control Protocol
-cnap            1637/udp   # CableNet Admin Protocol
-cnap            1637/tcp   # CableNet Admin Protocol
-cnip            1638/udp   # CableNet Info Protocol
-cnip            1638/tcp   # CableNet Info Protocol
-#                         Damian Hamill <damian at cablenet.net>
-cert-initiator  1639/udp   # cert-initiator
-cert-initiator  1639/tcp   # cert-initiator
-cert-responder  1640/udp   # cert-responder
-cert-responder  1640/tcp   # cert-responder
-#                         Tom Markson <markson at osmosys.incog.com>
-invision        1641/udp   # InVision
-invision        1641/tcp   # InVision
-#                         Christopher Davey <niallocl at quay.ie>
-isis-am         1642/udp   # isis-am
-isis-am         1642/tcp   # isis-am
-isis-ambc       1643/udp   # isis-ambc
-isis-ambc       1643/tcp   # isis-ambc
-#                         Ken Chapman <kchapman at isis.com>
-saiseh          1644/tcp   # Satellite-data Acquisition System 4
-#                         Bill Taylor <sais at ssec.wisc.edu>
-sightline       1645/udp   # SightLine  
-sightline       1645/tcp   # SightLine   
-#                         Stuart J. Newman <stuart.newman at fortel.com>
-sa-msg-port     1646/udp   # sa-msg-port
-sa-msg-port     1646/tcp   # sa-msg-port
-#                         Eric Whitehill <eawhiteh at itt.com>
-rsap            1647/udp   # rsap
-rsap            1647/tcp   # rsap
-#                         Holger Reif 
-#                         <Holger.Reif at prakinf.tu-ilmenau.de> 
-concurrent-lm   1648/udp   # concurrent-lm
-concurrent-lm   1648/tcp   # concurrent-lm
-#                         Maggie Brinsford <mjb at concurrent.co.uk>
-kermit          1649/udp   # kermit 
-kermit          1649/tcp   # kermit
-#                         Frank da Cruz <fdc at watsun.cc.columbia.edu>
-nkd		1650/udp   # nkd
-nkd		1650/tcp   # nkdn
-shiva_confsrvr  1651/udp   # shiva_confsrvr
-shiva_confsrvr  1651/tcp   # shiva_confsrvr
-#                         Mike Horowitz <mah at Shiva.COM>
-xnmp            1652/udp   # xnmp
-xnmp            1652/tcp   # xnmp
-#                         Ali Saleh <scomm at cerf.net>
-alphatech-lm    1653/udp   # alphatech-lm
-alphatech-lm    1653/tcp   # alphatech-lm
-#                         Joseph Hauk <joseph.hauk at alphatech.com>
-stargatealerts  1654/udp   # stargatealerts
-stargatealerts  1654/tcp   # stargatealerts
-#                         Tim Coppernoll
-#                         <Tim_Coppernoll at ccm.jf.intel.com>
-dec-mbadmin     1655/udp   # dec-mbadmin
-dec-mbadmin     1655/tcp   # dec-mbadmin
-dec-mbadmin-h   1656/udp   # dec-mbadmin-h
-dec-mbadmin-h   1656/tcp   # dec-mbadmin-h
-#                         Nick Shipman <Nick.Shipman at mrmog.reo.dec.com>
-fujitsu-mmpdc   1657/udp   # fujitsu-mmpdc
-fujitsu-mmpdc   1657/tcp   # fujitsu-mmpdc
-#                         Katsumi Oomuro <NAE01421 at niftyserve.or.jp>
-sixnetudr       1658/udp   # sixnetudr
-sixnetudr       1658/tcp   # sixnetudr
-#                         Bob Rennie <rjrennie at wizvax.net>
-sg-lm           1659/udp   # Silicon Grail License Manager
-sg-lm           1659/tcp   # Silicon Grail License Manager
-#                         William R Bishop <wrb at world.std.com>
-skip-mc-gikreq  1660/udp   # skip-mc-gikreq
-skip-mc-gikreq  1660/tcp   # skip-mc-gikreq
-#                         Tom Markson <markson at osmosys.incog.com>
-netview-aix-1   1661/udp   # netview-aix-1
-netview-aix-1   1661/tcp   # netview-aix-1
-netview-aix-2   1662/udp   # netview-aix-2
-netview-aix-2   1662/tcp   # netview-aix-2
-netview-aix-3   1663/udp   # netview-aix-3
-netview-aix-3   1663/tcp   # netview-aix-3
-netview-aix-4   1664/udp   # netview-aix-4
-netview-aix-4   1664/tcp   # netview-aix-4
-netview-aix-5   1665/udp   # netview-aix-5
-netview-aix-5   1665/tcp   # netview-aix-5
-netview-aix-6   1666/udp   # netview-aix-6
-netview-aix-6   1666/tcp   # netview-aix-6
-netview-aix-7   1667/udp   # netview-aix-7
-netview-aix-7   1667/tcp   # netview-aix-7
-netview-aix-8   1668/udp   # netview-aix-8
-netview-aix-8   1668/tcp   # netview-aix-8
-netview-aix-9   1669/udp   # netview-aix-9
-netview-aix-9   1669/tcp   # netview-aix-9
-netview-aix-10  1670/udp   # netview-aix-10
-netview-aix-10  1670/tcp   # netview-aix-10
-netview-aix-11  1671/udp   # netview-aix-11
-netview-aix-11  1671/tcp   # netview-aix-11
-netview-aix-12  1672/udp   # netview-aix-12
-netview-aix-12  1672/tcp   # netview-aix-12
-#                         Martha Crisson 
-#                         <CRISSON at ralvm12.vnet.ibm.com>
-proshare-mc-1   1673/udp   # Intel Proshare Multicast
-proshare-mc-1   1673/tcp   # Intel Proshare Multicast
-proshare-mc-2   1674/udp   # Intel Proshare Multicast
-proshare-mc-2   1674/tcp   # Intel Proshare Multicast
-#                         Mark Lewis <Mark_Lewis at ccm.jf.intel.com>
-pdp             1675/udp   # Pacific Data Products
-pdp             1675/tcp   # Pacific Data Products
-#                         Gary Morton <mortong at pacdata.com>
-netcomm2        1676/udp   # netcomm2
-netcomm1        1676/tcp   # netcomm1
-#                         Bulent Kasman <BKasman at symantec.com>
-groupwise       1677/udp   # groupwise
-groupwise       1677/tcp   # groupwise
-#                         Brent Bradshaw <bbradshaw at novell.com>
-prolink         1678/udp   # prolink
-prolink         1678/tcp   # prolink
-#                         Brian Abramson <brianab at soul.tv.tek.com>
-darcorp-lm      1679/udp   # darcorp-lm
-darcorp-lm      1679/tcp   # darcorp-lm
-#                         <DARcorp at aol.com>
-microcom-sbp    1680/udp   # microcom-sbp	
-microcom-sbp    1680/tcp   # microcom-sbp	
-#                         Boris B. Maiden <Boris_Maiden at smtp.microcom.com> 
-sd-elmd         1681/udp   # sd-elmd
-sd-elmd         1681/tcp   # sd-elmd
-#                         Bryan Otey <bwo at softdesk.com>
-lanyon-lantern  1682/udp   # lanyon-lantern
-lanyon-lantern  1682/tcp   # lanyon-lantern
-#                         Robin Lewis <robin.lewis at lanyon.com>
-ncpm-hip        1683/udp   # ncpm-hip
-ncpm-hip        1683/tcp   # ncpm-hip
-#                         Ken Hearn <hearn at hpindacx.cup.hp.com>
-snaresecure     1684/udp   # SnareSecure
-snaresecure     1684/tcp   # SnareSecure
-#                         Marty Batchelder <marty at capres.com>
-n2nremote       1685/udp   # n2nremote
-n2nremote       1685/tcp   # n2nremote
-#                         Kin Chan <kchan at net2net.com>
-cvmon           1686/udp   # cvmon
-cvmon           1686/tcp   # cvmon
-#                         Carol Ann Krug <carolann at hpmfas3.cup.hp.com>
-nsjtp-ctrl      1687/udp     # nsjtp-ctrl
-nsjtp-ctrl      1687/tcp     # nsjtp-ctrl
-nsjtp-data      1688/udp     # nsjtp-data
-nsjtp-data      1688/tcp     # nsjtp-data
-#                           Orazio Granato <og at wsbgrd01.italy.hp.com>
-firefox         1689/udp     # firefox
-firefox         1689/tcp     # firefox
-#                           Mark S. Edwards <marke at firefox.co.uk>
-ng-umds         1690/udp     # ng-umds
-ng-umds         1690/tcp     # ng-umds
-#                           Louis E. Simard <76400.3371 at compuserve.com>
-empire-empuma   1691/udp     # empire-empuma
-empire-empuma   1691/tcp     # empire-empuma
-#                           Bobby Krupczak <rdk at empiretech.com>
-sstsys-lm       1692/udp     # sstsys-lm
-sstsys-lm       1692/tcp     # sstsys-lm
-#                           Yih-Wu Wang <sstsys at ix.netcom.com>
-rrirtr          1693/udp     # rrirtr
-rrirtr          1693/tcp     # rrirtr
-rrimwm          1694/udp     # rrimwm
-rrimwm          1694/tcp     # rrimwm
-rrilwm          1695/udp     # rrilwm
-rrilwm          1695/tcp     # rrilwm
-rrifmm          1696/udp     # rrifmm
-rrifmm          1696/tcp     # rrifmm
-rrisat          1697/udp     # rrisat
-rrisat          1697/tcp     # rrisat
-#                           Allen Briggs <briggs at access.rrinc.com>
-rsvp-encap-1    1698/udp     # RSVP-ENCAPSULATION-1
-rsvp-encap-1    1698/tcp     # RSVP-ENCAPSULATION-1
-rsvp-encap-2    1699/udp     # RSVP-ENCAPSULATION-2
-rsvp-encap-2    1699/tcp     # RSVP-ENCAPSULATION-2
-#                           Bob Braden <braden at isi.edu>
-mps-raft        1700/udp     # mps-raft
-mps-raft        1700/tcp     # mps-raft
-#                           Jason Leupen <Jleupen at aol.com>
-l2f             1701/udp     l2tp # l2f
-l2f             1701/tcp     l2tp # l2f
-#                           Andy Valencia <vandys at vandys-lap.cisco.com>
-deskshare       1702/udp     # deskshare
-deskshare       1702/tcp     # deskshare
-#                           Sarah Thompson <sarah at telergy.com
-hb-engine       1703/udp     # hb-engine
-hb-engine       1703/tcp     # hb-engine
-#                           Charles C.L. Chou >cchou at zoom.com>
-bcs-broker      1704/udp     # bcs-broker
-bcs-broker      1704/tcp     # bcs-broker
-#                           Andy Warner <andyw at knoware.nl>
-slingshot       1705/udp     # slingshot
-slingshot       1705/tcp     # slingshot
-#                           Paul Groarke <paulg at quay.ie>
-jetform         1706/udp     # jetform
-jetform         1706/tcp     # jetform
-#                           gdeinsta <gdeinsta at jetform.com>
-vdmplay         1707/udp     # vdmplay
-vdmplay         1707/tcp     # vdmplay
-#                           Vadim Lebedev <vadim at magic.fr>
-gat-lmd         1708/udp     # gat-lmd
-gat-lmd         1708/tcp     # gat-lmd
-#                           Igor Zaoutine <igor at global-tech.com>
-centra          1709/udp     # centra
-centra          1709/tcp     # centra
-#                           Drew Wolff <dwolff at centra.net>
-impera          1710/udp     # impera
-impera          1710/tcp     # impera
-#                           Stepehen Campbell <campbell at uniprise.com>
-pptconference   1711/udp     # pptconference
-pptconference   1711/tcp     # pptconference
-#                           John Tafoya <johnt at microsoft.com>
-registrar       1712/udp     # resource monitoring service
-registrar       1712/tcp     # resource monitoring service
-#                           Ron Lawson <ronaldl at hpindacx.cup.hp.com>
-conferencetalk  1713/udp     # ConferenceTalk
-conferencetalk  1713/tcp     # ConferenceTalk
-#                           George Kajos <gkajos at mail1.videoserver.com>
-sesi-lm         1714/udp     # sesi-lm
-sesi-lm         1714/tcp     # sesi-lm
-houdini-lm      1715/udp     # houdini-lm
-houdini-lm      1715/tcp     # houdini-lm
-#                           Paul Breslin <phb at SIDEFX.COM>
-xmsg            1716/udp     # xmsg
-xmsg            1716/tcp     # xmsg
-#                           Mark E. Fogle <mefogle at xantel.com>
-fj-hdnet        1717/udp     # fj-hdnet
-fj-hdnet        1717/tcp     # fj-hdnet
-#                           Manabu Makino <m-makino at ael.fujitsu.co.jp>
-h323gatedisc    1718/udp     # h323gatedisc
-h323gatedisc    1718/tcp     # h323gatedisc
-h323gatestat    1719/udp     # h323gatestat 
-h323gatestat    1719/tcp     # h323gatestat 
-h323hostcall    1720/udp     # h323hostcall
-h323hostcall    1720/tcp     # h323hostcall
-#                           Jim Toga <jtoga at ibeam.jf.intel.com>
-caicci          1721/udp     # caicci
-caicci          1721/tcp     # caicci
-#                           Sylvia Scheuren <schsy02 at cai.com>
-hks-lm          1722/udp     # HKS License Manager
-hks-lm          1722/tcp     # HKS License Manager
-#                           Michael Wood <wood at althea.hks.com>
-pptp            1723/udp     # pptp
-pptp            1723/tcp     # pptp
-#                           Ken Crocker <kcrocker at microsoft.com>
-csbphonemaster  1724/udp     # csbphonemaster
-csbphonemaster  1724/tcp     # csbphonemaster
-#                           Mark Kellerhuis <Mark_Kellerhuis at msn.com>
-iden-ralp       1725/udp     # iden-ralp
-iden-ralp       1725/tcp     # iden-ralp
-#                           Chris Stanaway <stanaway at comm.mot.com>
-iberiagames     1726/udp     # IBERIAGAMES
-iberiagames     1726/tcp     # IBERIAGAMES
-#                           Jose Luis <73374.313 at compuserve.com>
-winddx          1727/udp     # winddx
-winddx          1727/tcp     # winddx
-#                           Bill Andrews <billa at vnd.tek.com>
-telindus        1728/udp     # TELINDUS
-telindus        1728/tcp     # TELINDUS
-#                           Paul Pyck <papy at telindus.be
-citynl          1729/udp     # CityNL License Management
-citynl          1729/tcp     # CityNL License Management
-#                           CityDisc >citydisc at euronet.nl>
-roketz          1730/udp     # roketz
-roketz          1730/tcp     # roketz
-#                           Ahti Heinla <ahti at ahti.bluemoon.ee>
-msiccp          1731/udp     # MSICCP
-msiccp          1731/tcp     # MSICCP
-#                           Max Morris <maxm at MICROSOFT.com>
-proxim          1732/udp     # proxim
-proxim          1732/tcp     # proxim
-#                           Srinivas N. Mogalapalli <srinivas at proxim.com>
-siipat          1733/udp     # SIMS - SIIPAT Protocol for Alarm Transmission
-siipat          1733/tcp     # SIMS - SIIPAT Protocol for Alarm Transmission
-#                           Steve Ryckman <sryckman at simsware.com>
-cambertx-lm     1734/udp     # Camber Corporation License Management
-cambertx-lm     1734/tcp     # Camber Corporation License Management
-#                           Jeannie Burleson <jeannie at cambertx.com>
-privatechat     1735/udp     # PrivateChat
-privatechat     1735/tcp     # PrivateChat
-#                           Louis E. Simard <76400.3371 at CompuServe.COM>
-street-stream   1736/udp     # street-stream
-street-stream   1736/tcp     # street-stream
-#                           Glenn Levitt <streetd1 at ix.netcom.com>
-ultimad         1737/udp     # ultimad
-ultimad         1737/tcp     # ultimad
-#                           (Michael Lanzetta <hagbard at ultimatech.com>
-gamegen1        1738/udp     # GameGen1
-gamegen1        1738/tcp     # GameGen1
-#                           Glen Pearson <GlenP at multigen.com>
-webaccess       1739/udp     # webaccess
-webaccess       1739/tcp     # webaccess
-#                           Christian Saether <ChristianS at asymetrix.com>
-encore          1740/udp     # encore
-encore          1740/tcp     # encore
-#                           Stuart Button <button at promis.com>
-cisco-net-mgmt  1741/udp     # cisco-net-mgmt
-cisco-net-mgmt  1741/tcp     # cisco-net-mgmt
-#                           John McCormack <jmac at cisco.com>
-3Com-nsd        1742/udp     # 3Com-nsd
-3Com-nsd        1742/tcp     # 3Com-nsd
-#                           Nitza Steinberg <nitza at isd.3com.com>
-cinegrfx-lm     1743/udp     # Cinema Graphics License Manager
-cinegrfx-lm     1743/tcp     # Cinema Graphics License Manager
-#                           Rodney Iwashina <rodney at cyclone.rfx.com>
-ncpm-ft         1744/udp     # ncpm-ft
-ncpm-ft         1744/tcp     # ncpm-ft
-#                           Ken Hearn <hearn at hpindacx.cup.hp.com>
-remote-winsock  1745/udp     # remote-winsock
-remote-winsock  1745/tcp     # remote-winsock
-#                           Avi Nathan <avin at microsoft.com>
-ftrapid-1       1746/udp     # ftrapid-1
-ftrapid-1       1746/tcp     # ftrapid-1
-ftrapid-2       1747/udp     # ftrapid-2
-ftrapid-2       1747/tcp     # ftrapid-2
-#                           Richard J. Williams <RJW1 at trpo4.tr.unisys.com>
-oracle-em1      1748/udp     # oracle-em1
-oracle-em1      1748/tcp     # oracle-em1
-#                           Bob Purvy <bpurvy at us.oracle.com>
-aspen-services  1749/udp     # aspen-services
-aspen-services  1749/tcp     # aspen-services
-#                           Mark B. Hurst <mhurst at aspenres.com>
-sslp            1750/udp     # Simple Socket Library's PortMaster
-sslp            1750/tcp     # Simple Socket Library's PortMaster
-#                           Dr. Charles E. Campbell Jr.
-#                           <cec at gryphon.gsfc.nasa.gov> 
-swiftnet        1751/udp     # SwiftNet
-swiftnet        1751/tcp     # SwiftNet
-#                           Terry Lim <tkl at pentek.com>
-lofr-lm         1752/udp     # Leap of Faith Research License Manager 
-lofr-lm         1752/tcp     # Leap of Faith Research License Manager 
-#                           
-translogic-lm   1753/udp     # Translogic License Manager
-translogic-lm   1753/tcp     # Translogic License Manager
-#                           Stan Dallas <stan at translogic.com>
-oracle-em2      1754/udp     # oracle-em2
-oracle-em2      1754/tcp     # oracle-em2
-#                           Bob Purvy <bpurvy at us.oracle.com>
-ms-streaming    1755/udp     # ms-streaming
-ms-streaming    1755/tcp     # ms-streaming
-#                           Bret O'Rourke
-capfast-lmd     1756/udp     # capfast-lmd
-capfast-lmd     1756/tcp     # capfast-lmd
-#                           Chuck Neal <chuck at phase3.com>
-cnhrp           1757/udp     # cnhrp
-cnhrp           1757/tcp     # cnhrp
-#                           William Stoye <wstoye at atml.co.uk>
-tftp-mcast      1758/udp     # tftp-mcast
-tftp-mcast      1758/tcp     # tftp-mcast
-#                           Tom Emberson <tom at lanworks.com>
-spss-lm         1759/udp     # SPSS License Manager
-spss-lm         1759/tcp     # SPSS License Manager
-#                           Tex Hull <tex at spss.com>
-www-ldap-gw     1760/udp     # www-ldap-gw
-www-ldap-gw     1760/tcp     # www-ldap-gw
-#                           Nick Emery <Nick.Emery at altavista.digital.com>
-cft-0           1761/udp     # cft-0
-cft-0           1761/tcp     # cft-0
-cft-1           1762/udp     # cft-1
-cft-1           1762/tcp     # cft-1
-cft-2           1763/udp     # cft-2
-cft-2           1763/tcp     # cft-2
-cft-3           1764/udp     # cft-3
-cft-3           1764/tcp     # cft-3
-cft-4           1765/udp     # cft-4
-cft-4           1765/tcp     # cft-4
-cft-5           1766/udp     # cft-5
-cft-5           1766/tcp     # cft-5
-cft-6           1767/udp     # cft-6
-cft-6           1767/tcp     # cft-6
-cft-7           1768/udp     # cft-7
-cft-7           1768/tcp     # cft-7
-#                           Martine Marchand 16 1 46 59 24 84
-bmc-net-adm     1769/udp     # bmc-net-adm
-bmc-net-adm     1769/tcp     # bmc-net-adm
-#                           Cameron Haight <cameron_haight at bmc.com>
-bmc-net-svc     1770/udp     # bmc-net-svc
-bmc-net-svc     1770/tcp     # bmc-net-svc
-#                           Cameron Haight <cameron_haight at bmc.com>bmc-net-svc
-vaultbase       1771/udp     # vaultbase
-vaultbase       1771/tcp     # vaultbase
-#                           Jose A. Sesin <sesin at vaultbase.com>
-essweb-gw       1772/udp     # EssWeb Gateway
-essweb-gw       1772/tcp     # EssWeb Gateway
-#                           Bob Nattenberg <bnattenberg at arborsoft.com>
-kmscontrol      1773/udp     # KMSControl
-kmscontrol      1773/tcp     # KMSControl
-#                           Roy Chastain <roy at kmsys.com>
-global-dtserv   1774/udp     # global-dtserv
-global-dtserv   1774/tcp     # global-dtserv
-#                           Nicholas Davies <N.Davies at globalcomm.co.uk>
-#               1775/tcp
-femis           1776/udp     # Federal Emergency Management Information System
-femis           1776/tcp     # Federal Emergency Management Information System
-#                           Larry Gerhardstein <lh_gerhardstein at pnl.gov>
-powerguardian   1777/udp     # powerguardian
-powerguardian   1777/tcp     # powerguardian
-#                           Charles Bennett <chuck at benatong.com>
-prodigy-intrnet	1778/udp     # prodigy-internet
-prodigy-intrnet	1778/tcp     # prodigy-internet
-#                           Bob Dedrick <bob at staff.prodigy.com>
-pharmasoft      1779/udp     # pharmasoft
-pharmasoft      1779/tcp     # pharmasoft
-#                           Ola Strandberg <Ola.Strandberg at pharmasoft.se>
-dpkeyserv       1780/udp     # dpkeyserv
-dpkeyserv       1780/tcp     # dpkeyserv
-#                           Yasunari Gon Yamasita <yamasita at omronsoft.co.jp>
-answersoft-lm   1781/udp     # answersoft-lm 
-answersoft-lm   1781/tcp     # answersoft-lm
-#                           James A. Brewster <jimbrew at answersoft.com>
-hp-hcip         1782/udp     # hp-hcip
-hp-hcip         1782/tcp     # hp-hcip
-#                           Allen Baker <abaker at boi.hp.com>
-#               1783        Decomissioned Port 04/14/00, ms    
-#                           <naonao at kikaku.mmp.fujitsu.co.jp> 
-finle-lm        1784/udp     # Finle License Manager
-finle-lm        1784/tcp     # Finle License Manager
-#                           Dongling Wang <dongling at finle.com>
-windlm          1785/udp     # Wind River Systems License Manager
-windlm          1785/tcp     # Wind River Systems License Manager
-#                           Will Dere <will at wrs.com>
-funk-logger     1786/udp     # funk-logger
-funk-logger     1786/tcp     # funk-logger
-funk-license    1787/udp     # funk-license
-funk-license    1787/tcp     # funk-license
-#                           Cimarron Boozer <cboozer at funk.com>
-#                           Eric Wilde <eric at funk.com>
-psmond          1788/udp     # psmond
-psmond          1788/tcp     # psmond
-#                           Will Golson <golson at fc.hp.com>
-hello           1789/udp     # hello
-hello           1789/tcp     # hello
-#                           D. J. Bernstein <djb at koobera.math.uic.edu>       
-nmsp            1790/udp     # Narrative Media Streaming Protocol
-nmsp            1790/tcp     # Narrative Media Streaming Protocol
-#                           Paul Santinelli, Jr. <psantinelli at narrative.com>
-ea1             1791/udp     # EA1
-ea1             1791/tcp     # EA1
-#                           Kirk MacLean <kmaclean at ea.com>
-ibm-dt-2        1792/udp     # ibm-dt-2
-ibm-dt-2        1792/tcp     # ibm-dt-2
-#                           Sam Borman <sam_borman at uk.ibm.com>
-rsc-robot       1793/udp     # rsc-robot
-rsc-robot       1793/tcp     # rsc-robot
-#                           Andrew Jay Schneider <ajs at relsoft.com>
-cera-bcm        1794/udp     # cera-bcm
-cera-bcm        1794/tcp     # cera-bcm
-#                           Leo Moesgaard <leo_moesgaard at dk.ibm.com>
-dpi-proxy       1795/udp     # dpi-proxy
-dpi-proxy       1795/tcp     # dpi-proxy
-#                           Charles Gordon <cgordon at digprod.com>
-vocaltec-admin  1796/udp     # Vocaltec Server Administration
-vocaltec-admin  1796/tcp     # Vocaltec Server Administration
-#                           Scott Petrack <Scott_Petrack at vocaltec.com>
-uma             1797/udp     # UMA
-uma             1797/tcp     # UMA 
-#                           Martin Kirk <m.kirk at opengroup.org>
-etp             1798/udp     # Event Transfer Protocol
-etp             1798/tcp     # Event Transfer Protocol
-#                           Mike Wray <mjw at hplb.hpl.hp.com>
-netrisk		1799/udp     # NETRISK
-netrisk		1799/tcp     # NETRISK
-#			    Kevin Green <Kevin_Green at tds.com>
-ansys-lm	1800/udp     # ANSYS-License manager
-ansys-lm	1800/tcp     # ANSYS-License manager
-#			    Suzanne Lorrin <sml at ansyspo.ansys.com>
-msmq		1801/udp     # Microsoft Message Que
-msmq		1801/tcp     # Microsoft Message Que
-#			    Amnon Horowitz <amnonh at MICROSOFT.com>
-concomp1	1802/udp     # ConComp1
-concomp1	1802/tcp     # ConComp1
-#			    Ed Vincent <@edv at concomp.com>
-hp-hcip-gwy	1803/udp     # HP-HCIP-GWY
-hp-hcip-gwy	1803/tcp     # HP-HCIP-GWY
-#			    Allen Baker <abaker at boi.hp.com>
-enl		1804/udp     # ENL
-enl		1804/tcp     # ENL
-#			    Brian Olson <BOlson at veritas.com>
-enl-name	1805/udp     # ENL-Name
-enl-name	1805/tcp     # ENL-Name
-#			    Brian Olson <BOlson at veritas.com>
-musiconline	1806/udp     # Musiconline
-musiconline	1806/tcp     # Musiconline
-#			    Craig Weeks <cweeks at syspace.co.uk>
-fhsp		1807/udp     # Fujitsu Hot Standby Protocol
-fhsp		1807/tcp     # Fujitsu Hot Standby Protocol
-#			    Eiki Iwata (eiki at nd.net.fujitsu.co.jp>
-oracle-vp2	1808/udp     # Oracle-VP2
-oracle-vp2	1808/tcp     # Oracle-VP2
-#                           Craig Fowler <cfowler at us.oracle.com>
-oracle-vp1	1809/udp     # Oracle-VP1
-oracle-vp1      1809/tcp     # Oracle-VP1
-#                           Craig Fowler <cfowler at us.oracle.com>
-jerand-lm	1810/udp     # Jerand License Manager
-jerand-lm       1810/tcp     # Jerand License Manager
-#                           Robert Monat <jerand at jerand.com>
-scientia-sdb	1811/udp     # Scientia-SDB
-scientia-sdb    1811/tcp     # Scientia-SDB
-#                           Ian Miller <Ian_Miller at scientia.com>
-radius          1812/udp     # RADIUS
-radius          1812/tcp     # RADIUS
-#                           Carl Rigney <cdr at livingston.com>
-radius-acct     1813/udp     # RADIUS Accounting
-radius-acct     1813/tcp     # RADIUS Accounting
-#                           Carl Rigney <cdr at livingston.com>
-tdp-suite       1814/udp     # TDP Suite
-tdp-suite       1814/tcp     # TDP Suite
-#                           Rob Lockhart <rob.lockhart at mot.com>
-mmpft		1815/udp     # MMPFT
-mmpft		1815/tcp     # MMPFT
-#			    Ralf Muckenhirn <FAX: 49-7622-398200>
-#                           <Phone: 49-7622-3980>
-harp		1816/udp     # HARP
-harp		1816/tcp     # HARP
-#			    Bjorn Chambless <bjorn at cs.pdx.edu>
-rkb-oscs	1817/udp     # RKB-OSCS
-rkb-oscs	1817/tcp     # RKB-OSCS
-#			    Robert Kevin Breton <BOBBRETON at HOTMAIL.COM>
-etftp           1818/udp     # Enhanced Trivial File Transfer Protocol
-etftp           1818/tcp     # Enhanced Trivial File Transfer Protocol
-#                           William Polites <wpolites at mitre.org>
-plato-lm        1819/udp     # Plato License Manager
-plato-lm        1819/tcp     # Plato License Manager
-#                           Mark Morris <mim at ermuk.com>
-mcagent         1820/udp     # mcagent
-mcagent         1820/tcp     # mcagent
-#                           Ryoichi Shinohara <shinohara at VNET.IBM.COM>
-donnyworld      1821/udp     # donnyworld
-donnyworld      1821/tcp     # donnyworld
-#                           Don Oliver <don at donnyworld.com>
-es-elmd         1822/udp     # es-elmd
-es-elmd         1822/tcp     # es-elmd
-#                           David Duncan <dduncan at es.com>
-unisys-lm       1823/udp     # Unisys Natural Language License Manager
-unisys-lm       1823/tcp     # Unisys Natural Language License Manager
-#                           Raymond A. Diedrichs <rayd at slu.tr.unisys.com>
-metrics-pas     1824/udp     # metrics-pas
-metrics-pas     1824/tcp     # metrics-pas
-#                           Tom Haapanen <tomh at metrics.com>
-direcpc-video	1825/udp     # DirecPC Video
-direcpc-video	1825/tcp     # DirecPC Video
-#			    Chris Kerrigan <ckerrigan at hns.com>    
-ardt		1826/udp     # ARDT
-ardt		1826/tcp     # ARDT
-#			    Mike Goddard <mike.goddard at ardent.com.au>
-asi		1827/udp     # ASI 
-asi		1827/tcp     # ASI 
-#			    Bob Tournoux <bob.tournoux at usiny.mail.abb.com>
-itm-mcell-u	1828/udp     # itm-mcell-u
-itm-mcell-u	1828/tcp     # itm-mcell-u
-#			    Miles O'Neal <meo at us.itmasters.com>
-optika-emedia	1829/udp     # Optika eMedia 
-optika-emedia	1829/tcp     # Optika eMedia 
-#			    Daryle DeBalski <ddebalski at optika.com>
-net8-cman	1830/udp     # Oracle Net8 CMan Admin
-net8-cman	1830/tcp     # Oracle Net8 CMan Admin
-#			    Shuvayu Kanjilal
-myrtle		1831/udp     # Myrtle
-myrtle		1831/tcp     # Myrtle
-#			    Ron Achin <RAchin at genscan.com>
-tht-treasure	1832/udp     # ThoughtTreasure
-tht-treasure	1832/tcp     # ThoughtTreasure
-#			    Erik Mueller <erik at signiform.com>
-udpradio	1833/udp     # udpradio
-udpradio	1833/tcp     # udpradio
-#			    Guus Sliepen <guus at warande3094.warande.uu.nl>
-ardusuni	1834/udp     # ARDUS Unicast
-ardusuni	1834/tcp     # ARDUS Unicast
-ardusmul	1835/udp     # ARDUS Multicast
-ardusmul	1835/tcp     # ARDUS Multicast
-#			    Toshikatsu Ito <ito-t at pfu.co.jp>
-ste-smsc	1836/udp     # ste-smsc
-ste-smsc	1836/tcp     # ste-smsc
-#			    Tom Snauwaert <tom.snauwaert at st-electronics.be>
-csoft1		1837/udp     # csoft1
-csoft1		1837/tcp     # csoft1
-#			    John Coll <john at csoft.co.uk> 
-talnet		1838/udp     # TALNET
-talnet		1838/tcp     # TALNET
-#			    Aaron Lav <aaron at taltrade.com>
-netopia-vo1	1839/udp     # netopia-vo1
-netopia-vo1	1839/tcp     # netopia-vo1
-netopia-vo2	1840/udp     # netopia-vo2
-netopia-vo2	1840/tcp     # netopia-vo2
-netopia-vo3	1841/udp     # netopia-vo3
-netopia-vo3	1841/tcp     # netopia-vo3
-netopia-vo4	1842/udp     # netopia-vo4
-netopia-vo4	1842/tcp     # netopia-vo4
-netopia-vo5	1843/udp     # netopia-vo5
-netopia-vo5	1843/tcp     # netopia-vo5
-#			    Marc Epard <marc at netopia.com>
-direcpc-dll	1844/udp     # DirecPC-DLL
-direcpc-dll	1844/tcp     # DirecPC-DLL
-#			    Chris Kerrigan <ckerrigan at hns.com>
-altalink        1845/udp     # altalink
-altalink        1845/tcp     # altalink
-#                           Alberto Raydan <alberto at altasol.com>
-tunstall-pnc    1846/udp     # Tunstall PNC
-tunstall-pnc    1846/tcp     # Tunstall PNC
-#                           Robert M. Moore <r_moore at tunstall.co.uk>
-slp-notify      1847/udp     # SLP Notification
-slp-notify      1847/tcp     # SLP Notification
-#                           James Kempf <james.kempf at sun.com> 
-fjdocdist       1848/udp     # fjdocdist
-fjdocdist       1848/tcp     # fjdocdist
-#                           Yuichi Ohiwa <y-ohiwa at ael.fujitsu.co.jp>
-alpha-sms       1849/udp     # ALPHA-SMS
-alpha-sms       1849/tcp     # ALPHA-SMS
-#                           Benjamin Grimm <bg at webnetix.de> 
-gsi		1850/udp     # GSI
-gsi		1850/tcp     # GSI
-#			    William Mullaney <mullanwi at usa.net>
-ctcd		1851/udp     # ctcd
-ctcd		1851/tcp     # ctcd
-#			    John Ryan <john at cybertrace.com>
-virtual-time    1852/udp     # Virtual Time
-virtual-time    1852/tcp     # Virtual Time
-#                           Angie S. Morner <webmaster at dsbcpas.com>
-vids-avtp       1853/udp     # VIDS-AVTP
-vids-avtp       1853/tcp     # VIDS-AVTP
-#                           Sascha Kuemmel <kuemmel at vidsoft.de>
-buddy-draw      1854/udp     # Buddy Draw
-buddy-draw      1854/tcp     # Buddy Draw
-#                           Marvin Shin <president at medialingo.com>  
-fiorano-rtrsvc  1855/udp     # Fiorano RtrSvc
-fiorano-rtrsvc  1855/tcp     # Fiorano RtrSvc
-fiorano-msgsvc  1856/udp     # Fiorano MsgSvc
-fiorano-msgsvc  1856/tcp     # Fiorano MsgSvc
-#                           Albert Holt <alberth at fiorano.com> 
-datacaptor      1857/udp     # DataCaptor
-datacaptor      1857/tcp     # DataCaptor
-#                           Steven M. Forrester <StevenF at CapsuleTech.com>
-privateark      1858/udp     # PrivateArk
-privateark      1858/tcp     # PrivateArk
-#                           Ronen Zoran <ronenz at cyber-ark.com>  
-gammafetchsvr   1859/udp     # Gamma Fetcher Server
-gammafetchsvr   1859/tcp     # Gamma Fetcher Server
-#                           Cnaan Aviv <cnaan at gammasite.com>     
-sunscalar-svc	1860/udp     # SunSCALAR Services
-sunscalar-svc	1860/tcp     # SunSCALAR Services
-#			    Sanjay Radia <srradia at kasumbi.Eng.Sun.COM>
-lecroy-vicp	1861/udp     # LeCroy VICP
-lecroy-vicp	1861/tcp     # LeCroy VICP
-#			    Anthony Cake <anthonyrc at lecroy.com>
-techra-server	1862/udp     # techra-server
-techra-server	1862/tcp     # techra-server
-#			    Roy Lyseng <roy.lyseng at maxware.no>
-msnp		1863/udp     # MSNP
-msnp		1863/tcp     # MSNP
-#			    William Lai <wlai at microsoft.com>
-paradym-31port	1864/udp     # Paradym 31 Port
-paradym-31port	1864/tcp     # Paradym 31 Port
-#			    David Wooden <dwooden at wizdom.com>
-entp		1865/udp     # ENTP
-entp		1865/tcp     # ENTP
-#			    Seiko Epson <Ishida.Hitoshi at exc.epson.co.jp>
-swrmi           1866/udp     # swrmi
-swrmi           1866/tcp     # swrmi
-#                           Jun Yoshii <yoshii at ael.fujitsu.co.jp> 
-udrive          1867/udp     # UDRIVE
-udrive          1867/tcp     # UDRIVE
-#                           Robby Walker <webmaster at cd-lab.com>
-viziblebrowser  1868/udp     # VizibleBrowser
-viziblebrowser  1868/tcp     # VizibleBrowser
-#                           Jimmy Talbot <jtalbot at vizible.com> 
-yestrader       1869/udp     # YesTrader
-yestrader       1869/tcp     # YesTrader
-#                           Robert Bryan <bbryan at yestrader.com> 
-sunscalar-dns	1870/udp     # SunSCALAR DNS Service
-sunscalar-dns   1870/tcp     # SunSCALAR DNS Service
-#                           Sanjay Radia <srradia at kasumbi.Eng.Sun.COM>
-canocentral0	1871/udp     # Cano Central 0
-canocentral0	1871/tcp     # Cano Central 0
-canocentral1	1872/udp     # Cano Central 1
-canocentral1	1872/tcp     # Cano Central 1
-#			    Mark McNamara <markm at research.canon.com.au>
-fjmpjps		1873/udp     # Fjmpjps
-fjmpjps		1873/tcp     # Fjmpjps
-fjswapsnp	1874/udp     # Fjswapsnp
-fjswapsnp	1874/tcp     # Fjswapsnp
-#			    Y. Ohiwa <y-ohiwa at ael.fujitsu.co.jp>
-westell-stats   1875/udp     # westell stats
-westell-stats   1875/tcp     # westell stats
-#                           Thomas McCabe <tmcca at westell.com>
-ewcappsrv       1876/udp     # ewcappsrv
-ewcappsrv       1876/tcp     # ewcappsrv
-#                           Howard Yin <howard.yin at ericsson.com>
-hp-webqosdb     1877/udp     # hp-webqosdb
-hp-webqosdb     1877/tcp     # hp-webqosdb
-#                           Kim Scott <kims at cup.hp.com>
-drmsmc          1878/udp     # drmsmc
-drmsmc          1878/tcp     # drmsmc
-#                           Katsuhiko Abe <kabe at hst.fujitsu.co.jp>
-nettgain-nms    1879/udp     # NettGain NMS
-nettgain-nms    1879/tcp     # NettGain NMS
-#                           Dr. Yair Shapira <yair at flashnetworks.com>
-vsat-control    1880/udp     # Gilat VSAT Control
-vsat-control    1880/tcp     # Gilat VSAT Control
-#                           Yariv Kaplan <yarivk at gilat.com> 
-ibm-mqseries2	1881/udp     # IBM WebSphere MQ
-ibm-mqseries2	1881/tcp     # IBM WebSphere MQ
-#                           Richard Maxwell <richard_maxwell at uk.ibm.com>
-ecsqdmn         1882/udp     # ecsqdmn
-ecsqdmn         1882/tcp     # ecsqdmn
-#                           Paul Wissmiller <Paul.Wissmiller at ca.com>
-ibm-mqisdp      1883/udp     # IBM MQSeries SCADA
-ibm-mqisdp      1883/tcp     # IBM MQSeries SCADA
-#                           Andy Stanford-Clark <andysc at uk.ibm.com>
-idmaps          1884/udp     # Internet Distance Map Svc
-idmaps          1884/tcp     # Internet Distance Map Svc
-#                           Sugih Jamim <jamin at eecs.umich.edu> 
-vrtstrapserver  1885/udp     # Veritas Trap Server
-vrtstrapserver  1885/tcp     # Veritas Trap Server
-#                           Russell Thrasher <rthrashe at veritas.com>
-leoip           1886/udp     # Leonardo over IP
-leoip           1886/tcp     # Leonardo over IP
-#                           Dietmar Finkler <d.finkler at hermstedt.de>
-filex-lport     1887/udp     # FileX Listening Port
-filex-lport     1887/tcp     # FileX Listening Port
-#                           Megan Woods <meganwoods at datafast.net.au>
-ncconfig        1888/udp     # NC Config Port
-ncconfig        1888/tcp     # NC Config Port
-#                           Simon Parker <simon.j.parker at philips.com>
-unify-adapter   1889/udp     # Unify Web Adapter Service
-unify-adapter   1889/tcp     # Unify Web Adapter Service
-#                           Duane Gibson <ianaportmaster at unify.com>
-wilkenlistener  1890/udp     # wilkenListener
-wilkenlistener  1890/tcp     # wilkenListener
-#                           Wilken GmbH <fy at wilken.de> 
-childkey-notif  1891/udp     # ChildKey Notification
-childkey-notif	1891/tcp     # ChildKey Notification
-childkey-ctrl   1892/udp     # ChildKey Control 	
-childkey-ctrl   1892/tcp     # ChildKey Control
-#                           Ivan Berardinelli <ivan at gestweb.com>
-elad            1893/udp     # ELAD Protocol
-elad            1893/tcp     # ELAD Protocol
-#                           Franco Milan <franco at eladit.com>
-o2server-port   1894/udp     # O2Server Port
-o2server-port	1894/tcp     # O2Server Port
-#                           Tim Howard <timothygh at hotmail.com> 	
-#####  Microsoft (unoffically) using 1895     #####  
-b-novative-ls   1896/udp     # b-novative license server
-b-novative-ls   1896/tcp     # b-novative license server
-#                           Matthias Riese <Matthias.Riese at b-novative.de>
-metaagent       1897/udp     # MetaAgent
-metaagent       1897/tcp     # MetaAgent
-#                           Stephane Vinsot <vinsot at enatel.com>
-cymtec-port     1898/udp     # Cymtec secure management
-cymtec-port	1898/tcp     # Cymtec secure management
-#                           Michael Mester <mmester at cymtec.com>
-mc2studios	1899/udp     # MC2Studios
-mc2studios	1899/tcp     # MC2Studios
-#			    Michael Coon <michael at thecube.com>	
-ssdp		1900/udp     # SSDP
-ssdp		1900/tcp     # SSDP
-#			    Yaron Goland <yarong at microsoft.com>
-fjicl-tep-a     1901/udp     # Fujitsu ICL Terminal Emulator Program A
-fjicl-tep-a     1901/tcp     # Fujitsu ICL Terminal Emulator Program A
-#                           Bob Lyon <bl at oasis.icl.co.uk>
-fjicl-tep-b     1902/udp     # Fujitsu ICL Terminal Emulator Program B
-fjicl-tep-b     1902/tcp     # Fujitsu ICL Terminal Emulator Program B
-#                           Bob Lyon <bl at oasis.icl.co.uk>
-linkname        1903/udp     # Local Link Name Resolution
-linkname        1903/tcp     # Local Link Name Resolution
-#                           Dan Harrington <dth at lucent.com>
-fjicl-tep-c     1904/udp     # Fujitsu ICL Terminal Emulator Program C
-fjicl-tep-c     1904/tcp     # Fujitsu ICL Terminal Emulator Program C
-#                           Bob Lyon <bl at oasis.icl.co.uk>
-sugp            1905/udp     # Secure UP.Link Gateway Protocol
-sugp   		1905/tcp     # Secure UP.Link Gateway Protocol
-#			    Peter King <king at uplanet.com>
-tpmd		1906/udp     # TPortMapperReq
-tpmd		1906/tcp     # TPortMapperReq
-# 			    Sheila Devins <sheila_devins at VNET.IBM.COM>
-intrastar	1907/udp     # IntraSTAR
-intrastar	1907/tcp     # IntraSTAR
-#			    Peter Schoenberger <ps at teles.de>
-dawn		1908/udp     # Dawn
-dawn		1908/tcp     # Dawn
-#			    Michael Crawford <michaelc at travsoft.com>
-global-wlink	1909/udp     # Global World Link
-global-wlink	1909/tcp     # Global World Link
-#			    Nicholas Davies <N.Davies at globalcomm.co.uk>
-ultrabac        1910/udp     # UltraBac Software communications port
-ultrabac        1910/tcp     # UltraBac Software communications port
-#                           Paul Bunn <iana at ultrabac.com>	
-mtp             1911/udp     # Starlight Networks Multimedia Transport Protocol
-mtp             1911/tcp     # Starlight Networks Multimedia Transport Protocol
-#                           Bruce Lieberman <brucel at iserver.starlight.com>
-rhp-iibp	1912/udp     # rhp-iibp	
-rhp-iibp	1912/tcp     # rhp-iibp	
-#			    George Nachman
-#                           Tom Lake <tlake at m-ware.com>
-armadp          1913/udp     # armadp
-armadp          1913/tcp     # armadp
-#                           Kevin Welton <Kevin.Welton at armltd.co.uk>
-elm-momentum    1914/udp     # Elm-Momentum
-elm-momentum    1914/tcp     # Elm-Momentum
-#                           Willie Wu <willie at mds.com>
-facelink        1915/udp     # FACELINK
-facelink        1915/tcp     # FACELINK
-#                           J.H. Hermans <j.h.hermans at hiscom.nl>
-persona         1916/udp     # Persoft Persona
-persona         1916/tcp     # Persoft Persona
-#                           Tom Spidell <spidell at persoft.com>
-noagent		1917/udp     # nOAgent
-noagent		1917/tcp     # nOAgent
-#			    Martin Bestmann <martin at datawatch.de>
-can-nds		1918/udp     # Candle Directory Service - NDS
-can-nds   	1918/tcp     # Candle Directory Service - NDS    
-can-dch   	1919/udp     # Candle Directory Service - DCH
-can-dch		1919/tcp     # Candle Directory Service - DCH
-can-ferret	1920/udp     # Candle Directory Service - FERRET
-can-ferret	1920/tcp     # Candle Directory Service - FERRET
-#			    Dannis Yang <Dannis_Yang at candle.com>
-noadmin		1921/udp     # NoAdmin
-noadmin		1921/tcp     # NoAdmin
-#			    Martin Bestmann <martin at datawatch.de>
-tapestry	1922/udp     # Tapestry	
-tapestry	1922/tcp     # Tapestry	
-#			    Ken Oliver <koliver at anritsu.com>
-spice		1923/udp     # SPICE
-spice		1923/tcp     # SPICE
-#			    Nicholas Chua <nick at sendit.se>
-xiip		1924/udp     # XIIP
-xiip		1924/tcp     # XIIP
-#			    Alain Robert <Alain.Robert at HMRinc.com>	
-discovery-port  1925/udp     # Surrogate Discovery Port
-discovery-port  1925/tcp     # Surrogate Discovery Port
-#                           Keith Thompson <keith.thompson at sun.com>
-egs             1926/udp     # Evolution Game Server
-egs             1926/tcp     # Evolution Game Server
-#                           Simon Butcher <simonb at alien.net.au>
-videte-cipc     1927/udp     # Videte CIPC Port
-videte-cipc     1927/tcp     # Videte CIPC Port
-#                           Videte IT <info at videte.com>
-emsd-port       1928/udp     # Expnd Maui Srvr Dscovr
-emsd-port       1928/tcp     # Expnd Maui Srvr Dscovr
-#                           Edo Yahav <standards at expand.com>
-bandwiz-system  1929/udp     # Bandwiz System - Server
-bandwiz-system  1929/tcp     # Bandwiz System - Server
-#                           Joseph Weihs <yossi at bandwiz.com>
-driveappserver	1930/udp     # Drive AppServer
-driveappserver	1930/tcp     # Drive AppServer
-#			    Andrew Johnson
-#			    <andrew.johnson at bliss-support.demon.co.uk>
-amdsched	1931/udp     # AMD SCHED
-amdsched	1931/tcp     # AMD SCHED
-#			    Michael Walsh <mww at warwick.net>
-ctt-broker      1932/udp     # CTT Broker
-ctt-broker      1932/tcp     # CTT Broker
-#                           Jens Edlund <edlund at speech.kth.se>
-xmapi           1933/udp     # IBM LM MT Agent
-xmapi		1933/tcp     # IBM LM MT Agent
-xaapi           1934/udp     # IBM LM Appl Agent
-xaapi           1934/tcp     # IBM LM Appl Agent
-#                           Helga Wolin <hwolin at us.ibm.com>
-macromedia-fcs  1935/udp     # Macromedia Flash Communications server MX
-macromedia-fcs  1935/tcp     # Macromedia Flash Communications Server MX
-#                           Pritham Shetty <pritham at macromedia.com> 
-jetcmeserver    1936/udp     # JetCmeServer Server Port
-jetcmeserver    1936/tcp     # JetCmeServer Server Port
-jwserver        1937/udp     # JetVWay Server Port
-jwserver        1937/tcp     # JetVWay Server Port
-jwclient        1938/udp     # JetVWay Client Port
-jwclient        1938/tcp     # JetVWay Client Port
-jvserver        1939/udp     # JetVision Server Port
-jvserver        1939/tcp     # JetVision Server Port
-jvclient        1940/udp     # JetVision Client Port
-jvclient        1940/tcp     # JetVision Client Port
-#                           Stephen Tsun <stsun at jetstream.com>
-dic-aida        1941/udp     # DIC-Aida
-dic-aida        1941/tcp     # DIC-Aida
-#                           Frans S.C. Witte <fscwitte at dicgroep.nl> 
-res             1942/udp     # Real Enterprise Service
-res             1942/tcp     # Real Enterprise Service
-#                           Bob Janssen <bob at res.nl>
-beeyond-media   1943/udp     # Beeyond Media
-beeyond-media   1943/tcp     # Beeyond Media
-#                           Bob Deblier <bob at virtualunlimited.com>
-close-combat    1944/udp     # close-combat
-close-combat    1944/tcp     # close-combat
-#                           David Hua <davhua at microsoft.com>
-dialogic-elmd   1945/udp     # dialogic-elmd
-dialogic-elmd   1945/tcp     # dialogic-elmd
-#                           Roger Kay <r.kay at nz.dialogic.com>
-tekpls          1946/udp     # tekpls
-tekpls          1946/tcp     # tekpls
-#                           Brian Abramson <brianab at vnd.tek.com>
-hlserver        1947/udp     # hlserver
-hlserver        1947/tcp     # hlserver
-#                           Michael Zzunke <mzunke at fast-ag.de>
-eye2eye         1948/udp     # eye2eye
-eye2eye         1948/tcp     # eye2eye
-#                           Trevor Bell <Trevor at iguana.iosoftware.com>
-ismaeasdaqlive  1949/udp     # ISMA Easdaq Live
-ismaeasdaqlive  1949/tcp     # ISMA Easdaq Live
-ismaeasdaqtest  1950/udp     # ISMA Easdaq Test
-ismaeasdaqtest  1950/tcp     # ISMA Easdaq Test
-#                           Stephen Dunne <sdun at isma.co.uk>
-bcs-lmserver    1951/udp     # bcs-lmserver
-bcs-lmserver    1951/tcp     # bcs-lmserver
-#                           Andy Warner <andyw at knoware.nl>
-mpnjsc		1952/udp     # mpnjsc
-mpnjsc		1952/tcp     # mpnjsc
-#			    Takenori Miyahara <miyahara at pfu.co.jp>	
-rapidbase	1953/udp     # Rapid Base
-rapidbase	1953/tcp     # Rapid Base
-#			    Antoni Wolski <antoni.wolski at vtt.fi>
-abr-basic       1954/udp     # ABR-Basic Data
-abr-basic       1954/tcp     # ABR-Basic Data
-abr-secure      1955/udp     # ABR-Secure Data
-abr-secure      1955/tcp     # ABR-Secure Data
-#                           Aero9 - Graham Wooden <graham at aero9.com> 
-vrtl-vmf-ds     1956/udp     # Vertel VMF DS
-vrtl-vmf-ds     1956/tcp     # Vertel VMF DS
-#                           Alan Akahoshi <alan-akahoshi at vertel.com>
-unix-status     1957/udp     # unix-status
-unix-status     1957/tcp     # unix-status
-#                           Thomas Erskine <erskine at sourceworks.com>
-dxadmind        1958/udp     # CA Administration Daemon
-dxadmind        1958/tcp     # CA Administration Daemon
-#                           John Birrell <birjo99 at cai.com> 
-simp-all        1959/udp     # SIMP Channel
-simp-all        1959/tcp     # SIMP Channel
-#                           Tim Hunnewell <thunnewell at pinna.com> 
-nasmanager      1960/udp     # Merit DAC NASmanager
-nasmanager      1960/tcp     # Merit DAC NASmanager
-#                           Richard S. Conto <rsc at merit.edu>
-bts-appserver	1961/udp    # BTS APPSERVER
-bts-appserver	1961/tcp    # BTS APPSERVER
-#			   Carl Obsorn <carl_osborn at sabre.com>
-biap-mp         1962/udp    # BIAP-MP
-biap-mp         1962/tcp    # BIAP-MP
-#                          Chuck Shotton <cshotton at biap.com>  
-webmachine      1963/udp    # WebMachine
-webmachine      1963/tcp    # WebMachine
-#                          Tim Jowers <Tim.Jowers at ColumbiaSC.NCR.com>
-solid-e-engine	1964/udp    # SOLID E ENGINE
-solid-e-engine	1964/tcp    # SOLID E ENGINE
-#			   Ari Valtanen <ari.valtanen at solidtech.com>
-tivoli-npm	1965/udp    # Tivoli NPM
-tivoli-npm	1965/tcp    # Tivoli NPM
-#			   Ivana Cuozzo <Ivana.Cuozzo at tivoli.com>
-slush		1966/udp    # Slush
-slush		1966/tcp    # Slush
-#			   Damien Miller <damien at ibs.com.au>
-sns-quote	1967/udp    # SNS Quote
-sns-quote	1967/tcp    # SNS Quote
-#			   Robert Ellman <rellman at calicotech.com>
-lipsinc         1968/udp    # LIPSinc
-lipsinc         1968/tcp    # LIPSinc
-lipsinc1        1969/udp    # LIPSinc 1
-lipsinc1        1969/tcp    # LIPSinc 1
-#                          Robert Armington <rarmington at lipsinc.com> 
-netop-rc        1970/udp    # NetOp Remote Control
-netop-rc        1970/tcp    # NetOp Remote Control
-netop-school    1971/udp    # NetOp School
-netop-school    1971/tcp    # NetOp School
-#                          NetOp Technical Support <support at danware.dk>
-intersys-cache	1972/udp    # Cache
-intersys-cache	1972/tcp    # Cache
-#			   Mark Hanson <markh at intersys.com>
-dlsrap          1973/udp    # Data Link Switching Remote Access Protocol
-dlsrap          1973/tcp    # Data Link Switching Remote Access Protocol
-#                          Steve T. Chiang <schiang at cisco.com>
-drp		1974/udp    # DRP
-drp		1974/tcp    # DRP
-#			   Richard Alan Johnson <raj at cisco.com>
-tcoflashagent	1975/udp    # TCO Flash Agent
-tcoflashagent	1975/tcp    # TCO Flash Agent
-tcoregagent	1976/udp    # TCO Reg Agent 
-tcoregagent	1976/tcp    # TCO Reg Agent 
-tcoaddressbook	1977/udp    # TCO Address Book
-tcoaddressbook	1977/tcp    # TCO Address Book
-#			   Allan Panitch <allanp at tcosoft.com>
-unisql		1978/udp    # UniSQL
-unisql		1978/tcp    # UniSQL
-unisql-java	1979/udp    # UniSQL Java
-unisql-java	1979/tcp    # UniSQL Java
-#			   Keith Yarbrough <kyarbro at windtraveller.com>
-pearldoc-xact   1980/udp    # PearlDoc XACT
-pearldoc-xact   1980/tcp    # PearlDoc XACT
-#                          Chris Vertonghen <chrisv at pearldoc.com>
-p2pq            1981/udp    # p2pQ
-p2pq            1981/tcp    # p2pQ
-#                          Warren Alexander <warren at chameleon-creative.co.uk>
-estamp          1982/udp    # Evidentiary Timestamp
-estamp          1982/tcp    # Evidentiary Timestamp
-#                          Todd Glassey <todd.glassey at att.net>
-lhtp            1983/udp    # Loophole Test Protocol
-lhtp            1983/tcp    # Loophole Test Protocol
-#                          Kade Hansson <kade_fh at postoffice.utas.edu.au>
-bb		1984/udp    # BB
-bb		1984/tcp    # BB
-#			   Sean MacGuire <sean at maclawran.ca>
-hsrp		1985/udp    # Hot Standby Router Protocol
-hsrp		1985/tcp    # Hot Standby Router Protocol
-#			   Phil Morton <pmorton at cisco.com>
-licensedaemon   1986/udp    # cisco license management
-licensedaemon   1986/tcp    # cisco license management
-tr-rsrb-p1      1987/udp    # cisco RSRB Priority 1 port
-tr-rsrb-p1      1987/tcp    # cisco RSRB Priority 1 port
-tr-rsrb-p2      1988/udp    # cisco RSRB Priority 2 port
-tr-rsrb-p2      1988/tcp    # cisco RSRB Priority 2 port
-tr-rsrb-p3      1989/udp    # cisco RSRB Priority 3 port
-tr-rsrb-p3      1989/tcp    # cisco RSRB Priority 3 port
-# The following entry records an unassigned but widespread use
-mshnet          1989/udp    # MHSnet system
-mshnet          1989/tcp    # MHSnet system
-#                          Bob Kummerfeld <bob at sarad.cs.su.oz.au>
-stun-p1         1990/udp    # cisco STUN Priority 1 port
-stun-p1         1990/tcp    # cisco STUN Priority 1 port
-stun-p2         1991/udp    # cisco STUN Priority 2 port
-stun-p2         1991/tcp    # cisco STUN Priority 2 port
-stun-p3         1992/udp    # cisco STUN Priority 3 port
-stun-p3         1992/tcp    # cisco STUN Priority 3 port
-# The following entry records an unassigned but widespread use
-ipsendmsg       1992/udp    # IPsendmsg
-ipsendmsg       1992/tcp    # IPsendmsg
-#                          Bob Kummerfeld <bob at sarad.cs.su.oz.au>
-snmp-tcp-port   1993/udp    # cisco SNMP TCP port
-snmp-tcp-port   1993/tcp    # cisco SNMP TCP port
-stun-port       1994/udp    # cisco serial tunnel port
-stun-port       1994/tcp    # cisco serial tunnel port
-perf-port       1995/udp    # cisco perf port
-perf-port       1995/tcp    # cisco perf port
-tr-rsrb-port    1996/udp    # cisco Remote SRB port
-tr-rsrb-port    1996/tcp    # cisco Remote SRB port
-gdp-port        1997/udp    # cisco Gateway Discovery Protocol
-gdp-port        1997/tcp    # cisco Gateway Discovery Protocol
-x25-svc-port    1998/udp    # cisco X.25 service (XOT)
-x25-svc-port    1998/tcp    # cisco X.25 service (XOT)
-tcp-id-port     1999/udp    # cisco identification port
-tcp-id-port     1999/tcp    # cisco identification port
-#
-callbook        2000/udp    # callbook
-callbook        2000/tcp    # callbook
-#                          Devon Bowen <bowen at cs.buffalo.edu>
-wizard		2001/udp    # curry
-dc		2001/tcp # 
-globe		2002/udp # 
-globe		2002/tcp # 
-emce            2004/udp    # CCWS mm conf
-mailbox		2004/tcp # 
-oracle		2005/udp # 
-berknet		2005/tcp # 
-raid-cc		2006/udp    # raid
-invokator	2006/tcp # 
-raid-am		2007/udp # 
-dectalk		2007/tcp # 
-terminaldb	2008/udp # 
-conf		2008/tcp # 
-whosockami	2009/udp # 
-news		2009/tcp # 
-pipe_server	2010/udp # 
-search		2010/tcp # 
-servserv	2011/udp # 
-raid-cc		2011/tcp    # raid
-raid-ac		2012/udp # 
-ttyinfo		2012/tcp # 
-raid-cd		2013/udp # 
-raid-am		2013/tcp # 
-raid-sf		2014/udp # 
-troff		2014/tcp # 
-raid-cs		2015/udp # 
-cypress		2015/tcp # 
-bootserver	2016/udp # 
-bootserver	2016/tcp # 
-bootclient	2017/udp # 
-cypress-stat	2017/tcp # 
-rellpack	2018/udp # 
-terminaldb	2018/tcp # 
-about		2019/udp # 
-whosockami	2019/tcp # 
-xinupageserver	2020/udp # 
-xinupageserver	2020/tcp # 
-xinuexpansion1	2021/udp # 
-servexec	2021/tcp # 
-xinuexpansion2	2022/udp # 
-down		2022/tcp # 
-xinuexpansion3	2023/udp # 
-xinuexpansion3	2023/tcp # 
-xinuexpansion4	2024/udp # 
-xinuexpansion4	2024/tcp # 
-xribs		2025/udp # 
-ellpack		2025/tcp # 
-scrabble	2026/udp # 
-scrabble	2026/tcp # 
-shadowserver	2027/udp # 
-shadowserver	2027/tcp # 
-submitserver	2028/udp # 
-submitserver	2028/tcp # 
-#               2029       Unassigned
-device2		2030/udp # 
-device2		2030/tcp # 
-#               2031       Unassigned    
-blackboard      2032/udp # 
-blackboard      2032/tcp # 
-glogger		2033/udp # 
-glogger		2033/tcp # 
-scoremgr	2034/udp # 
-scoremgr	2034/tcp # 
-imsldoc		2035/udp # 
-imsldoc		2035/tcp # 
-#               2036       Unassigned
-p2plus          2037/udp    # P2plus Application Server
-p2plus          2037/tcp    # P2plus Application Server
-#                          Thomas Boerkel <tb at ap-ag.com>
-objectmanager	2038/udp # 
-objectmanager	2038/tcp # 
-#               2039       Unassigned
-lam		2040/udp # 
-lam		2040/tcp # 
-interbase	2041/udp # 
-interbase	2041/tcp # 
-isis		2042/udp    # isis
-isis		2042/tcp    # isis
-isis-bcast	2043/udp    # isis-bcast
-isis-bcast	2043/tcp    # isis-bcast
-#                          Ken Chapman <kchapman at isis.com>
-rimsl		2044/udp # 
-rimsl		2044/tcp # 
-cdfunc		2045/udp # 
-cdfunc		2045/tcp # 
-sdfunc		2046/udp # 
-sdfunc		2046/tcp # 
-dls		2047/udp # 
-dls		2047/tcp # 
-dls-monitor	2048/udp # 
-dls-monitor	2048/tcp # 
-#                         <== NOTE Conflict on 2049 !
-shilp		2049/udp nfs # 
-shilp		2049/tcp nfs # 
-#                          Brent Callaghan <brent at terra.eng.sun.com>
-av-emb-config   2050/udp    # Avaya EMB Config Port
-av-emb-config   2050/tcp    # Avaya EMB Config Port
-#                          John Yeager <johnyeager at avaya.com>
-epnsdp          2051/udp    # EPNSDP
-epnsdp          2051/tcp    # EPNSDP
-#                          Hiroyasu Ogata <Ogata.Hiroyasu at exc.epson.co.jp>
-clearvisn       2052/udp    # clearVisn Services Port
-clearvisn       2052/tcp    # clearVisn Services Port
-#                          Dave Lyons <dlyons at dnpg.com>    
-lot105-ds-upd   2053/udp    # Lot105 DSuper Updates
-lot105-ds-upd   2053/tcp    # Lot105 DSuper Updates
-#                          Piers Scannell <iana-form at lot105.com>
-weblogin        2054/udp    # Weblogin Port
-weblogin        2054/tcp    # Weblogin Port
-#                          Diego Saravia <dsa at unsa.edu.ar>
-iop             2055/udp    # Iliad-Odyssey Protocol
-iop             2055/tcp    # Iliad-Odyssey Protocol
-#                          Bruce Lueckenhoff <brucelu at cisco.com>
-omnisky         2056/udp    # OmniSky Port
-omnisky         2056/tcp    # OmniSky Port
-#	                   Oren Hurvitz <oren at omnisky.com>  
-rich-cp         2057/udp    # Rich Content Protocol
-rich-cp         2057/tcp    # Rich Content Protocol
-#                          Ronen Vainish <ronen at digitalfountain.com> 
-newwavesearch   2058/udp    # NewWaveSearchables RMI
-newwavesearch   2058/tcp    # NewWaveSearchables RMI
-#                          Thomas Kerkau <Thomas.Kerkau at io-software.com>  
-bmc-messaging   2059/udp    # BMC Messaging Service
-bmc-messaging   2059/tcp    # BMC Messaging Service
-#                          Roger Huebner <Roger_Huebner at bmc.com>
-teleniumdaemon  2060/udp    # Telenium Daemon IF
-teleniumdaemon  2060/tcp    # Telenium Daemon IF
-#                          Nick Woronuk <nick.woronuk at megasys.com>
-netmount        2061/udp    # NetMount
-netmount        2061/tcp    # NetMount
-#                          Alex Oberlander <alexo at netmount.com>
-icg-swp         2062/udp    # ICG SWP Port
-icg-swp         2062/tcp    # ICG SWP Port
-icg-bridge      2063/udp    # ICG Bridge Port
-icg-bridge      2063/tcp    # ICG Bridge Port
-icg-iprelay     2064/udp    # ICG IP Relay Port
-icg-iprelay     2064/tcp    # ICG IP Relay Port
-#                          Steve Quintana <steve at icgresearch.com> 
-dlsrpn          2065/udp    # Data Link Switch Read Port Number
-dlsrpn          2065/tcp    # Data Link Switch Read Port Number
-#                          Amir Peless <amirp at radware.co.il>
-#               2066       Unassigned 
-dlswpn          2067/udp    # Data Link Switch Write Port Number
-dlswpn          2067/tcp    # Data Link Switch Write Port Number
-#                          Amir Peless <amirp at radware.co.il>   
-avauthsrvprtcl  2068/udp    # Avocent AuthSrv Protocol
-avauthsrvprtcl  2068/tcp    # Avocent AuthSrv Protocol
-#                          Steven W. Clark <sclark at equinox.com>
-event-port      2069/udp    # HTTP Event Port
-event-port      2069/tcp    # HTTP Event Port
-#                          Larry Emlich <larry.emlich at compaq.com>
-ah-esp-encap    2070/udp    # AH and ESP Encapsulated in UDP packet
-ah-esp-encap    2070/tcp    # AH and ESP Encapsulated in UDP packet
-#                          Amy Weaver <aweaver at vpnet.com> 
-acp-port        2071/udp    # Axon Control Protocol
-acp-port        2071/tcp    # Axon Control Protocol
-#                          Christiaan Simons <christiaan.simons at axon.nl>
-msync           2072/udp    # GlobeCast mSync
-msync           2072/tcp    # GlobeCast mSync
-#                          Piers Scannell <piers at globecastne.com>
-gxs-data-port   2073/udp    # DataReel Database Socket
-gxs-data-port   2073/tcp    # DataReel Database Socket
-#                          Douglas M. Gaer <doug at datareel.com>
-vrtl-vmf-sa     2074/udp    # Vertel VMF SA
-vrtl-vmf-sa     2074/tcp    # Vertel VMF SA
-#                          Alan Akahoshi <alan-akahoshi at vertel.com>
-newlixengine    2075/udp    # Newlix ServerWare Engine
-newlixengine    2075/tcp    # Newlix ServerWare Engine
-newlixconfig    2076/udp    # Newlix JSPConfig
-newlixconfig    2076/tcp    # Newlix JSPConfig
-#                          Jean-Serge Gagnon <jean-serge.gagnon at newlix.com>
-trellisagt      2077/udp    # TrelliSoft Agent
-trellisagt      2077/tcp    # TrelliSoft Agent
-trellissvr      2078/udp    # TrelliSoft Server
-trellissvr      2078/tcp    # TrelliSoft Server
-#                          Justin R. Bendich <bendich at TrelliSoft.com>
-idware-router   2079/udp    # IDWARE Router Port
-idware-router   2079/tcp    # IDWARE Router Port
-#                          Zdenek Kolba <zdenek.kolba at id-karta.cz>
-autodesk-nlm    2080/udp    # Autodesk NLM (FLEXlm)
-autodesk-nlm    2080/tcp    # Autodesk NLM (FLEXlm)
-#                          Greg Suppes <greg.suppes at autodesk.com>  
-kme-trap-port   2081/udp    # KME PRINTER TRAP PORT
-kme-trap-port   2081/tcp    # KME PRINTER TRAP PORT
-#                          Masakatsu Matsuo <masa at sdsft.kme.mei.co.jp>
-infowave        2082/udp    # Infowave Mobiltiy Server
-infowave        2082/tcp    # Infowave Mobility Server
-#                          Kaz Kylheku <kkylheku at infowave.com>
-#               2083-2085  Unassigned
-gnunet          2086/udp    # GNUnet
-gnunet          2086/tcp    # GNUnet
-#                          Christian Grothoff <grothoff at cs.purdue.edu> October 2002
-eli             2087/udp    # ELI - Event Logging Integration
-eli             2087/tcp    # ELI - Event Logging Integration
-#                          Maya Zimerman <mayaz at radware.co.il>  
-#               2088       Unassigned 
-sep             2089/udp    # Security Encapsulation Protocol - SEP 
-sep             2089/tcp    # Security Encapsulation Protocol - SEP 
-#                          Maya Zimerman <mayaz at radware.co.il>
-lrp		2090/udp    # Load Report Protocol
-lrp		2090/tcp    # Load Report Protocol
-#			   Amir Peless <amirp at radware.co.il>
-prp		2091/udp    # PRP
-prp		2091/tcp    # PRP
-#			   Amir Peless <amirp at radware.co.il>
-descent3	2092/udp    # Descent 3
-descent3	2092/tcp    # Descent 3
-#			   Kevin Bentley <Kevin at outrage.com>
-nbx-cc		2093/udp    # NBX CC
-nbx-cc		2093/tcp    # NBX CC
-nbx-au		2094/udp    # NBX AU
-nbx-au		2094/tcp    # NBX AU
-nbx-ser		2095/udp    # NBX SER
-nbx-ser		2095/tcp    # NBX SER
-nbx-dir		2096/udp    # NBX DIR
-nbx-dir		2096/tcp    # NBX DIR
-#			   Henry Houh <hhouh at nbxcorp.com>
-jetformpreview	2097/udp    # Jet Form Preview
-jetformpreview	2097/tcp    # Jet Form Preview
-#			   Zygmunt Wiercioch <zyg at jetform.com>
-dialog-port	2098/udp    # Dialog Port
-dialog-port	2098/tcp    # Dialog Port
-#			   Joseph Mathew <mjoseph at dosa.cisco.com>
-h2250-annex-g	2099/udp    # H.225.0 Annex G
-h2250-annex-g	2099/tcp    # H.225.0 Annex G
-#			   Gur Kimchi <gur.kimchi at vocaltec.com>
-amiganetfs      2100/udp    # Amiga Network Filesystem
-amiganetfs      2100/tcp    # Amiga Network Filesystem
-#                          Rudi Chiarito <nutello at sweetness.com>
-rtcm-sc104	2101/udp    # rtcm-sc104
-rtcm-sc104	2101/tcp    # rtcm-sc104
-#			   Wolfgang Rupprecht <wolfgang at wsrcc.com>
-zephyr-srv      2102/udp    # Zephyr server
-zephyr-srv      2102/tcp    # Zephyr server
-zephyr-clt      2103/udp    # Zephyr serv-hm connection
-zephyr-clt      2103/tcp    # Zephyr serv-hm connection
-zephyr-hm       2104/udp    # Zephyr hostmanager
-zephyr-hm       2104/tcp    # Zephyr hostmanager
-#                          Greg Hudson <zephyr-bugs at mit.edu>
-minipay		2105/udp    # MiniPay
-minipay		2105/tcp    # MiniPay
-#			   Amir Herzberg <amirh at vnet.ibm.com>
-mzap		2106/udp    # MZAP
-mzap		2106/tcp    # MZAP
-#			   Dave Thaler <dthaler at microsoft.com>
-bintec-admin	2107/udp    # BinTec Admin 
-bintec-admin	2107/tcp    # BinTec Admin 
-#			   Thomas Schmidt <ts at bintec.de>
-comcam		2108/udp    # Comcam
-comcam		2108/tcp    # Comcam
-#			   Don Gilbreath <don at comcam.net>
-ergolight       2109/udp    # Ergolight
-ergolight       2109/tcp    # Ergolight
-#                          Jindra Ryvola <jryvola at ledalite.com>
-umsp            2110/udp    # UMSP
-umsp            2110/tcp    # UMSP
-#                          Alexander Bogdanov <alexander_bgd at softhome.net>    
-dsatp           2111/udp    # DSATP
-dsatp           2111/tcp    # DSATP
-#                          Ralph Beck <beck at altaworks.com>
-idonix-metanet  2112/udp    # Idonix MetaNet
-idonix-metanet  2112/tcp    # Idonix MetaNet
-#                          Paul Harrison <paulh at idonix.co.uk>
-hsl-storm       2113/udp    # HSL StoRM
-hsl-storm       2113/tcp    # HSL StoRM
-#                          Jost Faganel <jost.faganel at hermes.si>   
-newheights      2114/udp    # NEWHEIGHTS
-newheights      2114/tcp    # NEWHEIGHTS
-#                          Michael Levy <ml at nh.ca>
-kdm             2115/udp    # Key Distribution Manager
-kdm             2115/tcp    # Key Distribution Manager
-#                          Mike Little <mike.little at GDC4S.com>
-ccowcmr         2116/udp    # CCOWCMR
-ccowcmr         2116/tcp    # CCOWCMR
-#                          Mark Morwood <markm at sentillion.com> 
-mentaclient     2117/udp    # MENTACLIENT
-mentaclient     2117/tcp    # MENTACLIENT
-mentaserver     2118/udp    # MENTASERVER
-mentaserver     2118/tcp    # MENTASERVER
-#                          Ilan Shlosberg <ilan at mentasoftware.com>
-gsigatekeeper   2119/udp    # GSIGATEKEEPER
-gsigatekeeper   2119/tcp    # GSIGATEKEEPER
-#                          Steve Tuecke <tuecke at mcs.anl.gov>
-qencp           2120/udp    # Quick Eagle Networks CP
-qencp           2120/tcp    # Quick Eagle Networks CP
-#                          Santa Dasu <Santa_Dasu at quickeagle.com>
-scientia-ssdb   2121/udp    # SCIENTIA-SSDB
-scientia-ssdb   2121/tcp    # SCIENTIA-SSDB
-#                          Ian Miller <Ian_Miller at scientia.com>
-caupc-remote    2122/udp    # CauPC Remote Control
-caupc-remote    2122/tcp    # CauPC Remote Control
-#                          Environics Oy <pasi.nuutinmaki at environics.fi>    
-gtp-control     2123/udp    # GTP-Control Plane (3GPP)
-gtp-control     2123/tcp    # GTP-Control Plane (3GPP)
-#                          Alessio Casati <a.casati at computer.org>
-elatelink       2124/udp    # ELATELINK
-elatelink       2124/tcp    # ELATELINK
-#                          Tim Lawrence <lawrence at tao-group.com>
-lockstep        2125/udp    # LOCKSTEP
-lockstep        2125/tcp    # LOCKSTEP
-#                          Karl Forster <kforster at lockstep.com> 
-pktcable-cops   2126/udp    # PktCable-COPS
-pktcable-cops   2126/tcp    # PktCable-COPS
-#                          Glenn Russell <grussell at cablelabs.com> 
-index-pc-wb     2127/udp    # INDEX-PC-WB
-index-pc-wb     2127/tcp    # INDEX-PC-WB
-#                          James David Fisher <jfisher1 at avaya.com>
-net-steward     2128/udp    # Net Steward Control
-net-steward     2128/tcp    # Net Steward Control
-#                          Martin Norman <martin at ndl.co.uk>
-cs-live         2129/udp    # cs-live.com
-cs-live         2129/tcp    # cs-live.com
-#                          Matt Lachance <matt at cs-live.com>
-swc-xds         2130/udp    # SWC-XDS
-swc-xds         2130/tcp    # SWC-XDS
-#                          Peter Zurich <peter.zurich at swc.com>
-avantageb2b     2131/udp    # Avantageb2b
-avantageb2b     2131/tcp    # Avantageb2b
-#                          Avi Software <srobert at logava.com>
-avail-epmap     2132/udp    # AVAIL-EPMAP
-avail-epmap     2132/tcp    # AVAIL-EPMAP
-#                          Mark Armstrong <avail at pacbell.net>
-zymed-zpp       2133/udp    # ZYMED-ZPP
-zymed-zpp       2133/tcp    # ZYMED-ZPP
-#                          Gregg Welker <greggw at zmi.com>
-avenue          2134/udp    # AVENUE
-avenue          2134/tcp    # AVENUE
-#                          Jason Cater <jason at ncsmags.com>
-gris            2135/udp    # Grid Resource Information Server
-gris            2135/tcp    # Grid Resource Information Server
-#                          Steve Tuecke <tuecke at mcs.anl.gov>   
-appworxsrv      2136/udp    # APPWORXSRV
-appworxsrv      2136/tcp    # APPWORXSRV
-#                          Fred McLain <fmclain at appworx.com>
-connect         2137/udp    # CONNECT
-connect         2137/tcp    # CONNECT
-#                          Reid Ligon <reid at connectrf.com>   
-unbind-cluster  2138/udp    # UNBIND-CLUSTER
-unbind-cluster  2138/tcp    # UNBIND-CLUSTER
-#                          Francois Harvey <securiweb at pandore.qc.ca>
-ias-auth        2139/udp    # IAS-AUTH
-ias-auth        2139/tcp    # IAS-AUTH	     
-ias-reg         2140/udp    # IAS-REG
-ias-reg         2140/tcp    # IAS-REG
-ias-admind      2141/udp    # IAS-ADMIND
-ias-admind      2141/tcp    # IAS-ADMIND
-#                          Baiju V. Patel <Baiju.v.patel at intel.com>
-tdm-over-ip     2142/udp    # TDM-OVER-IP
-tdm-over-ip     2142/tcp    # TDM-OVER-IP
-#                          Tal Gilad <tal_g at rad.co.il>
-lv-jc           2143/udp    # Live Vault Job Control
-lv-jc           2143/tcp    # Live Vault Job Control
-lv-ffx          2144/udp    # Live Vault Fast Object Transfer
-lv-ffx          2144/tcp    # Live Vault Fast Object Transfer
-lv-pici         2145/udp    # Live Vault Remote Diagnostic Console Support
-lv-pici         2145/tcp    # Live Vault Remote Diagnostic Console Support
-lv-not          2146/udp    # Live Vault Admin Event Notification
-lv-not          2146/tcp    # Live Vault Admin Event Notification
-lv-auth         2147/udp    # Live Vault Authentication
-lv-auth         2147/tcp    # Live Vault Authentication
-#                          Ted Hess <thess at livevault.com>
-veritas-ucl     2148/udp    # VERITAS UNIVERSAL COMMUNICATION LAYER
-veritas-ucl     2148/tcp    # VERITAS UNIVERSAL COMMUNICATION LAYER
-#                          Songlin Ren <ren at veritas.com>	
-acptsys         2149/udp    # ACPTSYS
-acptsys         2149/tcp    # ACPTSYS
-#                          Michael Lekias <admin at psdesign.com.au>         
-dynamic3d       2150/udp    # DYNAMIC3D
-dynamic3d       2150/tcp    # DYNAMIC3D
-#                          Tobias Wegner <wegner at novagate.de>		
-docent          2151/udp    # DOCENT
-docent          2151/tcp    # DOCENT
-#                          Hali Lindbloom <halil at docent.com>
-gtp-user        2152/udp    # GTP-User Plane (3GPP)
-gtp-user        2152/tcp    # GTP-User Plane (3GPP)
-#                          Alessio Casati <a.casati at computer.org> 
-#               2153-2158  Unassigned
-gdbremote       2159/udp    # GDB Remote Debug Port
-gdbremote       2159/tcp    # GDB Remote Debug Port
-#                          Nigel Stephens <nigel at algor.co.uk>
-apc-2160        2160/udp    # APC 2160
-apc-2160        2160/tcp    # APC 2160
-#                          American Power Conversion <ports at apcc.com>
-apc-2161        2161/udp    # APC 2161
-apc-2161        2161/tcp    # APC 2161
-#                          American Power Conversion <ports at apcc.com>
-navisphere      2162/udp    # Navisphere
-navisphere      2162/tcp    # Navisphere
-navisphere-sec  2163/udp    # Navisphere Secure
-navisphere-sec  2163/tcp    # Navisphere Secure
-#                          Andreas Bauer <bauer_andreas at emc.com>
-ddns-v3         2164/udp    # Dynamic DNS Version 3
-ddns-v3         2164/tcp    # Dynamic DNS Version 3
-#                          Alan Yates <alany at ay.com.au>
-x-bone-api	2165/udp    # X-Bone API
-x-bone-api	2165/tcp    # X-Bone API
-#			   Joe Touch <touch at isi.edu>
-iwserver        2166/udp    # iwserver
-iwserver        2166/tcp    # iwserver
-#                          Fred Surr <quest_iana at oz.quest.com>
-raw-serial      2167/udp    # Raw Async Serial Link
-raw-serial      2167/tcp    # Raw Async Serial Link
-#                          Benjamin Green <benjamin at lh.co.nz>
-#	        2168-2179  Unassigned
-mc-gt-srv	2180/udp    # Millicent Vendor Gateway Server
-mc-gt-srv	2180/tcp    # Millicent Vendor Gateway Server
-#			   Steve Glassman <steveg at pa.dec.com>
-eforward        2181/udp    # eforward
-eforward        2181/tcp    # eforward
-#                          Greg Pringle <admin at corvedia.com>
-#               2182-2189  Unassigned
-tivoconnect     2190/udp    # TiVoConnect Beacon
-tivoconnect     2190/tcp    # TiVoConnect Beacon
-#                          Jeffrey J. Peters <jpeters at tivo.com> August 2002
-tvbus           2191/udp    # TvBus Messaging
-tvbus           2191/tcp    # TvBus Messaging
-#                          Brian W. Beach <brian at tivo.com> January 2003               
-#               2192-2199  Unassigned
-ici             2200/udp    # ICI
-ici             2200/tcp    # ICI
-#                          Brent Hines <brent.hines at unisys.com>
-ats             2201/udp    # Advanced Training System Program
-ats             2201/tcp    # Advanced Training System Program
-#                          (Need contact info)
-imtc-map        2202/udp    # Int. Multimedia Teleconferencing Cosortium
-imtc-map        2202/tcp    # Int. Multimedia Teleconferencing Cosortium
-#                          Pat Galvin <pgalvin at databeam.com>
-kali            2213/udp    # Kali
-kali            2213/tcp    # Kali
-#                          Jay Cotton <JAY at calc.vet.uga.edu>
-netiq           2220/udp    # NetIQ End2End
-netiq           2220/tcp    # NetIQ End2End
-#			   Gary Weichinger <gary.weichinger at netiq.com>
-rockwell-csp1	2221/udp    # Rockwell CSP1
-rockwell-csp1	2221/tcp    # Rockwell CSP1
-rockwell-csp2	2222/udp    # Rockwell CSP2
-rockwell-csp2	2222/tcp    # Rockwell CSP2
-rockwell-csp3	2223/udp    # Rockwell CSP3
-rockwell-csp3	2223/tcp    # Rockwell CSP3
-#			   Brian Batke <babatke at ra.rockwell.com>	
-#
-ivs-video       2232/udp    # IVS Video default
-ivs-video       2232/tcp    # IVS Video default
-#                  Thierry Turletti <Thierry.Turletti at sophia.inria.fr>
-infocrypt	2233/udp    # INFOCRYPT
-infocrypt	2233/tcp    # INFOCRYPT
-#			   Erica Liu <liue at isolation.com>
-directplay      2234/udp    # DirectPlay
-directplay      2234/tcp    # DirectPlay
-#                          Ajay Jindal <ajayj at microsoft.com>
-sercomm-wlink   2235/udp    # Sercomm-WLink
-sercomm-wlink	2235/tcp    # Sercomm-WLink
-#			   Melinda Tsao <melinda at tpe1.sercomm.com.tw>
-nani		2236/udp    # Nani
-nani		2236/tcp    # Nani
-#			   Steve Benoit <sbenoi01 at eng.eds.com>
-optech-port1-lm 2237/udp    # Optech Port1 License Manager
-optech-port1-lm 2237/tcp    # Optech Port1 License Manager
-#		 	   Gerard Cannie <jcannie at opticaltech.com>
-aviva-sna	2238/udp    # AVIVA SNA SERVER
-aviva-sna	2238/tcp    # AVIVA SNA SERVER
-#			   Vick Keshishian <vickenK at 192.219.82.71>
-imagequery      2239/udp    # Image Query
-imagequery	2239/tcp    # Image Query	
-#			   Charles Jacobs <cjacobs at numinous.com>
-recipe		2240/udp    # RECIPe
-recipe		2240/tcp    # RECIPe
-#			   Charlie Limoges <charlie.limoges at gd-cs.com>
-ivsd            2241/udp    # IVS Daemon
-ivsd            2241/tcp    # IVS Daemon
-#                          Thierry Turletti 
-#                          <Thierry.Turletti at sophia.inria.fr>
-foliocorp       2242/udp    # Folio Remote Server
-foliocorp       2242/tcp    # Folio Remote Server
-#                          Pat Mcgowan <pmcgowan at folio.com>
-magicom		2243/udp    # Magicom Protocol
-magicom		2243/tcp    # Magicom Protocol
-#			   Yossi Appleboum <yossia at magicom.co.il>
-nmsserver	2244/udp    # NMS Server
-nmsserver	2244/tcp    # NMS Server
-#			   Dmitry Krasnonosenkikh
-#			   <Dmitry_Krasnonosenkih at nmss.com>
-hao		2245/udp    # HaO
-hao		2245/tcp    # HaO
-#			   Panic Ride <panicride at hao.org>
-pc-mta-addrmap  2246/udp    # PacketCable MTA Addr Map
-pc-mta-addrmap  2246/tcp    # PacketCable MTA Addr Map
-#                          Dave Maxwell <d.maxwell at cablelabs.com>
-#               2247       Unassigned
-ums 		2248/udp    # User Management Service
-ums             2248/tcp    # User Management Service
-#                          Andrew Crockford 
-#                          <andrew.crockford at modus-interactive.co.uk>
-rfmp		2249/udp    # RISO File Manager Protocol
-rfmp		2249/tcp    # RISO File Manager Protocol
-#                          Shinji Yamanaka <syamanaka at jci.co.jp>
-remote-collab   2250/udp    # remote-collab
-remote-collab   2250/tcp    # remote-collab
-#                          Richard Walters <walters at cs.ucdavis.edu>
-dif-port        2251/udp    # Distributed Framework Port
-dif-port	2251/tcp    # Distributed Framework Port
-#                          Sebastien Lambla <lambla at bouygtel.com>
-njenet-ssl      2252/udp    # NJENET using SSL
-njenet-ssl      2252/tcp    # NJENET using SSL
-#                          Hans U Schmidt <schmidth at de.ibm.com>
-dtv-chan-req    2253/udp    # DTV Channel Request
-dtv-chan-req	2253/tcp    # DTV Channel Request
-#                          Richard Hodges <rh at matriplex.com>
-seispoc         2254/udp    # Seismic P.O.C. Port
-seispoc         2254/tcp    # Seismic P.O.C. Port
-#                          Robert Reimiller <bob at certsoft.com>
-vrtp            2255/udp    # VRTP - ViRtue Transfer Protocol
-vrtp            2255/tcp    # VRTP - ViRtue Transfer Protocol
-#                          Max Fudim <fudim at virtue3d.com> 
-#               2256-2259  Unassigned
-apc-2260        2260/udp    # APC 2260
-apc-2260        2260/tcp    # APC 2260
-#                          American Power Conversion <ports at apcc.com> February 2002
-#               2261-2278  Unassigned
-xmquery         2279/udp    # xmquery
-xmquery         2279/tcp    # xmquery
-#                          Niels Christiansen <nchris at austin.ibm.com>
-lnvpoller       2280/udp    # LNVPOLLER
-lnvpoller       2280/tcp    # LNVPOLLER
-lnvconsole      2281/udp    # LNVCONSOLE
-lnvconsole      2281/tcp    # LNVCONSOLE
-lnvalarm        2282/udp    # LNVALARM
-lnvalarm        2282/tcp    # LNVALARM
-lnvstatus       2283/udp    # LNVSTATUS
-lnvstatus       2283/tcp    # LNVSTATUS
-lnvmaps         2284/udp    # LNVMAPS
-lnvmaps         2284/tcp    # LNVMAPS
-lnvmailmon      2285/udp    # LNVMAILMON
-lnvmailmon      2285/tcp    # LNVMAILMON
-#                          John Payne <jpayne at lotus.com> 
-nas-metering    2286/udp    # NAS-Metering
-nas-metering    2286/tcp    # NAS-Metering
-#                          Steven Sawkins <ssawkins at symantec.com>    
-dna		2287/udp    # DNA
-dna		2287/tcp    # DNA
-#			   Tung Nguyen <dash at ricochet.net>
-netml		2288/udp    # NETML
-netml		2288/tcp    # NETML
-#			   Jochen Hansmeyer <cjh at krypton.de>
-#               2289-2293  Unassigned
-konshus-lm	2294/udp    # Konshus License Manager (FLEX)
-konshus-lm	2294/tcp    # Konshus License Manager (FLEX)
-#			   Francois Painchaud <fpainchaud at konshus.com>
-advant-lm	2295/udp    # Advant License Manager
-advant-lm	2295/tcp    # Advant License Manager
-#			   Lars-Goran Magnusson 
-#                          <lars-goran.magnusson at seisy.mail.abb.com>
-theta-lm	2296/udp    # Theta License Manager (Rainbow)
-theta-lm	2296/tcp    # Theta License Manager (Rainbow)
-#		   	   David Thompson <theta at theta-ent.com>
-d2k-datamover1	2297/udp    # D2K DataMover 1
-d2k-datamover1	2297/tcp    # D2K DataMover 1
-d2k-datamover2	2298/udp    # D2K DataMover 2
-d2k-datamover2  2298/tcp    # D2K DataMover 2
-#			   Eric Lan <elan at d2k.com>
-pc-telecommute	2299/udp    # PC Telecommute
-pc-telecommute	2299/tcp    # PC Telecommute
-#			   John Daniel Bonamico <jbonamico at symantec.com>
-cvmmon          2300/udp    # CVMMON
-cvmmon          2300/tcp    # CVMMON
-#                          Roger Kumpf <kumpf at cup.hp.com>
-cpq-wbem        2301/udp    # Compaq HTTP
-cpq-wbem        2301/tcp    # Compaq HTTP
-#                          Scott Shaffer <scott.shaffer at hp.com>
-binderysupport	2302/udp    # Bindery Support
-binderysupport	2302/tcp    # Bindery Support
-#			   Narasimha Rao N. <nnarasimharao at novell.com>
-proxy-gateway	2303/udp    # Proxy Gateway
-proxy-gateway	2303/tcp    # Proxy Gateway
-#			   Paul Funk <paul at funk.com>
-attachmate-uts	2304/udp    # Attachmate UTS
-attachmate-uts	2304/tcp    # Attachmate UTS
-#			   George Gianelos <Georgegi at Attachmate.com>
-mt-scaleserver	2305/udp    # MT ScaleServer
-mt-scaleserver	2305/tcp    # MT ScaleServer
-#			   Paul Glaubitz <Paul.Glaubitz at mt.com>
-tappi-boxnet	2306/udp    # TAPPI BoxNet
-tappi-boxnet	2306/tcp    # TAPPI BoxNet
-#			   Richard Spartz <rspartz at alliancetechnical.com>
-pehelp          2307/udp    # pehelp
-pehelp          2307/tcp    # pehelp
-#                          Jens Kilian <jensk at hpbeo82.bbn.hp.com>
-sdhelp		2308/udp    # sdhelp
-sdhelp		2308/tcp    # sdhelp
-#			   Annette Klecha <annette_klecha at bbn.hp.com>
-sdserver	2309/udp    # SD Server
-sdserver	2309/tcp    # SD Server
-sdclient	2310/udp    # SD Client
-sdclient	2310/tcp    # SD Client
-#			   Jeurgen Broesamle <juergb at bbn.hp.com>
-messageservice	2311/udp    # Message Service
-messageservice	2311/tcp    # Message Service
-#			   No contact Listed	
-iapp		2313/udp    # IAPP (Inter Access Point Protocol)
-iapp		2313/tcp    # IAPP (Inter Access Point Protocol)
-#			   Henri Moelard <moelard at lucent.com>
-cr-websystems	2314/udp    # CR WebSystems
-cr-websystems	2314/tcp    # CR WebSystems
-#			   Robin Giese <rgiese at peddie.org>
-precise-sft	2315/udp    # Precise Sft.
-precise-sft	2315/tcp    # Precise Sft.
-#			   Michael Landwehr <mikel at precisesoft.co.il>
-sent-lm		2316/udp    # SENT License Manager
-sent-lm		2316/tcp    # SENT License Manager
-#			   Pisharath Krishnan <krishnan at axis-inc.com>
-attachmate-g32	2317/udp    # Attachmate G32
-attachmate-g32	2317/tcp    # Attachmate G32
-#			   Bryce Bhatnagar <BRYCEBH at Attachmate.com>
-cadencecontrol	2318/udp    # Cadence Control
-cadencecontrol	2318/tcp    # Cadence Control
-#			   Buck Caldwell <buck_c at polygon.com>
-infolibria	2319/udp    # InfoLibria
-infolibria	2319/tcp    # InfoLibria
-#			   Chris Chiotasso <cchiotasso at infolibria.com>
-siebel-ns	2320/udp    # Siebel NS
-siebel-ns	2320/tcp    # Siebel NS
-#			   Gilberto Arnaiz <garnaiz at siebel.com>
-rdlap		2321/udp    # RDLAP
-rdlap		2321/tcp    # RDLAP
-#			   Robert Wiebe <crw010 at email.mot.com>
-ofsd		2322/udp    # ofsd
-ofsd		2322/tcp    # ofsd
-3d-nfsd		2323/udp    # 3d-nfsd
-3d-nfsd		2323/tcp    # 3d-nfsd
-#			   Mike Sherrill <sherrill at commvault.com>
-cosmocall	2324/udp    # Cosmocall
-cosmocall	2324/tcp    # Cosmocall
-#			   Steve Dellutri
-designspace-lm	2325/udp    # Design Space License Management
-designspace-lm	2325/tcp    # Design Space License Management
-#			   Suzanne Lorrin <suzanne.lorrin at ansys.com>
-idcp		2326/udp    # IDCP
-idcp		2326/tcp    # IDCP
-#			   Keisokugiken Corp. <adda at kgc.co.jp>
-xingcsm		2327/udp    # xingcsm
-xingcsm		2327/tcp    # xingcsm
-#			   Dave Spencer <dspencer at xingtech.com>
-netrix-sftm	2328/udp    # Netrix SFTM
-netrix-sftm	2328/tcp    # Netrix SFTM
-#			   Garrett Herschleb <garrett at netrix.com>
-nvd		2329/udp    # NVD
-nvd		2329/tcp    # NVD
-#			   Peter Weyman <pjweyman at noblenet.com>
-tscchat		2330/udp    # TSCCHAT
-tscchat		2330/tcp    # TSCCHAT
-#			   Mike Jackson <mhjack at tscnet.com>
-agentview	2331/udp    # AGENTVIEW
-agentview	2331/tcp    # AGENTVIEW
-#			   Ram Iyer <ram at aaccorp.com>
-rcc-host	2332/udp    # RCC Host
-rcc-host	2332/tcp    # RCC Host 
-#			   Martin Shoemaker <shoemakerml at rapistan.com>
-snapp           2333/udp    # SNAPP
-snapp           2333/tcp    # SNAPP
-#                          Kevin Osborn <kosborn at snapappliance.com>
-ace-client	2334/udp    # ACE Client Auth
-ace-client	2334/tcp    # ACE Client Auth
-ace-proxy	2335/udp    # ACE Proxy
-ace-proxy	2335/tcp    # ACE Proxy
-#			   Riaz Zolfonoon <rzolfonoon at securitydynamics.com>
-appleugcontrol	2336/udp    # Apple UG Control
-appleugcontrol  2336/tcp    # Apple UG Control
-#			   Gene Tyacke <gene at apple.com>
-ideesrv		2337/udp    # ideesrv
-ideesrv		2337/tcp    # ideesrv
-#			   Marazzi <fmarazzi at ideetique.com>
-norton-lambert	2338/udp    # Norton Lambert
-norton-lambert	2338/tcp    # Norton Lambert
-#			   Richard de Mornay <rdemornay at norton-lambert.com>
-3com-webview	2339/udp    # 3Com WebView
-3com-webview	2339/tcp    # 3Com WebView
-#			   Jennifer Grace <Jennifer_Grace at 3com.com>
-wrs_registry	2340/udp    # WRS Registry
-wrs_registry	2340/tcp    # WRS Registry
-#			   Christophe Cleraux <chrisc at wrs.com>
-xiostatus	2341/udp    # XIO Status
-xiostatus	2341/tcp    # XIO Status
-#			   Randy Maas <randym at xiotech.com>
-manage-exec	2342/udp    # Seagate Manage Exec
-manage-exec	2342/tcp    # Seagate Manage Exec
-#			   Jim Flaherty <jim.flaherty at seagatesoftware.com>
-nati-logos	2343/udp    # nati logos
-nati-logos	2343/tcp    # nati logos
-#			   David Pierce <David.Pierce at natinst.com>
-fcmsys		2344/udp    # fcmsys
-fcmsys		2344/tcp    # fcmsys
-dbm		2345/udp    # dbm
-dbm		2345/tcp    # dbm
-#			   Dean Robson <dean.robson at fujitsu.com.au>
-redstorm_join	2346/udp    # Game Connection Port
-redstorm_join	2346/tcp    # Game Connection Port
-redstorm_find	2347/udp    # Game Announcement and Location
-redstorm_find	2347/tcp    # Game Announcement and Location
-redstorm_info	2348/udp    # Information to query for game status
-redstorm_info	2348/tcp    # Information to query for game status
-redstorm_diag	2349/udp    # Diagnostics Port
-redstorm_diag	2349/tcp    # Diagnostics Port
-#			   David Weinstein <david.weinstein at redstorm.com>
-psbserver	2350/udp    # psbserver
-psbserver	2350/tcp    # psbserver
-psrserver	2351/udp    # psrserver
-psrserver	2351/tcp    # psrserver
-pslserver	2352/udp    # pslserver
-pslserver	2352/tcp    # pslserver
-pspserver	2353/udp    # pspserver
-pspserver	2353/tcp    # pspserver
-psprserver	2354/udp    # psprserver
-psprserver	2354/tcp    # psprserver
-psdbserver	2355/udp    # psdbserver
-psdbserver	2355/tcp    # psdbserver
-#			   Paul Reddy <Paul at pharos.co.nz>
-gxtelmd		2356/udp    # GXT License Managemant
-gxtelmd		2356/tcp    # GXT License Managemant
-#			   Robert Hodgson <rrh at gxt.com>
-unihub-server	2357/udp    # UniHub Server
-unihub-server	2357/tcp    # UniHub Server
-#			   Tim Kenyon <Tim_Kenyon at csicontrols.com>
-futrix		2358/udp    # Futrix
-futrix		2358/tcp    # Futrix
-#			   Peter Frankenberg <pcfberg at ibm.net>
-flukeserver	2359/udp    # FlukeServer
-flukeserver	2359/tcp    # FlukeServer
-#			   Bill Marbaker <wrm at fortenet.com>
-nexstorindltd	2360/udp    # NexstorIndLtd
-nexstorindltd	2360/tcp    # NexstorIndLtd
-#			   NexStor India Limited <next at nda.vsnl.net.in>	
-tl1		2361/udp    # TL1
-tl1		2361/tcp    # TL1
-#			   Charles Scott Roberson <chip at cerent.com> 
-digiman         2362/udp    # digiman
-digiman         2362/tcp    # digiman
-#                          Aaron S. Kurland <akurland at netsilicon.com>
-mediacntrlnfsd  2363/udp    # Media Central NFSD 
-mediacntrlnfsd  2363/tcp    # Media Central NFSD 
-#			   shivakumar s. govindarajapuram <shivak at eng.sun.com>
-oi-2000		2364/udp    # OI-2000
-oi-2000		2364/tcp    # OI-2000
-#			   Software Horizons Inc. <oi2000 at shorizons.com>   
-dbref		2365/udp    # dbref
-dbref		2365/tcp    # dbref
-#			   Yoshihiro Yamazaki <yamazaki at ael.fujitsu.co.jp>
-qip-login	2366/udp    # qip-login
-qip-login	2366/tcp    # qip-login
-#			   Mike Morgan <mmorgan at lucent.com>
-service-ctrl	2367/udp    # Service Control
-service-ctrl	2367/tcp    # Service Control
-#			   Humberto Sanchez <Humberto_Sanchez at hp.com>
-opentable	2368/udp    # OpenTable
-opentable	2368/tcp    # OpenTable
-#			   Thomas Theobald <ttheobald at opentable.com>
-acs2000-dsp	2369/udp    # ACS2000 DSP
-acs2000-dsp	2369/tcp    # ACS2000 DSP
-#			   Jeffrey Beauchamp <jeffrey.beauchamp at acs2000.net>
-l3-hbmon	2370/udp    # L3-HBMon
-l3-hbmon	2370/tcp    # L3-HBMon
-#			   Dolores Scott <Dolores.Scott at L-3security.com>
-#### Port 2370 Unofficially used by Compaq ####
-worldwire       2371/udp    # Compaq WorldWire Port
-worldwire       2371/tcp    # Compaq WorldWire Port
-#                          Michael Spratte <michael.spratte at compaq.com>
-#               2372-2380  Unassigned
-compaq-https    2381/udp    # Compaq HTTPS
-compaq-https    2381/tcp    # Compaq HTTPS
-#                          Scott Shaffer <scott.shaffer at hp.com>
-ms-olap3	2382/udp    # Microsoft OLAP
-ms-olap3	2382/tcp    # Microsoft OLAP
-ms-olap4	2383/udp    # Microsoft OLAP
-ms-olap4	2383/tcp    # Microsoft OLAP
-#			   Mosha Pasumansky <moshap at microsoft.com>
-sd-capacity     2384/udp    # SD-CAPACITY
-sd-request      2384/tcp    # SD-REQUEST
-#                          Jason McManus <jasonm at sleepdep.net>
-sd-data         2385/udp    # SD-DATA
-sd-data         2385/tcp    # SD-DATA
-#                          Jason McManus <jasonm at sleepdep.net>
-virtualtape	2386/udp    # Virtual Tape
-virtualtape	2386/tcp    # Virtual Tape
-vsamredirector  2387/udp    # VSAM Redirector
-vsamredirector  2387/tcp    # VSAM Redirector
-#                          Ingo Franzki <ifranzki at de.ibm.com>
-mynahautostart  2388/udp    # MYNAH AutoStart
-mynahautostart  2388/tcp    # MYNAH AutoStart
-#                          Thomas J. Klehr <tklehr at telcordia.com>
-ovsessionmgr	2389/udp    # OpenView Session Mgr
-ovsessionmgr	2389/tcp    # OpenView Session Mgr
-#			   Eric Pulsipher <eric_pulsipher at hp.com>
-rsmtp		2390/udp    # RSMTP
-rsmtp		2390/tcp    # RSMTP
-#			   Geoff Collyer <geoff at research.bell-labs.com>
-3com-net-mgmt	2391/udp    # 3COM Net Management
-3com-net-mgmt	2391/tcp    # 3COM Net Management
-#			   Prathibha Nagvar
-tacticalauth	2392/udp    # Tactical Auth
-tacticalauth	2392/tcp    # Tactical Auth
-#			   David Yon <yon at tactical-sw.com>   
-ms-olap1	2393/udp    # MS OLAP 1
-ms-olap1	2393/tcp    # MS OLAP 1
-ms-olap2	2394/udp    # MS OLAP 2
-ms-olap2	2394/tcp    # MS OLAP 2
-#			   Mosha Pasumansky <moshap at microsoft.com>
-lan900_remote	2395/udp    # LAN900 Remote
-lan900_remote	2395/tcp    # LAN900 Remote
-#			   Tom Quinlan <tquinlan at digitechinc.com>
-wusage 		2396/udp    # Wusage
-wusage		2396/tcp    # Wusage
-#			   Thomas Boutell <boutell at boutell.com>
-ncl		2397/udp    # NCL
-ncl		2397/tcp    # NCL
-#			   Robert Wiebe <crw010 at email.mot.com>
-orbiter		2398/udp    # Orbiter
-orbiter		2398/tcp    # Orbiter
-#			   David Goldberg <dgoldberg at callisto.com>
-fmpro-fdal	2399/udp    # FileMaker, Inc. - Data Access Layer
-fmpro-fdal	2399/tcp    # FileMaker, Inc. - Data Access Layer
-#			   Clay Maeckal <clay_maeckel at filemaker.com>
-opequus-server	2400/udp    # OpEquus Server
-opequus-server	2400/tcp    # OpEquus Server
-#			   Gavin Hutchinson <gavinh at tesl.com>
-cvspserver      2401/udp    # cvspserver
-cvspserver      2401/tcp    # cvspserver
-#                          Jim Kingdon <kingdon at harvey.cyclic.com>
-taskmaster2000	2402/udp    # TaskMaster 2000 Server
-taskmaster2000	2402/tcp    # TaskMaster 2000 Server
-taskmaster2000	2403/udp    # TaskMaster 2000 Web
-taskmaster2000	2403/tcp    # TaskMaster 2000 Web
-#			   Ed Odjaghian <edo at datacap.com>
-iec-104         2404/udp    # IEC 60870-5-104 process control over IP
-iec-104         2404/tcp    # IEC 60870-5-104 process control over IP
-#                          Walter K. Eichelburg <walter.eichelburg at sat-automation.com>
-trc-netpoll	2405/udp    # TRC Netpoll
-trc-netpoll	2405/tcp    # TRC Netpoll
-#			   Bizhan Ghavami <ghavami at telcores.com>
-jediserver	2406/udp    # JediServer
-jediserver	2406/tcp    # JediServer
-#			   Paul McEntire <paul.mcentire at columbiasc.ncr.com>
-orion           2407/udp    # Orion
-orion           2407/tcp    # Orion
-#                          Matthew Horoschun <mhoroschun at canprint.com.au>
-optimanet	2408/udp    # OptimaNet
-optimanet	2408/tcp    # OptimaNet
-#			   John Graham-Cumming <jgc at optimal.com>
-sns-protocol	2409/udp    # SNS Protocol
-sns-protocol	2409/tcp    # SNS Protocol
-#			   Amir Blich <amir at netmanage.co.il>
-vrts-registry	2410/udp    # VRTS Registry
-vrts-registry	2410/tcp    # VRTS Registry
-#			   Pranay Varma <pran at veritas.com>
-netwave-ap-mgmt	2411/udp    # Netwave AP Management
-netwave-ap-mgmt	2411/tcp    # Netwave AP Management
-#			   Johnny Zweig <zweig at netwave-wireless.com>
-cdn		2412/udp    # CDN
-cdn		2412/tcp    # CDN
-#			   Alan Noble <noble at netmind.com>
-orion-rmi-reg	2413/udp    # orion-rmi-reg
-orion-rmi-reg	2413/tcp    # orion-rmi-reg 
-#			   J.S. Greenfield <greeny at us.ibm.com>
-beeyond		2414/udp    # Beeyond
-beeyond		2414/tcp    # Beeyond
-#			   Bob Deblier <bob at virtualunlimited.com>
-codima-rtp      2415/udp    # Codima Remote Transaction Protocol
-codima-rtp      2415/tcp    # Codima Remote Transaction Protocol
-#                          Sylvia Ross <sross at codimatech.com>
-rmtserver	2416/udp    # RMT Server
-rmtserver	2416/tcp    # RMT Server	
-#			   Yvon Marineau <yvon at simware.com>
-composit-server	2417/udp    # Composit Server
-composit-server	2417/tcp    # Composit Server
-#			   Katsuaki Naoi <naoi at pfu.co.jp>
-cas		2418/udp    # cas
-cas		2418/tcp    # cas
-#			   Akiyoshi Ochi <akiyoshi at net.paso.fujitsu.co.jp>
-attachmate-s2s	2419/udp    # Attachmate S2S
-attachmate-s2s	2419/tcp    # Attachmate S2S
-#			   Chris Rominski <ChrisRom at attachmate.com>
-dslremote-mgmt	2420/udp    # DSL Remote Management
-dslremote-mgmt	2420/tcp    # DSL Remote Management
-#			   Westell, Inc. <jronk at westell.com> 	
-g-talk		2421/udp    # G-Talk
-g-talk		2421/tcp    # G-Talk
-#			   Matt Hammond <matt_hammond at four-sight.co.uk>
-crmsbits	2422/udp    # CRMSBITS
-crmsbits	2422/tcp    # CRMSBITS
-#			   Rod Ward <RWard at vaccmel1.telstra.com.au>
-rnrp		2423/udp    # RNRP
-rnrp		2423/tcp    # RNRP
-#			   Per Sahlqvist <psahlqvi at sw.seisy.abb.se>
-kofax-svr	2424/udp    # KOFAX-SVR
-kofax-svr	2424/tcp    # KOFAX-SVR
-#			   Terry Reagan <treagan at kofax.com>
-fjitsuappmgr	2425/udp    # Fujitsu App Manager
-fjitsuappmgr	2425/tcp    # Fujitsu App Manager
-#			   Hiroyuki Kawabuchi <buchi at ael.fujitsu.co.jp>
-#               2426       Unassigned (Removed 2002-04-29)
-mgcp-gateway    2427/udp    # Media Gateway Control Protocol Gateway
-mgcp-gateway    2427/tcp    # Media Gateway Control Protocol Gateway
-#                          Christian Huitema <huitema at research.telcordia.com>
-ott             2428/udp    # One Way Trip Time
-ott             2428/tcp    # One Way Trip Time
-#                          Greg Troxel <gdt at ir.bbn.com>
-ft-role		2429/udp    # FT-ROLE
-ft-role		2429/tcp    # FT-ROLE
-#			   Doug Boone <dboone at atg.CLR.com>
-venus		2430/udp    # venus
-venus		2430/tcp    # venus
-venus-se	2431/udp    # venus-se
-venus-se	2431/tcp    # venus-se
-codasrv		2432/udp    # codasrv
-codasrv		2432/tcp    # codasrv
-codasrv-se	2433/udp    # codasrv-se
-codasrv-se	2433/tcp    # codasrv-se
-#			   Robert Watson <robert at cyrus.watson.org>
-pxc-epmap	2434/udp    # pxc-epmap
-pxc-epmap	2434/tcp    # pxc-epmap
-#			   Jun Nakamura <jnakamur at cp10.es.xerox.com>
-optilogic	2435/udp    # OptiLogic
-optilogic	2435/tcp    # OptiLogic
-#			   Clark Williams <clark at wirespeed.com>
-topx		2436/udp    # TOP/X
-topx		2436/tcp    # TOP/X
-#			   Dragos Pop <dragos at cs.ubbcluj.ro>
-unicontrol	2437/udp    # UniControl
-unicontrol	2437/tcp    # UniControl
-#			   Ing. Markus Huemer <markus.huemer at hsd.at>
-msp		2438/udp    # MSP
-msp		2438/tcp    # MSP
-#			   Evan Caves <evan at acc.com>
-sybasedbsynch	2439/udp    # SybaseDBSynch
-sybasedbsynch	2439/tcp    # SybaseDBSynch
-#			   Dave Neudoerffer <Dave.Neudoerffer at ianywhere.com>
-spearway	2440/udp    # Spearway Lockers
-spearway	2440/tcp    # Spearway Lockers
-#			   Pierre Frisch <Pierre.Frisch at spearway.com>
-pvsw-inet       2441/udp    # Pervasive I*net Data Server
-pvsw-inet       2441/tcp    # Pervasive I*net Data Server
-#                          Chuck Talk <ctalk at pervasive.com>
-netangel	2442/udp    # Netangel
-netangel	2442/tcp    # Netangel
-#			   Ladislav Baranyay <identcod at identcode.sk>
-powerclientcsf  2443/udp    # PowerClient Central Storage Facility
-powerclientcsf  2443/tcp    # PowerClient Central Storage Facility
-#			   Brian Klassen <Brian.Klassen at Unisys.com>	
-btpp2sectrans   2444/udp    # BT PP2 Sectrans
-btpp2sectrans   2444/tcp    # BT PP2 Sectrans
-#                          Ian Daniels <btexact.ports at bt.com> 
-dtn1		2445/udp    # DTN1
-dtn1		2445/tcp    # DTN1
-#			   Bob Gaddie <bobg at dtn.com> 
-bues_service	2446/udp    # bues_service
-bues_service	2446/tcp    # bues_service
-#			   Leonhard Diekmann
-#                          <diekmann at 04.mstr02.telekom400.dbp.de>
-ovwdb		2447/udp    # OpenView NNM daemon
-ovwdb		2447/tcp    # OpenView NNM daemon
-#			   Eric Pulsipher <eric_pulsipher at fc.hp.com>
-hpppssvr	2448/udp    # hpppsvr
-hpppssvr	2448/tcp    # hpppsvr
-#			   Bridgette Landers <blanders at boi.hp.com>
-ratl		2449/udp    # RATL
-ratl		2449/tcp    # RATL
-#			   Paul Greenfield <paul.greenfield at unisys.com>
-netadmin	2450/udp    # netadmin
-netadmin	2450/tcp    # netadmin
-netchat		2451/udp    # netchat
-netchat		2451/tcp    # netchat
-#			   Julian Mehnle <julian at mehnle.net>
-snifferclient	2452/udp    # SnifferClient
-snifferclient	2452/tcp    # SnifferClient
-#			   Amy Weaver <amy_weaver at nai.com>
-madge-om	2453/udp    # madge-om
-madge-om	2453/tcp    # madge-om
-#			   Andrew Draper <adraper at dev.madge.com>
-indx-dds	2454/udp    # IndX-DDS
-indx-dds	2454/tcp    # IndX-DDS
-#			   Paul Carmichael <paulcarmichael at indx.net>
-wago-io-system	2455/udp    # WAGO-IO-SYSTEM
-wago-io-system	2455/tcp    # WAGO-IO-SYSTEM
-#			   Uwe Rathert <uwe.rathert at ieee.org>
-altav-remmgt	2456/udp    # altav-remmgt
-altav-remmgt	2456/tcp    # altav-remmgt
-#			   Gary M. Allen <gallen at symantec.com>
-rapido-ip	2457/udp    # Rapido_IP
-rapido-ip	2457/tcp    # Rapido_IP
-#			   Man Shuen Cheung <man_shuen_cheung at wamnet.co.uk>
-griffin		2458/udp    # griffin
-griffin		2458/tcp    # griffin
-#			   Tom Taylor <Tom.Taylor at unisys.com>
-community	2459/udp    # Community
-community	2459/tcp    # Community
-#			   David Schwartz <davids at webmaster.com>
-ms-theater	2460/udp    # ms-theater
-ms-theater	2460/tcp    # ms-theater
-#			   Anton Kucer <a-antonk at microsoft.com>
-qadmifoper	2461/udp    # qadmifoper
-qadmifoper	2461/tcp    # qadmifoper
-qadmifevent	2462/udp    # qadmifevent	
-qadmifevent	2462/tcp    # qadmifevent
-#			   Pekka Takaranta <pekka.takaranta at tellabs.fi>
-symbios-raid	2463/udp    # Symbios Raid
-symbios-raid	2463/tcp    # Symbios Raid
-#			   Bill Delaney <bill.delaney at symbios.com>
-direcpc-si	2464/udp    # DirecPC SI
-direcpc-si	2464/tcp    # DirecPC SI
-#			   Doug Dillon <dillon at hns.com>
-lbm		2465/udp    # Load Balance Management
-lbm		2465/tcp    # Load Balance Management
-lbf		2466/udp    # Load Balance Forwarding
-lbf		2466/tcp    # Load Balance Forwarding
-#			   Kazuhiro Koide <kaz at pfu.co.jp>
-high-criteria	2467/udp    # High Criteria
-high-criteria	2467/tcp    # High Criteria
-#			   Konstantin Iavid <kiavid at highcriteria.com>
-qip-msgd	2468/udp    # qip_msgd
-qip-msgd	2468/tcp    # qip_msgd
-#			   Mike Morgan <mmorgan at lucent.com>
-mti-tcs-comm	2469/udp    # MTI-TCS-COMM
-mti-tcs-comm	2469/tcp    # MTI-TCS-COMM
-#			   Mario Bonin <boninm at microtempus.com>
-taskman-port	2470/udp    # taskman port
-taskman-port	2470/tcp    # taskman port
-#			   Boris Panteleev <bpanteleev at himel.com>
-seaodbc		2471/udp    # SeaODBC
-seaodbc		2471/tcp    # SeaODBC
-#			   Adrian Hornby <Adrian.Hornby at aran.co.uk>
-c3		2472/udp    # C3
-c3		2472/tcp    # C3
-#			   Eckhard Grieger <e.grieger at com-on.de>
-aker-cdp	2473/udp    # Aker-cdp
-aker-cdp	2473/tcp    # Aker-cdp
-#			   Rodrigo Ormonde <ormonde at aker.com.br>
-vitalanalysis	2474/udp    # Vital Analysis
-vitalanalysis	2474/tcp    # Vital Analysis
-#			   Srinivas Reddy <sreddy at vitalsigns.com>
-ace-server	2475/udp    # ACE Server
-ace-server	2475/tcp    # ACE Server
-ace-svr-prop	2476/udp    # ACE Server Propagation
-ace-svr-prop	2476/tcp    # ACE Server Propagation
-ssm-cvs		2477/udp    # SecurSight Certificate Valifation Service
-ssm-cvs		2477/tcp    # SecurSight Certificate Valifation Service
-ssm-cssps	2478/udp    # SecurSight Authentication Server (SSL)
-ssm-cssps	2478/tcp    # SecurSight Authentication Server (SSL)
-ssm-els		2479/udp    # SecurSight Event Logging Server (SSL)
-ssm-els		2479/tcp    # SecurSight Event Logging Server (SSL)
-#			   John Linn <jlinn at securitydynamics.com>
-lingwood	2480/udp    # Lingwood's Detail
-lingwood	2480/tcp    # Lingwood's Detail
-#			   Dave Richmond <drichmond at striva.com>
-giop		2481/udp    # Oracle GIOP
-giop		2481/tcp    # Oracle GIOP
-giop-ssl	2482/udp    # Oracle GIOP SSL
-giop-ssl	2482/tcp    # Oracle GIOP SSL
-ttc		2483/udp    # Oracle TTC
-ttc		2483/tcp    # Oracle TTC
-ttc-ssl		2484/udp    # Oracle TTC SSL
-ttc-ssl		2484/tcp    # Oracle TTC SSL
-#			   Chandar Venkataraman <CVENKATA at us.oracle.com>
-netobjects1	2485/udp    # Net Objects1
-netobjects1	2485/tcp    # Net Objects1
-netobjects2	2486/udp    # Net Objects2
-netobjects2	2486/tcp    # Net Objects2
-#			   Francois Granade <francois at netobjects.com>
-pns		2487/udp    # Policy Notice Service
-pns		2487/tcp    # Policy Notice Service
-#			   Akiyoshi Ochi <akiyoshi at net.paso.fujitsu.co.jp>
-moy-corp	2488/udp    # Moy Corporation
-moy-corp	2488/tcp    # Moy Corporation
-#			   Gang Gong Moy
-tsilb		2489/udp    # TSILB
-tsilb		2489/tcp    # TSILB
-#			   James Irwin <jimi at travsoft.com>
-qip-qdhcp	2490/udp    # qip_qdhcp
-qip-qdhcp	2490/tcp    # qip_qdhcp
-#			   Mike Morgan <mmorgan at lucent.com>
-conclave-cpp	2491/udp    # Conclave CPP
-conclave-cpp	2491/tcp    # Conclave CPP
-#			   Larry Lipstone <lrl at interdyn.com>
-groove		2492/udp    # GROOVE
-groove		2492/tcp    # GROOVE
-#			   Ray Ozzie <ray at rocks.net>
-talarian-mqs	2493/udp    # Talarian MQS
-talarian-mqs	2493/tcp    # Talarian MQS
-#			   Jim Stabile <jstabile at talarian.com>
-bmc-ar		2494/udp    # BMC AR
-bmc-ar		2494/tcp    # BMC AR
-#			   Shelia Childs <sheila_childs at bmc.com>
-fast-rem-serv	2495/udp    # Fast Remote Services
-fast-rem-serv	2495/tcp    # Fast Remote Services
-#			   Scott St. Clair <stclair at NTC.ADAPTEC.com>
-dirgis		2496/udp    # DIRGIS
-dirgis		2496/tcp    # DIRGIS
-#			   Deutschland Informations- und
-#                          Reservierungsgesellschaft mbH <beratung at dirg.de>
-quaddb		2497/udp    # Quad DB
-quaddb		2497/tcp    # Quad DB
-#			   Jeff Rosenthal <jrosenthal at quad-sys.com>
-odn-castraq	2498/udp    # ODN-CasTraq
-odn-castraq	2498/tcp    # ODN-CasTraq
-#			   Richard Hodges <rh at source.net>
-unicontrol	2499/udp    # UniControl
-unicontrol	2499/tcp    # UniControl
-#			   Ing. Markus Huemer
-rtsserv         2500/udp    # Resource Tracking system server
-rtsserv         2500/tcp    # Resource Tracking system server
-rtsclient       2501/udp    # Resource Tracking system client
-rtsclient       2501/tcp    # Resource Tracking system client
-#                          Aubrey Turner
-#                          <S95525ta%etsuacad.bitnet at ETSUADMN.ETSU.EDU>
-kentrox-prot	2502/udp    # Kentrox Protocol
-kentrox-prot	2502/tcp    # Kentrox Protocol
-#			   Anil Lakhwara <anil_lakhwara at kentrox.com>
-nms-dpnss	2503/udp    # NMS-DPNSS
-nms-dpnss	2503/tcp    # NMS-DPNSS
-#			   Jean-Christophe Desire
-#			   <Jean-Christophe_Desire at NMS-Europe.com>	
-wlbs		2504/udp    # WLBS 
-wlbs		2504/tcp    # WLBS 
-#			   William Bain <bbain at microsoft.com>
-#           2505       Removed (2002-06-14)
-jbroker		2506/udp    # jbroker
-jbroker		2506/tcp    # jbroker
-#			   Rohit Garg <rohit at objectScape.com>
-spock		2507/udp    # spock
-spock		2507/tcp    # spock
-#			   Jon A. Christopher <jac8792 at tamu.edu>
-jdatastore	2508/udp    # JDataStore
-jdatastore	2508/tcp    # JDataStore
-#			   Tod Landis <tlandis at inprise.com>
-fjmpss		2509/udp    # fjmpss
-fjmpss		2509/tcp    # fjmpss
-#			   Makoto Watanabe <makoto at saint.nm.fujitsu.co.jp>
-fjappmgrbulk	2510/udp    # fjappmgrbulk
-fjappmgrbulk	2510/tcp    # fjappmgrbulk
-#			   Hiroyuki Kawabuchi <buchi at ael.fujitsu.co.jp>
-metastorm	2511/udp    # Metastorm
-metastorm	2511/tcp    # Metastorm
-#			   Eric Isom <eisom at metastorm.com>
-citrixima	2512/udp    # Citrix IMA
-citrixima	2512/tcp    # Citrix IMA
-citrixadmin	2513/udp    # Citrix ADMIN
-citrixadmin	2513/tcp    # Citrix ADMIN
-#			   Myk Willis <myk.willis at citrix.com>
-facsys-ntp	2514/udp    # Facsys NTP
-facsys-ntp	2514/tcp    # Facsys NTP
-facsys-router	2515/udp    # Facsys Router
-facsys-router	2515/tcp    # Facsys Router
-#			   Jeff Hoffman <jeffh at facsys.com>
-maincontrol	2516/udp    # Main Control   
-maincontrol	2516/tcp    # Main Control   
-#			   Nathan Sadia <sadia at maincontrol.com>	
-call-sig-trans	2517/udp    # H.323 Annex E call signaling transport
-call-sig-trans	2517/tcp    # H.323 Annex E call signaling transport
-#			   Gur Kimchi <gur.kimchi at vocaltec.com>
-willy		2518/udp    # Willy
-willy		2518/tcp    # Willy
-#			   Carl-Johan Wik <cjw at hudsmoar.com>
-globmsgsvc	2519/udp    # globmsgsvc
-globmsgsvc	2519/tcp    # globmsgsvc
-#			   David Wiltz <dwiltz at hf.intel.com>	
-pvsw            2520/udp    # Pervasive Listener
-pvsw            2520/tcp    # Pervasive Listener
-#                          Chuck Talk <ctalk at pervasive.com>
-adaptecmgr	2521/udp    # Adaptec Manager
-adaptecmgr	2521/tcp    # Adaptec Manager
-#			   Mark Parenti <map at ntc.adaptec.com>
-windb		2522/udp    # WinDb
-windb		2522/tcp    # WinDb
-#			   Larry Traylor <larry at arium.com>
-qke-llc-v3      2523/udp    # Qke LLC V.3
-qke-llc-v3      2523/tcp    # Qke LLC V.3
-#                          Joerg Niehoff <joerg.niehoff at alcatel-ke.de>
-optiwave-lm	2524/udp    # Optiwave License Management
-optiwave-lm	2524/tcp    # Optiwave License Management
-#			   Slawomir Krzesinski <slavek at optiwave.com>
-ms-v-worlds	2525/udp    # MS V-Worlds 
-ms-v-worlds	2525/tcp    # MS V-Worlds 
-#			   Pete Wong <petewong at microsoft.com>
-ema-sent-lm	2526/udp    # EMA License Manager
-ema-sent-lm	2526/tcp    # EMA License Manager
-#			   Thaddeus Perala <tr at emaden.com>
-iqserver	2527/udp    # IQ Server
-iqserver	2527/tcp    # IQ Server
-#			   Nick Straguzzi <Nick_Straguzzi at akbs.com>
-ncr_ccl		2528/udp    # NCR CCL
-ncr_ccl		2528/tcp    # NCR CCL
-#			   Amitava Dutta <Amitava.Dutta at WoodbridgeNJ.ncr.com>
-utsftp		2529/udp    # UTS FTP
-utsftp		2529/tcp    # UTS FTP
-#			   David Moore <dmoore at uttc-uts.com>
-vrcommerce	2530/udp    # VR Commerce
-vrcommerce	2530/tcp    # VR Commerce
-#			   Yosi Mass <yosimass at haifa.vnet.ibm.com>
-ito-e-gui	2531/udp    # ITO-E GUI
-ito-e-gui	2531/tcp    # ITO-E GUI
-#			   Michael Haeuptle <Michael_Haeuptle at hp.com>
-ovtopmd		2532/udp    # OVTOPMD
-ovtopmd		2532/tcp    # OVTOPMD
-#			   Eric Pulsipher <eric_pulsipher at hp.com>
-snifferserver	2533/udp    # SnifferServer
-snifferserver	2533/tcp    # SnifferServer
-#			   Amy Weaver <Amy_Weaver at NAI.com>
-combox-web-acc	2534/udp    # Combox Web Access
-combox-web-acc	2534/tcp    # Combox Web Access
-#		   	   Yochai Cohen <yochai at combox.co.il>
-madcap		2535/udp    # MADCAP
-madcap		2535/tcp    # MADCAP
-#			   Stephen Hanna <steve.hanna at sun.com>
-btpp2audctr1    2536/udp    # btpp2audctr1
-btpp2audctr1    2536/tcp    # btpp2audctr1
-#                          Ian Daniels <btexact.ports at bt.com>
-upgrade		2537/udp    # Upgrade Protocol
-upgrade		2537/tcp    # Upgrade Protocol
-#			   Breck Auten <bauten at dst-inc.com>
-vnwk-prapi	2538/udp    # vnwk-prapi
-vnwk-prapi	2538/tcp    # vnwk-prapi
-#			   John Hasselkus <Jhasselkus at VisualNetworks.com>
-vsiadmin	2539/udp    # VSI Admin
-vsiadmin	2539/tcp    # VSI Admin
-#			   Rob Juergens <robj at vsi.com>
-lonworks	2540/udp    # LonWorks
-lonworks	2540/tcp    # LonWorks
-lonworks2	2541/udp    # LonWorks2 
-lonworks2	2541/tcp    # LonWorks2
-#			   Gary Bartlett <garyb at echelon.com>
-davinci         2542/udp    # daVinci Presenter
-davinci         2542/tcp    # daVinci Presenter
-#                          b-novative GmbH <info at b-novative.com>
-reftek		2543/udp    # REFTEK
-reftek		2543/tcp    # REFTEK
-#			   Robert Banfill <r.banfill at reftek.com>
-novell-zen	2544/udp    # Novell ZEN
-novell-zen	2544/tcp    # Novell ZEN
-#			   Randy Cook <RACOOK at novell.com>
-sis-emt		2545/udp    # sis-emt
-sis-emt		2545/tcp    # sis-emt
-#			   Bill Crawford <Bill.Crawford at securicor.co.uk>
-vytalvaultbrtp	2546/udp    # vytalvaultbrtp
-vytalvaultbrtp  2546/tcp    # vytalvaultbrtp
-vytalvaultvsmp	2547/udp    # vytalvaultvsmp
-vytalvaultvsmp	2547/tcp    # vytalvaultvsmp
-vytalvaultpipe	2548/udp    # vytalvaultpipe
-vytalvaultpipe	2548/tcp    # vytalvaultpipe
-#			   Tim Boldt <timb at vytalnet.com>
-ipass		2549/udp    # IPASS
-ipass		2549/tcp    # IPASS
-#			   Michael Fischer <otterley at Pass.COM>
-ads		2550/udp    # ADS
-ads		2550/tcp    # ADS
-#			   Michael O'Connor <moconnor at adobe.com>
-isg-uda-server	2551/udp    # ISG UDA Server
-isg-uda-server	2551/tcp    # ISG UDA Server
-#			   Dror Harari <Dror.Harari at isgsoft.com>
-call-logging	2552/udp    # Call Logging
-call-logging	2552/tcp    # Call Logging
-#			   Dean Webb <dean.webb at ascend.com>
-efidiningport	2553/udp    # efidiningport
-efidiningport	2553/tcp    # efidiningport
-#			   Lynn Carter <carterl at execpc.com>
-vcnet-link-v10	2554/udp    # VCnet-Link v10
-vcnet-link-v10	2554/tcp    # VCnet-Link v10
-#			   Csaba Mate <mc36 at freemail.c3.hu>
-compaq-wcp	2555/udp    # Compaq WCP
-compaq-wcp	2555/tcp    # Compaq WCP
-#			   Ferruccio Barletta <ferruccio.barletta at compaq.com>
-nicetec-nmsvc	2556/udp    # nicetec-nmsvc
-nicetec-nmsvc	2556/tcp    # nicetec-nmsvc
-nicetec-mgmt	2557/udp    # nicetec-mgmt
-nicetec-mgmt	2557/tcp    # nicetec-mgmt
-#			   Joerg Paulus <tech at nicetec.de>	
-pclemultimedia	2558/udp    # PCLE Multi Media
-pclemultimedia	2558/tcp    # PCLE Multi Media
-#			   Bernd Scharping <bscharping at pinnaclesys.com>
-lstp		2559/udp    # LSTP
-lstp		2559/tcp    # LSTP
-#			   Waiki Wright <waiki at us.ibm.com>
-labrat		2560/udp    # labrat
-labrat		2560/tcp    # labrat
-#			   John Harvey <johnbob at austin.ibm.com>
-mosaixcc	2561/udp    # MosaixCC
-mosaixcc	2561/tcp    # MosaixCC
-#			   Steven Frare <stevefr at mosaix.com>
-delibo		2562/udp    # Delibo
-delibo		2562/tcp    # Delibo
-#			   NovaWiz LTD <Moshe at Novawiz.com>
-cti-redwood	2563/udp    # CTI Redwood
-cti-redwood	2563/tcp    # CTI Redwood
-#			   Songwon Chi <swchi at daou.co.kr>
-hp-3000-telnet  2564/tcp    # HP 3000 NS/VT block mode telnet
-#
-coord-svr	2565/udp    # Coordinator Server
-coord-svr	2565/tcp    # Coordinator Server
-#			   Richard Steiger <steiger at ensemblesoft.com>
-pcs-pcw		2566/udp    # pcs-pcw
-pcs-pcw		2566/tcp    # pcs-pcw
-#			   W. Jordan Fitzhugh <jfitz at pcare.com>
-clp		2567/udp    # Cisco Line Protocol
-clp		2567/tcp    # Cisco Line Protocol
-#			   Susan Hinrichs <shinrich at cisco.com>
-spamtrap	2568/udp    # SPAM TRAP
-spamtrap	2568/tcp    # SPAM TRAP
-#			   Chuck Bennett <chuck at benatong.com>
-sonuscallsig	2569/udp    # Sonus Call Signal
-sonuscallsig	2569/tcp    # Sonus Call Signal
-#			   Mark Garti <mgarti at sonusnet.com>
-hs-port		2570/udp    # HS Port
-hs-port		2570/tcp    # HS Port
-#			   Uri Doron <uri at il.netect.com>
-cecsvc		2571/udp    # CECSVC
-cecsvc		2571/tcp    # CECSVC
-#			   Roger Pao <rpao at corder-eng.com>
-ibp		2572/udp    # IBP
-ibp		2572/tcp    # IBP
-#			   Jonathan Downes <jonno at activ.net.au>
-trustestablish  2573/udp    # Trust Establish
-trustestablish  2573/tcp    # Trust Establish
-#                          Yosi Mass <yosimass at haifa.vnet.ibm.com>
-blockade-bpsp   2574/udp    # Blockade BPSP
-blockade-bpsp   2574/tcp    # Blockade BPSP
-#                          VP - Research & Development <development at blockade.com>
-hl7             2575/udp    # HL7
-hl7             2575/tcp    # HL7
-#                          Tim Jacobs
-tclprodebugger  2576/udp    # TCL Pro Debugger
-tclprodebugger  2576/tcp    # TCL Pro Debugger
-scipticslsrvr   2577/udp    # Scriptics Lsrvr
-scipticslsrvr   2577/tcp    # Scriptics Lsrvr
-#                          Brent Welch <welch at scriptics.com>
-rvs-isdn-dcp	2578/udp    # RVS ISDN DCP
-rvs-isdn-dcp	2578/tcp    # RVS ISDN DCP
-#			   Michael Zirpel <mbz at rvscom.com>	
-mpfoncl		2579/udp    # mpfoncl
-mpfoncl		2579/tcp    # mpfoncl
-#			   Itaru Kimura <kimura at kel.fujitsu.co.jp>
-tributary	2580/udp    # Tributary
-tributary	2580/tcp    # Tributary
-#			   Louis Lu <LouisL at bristol.com>
-argis-te	2581/udp    # ARGIS TE
-argis-te	2581/tcp    # ARGIS TE
-argis-ds	2582/udp    # ARGIS DS
-argis-ds	2582/tcp    # ARGIS DS
-#			   John Legh-Page <john.legh-page at argis.com>
-mon		2583/udp    # MON
-mon		2583/tcp    # MON
-#			   Jim Trocki <trockij at transmeta.com>
-cyaserv		2584/udp    # cyaserv
-cyaserv		2584/tcp    # cyaserv
-#			   Morgan Jones <mwj at cyasolutions.com>
-netx-server	2585/udp    # NETX Server
-netx-server	2585/tcp    # NETX Server
-netx-agent	2586/udp    # NETX Agent
-netx-agent	2586/tcp    # NETX Agent
-#			   Brett Dolecheck <Dolecheck at IPMetrics.com>
-masc		2587/udp    # MASC
-masc		2587/tcp    # MASC
-#			   Pavlin Ivanov Radoslavov 
-#			   <pavlin at catarina.usc.edu> 
-privilege	2588/udp    # Privilege
-privilege	2588/tcp    # Privilege
-#			   Gil Hecht <GilH at aks.com>
-quartus-tcl	2589/udp    # quartus tcl
-quartus-tcl	2589/tcp    # quartus tcl
-#			   Subroto Datta <subrotod at altera.com>
-idotdist	2590/udp    # idotdist
-idotdist	2590/tcp    # idotdist
-#			   Jason Hunter <jthunter at invino.com>
-maytagshuffle	2591/udp    # Maytag Shuffle
-maytagshuffle	2591/tcp    # Maytag Shuffle
-#			   Maytag Corporation <hbuck at maytag.com>
-netrek          2592/udp    # netrek
-netrek          2592/tcp    # netrek
-#                          Al Guetzlaff <aeg at teamquest.com>
-mns-mail	2593/udp    # MNS Mail Notice Service
-mns-mail	2593/tcp    # MNS Mail Notice Service
-#			   Rumiko Kikuta <kiku at nd.net.fujitsu.co.jp>
-dts		2594/udp    # Data Base Server
-dts		2594/tcp    # Data Base Server
-#			   Andreas Roene <support at home-online.de>
-worldfusion1	2595/udp    # World Fusion 1
-worldfusion1	2595/tcp    # World Fusion 1
-worldfusion2	2596/udp    # World Fusion 2
-worldfusion2	2596/tcp    # World Fusion 2
-#			   World Fusion <net at worldfusion.com>
-homesteadglory	2597/udp    # Homestead Glory
-homesteadglory	2597/tcp    # Homestead Glory
-#			   John Tokash <jtokash at homestead.com>
-citriximaclient	2598/udp    # Citrix MA Client
-citriximaclient	2598/tcp    # Citrix MA Client
-#			   Myk Willis <myk.willis at citrix.com>
-snapd           2599/udp    # Snap Discovery
-snapd           2599/tcp    # Snap Discovery
-#                          Kevin Osborn <kosborn at snapappliance.com>
-hpstgmgr	2600/udp    # HPSTGMGR
-hpstgmgr	2600/tcp    # HPSTGMGR
-#			   Kevin Collins <kevinc at .cnd.hp.com>
-discp-client	2601/udp    # discp client
-discp-client	2601/tcp    # discp client
-discp-server	2602/udp    # discp server
-discp-server	2602/tcp    # discp server
-#			   Peter White <peter_white at 3com.com>
-servicemeter	2603/udp    # Service Meter
-servicemeter	2603/tcp    # Service Meter
-#			   Duncan Hare <Duncan.Hare at synoia.com>
-nsc-ccs		2604/udp    # NSC CCS	
-nsc-ccs		2604/tcp    # NSC CCS	
-nsc-posa	2605/udp    # NSC POSA
-nsc-posa	2605/tcp    # NSC POSA
-#			   Tom Findley <tom.findley at networksciences.net>
-netmon		2606/udp    # Dell Netmon
-netmon		2606/tcp    # Dell Netmon
-connection	2607/udp    # Dell Connection
-connection	2607/tcp    # Dell Connection
-#			   Sudhir Shetty <Sudhir_Shetty at Dell.com>
-wag-service	2608/udp    # Wag Service
-wag-service	2608/tcp    # Wag Service
-#			   Gilles Bourquard <gbo at wag.ch>
-system-monitor	2609/udp    # System Monitor 
-system-monitor	2609/tcp    # System Monitor 
-#			   Greg Robson-Garth <gregr at alphalink.com.au>
-versa-tek	2610/udp    # VersaTek
-versa-tek	2610/tcp    # VersaTek
-#			   James Kou <Jamesk at versatek.com>
-lionhead	2611/udp    # LIONHEAD
-lionhead	2611/tcp    # LIONHEAD
-#			   Tim Rance <trance at lionhead.co.uk>
-qpasa-agent	2612/udp    # Qpasa Agent
-qpasa-agent	2612/tcp    # Qpasa Agent
-#			   Craig Ching <cching at mqsoftware.com> 
-smntubootstrap	2613/udp    # SMNTUBootstrap
-smntubootstrap	2613/tcp    # SMNTUBootstrap
-#			   Matt Cecile <mattc at metrics.com>
-neveroffline	2614/udp    # Never Offline
-neveroffline	2614/tcp    # Never Offline
-#			   Dustin Brand <amo at amo.net>
-firepower       2615/udp    # firepower
-firepower       2615/tcp    # firepower
-#                          Jason Volk <jason at teknidude.com>
-appswitch-emp	2616/udp    # appswitch-emp
-appswitch-emp	2616/tcp    # appswitch-emp
-#			   Ted Ross <ross at TopLayer.com>
-cmadmin		2617/udp    # Clinical Context Managers
-cmadmin		2617/tcp    # Clinical Context Managers
-#			   Mark Morwood <markm at sentillion.com>  
-priority-e-com	2618/udp    # Priority E-Com
-priority-e-com	2618/tcp    # Priority E-Com
-#			   Marcelo Einhorn <marcelo at eshbel.com>
-bruce		2619/udp    # bruce
-bruce		2619/tcp    # bruce
-#			   Alec Muffett <alecm at sun.com>
-lpsrecommender	2620/udp    # LPSRecommender
-lpsrecommender	2620/tcp    # LPSRecommender
-#			   Pritham Shetty <pritham at andromedia.com>
-miles-apart	2621/udp    # Miles Apart Jukebox Server
-miles-apart	2621/tcp    # Miles Apart Jukebox Server
-#			   Michael Rathmann <rathmann_ia at milesinfo.com>
-metricadbc	2622/udp    # MetricaDBC
-metricadbc	2622/tcp    # MetricaDBC
-#			   Russ Olivant <russ.olivant at metrica.co.uk>
-lmdp		2623/udp    # LMDP
-lmdp		2623/tcp    # LMDP
-#			   Ken Bailey <kbailey at rockettalk.com>
-aria		2624/udp    # Aria
-aria		2624/tcp    # Aria
-#			   Logan Bruns <logan at andromedia.com>
-blwnkl-port	2625/udp    # Blwnkl Port
-blwnkl-port	2625/tcp    # Blwnkl Port
-#			   Weng Chin (Winson) Yung <Winson_Yung at 3com.com>
-gbjd816		2626/udp    # gbjd816
-gbjd816		2626/tcp    # gbjd816
-#			   George Balesta <George.Baletsa at tfn.com>
-moshebeeri	2627/udp    # Moshe Beeri
-moshebeeri	2627/tcp    # Moshe Beeri
-#			   Moshe Beeri <moshe at whale-com.com>
-dict		2628/udp    # DICT
-dict		2628/tcp    # DICT
-#			   Rik Faith <faith at cs.unc.edu>
-sitaraserver	2629/udp    # Sitara Server
-sitaraserver	2629/tcp    # Sitara Server
-sitaramgmt	2630/udp    # Sitara Management
-sitaramgmt	2630/tcp    # Sitara Management
-sitaradir	2631/udp    # Sitara Dir
-sitaradir	2631/tcp    # Sitara Dir
-#		  	   Manickam R.Sridhar <msridhar at sitaranetworks.com>
-irdg-post	2632/udp    # IRdg Post
-irdg-post	2632/tcp    # IRdg Post
-#			   IRdg, Inc. <jtaylor at irdg.com>
-interintelli	2633/udp    # InterIntelli
-interintelli	2633/tcp    # InterIntelli
-#			   Mike Gagle <MikeG at inter-intelli.com>
-pk-electronics  2634/udp    # PK Electronics
-pk-electronics  2634/tcp    # PK Electronics
-#			   Seb Ibis <seb_ibis at pkworld.com>
-backburner	2635/udp    # Back Burner
-backburner	2635/tcp    # Back Burner
-#			   Kevin Teiskoetter <kevint at metacreations.com>
-solve		2636/udp    # Solve
-solve		2636/tcp    # Solve
-#			   Peter Morrison <peter_morrison at sydney.sterling.com>
-imdocsvc	2637/udp    # Import Document Service
-imdocsvc	2637/tcp    # Import Document Service
-#			   Zia Bhatti <zia at netright.com>
-sybaseanywhere	2638/udp    # Sybase Anywhere
-sybaseanywhere  2638/tcp    # Sybase Anywhere
-#			   Dave Neudoerffer <Dave.Neudoerffer at ianywhere.com>
-aminet		2639/udp    # AMInet
-aminet		2639/tcp    # AMInet
-#			   Alcorn McBride Inc. <jeff at alcorn.com>
-sai_sentlm	2640/udp    # Sabbagh Associates Licence Manager
-sai_sentlm	2640/tcp    # Sabbagh Associates Licence Manager
-#			   Elias Sabbagh <ehs at sabbagh.com>
-hdl-srv		2641/udp    # HDL Server
-hdl-srv		2641/tcp    # HDL Server
-#			   David Ely <dely at cnri.reston.va.us>
-tragic		2642/udp    # Tragic
-tragic		2642/tcp    # Tragic
-#			   Stu Mark <fordii at j51.com>
-gte-samp	2643/udp    # GTE-SAMP
-gte-samp	2643/tcp    # GTE-SAMP
-#			   Asher Altman <Asher.Altman at GSC.GTE.Com>
-travsoft-ipx-t	2644/udp    # Travsoft IPX Tunnel
-travsoft-ipx-t	2644/tcp    # Travsoft IPX Tunnel
-#			   Jack Wilson <JackW at travsoft.com>
-novell-ipx-cmd	2645/udp    # Novell IPX CMD
-novell-ipx-cmd	2645/tcp    # Novell IPX CMD
-#			   Juan Carlos Luciani <jluciani at novell.com>
-and-lm		2646/udp    # AND License Manager
-and-lm		2646/tcp    # AND License Manager
-#			   Dick van der Sijs <dick at and.nl>
-syncserver	2647/udp    # SyncServer
-syncserver	2647/tcp    # SyncServer
-#			   Dave Finnegan <dave at syncinc.com>
-upsnotifyprot	2648/udp    # Upsnotifyprot
-upsnotifyprot	2648/tcp    # Upsnotifyprot
-#			   Mario Leboute <leboute at pro.via-rs.com.br>
-vpsipport	2649/udp    # VPSIPPORT
-vpsipport	2649/tcp    # VPSIPPORT
-#			   Joon Radley <jradley at csir.co.za>
-eristwoguns     2650/udp    # eristwoguns
-eristwoguns     2650/tcp    # eristwoguns
-#                          NetPro Computing Inc. <ports at netpro.com>
-ebinsite	2651/udp    # EBInSite
-ebinsite	2651/tcp    # EBInSite
-#			   Lefteris Kalamaras <lefteris at ebi.com>
-interpathpanel	2652/udp    # InterPathPanel
-interpathpanel	2652/tcp    # InterPathPanel
-#			   Stephen Misel <steve.misel at interpath.net>
-sonus		2653/udp    # Sonus
-sonus		2653/tcp    # Sonus
-#			   Mark Garti <mgarti at sonusnet.com>
-corel_vncadmin  2654/udp    # Corel VNC Admin
-corel_vncadmin	2654/tcp    # Corel VNC Admin
-#			   Oleg Noskov <olegn at corelcomputer.com>
-unglue		2655/udp    # UNIX Nt Glue
-unglue		2655/tcp    # UNIX Nt Glue
-#			   Peter Santoro <peter at pscomp.com>
-kana		2656/udp    # Kana
-kana		2656/tcp    # Kana
-#			   Colin Goldstein <Colin at kana.com>
-sns-dispatcher	2657/udp    # SNS Dispatcher
-sns-dispatcher	2657/tcp    # SNS Dispatcher
-sns-admin	2658/udp    # SNS Admin
-sns-admin	2658/tcp    # SNS Admin
-sns-query	2659/udp    # SNS Query
-sns-query	2659/tcp    # SNS Query
-#			   Mary Holstege <holstege at firstfloor.com>
-gcmonitor	2660/udp    # GC Monitor
-gcmonitor	2660/tcp    # GC Monitor
-#			   Gustavo Rodriguez-Rivera <grr at geodesic.com>
-olhost		2661/udp    # OLHOST
-olhost		2661/tcp    # OLHOST
-#			   Robert Ripberger <rip at lan-aces.com>
-bintec-capi	2662/udp    # BinTec-CAPI
-bintec-capi	2662/tcp    # BinTec-CAPI
-bintec-tapi	2663/udp    # BinTec-TAPI
-bintec-tapi	2663/tcp    # BinTec-TAPI
-#
-patrol-mq-gm	2664/udp    # Patrol for MQ GM
-patrol-mq-gm	2664/tcp    # Patrol for MQ GM
-patrol-mq-nm	2665/udp    # Patrol for MQ NM
-patrol-mq-nm	2665/tcp    # Patrol for MQ NM
-#			   Richard Nikula <richard_nikula at bmc.com>
-extensis	2666/udp    # extensis
-extensis	2666/tcp    # extensis
-#			   Milton Sagen <msagen at extensis.com>	
-alarm-clock-s	2667/udp    # Alarm Clock Server
-alarm-clock-s	2667/tcp    # Alarm Clock Server
-alarm-clock-c	2668/udp    # Alarm Clock Client
-alarm-clock-c	2668/tcp    # Alarm Clock Client
-toad		2669/udp    # TOAD
-toad		2669/tcp    # TOAD
-#			   Michael Marking <marking at tatanka.com>
-tve-announce	2670/udp    # TVE Announce
-tve-announce	2670/tcp    # TVE Announce
-#			   Dean Blackketter <dean at corp.webtv.net>
-newlixreg	2671/udp    # newlixreg
-newlixreg	2671/tcp    # newlixreg
-#			   Jean-Serge Gagnon <jsg at newlix.com>
-nhserver	2672/udp    # nhserver
-nhserver	2672/tcp    # nhserver
-#			   Adrian Hornby <Adrian.Hornby at aran.co.uk>
-firstcall42	2673/udp    # First Call 42 
-firstcall42	2673/tcp    # First Call 42 
-#			   Luke Bowen <leb at tfn.com>
-ewnn		2674/udp    # ewnn
-ewnn		2674/tcp    # ewnn
-#			   Yasunari Yamashita <yamasita at omronsoft.co.jp>
-ttc-etap	2675/udp    # TTC ETAP
-ttc-etap	2675/tcp    # TTC ETAP
-#			   Daniel Becker <becker2d at ttc.com>
-simslink	2676/udp    # SIMSLink
-simslink	2676/tcp    # SIMSLink
-#			   Steve Ryckman <sryckman at simsware.com>
-gadgetgate1way	2677/udp    # Gadget Gate 1 Way
-gadgetgate1way	2677/tcp    # Gadget Gate 1 Way
-gadgetgate2way	2678/udp    # Gadget Gate 2 Way
-gadgetgate2way	2678/tcp    # Gadget Gate 2 Way
-#			   Matt Rollins <matt at internetgadgets.com>
-syncserverssl	2679/udp    # Sync Server SSL
-syncserverssl	2679/tcp    # Sync Server SSL
-#			   Dave Finnegan <dave at syncinc.com>
-pxc-sapxom	2680/udp    # pxc-sapxom
-pxc-sapxom	2680/tcp    # pxc-sapxom
-#			   Hideki Kiriyama <kiriyama at cp10.es.xerox.com>
-mpnjsomb	2681/udp    # mpnjsomb
-mpnjsomb	2681/tcp    # mpnjsomb
-#			   Takenori Miyahara <miyahara at pfu.co.jp>
-#               2682   Removed (2002-04-30)
-ncdloadbalance	2683/udp    # NCDLoadBalance 
-ncdloadbalance	2683/tcp    # NCDLoadBalance 
-#			   Tim Stevenson <tes at ncd.com>
-mpnjsosv	2684/udp    # mpnjsosv
-mpnjsosv	2684/tcp    # mpnjsosv
-mpnjsocl	2685/udp    # mpnjsocl
-mpnjsocl	2685/tcp    # mpnjsocl
-mpnjsomg	2686/udp    # mpnjsomg
-mpnjsomg	2686/tcp    # mpnjsomg
-#			   Takenori Miyahara <miyahara at pfu.co.jp>
-pq-lic-mgmt	2687/udp    # pq-lic-mgmt
-pq-lic-mgmt	2687/tcp    # pq-lic-mgmt
-#			   Bob Sledge <bob at pqsystems.com>
-md-cg-http	2688/udp    # md-cf-http
-md-cg-http	2688/tcp    # md-cf-http
-#			   Lyndon Nerenberg <lyndon at execmail.ca>
-fastlynx	2689/udp    # FastLynx
-fastlynx	2689/tcp    # FastLynx
-#			   Dave Sewell <dave at sewelld.com>
-hp-nnm-data	2690/udp    # HP NNM Embedded Database
-hp-nnm-data	2690/tcp    # HP NNM Embedded Database
-#			   Chris Das <cdas at cnd.hp.com>
-itinternet	2691/udp    # ITInternet ISM Server
-itinternet	2691/tcp    # ITInternet ISM Server
-#			   Ron Ehli <ron at itinternet.net>
-admins-lms	2692/udp    # Admins LMS
-admins-lms	2692/tcp    # Admins LMS
-#			   Dagfinn Saether <Dagfinn at admins.com>
-belarc-http	2693/udp    # belarc-http
-belarc-http	2693/tcp    # belarc-http
-#			   Gary Newman <gnewman at belarc.com>
-pwrsevent	2694/udp    # pwrsevent	
-pwrsevent	2694/tcp    # pwrsevent	
-#			   Yoshinobu Nakamura
-#			   <nakamura at np.lps.cs.fujitsu.co.jp>
-vspread		2695/udp    # VSPREAD
-vspread		2695/tcp    # VSPREAD
-#			   Sumitake kobayashi
-#			   <kobayashi at np.lps.cs.fujitsu.co.jp>
-unifyadmin      2696/udp    # Unify Admin
-unifyadmin      2696/tcp    # Unify Admin
-#                          Duane Gibson <ianaportmaster at unify.com>
-oce-snmp-trap   2697/udp    # Oce SNMP Trap Port 
-oce-snmp-trap   2697/tcp    # Oce SNMP Trap Port 
-#                          Peter Teeuwen <ptee at oce.nl>
-mck-ivpip	2698/udp    # MCK-IVPIP
-mck-ivpip	2698/tcp    # MCK-IVPIP
-#			   Robert Vincent <bert at mck.com>
-csoft-plusclnt	2699/udp    # Csoft Plus Client
-csoft-plusclnt	2699/tcp    # Csoft Plus Client
-#			   Nedelcho Stanev <nstanev at csoft.bg>
-tqdata          2700/udp    # tqdata
-tqdata          2700/tcp    # tqdata
-#                          Al Guetzlaff <aeg at teamquest.com>
-sms-rcinfo	2701/udp    # SMS RCINFO
-sms-rcinfo	2701/tcp    # SMS RCINFO
-sms-xfer	2702/udp    # SMS XFER
-sms-xfer	2702/tcp    # SMS XFER
-sms-chat	2703/udp    # SMS CHAT
-sms-chat	2703/tcp    # SMS CHAT
-sms-remctrl	2704/udp    # SMS REMCTRL
-sms-remctrl	2704/tcp    # SMS REMCTRL
-#			   Tom Friend <tomfr at microsoft.com>
-sds-admin	2705/udp    # SDS Admin
-sds-admin	2705/tcp    # SDS Admin
-#			   Don Traub <don.traub at sun.com>
-ncdmirroring	2706/udp    # NCD Mirroring
-ncdmirroring	2706/tcp    # NCD Mirroring
-#			   Tim Stevenson <tes at ncd.com>
-emcsymapiport	2707/udp    # EMCSYMAPIPORT
-emcsymapiport	2707/tcp    # EMCSYMAPIPORT
-#			   Bruce Ferjulian <ferjulian_bruce at emc.com>
-banyan-net	2708/udp    # Banyan-Net
-banyan-net	2708/tcp    # Banyan-Net
-#			   R. Thirumurthy <rtm at banyannetworks.com>
-supermon	2709/udp    # Supermon
-supermon	2709/tcp    # Supermon
-#			   Ron Minnich <rminnich at acl.lanl.gov>
-sso-service	2710/udp    # SSO Service
-sso-service	2710/tcp    # SSO Service
-sso-control	2711/udp    # SSO Control
-sso-control	2711/tcp    # SSO Control
-#			   Martin Proulx <mproulx at okiok.com>
-aocp		2712/udp    # Axapta Object Communication Protocol
-aocp		2712/tcp    # Axapta Object Communication Protocol
-#			   Jakob Steen Hansen <jsh at dk.damgaard.com>
-raven1		2713/udp    # Raven1
-raven1		2713/tcp    # Raven1
-raven2		2714/udp    # Raven2
-raven2		2714/tcp    # Raven2
-#			   Daniel Sorlov <Daniel at sorlov.com>
-hpstgmgr2	2715/udp    # HPSTGMGR2
-hpstgmgr2	2715/tcp    # HPSTGMGR2
-#			   Kevin Collins <kevinc at cnd.hp.com>
-inova-ip-disco	2716/udp    # Inova IP Disco
-inova-ip-disco	2716/tcp    # Inova IP Disco
-#			   Chris Koeritz <ckoeritz at inovacorp.com>
-pn-requester	2717/udp    # PN REQUESTER
-pn-requester	2717/tcp    # PN REQUESTER
-pn-requester2	2718/udp    # PN REQUESTER 2
-pn-requester2	2718/tcp    # PN REQUESTER 2
-#			   Edmund Chang <Edmund_Chang at bmc.com>
-scan-change	2719/udp    # Scan & Change
-scan-change	2719/tcp    # Scan & Change
-#			   Alexander Raji <araji at lucent.com>
-wkars		2720/udp    # wkars
-wkars		2720/tcp    # wkars
-#			   Barry Shelton <bshelton at wirelessknowledge.com>
-smart-diagnose	2721/udp    # Smart Diagnose
-smart-diagnose	2721/tcp    # Smart Diagnose
-#			   Geoffry Meek <geoff at meek.com>
-proactivesrvr	2722/udp    # Proactive Server
-proactivesrvr	2722/tcp    # Proactive Server
-#			   Dalit Naor <dalit at il.ibm.com>
-watchdognt	2723/udp    # WatchDog NT
-watchdognt	2723/tcp    # WatchDog NT
-#			   Glen Sansoucie <glens at llmwin.com>
-qotps		2724/udp    # qotps
-qotps		2724/tcp    # qotps
-#			   Piotr Parlewicz <pparlewicz at queryobject.com>
-msolap-ptp2     2725/udp    # MSOLAP PTP2
-msolap-ptp2     2725/tcp    # MSOLAP PTP2
-#                          Cristian Petculescu <cristp at microsoft.com>
-tams            2726/udp    # TAMS
-tams            2726/tcp    # TAMS
-#                          David Leinbach <dleinbach at jti.bc.ca>
-mgcp-callagent  2727/udp    # Media Gateway Control Protocol Call Agent
-mgcp-callagent  2727/tcp    # Media Gateway Control Protocol Call Agent
-#                          Christian Huitema <huitema at research.telcordia.com>
-sqdr		2728/udp    # SQDR
-sqdr		2728/tcp    # SQDR
-#			   Matthew Orzen <standards at starquest.com>
-tcim-control	2729/udp    # TCIM Control
-tcim-control	2729/tcp    # TCIM Control
-#			   Dean Skelton <mdskel at ftw.rsc.raytheon.com>
-nec-raidplus	2730/udp    # NEC RaidPlus
-nec-raidplus	2730/tcp    # NEC RaidPlus
-#			   Yusuke Asai <yasai at nw1.file.fc.nec.co.jp>
-fyre-messanger	2731/udp    # Fyre Messagner
-fyre-messanger	2731/tcp    # Fyre Messanger
-#			   Robert Waters <bobtek at hotmail.com>
-g5m		2732/udp    # G5M
-g5m		2732/tcp    # G5M
-#			   Graham Klyne <GK at ACM.ORG>
-signet-ctf	2733/udp    # Signet CTF
-signet-ctf	2733/tcp    # Signet CTF
-#			   Greg Broiles <greg at sac.net>
-ccs-software	2734/udp    # CCS Software 
-ccs-software	2734/tcp    # CCS Software 
-#			   Bertus Jacobs <bertus at ccs-software.co.za>
-netiq-mc        2735/udp    # NetIQ Monitor Console
-netiq-mc        2735/tcp    # NetIQ Monitor Console
-#			   Scott Southard <scott.southard at netiq.com>
-radwiz-nms-srv	2736/udp    # RADWIZ NMS SRV
-radwiz-nms-srv	2736/tcp    # RADWIZ NMS SRV
-#			   Israel Shainert <israels at 209.88.177.2>
-srp-feedback	2737/udp    # SRP Feedback
-srp-feedback	2737/tcp    # SRP Feedback
-#			   Werner Almesberger <Werner.Almesberger at epfl.ch>
-ndl-tcp-ois-gw	2738/udp    # NDL TCP-OSI Gateway
-ndl-tcp-ois-gw	2738/tcp    # NDL TCP-OSI Gateway
-#			   Martin Norman <martin at ndl.co.uk> 
-tn-timing	2739/udp    # TN Timing
-tn-timing	2739/tcp    # TN Timing
-#			   Paul Roberts <PaulRoberts at engineer.com>
-alarm		2740/udp    # Alarm
-alarm		2740/tcp    # Alarm
-#			   Uriy Makasjuk <racer at bfpg.ru>
-tsb		2741/udp    # TSB
-tsb		2741/tcp    # TSB
-tsb2		2742/udp    # TSB2
-tsb2		2742/tcp    # TSB2
-#			   Ashish Chatterjee
-#			   <achatterjee at freeway.proxy.lucent.com>
-murx		2743/udp    # murx
-murx		2743/tcp    # murx
-#			   Thomas Kuiper <engerim at dachbu.de>
-honyaku		2744/udp    # honyaku
-honyaku		2744/tcp    # honyaku
-#			   Yasunari Yamashita <yamasita at omronsoft.co.jp>
-urbisnet	2745/udp    # URBISNET
-urbisnet	2745/tcp    # URBISNET
-#			   Urbis.Net Ltd <postmaster at urbis.net>
-cpudpencap	2746/udp    # CPUDPENCAP
-cpudpencap	2746/tcp    # CPUDPENCAP
-#			   Tamir Zegman <zegman at checkpoint.com>
-fjippol-swrly	2747/udp # 
-fjippol-swrly	2747/tcp # 
-fjippol-polsvr	2748/udp # 
-fjippol-polsvr	2748/tcp # 
-fjippol-cnsl	2749/udp # 
-fjippol-cnsl	2749/tcp # 
-fjippol-port1	2750/udp # 
-fjippol-port1	2750/tcp # 
-fjippol-port2	2751/udp # 
-fjippol-port2	2751/tcp # 
-#			   Shoichi Tachibana <tatibana at yk.fujitsu.co.jp>
-rsisysaccess	2752/udp    # RSISYS ACCESS
-rsisysaccess	2752/tcp    # RSISYS ACCESS
-#			   Christophe Besant
-de-spot		2753/udp    # de-spot
-de-spot		2753/tcp    # de-spot
-#			   Sanjay Parekh <spot at digitalenvoy.net>
-apollo-cc	2754/udp    # APOLLO CC
-apollo-cc	2754/tcp    # APOLLO CC
-#			   Brand Communications <donovan at brandcomms.com>
-expresspay	2755/udp    # Express Pay
-expresspay	2755/tcp    # Express Pay
-#			   Ben Higgins <bhiggins at netcom.ca>
-simplement-tie	2756/udp    # simplement-tie
-simplement-tie	2756/tcp    # simplement-tie
-#			   Tzvika Chumash <tzvikac at netvision.net.il>
-cnrp		2757/udp    # CNRP
-cnrp		2757/tcp    # CNRP
-#			   Jacob Ulmert <Jacob.Ulmert at se.abb.com>
-apollo-status	2758/udp    # APOLLO Status
-apollo-status	2758/tcp    # APOLLO Status
-apollo-gms	2759/udp    # APOLLO GMS
-apollo-gms	2759/tcp    # APOLLO GMS
-#			   Simon Hovell <simonh at brandcomms.com>
-sabams		2760/udp    # Saba MS
-sabams		2760/tcp    # Saba MS
-#			   Davoud Maha <dmaha at saba.com>
-dicom-iscl	2761/udp    # DICOM ISCL
-dicom-iscl	2761/tcp    # DICOM ISCL
-dicom-tls	2762/udp    # DICOM TLS
-dicom-tls	2762/tcp    # DICOM TLS
-#			   Lawrence Tarbox <ltarbox at scr.siemens.com>
-desktop-dna	2763/udp    # Desktop DNA
-desktop-dna	2763/tcp    # Desktop DNA
-#			   Jon Walker <jwalker at miramarsys.com>
-data-insurance	2764/udp    # Data Insurance
-data-insurance	2764/tcp    # Data Insurance
-#			   Brent Irwin <birwin at standard.com>
-qip-audup	2765/udp    # qip-audup
-qip-audup	2765/tcp    # qip-audup
-#			   Mike Morgan <mmorgan at lucent.com>
-compaq-scp	2766/udp    # Compaq SCP
-compaq-scp	2766/tcp    # Compaq SCP
-#			   Ferruccio Barletta <ferruccio.barletta at compaq.com>
-uadtc		2767/udp    # UADTC
-uadtc		2767/tcp    # UADTC
-uacs		2768/udp    # UACS
-uacs		2768/tcp    # UACS
-#			   Vishwas Lele <Vishwas_Lele at appliedis.com>
-singlept-mvs	2769/udp    # Single Point MVS
-singlept-mvs	2769/tcp    # Single Point MVS
-#			   Thomas Anderson <anderson at clark.net>
-veronica	2770/udp    # Veronica
-veronica	2770/tcp    # Veronica
-#			   Jonas Oberg <jonas at coyote.org>
-vergencecm	2771/udp    # Vergence CM
-vergencecm	2771/tcp    # Vergence CM
-#			   Mark Morwood <markm at sentillion.com>
-auris		2772/udp    # auris
-auris		2772/tcp    # auris
-#			   Francisco Saez Arance <fsaez at tid.es>
-rbakcup1        2773/udp   # RBackup Remote Backup
-rbakcup1        2773/tcp   # RBackup Remote Backup
-rbakcup2        2774/udp   # RBackup Remote Backup
-rbakcup2        2774/tcp   # RBackup Remote Backup
-#                         Rob Cosgrove <rob at alice.net>
-smpp		2775/udp    # SMPP
-smpp		2775/tcp    # SMPP
-#			   Owen Sullivan <owen.sullivan at aldiscon.ie>
-ridgeway1	2776/udp    # Ridgeway Systems & Software
-ridgeway1	2776/tcp    # Ridgeway Systems & Software
-ridgeway2	2777/udp    # Ridgeway Systems & Software
-ridgeway2	2777/tcp    # Ridgeway Systems & Software
-#			   Steve Read <sread at ridgeway-sys.com>
-gwen-sonya	2778/udp    # Gwen-Sonya 
-gwen-sonya	2778/tcp    # Gwen-Sonya 
-#			   Mark Hurst <mhurst at inconnect.com>
-lbc-sync	2779/udp    # LBC Sync
-lbc-sync	2779/tcp    # LBC Sync
-lbc-control	2780/udp    # LBC Control
-lbc-control	2780/tcp    # LBC Control
-#			   Keiji Michine <michine at net.paso.fujitsu.co.jp>
-whosells	2781/udp    # whosells
-whosells	2781/tcp    # whosells
-#			   William Randolph Royere III 
-#                          <william at royere.net>
-everydayrc	2782/udp    # everydayrc
-everydayrc	2782/tcp    # everydayrc
-#			   Ahti Heinla <ahti at ahti.bluemoon.ee>
-aises		2783/udp    # AISES
-aises		2783/tcp    # AISES
-#			   Daniel Grazioli <dgrazioli at pgaero.co.uk>
-www-dev         2784/udp    # world wide web - development
-www-dev         2784/tcp    # world wide web - development
-aic-np          2785/udp    # aic-np
-aic-np          2785/tcp    # aic-np
-#                          Brad Parker <brad at american.com>
-aic-oncrpc      2786/udp    # aic-oncrpc - Destiny MCD database
-aic-oncrpc      2786/tcp    # aic-oncrpc - Destiny MCD database
-#                          Brad Parker  <brad at american.com>
-piccolo         2787/udp    # piccolo - Cornerstone Software
-piccolo         2787/tcp    # piccolo - Cornerstone Software
-#                          Dave Bellivea <DaveBelliveau at corsof.com>
-fryeserv        2788/udp    # NetWare Loadable Module - Seagate Software
-fryeserv        2788/tcp    # NetWare Loadable Module - Seagate Software
-#                          Joseph LoPilato 
-#                          <Joseph_M_LoPilato at notes.seagate.com>
-media-agent     2789/udp    # Media Agent
-media-agent     2789/tcp    # Media Agent
-#			   Nitzan Daube <nitzan at brm.com>
-plgproxy	2790/udp    # PLG Proxy
-plgproxy	2790/tcp    # PLG Proxy
-#			   Charlie Hava <charlieh at aks.com>
-mtport-regist	2791/udp    # MT Port Registrator
-mtport-regist	2791/tcp    # MT Port Registrator
-#			   Maxim Tseitlin <mtseitlin at iname.com>
-f5-globalsite	2792/udp    # f5-globalsite
-f5-globalsite	2792/tcp    # f5-globalsite
-#			   Christian Saether <c.saether at f5.com>
-initlsmsad	2793/udp    # initlsmsad
-initlsmsad	2793/tcp    # initlsmsad
-#			   Kelly Green <green at compaq.com>
-aaftp		2794/udp    # aaftp
-aaftp		2794/tcp    # aaftp
-#			   E. Jay Berkenbilt <ejb at ql.org>
-livestats	2795/udp    # LiveStats
-livestats	2795/tcp    # LiveStats
-#			   Chris Greene <cgreeneOA at avidsports.com>
-ac-tech		2796/udp    # ac-tech
-ac-tech		2796/tcp    # ac-tech
-#			   Chiming Huang <chuang at ac-tech.com>
-esp-encap	2797/udp    # esp-encap
-esp-encap	2797/tcp    # esp-encap
-#			   Jorn Sierwald <joern.sierwald at datafellows.com>
-tmesis-upshot	2798/udp    # TMESIS-UPShot
-tmesis-upshot	2798/tcp    # TMESIS-UPShot
-#			   Brian Schenkenberger <VAXman at TMESIS.COM>
-icon-discover	2799/udp    # ICON Discover
-icon-discover	2799/tcp    # ICON Discover
-#			   Alexander Falk <falk at icon.at>
-acc-raid	2800/udp    # ACC RAID
-acc-raid	2800/tcp    # ACC RAID
-#			   Scott St. Clair <stclair at ntc.adaptec.com>
-igcp		2801/udp    # IGCP
-igcp		2801/tcp    # IGCP
-#			   David Hampson <davidha at codemasters.com>
-veritas-udp1	2802/udp    # Veritas UDP1
-veritas-tcp1	2802/tcp    # Veritas TCP1
-#			   Russ Thrasher <Russell.Thrasher at veritas.com>
-btprjctrl	2803/udp    # btprjctrl
-btprjctrl	2803/tcp    # btprjctrl
-#			   Huw Thomas <huw.thomas at bt.com>
-telexis-vtu	2804/udp    # Telexis VTU
-telexis-vtu	2804/tcp    # Telexis VTU
-#			   Todd White <twhite at telexicorp.com>
-wta-wsp-s	2805/udp    # WTA WSP-S
-wta-wsp-s	2805/tcp    # WTA WSP-S
-#			   Sebastien Bury (WAP Forum)
-#			   <sebastien.bury at art.alcatel.fr>
-cspuni		2806/udp    # cspuni
-cspuni		2806/tcp    # cspuni
-cspmulti	2807/udp    # cspmulti
-cspmulti	2807/tcp    # cspmulti
-#			   Terumasa Yoneda <yonedat at pfu.co.jp>
-j-lan-p		2808/udp    # J-LAN-P
-j-lan-p		2808/tcp    # J-LAN-P
-#			   Takeshi Sahara <sahara at jdl.co.jp>
-corbaloc	2809/udp    # CORBA LOC
-corbaloc	2809/tcp    # CORBA LOC
-#			   Ted McFadden <mcfadden at dstc.edu.au>
-netsteward	2810/udp    # Active Net Steward
-netsteward	2810/tcp    # Active Net Steward
-#			   Keith Morley <keith at ndl.co.uk>
-gsiftp		2811/udp    # GSI FTP
-gsiftp		2811/tcp    # GSI FTP
-#			   Von Welch <vwelch at ncsa.uiuc.edu>
-atmtcp		2812/udp    # atmtcp
-atmtcp		2812/tcp    # atmtcp
-#			   Werner Almesberger <Werner.Almesberger at epfl.ch>
-llm-pass	2813/udp    # llm-pass
-llm-pass	2813/tcp    # llm-pass
-llm-csv		2814/udp    # llm-csv
-llm-csv		2814/tcp    # llm-csv
-#			   Glen Sansoucie <glen at llmwin.com>
-lbc-measure	2815/udp    # LBC Measurement
-lbc-measure	2815/tcp    # LBC Measurement
-lbc-watchdog	2816/udp    # LBC Watchdog
-lbc-watchdog	2816/tcp    # LBC Watchdog
-#			   Akiyoshi Ochi <akiyoshi at net.paso.fujitsu.co.jp>
-nmsigport	2817/udp    # NMSig Port
-nmsigport	2817/tcp    # NMSig Port
-#			   Peter Egli <peter.egli at mail.inalp.com>
-rmlnk		2818/udp    # rmlnk
-rmlnk		2818/tcp    # rmlnk
-fc-faultnotify	2819/udp    # FC Fault Notification
-fc-faultnotify	2819/tcp    # FC Fault Notification
-#			   Dave Watkins <davew at boi.hp.com>
-univision	2820/udp    # UniVision
-univision	2820/tcp    # UniVision
-#			   Keith Ansell <KeithA at fastfreenet.com> 
-vrts-at-port    2821/udp    # VERITAS Authentication Service
-vrts-at-port    2821/tcp    # VERITAS Authentication Service
-#                          Stefan Winkel <stefan at veritas.com>
-ka0wuc		2822/udp    # ka0wuc
-ka0wuc		2822/tcp    # ka0wuc
-#			   Kit Haskins <kit at ka0wuc.org>
-cqg-netlan	2823/udp    # CQG Net/LAN
-cqg-netlan	2823/tcp    # CQG Net/LAN
-cqg-netlan-1    2824/udp    # CQG Net/Lan 1 
-cqg-netlan-1    2824/tcp    # CQG Net/LAN 1
-#			   Jeff Wood <jw at cqg.com>
-#               2825       (unassigned) Possibly assigned
-slc-systemlog	2826/udp    # slc systemlog
-slc-systemlog	2826/tcp    # slc systemlog
-slc-ctrlrloops	2827/udp    # slc ctrlrloops
-slc-ctrlrloops	2827/tcp    # slc ctrlrloops
-#			   Erwin Hogeweg <erwin at airtech.demon.nl>
-itm-lm		2828/udp    # ITM License Manager 
-itm-lm		2828/tcp    # ITM License Manager 
-#			   Miles O'Neal <meo at us.itmasters.com>
-silkp1		2829/udp    # silkp1
-silkp1		2829/tcp    # silkp1
-silkp2		2830/udp    # silkp2
-silkp2		2830/tcp    # silkp2
-silkp3		2831/udp    # silkp3
-silkp3		2831/tcp    # silkp3
-silkp4		2832/udp    # silkp4
-silkp4		2832/tcp    # silkp4
-#			   Erik Skyten <eki at silknet.com>
-glishd		2833/udp    # glishd
-glishd		2833/tcp    # glishd
-#			   Darrell Schiebel <dschieb at cv.nrao.edu>
-evtp		2834/udp    # EVTP
-evtp		2834/tcp    # EVTP
-evtp-data	2835/udp    # EVTP-DATA
-evtp-data	2835/tcp    # EVTP-DATA
-#			   Eric Bruno <ebruno at solution-soft.com> 
-catalyst	2836/udp    # catalyst
-catalyst	2836/tcp    # catalyst
-#			   Garret Tollkuhn <garret at multiviewgroup.com>
-repliweb	2837/udp    # Repliweb
-repliweb	2837/tcp    # Repliweb
-#			   William Orme <bill at repliweb.com>
-starbot		2838/udp    # Starbot
-starbot		2838/tcp    # Starbot
-#			   Markus Sabadello <sabadello at starbot.org>
-nmsigport	2839/udp    # NMSigPort
-nmsigport	2839/tcp    # NMSigPort
-#			   Peter Egli <peter.egli at mail.inalp.com>
-l3-exprt	2840/udp    # l3-exprt
-l3-exprt	2840/tcp    # l3-exprt
-l3-ranger	2841/udp    # l3-ranger
-l3-ranger	2841/tcp    # l3-ranger
-l3-hawk		2842/udp    # l3-hawk
-l3-hawk		2842/tcp    # l3-hawk
-#			   Dolores Scott <dolores.scott at l-3security.com>
-pdnet		2843/udp    # PDnet
-pdnet		2843/tcp    # PDnet
-#			   Torsten Scheffler <torsten.scheffler at apex.de>
-bpcp-poll	2844/udp    # BPCP POLL
-bpcp-poll	2844/tcp    # BPCP POLL
-bpcp-trap	2845/udp    # BPCP TRAP
-bpcp-trap	2845/tcp    # BPCP TRAP
-#			   Steve Van Duser
-#                          <steve.vanduser at bestpower.gensig.com>
-aimpp-hello	2846/udp    # AIMPP Hello
-aimpp-hello	2846/tcp    # AIMPP Hello
-aimpp-port-req	2847/udp    # AIMPP Port Req
-aimpp-port-req	2847/tcp    # AIMPP Port Req
-#			   Brian Martinicky
-#                          <Brian_Martinicky at automationintelligence.com>
-amt-blc-port	2848/udp    # AMT-BLC-PORT
-amt-blc-port	2848/tcp    # AMT-BLC-PORT
-#			   Sandra Frulloni <frulloni.amtec at interbusiness.it>
-fxp		2849/udp    # FXP
-fxp		2849/tcp    # FXP
-#			   Martin Lichtin <lichtin at oanda.com>
-metaconsole	2850/udp    # MetaConsole
-metaconsole	2850/tcp    # MetaConsole
-#			   Rakesh Mahajan <rmahajan at netaphor-software.com>
-webemshttp	2851/udp    # webemshttp
-webemshttp	2851/tcp    # webemshttp
-#			   Stephen Tsun <stsun at jetstream.com>
-bears-01	2852/udp    # bears-01
-bears-01	2852/tcp    # bears-01
-#			   Bruce McKinnon <brucemck at bears.aust.com>
-ispipes		2853/udp    # ISPipes
-ispipes		2853/tcp    # ISPipes
-#			   Rajesh Nandyalam <rnandyal at emc.com>
-infomover	2854/udp    # InfoMover
-infomover	2854/tcp    # InfoMover
-#			   Carla Caputo <caputo at emc.com>
-cesdinv		2856/udp    # cesdinv
-cesdinv		2856/tcp    # cesdinv
-#			   Yoshiaki Tokumoto <toku at pfu.co.jp>
-simctlp		2857/udp    # SimCtIP
-simctlp		2857/tcp    # SimCtIP
-#			   Christian Zietz <czietz at gmx.net>
-ecnp		2858/udp    # ECNP
-ecnp		2858/tcp    # ECNP
-#			   Robert Reimiller <bob at certsoft.com>
-activememory	2859/udp    # Active Memory
-activememory	2859/tcp    # Active Memory
-#			   Joe Graham <joe at edaconsulting.com>
-dialpad-voice1	2860/udp    # Dialpad Voice 1
-dialpad-voice1	2860/tcp    # Dialpad Voice 1
-dialpad-voice2	2861/udp    # Dialpad Voice 2
-dialpad-voice2	2861/tcp    # Dialpad Voice 2
-#			   Wongyu Cho <wgcho at dialpad.com>
-ttg-protocol	2862/udp    # TTG Protocol
-ttg-protocol	2862/tcp    # TTG Protocol
-#			   Mark Boler <markb at ttgsoftware.com>
-sonardata	2863/udp    # Sonar Data
-sonardata	2863/tcp    # Sonar Data
-#			   Ian Higginbottom <sonardata at sonardata.com>
-astromed-main	2864/udp    # main 5001 cmd
-astromed-main	2864/tcp    # main 5001 cmd
-#			   Chris Tate <ctate at astromed.com>
-pit-vpn		2865/udp    # pit-vpn
-pit-vpn		2865/tcp    # pit-vpn
-#			   Norbert Sendetzky <norbert at linuxnetworks.de>
-iwlistener	2866/udp    # iwlistener
-iwlistener	2866/tcp    # iwlistener
-#			   Fred Surr <quest_iana at oz.quest.com>
-esps-portal	2867/udp    # esps-portal
-esps-portal	2867/tcp    # esps-portal
-#			   Nicholas Stowfis <nstowfis at esps.com>
-npep-messaging	2868/udp    # NPEP Messaging
-npep-messaging	2868/tcp    # NPEP Messaging
-#			   Kristian A. Bognaes <kbo at norman.no>
-icslap		2869/udp    # ICSLAP
-icslap		2869/tcp    # ICSLAP
-#			   Richard Lamb <rlamb at microsoft.com>
-daishi		2870/udp    # daishi
-daishi		2870/tcp    # daishi
-#			   Patrick Chipman <pchipman at memphis.edu>
-msi-selectplay	2871/udp    # MSI Select Play
-msi-selectplay	2871/tcp    # MSI Select Play
-#			   Paul Fonte <paul_fonte at mediastation.com>
-radix		2872/udp    # RADIX
-radix		2872/tcp    # RADIX
-#			   Stein Roger Skaflotten
-#                          <sskaflot at online.no>
-paspar2-zoomin	2873/udp    # PASPAR2 ZoomIn
-paspar2-zoomin	2873/tcp    # PASPAR2 ZoomIn
-#			   Amonn David <amnon at paspar2.com>
-dxmessagebase1	2874/udp    # dxmessagebase1
-dxmessagebase1	2874/tcp    # dxmessagebase1
-dxmessagebase2	2875/udp    # dxmessagebase2
-dxmessagebase2	2875/tcp    # dxmessagebase2
-#			   Ozz Nixon <root at delphix.com>
-sps-tunnel	2876/udp    # SPS Tunnel
-sps-tunnel	2876/tcp    # SPS Tunnel
-#			   Bill McIntosh <bmcintosh at fortresstech.com>
-bluelance	2877/udp    # BLUELANCE
-bluelance	2877/tcp    # BLUELANCE
-#			   Michael Padrezas <mpaderzas at bluelance.com>
-aap		2878/udp    # AAP
-aap		2878/tcp    # AAP
-#			   Stephen Hanna <steve.hanna at sun.com>
-ucentric-ds	2879/udp    # ucentric-ds
-ucentric-ds	2879/tcp    # ucentric-ds
-#			   Alex Vasilevsky <alexv at 204.165.216.115>
-synapse		2880/udp    # Synapse Transport
-synapse		2880/tcp    # Synapse Transport
-#			   Ali Fracyon <sxdev at modulardreams.com>
-ndsp		2881/udp    # NDSP
-ndsp		2881/tcp    # NDSP
-ndtp		2882/udp    # NDTP
-ndtp		2882/tcp    # NDTP
-ndnp		2883/udp    # NDNP
-ndnp		2883/tcp    # NDNP
-#			   Khelben Blackstaff <khelben at gmx.at>
-flashmsg	2884/udp    # Flash Msg
-flashmsg	2884/tcp    # Flash Msg
-#			   Jeffrey Zinkerman <jeff at zinknet.com>
-topflow		2885/udp    # TopFlow
-topflow		2885/tcp    # TopFlow
-#			   Ted Ross <ross at toplayer.com>
-responselogic   2886/udp    # RESPONSELOGIC
-responselogic   2886/tcp    # RESPONSELOGIC
-#			   Bruce Casey <bcasey at responselogic.com>
-aironetddp      2887/udp    # aironet
-aironetddp      2887/tcp    # aironet
-#			   Victor Griswold <vgris at aironet.com> 	
-spcsdlobby      2888/udp    # SPCSDLOBBY
-spcsdlobby      2888/tcp    # SPCSDLOBBY
-#			   Matthew Williams <SPCsd_MWDD at hotmail.com> 
-rsom            2889/udp    # RSOM
-rsom            2889/tcp    # RSOM
-#			   Justine Higgins <iana at corsof.com>
-cspclmulti      2890/udp    # CSPCLMULTI
-cspclmulti      2890/tcp    # CSPCLMULTI
-#			   Yoneda Terumasa <yonedat at pfu.co.jp>
-cinegrfx-elmd   2891/udp    # CINEGRFX-ELMD License Manager
-cinegrfx-elmd   2891/tcp    # CINEGRFX-ELMD License Manager
-#			   Greg Ercolano <erco at cinegrfx.com>
-snifferdata     2892/udp    # SNIFFERDATA
-snifferdata     2892/tcp    # SNIFFERDATA
-#			   Jeff Mangasarian <jeffrey_mangasarian at nai.com>
-vseconnector    2893/udp    # VSECONNECTOR
-vseconnector    2893/tcp    # VSECONNECTOR
-#			   Ingo Franzki <ifranzki at de.ibm.com>
-abacus-remote   2894/udp    # ABACUS-REMOTE
-abacus-remote   2894/tcp    # ABACUS-REMOTE
-#			   Mike Bello <mbello at zarak.com>
-natuslink       2895/udp    # NATUS LINK
-natuslink       2895/tcp    # NATUS LINK
-#			   Jonathan Mergy <mergy at natus.com>
-ecovisiong6-1   2896/udp    # ECOVISIONG6-1
-ecovisiong6-1   2896/tcp    # ECOVISIONG6-1
-#			   Henrik Holst <henrik.holst at ecovision.se>	
-citrix-rtmp	2897/udp    # Citrix RTMP
-citrix-rtmp	2897/tcp    # Citrix RTMP
-#			   Myk Willis <myk.willis at citrix.com>
-appliance-cfg   2898/udp    # APPLIANCE-CFG
-appliance-cfg   2898/tcp    # APPLIANCE-CFG
-#                          Gary A. James <gary.james at criticallink.com>
-powergemplus    2899/udp    # POWERGEMPLUS
-powergemplus    2899/tcp    # POWERGEMPLUS
-#                          Koich Nakamura <naka at case.nm.fujitsu.co.jp>
-quicksuite      2900/udp    # QUICKSUITE
-quicksuite      2900/tcp    # QUICKSUITE
-#                          William Egge <begge at emagisoft.com> 
-allstorcns      2901/udp    # ALLSTORCNS
-allstorcns      2901/tcp    # ALLSTORCNS
-#                          Steve Dobson <sdobson at allstor.com> 
-netaspi         2902/udp    # NET ASPI
-netaspi         2902/tcp    # NET ASPI
-#                          Johnson Luo <johnson_luo at mail.sercomm.com.tw> 
-suitcase        2903/udp    # SUITCASE
-suitcase        2903/tcp    # SUITCASE
-#                          Milton E. Sagen <msagen at extensis.com> 
-m2ua            2904/sctp   # M2UA
-m2ua            2904/udp    # M2UA
-m2ua            2904/tcp    # M2UA
-#                          Lyndon Ong <LyOng at ciena.com>
-m3ua            2905/sctp   # M3UA
-m3ua            2905/udp    # De-registered (2001 June 07)
-m3ua            2905/tcp    # M3UA
-#                          Lyndon Ong <LyOng at ciena.com>
-caller9         2906/udp    # CALLER9
-caller9         2906/tcp    # CALLER9
-#                          Shams Naqi <SSNAQVI at aol.com>
-webmethods-b2b  2907/udp    # WEBMETHODS B2B
-webmethods-b2b  2907/tcp    # WEBMETHODS B2B
-#                          Joseph Hines <jhines at webmethods.com>
-mao             2908/udp    # mao
-mao             2908/tcp    # mao
-#                          Marc Baudoin <babafou at babafou.eu.org>
-funk-dialout	2909/udp    # Funk Dialout
-funk-dialout 	2909/tcp    # Funk Dialout
-#			   Cimarron Boozer <cboozer at funk.com>
-tdaccess	2910/udp    # TDAccess
-tdaccess	2910/tcp    # TDAccess
-#			   Tom Haapanen <tomh at metrics.com>
-blockade        2911/udp    # Blockade
-blockade        2911/tcp    # Blockade
-#                          VP - Research & Development <development at blockade.com>
-epicon		2912/udp    # Epicon
-epicon		2912/tcp    # Epicon
-#			   Michael Khalandovsky <mlk at epicon.com>
-boosterware	2913/udp    # Booster Ware
-boosterware	2913/tcp    # Booster Ware
-#		 	   Ido Ben-David <dgntcom at netvision.net.il>
-gamelobby       2914/udp    # Game Lobby
-gamelobby       2914/tcp    # Game Lobby
-#                          Paul Ford-Hutchinson <paulfordh at uk.ibm.com>
-tksocket	2915/udp    # TK Socket
-tksocket	2915/tcp    # TK Socket
-#			   Alan Fahrner <alan at protix.com>
-elvin_server	2916/udp    # Elvin Server
-elvin_server	2916/tcp    # Elvin Server
-elvin_client	2917/udp    # Elvin Client
-elvin_client	2917/tcp    # Elvin Client
-#			   David Arnold <davida at pobox.com>
-kastenchasepad	2918/udp    # Kasten Chase Pad
-kastenchasepad	2918/tcp    # Kasten Chase Pad
-#			   Marc Gauthier <mgau at kastenchase.com>
-roboer          2919/udp    # ROBOER
-roboer          2919/tcp    # ROBOER
-#                          Paul Snook <paul.snook at heroix.co.uk>
-roboeda         2920/udp    # ROBOEDA
-roboeda         2920/tcp    # ROBOEDA
-#                          Paul Snook <paul.snook at heroix.co.uk>
-cesdcdman       2921/udp    # CESD Contents Delivery Management
-cesdcdman       2921/tcp    # CESD Contents Delivery Management
-#                          Shinya Abe <abeabe at pfu.co.jp>
-cesdcdtrn       2922/udp    # CESD Contents Delivery Data Transfer
-cesdcdtrn       2922/tcp    # CESD Contents Delivery Data Transfer
-#                          Shinya Abe <abeabe at pfu.co.jp> 
-wta-wsp-wtp-s   2923/udp    # WTA-WSP-WTP-S
-wta-wsp-wtp-s   2923/tcp    # WTA-WSP-WTP-S
-#                          Sebastien Bury (WAP Forum)
-#                          <sebastien.bury at art.alcatel.fr>
-precise-vip     2924/udp    # PRECISE-VIP
-precise-vip     2924/tcp    # PRECISE-VIP
-#                          Michael Landwehr <mikel at precisesoft.co.il>
-#               2925       Unassigned (FRP-Released 12/7/00)
-mobile-file-dl  2926/udp    # MOBILE-FILE-DL
-mobile-file-dl  2926/tcp    # MOBILE-FILE-DL
-#                          Mitsuji Toda <toda at mmedia.mci.mei.co.jp>
-unimobilectrl   2927/udp    # UNIMOBILECTRL
-unimobilectrl   2927/tcp    # UNIMOBILECTRL
-#                          Vikas <vikas at graycell.com>
-redstone-cpss   2928/udp    # REDSTONE-CPSS
-redstone-cpss   2928/tcp    # REDSTONE-CPSS
-#                          Jeff Looman <jeff at looman.org>
-amx-webadmin    2929/udp    # AMX-WEBADMIN
-amx-webadmin    2929/tcp    # AMX-WEBADMIN
-#                          Mike Morris <mike.morris at amx.com>
-amx-weblinx     2930/udp    # AMX-WEBLINX
-amx-weblinx     2930/tcp    # AMX-WEBLINX
-#                          Mike Morris <mike.morris at amx.com>
-circle-x        2931/udp    # Circle-X
-circle-x        2931/tcp    # Circle-X
-#                          Norm Freedman <normfree at worldnet.att.net>
-incp            2932/udp    # INCP
-incp            2932/tcp    # INCP
-#                          Keith Paulsen <kpaulsen at phobos.com>
-4-tieropmgw     2933/udp    # 4-TIER OPM GW
-4-tieropmgw     2933/tcp    # 4-TIER OPM GW 
-#                          Francois Peloffy <fpeloffy at 4tier.com>
-4-tieropmcli    2934/udp    # 4-TIER OPM CLI
-4-tieropmcli    2934/tcp    # 4-TIER OPM CLI
-#                          Francois Peloffy <fpeloffy at 4tier.com>
-qtp             2935/udp    # QTP
-qtp             2935/tcp    # QTP
-#                          Cameron Young <Cameron_Young at inetco.com>
-otpatch         2936/udp    # OTPatch
-otpatch         2936/tcp    # OTPatch
-#                          Thomas J. Theobald <ttheobald at opentable.com>
-pnaconsult-lm   2937/udp    # PNACONSULT-LM
-pnaconsult-lm   2937/tcp    # PNACONSULT-LM
-#                          Theo Nijssen <theon at nijssen.nl>
-sm-pas-1        2938/udp    # SM-PAS-1
-sm-pas-1        2938/tcp    # SM-PAS-1
-sm-pas-2        2939/udp    # SM-PAS-2
-sm-pas-2        2939/tcp    # SM-PAS-2
-sm-pas-3        2940/udp    # SM-PAS-3
-sm-pas-3        2940/tcp    # SM-PAS-3
-sm-pas-4        2941/udp    # SM-PAS-4
-sm-pas-4        2941/tcp    # SM-PAS-4
-sm-pas-5        2942/udp    # SM-PAS-5
-sm-pas-5        2942/tcp    # SM-PAS-5
-#                          Tom Haapanen <tomh at metrics.com> 
-ttnrepository   2943/udp    # TTNRepository
-ttnrepository   2943/tcp    # TTNRepository
-#                          Robert Orr <rorr at teltone.com> 
-megaco-h248     2944/udp    # Megaco H-248
-megaco-h248     2944/tcp    # Megaco H-248
-h248-binary     2945/udp    # H248 Binary
-h248-binary     2945/tcp    # H248 Binary
-#                          Tom Taylor <taylor at nortelnetworks.com> 
-fjsvmpor        2946/udp    # FJSVmpor
-fjsvmpor        2946/tcp    # FJSVmpor
-#                          Naoki Hayashi <ha at fjh.se.fujitsu.co.jp>
-gpsd            2947/udp    # GPSD
-gpsd            2947/tcp    # GPSD
-#                          Derrick J. Brashear <shadow at dementia.org>
-wap-push        2948/udp    # WAP PUSH
-wap-push        2948/tcp    # WAP PUSH
-wap-pushsecure  2949/udp    # WAP PUSH SECURE
-wap-pushsecure  2949/tcp    # WAP PUSH SECURE
-#                          WAP FORUM <wap-feedback at mail.wapforum.org>
-esip            2950/udp    # ESIP
-esip            2950/tcp    # ESIP
-#                          David Stephenson <david_stephenson at hp.com>
-ottp            2951/udp    # OTTP
-ottp            2951/tcp    # OTTP
-#                          Brent Foster <brent.foster at onstreamsystems.com>
-mpfwsas         2952/udp    # MPFWSAS
-mpfwsas         2952/tcp    # MPFWSAS
-#                          Toru Murai <murai at saint.nm.fujitsu.co.jp>
-ovalarmsrv      2953/udp    # OVALARMSRV
-ovalarmsrv      2953/tcp    # OVALARMSRV
-ovalarmsrv-cmd  2954/udp    # OVALARMSRV-CMD
-ovalarmsrv-cmd  2954/tcp    # OVALARMSRV-CMD
-#                          Eric Pulsipher <eric_pulsipher at hp.com>
-csnotify        2955/udp    # CSNOTIFY
-csnotify        2955/tcp    # CSNOTIFY
-#                          Israel Beniaminy <israel.beniaminy at clickservice.com>
-ovrimosdbman    2956/udp    # OVRIMOSDBMAN
-ovrimosdbman    2956/tcp    # OVRIMOSDBMAN
-#                          Dimitrios Souflis <dsouflis at altera.gr>
-jmact5          2957/udp    # JAMCT5
-jmact5          2957/tcp    # JAMCT5
-jmact6          2958/udp    # JAMCT6
-jmact6          2958/tcp    # JAMCT6
-rmopagt         2959/udp    # RMOPAGT
-rmopagt         2959/tcp    # RMOPAGT
-#                          Shuji Okubo <okubo at yk.fujitsu.co.jp>
-dfoxserver      2960/udp    # DFOXSERVER
-dfoxserver      2960/tcp    # DFOXSERVER
-#                          David Holden <mdh at rentek.net>
-boldsoft-lm     2961/udp    # BOLDSOFT-LM
-boldsoft-lm     2961/tcp    # BOLDSOFT-LM
-#                          Fredrik Haglund <fredik.haglund at boldsoft.com>
-iph-policy-cli  2962/udp    # IPH-POLICY-CLI
-iph-policy-cli  2962/tcp    # IPH-POLICY-CLI
-iph-policy-adm  2963/udp    # IPH-POLICY-ADM
-iph-policy-adm  2963/tcp    # IPH-POLICY-ADM
-#                          Shai Herzog <herzog at iphighway.com>
-bullant-srap    2964/udp    # BULLANT SRAP
-bullant-srap    2964/tcp    # BULLANT SRAP
-bullant-rap     2965/udp    # BULLANT RAP
-bullant-rap     2965/tcp    # BULLANT RAP
-#                          Michael Cahill <Michael.Cahill at bullant.net>
-idp-infotrieve  2966/udp    # IDP-INFOTRIEVE
-idp-infotrieve  2966/tcp    # IDP-INFOTRIEVE
-#                          Kevin Bruckert <kbruckert at idpco.com> 
-ssc-agent       2967/udp    # SSC-AGENT
-ssc-agent       2967/tcp    # SSC-AGENT
-#                          George Dzieciol <gdzieciol at symantec.com>   
-enpp            2968/udp    # ENPP
-enpp            2968/tcp    # ENPP
-#                          Kazuhito Gassho <Gassho.Kasuhito at exc.epson.co.jp>
-essp            2969/udp    # ESSP
-essp            2969/tcp    # ESSP
-#                          Hitoshi Ishida <ishida.hitoshi at exc.epson.co.jp>
-index-net       2970/udp    # INDEX-NET
-index-net       2970/tcp    # INDEX-NET
-#                          Chris J. Wren <C.Wren at lucent.com>
-netclip         2971/udp    # NetClip clipboard daemon
-netclip         2971/tcp    # NetClip clipboard daemon
-#                          Rudi Chiarito <nutello at sweetness.com>
-pmsm-webrctl	2972/udp    # PMSM Webrctl
-pmsm-webrctl	2972/tcp    # PMSM Webrctl
-#			   Markus Michels <mmi at pmsmicado.com>
-svnetworks	2973/udp    # SV Networks
-svnetworks	2973/tcp    # SV Networks
-#			   Sylvia Siu <ssiu at svnetworks.com>
-signal		2974/udp    # Signal
-signal		2974/tcp    # Signal
-#			   Wyatt Williams <wyattw at icall.com>
-fjmpcm		2975/udp    # Fujitsu Configuration Management Service
-fjmpcm		2975/tcp    # Fujitsu Configuration Management Service
-#			   Hiroki Kawano <kawano at saint.nm.fujitsu.co.jp>
-cns-srv-port	2976/udp    # CNS Server Port
-cns-srv-port	2976/tcp    # CNS Server Port
-#			   Ram Golla <rgolla at cisco.com>
-ttc-etap-ns	2977/udp    # TTCs Enterprise Test Access Protocol - NS
-ttc-etap-ns	2977/tcp    # TTCs Enterprise Test Access Protocol - NS
-ttc-etap-ds	2978/udp    # TTCs Enterprise Test Access Protocol - DS
-ttc-etap-ds	2978/tcp    # TTCs Enterprise Test Access Protocol - DS
-#			   Daniel Becker <beckerd at ttc.com>
-h263-video	2979/udp    # H.263 Video Streaming 
-h263-video	2979/tcp    # H.263 Video Streaming 
-#			   Jauvane C. de Oliveira <jauvane at acm.org>
-wimd		2980/udp    # Instant Messaging Service
-wimd		2980/tcp    # Instant Messaging Service
-#			   Kevin Birch <kbirch at pobox.com>
-mylxamport	2981/udp    # MYLXAMPORT
-mylxamport	2981/tcp    # MYLXAMPORT
-#			   Wei Gao <wei at mylex.com>
-iwb-whiteboard  2982/udp    # IWB-WHITEBOARD
-iwb-whiteboard  2982/tcp    # IWB-WHITEBOARD
-#                          David W. Radcliffe <davidr at adicarte.co.uk>
-netplan         2983/udp    # NETPLAN
-netplan         2983/tcp    # NETPLAN
-#                          Thomas Driemeyer <thomas at bitrot.de>
-hpidsadmin      2984/udp    # HPIDSADMIN
-hpidsadmin      2984/tcp    # HPIDSADMIN
-hpidsagent      2985/udp    # HPIDSAGENT
-hpidsagent      2985/tcp    # HPIDSAGENT
-#                          John Trudeau <jtrudeau at cup.hp.com>
-stonefalls      2986/udp    # STONEFALLS
-stonefalls      2986/tcp    # STONEFALLS
-#                          Scott Grau <sgrau at stonefalls.com>
-identify        2987/udp    # identify
-identify        2987/tcp    # identify
-hippad          2988/udp    # HIPPA Reporting Protocol
-hippad          2988/tcp    # HIPPA Reporting Protocol
-#                          William Randolph Royere III 
-#                          <william at royere.net>
-zarkov          2989/udp    # ZARKOV Intelligent Agent Communication
-zarkov          2989/tcp    # ZARKOV Intelligent Agent Communication
-#                          Robin Felix <zarkov-port at zarkov.com>
-boscap          2990/udp    # BOSCAP
-boscap          2990/tcp    # BOSCAP
-#                          Dirk Hillbrecht <dirk at hillbrecht.de>
-wkstn-mon       2991/udp    # WKSTN-MON
-wkstn-mon       2991/tcp    # WKSTN-MON
-#                          William David <william.david at lmco.com>
-itb301          2992/udp    # ITB301
-itb301          2992/tcp    # ITB301
-#                          Bodo Rueskamp <br at itchigo.com> 
-veritas-vis1    2993/udp    # VERITAS VIS1
-veritas-vis1    2993/tcp    # VERITAS VIS1
-veritas-vis2    2994/udp    # VERITAS VIS2
-veritas-vis2    2994/tcp    # VERITAS VIS2
-#                          Dinkar Chivaluri <dinkar at veritas.com>
-idrs            2995/udp    # IDRS
-idrs            2995/tcp    # IDRS
-#                          Jeff Eaton <jeaton at intermec.com>
-vsixml		2996/udp    # vsixml
-vsixml		2996/tcp    # vsixml
-#			   Rob Juergens <robj at vsi.com>
-rebol           2997/udp    # REBOL
-rebol		2997/tcp    # REBOL
-#                          Holger Kruse <holger at rebol.net>
-realsecure	2998/udp    # Real Secure
-realsecure	2998/tcp    # Real Secure
-#			   Tim Farley <TFarley at iss.net>
-remoteware-un	2999/udp    # RemoteWare Unassigned
-remoteware-un	2999/tcp    # RemoteWare Unassigned
-#			   Tim Farley <Tim.Farley at xcellenet.com>
-hbci            3000/udp    # HBCI
-hbci            3000/tcp    # HBCI
-#                          Kurt Haubner <haubner at ibm.net>
-# The following entry records an unassigned but widespread use
-remoteware-cl   3000/udp    # RemoteWare Client
-remoteware-cl   3000/tcp    # RemoteWare Client
-#                          Tim Farley <Tim.Farley at xcellenet.com>
-redwood-broker  3001/udp    # Redwood Broker
-redwood-broker  3001/tcp    # Redwood Broker
-#                          Joseph Morrison <joe at powerframe.com>
-exlm-agent      3002/udp    # EXLM Agent
-exlm-agent      3002/tcp    # EXLM Agent
-#                          Randy Martin <exlmoc at clemson.edu>
-# The following entry records an unassigned but widespread use
-remoteware-srv  3002/udp    # RemoteWare Server
-remoteware-srv  3002/tcp    # RemoteWare Server
-#                          Tim Farley <Tim.Farley at xcellenet.com>
-cgms            3003/udp    # CGMS
-cgms            3003/tcp    # CGMS
-#                          Jim Mazzonna <jmazzonna at tiscom.uscg.mil>
-csoftragent     3004/udp    # Csoft Agent
-csoftragent     3004/tcp    # Csoft Agent
-#                          Nedelcho Stanev <decho at csoft.bg>
-geniuslm        3005/udp    # Genius License Manager
-geniuslm        3005/tcp    # Genius License Manager
-#                          Jakob Spies <Jakob.Spies at genius.de>
-ii-admin        3006/udp    # Instant Internet Admin
-ii-admin        3006/tcp    # Instant Internet Admin
-#                          Lewis Donzis <ldonzis at nortelnetworks.com>
-lotusmtap       3007/udp    # Lotus Mail Tracking Agent Protocol
-lotusmtap       3007/tcp    # Lotus Mail Tracking Agent Protocol
-#                          Ken Lin <ken_lin at lotus.com>
-midnight-tech   3008/udp    # Midnight Technologies
-midnight-tech   3008/tcp    # Midnight Technologies
-#                          Kyle Unice <kyle at midnighttech.com>
-pxc-ntfy        3009/udp    # PXC-NTFY
-pxc-ntfy        3009/tcp    # PXC-NTFY
-#                          Takeshi Nishizawa <takeshi at cp10.es.xerox.com>
-ping-pong       3010/udp    # Telerate Workstation
-gw              3010/tcp    # Telerate Workstation
-#                          Timo Sivonen <timo.sivonen at ccmail.dowjones.com>
-trusted-web     3011/udp    # Trusted Web
-trusted-web     3011/tcp    # Trusted Web
-twsdss          3012/udp    # Trusted Web Client
-twsdss          3012/tcp    # Trusted Web Client
-#                          Alex Duncan <alex.duncan at sse.ie>
-gilatskysurfer  3013/udp    # Gilat Sky Surfer
-gilatskysurfer  3013/tcp    # Gilat Sky Surfer
-#                          Yossi Gal <yossi at gilat.com>
-broker_service  3014/udp    # Broker Service
-broker_service  3014/tcp    # Broker Service
-#                          Dale Bethers <dbethers at novell.com>
-nati-dstp       3015/udp    # NATI DSTP
-nati-dstp       3015/tcp    # NATI DSTP
-#                          Paul Austin <paul.austin at natinst.com>
-notify_srvr     3016/udp    # Notify Server
-notify_srvr     3016/tcp    # Notify Server
-#                          Hugo Parra <hparra at novell.com>
-event_listener  3017/udp    # Event Listener
-event_listener  3017/tcp    # Event Listener
-#                          Ted Tronson <ttronson at novell.com>
-srvc_registry   3018/udp    # Service Registry
-srvc_registry   3018/tcp    # Service Registry
-#                          Mark Killgore <MKillgore at novell.com>
-resource_mgr    3019/udp    # Resource Manager
-resource_mgr    3019/tcp    # Resource Manager
-#                          Gary Glover <gglover at novell.com>
-cifs            3020/udp    # CIFS
-cifs            3020/tcp    # CIFS
-#                          Paul Leach <paulle at microsoft.com>
-agriserver      3021/udp    # AGRI Server
-agriserver      3021/tcp    # AGRI Server
-#                          Frank Neulichedl <frank at websmile.com>
-csregagent      3022/udp    # CSREGAGENT
-csregagent      3022/tcp    # CSREGAGENT
-#                          Nedelcho Stanev <nstanev at csoft.bg>
-magicnotes      3023/udp    # magicnotes
-magicnotes      3023/tcp    # magicnotes
-#                          Karl Edwall <karl at magicnotes.com>	
-nds_sso         3024/udp    # NDS_SSO
-nds_sso	        3024/tcp    # NDS_SSO
-#                          Mel Oyler <mel at novell.com>
-arepa-raft      3025/udp    # Arepa Raft 
-arepa-raft      3025/tcp    # Arepa Raft 
-#                          Mark Ellison <ellison at ieee.org>
-agri-gateway    3026/udp    # AGRI Gateway
-agri-gateway    3026/tcp    # AGRI Gateway
-#                          Agri Datalog <contact at agri-datalog.com>
-LiebDevMgmt_C   3027/udp    # LiebDevMgmt_C
-LiebDevMgmt_C   3027/tcp    # LiebDevMgmt_C
-LiebDevMgmt_DM  3028/udp    # LiebDevMgmt_DM
-LiebDevMgmt_DM  3028/tcp    # LiebDevMgmt_DM
-LiebDevMgmt_A   3029/udp    # LiebDevMgmt_A
-LiebDevMgmt_A   3029/tcp    # LiebDevMgmt_A
-#                          Mike Velten <Mike_Velten at Liebert.com>
-arepa-cas       3030/udp    # Arepa Cas
-arepa-cas       3030/tcp    # Arepa Cas
-#                          Seth Silverman <seth at arepa.com>
-eppc            3031/udp    # Remote AppleEvents/PPC Toolbox
-eppc            3031/tcp    # Remote AppleEvents/PPC Toolbox
-#                          Steve Zellers <zellers at apple.com>
-redwood-chat    3032/udp    # Redwood Chat
-redwood-chat    3032/tcp    # Redwood Chat
-#                          Songwon Chi <swchi at daou.co.kr>
-pdb             3033/udp    # PDB
-pdb             3033/tcp    # PDB
-#                          Don Bowman <don at pixstream.com>
-osmosis-aeea    3034/udp    # Osmosis / Helix (R) AEEA Port
-osmosis-aeea    3034/tcp    # Osmosis / Helix (R) AEEA Port
-#                          Larry Atkin <latkin at commongrnd.com>	
-fjsv-gssagt     3035/udp    # FJSV gssagt
-fjsv-gssagt     3035/tcp    # FJSV gssagt
-#                          Tomoji Koike <koike at ael.fujitsu.co.jp>	
-hagel-dump      3036/udp    # Hagel DUMP
-hagel-dump      3036/tcp    # Hagel DUMP
-#                          Haim Gelfenbeyn <haim at hageltech.com>
-hp-san-mgmt     3037/udp    # HP SAN Mgmt
-hp-san-mgmt     3037/tcp    # HP SAN Mgmt
-#                          Steve Britt <steve_britt at hp.com>
-santak-ups      3038/udp    # Santak UPS
-santak-ups      3038/tcp    # Santak UPS
-#                          Tom Liu <ssc at sc.stk.com.cn>
-cogitate        3039/udp    # Cogitate, Inc.
-cogitate        3039/tcp    # Cogitate, Inc.
-#                          Jim Harlan <jimh at infowest.com> 
-tomato-springs  3040/udp    # Tomato Springs
-tomato-springs  3040/tcp    # Tomato Springs
-#                          Jack Waller III <jack at tomatosprings.com>
-di-traceware    3041/udp    # di-traceware
-di-traceware    3041/tcp    # di-traceware
-#                          Carlos Hung <chung at digisle.net>
-journee         3042/udp    # journee
-journee         3042/tcp    # journee
-#                          Kevin Calman <postmaster at journee.com>	
-brp             3043/udp    # BRP
-brp             3043/tcp    # BRP
-#                          Greg Gee <ggee at hns.com>
-epp             3044/udp    # EndPoint Protocol
-epp             3044/tcp    # EndPoint Protocol
-#                          Stephen Cipolli <scipolli at radvision.com> 
-responsenet     3045/udp    # ResponseNet
-responsenet     3045/tcp    # ResponseNet
-#                          Chul Yoon <cyoon at responsenetworks.com>
-di-ase          3046/udp    # di-ase
-di-ase          3046/tcp    # di-ase
-#                          Carlos Hung <chung at digisle.net>
-hlserver        3047/udp    # Fast Security HL Server
-hlserver        3047/tcp    # Fast Security HL Server
-#                          Michael Zunke <mzunke at fast-ag.de>
-pctrader        3048/udp    # Sierra Net PC Trader
-pctrader        3048/tcp    # Sierra Net PC Trader
-#                          Chris Hahn <chrish at sierra.net>
-nsws            3049/udp    # NSWS
-nsws            3049/tcp    # NSWS
-#                          Ray Gwinn <p00321 at psilink.com>
-gds_db          3050/udp    # gds_db
-gds_db          3050/tcp    # gds_db
-#                          Madhukar N. Thakur <mthakur at interbase.com>	
-galaxy-server	3051/udp    # Galaxy Server
-galaxy-server	3051/tcp    # Galaxy Server
-#			   Michael Andre <mandre at gts-tkts.com>
-apc-3052        3052/udp    # APC 3052
-apc-3052        3052/tcp    # APC 3052
-#                          American Power Conversion <ports at apcc.com>
-dsom-server	3053/udp    # dsom-server
-dsom-server	3053/tcp    # dsom-server
-#			   Daniel Sisk <danielr.sisk at pnl.gov>
-amt-cnf-prot	3054/udp    # AMT CNF PROT
-amt-cnf-prot	3054/tcp    # AMT CNF PROT
-#			   Marco Marcucci <mmarcucci.amtec at interbusiness.it>
-policyserver	3055/udp    # Policy Server
-policyserver	3055/tcp    # Policy Server
-#			   Mark Garti <mgarti at sonusnet.com>
-cdl-server	3056/udp    # CDL Server
-cdl-server	3056/tcp    # CDL Server
-#			   Paul Roberts <PaulRoberts at engineer.com>
-goahead-fldup	3057/udp    # GoAhead FldUp
-goahead-fldup	3057/tcp    # GoAhead FldUp
-#			   Alan Pickrell <alanp at goahead.com>
-videobeans	3058/udp    # videobeans
-videobeans	3058/tcp    # videobeans
-#			   Hiroyuki Takahashi <hiro.takahashi at eng.Sun.COM>
-qsoft		3059/udp    # qsoft
-qsoft		3059/tcp    # qsoft
-#			   James Kunz <jkunz at earlhaig.com>
-interserver	3060/udp    # interserver
-interserver	3060/tcp    # interserver
-#			   Madhukar N. Thakur <mthakur at interbase.com>
-cautcpd		3061/udp    # cautcpd
-cautcpd		3061/tcp    # cautcpd
-ncacn-ip-tcp	3062/udp    # ncacn-ip-tcp
-ncacn-ip-tcp	3062/tcp    # ncacn-ip-tcp
-ncadg-ip-udp    3063/udp    # ncadg-ip-udp
-ncadg-ip-udp	3063/tcp    # ncadg-ip-udp
-#			   Gabi Kalmar <kalga01 at cai.com>
-rprt            3064/udp    # Remote Port Redirector
-rprt            3064/tcp    # Remote Port Redirector
-#                          Robin Johnston <robinj at learningtree.com>
-slinterbase	3065/udp    # slinterbase
-slinterbase	3065/tcp    # slinterbase
-#			   Bie Tie <stie at interbase.com>
-netattachsdmp   3066/udp    # NETATTACHSDMP
-netattachsdmp   3066/tcp    # NETATTACHSDMP
-#                          Mike Young <myong at netattach.com>
-fjhpjp          3067/udp    # FJHPJP
-fjhpjp          3067/tcp    # FJHPJP
-#                          Ryozo Furutani <furutani at np.lps.cs.fujitsu.co.jp>
-ls3bcast	3068/udp    # ls3 Broadcast
-ls3bcast	3068/tcp    # ls3 Broadcast
-ls3		3069/udp    # ls3
-ls3		3069/tcp    # ls3
-#			   Andrei Tsyganenko <atsyganenko at powerware.com>
-mgxswitch       3070/udp    # MGXSWITCH
-mgxswitch       3070/tcp    # MGXSWITCH
-#                          George Walter <george.walter at ascentialsoftware.com>
-csd-mgmt-port   3071/udp    # ContinuStor Manager Port
-csd-mgmt-port	3071/tcp    # ContinuStor Manager Port
-csd-monitor     3072/udp    # ContinuStor Monitor Port
-csd-monitor     3072/tcp    # ContinuStor Monitor Port
-#                          Ray Jantz <ray.jantz at lsil.com>
-vcrp            3073/udp    # Very simple chatroom prot
-vcrp            3073/tcp    # Very simple chatroom prot
-#                          Andreas Wurf <a.wurf at mediaTools.de> 
-xbox            3074/udp    # Xbox game port
-xbox            3074/tcp    # Xbox game port
-#                          Damon Danieli <damond at microsoft.com>
-orbix-locator   3075/udp    # Orbix 2000 Locator
-orbix-locator   3075/tcp    # Orbix 2000 Locator
-orbix-config    3076/udp    # Orbix 2000 Config
-orbix-config    3076/tcp    # Orbix 2000 Config
-orbix-loc-ssl   3077/udp    # Orbix 2000 Locator SSL
-orbix-loc-ssl   3077/tcp    # Orbix 2000 Locator SSL
-orbix-cfg-ssl   3078/udp    # Orbix 2000 Locator SSL
-orbix-cfg-ssl   3078/tcp    # Orbix 2000 Locator SSL
-#                          Eric Newcomer <eric.newcomer at iona.com>
-lv-frontpanel   3079/udp    # LV Front Panel
-lv-frontpanel   3079/tcp    # LV Front Panel
-#                          Darshan Shah <darshan.shah at ni.com>
-stm_pproc	3080/udp    # stm_pproc
-stm_pproc	3080/tcp    # stm_pproc
-#			   Paul McGinnis <pmcginnis at server.stmi.com>
-tl1-lv		3081/udp    # TL1-LV
-tl1-lv		3081/tcp    # TL1-LV
-tl1-raw		3082/udp    # TL1-RAW
-tl1-raw		3082/tcp    # TL1-RAW
-tl1-telnet	3083/udp    # TL1-TELNET
-tl1-telnet	3083/tcp    # TL1-TELNET
-#			   SONET Internetworking Forum (SIF)
-#			   <bwarijsman at lucent.com> - SONET Contact
-itm-mccs        3084/udp    # ITM-MCCS
-itm-mccs        3084/tcp    # ITM-MCCS
-#                          Alain Callebaut <ac at itmasters.com>
-pcihreq         3085/udp    # PCIHReq
-pcihreq         3085/tcp    # PCIHReq
-#                          Paul Sanders <p.sanders at dial.pipex.com>
-jdl-dbkitchen   3086/udp    # JDL-DBKitchen
-jdl-dbkitchen   3086/tcp    # JDL-DBKitchen
-#                          Hideo Wakabayashi <hiwaka at alles.or.jp>
-asoki-sma       3087/udp    # Asoki SMA
-asoki-sma	3087/tcp    # Asoki SMA
-#                          Andrew Mossberg <amossberg at asoki.net>     
-xdtp            3088/udp    # eXtensible Data Transfer Protocol
-xdtp            3088/tcp    # eXtensible Data Transfer Protocol
-#                          Michael Shearson <mshearson at peerglobal.com>    
-ptk-alink       3089/udp    # ParaTek Agent Linking
-ptk-alink       3089/tcp    # ParaTek Agent Linking
-#                          Robert Hodgson <robert at paratek.co.uk> 
-rtss            3090/udp    # Rappore Session Services
-rtss            3090/tcp    # Rappore Session Services
-#                          Peter Boucher <pboucher at rappore.com>
-1ci-smcs        3091/udp    # 1Ci Server Management
-1ci-smcs        3091/tcp    # 1Ci Server Management
-#                          Ralf Bensmann <iana at 1ci.de>
-njfss           3092/udp    # Netware sync services
-njfss           3092/tcp    # Netware sync services
-#                          Gordon Ross <G.Ross at ccw.gov.uk> 
-rapidmq-center  3093/udp    # Jiiva RapidMQ Center
-rapidmq-center  3093/tcp    # Jiiva RapidMQ Center
-rapidmq-reg     3094/udp    # Jiiva RapidMQ Registry
-rapidmq-reg     3094/tcp    # Jiiva RapidMQ Registry
-#                          Mark Ericksen <mark at jiiva.com>
-panasas         3095/udp    # Panasas rendevous port
-panasas         3095/tcp    # Panasas rendevous port
-#                          Peter Berger <peterb at panasas.com>
-ndl-aps         3096/udp    # Active Print Server Port
-ndl-aps         3096/tcp    # Active Print Server Port
-#                          Martin Norman <martin at ndl.co.uk> 
-#               3097/tcp   Reserved
-#               3097/udp   Reserved
-itu-bicc-stc    3097/sctp   # ITU-T Q.1902.1/Q.2150.3
-#                          Greg Sidebottom <gregside at home.com>
-umm-port        3098/udp    # Universal Message Manager
-umm-port        3098/tcp    # Universal Message Manager
-#                          Phil Braham <phil at braham.net>
-chmd            3099/udp    # CHIPSY Machine Daemon
-chmd            3099/tcp    # CHIPSY Machine Daemon
-#                          Trond Borsting <Trond.Borsting at telelogic.com>
-opcon-xps       3100/udp    # OpCon/xps
-opcon-xps       3100/tcp    # OpCon/xps
-#                          David Bourland <DBourland at smausa.com> 
-hp-pxpib        3101/udp    # HP PolicyXpert PIB Server
-hp-pxpib        3101/tcp    # HP PolicyXpert PIB Server
-#                          Brian O'Keefe <bokeefe at cnd.hp.com>
-slslavemon      3102/udp    # SoftlinK Slave Mon Port
-slslavemon      3102/tcp    # SoftlinK Slave Mon Port
-#                          Moshe Livne <moshe at softlinkusa.com>
-autocuesmi      3103/udp    # Autocue SMI Protocol
-autocuesmi      3103/tcp    # Autocue SMI Protocol
-autocuetime     3104/udp    # Autocue Time Service
-autocuelog      3104/tcp    # Autocue Logger Protocol
-#                          Geoff Back <geoff at autocue.co.uk>
-cardbox		3105/udp    # Cardbox
-cardbox		3105/tcp    # Cardbox
-cardbox-http	3106/udp    # Cardbox HTTP
-cardbox-http	3106/tcp    # Cardbox HTTP
-#			   Martin Kochanski <martin at cardbox.co.uk>
-business    	3107/udp    # Business protocol
-business    	3107/tcp    # Business protocol
-geolocate   	3108/udp    # Geolocate protocol
-geolocate   	3108/tcp    # Geolocate protocol
-personnel   	3109/udp    # Personnel protocol
-personnel   	3109/tcp    # Personnel protocol
-#                          William Randolph Royere III 
-#                          <william at royere.net>
-sim-control     3110/udp    # simulator control port
-sim-control     3110/tcp    # simulator control port
-#                          Ian Bell <ianb at arca-technologies.com>
-wsynch          3111/udp    # Web Synchronous Services
-wsynch          3111/tcp    # Web Synchronous Services
-#                          Valery Fremaux <vf at eisti.fr>
-ksysguard       3112/udp    # KDE System Guard
-ksysguard       3112/tcp    # KDE System Guard
-#                          Chris Schlaeger <cs at kde.org>
-cs-auth-svr     3113/udp    # CS-Authenticate Svr Port
-cs-auth-svr     3113/tcp    # CS-Authenticate Svr Port
-#                          Cliff Diamond <cdiamond at crypto-solutions.co.uk>
-#                          Andy Georgiou <ageorgiou at crypto-solutions.co.uk>
-ccmad           3114/udp    # CCM AutoDiscover
-ccmad           3114/tcp    # CCM AutoDiscover
-#                          Ram Sudama <rsudama at on.com> 
-mctet-master    3115/udp    # MCTET Master
-mctet-master    3115/tcp    # MCTET Master
-mctet-gateway   3116/udp    # MCTET Gateway
-mctet-gateway   3116/tcp    # MCTET Gateway
-mctet-jserv     3117/udp    # MCTET Jserv
-mctet-jserv     3117/tcp    # MCTET Jserv
-#                          Manuel Veloso <veloso at us.itmasters.com> 
-pkagent         3118/udp    # PKAgent
-pkagent         3118/tcp    # PKAgent
-#                          Michael Douglass <mikedoug at datafoundry.net>
-d2000kernel     3119/udp    # D2000 Kernel Port
-d2000kernel     3119/tcp    # D2000 Kernel Port
-d2000webserver  3120/udp    # D2000 Webserver Port
-d2000webserver  3120/tcp    # D2000 Webserver Port 
-#                          Tomas Rajcan <trajcan at ipesoft.sk>
-epp-temp        3121/udp    # Extensible Provisioning Protocol
-epp-temp        3121/tcp    # Extensible Provisioning Protocol
-#                          Scott Hollenbeck <shollenbeck at verisign.com>
-vtr-emulator    3122/udp    # MTI VTR Emulator port
-vtr-emulator    3122/tcp    # MTI VTR Emulator port
-#                          John Mertus <mertus at mathtech.com>
-edix            3123/udp    # EDI Translation Protocol
-edix            3123/tcp    # EDI Translation Protocol
-#                          William Randolph Royere III <william at royere.net>
-beacon-port     3124/udp    # Beacon Port
-beacon-port     3124/tcp    # Beacon Port
-#                          James Paul Duncan <pduncan at beaconcrm.com>
-a13-an          3125/udp    # A13-AN Interface
-a13-an          3125/tcp    # A13-AN Interface
-#                          Douglas Knisely <dnk at lucent.com>
-ms-dotnetster   3126/udp    # Microsoft .NETster Port
-ms-dotnetster   3126/tcp    # Microsoft .NETster Port
-#                          Dave Mendlen <davemen at microsoft.com>
-ctx-bridge      3127/udp    # CTX Bridge Port
-ctx-bridge      3127/tcp    # CTX Bridge Port
-#                          Alexander Dubrovsky <dubrovsky_alex at emc.com>
-ndl-aas         3128/udp    # Active API Server Port
-ndl-aas         3128/tcp    # Active API Server Port
-#                          Martin Norman <martin at ndl.co.uk>
-netport-id      3129/udp    # NetPort Discovery Port
-netport-id      3129/tcp    # NetPort Discovery Port
-#                          P.T.K. Farrar <farrarp at teccon.co.uk>
-icpv2		3130/udp    # ICPv2
-icpv2		3130/tcp    # ICPv2
-#			   Duane Wessels <wessels at nlanr.net>
-netbookmark	3131/udp    # Net Book Mark
-netbookmark	3131/tcp    # Net Book Mark
-#			   Yiftach Ravid <yiftach at haifa.vnet.ibm.com>
-ms-rule-engine  3132/udp    # Microsoft Business Rule Engine Update Service
-ms-rule-engine  3132/tcp    # Microsoft Business Rule Engine Update Service
-#                          Anush Kumar <anushk at microsoft.com>
-prism-deploy    3133/udp    # Prism Deploy User Port
-prism-deploy    3133/tcp    # Prism Deploy User Port
-#                          Joan Linck <jlinck at lanovation.com>
-ecp             3134/udp    # Extensible Code Protocol
-ecp             3134/tcp    # Extensible Code Protocol
-#                          Jim Trek <jtrek at rochester.rr.com>
-#                          Mark Bocko <bocko at ece.rochester.edu>
-peerbook-port   3135/udp    # PeerBook Port
-peerbook-port   3135/tcp    # PeerBook Port
-#                          John Flowers <jf at gigamediaaccess.com>
-grubd           3136/udp    # Grub Server Port
-grubd           3136/tcp    # Grub Server Port
-#                          Kord Campbell <kord at grub.org>
-rtnt-1          3137/udp    # rtnt-1 data packets
-rtnt-1          3137/tcp    # rtnt-1 data packets
-rtnt-2          3138/udp    # rtnt-2 data packets
-rtnt-2          3138/tcp    # rtnt-2 data packets
-#                          Ron Muellerschoen <rjm at cobra.jpl.nasa.gov>
-incognitorv     3139/udp    # Incognito Rendez-Vous
-incognitorv     3139/tcp    # Incognito Rendez-Vous
-#                          Stephane Bourque <stephb at incognito.com>
-ariliamulti     3140/udp    # Arilia Multiplexor
-ariliamulti     3140/tcp    # Arilia Multiplexor
-#                          Stephane Bourque <sbourque at arilia.com>
-vmodem          3141/udp    # VMODEM
-vmodem          3141/tcp    # VMODEM
-#                          Ray Gwinn <p00321 at psilink.com>
-rdc-wh-eos	3142/udp    # RDC WH EOS
-rdc-wh-eos	3142/tcp    # RDC WH EOS
-#			   Udi Nir <udi_nir at ncc.co.il>
-seaview		3143/udp    # Sea View
-seaview		3143/tcp    # Sea View
-#			   Jim Flaherty <jim_e_flaherty at notes.seagate.com>
-tarantella	3144/udp    # Tarantella
-tarantella	3144/tcp    # Tarantella
-#			   Roger Binns <rogerb at sco.com>
-csi-lfap	3145/udp    # CSI-LFAP
-csi-lfap	3145/tcp    # CSI-LFAP
-#			   Paul Amsden <amsden at .ctron.com>
-bears-02        3146/udp    # bears-02
-bears-02        3146/tcp    # bears-02
-#                          Bruce McKinnon <brucemck at bearsolutions.com.au>
-rfio		3147/udp    # RFIO
-rfio		3147/tcp    # RFIO
-#			   Frederic Hemmer <Frederic.Hemmer at cern.ch>
-nm-game-admin	3148/udp    # NetMike Game Administrator
-nm-game-admin	3148/tcp    # NetMike Game Administrator
-nm-game-server	3149/udp    # NetMike Game Server
-nm-game-server	3149/tcp    # NetMike Game Server
-nm-asses-admin	3150/udp    # NetMike Assessor Administrator
-nm-asses-admin	3150/tcp    # NetMike Assessor Administrator
-nm-assessor	3151/udp    # NetMike Assessor
-nm-assessor	3151/tcp    # NetMike Assessor
-#			   Andrew Sharpe <help at smartsims.com>
-feitianrockey   3152/udp    # FeiTian Port
-feitianrockey   3152/tcp    # FeiTian Port
-#                          Huang Yu <llw at ftsafe.com>
-s8-client-port  3153/udp    # S8Cargo Client Port
-s8-client-port  3153/tcp    # S8Cargo Client Port
-#                          Jon S. Kyle <JKyle at SpeedwaySoftware.com>
-ccmrmi		3154/udp    # ON RMI Registry
-ccmrmi          3154/tcp    # ON RMI Registry
-#                          Ram Sudama <rsudama at on.com>
-jpegmpeg        3155/udp    # JpegMpeg Port
-jpegmpeg        3155/tcp    # JpegMpeg Port
-#                          Richard Bassous <rbassous at yahoo.com>
-indura          3156/udp    # Indura Collector
-indura          3156/tcp    # Indura Collector
-#                          Bruce Kosbab <bruce.kosbab at indurasoft.com>
-e3consultants   3157/udp    # CCC Listener Port
-e3consultants   3157/tcp    # CCC Listener Port
-#                          Brian Carnell <brian at e3consultants.com>
-stvp            3158/udp    # SmashTV Protocol
-stvp            3158/tcp    # SmashTV Protocol
-#                          Christian Wolff <stvp at smash.tv>
-navegaweb-port  3159/udp    # NavegaWeb Tarification
-navegaweb-port  3159/tcp    # NavegaWeb Tarification
-#                          Miguel Angel Fernandez <mafg at tid.es>
-tip-app-server  3160/udp    # TIP Application Server
-tip-app-server  3160/tcp    # TIP Application Server
-#                          Olivier Mascia <om at tipgroup.com>
-doc1lm          3161/udp    # DOC1 License Manager
-doc1lm          3161/tcp    # DOC1 License Manager
-#                          Greg Goodson <ggoodson at group1software.co.uk>
-sflm            3162/udp    # SFLM
-sflm            3162/tcp    # SFLM
-#                          Keith Turner <support at silvaco.com>
-res-sap         3163/udp    # RES-SAP
-res-sap		3163/tcp    # RES-SAP
-#                          Bob Janssen <bob at res.nl>
-imprs           3164/udp    # IMPRS
-imprs		3164/tcp    # IMPRS
-#                          Lars Bohn <Lars.Bohn at nokia.com>
-newgenpay       3165/udp    # Newgenpay Engine Service
-newgenpay       3165/tcp    # Newgenpay Engine Service
-#                          Ilan Zisser <ilan at newgenpay.com>
-qrepos          3166/udp    # Quest Repository
-qrepos          3166/tcp    # Quest Repository
-#                          Fred Surr <quest_iana at oz.quest.com>
-poweroncontact  3167/udp    # poweroncontact
-poweroncontact  3167/tcp    # poweroncontact
-poweronnud      3168/udp    # poweronnud
-poweronnud      3168/tcp    # poweronnud
-#                          Paul Cone <paul at poweronsoftware.com>
-serverview-as   3169/udp    # SERVERVIEW-AS
-serverview-as	3169/tcp    # SERVERVIEW-AS
-serverview-asn  3170/udp    # SERVERVIEW-ASN
-serverview-asn  3170/tcp    # SERVERVIEW-ASN
-serverview-gf   3171/udp    # SERVERVIEW-GF
-serverview-gf   3171/tcp    # SERVERVIEW-GF
-serverview-rm   3172/udp    # SERVERVIEW-RM
-serverview-rm   3172/tcp    # SERVERVIEW-RM
-serverview-icc  3173/udp    # SERVERVIEW-ICC
-serverview-icc  3173/tcp    # SERVERVIEW-ICC
-#                          Guenther Kroenert 
-#                          <Guenther.Kroenert at fujitsu-siemens.com>
-armi-server     3174/udp    # ARMI Server
-armi-server     3174/tcp    # ARMI Server
-#                          Bobby Martin <bobbymartin at hotmail.com>
-t1-e1-over-ip   3175/udp    # T1_E1_Over_IP
-t1-e1-over-ip   3175/tcp    # T1_E1_Over_IP
-#                          Mark Doyle <mark at engagecom.com>
-ars-master      3176/udp    # ARS Master
-ars-master      3176/tcp    # ARS Master
-#                          Ade Adebayo <ade at us.itmasters.com>
-phonex-port     3177/udp    # Phonex Protocol
-phonex-port     3177/tcp    # Phonex Protocol
-#                          Doug Grover <dgrover at phonex.com>
-radclientport   3178/udp    # Radiance UltraEdge Port
-radclientport   3178/tcp    # Radiance UltraEdge Port
-#                          Sri Subramaniam <sri at radiance.com>
-h2gf-w-2m       3179/udp    # H2GF W.2m Handover prot.
-h2gf-w-2m       3179/tcp    # H2GF W.2m Handover prot.
-#                          Arne Norefors <Arne.Norefors at ericsson.com>
-mc-brk-srv	3180/udp    # Millicent Broker Server
-mc-brk-srv	3180/tcp    # Millicent Broker Server
-#			   Steve Glassman <steveg at pa.dec.com>
-bmcpatrolagent  3181/udp    # BMC Patrol Agent
-bmcpatrolagent	3181/tcp    # BMC Patrol Agent
-bmcpatrolrnvu   3182/udp    # BMC Patrol Rendezvous
-bmcpatrolrnvu	3182/tcp    # BMC Patrol Rendezvous
-#			   Eric Anderson <eric_anderson at bmc.com>
-cops-tls        3183/udp    # COPS/TLS
-cops-tls        3183/tcp    # COPS/TLS
-#                          Mark Stevens <mstevens at ellacoya.com>
-apogeex-port    3184/udp    # ApogeeX Port
-apogeex-port    3184/tcp    # ApogeeX Port
-#                          Tom Nys <tom.nys.tn at belgium.agfa.com>
-smpppd          3185/udp    # SuSE Meta PPPD
-smpppd          3185/tcp    # SuSE Meta PPPD
-#                          Arvin Schnell <arvin at suse.de>
-iiw-port        3186/udp    # IIW Monitor User Port
-iiw-port        3186/tcp    # IIW Monitor User Port
-#                          Corey Burnett <corey.burnett at biopop.com>
-odi-port        3187/udp    # Open Design Listen Port
-odi-port        3187/tcp    # Open Design Listen Port
-#                          Phivos Aristides <phivos at opendesign.com>
-brcm-comm-port  3188/udp    # Broadcom Port
-brcm-comm-port  3188/tcp    # Broadcom Port
-#                          Thomas L. Johnson <tjohnson at broadcom.com>
-pcle-infex      3189/udp    # Pinnacle Sys InfEx Port
-pcle-infex      3189/tcp    # Pinnacle Sys InfEx Port
-#                          Anthon van der Neut <anthon at mnt.org>
-csvr-proxy      3190/udp    # ConServR Proxy
-csvr-proxy      3190/tcp    # ConServR Proxy
-csvr-sslproxy   3191/udp    # ConServR SSL Proxy
-csvr-sslproxy   3191/tcp    # ConServR SSL Proxy
-#                          Mikhail Kruk <mkruk at biscom.com>
-firemonrcc      3192/udp    # FireMon Revision Control
-firemonrcc      3192/tcp    # FireMon Revision Control
-#                          Michael Bishop <mbishop at fishnetsecurity.com>
-cordataport     3193/udp    # Cordaxis Data Port
-cordataport     3193/tcp    # Cordaxis Data Port
-#                          Jay Fesco <jay at cordaxis.com>
-magbind         3194/udp    # Rockstorm MAG protocol
-magbind         3194/tcp    # Rockstorm MAG protocol
-#                          Jens Nilsson <jens at rockstorm.se>
-ncu-1           3195/udp    # Network Control Unit
-ncu-1           3195/tcp    # Network Control Unit
-ncu-2           3196/udp    # Network Control Unit
-ncu-2           3196/tcp    # Network Control Unit
-#                          Charlie Hundre <charlie at rdsrv.reco.com.tw>
-embrace-dp-s    3197/udp    # Embrace Device Protocol Server
-embrace-dp-s    3197/tcp    # Embrace Device Protocol Server
-embrace-dp-c    3198/udp    # Embrace Device Protocol Client
-embrace-dp-c    3198/tcp    # Embrace Device Protocol Client
-#                          Elliot Schwartz <elliot at embracenetworks.com>
-dmod-workspace  3199/udp    # DMOD WorkSpace
-dmod-workspace  3199/tcp    # DMOD WorkSpace
-#                          Nick Plante <nplante at dmod.com>
-tick-port       3200/udp    # Press-sense Tick Port
-tick-port       3200/tcp    # Press-sense Tick Port
-#                          Boris Svetlitsky <boris at press-sense.com>
-cpq-tasksmart   3201/udp    # CPQ-TaskSmart
-cpq-tasksmart   3201/tcp    # CPQ-TaskSmart
-#                          Jackie Lau <jackie.lau at compaq.com>
-intraintra      3202/udp    # IntraIntra
-intraintra      3202/tcp    # IntraIntra
-#                          Matthew Asham <matthewa at bcwireless.net>
-netwatcher-mon  3203/udp    # Network Watcher Monitor
-netwatcher-mon  3203/tcp    # Network Watcher Monitor
-netwatcher-db   3204/udp    # Network Watcher DB Access
-netwatcher-db   3204/tcp    # Network Watcher DB Access
-#                          Hirokazu Fujisawa <fujisawa at pfu.fujitsu.com>
-isns            3205/udp    # iSNS Server Port
-isns            3205/tcp    # iSNS Server Port
-#                          Josh Tseng <jtseng at nishansystems.com>
-ironmail        3206/udp    # IronMail POP Proxy
-ironmail        3206/tcp    # IronMail POP Proxy
-#                          Mike Hudack <mike at mhudack.com>
-vx-auth-port    3207/udp    # Veritas Authentication Port
-vx-auth-port    3207/tcp    # Veritas Authentication Port
-#                          Senthil Ponnuswamy <senthil at veritas.com>
-pfu-prcallback  3208/udp    # PFU PR Callback
-pfu-prcallback  3208/tcp    # PFU PR Callback
-#                          Tetsuharu Hanada <hanada at pfu.fujitsu.com>
-netwkpathengine 3209/udp    # HP OpenView Network Path Engine Server
-netwkpathengine 3209/tcp    # HP OpenView Network Path Engine Server
-#                          Anthony Walker <anthony_walker at hp.com>
-flamenco-proxy  3210/udp    # Flamenco Networks Proxy
-flamenco-proxy  3210/tcp    # Flamenco Networks Proxy
-#                          Corey Corrick <corey.corrick at flamenconetworks.com>
-avsecuremgmt    3211/udp    # Avocent Secure Management
-avsecuremgmt    3211/tcp    # Avocent Secure Management
-#                          Brian S. Stewart <Brian.Stewart at Avocent.com>
-surveyinst      3212/udp    # Survey Instrument
-surveyinst      3212/tcp    # Survey Instrument
-#                          Al Amet <aamet at point-inc.com>
-neon24x7        3213/udp    # NEON 24X7 Mission Control
-neon24x7        3213/tcp    # NEON 24X7 Mission Control
-#                          Tony Lubrano <tlubrano at neonsys.com>
-jmq-daemon-1    3214/udp    # JMQ Daemon Port 1
-jmq-daemon-1    3214/tcp    # JMQ Daemon Port 1
-jmq-daemon-2    3215/udp    # JMQ Daemon Port 2
-jmq-daemon-2    3215/tcp    # JMQ Daemon Port 2
-#                          Martin West <Martin.West at spirit-soft.com>
-ferrari-foam    3216/udp    # Ferrari electronic FOAM
-ferrari-foam    3216/tcp    # Ferrari electronic FOAM
-#                          Johann Deutinger <deutinger at ferrari-electronic.de>
-unite           3217/udp    # Unified IP & Telecomm Env
-unite           3217/tcp    # Unified IP & Telecomm Env
-#                          Christer Gunnarsson
-#                          <christer.gunnarsson at ascomtateco.se>
-smartpackets    3218/udp    # EMC SmartPackets
-smartpackets    3218/tcp    # EMC SmartPackets
-#                          Steve Spataro <spataro_steve at emc.com>
-wms-messenger   3219/udp    # WMS Messenger
-wms-messenger   3219/tcp    # WMS Messenger
-#                          Michael Monasterio <michael at wmsoftware.com>
-xnm-ssl         3220/udp    # XML NM over SSL
-xnm-ssl         3220/tcp    # XML NM over SSL
-xnm-clear-text  3221/udp    # XML NM over TCP
-xnm-clear-text  3221/tcp    # XML NM over TCP
-#                          Mark Trostler <trostler at juniper.net>
-glbp            3222/udp    # Gateway Load Balancing Pr
-glbp            3222/tcp    # Gateway Load Balancing Pr
-#                          Douglas McLaggan <glbp-info at cisco.com>
-digivote        3223/udp    # DIGIVOTE (R) Vote-Server
-digivote        3223/tcp    # DIGIVOTE (R) Vote-Server
-#                          Christian Treczoks <ct at braehler.com>
-aes-discovery   3224/udp    # AES Discovery Port
-aes-discovery   3224/tcp    # AES Discovery Port
-#                          Ken Richard <kenr at aeseducation.com>              
-fcip-port       3225/udp    # FCIP
-fcip-port       3225/tcp    # FCIP
-#                          RFC-ietf-ips-fcovertcpip-12.txt
-isi-irp         3226/udp    # ISI Industry Software IRP
-isi-irp         3226/tcp    # ISI Industry Software IRP
-#                          Peter Sandstrom <peter.sandstrom at tassen.fi>
-dwnmshttp       3227/udp    # DiamondWave NMS Server
-dwnmshttp       3227/tcp    # DiamondWave NMS Server
-dwmsgserver     3228/udp    # DiamondWave MSG Server
-dwmsgserver     3228/tcp    # DiamondWave MSG Server
-#                          Varma Bhupatiraju <varma at calient.net>
-global-cd-port  3229/udp    # Global CD Port
-global-cd-port  3229/tcp    # Global CD Port
-#                          Vitaly Revsin <vitaly at netapp.com>
-sftdst-port     3230/udp    # Software Distributor Port
-sftdst-port     3230/tcp    # Software Distributor Port
-#                          Andrea Lanza <andrea.lanza at frameweb.it>
-dsnl            3231/udp    # Delta Solutions Direct
-dsnl            3231/tcp    # Delta Solutions Direct
-#                          Peter Ijkhout <peter at deltasolutions.nl>
-mdtp            3232/udp    # MDT port
-mdtp            3232/tcp    # MDT port
-#                          IJsbrand Wijnands <ice at cisco.com>
-whisker         3233/udp    # WhiskerControl main port
-whisker         3233/tcp    # WhiskerControl main port
-#                          Rudolf Cardinal <rudolf at pobox.com> February 2002
-alchemy         3234/udp    # Alchemy Server
-alchemy         3234/tcp    # Alchemy Server 
-#                          Mikhail Belov <mikhail at imrgold.com> February 2002
-mdap-port       3235/udp    # MDAP Port
-mdap-port       3235/tcp    # MDAP port
-#                          Johan Deleu <johan.deleu at alcatel.be> February 2002
-apparenet-ts    3236/udp    # appareNet Test Server
-apparenet-ts    3236/tcp    # appareNet Test Server
-apparenet-tps   3237/udp    # appareNet Test Packet Sequencer
-apparenet-tps   3237/tcp    # appareNet Test Packet Sequencer
-apparenet-as    3238/udp    # appareNet Analysis Server
-apparenet-as    3238/tcp    # appareNet Analysis Server
-apparenet-ui    3239/udp    # appareNet User Interface
-apparenet-ui    3239/tcp    # appareNet User Interface
-#                          Fred Klassen <fklassen at jaalam.com> February 2002
-triomotion      3240/udp    # Trio Motion Control Port
-triomotion      3240/tcp    # Trio Motion Control Port
-#                          Tony Matthews <tmatthews at triomotion.com> February 2002
-sysorb          3241/udp    # SysOrb Monitoring Server
-sysorb          3241/tcp    # SysOrb Monitoring Server
-#                          Jakob Oestergaard <joe at sysorb.com> February 2002
-sdp-id-port     3242/udp    # Session Description ID
-sdp-id-port     3242/tcp    # Session Description ID
-#                          Greg Rose <ggr at qualcomm.com> February 2002
-timelot         3243/udp    # Timelot Port
-timelot         3243/tcp    # Timelot Port
-#                          David Ferguson <dferguson at xtralot.com> February 2002
-onesaf          3244/udp    # OneSAF
-onesaf          3244/tcp    # OneSAF
-#                          Gene McCulley <mcculley at cuspy.com> February 2002
-vieo-fe         3245/udp    # VIEO Fabric Executive
-vieo-fe         3245/tcp    # VIEO Fabric Executive
-#                          James Cox <jocox at view.com> February 2002
-dvt-system      3246/udp    # DVT SYSTEM PORT
-dvt-system      3246/tcp    # DVT SYSTEM PORT
-dvt-data        3247/udp    # DVT DATA LINK
-dvt-data        3247/tcp    # DVT DATA LINK
-#                          Phillip Heil <phil.heil at dvtsensors.com> February 2002
-procos-lm       3248/udp    # PROCOS LM
-procos-lm       3248/tcp    # PROCOS LM
-#                          Torsten Rendelmann
-#                          <torsten.rendelmann at procos.com> February 2002
-ssp             3249/udp    # State Sync Protocol
-ssp             3249/tcp    # State Sync Protocol
-#                          Stephane Beaulieu <stephane at cisco.com> February 2002
-hicp            3250/udp    # HMS hicp port
-hicp            3250/tcp    # HMS hicp port
-#                          Joel Palsson, HMS Industrial Networks AB
-#                          <ianacontact at hms.se> February 2002
-sysscanner      3251/udp    # Sys Scanner
-sysscanner      3251/tcp    # Sys Scanner
-#                          Dick Georges <georges at monaco.net> February 2002
-dhe             3252/udp    # DHE port
-dhe             3252/tcp    # DHE port
-#                          Fabrizio Massimo Ferrara <fmf at gesi.it> February 2002
-pda-data        3253/udp    # PDA Data
-pda-data        3253/tcp    # PDA Data
-pda-sys         3254/udp    # PDA System
-pda-sys         3254/tcp    # PDA System
-#                          Jian Fan <fjian at dmfsys.com> February 2002
-semaphore       3255/udp    # Semaphore Connection Port
-semaphore       3255/tcp    # Semaphore Connection Port
-#                          Jay Eckles <ecklesweb at yahoo.com> February 2002
-cpqrpm-agent    3256/udp    # Compaq RPM Agent Port
-cpqrpm-agent    3256/tcp    # Compaq RPM Agent Port
-cpqrpm-server   3257/udp    # Compaq RPM Server Port
-cpqrpm-server   3257/tcp    # Compaq RPM Server Port
-#                          Royal King <royal.king at compaq.com> February 2002
-ivecon-port     3258/udp    # Ivecon Server Port
-ivecon-port     3258/tcp    # Ivecon Server Port
-#                          Serguei Tevs <STevs at ivecon.com> February 2002
-epncdp2         3259/udp    # Epson Network Common Devi
-epncdp2         3259/tcp    # Epson Network Common Devi
-#                          SEIKO EPSON Corporation - Oishi Toshiaki
-#                          <Oishi.Toshiaki at exc.epson.co.jp> February 2002
-iscsi-target    3260/udp    # iSCSI port
-iscsi-target    3260/tcp    # iSCSI port
-#                          Julian Satran <Julian_Satran at il.ibm.com>
-winshadow       3261/udp    # winShadow
-winshadow       3261/tcp    # winShadow
-#                          Colin Barry <cbarry at gbahn.com>
-necp            3262/udp    # NECP
-necp            3262/tcp    # NECP
-#                          Alberto Cerpa <cerpa at isi.edu>
-ecolor-imager   3263/udp    # E-Color Enterprise Imager
-ecolor-imager   3263/tcp    # E-Color Enterprise Imager
-#                          Tamara Baker <tbaker at ecolor.com>
-ccmail          3264/udp    # cc:mail/lotus
-ccmail          3264/tcp    # cc:mail/lotus
-#                          <brockman at ccmail.com>
-altav-tunnel    3265/udp    # Altav Tunnel
-altav-tunnel    3265/tcp    # Altav Tunnel
-#                          Gary M. Allen <gallen at symantec.com>
-ns-cfg-server   3266/udp    # NS CFG Server
-ns-cfg-server   3266/tcp    # NS CFG Server
-#                          Aivi Lie <LIEA at netsoft.com>
-ibm-dial-out    3267/udp    # IBM Dial Out
-ibm-dial-out    3267/tcp    # IBM Dial Out
-#                          Skip Booth <sbooth at VNET.IBM.COM>
-msft-gc         3268/udp    # Microsoft Global Catalog
-msft-gc         3268/tcp    # Microsoft Global Catalog
-msft-gc-ssl     3269/udp    # Microsoft Global Catalog with LDAP/SSL
-msft-gc-ssl     3269/tcp    # Microsoft Global Catalog with LDAP/SSL
-#                          Asaf Kashi <asafk at microsoft.com>
-verismart       3270/udp    # Verismart
-verismart       3270/tcp    # Verismart
-#                          Jay Weber <weber at vfi.com>
-csoft-prev      3271/udp    # CSoft Prev Port
-csoft-prev      3271/tcp    # CSoft Prev Port
-#                          Nedelcho Stanev <decho at iname.com>
-user-manager    3272/udp    # Fujitsu User Manager
-user-manager    3272/tcp    # Fujitsu User Manager
-#                          Yukihiko Sakurai <y-sakurai at ael.fujitsu.co.jp>
-sxmp            3273/udp    # Simple Extensible Multiplexed Protocol
-sxmp            3273/tcp    # Simple Extensible Multiplexed Protocol
-#                          Stuart Newman <stuart.newman at fortel.com>
-ordinox-server  3274/udp    # Ordinox Server
-ordinox-server  3274/tcp    # Ordinox Server
-#                          Guy Letourneau <gletourneau at ordinox.com>
-samd            3275/udp    # SAMD
-samd            3275/tcp    # SAMD
-#                          Edgar Circenis <ec at fc.hp.com>
-maxim-asics	3276/udp    # Maxim ASICs
-maxim-asics	3276/tcp    # Maxim ASICs
-#			   Dave Inman <davei at mxim.com>
-awg-proxy	3277/udp    # AWG Proxy
-awg-proxy	3277/tcp    # AWG Proxy
-#			   Alex McDonald <alexm at an.hp.com>
-lkcmserver	3278/udp    # LKCM Server
-lkcmserver	3278/tcp    # LKCM Server
-#			   Javier Jimenez
-admind		3279/udp    # admind
-admind		3279/tcp    # admind
-#			   Jeff Haynes <haynes at chistech.com>
-vs-server	3280/udp    # VS Server
-vs-server	3280/tcp    # VS Server
-#			   Scott Godlew <Scott at godlew.com>
-sysopt 		3281/udp    # SYSOPT
-sysopt		3281/tcp    # SYSOPT
-#			   Tony Hoffman <ajh at unx.dec.com>
-datusorb	3282/udp    # Datusorb
-datusorb	3282/tcp    # Datusorb
-#			   Thomas Martin <thomas at datus-usa.com>
-net-assistant	3283/udp    # Net Assistant
-net-assistant	3283/tcp    # Net Assistant
-#			   Michael Stein <mvs at apple.com>
-4talk		3284/udp    # 4Talk
-4talk		3284/tcp    # 4Talk
-#			   Tony Bushnell <tony_bushnell at four-sight.co.uk>
-plato		3285/udp    # Plato
-plato		3285/tcp    # Plato
-#			   Jim Battin <battin at tro.com>
-e-net		3286/udp    # E-Net
-e-net		3286/tcp    # E-Net
-#			   Steven Grigsby <sgrigsby at austin.eent.com>
-directvdata	3287/udp    # DIRECTVDATA
-directvdata	3287/tcp    # DIRECTVDATA
-#			   Michael Friedman <mfr1 at worldnet.att.net>
-cops 		3288/udp    # COPS
-cops		3288/tcp    # COPS
-#			   Shai Herzog <herzog at iphighway.com>
-enpc		3289/udp    # ENPC
-enpc		3289/tcp    # ENPC
-#			   SEIKO EPSON <Ishida.Hitoshi at exc.epson.co.jp>
-caps-lm		3290/udp    # CAPS LOGISTICS TOOLKIT - LM
-caps-lm		3290/tcp    # CAPS LOGISTICS TOOLKIT - LM
-#			   Joseph Krebs <joek at caps.com>
-sah-lm		3291/udp    # S A Holditch & Associates - LM
-sah-lm		3291/tcp    # S A Holditch & Associates - LM
-#			   Randy Hudgens <rhh at nmail.holditch.com>
-cart-o-rama	3292/udp    # Cart O Rama
-cart-o-rama	3292/tcp    # Cart O Rama
-#			   Phillip Dillinger <Phillip.Dillinger at sealabs.com>
-fg-fps		3293/udp    # fg-fps
-fg-fps		3293/tcp    # fg-fps
-fg-gip		3294/udp    # fg-gip
-fg-gip		3294/tcp    # fg-gip
-#			   Jean-Marc Frailong <jmf at freegate.net>
-dyniplookup	3295/udp    # Dynamic IP Lookup
-dyniplookup	3295/tcp    # Dynamic IP Lookup
-#			   Eugene Osovetsky <eugeneo at geocities.com>
-rib-slm		3296/udp    # Rib License Manager
-rib-slm		3296/tcp    # Rib License Manager
-#			   Kristean Heisler <kh at rib.de>
-cytel-lm	3297/udp    # Cytel License Manager
-cytel-lm	3297/tcp    # Cytel License Manager
-#			   Yogesh P. Gajjar <yogesh at cytel.com>
-deskview        3298/udp    # DeskView
-deskview        3298/tcp    # DeskView
-#                          Manfred Randelzofer 
-#                          <manfred.randelzofer at fujitsu-siemens.com>
-pdrncs		3299/udp    # pdrncs
-pdrncs		3299/tcp    # pdrncs
-#			   Paul Wissenbach <paulwi at vnd.tek.com>
-###########	3300-3301  Unauthorized Use by SAP R/3   ######
-mcs-fastmail	3302/udp    # MCS Fastmail
-mcs-fastmail	3302/tcp    # MCS Fastmail
-#			   Patti Jo Newsom <pjn at mcsdallas.com>
-opsession-clnt  3303/udp    # OP Session Client
-opsession-clnt	3303/tcp    # OP Session Client
-opsession-srvr  3304/udp    # OP Session Server
-opsession-srvr  3304/tcp    # OP Session Server
-#			   Amir Blich <amir at netmanage.co.il>
-odette-ftp	3305/udp    # ODETTE-FTP
-odette-ftp	3305/tcp    # ODETTE-FTP
-#			   David Nash <dnash at ford.com>
-mysql		3306/udp    # MySQL
-mysql		3306/tcp    # MySQL
-#			   Monty <monty at analytikerna.se>
-opsession-prxy	3307/udp    # OP Session Proxy
-opsession-prxy	3307/tcp    # OP Session Proxy
-#			   Amir Blich <amir at netmanage.co.il>
-tns-server	3308/udp    # TNS Server
-tns-server	3308/tcp    # TNS Server
-tns-adv		3309/udp    # TNS ADV
-tns-adv		3309/tcp    # TNS ADV
-#			   Jerome Albin <albin at taec.enet.dec.com>
-dyna-access	3310/udp    # Dyna Access
-dyna-access	3310/tcp    # Dyna Access
-#			   Dave Belliveau
-#			   <DaveBelliveau at cornerstonesoftware.com>
-mcns-tel-ret	3311/udp    # MCNS Tel Ret
-mcns-tel-ret	3311/tcp    # MCNS Tel Ret
-#			   Randall Atkinson <rja at home.net>
-appman-server   3312/udp    # Application Management Server
-appman-server   3312/tcp    # Application Management Server
-uorb            3313/udp    # Unify Object Broker
-uorb            3313/tcp    # Unify Object Broker
-uohost          3314/udp    # Unify Object Host
-uohost          3314/tcp    # Unify Object Host
-#                          Duane Gibson <ianaportmaster at unify.com>
-cdid		3315/udp    # CDID
-cdid		3315/tcp    # CDID
-#			   Andrew Borisov <hdr at chat.ru>
-aicc-cmi	3316/udp    # AICC/CMI
-aicc-cmi	3316/tcp    # AICC/CMI
-#			   William McDonald <billmc at atc.boeing.com>
-vsaiport	3317/udp    # VSAI PORT
-vsaiport	3317/tcp    # VSAI PORT
-#			   Rieko Asai <asai at isl.mei.co.jp>
-ssrip		3318/udp    # Swith to Swith Routing Information Protocol
-ssrip		3318/tcp    # Swith to Swith Routing Information Protocol
-#			   Baba Hidekazu <baba at flare.nd.net.fujitsu.co.jp>
-sdt-lmd		3319/udp    # SDT License Manager
-sdt-lmd		3319/tcp    # SDT License Manager
-#			   Salvo Nassisi <sdtech at tin.it>
-officelink2000	3320/udp    # Office Link 2000
-officelink2000	3320/tcp    # Office Link 2000
-#			   Mike Balch <mbalch at teltone.com>
-vnsstr		3321/udp    # VNSSTR
-vnsstr		3321/tcp    # VNSSTR
-#			   Takeshi Ohmura <ohmura at isl.mei.co.jp>
-#			   Bob Braden <braden at isi.edu>
-sftu		3326/udp    # SFTU
-sftu		3326/tcp    # SFTU
-#		   Eduardo Rosenberg de Moura <eduardor at spacenet.com.br>
-bbars		3327/udp    # BBARS
-bbars		3327/tcp    # BBARS
-#			   Lou Harris <lharris at outlx.bandl.com>
-egptlm		3328/udp    # Eaglepoint License Manager
-egptlm		3328/tcp    # Eaglepoint License Manager
-#			   Dave Benton <dave.benton at eaglepoint.com>
-hp-device-disc  3329/udp    # HP Device Disc
-hp-device-disc  3329/tcp    # HP Device Disc
-#			   Shivaun Albright <shivaun_albright at hp.com>
-mcs-calypsoicf  3330/udp    # MCS Calypso ICF
-mcs-calypsoicf  3330/tcp    # MCS Calypso ICF
-mcs-messaging	3331/udp    # MCS Messaging
-mcs-messaging	3331/tcp    # MCS Messaging
-mcs-mailsvr	3332/udp    # MCS Mail Server
-mcs-mailsvr	3332/tcp    # MCS Mail Server
-#			   Patti Jo Newsom <pjn at mcsdallas.com>
-dec-notes       3333/udp    # DEC Notes
-dec-notes       3333/tcp    # DEC Notes
-#                          Kim Moraros <moraros at via.enet.dec.com>
-directv-web	3334/udp    # Direct TV Webcasting
-directv-web	3334/tcp    # Direct TV Webcasting
-directv-soft	3335/udp    # Direct TV Software Updates
-directv-soft	3335/tcp    # Direct TV Software Updates
-directv-tick	3336/udp    # Direct TV Tickers
-directv-tick	3336/tcp    # Direct TV Tickers
-directv-catlg	3337/udp    # Direct TV Data Catalog
-directv-catlg	3337/tcp    # Direct TV Data Catalog
-#			   Michael Friedman <mfr1 at worldnet.att.net>
-anet-b		3338/udp    # OMF data b
-anet-b		3338/tcp    # OMF data b
-anet-l		3339/udp    # OMF data l
-anet-l		3339/tcp    # OMF data l
-anet-m		3340/udp    # OMF data m
-anet-m		3340/tcp    # OMF data m
-anet-h		3341/udp    # OMF data h
-anet-h		3341/tcp    # OMF data h
-#			   Per Sahlqvist <psahlqvi at sw.seisy.abb.se>
-webtie		3342/udp    # WebTIE
-webtie		3342/tcp    # WebTIE
-#			   Kevin Frender <kbf at ngdc.noaa.gov>
-ms-cluster-net	3343/udp    # MS Cluster Net
-ms-cluster-net	3343/tcp    # MS Cluster Net
-#			   Mike Massa <mikemas at microsoft.com>
-bnt-manager     3344/udp    # BNT Manager
-bnt-manager     3344/tcp    # BNT Manager
-#                          Brian J. Ives <Brian.Ives at BadgerNT.com>
-influence	3345/udp    # Influence
-influence	3345/tcp    # Influence
-#			   Russ Ferriday <russf at topia.com>
-trnsprntproxy   3346/udp    # Trnsprnt Proxy
-trnsprntproxy	3346/tcp    # Trnsprnt Proxy
-#			   Grant Kirby <grant_kirby at ccm.al.intel.com>
-phoenix-rpc	3347/udp    # Phoenix RPC
-phoenix-rpc	3347/tcp    # Phoenix RPC
-#			   Ian Anderson <ian_anderson at phoenix.com>
-pangolin-laser	3348/udp    # Pangolin Laser
-pangolin-laser	3348/tcp    # Pangolin Laser
-#			   William Benner <William_Benner at msn.com>
-chevinservices  3349/udp    # Chevin Services
-chevinservices	3349/tcp    # Chevin Services
-#			   Gus McNaughton <gus at chevin.com>
-findviatv	3350/udp    # FINDVIATV
-findviatv	3350/tcp    # FINDVIATV
-#			   Oran Davis <oran at 8x8.com>
-btrieve         3351/udp    # Btrieve port
-btrieve         3351/tcp    # Btrieve port
-ssql            3352/udp    # Scalable SQL
-ssql            3352/tcp    # Scalable SQL
-#                          Chuck Talk <ctalk at pervasive.com>
-fatpipe		3353/udp    # FATPIPE
-fatpipe		3353/tcp    # FATPIPE
-#			   Sanchaita Datta <sdatta at ragula.com>
-suitjd		3354/udp    # SUITJD
-suitjd		3354/tcp    # SUITJD
-#			   Todd Moyer <tsm at unx.dec.com>
-ordinox-dbase	3355/udp    # Ordinox Dbase
-ordinox-dbase	3355/tcp    # Ordinox Dbase
-#			   Guy Litourneau <gletourneau at ordinox.com>
-upnotifyps	3356/udp    # UPNOTIFYPS
-upnotifyps	3356/tcp    # UPNOTIFYPS
-#			   Mark Fox <markf at uplanet.com>
-adtech-test	3357/udp    # Adtech Test IP
-adtech-test	3357/tcp    # Adtech Test IP
-#			   Robin Uyeshiro <robin_u at adtech-inc.com>
-mpsysrmsvr	3358/udp    # Mp Sys Rmsvr
-mpsysrmsvr	3358/tcp    # Mp Sys Rmsvr
-#			   Hiroyuki Kawabuchi <buchi at ael.fujitsu.co.jp>   
-wg-netforce	3359/udp    # WG NetForce
-wg-netforce	3359/tcp    # WG NetForce
-#			   Lee Wheat <wheat at wg.com>
-kv-server	3360/udp    # KV Server
-kv-server	3360/tcp    # KV Server
-kv-agent	3361/udp    # KV Agent
-kv-agent	3361/tcp    # KV Agent 
-#			   Thomas Soranno <tom_soranno at cipartners.com>
-dj-ilm		3362/udp    # DJ ILM
-dj-ilm		3362/tcp    # DJ ILM
-#			   Don Tyson
-nati-vi-server	3363/udp    # NATI Vi Server
-nati-vi-server	3363/tcp    # NATI Vi Server
-#			   Robert Dye <rob at natinst.com>
-creativeserver	3364/udp    # Creative Server
-creativeserver	3364/tcp    # Creative Server
-contentserver	3365/udp    # Content Server
-contentserver	3365/tcp    # Content Server
-creativepartnr	3366/udp    # Creative Partner
-creativepartnr	3366/tcp    # Creative Partner
-#			   Jesus Ortiz <Jesus_A._Ortiz at notes.emotion.com>
-#			   Scott Engel <ScottX_Engel at ccm.jf.intel.com>
-tip2		3372/udp    # TIP 2
-tip2		3372/tcp    # TIP 2
-#			   Keith Evans <keith at loc252.tandem.com>
-lavenir-lm	3373/udp    # Lavenir License Manager
-lavenir-lm	3373/tcp    # Lavenir License Manager
-#			   Marius Matioc <marius at lavenir.com>
-cluster-disc	3374/udp    # Cluster Disc
-cluster-disc	3374/tcp    # Cluster Disc
-#			   Jeff Hughes <Jeff.Hughes at columbiasc.ncr.com>
-vsnm-agent      3375/udp    # VSNM Agent
-vsnm-agent	3375/tcp    # VSNM Agent
-#			   Venkat Rangan <venkatr at vitalsigns.com>
-cdbroker	3376/udp    # CD Broker
-cdbroker	3376/tcp    # CD Broker
-#			   Moon Ho Chung <mchung at esps.com>
-cogsys-lm	3377/udp    # Cogsys Network License Manager
-cogsys-lm	3377/tcp    # Cogsys Network License Manager
-#			   Simon Chinnick <support at cogsys.co.uk>
-wsicopy		3378/udp    # WSICOPY
-wsicopy		3378/tcp    # WSICOPY
-#			   James Overby
-socorfs		3379/udp    # SOCORFS
-socorfs		3379/tcp    # SOCORFS
-#			   Hugo Charbonneau
-sns-channels	3380/udp    # SNS Channels
-sns-channels	3380/tcp    # SNS Channels
-#			   Shekar Pasumarthi <shekarp at firstfloor.com>
-geneous		3381/udp    # Geneous
-geneous		3381/tcp    # Geneous
-#			   Nick de Smith <nick.desmith at histech.com>
-fujitsu-neat	3382/udp    # Fujitsu Network Enhanced Antitheft function
-fujitsu-neat	3382/tcp    # Fujitsu Network Enhanced Antitheft function
-#			   Markku Viima <markku.viima at team.icl.se>
-esp-lm		3383/udp    # Enterprise Software Products License Manager
-esp-lm		3383/tcp    # Enterprise Software Products License Manager
-#			   George Rudy <george at entsoft.com>
-hp-clic 	3384/udp    # Hardware Management
-hp-clic		3384/tcp    # Cluster Management Services
-#			   Rajesh Srinivasaraghavan <srajesh at cup.hp.com>
-qnxnetman	3385/udp    # qnxnetman
-qnxnetman	3385/tcp    # qnxnetman
-#			   Michael Hunter <mphunter at qnx.com>
-gprs-sig	3386/udp    # GPRS SIG
-gprs-data	3386/tcp    # GPRS Data
-#			   Ansgar Bergmann <Ansgar.Bergmann at etsi.fr>
-backroomnet	3387/udp    # Back Room Net
-backroomnet	3387/tcp    # Back Room Net
-#			   Clayton Wilkinson <cwilkinson at carreker.com>
-cbserver	3388/udp    # CB Server
-cbserver	3388/tcp    # CB Server
-#			   Allen Wei <Allen_Wei at arborsoft.com>
-ms-wbt-server	3389/udp    # MS WBT Server
-ms-wbt-server	3389/tcp    # MS WBT Server
-#			   Ritu Bahl <ritub at microsoft.com>
-dsc		3390/udp    # Distributed Service Coordinator
-dsc		3390/tcp    # Distributed Service Coordinator
-#			   Chas Honton <chas at secant.com>
-savant		3391/udp    # SAVANT
-savant		3391/tcp    # SAVANT
-#			   Andy Bruce <franklin_yah at yahoo.com>
-efi-lm		3392/udp    # EFI License Management
-efi-lm		3392/tcp    # EFI License Management
-#			   Ross E. Greinke <greinker at execpc.com>
-d2k-tapestry1	3393/udp    # D2K Tapestry Client to Server
-d2k-tapestry1	3393/tcp    # D2K Tapestry Client to Server
-d2k-tapestry2	3394/udp    # D2K Tapestry Server to Server
-d2k-tapestry2	3394/tcp    # D2K Tapestry Server to Server
-#			   Eric Lan <elan at d2k.com>
-dyna-lm		3395/udp    # Dyna License Manager (Elam)
-dyna-lm		3395/tcp    # Dyna License Manager (Elam)
-#			   Anjana Iyer <anjana at dyna.com>
-printer_agent	3396/udp    # Printer Agent
-printer_agent	3396/tcp    # Printer Agent
-#			   Devon Taylor <dtaylor at novell.com>
-cloanto-lm	3397/udp    # Cloanto License Manager 
-cloanto-lm	3397/tcp    # Cloanto License Manager
-#		    	   Takeo Sato <takeo_sato-iana at cloanto.com>
-mercantile	3398/udp    # Mercantile
-mercantile	3398/tcp    # Mercantile
-#			   Erik Kragh Jensen <kragh at inet.uni2.dk>
-csms		3399/udp    # CSMS
-csms		3399/tcp    # CSMS
-csms2		3400/udp    # CSMS2
-csms2		3400/tcp    # CSMS2
-#			   Markus Michels <mmi at cedros.com>
-filecast        3401/udp    # filecast
-filecast        3401/tcp    # filecast
-#                          Eden Sherry <eden at pair.com>
-fxaengine-net   3402/udp    # FXa Engine Network Port
-fxaengine-net   3402/tcp    # FXa Engine Network Port
-#                          Lucas Alonso <luke at demiurgestudios.com> February 2002
-copysnap        3403/udp    # CopySnap Server Port
-copysnap        3403/tcp    # CopySnap Server Port
-#                          Steve Zellers <zellers at basilsoft.com> February 2002
-#               3404       Removed (2002-05-01)
-nokia-ann-ch1   3405/udp    # Nokia Announcement ch 1
-nokia-ann-ch1   3405/tcp    # Nokia Announcement ch 1
-nokia-ann-ch2   3406/udp    # Nokia Announcement ch 2
-nokia-ann-ch2   3406/tcp    # Nokia Announcement ch 2
-#                          Morteza Kalhour <Morteza.Kalhour at Nokia.com> February 2002
-ldap-admin      3407/udp    # LDAP admin server port
-ldap-admin      3407/tcp    # LDAP admin server port
-#                          Stephen Tsun <stsun at calient.net> February 2002
-issapi          3408/udp    # POWERpack API Port
-issapi          3408/tcp    # POWERpack API Port
-#                          Colin Griffiths <colin.griffiths at int-link.com> February 2002
-networklens     3409/udp    # NetworkLens Event Port
-networklens     3409/tcp    # NetworkLens Event Port
-networklenss    3410/udp    # NetworkLens SSL Event
-networklenss    3410/tcp    # NetworkLens SSL Event
-#                          Greg Bailey <gbailey at lxpro.com> February 2002
-biolink-auth    3411/udp    # BioLink Authenteon server
-biolink-auth    3411/tcp    # BioLink Authenteon server
-#                          BioLink Support <reginfo at biolinkusa.com> February 2002
-xmlblaster      3412/udp    # xmlBlaster
-xmlblaster      3412/tcp    # xmlBlaster
-#                          Marcel Ruff <ruff at swand.lake.de> February 2002
-svnet           3413/udp    # SpecView Networking
-svnet           3413/tcp    # SpecView Networking
-#                          Richard Dickins <rad at specview.com> February 2002
-wip-port        3414/udp    # BroadCloud WIP Port
-wip-port        3414/tcp    # BroadCloud WIP Port
-bcinameservice  3415/udp    # BCI Name Service
-bcinameservice  3415/tcp    # BCI Name Service
-#                          Dennis Parker <dparker at broadcloud.com> February 2002
-commandport     3416/udp    # AirMobile IS Command Port
-commandport     3416/tcp    # AirMobile IS Command Port
-#                          Mike Klein <m.klein at motorla.com> February 2002
-csvr            3417/udp    # ConServR file translation
-csvr            3417/tcp    # ConServR file translation
-#                          Albert Leung <aleung at biscom.com> February 2002
-rnmap           3418/udp    # Remote nmap
-rnmap           3418/tcp    # Remote nmap
-#                          Tuomo Makinen <tmakinen at pp.htv.fi> February 2002
-softaudit       3419/udp    # ISogon SoftAudit
-softaudit       3419/tcp    # Isogon SoftAudit
-#                          Per Hellberg <phellberg at isogon.com> February 2002
-ifcp-port       3420/udp    # iFCP User Port
-ifcp-port       3420/tcp    # iFCP User Port
-#                          Charles Monia <cmonia at nishansystems.com>
-bmap            3421/udp    # Bull Apprise portmapper
-bmap            3421/tcp    # Bull Apprise portmapper
-#                          Jeremy Gilbert <J.Gilbert at ma30.bull.com>
-rusb-sys-port   3422/udp    # Remote USB System Port
-rusb-sys-port   3422/tcp    # Remote USB System Port
-#                          Steven Klein <stevek at ionetworks.com> February 2002
-xtrm            3423/udp    # xTrade Reliable Messaging
-xtrm            3423/tcp    # xTrade Reliable Messaging
-xtrms           3424/udp    # xTrade over TLS/SSL
-xtrms           3424/tcp    # xTrade over TLS/SSL
-#                          Mats Nilsson <mats.nilsson at xware.se> February 2002
-agps-port       3425/udp    # AGPS Access Port
-agps-port       3425/tcp    # AGPS Access Port
-#                          Kristoffer Nilsson
-#                          <kristoffer.nilsson at hutchison3g.com> February 2002
-arkivio         3426/udp    # Arkivio Storage Protocol
-arkivio         3426/tcp    # Arkivio Storage Protocol
-#                          Bruce Greenblatt <bruce at arkivio.com> February 2002
-websphere-snmp  3427/udp    # WebSphere SNMP
-websphere-snmp  3427/tcp    # WebSphere SNMP
-#                          Richard Mills <ramills at us.ibm.com> February 2002
-twcss           3428/udp    # 2Wire CSS
-twcss           3428/tcp    # 2Wire CSS
-#                          2Wire IANA Contact <iana at 2wire.com> February 2002
-gcsp            3429/udp    # GCSP user port
-gcsp            3429/tcp    # GCSP user port
-#                          Anirban Majumder <majumderanirban at lycos.com> March 2002
-ssdispatch      3430/udp    # Scott Studios Dispatch
-ssdispatch      3430/tcp    # Scott Studios Dispatch
-#                          Michael Settles <michael.settles at verizon.net> March 2002
-ndl-als         3431/udp    # Active License Server Port
-ndl-als         3431/tcp    # Active License Server Port
-#                          Quentin Brown <ndldev at ndl.co.uk> March 2002
-osdcp           3432/udp    # Secure Device Protocol
-osdcp           3432/tcp    # Secure Device Protocol
-#                          Peter Fernandez <fernandez at omnisec.ch> March 2002
-alta-smp        3433/udp    # Altaworks Service Management Platform
-alta-smp        3433/tcp    # Altaworks Service Management Platform
-#                          Ted Macomber <TedM at Altaworks.com> March 2002
-opencm          3434/udp    # OpenCM Server
-opencm          3434/tcp    # OpenCM Server
-#                          Jonathan S. Shapiro <registrar at eros-os.org> March 2002
-pacom           3435/udp    # Pacom Security User Port
-pacom           3435/tcp    # Pacom Security User Port
-#                          Steve Barton <steveb at pacomsystems.com> March 2002
-gc-config       3436/udp    # GuardControl Exchange Protocol
-gc-config       3436/tcp    # GuardControl Exchange Protocol
-#                          Andreas Schwarz <andi at trancefield.de> March 2002
-autocueds       3437/udp    # Autocue Directory Service
-autocueds       3437/tcp    # Autocue Directory Service
-#                          Geoff Back <geoff at autocue.co.uk> March 2002
-spiral-admin    3438/udp    # Spiralcraft Admin
-spiral-admin    3438/tcp    # Spiralcraft Admin
-#                          Michael Toth <mike at spiralcraft.com> March 2002
-hri-port        3439/udp    # HRI Interface Port
-hri-port        3439/tcp    # HRI Interface Port
-#                          John Fayos <john.fayos at criticallink.com> March 2002
-ans-console     3440/udp    # Net Steward Mgmt Console
-ans-console     3440/tcp    # Net Steward Mgmt Console
-#                          John Richmond <developers at securitydesigners.com> March 2002
-connect-client  3441/udp    # OC Connect Client
-connect-client  3441/tcp    # OC Connect Client
-connect-server  3442/udp    # OC Connect Server
-connect-server  3442/tcp    # OC Connect Server
-#                          Mike Velten <mike.Velten at liebert.com> March 2002
-ov-nnm-websrv   3443/udp    # OpenView Network Node Manager WEB Server
-ov-nnm-websrv   3443/tcp    # OpenView Network Node Manager WEB Server
-#                          Anthony Walker <anthony_walker at hp.com> March 2002
-denali-server   3444/udp    # Denali Server
-denali-server   3444/tcp    # Denali Server
-#                          Joe Devlin <Joe.Devlin at rocketsoftware.com> March 2002
-monp            3445/udp    # Media Object Network
-monp            3445/tcp    # Media Object Network
-#                          Ron Herardian <ron at zoogaloo.com> March 2002
-3comfaxrpc      3446/udp    # 3Com FAX RPC port
-3comfaxrpc      3446/tcp    # 3Com FAX RPC port
-#                          Christopher Wells <christopher_wells at 3com.com> April 2002
-cddn            3447/udp    # CompuDuo DirectNet
-cddn            3447/tcp    # CompuDuo DirectNet
-#                          Gregory Richards <GregorR at compuduo.com> April 2002
-dnc-port        3448/udp    # Discovery and Net Config
-dnc-port        3448/tcp    # Discovery and Net Config
-#                          Chi Chen <chichen at us.ibm.com> April 2002
-hotu-chat       3449/udp    # HotU Chat
-hotu-chat       3449/tcp    # HotU Chat
-#                          Tim Burgess <tim at hotu.com> April 2002
-castorproxy     3450/udp    # CAStorProxy
-castorproxy     3450/tcp    # CAStorProxy
-#                          Raymond J. Young <Raymond.Young at ca.com> April 2002
-asam            3451/udp    # ASAM Services
-asam            3451/tcp    # ASAM Services
-#                          Mike Gossett <mike at omnibond.com> April 2002
-sabp-signal     3452/udp    # SABP-Signalling Protocol
-sabp-signal     3452/tcp    # SABP-Signalling Protocol
-#                          Brendan McWilliams <brendan.mcwilliams at vf.vodafone.co.uk> April 2002
-pscupd          3453/udp    # PSC Update Port
-pscupd          3453/tcp    # PSC Update Port
-#                          Reid B. Ligon <reid.ligon at pscnet.com>
-mira            3454/tcp    # Apple Remote Access Protocol
-#                          Mike Alexander <mta at um.cc.umich.edu>
-prsvp           3455/udp    # RSVP Port
-prsvp           3455/tcp    # RSVP Port
-#                          Bob Braden <Braden at isi.edu>
-vat             3456/udp    # VAT default data
-vat             3456/tcp    # VAT default data
-#                          Van Jacobson <van at ee.lbl.gov>
-vat-control     3457/udp    # VAT default control
-vat-control     3457/tcp    # VAT default control
-#                          Van Jacobson <van at ee.lbl.gov>
-d3winosfi       3458/udp    # D3WinOSFI
-d3winosfi       3458/tcp    # D3WinOSFI
-#                          Brad Hamilton <bh at picksys.com>
-integral        3459/udp    # TIP Integral
-integral        3459/tcp    # TIP Integral
-#                          Olivier Mascia <om at tipgroup.com>
-edm-manager     3460/udp    # EDM Manger
-edm-manager     3460/tcp    # EDM Manger
-edm-stager      3461/udp    # EDM Stager
-edm-stager      3461/tcp    # EDM Stager
-edm-std-notify  3462/udp    # EDM STD Notify
-edm-std-notify  3462/tcp    # EDM STD Notify
-edm-adm-notify  3463/udp    # EDM ADM Notify
-edm-adm-notify  3463/tcp    # EDM ADM Notify
-edm-mgr-sync    3464/udp    # EDM MGR Sync
-edm-mgr-sync    3464/tcp    # EDM MGR Sync
-edm-mgr-cntrl   3465/udp    # EDM MGR Cntrl
-edm-mgr-cntrl   3465/tcp    # EDM MGR Cntrl
-#                          Tom Hennessy <thenn at novadigm.com>
-workflow        3466/udp    # WORKFLOW
-workflow        3466/tcp    # WORKFLOW
-#                          Robert Hufsky <rhufsky at csesys.co.at>
-rcst            3467/udp    # RCST
-rcst            3467/tcp    # RCST
-#                          Kit Sturgeon <Kit at remotecontrolsextoys.com>
-ttcmremotectrl  3468/udp    # TTCM Remote Controll
-ttcmremotectrl  3468/tcp    # TTCM Remote Controll
-#                          Yossi Cohen-Shahar <yossi at proxy.co.il>
-pluribus        3469/udp    # Pluribus
-pluribus        3469/tcp    # Pluribus
-#                          Mark Miller <markm at caplet.com>
-jt400           3470/udp    # jt400
-jt400           3470/tcp    # jt400
-jt400-ssl       3471/udp    # jt400-ssl
-jt400-ssl       3471/tcp    # jt400-ssl
-#                          Clifton Nock <cnock at us.ibm.com>
-jaugsremotec-1  3472/udp    # JAUGS N-G Remotec 1
-jaugsremotec-1  3472/tcp    # JAUGS N-G Remotec 1
-jaugsremotec-2  3473/udp    # JAUGS N-G Remotec 2
-jaugsremotec-2  3473/tcp    # JAUGS N-G Remotec 2
-#                          Steven B. Cliff <scliff at remotec-andros.com> April 2002
-ttntspauto      3474/udp    # TSP Automation
-ttntspauto      3474/tcp    # TSP Automation
-#                          Arnie Koster <akoster at teltone.com> April 2002
-genisar-port    3475/udp    # Genisar Comm Port
-genisar-port    3475/tcp    # Genisar Comm Port
-#                          Candace Niccolson <cniccolson at genisar.com> April 2002
-nppmp           3476/udp    # NVIDIA Mgmt Protocol
-nppmp           3476/tcp    # NVIDIA Mgmt Protocol
-#                          Gilbert Yeung <gyeung at nvidia.com> April 2002
-ecomm           3477/udp    # eComm link port
-ecomm           3477/tcp    # eComm link port
-#                          Thomas Soerensen <thomassoerensen at stofanet.dk> April 2002
-nat-stun-port   3478/udp    # Simple Traversal of UDP Through NAT (STUN) port
-nat-stun-port   3478/tcp    # Simple Traversal of UDP Through NAT (STUN) port
-#                          Jonathan Rosenberg <jdrosen at dynamicsoft.com> April 2002
-twrpc           3479/udp    # 2Wire RPC
-twrpc           3479/tcp    # 2Wire RPC
-#                          2Wire IANA Contact <iana at 2wire.com> April 2002
-plethora        3480/udp    # Secure Virtual Workspace
-plethora        3480/tcp    # Secure Virtual Workspace
-#                          Tim Simms <tsimms at plethoratech.com> April 2002
-cleanerliverc   3481/udp    # CleanerLive remote ctrl
-cleanerliverc   3481/tcp    # CleanerLive remote ctrl
-#                          David Mojdehi <david.mojdehi at autodesk.com> April 2002
-vulture         3482/udp    # Vulture Monitoring System
-vulture         3482/tcp    # Vulture Monitoring System
-#                          Jason Santos <jason.santos at megaslow.net> April 2002
-slim-devices    3483/udp    # Slim Devices Protocol
-slim-devices    3483/tcp    # Slim Devices Protocol
-#                          Sean Adams <sean at slimdevices.com> May 2002
-gbs-stp         3484/udp    # GBS SnapTalk Protocol
-gbs-stp         3484/tcp    # GBS SnapTalk Protocol
-#                          Eric Harris-Braun <eric at glassbead.com> May 2002
-celatalk        3485/udp    # CelaTalk
-celatalk        3485/tcp    # CelaTalk
-#                          Carl Blundell <cblundell at celador.co.uk> May 2002
-ifsf-hb-port    3486/udp    # IFSF Heartbeat Port
-ifsf-hb-port    3486/tcp    # IFSF Heartbeat Port
-#                          IFSF Secretary <secretary at ifsf.org> May 2002
-ltcudp          3487/udp    # LISA UDP Transfer Channel
-ltctcp          3487/tcp    # LISA TCP Transfer Channel
-#                          Pit Vetterick <pit at 3dgo.com> May 2002
-fs-rh-srv       3488/udp    # FS Remote Host Server
-fs-rh-srv       3488/tcp    # FS Remote Host Server
-#                          Brian Nickles <RogueSpear91 at hotmail.com> May 2002
-dtp-dia         3489/udp    # DTP/DIA
-dtp-dia         3489/tcp    # DTP/DIA
-#                          Alexei V. Soloviev <avsolov at lab127.karelia.ru> May 2002
-colubris        3490/udp    # Colubris Management Port
-colubris        3490/tcp    # Colubris Management Port
-#                          Gilbert Moineau <gilbert.moineau at colubris.com> May 2002
-swr-port        3491/udp    # SWR Port 
-swr-port        3491/tcp    # SWR Port
-#                          Ian Manning <imanning at dtsuk.com> May 2002
-tvdumtray-port  3492/udp    # TVDUM Tray Port
-tvdumtray-port  3492/tcp    # TVDUM Tray Port
-#                          Peter Boers <boers at isisglobal.nl> May 2002 
-nut             3493/udp    # Network UPS Tools
-nut             3493/tcp    # Network UPS Tools
-#                          Russell Kroll <nut-iana at exploits.org> May 2002
-ibm3494         3494/udp    # IBM 3494
-ibm3494         3494/tcp    # IBM 3494
-#                          Jeffrey Pilch <jpilch at us.ibm.com>
-seclayer-tcp    3495/udp    # securitylayer over tcp
-seclayer-tcp    3495/tcp    # securitylayer over tcp
-seclayer-tls    3496/udp    # securitylayer over tls
-seclayer-tls    3496/tcp    # securitylayer over tls
-#                          Arno Hollosi <arno.hollosi at cio.gv.at> March 2002
-ipether232port  3497/udp    # ipEther232Port
-ipether232port  3497/tcp    # ipEther232Port
-#                          Marcus Leufgen <leufgen at ipcas.de> May 2002
-dashpas-port    3498/udp    # DASHPAS user port
-dashpas-port    3498/tcp    # DASHPAS user port
-#                          Albrecht Mayer <albrecht.mayer at infineon.com> May 2002
-sccip-media     3499/udp    # SccIP Media
-sccip-media     3499/tcp    # SccIP Media
-#                          David Yon <dyon at dialout.net> May 2002
-rtmp-port       3500/udp    # RTMP Port
-rtmp-port       3500/tcp    # RTMP Port
-#                          Miriam Wohlgelernter <miriamw at adirtech.com>
-isoft-p2p       3501/udp    # iSoft-P2P
-isoft-p2p       3501/tcp    # iSoft-P2P
-#                          David Walling <dwalling at isoft.com>
-avinstalldisc   3502/udp    # Avocent Install Discovery
-avinstalldisc   3502/tcp    # Avocent Install Discovery
-#                          Brian S. Stewart <Brian.Stewart at Avovent.com>
-lsp-ping        3503/udp    # MPLS LSP-echo Port
-lsp-ping        3503/tcp    # MPLS LSP-echo Port
-#                          Ping Pan <pingpan at juniper.net>
-ironstorm       3504/udp    # IronStorm game server
-ironstorm       3504/tcp    # IronStorm game server
-#                          Arnaud Clermonte <clermonte at 4xtechnologies.com>
-ccmcomm         3505/udp    # CCM communications port
-ccmcomm         3505/tcp    # CCM communications port
-#                          Tom Bougan <tomb at apptechsys.com>
-apc-3506        3506/udp    # APC 3506
-apc-3506        3506/tcp    # APC 3506
-#                          American Power Conversion <ports at apcc.com>
-nesh-broker     3507/udp    # Nesh Broker Port
-nesh-broker     3507/tcp    # Nesh Broker Port
-#                          Jeremy Maiden <jeremy at komarr.demon.co.uk>
-interactionweb  3508/udp    # Interaction Web
-interactionweb  3508/tcp    # Interaction Web
-#                          Andy Niksch <andyn at inin.com>
-vt-ssl          3509/udp    # Virtual Token SSL Port
-vt-ssl          3509/tcp    # Virtual Token SSL Port
-#                          Libor Sykora <libor.sykora at st.com> May 2002
-xss-port        3510/udp    # XSS Port
-xss-port        3510/tcp    # XSS Port
-#                          Joe Purcell <jpurcell at ensuretech.com> May 2002
-webmail-2       3511/udp    # WebMail/2
-webmail-2       3511/tcp    # WebMail/2
-#                          Dimitris Michelinakis <dimitris at michelinakis.gr> May 2002
-aztec           3512/udp    # Aztec Distribution Port
-aztec           3512/tcp    # Aztec Distribution Port
-#                          Alan Francis <AlanF at zonal.co.uk> May 2002
-arcpd           3513/udp    # Adaptec Remote Protocol
-arcpd           3513/tcp    # Adaptec Remote Protocol
-#                          Hardy Doelfel <hardy_doelfel at adaptec.com> May 2002
-must-p2p        3514/udp    # MUST Peer to Peer
-must-p2p        3514/tcp    # MUST Peer to Peer
-must-backplane  3515/udp    # MUST Backplane
-must-backplane  3515/tcp    # MUST Backplane
-#                          Rick Stefanik <r.stefanik at gatelinx.com> May 2002
-smartcard-port  3516/udp    # Smartcard Port 
-smartcard-port  3516/tcp    # Smartcard Port
-#                          Scott Guthery <sguthery at mobile-mind.com> May 2002
-802-11-iapp     3517/udp    # IEEE 802.11 WLANs WG IAPP
-802-11-iapp     3517/tcp    # IEEE 802.11 WLANs WG IAPP
-#                          Stuart J. Kerry (Chair IEEE 802.11 WG)
-#                          <stuart at ok-brit.com> May 2002
-artifact-msg    3518/udp    # Artifact Message Server
-artifact-msg    3518/tcp    # Artifact Message Server
-#                          Ron Capwell <ron at artifactsoftware.com> June 2002
-galileo         3519/udp    # Netvion Galileo Port
-nvmsgd          3519/tcp    # Netvion Messenger Port
-galileolog      3520/udp    # Netvion Galileo Log Port
-galileolog      3520/tcp    # Netvion Galileo Log Port
-#                          Ray Caruso <ray.caruso at netvion.com> June 2002
-mc3ss           3521/udp    # Telequip Labs MC3SS
-mc3ss           3521/tcp    # Telequip Labs MC3SS
-#                          Michael Sparks <msparks at telequiplabs.com> June 2002
-nssocketport    3522/udp    # DO over NSSocketPort
-nssocketport    3522/tcp    # DO over NSSocketPort
-#                          Douglas Davidson <drd at apple.com> June 2002
-odeumservlink   3523/udp    # Odeum Serverlink
-odeumservlink   3523/tcp    # Odeum Serverlink 
-#                          Mads Peter Back <iana-contact at webhouse.dk> June 2002
-ecmport         3524/udp    # ECM Server port
-ecmport         3524/tcp    # ECM Server port
-eisport         3525/udp    # EIS Server port
-eisport         3525/tcp    # EIS Server port
-#                          Paul Kraus <paul.kraus at veritas.com> June 2002
-starquiz-port   3526/udp    # starQuiz Port
-starquiz-port   3526/tcp    # starQuiz Port
-#                          Adam Ernst <contact at cosmicsoft.net> June 2002
-beserver-msg-q  3527/udp    # VERITAS Backup Exec Server
-beserver-msg-q  3527/tcp    # VERITAS Backup Exec Server
-#                          Katherine Wattwood <katherine.wattwood at veritas.com> June 2002
-jboss-iiop      3528/udp    # JBoss IIOP
-jboss-iiop      3528/tcp    # JBoss IIOP
-jboss-iiop-ssl  3529/udp    # JBoss IIOP/SSL
-jboss-iiop-ssl  3529/tcp    # JBoss IIOP/SSL
-#                          Francisco Reverbel <reverbel at ime.usp.br> June 2002
-gf              3530/udp    # Grid Friendly
-gf              3530/tcp    # Grid Friendly
-#                          Daivd P. Chassin <david.chassin at pnl.gov> June 2002
-joltid          3531/udp    # Joltid
-joltid          3531/tcp    # Joltid
-#                          Ahti Heinla <ahti at ahti.bluemoon.ee> June 2002
-raven-rmp       3532/udp    # Raven Remote Management Control
-raven-rmp       3532/tcp    # Raven Remote Management Control
-raven-rdp       3533/udp    # Raven Remote Management Data
-raven-rdp       3533/tcp    # Raven Remote Management Data
-#                          Daniel Sorlov <daniel at sorlov.com> June 2002
-urld-port       3534/udp    # URL Daemon Port
-urld-port       3534/tcp    # URL Daemon Port
-#                          Jim Binkley <jrb at cs.pdx.edu> June 2002
-ms-la           3535/udp    # MS-LA
-ms-la           3535/tcp    # MS-LA
-#                          Eric Ledoux <ericle at microsoft.com> 
-snac            3536/udp    # SNAC
-snac            3536/tcp    # SNAC
-#                          Tatsuya Igarashi <Tatsuya.Igarashi at jp.sony.com> July 2002
-ni-visa-remote  3537/udp    # Remote NI-VISA port
-ni-visa-remote  3537/tcp    # Remote NI-VISA port
-#                          Sinnadurai Dharshan <sinnadurai.dharshan at ni.com> July 2002
-ibm-diradm      3538/udp    # IBM Directory Server
-ibm-diradm      3538/tcp    # IBM Directory Server
-ibm-diradm-ssl  3539/udp    # IBM Directory Server SSL
-ibm-diradm-ssl  3539/tcp    # IBM Directory Server SSL
-#                          Mark Cavage <mcavage at us.ibm.com> July 2002
-pnrp-port       3540/udp    # PNRP User Port
-pnrp-port       3540/tcp    # PNRP User Port
-#                          Igor Kostic <igorko at microsoft.com> July 2002
-voispeed-port   3541/udp    # VoiSpeed Port
-voispeed-port   3541/tcp    # VoiSpeed Port
-#                          Virgilio Lattanzi <virgilio at harpax.com> July 2002
-hacl-monitor    3542/udp    # HA cluster monitor
-hacl-monitor    3542/tcp    # HA cluster monitor
-#                          Jason Ko <jason_ko at hp.com> July 2002
-qftest-lookup   3543/udp    # qftest Lookup Port
-qftest-lookup   3543/tcp    # qftest Lookup Port
-#                          Gregor Schmid <gs at qfs.de> July 2002
-teredo          3544/udp    # Teredo Port
-teredo          3544/tcp    # Teredo Port
-#                          Dave Thaler <dthaler at microsoft.com> July 2002
-camac           3545/udp    # CAMAC equipment
-camac           3545/tcp    # CAMAC equipment
-#                          Eugene Zhiganov <zed at dfe3300.karelia.ru> July 2002
-#               3546       Unassigned (removed September 2002)
-symantec-sim    3547/udp    # Symantec SIM
-symantec-sim    3547/tcp    # Symantec SIM
-#                          George Dzieciol <gdzieciol at symantec.com> July 2002
-interworld      3548/udp    # Interworld
-interworld      3548/tcp    # Interworld
-#                          John Stephen <iana at mundocani.com> July 2002
-tellumat-nms    3549/udp    # Tellumat MDR NMS
-tellumat-nms    3549/tcp    # Tellumat MDR NMS 
-#                          Hennie van der Merwe <hvandermerwe at tellumat.com> July 2002
-ssmpp           3550/udp    # Secure SMPP
-ssmpp           3550/tcp    # Secure SMPP
-#                          Cormac Long <webmaster at smsforum.net> July 2002
-apcupsd         3551/udp    # Apcupsd Information Port
-apcupsd         3551/tcp    # Apcupsd Information Port
-#                          Riccardo Facchetti <riccardo at inetcosmos.org> July 2002
-taserver        3552/udp    # TeamAgenda Server Port
-taserver        3552/tcp    # TeamAgenda Server Port
-#                          Dany Ayotte <ayotte at teamsoft.com> July 2002
-rbr-discovery   3553/udp    # Red Box Recorder ADP
-rbr-discovery   3553/tcp    # Red Box Recorder ADP
-#                          Simon Jolly <simon.jolly at origin-data.co.uk> July 2002
-questnotify     3554/udp    # Quest Notification Server
-questnotify     3554/tcp    # Quest Notification Server
-#                          Rob Griffin <quest_iana at oz.quest.com> July 2002
-razor           3555/udp    # Vipul's Razor
-razor           3555/tcp    # Vipul's Razor
-#                          Vipul Ved Prakash <mail at vipul.net> July 2002
-sky-transport   3556/udp    # Sky Transport Protocol
-sky-transport   3556/tcp    # Sky Transport Protocol
-#                          Michael Paddon <michael.paddon at activesky.com> July 2002
-personalos-001  3557/udp    # PersonalOS Comm Port
-personalos-001  3557/tcp    # PersonalOS Comm Port
-#                          Shane Roberts <shane at shaneroberts.com> July 2002
-mcp-port        3558/udp    # MCP user port
-mcp-port        3558/tcp    # MCP user port
-#                          Professor Paul S. Wang <pwang at cs.kent.edu> July 2002
-cctv-port       3559/udp    # CCTV control port
-cctv-port       3559/tcp    # CCTV control port
-#                          Raymond Lyons <rlyons at vicon-cctv.com> July 2002
-iniserve-port   3560/udp    # INIServe port
-iniserve-port   3560/tcp    # INIServe port
-#                          Peter Moylan <peter at ee.newcastle.edu.au> August 2002
-bmc-onekey      3561/udp    # BMC-OneKey
-bmc-onekey      3561/tcp    # BMC-OneKey
-#                          Alon Tam <alon_tam at bmc.com> August 2002
-sdbproxy        3562/udp    # SDBProxy
-sdbproxy        3562/tcp    # SDBProxy
-#                          Eric Grange <egrange at creative-it.net> August 2002   
-watcomdebug     3563/udp    # Watcom Debug
-watcomdebug     3563/tcp    # Watcom Debug
-#                          Dave Neudoerffer <Dave.Neudoerffer at ianywhere.com>
-esimport        3564/udp    # Electromed SIM port
-esimport        3564/tcp    # Electromed SIM port
-#                          Francois Marchand <francois.marchand at electromed.com> August 2002
-m2pa            3565/sctp   # M2PA
-m2pa            3565/tcp    # M2PA
-#                          Tom George <Tom.George at alcatel.com> May 2002
-quest-launcher  3566/udp    # Quest Agent Manager
-quest-launcher  3566/tcp    # Quest Agent Manager
-#                          Eyal Kalderon <eyal.kalderon at quest.com> April 2002
-emware-oft      3567/udp    # emWare OFT Services
-emware-oft      3567/tcp    # emWare OFT Services
-#                          Bryant Eastham <beastham at emware.com> August 2002
-emware-epss     3568/udp    # emWare EMIT/Secure
-emware-epss     3568/tcp    # emWare EMIT/Secure
-#                          Bryant Eastham <beastham at emware.com> January 2003
-mbg-ctrl        3569/udp    # Meinberg Control Service
-mbg-ctrl        3569/tcp    # Meinberg Control Service
-#                          Martin Burnicki <martin.burnicki at meinberg.de> August 2002
-mccwebsvr-port  3570/udp    # MCC Web Server Port
-mccwebsvr-port  3570/tcp    # MCC Web Server Port
-megardsvr-port  3571/udp    # MegaRAID Server Port
-megardsvr-port  3571/tcp    # MegaRAID Server Port
-megaregsvrport  3572/udp    # Registration Server Port
-megaregsvrport  3572/tcp    # Registration Server Port
-#                          Sreenivas Bagalkote <sreenib at lsil.com> August 2002
-tag-ups-1       3573/udp    # Advantage Group UPS Suite
-tag-ups-1       3573/tcp    # Advantage Group UPS Suite
-#                          James Goddard <jamesg at taglim.com> August 2002
-dmaf-caster     3574/udp    # DMAF Caster
-dmaf-server     3574/tcp    # DMAF Server
-#                          Ramakrishna Nadendla <rama_nadendla at agilent.com> August 2002
-ccm-port        3575/udp    # Coalsere CCM Port
-ccm-port        3575/tcp    # Coalsere CCM Port
-cmc-port        3576/udp    # Coalsere CMC Port
-cmc-port        3576/tcp    # Coalsere CMC Port
-#                          Chris Hawkinson <chawkinson at coalsere.com> August 2002
-config-port     3577/udp    # Configuration Port
-config-port     3577/tcp    # Configuration Port
-data-port       3578/udp    # Data Port
-data-port       3578/tcp    # Data Port
-#                          Anupam Bharali <abharali at peribit.com> August 2002
-ttat3lb         3579/udp    # Tarantella Load Balancing
-ttat3lb         3579/tcp    # Tarantella Load Balancing
-#                          Jim Musgrave <jimm at tarantella.com> August 2002
-nati-svrloc     3580/udp    # NATI-ServiceLocator
-nati-svrloc     3580/tcp    # NATI-ServiceLocator
-#                          Jason Case <jason.case at ni.com> August 2002
-kfxaclicensing  3581/udp    # Ascent Capture Licensing
-kfxaclicensing  3581/tcp    # Ascent Capture Licensing
-#                          Brad Hamilton <brad_hamilton at kofax.com> August 2002
-press           3582/udp    # PEG PRESS Server
-press           3582/tcp    # PEG PRESS Server
-#                          Jim DeLisle <jdelisle at swellsoftware.com> August 2002
-canex-watch     3583/udp    # CANEX Watch System
-canex-watch     3583/tcp    # CANEX Watch System
-#                          Peter Kollath <peter.kollath at canex.sk> August 2002
-u-dbap          3584/udp    # U-DBase Access Protocol
-u-dbap          3584/tcp    # U-DBase Access Protocol
-#                          Bodo Rueskamp <br at clabsms.de> August 2002
-emprise-lls     3585/udp    # Emprise License Server
-emprise-lls     3585/tcp    # Emprise License Server
-emprise-lsc     3586/udp    # License Server Console
-emprise-lsc     3586/tcp    # License Server Console
-#                          James J. Diaz <JDiaz at EmpriseCorporation.com> August 2002
-p2pgroup        3587/udp    # Peer to Peer Grouping
-p2pgroup        3587/tcp    # Peer to Peer Grouping
-#                          Igor Kostic <igorko at microsoft.com> August 2002
-sentinel        3588/udp    # Sentinel Server
-sentinel        3588/tcp    # Sentinel Server
-#                          Ian Gordon <ian.s.gordon at btopenworld.com> August 2002
-isomair         3589/udp    # isomair
-isomair         3589/tcp    # isomair
-#                          Richard Fleming <richard at apoapsis.com> August 2002
-wv-csp-sms      3590/udp    # WV CSP SMS Binding
-wv-csp-sms      3590/tcp    # WV CSP SMS Binding
-#                          Matti Salmi <matti.salmi at nokia.com> August 2002
-gtrack-server   3591/udp    # LOCANIS G-TRACK Server
-gtrack-server   3591/tcp    # LOCANIS G-TRACK Server
-gtrack-ne       3592/udp    # LOCANIS G-TRACK NE Port
-gtrack-ne       3592/tcp    # LOCANIS G-TRACK NE Port
-#                          Juergen.Edelhaeuser <Juergen.Edelhaeuser at locanis.com> August 2002
-bpmd            3593/udp    # BP Model Debugger
-bpmd            3593/tcp    # BP Model Debugger
-#                          Keith Fligg <keith at projtech.com> September 2002
-mediaspace      3594/udp    # MediaSpace
-mediaspace      3594/tcp    # MediaSpace
-shareapp        3595/udp    # ShareApp
-shareapp        3595/tcp    # ShareApp
-#                          Jeff King <jking at wave3software.com> September 2002
-iw-mmogame      3596/udp    # Illusion Wireless MMOG
-iw-mmogame      3596/tcp    # Illusion Wireless MMOG
-#                          Jan Vrsinsky <jan.vrsinsky at illusionsoftworks.com> September 2002
-a14             3597/udp    # A14 (AN-to-SC/MM)
-a14             3597/tcp    # A14 (AN-to-SC/MM)
-a15             3598/udp    # A15 (AN-to-AN)
-a15             3598/tcp    # A15 (AN-to-AN)
-#                          David Ott <dott at qualcomm.com> September 2002
-quasar-server   3599/udp    # Quasar Accounting Server
-quasar-server   3599/tcp    # Quasar Accounting Server
-#                          Brad Pepers <brad at linuxcanada.com> September 2002
-trap-daemon     3600/udp    # text relay-answer
-trap-daemon     3600/tcp    # text relay-answer
-#                          John Willis <jwillis at arielusa.com> September 2002
-visinet-gui     3601/udp    # Visinet Gui
-visinet-gui     3601/tcp    # Visinet Gui
-#                          Jeff Douglass <ist at att.net> September 2002
-infiniswitchcl  3602/udp    # InfiniSwitch Mgr Client
-infiniswitchcl  3602/tcp    # InfiniSwitch Mgr Client
-#                          Lee VanTine <lvantine at infiniswitc.com> September 2002
-int-rcv-cntrl   3603/udp    # Integrated Rcvr Control
-int-rcv-cntrl   3603/tcp    # Integrated Rcvr Control
-#                          Dave Stone <dstone01 at harris.com> September 2002
-bmc-jmx-port    3604/udp    # BMC JMX Port
-bmc-jmx-port    3604/tcp    # BMC JMX Port
-#                          Mike Behne <Mike_Behne at bmc.com> September 2002
-comcam-io       3605/udp    # ComCam IO Port
-comcam-io       3605/tcp    # ComCam IO Port
-#                          Don Gilbreath <don at comcam.net> September 2002
-splitlock       3606/udp    # Splitlock Server
-splitlock       3606/tcp    # Splitlock Server
-#                          Andrew Tune <Andrew.Tune at splitlock.com> September 2002
-precise-i3      3607/udp    # Precise I3
-precise-i3      3607/tcp    # Precise I3
-#                          Tomer Shain <tshain at precise.com> September 2002
-trendchip-dcp   3608/udp    # Trendchip control protocol
-trendchip-dcp   3608/tcp    # Trendchip control protocol
-#                          Ming-Jen Chen <mjchen at trendchip.com.tw> September 2002
-cpdi-pidas-cm   3609/udp    # CPDI PIDAS Connection Mon
-cpdi-pidas-cm   3609/tcp    # CPDI PIDAS Connection Mon
-#                          Tony Splaver <tony at cpdi.com> September 2002
-echonet         3610/udp    # ECHONET
-echonet         3610/tcp    # ECHONET
-#                          Takeshi Saito <takeshi.saito at toshiba.co.jp> September 2002
-six-degrees     3611/udp    # Six Degrees Port
-six-degrees     3611/tcp    # Six Degrees Port
-#                          Dan Hansen <dhansen at dimensional.com> September 2002
-hp-dataprotect  3612/udp    # HP Data Protector
-hp-dataprotect  3612/tcp    # HP Data Protector
-#                          Stephen Gold <stephen_gold at hp.com> September 2002
-alaris-disc     3613/udp    # Alaris Device Discovery
-alaris-disc     3613/tcp    # Alaris Device Discovery
-#                          Chris McAllen <cmcallen at alarismed.com> October 2002
-sigma-port      3614/udp    # Invensys Sigma Port
-sigma-port      3614/tcp    # Invensys Sigma Port
-#                          Dr. Sajed Husein <sajed.husein at invensys.com> October 2002
-start-network   3615/udp    # Start Messaging Network
-start-network   3615/tcp    # Start Messaging Network
-#                          Peter Rocca <rocca at multiboard.com> October 2002
-cd3o-protocol   3616/udp    # cd3o Control Protocol
-cd3o-protocol   3616/tcp    # cd3o Control Protocol
-#                          Chris Wilcox <cwilcox at cd3o.com> October 2002
-sharp-server    3617/udp    # ATI SHARP Logic Engine  
-sharp-server    3617/tcp    # ATI SHARP Logic Engine
-#                          Bill Reveile <Bill at allentek.com>
-aairnet-1       3618/udp    # AAIR-Network 1
-aairnet-1       3618/tcp    # AAIR-Network 1
-aairnet-2       3619/udp    # AAIR-Network 2
-aairnet-2       3619/tcp    # AAIR-Network 2 
-#                          James Mealey <jymealey at yahoo.com> October 2002
-ep-pcp          3620/udp    # EPSON Projector Control Port
-ep-pcp          3620/tcp    # EPSON Projector Control Port
-ep-nsp          3621/udp    # EPSON Network Screen Port
-ep-nsp          3621/tcp    # EPSON Network Screen Port
-#                          SEIKO EPSON <Sato.Minoru3 at exc.epson.co.jp> October 2002
-ff-lr-port      3622/udp    # FF LAN Redundancy Port
-ff-lr-port      3622/tcp    # FF LAN Redundancy Port
-#                          Fieldbus Foundation <dave.glanzer at fieldbus.org> October 2002
-haipe-discover  3623/udp    # HAIPIS Dynamic Discovery
-haipe-discover  3623/tcp    # HAIPIS Dynamic Discovery
-#                          Mike Irani <irani_mike at bah.com> October 2002
-dist-upgrade    3624/udp    # Distributed Upgrade Port
-dist-upgrade    3624/tcp    # Distributed Upgrade Port
-#                          Jason Schoon <jason.schoon at intermec.com> October 2002
-volley          3625/udp    # Volley
-volley          3625/tcp    # Volley
-#                          David Catmull <uncommon at uncommonplace.com> October 2002
-bvcdaemon-port  3626/udp    # bvControl Daemon
-bvcdaemon-port  3626/tcp    # bvControl Daemon
-#                          Ravi Gokhale <rgokhale at bindview.com> October 2002
-jamserverport   3627/udp    # Jam Server Port
-jamserverport   3627/tcp    # Jam Server Port
-#                          Art Pope <apope at sarnoff.com> October 2002
-ept-machine     3628/udp    # EPT Machine Interface
-ept-machine     3628/tcp    # EPT Machine Interface
-#                          Victor H. Farrace <vfarrace at eaglept.com> October 2002
-escvpnet        3629/udp    # ESC/VP.net
-escvpnet        3629/tcp    # ESC/VP.net
-#                          Hiroyuki Hashimoto <easymp at exc.epson.co.jp> October 2002
-cs-remote-db    3630/udp    # C&S Remote Database Port
-cs-remote-db    3630/tcp    # C&S Remote Database Port
-cs-services     3631/udp    # C&S Web Services Port
-cs-services     3631/tcp    # C&S Web Services Port
-#                          Computer Software GmbH <BrunoRistok at cs-ag.de> October 2002
-distcc          3632/udp    # distributed complier
-distcc          3632/tcp    # distributed compiler
-#                          Martin Pool <mbp at samba.org> November 2002
-wacp            3633/udp    # Wyrnix AIS port
-wacp            3633/tcp    # Wyrnix AIS port
-#                          Harry T. Vennik <htvennik at zonnet.nl> November 2002
-hlibmgr         3634/udp    # hNTSP Library Manager 
-hlibmgr         3634/tcp    # hNTSP Library Manager
-#                          Kenji Tetsuyama <kenji at onkyo.co.jp> November 2002
-sdo             3635/udp    # Simple Distributed Objects
-sdo             3635/tcp    # Simple Distributed Objects
-#                          Alexander Philippou <alex at noemax.com> November 2002
-opscenter       3636/udp    # OpsCenter
-opscenter       3636/tcp    # OpsCenter
-#                          Ralph Campbell <ralph.campbell at xasystems.com> November 2002
-scservp         3637/udp    # Customer Service Port
-scservp         3637/tcp    # Customer Service Port
-#                          Jonathan A. Zdziarski <johathan at networkdweebs.com> November 2002
-ehp-backup      3638/udp    # EHP Backup Protocol
-ehp-backup      3638/tcp    # EHP Backup Protocol
-#                          Ed Fair <ed_fair at yahoo.com> November 2002
-xap-ha          3639/udp    # Extensible Automation 
-xap-ha          3639/tcp    # Extensible Automation 
-#                          Mark Harrison <Mark at xapautomation.org> November 2002
-netplay-port1   3640/udp    # Netplay Port 1
-netplay-port1   3640/tcp    # Netplay Port 1
-netplay-port2   3641/udp    # Netplay Port 2
-netplay-port2   3641/tcp    # Netplay Port 2
-#                          Predrag Filipovic <pfilipovic at digital5.com> November 2002
-juxml-port      3642/udp    # Juxml Replication port
-juxml-port      3642/tcp    # Juxml Replication port
-#                          Colin Reid <creid at projux.com> November 2002
-audiojuggler    3643/udp    # AudioJuggler
-audiojuggler    3643/tcp    # AudioJuggler
-#                          Morten Mertner <mm at audiojuggler.com> November 2002
-ssowatch        3644/udp    # ssowatch
-ssowatch        3644/tcp    # ssowatch
-#                          Stephane Vinsot <vinsot at enatel.com> November 2002
-cyc             3645/udp    # Cyc 
-cyc             3645/tcp    # Cyc
-#                          Stephen Reed <reed at cyc.com> January 2003            
-xss-srv-port    3646/udp    # XSS Server Port
-xss-srv-port    3646/tcp    # XSS Server Port
-#                          Joe Purcell <jpurcell at ensuretech.com> January 2003
-splitlock-gw    3647/udp    # Splitlock Gateway
-splitlock-gw    3647/tcp    # Splitlock Gateway
-#                          Andrew Tune <Andrew.Tune at splitlock.com> January 2003
-fjcp            3648/udp    # Fujitsu Cooperation Port
-fjcp            3648/tcp    # Fujitsu Cooperation Port
-#                          Kouji Sugisawa <sugisawa.kouji at soft.fujitsu.com> January 2003
-nmmp            3649/udp    # Nishioka Miyuki Msg Protocol
-nmmp            3649/tcp    # Nishioka Miyuki Msg Protocol
-#                          TAKEDA Hiroyuki <takeda at atashi.net> January 2003
-prismiq-plugin  3650/udp    # PRISMIQ VOD plug-in
-prismiq-plugin  3650/tcp    # PRISMIQ VOD plug-in
-#                          Richard Hodges <rhodges at prismiq.com> January 2003
-xrpc-registry   3651/udp    # XRPC Registry
-xrpc-registry   3651/tcp    # XRPC Registry
-#                          Slava Monich <Slava.Monich at nokia.com> January 2003
-vxcrnbuport     3652/udp    # VxCR NBU Default Port
-vxcrnbuport     3652/tcp    # VxCR NBU Default Port
-#                          Boris Star <boris.star at veritas.com> January 2003
-tsp             3653/udp    # Tunnel Setup Protocol
-tsp             3653/tcp    # Tunnel Setup Protocol
-#                          Marc Blanchet <Marc.Blanchet at viagenie.qc.ca> January 2003
-vaprtm          3654/udp    # VAP RealTime Messenger
-vaprtm          3654/tcp    # VAP RealTime Messenger
-#                          Boris Polevoy <vapcom at mail.ru> January 2003
-abatemgr        3655/udp    # ActiveBatch Exec Agent 
-abatemgr        3655/tcp    # ActiveBatch Exec Agent
-abatjss         3656/udp    # ActiveBatch Job Scheduler
-abatjss         3656/tcp    # ActiveBatch Job Scheduler
-#                          Ben Rosenberg <brosenberg at advsyscon.com> January 2003
-immedianet-bcn  3657/udp    # ImmediaNet Beacon
-immedianet-bcn  3657/tcp    # ImmediaNet Beacon
-#                          Bill Homan <bhoman at spanworks.com> January 2003
-ps-ams          3658/udp    # PlayStation AMS (Secure)
-ps-ams          3658/tcp    # PlayStation AMS (Secure)
-#                          Edgar Alan Tu <Edgar_Tu at playstation.sony.com> January 2003
-apple-sasl      3659/udp    # Apple SASL
-apple-sasl      3659/tcp    # Apple SASL
-#                          David M. O'Rourke <daveo at apple.com> January 2003
-can-nds-ssl     3660/udp    # Candle Directory Services using SSL
-can-nds-ssl     3660/tcp    # Candle Directory Services using SSL
-can-ferret-ssl  3661/udp    # Candle Directory Services using SSL
-can-ferret-ssl  3661/tcp    # Candle Directory Services using SSL
-#                          Nic Catrambone <Nic_Catrambond at candle.com> January 2003
-pserver         3662/udp    # pserver
-pserver         3662/tcp    # pserver
-#                          Patrick Furlong <pfurlong at darkknight.ca> January 2003
-dtp             3663/udp    # DIRECWAY Tunnel Protocol
-dtp             3663/tcp    # DIRECWAY Tunnel Protocol
-#                          Greg Gee <ggee at hns.com> January 2003
-ups-engine      3664/udp    # UPS Engine Port
-ups-engine      3664/tcp    # UPS Engine Port
-ent-engine      3665/udp    # Enterprise Engine Port
-ent-engine      3665/tcp    # Enterprise Engine Port
-#                          Mike Delgrosso <mdelgros at tripplite.com> January 2003
-eserver-pap     3666/udp    # IBM EServer PAP
-eserver-pap     3666/tcp    # IBM eServer PAP
-#                          Dave Gimpl <gimpl at us.ibm.com> January 2003
-infoexch        3667/udp    # IBM Information Exchange
-infoexch        3667/tcp    # IBM Information Exchange
-#                          Paul Ford-Hutchinson <paulfordh at uk.ibm.com> January 2003
-dell-rm-port    3668/udp    # Dell Remote Management
-dell-rm-port    3668/tcp    # Dell Remote Management
-#                          Bradley Bransom <bradley_bransom at dell.com> January 2003
-casanswmgmt     3669/udp    # CA SAN Switch Management
-casanswmgmt     3669/tcp    # CA SAN Switch Management
-#                          Emre Tunar <emre.tunar at ca.com> January 2003
-smile           3670/udp    # SMILE TCP/UDP Interface
-smile           3670/tcp    # SMILE TCP/UDP Interface
-#                          Andre Petras <A_Petras at web.de> January 2003
-efcp            3671/udp    # e Field Control (EIBnet)
-efcp            3671/tcp    # e Field Control (EIBnet)
-#                          Marc Goossens <mgoossens at eiba.com> January 2003
-lispworks-orb   3672/udp    # LispWorks ORB
-lispworks-orb   3672/tcp    # LispWorks ORB
-#                          Lisp Support <lisp-support at xanalys.com>
-mediavault-gui  3673/udp    # Openview Media Vault GUI
-mediavault-gui  3673/tcp    # Openview Media Vault GUI
-#                          Stephen Gold <stephen_gold at hp.com> January 2003
-wininstall-ipc  3674/udp    # WinINSTALL IPC Port
-wininstall-ipc  3674/tcp    # WinINSTALL IPC Port
-#                          Bill Somerville <Bill.Somerville at OnDemandSoftware.com> January 2003
-calltrax        3675/udp    # CallTrax Data Port
-calltrax        3675/tcp    # CallTrax Data Port
-#                          Oliver Bailey <oliver at time-lines.com> January 2003
-va-pacbase      3676/udp    # VisualAge Pacbase server
-va-pacbase      3676/tcp    # VisualAge Pacbase server
-#                          Dominique Lelievre <dominique.lelievre at fr.ibm.com> January 2003
-roverlog        3677/udp    # RoverLog IPC
-roverlog        3677/tcp    # RoverLog IPC
-#                          Tom Mayo <tmayo1 at rochester.rr.com> January 2003
-ipr-dglt        3678/udp    # DataGuardianLT
-ipr-dglt        3678/tcp    # DataGuardianLT
-#                          Bruce Carlson <bruce.carlson at iprintl.com> January 2003
-newton-dock     3679/udp    # Newton Dock
-newton-dock     3679/tcp    # Newton Dock
-npds-tracker    3680/udp    # NPDS Tracker
-npds-tracker    3680/tcp    # NPDS Tracker
-#                          Paul Guyot <pguyot at kallisys.net> January 2003
-bts-x73         3681/udp    # BTS X73 Port
-bts-x73         3681/tcp    # BTS X73 Port
-#                          Todd Cooper <todd at DO11073.com> January 2003
-cas-mapi        3682/udp    # EMC SmartPackets-MAPI
-cas-mapi        3682/tcp    # EMC SmartPackets-MAPI
-#                          Koen Schoofs <schoofs_koen at emc.com> January 2003
-bmc-ea          3683/udp    # BMC EDV/EA
-bmc-ea          3683/tcp    # BMC EDV/EA
-#                          Jeffrey Glanz <jeffrey_glanz at bmc.com> January 2003
-faxstfx-port    3684/udp    # FAXstfX
-faxstfx-port    3684/tcp    # FAXstfX
-#                          Alec Carlson <acarlson at smithmicro.com> January 2003
-dsx-agent       3685/udp    # DS Expert Agent
-dsx-agent       3685/tcp    # DS Expert Agent
-#                          NetPro Computing <ports at netpro.com> January 2003
-tnmpv2          3686/udp    # Trivial Network Management
-tnmpv2          3686/tcp    # Trivial Network Management
-#                          Andrea Premoli <Andrea_maria.Premoli at icn.siemens.it> January 2003
-simple-push     3687/udp    # simple-push
-simple-push     3687/tcp    # simple-push
-simple-push-s   3688/udp    # simple-push Secure
-simple-push-s   3688/tcp    # simple-push Secure
-#                          C. Enrique Ortiz <eortiz at j2medeveloper.com> January 2003
-daap            3689/udp    # Digital Audio Access Protocol
-daap            3689/tcp    # Digital Audio Access Protocol
-#                          Amandeep Jawa <daap at apple.com> January 2003
-svn             3690/udp    # Subversion
-svn             3690/tcp    # Subversion
-#                          Greg Hudson <ghudson at mit.edu> January 2003
-magaya-network  3691/udp    # Magaya Network Port
-magaya-network  3691/tcp    # Magaya Network Port
-#                          Jesus David Rodriguez <jesusdavid at magaya.com> February 2003
-intelsync       3692/udp    # Brimstone IntelSync
-intelsync       3692/tcp    # Brimstone IntelSync
-#                          Davey Taylor <davey.taylor at brimstone.net> February 2003
-gttp            3693/udp    # GTTP
-gttp            3693/tcp    # GTTP
-vpncpp          3694/udp    # VPN Cookie Prop Protocol
-vpncpp          3694/tcp    # VPN Cookie Prop Protocol
-#                          Rondald P. Bonica <Ronald.P.Bonica at wcom.com> February 2003
-bmc-data-coll   3695/udp    # BMC Data Collection
-bmc-data-coll   3695/tcp    # BMC Data Collection
-#                          Randall De Weerd <rdeweerd at bmc.com> February 2003
-telnetcpcd      3696/udp    # Telnet Com Port Control
-telnetcpcd      3696/tcp    # Telnet Com Port Control
-#                          Thomas J. Pinkl <tom at hbsrx.com> February 2003
-nw-license      3697/udp    # NavisWorks Licnese System
-nw-license      3697/tcp    # NavisWorks License System
-#                          Tim Wiegand <tim.wiegand at navisworks.com> February 2003
-sagectlpanel    3698/udp    # SAGECTLPANEL
-sagectlpanel    3698/tcp    # SAGECTLPANEL
-#                          Mark Gamble <mark.gamble at sage.com> February 2003
-kpn-icw         3699/udp    # Internet Call Waiting
-kpn-icw         3699/tcp    # Internet Call Waiting
-#                          B.J. Kortekaas <b.j.kortekaas at kpn.com> February 2003
-lrs-paging      3700/udp    # LRS NetPage
-lrs-paging      3700/tcp    # LRS NetPage
-#                          Geoffrey Wossum <geoffrey at pager.net> February 2003
-netcelera       3701/udp    # NetCelera 
-netcelera       3701/tcp    # NetCelera
-#                          Tarek Nabhan <standards at itworx.com> February 2003
-upnp-discovery  3702/udp    # UPNP v2 Discovery
-upnp-discovery  3702/tcp    # UPNP v2 Discovery
-#                          Christian Huitema <huitema at microsoft.com> February 2003
-adobeserver-3   3703/udp    # Adobe Server 3
-adobeserver-3   3703/tcp    # Adobe Server 3
-adobeserver-4   3704/udp    # Adobe Server 4
-adobeserver-4   3704/tcp    # Adobe Server 4
-adobeserver-5   3705/udp    # Adobe Server 5
-adobeserver-5   3705/tcp    # Adobe Server 5
-#                          Frank Soetebeer <frsoeteb at adobe.com> January 2003
-rt-event        3706/udp    # Real-Time Event Port
-rt-event        3706/tcp    # Real-Time Event Port
-rt-event-s      3707/udp    # Real-Time Event Secure Port
-rt-event-s      3707/tcp    # Real-Time Event Secure Port
-#                          Terry Gin <terry_gin at inter-tel.com> February 2003
-#               3708       Unassigned
-ca-idms         3709/udp    # CA-IDMS Server
-ca-idms         3709/tcp    # CA-IDMS Server
-#                          Dave Ross <david.ross at ca.com> 
-portgate-auth   3710/udp    # PortGate Authentication
-portgate-auth   3710/tcp    # PortGate Authentication
-#                          Scott Harris <Scott at XRamp.com> February 2003
-edb-server2     3711/udp    # EBD Server 2
-edb-server2     3711/tcp    # EBD Server 2
-#                          Carlos Portela <cportela at simple-sw.com> February 2003
-sentinel-ent    3712/udp    # Sentinel Enterprise
-sentinel-ent    3712/tcp    # Sentinel Enterprise
-#                          Ian Gordon <ian at n-genltd.co.uk> March 2003
-tftps           3713/udp    # TFTP over TLS
-tftps           3713/tcp    # TFTP over TLS
-#                          Mark mayernick <Mark.Mayernick at thomson.net> March 2003
-delos-dms       3714/udp    # DELOS Direct Messaging
-delos-dms       3714/tcp    # DELOS Direct Messaging
-#                          Ekkehard Morgenstern <flnca at gmx.de> March 2003
-anoto-rendezv   3715/udp    # Anoto Rendezvous Port
-anoto-rendezv   3715/tcp    # Anoto Rendezvous Port
-#                          Ola Sandstrom <ola.sandstrom at anoto.com> March 2003
-wv-csp-sms-cir  3716/udp    # WV CSP SMS CIR Channel
-wv-csp-sms-cir  3716/tcp    # WV CSP SMS CIR Channel
-wv-csp-udp-cir  3717/udp    # WV CSP UDP/IP CIR Channel
-wv-csp-udp-cir  3717/tcp    # WV CSP UDP/IP CIR Channel
-#                          Jon Ingi Ingimundarson <jii at oz.com> March 2003
-opus-services   3718/udp    # OPUS Server Port
-opus-services   3718/tcp    # OPUS Server Port
-#                          Detlef Stoever <mail at ivotec.com> March 2003
-itelserverport  3719/udp    # iTel Server Port
-itelserverport  3719/tcp    # iTel Server Port
-#                          Mark Hendricks <markah at copper.net> March 2003
-ufastro-instr   3720/udp    # UF Astro. Instr. Services
-ufastro-instr   3720/tcp    # UF Astro. Instr. Services
-#                          David B. Hon <hon at astro.ufl.edu> March 2003
-xsync           3721/udp    # Xsync
-xsync           3721/tcp    # Xsync
-xserveraid      3722/udp    # Xserver RAID
-xserveraid      3722/tcp    # Xserver RAID
-#                          Bob Bradley <bradley at apple.com> March 2003
-sychrond        3723/udp    # Sychron Service Daemon
-sychrond        3723/tcp    # Sychron Service Daemon
-#                          Robert Marinelli <bob at sychron.com> March 2003
-battlenet       3724/udp    # Blizzard Battlenet
-battlenet       3724/tcp    # Blizzard Battlenet
-#                          Adrian Luff <aluff at blizzard.com> March 2003
-na-er-tip       3725/udp    # Netia NA-ER Port
-na-er-tip       3725/tcp    # Netia NA-ER Port
-#                          Jean-Pierre Garcia <jp.garcia at netia.net> April 2003
-array-manager   3726/udp    # Xyartex Array Manager
-array-manager   3726/tcp    # Xyratex Array Manager
-#                          David A. Lethe <david_lethe at us.xyratex.com> April 2003
-e-mdu           3727/udp    # Ericsson Mobile Data Unit
-e-mdu           3727/tcp    # Ericsson Mobile Data Unit
-e-woa           3728/udp    # Ericsson Web on Air
-e-woa           3728/tcp    # Ericsson Web on Air
-#                          Marco Casole <marco.casole at ebc.ericsson.se> April 2003
-fksp-audit      3729/udp    # Fireking Audit Port
-fksp-audit      3729/tcp    # Fireking Audit Port
-#                          Richard Thurman <richt at fireking.com> April 2003
-client-ctrl     3730/udp    # Client Control
-client-ctrl     3730/tcp    # Client Control
-#                          Lawrence W. Dunn <larrydunn at aptcomp.com> April 2003
-smap            3731/udp    # Service Manager
-smap            3731/tcp    # Service Manager
-m-wnn           3732/udp    # Mobile Wnn
-m-wnn           3732/tcp    # Mobile Wnn
-#                          Yasunari Yamashita <yamasita at omronsoft.co.jp> April 2003
-multip-msg      3733/udp    # Multipuesto Msg Port
-multip-msg      3733/tcp    # Multipuesto Msg Port
-#                          Felisa Ares <faa06 at tid.es> April 2003
-synel-data      3734/udp    # Synel Data Collection Port
-synel-data      3734/tcp    # Synel Data Collection Port
-#                          David Ashkenazi <david at synel.co.il> April 2003
-pwdis           3735/udp    # Password Distribution
-pwdis           3735/tcp    # Password Distribution
-#                          Robert Erl <roerl at web.de> April 2003
-rs-rmi          3736/udp    # RealSpace RMI
-rs-rmi          3736/tcp    # RealSpace RMI
-#                          Barry McDarby <realspace at starwolf.biz> April 2003
-#               3737       Unassigned (Removed 2003-02-26)
-versatalk       3738/udp    # versaTalk Server Port
-versatalk       3738/tcp    # versaTalk Server Port
-#                          Dr. Kingsley C. Nwosu <knwosu at aglowmail.com> April 2003
-launchbird-lm   3739/udp    # Launchbird LicenseManager
-launchbird-lm   3739/tcp    # Launchbird LicenseManager
-#                          Tom Hawkins <tom1 at launchbird.com> April 2003
-heartbeat       3740/udp    # Heartbeat Protocol
-heartbeat       3740/tcp    # Heartbeat Protocol
-#                          Jeroen Massar <jeroen at unfix.org> April 2003
-wysdma          3741/udp    # WysDM Agent
-wysdma          3741/tcp    # WysDM Agent
-#                          Jim McDonald <Jim.McDonald at sysdm.com> April 2003
-cst-port        3742/udp    # CST - Configuration & Service Tracker
-cst-port        3742/tcp    # CST - Configuration & Service Tracker
-#                          Hai Ou-Yang <hai.ou-yang at sun.com> April 2003
-ipcs-command    3743/udp    # IP Control Systems Ltd.
-ipcs-command    3743/tcp    # IP Control Systems Ltd.
-#                          Paul Anderson <paul.anderson at ip-cs.com> April 2003
-sasg            3744/udp    # SASG
-sasg            3744/tcp    # SASG
-#                          Cristian Petculescu <cristp at hotmail.com> April 2003
-gw-call-port    3745/udp    # GWRTC Call Port
-gw-call-port    3745/tcp    # GWRTC Call Port
-#                          Felisa Ares <faa06 at tid.es> April 2003
-linktest        3746/udp    # LXPRO.COM LinkTest
-linktest        3746/tcp    # LXPRO.COM LinkTest
-linktest-s      3747/udp    # LXPRO.COM LinkTest SSL
-linktest-s      3747/tcp    # LXPRO.COM LinkTest SSL
-#                          Greg Bailey <gbailey at lxpro.com> April 2003
-webdata         3748/udp    # webData
-webdata         3748/tcp    # webData
-#                          Michael Whiteley <michael at whiteley.com> April 2003
-cimtrak         3749/udp    # CimTrak
-cimtrak         3749/tcp    # CimTrak
-cbos-ip-port    3750/udp    # CBOS/IP ncapsalatoin port
-cbos-ip-port    3750/tcp    # CBOS/IP ncapsalation port
-#                          Thomas Dannemiller <tom.dannemiller at rolls-royce.com> April 2003
-gprs-cube       3751/udp    # CommLinx GPRS Cube
-gprs-cube       3751/tcp    # CommLinx GPRS Cube
-#                          Peter Johnson <peter at commlinx.com.au> April 2003
-vipremoteagent  3752/udp    # Vigil-IP RemoteAgent
-vipremoteagent  3752/tcp    # Vigil-IP RemoteAgent
-#                          Bryan Alvord <bryan at vaticor.com> April 2003
-nattyserver     3753/udp    # NattyServer Port
-nattyserver     3753/tcp    # NattyServer Port
-#                          Akira Saito <admin at kobu.com> April 2003
-timestenbroker  3754/udp    # TimesTen Broker Port
-timestenbroker  3754/tcp    # TimesTen Broker Port 
-#                          David Aspinwall <aspinwall at TimesTen.com> April 2003
-sas-remote-hlp  3755/udp    # SAS Remote Help Server
-sas-remote-hlp  3755/tcp    # SAS Remote Help Server
-#                          Gary T. Ciampa <Gary.Ciampa at sas.com> April 2003
-canon-capt      3756/udp    # Canon CAPT Port
-canon-capt      3756/tcp    # Canon CAPT Port
-#                          Takashi Okazawa <okazawa.takashi at canon.co.jp> April 2003
-grf-port        3757/udp    # GRF Server Port
-grf-port        3757/tcp    # GRF Server Port
-#                          Robert Banfill <robert at banfill.net> April 2003
-apw-registry    3758/udp    # apw RMI registry
-apw-registry    3758/tcp    # apw RMI registry
-#                          Dan Davis <Dan.A.Davis at hp.com> April 2003
-exapt-lmgr      3759/udp    # Exapt License Manager
-exapt-lmgr      3759/tcp    # Exapt License Manager
-#                          Christoph Kukulies <info at exapt.de> April 2003
-adtempusclient  3760/udp    # adTEmpus Client
-adtempusclient  3760/tcp    # adTempus Client
-#                          Bill Wingate <bill.wingate at arcanadev.com> May 2003 
-gsakmp          3761/udp    # gsakmp port
-gsakmp          3761/tcp    # gsakmp port
-#                          Uri Meth <umeth at sparta.com> June 2003
-gbs-smp         3762/udp    # GBS SnapMail Protocol
-gbs-smp         3762/tcp    # GBS SnapMail Protocol
-#                          Eric Harris-Braun <eric at glassbead.com> June 2003
-xo-wave         3763/udp    # XO Wave Control Port
-xo-wave         3763/tcp    # XO Wave Control Port
-#                          Bjorn Dittmer-Roche <bjorn at xowave.com> June 2003
-mni-prot-rout   3764/udp    # MNI Protected Routing
-mni-prot-rout   3764/tcp    # MNI Protected Routing
-#                          Tim Behne <timothyb at microwavenetworks.com> June 2003
-rtraceroute     3765/udp    # Remote Traceroute
-rtraceroute     3765/tcp    # Remote Traceroute
-#                          A. Blake Cooper <blake at cluebie.net> June 2003
-listmgr-port    3767/udp    # ListMGR Port
-listmgr-port    3767/tcp    # ListMGR Port
-#                          Takashi Kubota <kubota.takashi at pfu.fugitsu.com> June 2003
-rblcheckd       3768/udp    # rblcheckd server daemon
-rblcheckd       3768/tcp    # rblcheckd server daemon
-#                          Sabri Berisha <sabri at cluecentral.net> June 2003
-haipe-otnk      3769/udp    # HAIPE Network Keying
-haipe-otnk      3769/tcp    # HAIPE Network Keying
-#                          Mike Irani <irani at spawar.navy.mil> June 2003
-cindycollab     3770/udp    # Cinderella Collaboration
-cindycollab     3770/tcp    # Cinderella Collaboration
-#                          Ulrich Kortenkamp  <kortenkamp at cinderella.de> June 2003
-paging-port     3771/udp    # RTP Paging Port
-paging-port     3771/tdp    # RTP Paging Port
-#                          Patrick Ferriter <Patrick.Ferriter at zultys.com> June 2003
-ctp             3772/udp    # Chantry Tunnel Protocol
-ctp             3772/tcp    # Chantry Tunnel Protocol
-#                          Inderpreet Singh <isingh at chantrynetworks.com> June 2003
-ctdhercules     3773/udp    # ctdhercules
-ctdhercules     3773/tcp    # ctdhercules
-#                          Carl Banzhof <cbanzhof at citadel.com> June 2003
-zicom           3774/udp    # ZICOM
-zicom           3774/tcp    # ZICOM
-#                          Sabu Das <sabud at zicomsecure.com> June 2003
-ispmmgr         3775/udp    # ISPM Manager Port
-ispmmgr         3775/tcp    # ISPM Manager Port
-#                          Eric Anderson <eanderson at netvision.com> June 2003
-#               3776       Unassigned
-jibe-eb         3777/udp    # Jibe EdgeBurst
-jibe-eb         3777/tcp    # Jibe EdgeBurst
-#                          Chap Tippin <chad.tippin at jibeinc.com> June 2003						   
-c-h-it-port     3778/udp    # Cutler-Hammer IT Port
-c-h-it-port     3778/tcp    # Cutler-Hammer IT Port
-#                          Thomas Ruchti <thomasmruchti at eaton.com> June 2003
-cognima         3779/udp    # Cognima Replication
-cognima         3779/tcp    # Cognima Replication
-#                          Raplh Grenwell <ralph.greenwell at cognima.com> June 2003
-nnp             3780/udp    # Nuzzler Network Protocol
-nnp             3780/tcp    # Nuzzler Network Protocol
-#                          Andreas Schwarz <andreas.schwarz at securepoint.de> June 2003
-abcvoice-port   3781/udp    # ABCvoice server port
-abcvoice-port   3781/tcp    # ABCvoice server port
-#                          Carlos Gonzalez-Roman Ferrer <iana at abcdatos.com> June 2003
-iso-tp0s        3782/udp    # Secure ISO TP0 port
-iso-tp0s        3782/tcp    # Secure ISO TP0 port
-#                          Herbert Falk <herb at sisconet.com> June 2003
-#               3783-3799  Unassigned
-pwgpsi          3800/udp    # Print Services Interface
-pwgpsi          3800/tcp    # Print Services Interface
-#                          Harry Lewis <harryl at us.ibm.com> May 2003  
-#               3801       Unassigned
-vhd             3802/udp    # VHD
-vhd             3802/tcp    # VHD
-#                          Chris Duncombe <cdunc at intoo.com>    
-#               3803-3844  Unassigned      
-v-one-spp       3845/udp    # V-ONE Single Port Proxy
-v-one-spp       3845/tcp    # V-ONE Single Port Proxy
-#                          Daniel Becker <dbecker at v-one.com> 
-#               3846-3860  Unassigned
-winshadow-hd    3861/udp    # winShadow Host Discovery
-winshadow-hd    3861/tcp    # winShadow Host Discovery
-#                          Shu-Wei Tan <stan at omnicomtech.com> March 2003
-giga-pocket     3862/udp    # GIGA-POCKET
-giga-pocket     3862/tcp    # GIGA-POCKET
-#                          Yoshikazu Watanabe <nabe at sm.sony.co.jp>
-#               3863-3874  Unassigned
-pnbscada        3875/udp    # PNBSCADA
-pnbscada        3875/tcp    # PNBSCADA
-#                          Philip N. Bergstresser <phil at bergstresser.org> 
-#               3876-3884  Unassigned
-topflow-ssl     3885/udp    # TopFlow SSL
-topflow-ssl     3885/tcp    # TopFlow SSL
-#                          Ken Nelson <nelson at TopLayer.com>
-#               3886-3899  Unassigned
-udt_os          3900/udp    # Unidata UDT OS
-udt_os          3900/tcp    # Unidata UDT OS
-#                          James Powell <james at mailhost.unidata.com>
-#               3901-3938  Unassigned
-aamp            3939/udp    # Anti-virus Application Management Port
-aamp            3939/tcp    # Anti-virus Application Management Port
-#                          In-sik Choi <iscard at virusdesk.com> February 2002
-#               3940-3983  Unassigned     
-mapper-nodemgr  3984/udp    # MAPPER network node manager
-mapper-nodemgr  3984/tcp    # MAPPER network node manager
-mapper-mapethd  3985/udp    # MAPPER TCP/IP server
-mapper-mapethd  3985/tcp    # MAPPER TCP/IP server
-mapper-ws_ethd  3986/udp    # MAPPER workstation server
-mapper-ws_ethd  3986/tcp    # MAPPER workstation server
-#                          John C. Horton <jch at unirsvl.rsvl.unisys.com>
-centerline	3987/udp    # Centerline
-centerline	3987/tcp    # Centerline
-#			   Mark Simpson <simpson at centerline.com>
-#		3988-3999  Unassigned
-terabase	4000/udp    # Terabase
-terabase	4000/tcp    # Terabase
-#			   Thor Olson <Thor at terabase.com>   
-####### Potential Conflict of ports ################################
-####### PORT 4000 also used by ICQ <www.icq.com> ################### 
-newoak		4001/udp    # NewOak
-newoak		4001/tcp    # NewOak
-#			   Jim Philippou <jphilippou at newoak.com>
-pxc-spvr-ft	4002/udp    # pxc-spvr-ft
-pxc-spvr-ft	4002/tcp    # pxc-spvr-ft
-pxc-splr-ft	4003/udp    # pxc-splr-ft
-pxc-splr-ft	4003/tcp    # pxc-splr-ft
-pxc-roid	4004/udp    # pxc-roid
-pxc-roid	4004/tcp    # pxc-roid
-pxc-pin		4005/udp    # pxc-pin
-pxc-pin		4005/tcp    # pxc-pin
-pxc-spvr	4006/udp    # pxc-spvr
-pxc-spvr	4006/tcp    # pxc-spvr
-pxc-splr	4007/udp    # pxc-splr
-pxc-splr	4007/tcp    # pxc-splr
-#			   Dave Nesbitt <nesbitt at cp10.es.xerox.com>
-netcheque       4008/udp    # NetCheque accounting 
-netcheque       4008/tcp    # NetCheque accounting 
-#                          B. Clifford Neuman <bcn at isi.edu>
-chimera-hwm	4009/udp    # Chimera HWM
-chimera-hwm     4009/tcp    # Chimera HWM
-#			   Ken Anderson <kanderso at kleber.ICS.UCI.EDU>
-samsung-unidex	4010/udp    # Samsung Unidex
-samsung-unidex  4010/tcp    # Samsung Unidex
-#			   Konstantin V. Vyaznikov <kv at ssm6000.samsung.ru>
-altserviceboot	4011/udp    # Alternate Service Boot
-altserviceboot	4011/tcp    # Alternate Service Boot
-#			   Eric Dittert <Eric_Dittert at ccm.jf.intel.com>
-pda-gate	4012/udp    # PDA Gate
-pda-gate	4012/tcp    # PDA Gate
-#			   Masakuni Okada <masakuni at jp.ibm.com>
-acl-manager	4013/udp    # ACL Manager
-acl-manager	4013/tcp    # ACL Manager
-#			   Toru Murai <murai at saint.nm.fujitsu.co.jp>
-taiclock	4014/udp    # TAICLOCK
-taiclock	4014/tcp    # TAICLOCK
-#			   Dan Bernstein <djb at koobera.math.uic.edu>
-talarian-mcast1	4015/udp    # Talarian Mcast
-talarian-mcast1	4015/tcp    # Talarian Mcast
-talarian-mcast2	4016/udp    # Talarian Mcast
-talarian-mcast2	4016/tcp    # Talarian Mcast
-talarian-mcast3	4017/udp    # Talarian Mcast
-talarian-mcast3	4017/tcp    # Talarian Mcast
-talarian-mcast4	4018/udp    # Talarian Mcast
-talarian-mcast4	4018/tcp    # Talarian Mcast
-talarian-mcast5	4019/udp    # Talarian Mcast
-talarian-mcast5	4019/tcp    # Talarian Mcast
-#			   Geoff Mendal <mendal at talarian.com>
-trap            4020/udp    # TRAP Port
-trap            4020/tcp    # TRAP Port
-#                          Jeffrey C. Byrd <admin at vspacegroup.com>
-nexus-portal    4021/udp    # Nexus Portal
-nexus-portal    4021/tcp    # Nexus Portal
-#                          Damian Tarnawsky <support at nexusconcepts.com>
-dnox            4022/udp    # DNOX
-dnox            4022/tcp    # DNOX
-#                          Leo Rathnayake <leo at perlnet.com>
-esnm-zoning     4023/udp    # ESNM Zoning Port
-esnm-zoning     4023/tcp    # ESNM Zoning Port
-#                          Yong Cai <ycai at emc.com>
-tnp1-port       4024/udp    # TNP1 User Port
-tnp1-port       4024/tcp    # TNP1 User Port
-#                          Tony Gibbs <tony.gibbs at europe.simoco.com>
-partimage       4025/udp    # Partition Image Port
-partimage       4025/tcp    # Partition Image Port
-#                          Franck Ladurelle <ladurelf at partimage.org>
-as-debug        4026/udp    # Graphical Debug Server
-as-debug        4026/tcp    # Graphical Debug Server
-#                          Steve Halverson <shalver at us.ibm.com>
-bxp             4027/udp    # bitxpress
-bxp             4027/tcp    # bitxpress
-#                          Morgan Doyle <morgan at mpt.ie>
-dtserver-port   4028/udp    # DTServer Port
-dtserver-port   4028/tcp    # DTServer Port
-#                          Stephen Aikins <stephen.aikins at embarcadero.com>
-ip-qsig         4029/udp    # IP Q signaling protocol
-ip-qsig         4029/tcp    # IP Q signaling protocol
-#                          Toru Tachibana <tatibana at exs.ts.fujitsu.co.jp>
-jdmn-port       4030/udp    # Accell/JSP Daemon Port
-jdmn-port       4030/tcp    # Accell/JSP Daemon Port
-#                          Art Grand <aig at unify.com>
-suucp           4031/udp    # UUCP over SSL
-suucp           4031/tcp    # UUCP over SSL
-#                          Harald Welte <laforge at gnumonks.org>
-vrts-auth-port  4032/udp    # VERITAS Authorization Service
-vrts-auth-port  4032/tcp    # VERITAS Authorization Service
-#                          Stefan Winkel <stefan at veritas.com>
-sanavigator     4033/udp    # SANavigator Peer Port
-sanavigator     4033/tcp    # SANavigator Peer Port
-#                          Robert J. Chansler <rchansler at SANavigator.com>
-ubxd            4034/udp    # Ubiquinox Daemon
-ubxd            4034/tcp    # Ubiquinox Daemon 
-#                          Kit Smithers <ksmithers at argogroup.com>
-wap-push-http   4035/udp    # WAP Push OTA-HTTP port
-wap-push-http   4035/tcp    # WAP Push OTA-HTTP port
-wap-push-https  4036/udp    # WAP Push OTA-HTTP secure
-wap-push-https  4036/tcp    # WAP Push OTA-HTTP secure
-#                          Matthieu Lachance 
-#                          <matthieu.lachance at openwave.com>
-#               4037-4039  Unassigned
-yo-main         4040/udp    # Yo.net main service
-yo-main         4040/tcp    # Yo.net main service
-#                          John Tintor <jt at yo.net>
-houston         4041/udp    # Rocketeer-Houston
-houston         4041/tcp    # Rocketeer-Houston
-#                          Johnny C. Norris II <jnorris at uiuc.edu>
-ldxp            4042/udp    # LDXP
-ldxp            4042/tcp    # LDXP
-#                          Craig Calef <craig at katmango.com>    
-#		4043-4095  Unassigned
-bre 		4096/udp    # BRE (Bridge Relay Element)
-bre 		4096/tcp    # BRE (Bridge Relay Element)
-#			   Stephen Egbert <egbert at ra.timeplex.com>
-patrolview	4097/udp    # Patrol View
-patrolview	4097/tcp    # Patrol View
-#			   Vincent Chin <vincent_chin at bmc.com>
-drmsfsd		4098/udp    # drmsfsd
-drmsfsd		4098/tcp    # drmsfsd
-#			   Masao Iwai <iwai at kel.fujitsu.co.jp>
-dpcp		4099/udp    # DPCP
-dpcp		4099/tcp    # DPCP
-#			   John Croft <john.croft at calista.demon.co.uk>
-igo-incognito   4100/udp    # IGo Incognito Data Port
-igo-incognito   4100/tcp    # IGo Incognito Data Port
-#                          Paul Reddy <support at igo-incognito.com> February 2002
-#               4101-4110  Unassigned
-xgrid          4111/tcp    # Xgrid
-xgrid          4111/udp    # Xgrid
-jomamqmonitor   4114/udp    # JomaMQMonitor
-jomamqmonitor   4114/tcp    # JomaMQMonitor
-#                          Marcel Hofstetter <marcel.hofstetter at jomasoft.ch> January 2003       
-#               4115-4131  Unassigned
-nuts_dem        4132/udp    # NUTS Daemon
-nuts_dem        4132/tcp    # NUTS Daemon
-nuts_bootp      4133/udp    # NUTS Bootp Server
-nuts_bootp      4133/tcp    # NUTS Bootp Server
-#                          Martin Freiss <freiss.pad at sni.>
-nifty-hmi       4134/udp    # NIFTY-Serve HMI protocol
-nifty-hmi       4134/tcp    # NIFTY-Serve HMI protocol
-#                          Ryuichi Suzuki <SCI00376 at niftyserve.or.jp>
-#               4135-4137  Unassigned
-nettest         4138/udp    # nettest
-nettest         4138/tcp    # nettest
-#                          David Borman <dab at windriver.com> March 2003
-#               4139-4140  Unassigned
-oirtgsvc        4141/udp    # Workflow Server
-oirtgsvc        4141/tcp    # Workflow Server
-oidocsvc        4142/udp    # Document Server
-oidocsvc        4142/tcp    # Document Server
-oidsr           4143/udp    # Document Replication
-oidsr           4143/tcp    # Document Replication
-#                          Norman Brie <norm_brie at sns.ca>
-##########  Compuserve (unoffically) is using port 4144 #########
-#               4144  Unassigned
-vvr-control     4145/udp   # VVR Control
-vvr-control     4145/tcp   # VVR Control
-#                         Ming Xu <ming at veritas.com>
-#               4146-4153  Unassigned
-atlinks         4154/udp    # atlinks device discovery
-atlinks         4154/tcp    # atlinks device discovery
-#                          Scott Griepentrog <griepentrogs at atlinks.com> October 2002
-#               4155-4159  Unassigned
-jini-discovery  4160/udp    # Jini Discovery
-jini-discovery  4160/tcp    # Jini Discovery
-#                          Mark Hodapp <mark.hodapp at sun.com>	
-#		4161-4198  Unassigned
-eims-admin      4199/udp    # EIMS ADMIN
-eims-admin      4199/tcp    # EIMS ADMIN
-#                          Glenn Anderson <glenn at qualcomm.co.nz> 
-#			   Mitra <mitra at earth.path.net>
-corelccam	4300/udp    # Corel CCam
-corelccam	4300/tcp    # Corel CCam
-#			   Jason Aiken <jasona at corelcomputer.com>
-#		4301-4320  Unassigned
-rwhois          4321/udp    # Remote Who Is
-rwhois          4321/tcp    # Remote Who Is
-#                          Mark Kosters  <markk at internic.net>
-unicall         4343/udp    # UNICALL
-unicall         4343/tcp    # UNICALL
-#                          James Powell <james at enghp.unidata.comp>
-vinainstall	4344/udp    # VinaInstall
-vinainstall 	4344/tcp    # VinaInstall
-#			   Jay Slupesky <js at vina-tech.com>
-m4-network-as   4345/udp    # Macro 4 Network AS
-m4-network-as	4345/tcp    # Macro 4 Network AS
-#			   Paul Wren <Paul.Wren at macro4.com>
-elanlm		4346/udp    # ELAN LM
-elanlm		4346/tcp    # ELAN LM
-#			   Paul Ballew <ballew at projtech.com>
-lansurveyor	4347/udp    # LAN Surveyor
-lansurveyor	4347/tcp    # LAN Surveyor
-#			   Michael Swan <swan at neon.com>
-itose		4348/udp    # ITOSE
-itose		4348/tcp    # ITOSE
-#			   Michael Haeuptle <Michael_Haeuptle at hp.com>
-fsportmap	4349/udp    # File System Port Map
-fsportmap	4349/tcp    # File System Port Map
-#			   Ron Minnich <rminnich at sarnoff.com>
-net-device	4350/udp    # Net Device
-net-device	4350/tcp    # Net Device
-#			   Glenn Peterson <glennp at microsoft.com>
-plcy-net-svcs	4351/udp    # PLCY Net Services
-plcy-net-svcs	4351/tcp    # PLCY Net Services
-#			   J.J. Ekstrom
-#		4352       Unassigned
-f5-iquery	4353/udp    # F5 iQuery 
-f5-iquery	4353/tcp    # F5 iQuery 
-#			   Tom Kee <t.kee at f5.com>
-qsnet-trans     4354/udp    # QSNet Transmitter
-qsnet-trans     4354/tcp    # QSNet Transmitter
-qsnet-workst    4355/udp    # QSNet Workstation
-qsnet-workst    4355/tcp    # QSNet Workstation
-qsnet-assist    4356/udp    # QSNet Assistant
-qsnet-assist    4356/tcp    # QSNet Assistant
-qsnet-cond      4357/udp    # QSNet Conductor
-qsnet-cond      4357/tcp    # QSNet Conductor
-qsnet-nucl      4358/udp    # QSNet Nucleus
-qsnet-nucl      4358/tcp    # QSNet Nucleus
-#                          Neer Kleinman <neer at qsr.co.il>
-#		4359-4441  Unassigned
-saris		4442/udp    # Saris
-saris		4442/tcp    # Saris
-pharos		4443/udp    # Pharos
-pharos		4443/tcp    # Pharos
-#			   TeleConsult GmbH, 76275 Ettlingen, Germany
-#			   <teleconsult at t-online.de>	
-krb524          4444/udp    # KRB524
-krb524          4444/tcp    # KRB524
-#                          B. Clifford Neuman <bcn at isi.edu>
-# PROBLEM krb524 assigned the port, 
-# PROBLEM nv used it without an assignment
-nv-video        4444/udp    # NV Video default
-nv-video        4444/tcp    # NV Video default
-#                          Ron Frederick <frederick at parc.xerox.com>
-upnotifyp 	4445/udp    # UPNOTIFYP
-upnotifyp	4445/tcp    # UPNOTIFYP
-#			   Mark Fox <markf at uplanet.com>
-n1-fwp		4446/udp    # N1-FWP
-n1-fwp		4446/tcp    # N1-FWP
-n1-rmgmt	4447/udp    # N1-RMGMT
-n1-rmgmt	4447/tcp    # N1-RMGMT
-#			   Lori Tassin <Ramsey at network-1.com>
-asc-slmd	4448/udp    # ASC Licence Manager
-asc-slmd	4448/tcp    # ASC Licence Manager
-#			   Casper Stoel <cbs at ascinc.com>
-privatewire     4449/udp    # PrivateWire
-privatewire     4449/tcp    # PrivateWire
-#			   Uri Resnitzky <uri at arx.com>
-camp		4450/udp    # Camp
-camp		4450/tcp    # Camp
-ctisystemmsg    4451/udp    # CTI System Msg
-ctisystemmsg    4451/tcp    # CTI System Msg
-ctiprogramload  4452/udp    # CTI Program Load
-ctiprogramload  4452/tcp    # CTI Program Load
-#			   Steven Cliff <sbcliff at controltechnology.com>
-nssalertmgr	4453/udp    # NSS Alert Manager
-nssalertmgr 	4453/tcp    # NSS Alert Manager
-nssagentmgr 	4454/udp    # NSS Agent Manager
-nssagentmgr	4454/tcp    # NSS Agent Manager
-#			   Jim Hill<jhill at symantec.com>
-prchat-user	4455/udp    # PR Chat User
-prchat-user	4455/tcp    # PR Chat User
-prchat-server	4456/udp    # PR Chat Server
-prchat-server	4456/tcp    # PR Chat Server
-prRegister	4457/udp    # PR Register
-prRegister	4457/tcp    # PR Register
-#			   Donny Gilor <dgilor at pop01.ny.us.ibm.net>
-#		4458-4499  Unassigned
-ipsec-msft      4500/udp    # Microsoft IPsec NAT-T
-ipsec-msft      4500/tcp    # Microsoft IPsec NAT-T
-#                          Christian Huitema <Huitema at microsoft.com> March 2002
-#               4501  De-registered (08 June 2001)
-#                          IANA <iana at iana.org>
-#               4502-4544  Unassigned
-worldscores	4545/udp    # WorldScores
-worldscores	4545/tcp    # WorldScores
-#                          Steve Davis <sdavis at optum-inc.com>
-sf-lm           4546/udp    # SF License Manager (Sentinel)
-sf-lm           4546/tcp    # SF License Manager (Sentinel)
-#                          Thomas Koell <info at sf.com>
-lanner-lm	4547/udp    # Lanner License Manager
-lanner-lm	4547/tcp    # Lanner License Manager
-#			   Les Enstone <lenstone at lanner.co.uk>
-#               4548-4554  Unassigned
-rsip            4555/udp    # RSIP Port
-rsip            4555/tcp    # RSIP Port
-#                          RFC 3103    
-#               4556-4558  Unassigned
-hylafax         4559/udp    # HylaFAX
-hylafax         4559/tcp    # HylaFAX
-#                          Lee Howard <iana at hylafax.org> March 2002 
-#               4560-4566  Unassigned
-tram            4567/udp    # TRAM
-tram            4567/tcp    # TRAM
-#                          Joe Wesley <joe.wesley at east.sun.com>
-bmc-reporting   4568/udp    # BMC Reporting 
-bmc-reporting   4568/tcp    # BMC Reporting 
-#                          Randall De Weerd <rdeweerd at bmc.com>
-#               4569-4599  Unassigned
-piranha1        4600/udp    # Piranha1
-piranha1        4600/tcp    # Piranha1
-piranha2        4601/udp    # Piranha2
-piranha2        4601/tcp    # Piranha2
-#                          Primark Corporation <joe.boone at primark.com>
-#               4602-4659  Unassigned
-smaclmgr        4660/udp    # smaclmgr
-smaclmgr        4660/tcp    # smaclmgr
-#                          Hiromi Taki <stg-togo at saint.nm.fujitsu.co.jp> 
-kar2ouche       4661/udp    # Kar2ouche Peer location service
-kar2ouche       4661/tcp    # Kar2ouche Peer location service
-#                          Andy Krouwel <andy at kar2ouche.com>  
-#               4662-4671  Unassigned
-rfa             4672/udp    # remote file access server
-rfa             4672/tcp    # remote file access server
-#               4673-4751  Unassigned
-snap            4752/udp    # Simple Network Audio Protocol
-snap            4752/tcp    # Simple Network Audio Protocol
-#                          Dameon Wagner <d.wagner at freemail.absa.co.za> February 2002
-#               4753-4799  Unassigned
-iims            4800/udp    # Icona Instant Messenging System
-iims            4800/tcp    # Icona Instant Messenging System
-iwec            4801/udp    # Icona Web Embedded Chat
-iwec            4801/tcp    # Icona Web Embedded Chat
-ilss            4802/udp    # Icona License System Server
-ilss            4802/tcp    # Icona License System Server
-#                          Paul Stephen Borlie <paul at icona.it>
-#               4803-4826  Unassigned
-htcp            4827/udp    # HTCP
-htcp            4827/tcp    # HTCP
-#                          Paul Vixie <paul at vix.com>
-#               4828-4836  Unassigned
-varadero-0      4837/udp    # Varadero-0 
-varadero-0      4837/tcp    # Varadero-0
-varadero-1      4838/udp    # Varadero-1
-varadero-1      4838/tcp    # Varadero-1
-varadero-2      4839/udp    # Varadero-2
-varadero-2      4839/tcp    # Varadero-2
-#                          Carlos Arteaga <carteaga at abacoinc.com>
-#               4840-4847  Unassigned
-appserv-http    4848/udp    # App Server - Admin HTTP
-appserv-http    4848/tcp    # App Server - Admin HTTP
-appserv-https   4849/udp    # App Server - Admin HTTPS
-appserv-https   4849/tcp    # App Server - Admin HTTPS
-#                          Sreeram Duvvuru <sduv at sfbay.sun.com> April 2002
-#               4850-4867  Unassigned
-phrelay         4868/udp    # Photon Relay
-phrelay         4868/tcp    # Photon Relay
-phrelaydbg      4869/udp    # Photon Relay Debug
-phrelaydbg      4869/tcp    # Photon Relay Debug
-#                          Michael Hunter <mphunter at qnx.com>
-#               4870-4884  Unassigned
-abbs            4885/udp    # ABBS
-abbs            4885/tcp    # ABBS
-#                          Ryan Rubley <root at ark.dyn.ml.org>
-#               4886-4893  Unassigned
-lyskom          4894/udp    # LysKOM Protocol A
-lyskom          4894/tcp    # LysKOM Protocol A
-#                          Per Cederqvist <ceder at lysator.liu.se>
-#               4895-4898  Unassigned
-radmin-port     4899/udp    # RAdmin Port
-radmin-port     4899/tcp    # RAdmin Port
-#                          Dmitri Znosko <support at radmin.com> March 2003
-#               4900-4982  Unassigned
-att-intercom    4983/udp    # AT&T Intercom
-att-intercom    4983/tcp    # AT&T Intercom
-#                          Tony Hansen <intercom at maillennium.att.com>
-#               4984-4986  Unassigned
-smar-se-port1   4987/udp    # SMAR Ethernet Port 1
-smar-se-port1   4987/tcp    # SMAR Ethernet Port 1
-smar-se-port2   4988/udp    # SMAR Ethernet Port 2
-smar-se-port2   4988/tcp    # SMAR Ethernet Port 2
-#                          Delcio Prizon <dprizon at smar.com.br>
-parallel        4989/udp    # Parallel for GAUSS (tm)
-parallel        4989/tcp    # Parallel for GAUSS (tm)
-#                          Matthew Ford <Matthew.Ford at forward.com.au> March 2003
-#               4990-4999  Unassigned
-commplex-main	5000/udp # 
-commplex-main	5000/tcp # 
-commplex-link	5001/udp # 
-commplex-link	5001/tcp # 
-rfe             5002/udp    # radio free ethernet
-rfe             5002/tcp    # radio free ethernet
-fmpro-internal  5003/udp    # FileMaker, Inc. - Proprietary name binding
-fmpro-internal  5003/tcp    # FileMaker, Inc. - Proprietary transport
-#                          Clay Maeckel <clay_maeckel at filemaker.com>
-avt-profile-1   5004/udp    # avt-profile-1
-avt-profile-1   5004/tcp    # avt-profile-1
-avt-profile-2   5005/udp    # avt-profile-2
-avt-profile-2   5005/tcp    # avt-profile-2
-#                          Henning Schulzrinne <schulzrinne at fokus.gmd.de>
-wsm-server      5006/udp    # wsm server
-wsm-server      5006/tcp    # wsm server
-wsm-server-ssl  5007/udp    # wsm server ssl
-wsm-server-ssl  5007/tcp    # wsm server ssl
-#                          Adam Berk <aberk at empirix.com>
-synapsis-edge   5008/udp    # Synapsis EDGE
-synapsis-edge   5008/tcp    # Synapsis EDGE
-#                          Paul Schilling <PaulS at Synapsis.com>
-#               5009       Unassigned
-telelpathstart  5010/udp    # TelepathStart
-telelpathstart  5010/tcp    # TelepathStart
-telelpathattack 5011/udp    # TelepathAttack
-telelpathattack 5011/tcp    # TelepathAttack
-#                          Helmuth Breitenfellner <hbreitenf at vnet.imb.com>
-#               5012-5019  Unassigned
-zenginkyo-1     5020/udp    # zenginkyo-1
-zenginkyo-1     5020/tcp    # zenginkyo-1
-zenginkyo-2     5021/udp    # zenginkyo-2
-zenginkyo-2     5021/tcp    # zenginkyo-2
-#                          Masashi Suzaki <susakim at noa.nttdata.jp>
-mice            5022/udp    # mice server
-mice            5022/tcp    # mice server
-#                          Alan Clifford <alan at clifford.ac>
-htuilsrv        5023/udp    # Htuil Server for PLD2
-htuilsrv        5023/tcp    # Htuil Server for PLD2
-#                          Dennis Reinhardt <DennisR at dair.com>
-scpi-telnet     5024/udp    # SCPI-TELNET
-scpi-telnet     5024/tcp    # SCPI-TELNET
-scpi-raw        5025/udp    # SCPI-RAW
-scpi-raw        5025/tcp    # SCPI-RAW
-#                          Ryan Columbus <IANA_Contact at Agilent.com> October 2002
-#               5026-5041  Unassigned
-asnaacceler8db  5042/udp    # asnaacceler8db
-asnaacceler8db  5042/tcp    # asnaacceler8db
-#                          Walter Goodwin <wpgoodwin at asna.com>
-#               5043-5049  Unassigned 
-mmcc            5050/udp    # multimedia conference control tool
-mmcc            5050/tcp    # multimedia conference control tool
-#                          Steve Casner <Casner at isi.edu>
-ita-agent       5051/udp    # ITA Agent
-ita-agent       5051/tcp    # ITA Agent
-ita-manager     5052/udp    # ITA Manager
-ita-manager     5052/tcp    # ITA Manager
-#                          Don Merrell <donmer at axent.com>
-#               5053-5054  Unassigned
-unot            5055/udp    # UNOT
-unot            5055/tcp    # UNOT
-#                          Gordon Mohr <gmohr at cmgisolutions.com>
-intecom-ps1     5056/udp    # Intecom PS 1
-intecom-ps1     5056/tcp    # Intecom PS 1
-intecom-ps2     5057/udp    # Intecom PS 2
-intecom-ps2     5057/tcp    # Intecom PS 2
-#                          David Meermans <dmeermans at intecom.com>
-#               5058-5059  Unassigned
-sip             5060/udp    # SIP
-sip             5060/tcp    # SIP
-sip-tls         5061/udp    # SIP-TLS
-sip-tls         5061/tcp    # SIP-TLS
-#                          Henning Schulzrinne <hgs at cs.columbia.edu>
-#               5062-5063  Unassigned
-ca-1            5064/udp    # Channel Access 1
-ca-1            5064/tcp    # Channel Access 1
-ca-2            5065/udp    # Channel Access 2
-ca-2            5065/tcp    # Channel Access 2
-#                          Jeffrey Hill <johill at lanl.gov> August 2002
-#               5066-5067  Unassigned
-stanag-5066     5066/udp    # STANAG-5066-SUBNET-INTF
-stanag-5066     5066/tcp    # STANAG-5066-SUBNET-INTF
-#                          Donald G. Kallgren
-#                          <Donald.Kallgren at nc3a.nato.int>      
-#               5062-5068  Unassigned
-i-net-2000-npr  5069/udp    # I/Net 2000-NPR
-i-net-2000-npr  5069/tcp    # I/Net 2000-NPR
-#                          Kenny Garrison <Kenny_Garrison at csicontrols.com>
-#               5070       Unassigned
-powerschool     5071/udp    # PowerSchool
-powerschool     5071/tcp    # PowerSchool
-#                          Greg Porter <gporter at powerschool.com>
-#               5072-5080  Unassigned
-sdl-ets         5081/udp    # SDL - Ent Trans Server
-sdl-ets         5081/tcp    # SDL - Ent Trans Server
-#                          Marc Morin <mmorin at sdlintl.com> April 2002
-#               5082-5092  Unassigned
-sentinel-lm     5093/udp    # Sentinel LM
-sentinel-lm     5093/tcp    # Sentinel LM
-#                          Derick Snyder <dsnyder at rainbow.com>
-#               5094-5098  Unassigned 
-sentlm-srv2srv  5099/udp    # SentLM Srv2Srv
-sentlm-srv2srv  5099/tcp    # SentLM Srv2Srv
-#                          Derick Snyder <dsnyder at rainbow.com>
-#               5100       Unassigned
-talarian-udp    5101/udp    # Talarian_UDP
-talarian-tcp    5101/tcp    # Talarian_TCP
-#                          Leo Martins <leo at talarian.com>
-#               5102-5136  Unassigned
-ctsd            5137/udp    # MyCTS server port
-ctsd            5137/tcp    # MyCTS server port
-#                          Jilles Oldenbeuving <ojilles at hotmail.com> June 2002
-#               5138-5144  Unassigned
-rmonitor_secure	5145/udp    # RMONITOR SECURE
-rmonitor_secure	5145/tcp    # RMONITOR SECURE
-#                          Kory Hamzeh <kory at ascend.com> 
-#               5146-5149  Unassigned
-atmp            5150/udp    # Ascend Tunnel Management Protocol
-atmp            5150/tcp    # Ascend Tunnel Management Protocol
-#                          Kory Hamzeh <kory at ascend.com>
-esri_sde        5151/udp    # ESRI SDE Remote Start
-esri_sde        5151/tcp    # ESRI SDE Instance
-sde-discovery   5152/udp    # ESRI SDE Instance Discovery
-sde-discovery   5152/tcp    # ESRI SDE Instance Discovery
-#                          Peter Aronson <paronson at esri.com> 
-#               5153-5164  Unassigned
-ife_icorp       5165/udp    # ife_1corp
-ife_icorp       5165/tcp    # ife_1corp
-#                          Paul Annala <paa at bull.se>
-#               5166-5189  Unassigned
-aol             5190/udp    # America-Online
-aol             5190/tcp    # America-Online
-#                          Marty Lyons <marty at aol.com>
-aol-1           5191/udp    # AmericaOnline1
-aol-1           5191/tcp    # AmericaOnline1
-aol-2           5192/udp    # AmericaOnline2
-aol-2           5192/tcp    # AmericaOnline2
-aol-3           5193/udp    # AmericaOnline3
-aol-3           5193/tcp    # AmericaOnline3
-#                          Bruce Mackey <BAMackey at aol.com>
-#               5194-5199  Unassigned
-targus-getdata  5200/udp    # TARGUS GetData  
-targus-getdata  5200/tcp    # TARGUS GetData 
-targus-getdata1 5201/udp    # TARGUS GetData 1
-targus-getdata1 5201/tcp    # TARGUS GetData 1
-targus-getdata2 5202/udp    # TARGUS GetData 2
-targus-getdata2 5202/tcp    # TARGUS GetData 2
-targus-getdata3 5203/udp    # TARGUS GetData 3
-targus-getdata3 5203/tcp    # TARGUS GetData 3 
-#			   John Keaveney <johnkeaveney at targusinfo.com>
-#               5204-5221  Unassigned
-jabber-client   5222/udp    # Jabber Client Connection
-jabber-client   5222/tcp    # Jabber Client Connection
-#                          David Waite <mass at akuma.org> February 2002 
-#               5223-5224  Unassigned
-hp-server       5225/udp    # HP Server
-hp-server       5225/tcp    # HP Server
-hp-status       5226/udp    # HP Status
-hp-status       5226/tcp    # HP Status
-#                          Brett Green <Brett_Green at HP.Com>
-#               5227-5235  Unassigned
-padl2sim	5236/udp # 
-padl2sim	5236/tcp # 
-#               5237-5249  Unassigned
-igateway        5250/udp    # iGateway
-igateway        5250/tcp    # iGateway
-#                          Greg Bodine <gregory.bodine at ca.com> February 2002
-#               5251-5263  Unassigned
-3com-njack-1    5264/udp    # 3Com Network Jack Port 1
-3com-njack-1    5264/tcp    # 3Com Network Jack Port 1 
-3com-njack-2    5265/udp    # 3Com Network Jack Port 2
-3com-njack-2    5265/tcp    # 3Com Network Jack Port 2
-#                          Abhay Rajaram <Abhay_Rajaram at 3Com.com> March 2003
-#               5266-5268  Unassigned
-jabber-server   5269/udp    # Jabber Server Connection
-jabber-server   5269/tcp    # Jabber Server Connection
-#                          David Waite <mass at akuma.org> February 2002
-#               5270-5271  Unassigned
-pk		5272/udp    # PK
-pk		5272/tcp    # PK
-#			   Patrick Kara <Patrick at EBA.NET>
-#               5273-5281  Unassigned
-transmit-port   5282/udp    # Marimba Transmitter Port
-transmit-port   5282/tcp    # Marimba Transmitter Port
-#                          Johan Eriksson <johan at marimba.com> April 2002
-#               5283-5299  Unassigned
-hacl-hb		5300/udp	 # # HA cluster heartbeat
-hacl-hb		5300/tcp         # # HA cluster heartbeat
-hacl-gs		5301/udp	 # # HA cluster general services
-hacl-gs		5301/tcp	 # # HA cluster general services
-hacl-cfg	5302/udp	 # # HA cluster configuration
-hacl-cfg	5302/tcp	 # # HA cluster configuration
-hacl-probe	5303/udp	 # # HA cluster probing
-hacl-probe	5303/tcp	 # # HA cluster probing
-hacl-local      5304/udp         # 
-hacl-local      5304/tcp         # # HA Cluster Commands
-hacl-test       5305/udp                             # 
-hacl-test       5305/tcp         # # HA Cluster Test                    
-#                               Eric Soderberg <seric at hposl102.cup.hp>
-#                               Edward Yim <eyim at hpmfas4.cup.hp.com>
-sun-mc-grp	5306/udp    # Sun MC Group
-sun-mc-grp	5306/tcp    # Sun MC Group
-#			   Michael DeMoney <demoney at eng.sun.com>
-sco-aip		5307/udp    # SCO AIP
-sco-aip		5307/tcp    # SCO AIP
-#			   Barrie Cooper <barrie at sco.com>
-cfengine	5308/udp    # CFengine
-cfengine 	5308/tcp    # CFengine
-#			   Mark Burgess <mark.burgess at iu.hioslo.no>
-jprinter  	5309/udp    # J Printer
-jprinter	5309/tcp    # J Printer
-#			   Ken Blackwell <kenb at bristol.com>
-outlaws		5310/udp    # Outlaws
-outlaws		5310/tcp    # Outlaws
-#			   Richard Fife <richardf at lucasarts.com>
-tmlogin		5311/udp    # TM Login
-tmlogin		5311/tcp    # TM Login
-#			   Eric Sharakan <eric.sharakan at east.sun.com>
-#               5312-5313  Unassigned
-opalis-rbt-ipc  5314/udp    # opalis-rbt-ipc
-opalis-rbt-ipc  5314/tcp    # opalis-rbt-ipc
-#                          Laurent Domenech <ldomenech at opalis.com>
-hacl-poll       5315/udp    # HA Cluster UDP Polling
-hacl-poll       5315/tcp    # HA Cluster UDP Polling
-#                          Hoa Nguyen <hoan at cup.hp.com>
-#               5316-5352  Unassigned
-mdns            5353/udp    # Multicast DNS
-mdns            5353/tcp    # Multicast DNS
-#                          Stuart Cheshire <cheshire at multicastdns.org>
-#     		5354-5399  Unassigned
-excerpt		5400/udp    # Excerpt Search
-excerpt		5400/tcp    # Excerpt Search
-excerpts	5401/udp    # Excerpt Search Secure
-excerpts	5401/tcp    # Excerpt Search Secure
-#			   John Hinsdale <hin at alma.com>
-mftp		5402/udp    # MFTP
-mftp		5402/tcp    # MFTP
-#			   Alan Rosenberg <arosen at starburstcom.com>
-hpoms-ci-lstn	5403/udp    # HPOMS-CI-LSTN
-hpoms-ci-lstn   5403/tcp    # HPOMS-CI-LSTN
-hpoms-dps-lstn  5404/udp    # HPOMS-DPS-LSTN
-hpoms-dps-lstn  5404/tcp    # HPOMS-DPS-LSTN
-#			   Harold Froehling <hrf at cup.hp.com>
-netsupport	5405/udp    # NetSupport
-netsupport	5405/tcp    # NetSupport
-#			   Paul Sanders <pe77 at dial.pipex.com>
-systemics-sox	5406/udp    # Systemics Sox
-systemics-sox	5406/tcp    # Systemics Sox
-#			   Gary Howland <gary at systemics.com>
-foresyte-clear  5407/udp    # Foresyte-Clear
-foresyte-clear  5407/tcp    # Foresyte-Clear
-foresyte-sec	5408/udp    # Foresyte-Sec
-foresyte-sec    5408/tcp    # Foresyte-Sec
-#			   Jorge Aldana <operator at foresyte.com>
-salient-dtasrv  5409/udp    # Salient Data Server
-salient-dtasrv  5409/tcp    # Salient Data Server
-salient-usrmgr  5410/udp    # Salient User Manager
-salient-usrmgr  5410/tcp    # Salient User Manager
-#                          Richard Farnham <rfarnham at salient.com> 
-actnet		5411/udp    # ActNet
-actnet		5411/tcp    # ActNet
-#			   Simon Robillard <RobillardS at actresearch.com>
-continuus	5412/udp    # Continuus
-continuus	5412/tcp    # Continuus
-#			   Steven Holtsberg <steveh at continuus.com>
-wwiotalk	5413/udp    # WWIOTALK
-wwiotalk	5413/tcp    # WWIOTALK
-#			   Roger Knobbe <RogerK at Wonderware.COM>
-statusd		5414/udp    # StatusD
-statusd		5414/tcp    # StatusD
-#			   Stephen Misel <steve at satelnet.org>
-ns-server	5415/udp    # NS Server
-ns-server	5415/tcp    # NS Server
-#			   Jeffrey Chiao <chiaoj at netsoft.com>
-sns-gateway	5416/udp    # SNS Gateway
-sns-gateway	5416/tcp    # SNS Gateway
-sns-agent	5417/udp    # SNS Agent
-sns-agent	5417/tcp    # SNS Agent
-#	    		   Mary Holstage <holstege at firstfloor.com>
-mcntp		5418/udp    # MCNTP
-mcntp		5418/tcp    # MCNTP
-#			   Heiko Rupp <hwr at pilhuhn.de>
-dj-ice		5419/udp    # DJ-ICE
-dj-ice		5419/tcp    # DJ-ICE
-#			   Don Tyson <don.tyson at cor.dowjones.com>
-cylink-c	5420/udp    # Cylink-C
-cylink-c	5420/tcp    # Cylink-C
-#			   John Jobe <jjobe at cylink.com>
-netsupport2	5421/udp    # Net Support 2
-netsupport2	5421/tcp    # Net Support 2
-#			   Paul Sanders <p.sanders at dial.pipex.com>
-salient-mux     5422/udp    # Salient MUX
-salient-mux     5422/tcp    # Salient MUX
-#                          Richard Farnham <rfarnham at salient.com>
-virtualuser     5423/udp    # VIRTUALUSER
-virtualuser     5423/tcp    # VIRTUALUSER
-#                          Chad Williams <chad at apple.com>
-#               5424-5425  Unassigned
-devbasic        5426/udp    # DEVBASIC
-devbasic        5426/tcp    # DEVBASIC
-#                          Curtis Smith <curtis.smith at vsin.com>
-sco-peer-tta    5427/udp    # SCO-PEER-TTA
-sco-peer-tta    5427/tcp    # SCO-PEER-TTA
-#                          Andrew Shire <sndrewsh at sco.com>
-telaconsole     5428/udp    # TELACONSOLE
-telaconsole     5428/tcp    # TELACONSOLE
-#                          Joseph M. Newcomer <newcomer at flounder.com>
-base            5429/udp    # Billing and Accounting System Exchange
-base            5429/tcp    # Billing and Accounting System Exchange
-#                          Odo Maletzki <Odo.Maletzki at ioag.de>
-radec-corp      5430/udp    # RADEC CORP
-radec-corp      5430/tcp    # RADEC CORP
-#                          David Chell <david at softlife.co.nz>
-park-agent      5431/udp    # PARK AGENT
-park-agent      5431/tcp    # PARK AGENT
-#                          John Clifford <John.Clifford at veritas.com>
-postgresql      5432/udp    # PostgreSQL Database
-postgresql      5432/tcp    # PostgreSQL Database
-#                          Tom Lane <tgl at sss.pgh.pa.us>
-#		5433-5434  Unassigned
-dttl            5435/udp    # Data Tunneling Transceiver Linking (DTTL)
-dttl            5435/tcp    # Data Tunneling Transceiver Linking (DTTL)
-#                          Richard Olsen <Olsen7 at liquefaction.com>
-#               5436-5453  Unassigned
-apc-5454        5454/udp    # APC 5454
-apc-5454        5454/tcp    # APC 5454
-apc-5455        5455/udp    # APC 5455
-apc-5455        5455/tcp    # APC 5455
-apc-5456        5456/udp    # APC 5456
-apc-5456        5456/tcp    # APC 5456
-#                          American Power Conversion <ports at apcc.com>
-#               5457-5460  Unassigned
-silkmeter       5461/udp    # SILKMETER
-silkmeter       5461/tcp    # SILKMETER
-#                          Alexander Kotopoulis <alexk at segue.com>
-ttl-publisher   5462/udp    # TTL Publisher
-ttl-publisher   5462/tcp    # TTL Publisher
-#                          Peter Jacobs <pjacobs at tullib.com>
-ttlpriceproxy   5463/udp    # TTL Price Proxy
-ttlpriceproxy   5463/tcp    # TTL Price Proxy
-#                          Peter Jacobs <pjacobs at tullib.com>
-#               5464       Unassigned
-netops-broker   5465/udp    # NETOPS-BROKER
-netops-broker   5465/tcp    # NETOPS-BROKER
-#                          John R. Deuel <kink at netops.com>
-#		5466-5499  Unassigned
-fcp-addr-srvr1  5500/udp    # fcp-addr-srvr1
-fcp-addr-srvr1  5500/tcp    # fcp-addr-srvr1
-fcp-addr-srvr2  5501/udp    # fcp-addr-srvr2
-fcp-addr-srvr2  5501/tcp    # fcp-addr-srvr2
-fcp-srvr-inst1  5502/udp    # fcp-srvr-inst1
-fcp-srvr-inst1  5502/tcp    # fcp-srvr-inst1
-fcp-srvr-inst2  5503/udp    # fcp-srvr-inst2
-fcp-srvr-inst2  5503/tcp    # fcp-srvr-inst2
-fcp-cics-gw1    5504/udp    # fcp-cics-gw1
-fcp-cics-gw1    5504/tcp    # fcp-cics-gw1
-#			   Mark Zeiss <mark.r.zeiss at ac.com>
-#               5505-5552  Unassigned
-sgi-eventmond   5553/udp    # SGI Eventmond Port
-sgi-eventmond   5553/tcp    # SGI Eventmond Port
-#                          Andrei Vilkotski <andreiv at sgi.com> June 2003
-sgi-esphttp     5554/udp    # SGI ESP HTTP
-sgi-esphttp     5554/tcp    # SGI ESP HTTP
-#                          Vladimir Legalov <legalov at sgi.com>
-############Port 5555 also used by HP Omniback#####################
-personal-agent  5555/udp    # Personal Agent
-personal-agent  5555/tcp    # Personal Agent
-#			   Jackie Wu <jackiew at infoseek.com>
-###################################################################
-#		5556-5565  Unassigned
-udpplus         5566/udp    # UDPPlus
-udpplus         5566/tcp    # UDPPlus
-#                          Cody Gibson <cody.gibson at intermec.com>
-#               5567-5598  Unassigned
-esinstall	5599/udp    # Enterprise Security Remote Install
-esinstall	5599/tcp    # Enterprise Security Remote Install
-esmmanager	5600/udp    # Enterprise Security Manager
-esmmanager	5600/tcp    # Enterprise Security Manager
-esmagent	5601/udp    # Enterprise Security Agent
-esmagent	5601/tcp    # Enterprise Security Agent
-#			   Kimberly Gibbs <kimgib at CCGATE-UT.AXENT.COM>
-a1-msc		5602/udp    # A1-MSC
-a1-msc		5602/tcp    # A1-MSC
-a1-bs		5603/udp    # A1-BS
-a1-bs		5603/tcp    # A1-BS
-a3-sdunode	5604/udp    # A3-SDUNode
-a3-sdunode	5604/tcp    # A3-SDUNode
-a4-sdunode	5605/udp    # A4-SDUNode
-a4-sdunode	5605/tcp    # A4-SDUNode
-#			   Mike Dolan <MDolan at ihcmail.ih.lucent.com>
-#               5606-5630  Unassigned
-pcanywheredata  5631/udp    # pcANYWHEREdata
-pcanywheredata  5631/tcp    # pcANYWHEREdata
-pcanywherestat  5632/udp    # pcANYWHEREstat
-pcanywherestat  5632/tcp    # pcANYWHEREstat
-#                          Jon Rosarky <JRosarky at symantec.com>
-#               5633-5672  Unassigned
-jms             5673/udp    # JACL Message Server
-jms             5673/tcp    # JACL Message Server
-#                          Stuart Allen <stuart at jacl.animats.net> February 2002
-hyperscsi-port  5674/udp    # HyperSCSI Port
-hyperscsi-port  5674/tcp    # HyperSCSI Port
-#                          Data Storage Institute, Singapore 
-#                          <Patrick at dsi.nus.edu.sg> February 2002
-v5ua            5675/udp    # V5UA application port
-v5ua            5675/tcp    # V5UA application port
-#                          Sanjay Rao <rsanjay at nortelnetworks.com> February 2002
-raadmin         5676/udp    # RA Administration
-raadmin         5676/tcp    # RA Administration
-#                          Sergei Zjaikin <serge at previo.ee> February 2002
-questdb2-lnchr  5677/udp    # Quest Central DB2 Launchr
-questdb2-lnchr  5677/tcp    # Quest Central DB2 Launchr
-#                          Robert M. Mackowiak <rmackowiak at quest.com> February 2002
-rrac            5678/udp    # Remote Replication Agent Connection  
-rrac            5678/tcp    # Remote Replication Agent Connection  
-dccm            5679/udp    # Direct Cable Connect Manager
-dccm            5679/tcp    # Direct Cable Connect Manager
-#                          Mark Miller <mmiller at MICROSOFT.com>
-#               5680-5687  Unassigned
-ggz             5688/udp    # GGZ Gaming Zone
-ggz             5688/tcp    # GGZ Gaming Zone
-#                          Josef Spillner <js177634 at inf.tu-dresden.de> January 2003  
-#               5689-5712  Unassigned
-proshareaudio   5713/udp    # proshare conf audio
-proshareaudio   5713/tcp    # proshare conf audio
-prosharevideo   5714/udp    # proshare conf video
-prosharevideo   5714/tcp    # proshare conf video
-prosharedata    5715/udp    # proshare conf data 
-prosharedata    5715/tcp    # proshare conf data 
-prosharerequest 5716/udp    # proshare conf request
-prosharerequest 5716/tcp    # proshare conf request
-prosharenotify  5717/udp    # proshare conf notify 
-prosharenotify  5717/tcp    # proshare conf notify 
-#                          <gunner at ibeam.intel.com>
-#               5718-5719  Unassigned
-ms-licensing    5720/udp    # MS-Licensing 
-ms-licensing    5720/tcp    # MS-Licensing
-#                          Thomas Lindeman <tlinde at microsoft.com> November 2002
-#               5721-5728  Unassigned
-openmail        5729/udp    # Openmail User Agent Layer
-openmail        5729/tcp    # Openmail User Agent Layer
-#                          OpenMail Encyclopedia <opencyc at hpopd.pwd.hp.com>
-#                          Don Loughry <DON_LOUGHRY at hp-cupertino-om4.om.hp.com>
-unieng          5730/udp    # Steltor's calendar access
-unieng          5730/tcp    # Steltor's calendar access
-#                          Bernard Desruisseaux <bernard at steltor.com>
-#               5731-5740  Unassigned           
-ida-discover1   5741/udp    # IDA Discover Port 1
-ida-discover1   5741/tcp    # IDA Discover Port 1
-ida-discover2   5742/udp    # IDA Discover Port 2
-ida-discover2   5742/tcp    # IDA Discover Port 2
-#                          MPITech Support <morten.christensen at I-DATA.COM>
-#               5743-5744  Unassigned
-fcopy-server    5745/udp    # fcopy-server
-fcopy-server    5745/tcp    # fcopy-server
-fcopys-server   5746/udp    # fcopys-server
-fcopys-server   5746/tcp    # fcopys-server
-#                          Moshe Leibovitch <moshe at softlinkusa.com
-#               5747-5754  Unassigned
-openmailg       5755/udp    # OpenMail Desk Gateway server
-openmailg       5755/tcp    # OpenMail Desk Gateway server
-x500ms          5757/udp    # OpenMail X.500 Directory Server
-x500ms          5757/tcp    # OpenMail X.500 Directory Server
-openmailns      5766/udp    # OpenMail NewMail Server
-openmailns      5766/tcp    # OpenMail NewMail Server
-s-openmail      5767/udp    # OpenMail Suer Agent Layer (Secure)
-s-openmail      5767/tcp    # OpenMail Suer Agent Layer (Secure)
-openmailpxy	5768/udp    # OpenMail CMTS Server
-openmailpxy	5768/tcp    # OpenMail CMTS Server
-#                          OpenMail Encyclopedia >opencyc at hpopd.pwd.hp.com>
-#                          Don Loughry <DON_LOUGHRY at hp-cupertino-om4.om.hp.com>
-#               5769-5770  Unassigned
-netagent	5771/udp    # NetAgent
-netagent	5771/tcp    # NetAgent
-#			   Bradley Birnbaum <bradley.birnbaum at eshare.com>
-#               5772-5812  Unassigned
-icmpd           5813/udp    # ICMPD
-icmpd           5813/tcp    # ICMPD
-#                          Shane O'Donnell <shane at opennms.org> 
-#               5814-5858  Unassigned 
-wherehoo        5859/udp    # WHEREHOO
-wherehoo        5859/tcp    # WHEREHOO
-#                          Jim Youll <jim at media.mit.edu>
-#               5860-5967  Unassigned 
-mppolicy-v5	5968/udp    # mppolicy-v5
-mppolicy-v5	5968/tcp    # mppolicy-v5
-mppolicy-mgr	5969/udp    # mppolicy-mgr
-mppolicy-mgr	5969/tcp    # mppolicy-mgr
-#			   Yutaka Ono <ono at saint.nm.fujitsu.co.jp>
-#               5970-5986  Unassigned
-wbem-rmi        5987/udp    # WBEM RMI
-wbem-rmi        5987/tcp    # WBEM RMI
-wbem-http       5988/udp    # WBEM HTTP
-wbem-http       5988/tcp    # WBEM HTTP
-#                          Jim Davis <james.d.davis at sun.com> 
-wbem-https      5989/udp    # WBEM HTTPS
-wbem-https      5989/tcp    # WBEM HTTPS
-#                          Jim Davis <james.d.davis at east.sun.com>
-#               5990       Unassigned (Removed 2003-02-26)
-nuxsl           5991/udp    # NUXSL
-nuxsl           5991/tcp    # NUXSL
-#                          Kai Kretschmann <K.Kretschmann at security-gui.de> March 2002
-#               5992-5998  Unassigned
-cvsup           5999/udp    # CVSup
-cvsup           5999/tcp    # CVSup
-#                          Randall Atkinson <rja at inet.org>
-#                          Stephen Gildea <gildea at lcs.mit.edu>
-ndl-ahp-svc     6064/udp    # NDL-AHP-SVC
-ndl-ahp-svc     6064/tcp    # NDL-AHP-SVC
-#                          John Richmond <john at ndl.co.uk>
-winpharaoh      6065/udp    # WinPharaoh
-winpharaoh      6065/tcp    # WinPharaoh
-#	                   Basil Lee <basil.lee at gnnettest.com>
-ewctsp          6066/udp    # EWCTSP
-ewctsp          6066/tcp    # EWCTSP
-#                          Mark Bailon <mark.bailon at ericsson.com>
-srb             6067/udp    # SRB
-srb             6067/tcp    # SRB
-#                          Heinz Naef <heinz.naef at nexos.com>         
-gsmp            6068/udp    # GSMP
-gsmp            6068/tcp    # GSMP
-#                          Avri Doria <avri.doria at nokia.com>
-trip            6069/udp    # TRIP
-trip            6069/tcp    # TRIP
-#                          Hussein F. Salama <hsalama at cisco.com>
-messageasap     6070/udp    # Messageasap
-messageasap     6070/tcp    # Messageasap
-#                          Murray Freeman <murray at officedomain.com>
-ssdtp           6071/udp    # SSDTP
-ssdtp           6071/tcp    # SSDTP
-#                          Michael Shearson <mikes at softsys-inc.com> 
-diagnose-proc   6072/udp    # DIAGNOSE-PROC
-diagnose-proc   6072/tcp    # DIAGNOSE-PROC
-#                          Allan Miller <amiller at handsfreenetworks.com>
-directplay8     6073/udp    # DirectPlay8
-directplay8     6073/tcp    # DirectPlay8
-#                          John Kane <johnkan at microsoft.com>
-#               6074-6084  Unassigned
-konspire2b      6085/udp    # konspire2b p2p network
-konspire2b      6085/tcp    # konspire2b p2p network
-#                          Jason Rohrer <rohrer at cse.ucsc.edu> October 2002
-#               6086-6099  Unassigned
-synchronet-db   6100/udp    # SynchroNet-db
-synchronet-db   6100/tcp    # SynchroNet-db
-synchronet-rtc  6101/udp    # SynchroNet-rtc
-synchronet-rtc  6101/tcp    # SynchroNet-rtc
-synchronet-upd  6102/udp    # SynchroNet-upd
-synchronet-upd  6102/tcp    # SynchroNet-upd
-#                          Arne Haugland <Arne.Haugland at parasoldev.com>    
-rets            6103/udp    # RETS
-rets            6103/tcp    # RETS
-#                          Bruce Toback <btoback at optc.com>
-dbdb            6104/udp    # DBDB
-dbdb            6104/tcp    # DBDB
-#                          Aaron Brick <aa at lithic.org>
-primaserver     6105/udp    # Prima Server
-primaserver     6105/tcp    # Prima Server
-mpsserver       6106/udp    # MPS Server
-mpsserver       6106/tcp    # MPS Server
-#                          Prima Designs Systems Ltd. <info at prima.com.hk>
-etc-control     6107/udp    # ETC Control
-etc-control     6107/tcp    # ETC Control
-#                          Steve Polishinski <spolishinski at etcconnect.com>  
-sercomm-scadmin 6108/udp    # Sercomm-SCAdmin
-sercomm-scadmin 6108/tcp    # Sercomm-SCAdmin
-#                          Melinda Tsao <melinda_tsao at mail.sercomm.com.tw>
-globecast-id    6109/udp    # GLOBECAST-ID
-globecast-id    6109/tcp    # GLOBECAST-ID
-#                          Piers Scannell <piers at globecastne.com>
-softcm          6110/udp    # HP SoftBench CM
-softcm          6110/tcp    # HP SoftBench CM
-spc             6111/udp    # HP SoftBench Sub-Process Control
-spc             6111/tcp    # HP SoftBench Sub-Process Control
-#                          Scott A. Kramer <sk at tleilaxu.sde.hp.com>
-dtspcd          6112/udp    # dtspcd   
-dtspcd          6112/tcp    # dtspcd
-#                          Doug Royer <Doug at Royer.com>
-#               6113-6122  Unassigned
-backup-express  6123/udp    # Backup Express
-backup-express  6123/tcp    # Backup Express
-#			   Chi Shih Chang <cchang at syncsort.com>
-#               6124-6140  Unassigned
-meta-corp       6141/udp    # Meta Corporation License Manager
-meta-corp       6141/tcp    # Meta Corporation License Manager
-#                          Osamu Masuda <--none--->
-aspentec-lm     6142/udp    # Aspen Technology License Manager
-aspentec-lm     6142/tcp    # Aspen Technology License Manager
-#                          Kevin Massey <massey at aspentec.com>
-watershed-lm    6143/udp    # Watershed License Manager
-watershed-lm    6143/tcp    # Watershed License Manager
-#                          David Ferrero <david at zion.com>
-statsci1-lm     6144/udp    # StatSci License Manager - 1
-statsci1-lm     6144/tcp    # StatSci License Manager - 1
-statsci2-lm     6145/udp    # StatSci License Manager - 2
-statsci2-lm     6145/tcp    # StatSci License Manager - 2
-#                          Scott Blachowicz <scott at statsci.com>
-lonewolf-lm     6146/udp    # Lone Wolf Systems License Manager
-lonewolf-lm     6146/tcp    # Lone Wolf Systems License Manager
-#                          Dan Klein <dvk at lonewolf.com>
-montage-lm      6147/udp    # Montage License Manager
-montage-lm      6147/tcp    # Montage License Manager
-#                          Michael Ubell <michael at montage.com>
-ricardo-lm      6148/udp    # Ricardo North America License Manager
-ricardo-lm      6148/tcp    # Ricardo North America License Manager
-#                          M Flemming <mflemming at aol.com>
-tal-pod         6149/udp    # tal-pod 
-tal-pod         6149/tcp    # tal-pod 
-#                          Steven Loomis <srl at taligent.com>
-#               6150-6252  Unassigned 
-crip            6253/udp    # CRIP
-crip            6253/tcp    # CRIP
-#                          Mike Rodbell <mrodbell at ciena.com> 
-#               6254-6299  Unassigned
-bmc-grx         6300/udp    # BMC GRX
-bmc-grx         6300/tcp    # BMC GRX
-#                          Ed Penak <ed_penak at bmc.com>
-#               6301-6320  Unassigned
-emp-server1     6321/udp    # Empress Software Connectivity Server 1   
-emp-server1     6321/tcp    # Empress Software Connectivity Server 1
-emp-server2     6322/udp    # Empress Software Connectivity Server 2  
-emp-server2     6322/tcp    # Empress Software Connectivity Server 2  
-#                          Srdjan Holovac <srdjan at empress.com>
-#               6323-6342  Unassigned
-sflow           6343/udp    # sFlow traffic monitoring
-sflow           6343/tcp    # sFlow traffic monitoring
-#                          Peter Phaal <peter.phaal at inmon.com> June 2003
-#               6344-6345  Unassigned
-gnutella-svc    6346/udp    # gnutella-svc
-gnutella-svc    6346/tcp    # gnutella-svc
-gnutella-rtr    6347/udp    # gnutella-rtr
-gnutella-rtr    6347/tcp    # gnutella-rtr
-#                          Serguei Osokine <osokin at paragraph.com>
-#               6348-6381  Unassigned
-metatude-mds    6382/udp    # Metatude Dialogue Server
-metatude-mds    6382/tcp    # Metatude Dialogue Server
-#                          Menno Zweistra <m.zweistra at metatude.com> 
-#               6383-6388  Unassigned
-clariion-evr01  6389/udp    # clariion-evr01
-clariion-evr01  6389/tcp    # clariion-evr01
-#                          Dave DesRoches <ddesroches at clariion.com>
-#               6390-6399  Unassigned
-# The following blocks are in use by Seagate Software 6400-6410 #
-# The previous ports are in use by Seagate Software 6400-6410 #
-# Contact for these ports is Wade Richards <Wade.Richards at Seagatesoftware.com>
-#               6411-6454  Unassigned 
-skip-cert-recv  6455/tcp    # SKIP Certificate Receive
-skip-cert-send  6456/tcp    # SKIP Certificate Send
-#                          Tom Markson <markson at osmosys.incog.com>
-#               6457-6470  Unassigned
-lvision-lm	6471/udp    # LVision License Manager
-lvision-lm	6471/tcp    # LVision License Manager
-#			   Brian McKinnon <bmk at lvision.com>
-#		6472-6499  Unassigned
-boks		6500/udp    # BoKS Master
-boks		6500/tcp    # BoKS Master
-boks_servc	6501/udp    # BoKS Servc
-boks_servc	6501/tcp    # BoKS Servc
-boks_servm	6502/udp    # BoKS Servm
-boks_servm	6502/tcp    # BoKS Servm
-boks_clntd	6503/udp    # BoKS Clntd
-boks_clntd	6503/tcp    # BoKS Clntd
-#                          Magnus Nystrom <magnus at dynas.se> 
-#		6504       Unassigned
-badm_priv	6505/udp    # BoKS Admin Private Port
-badm_priv	6505/tcp    # BoKS Admin Private Port
-badm_pub	6506/udp    # BoKS Admin Public Port
-badm_pub	6506/tcp    # BoKS Admin Public Port
-bdir_priv	6507/udp    # BoKS Dir Server, Private Port
-bdir_priv	6507/tcp    # BoKS Dir Server, Private Port
-bdir_pub	6508/udp    # BoKS Dir Server, Public Port
-bdir_pub	6508/tcp    # BoKS Dir Server, Public Port
-#			   Magnus Nystrom <magnus at dynas.se>
-mgcs-mfp-port   6509/udp    # MGCS-MFP Port
-mgcs-mfp-port   6509/tcp    # MGCS-MFP Port
-#                          Minoru Ozaki <Minoru.Ozaki at rdmg.mgcs.mei.co.jp>
-mcer-port       6510/udp    # MCER Port
-mcer-port       6510/tcp    # MCER Port
-#                          Ade Adebayo <ade at us.itmasters.com>
-#               6511-6542  Unassigned
-lds-distrib     6543/udp    # lds_distrib
-lds-distrib     6543/tcp    # lds_distrib
-#                          Jack Baker <Jack.Baker at L-3Com.com> June 2003
-#               6544-6546  Unassigned
-apc-6547        6547/udp    # APC 6547
-apc-6547        6547/tcp    # APC 6547
-apc-6548        6548/udp    # APC 6548
-apc-6548        6548/tcp    # APC 6548
-apc-6549        6549/udp    # APC 6549
-apc-6549        6549/tcp    # APC 6549
-#                          American Power Conversion <ports at apcc.com>
-fg-sysupdate	6550/udp    # fg-sysupdate
-fg-sysupdate	6550/tcp    # fg-sysupdate
-#			   Mark Beyer <mbeyer at freegate.com>
-#               6551-6557  Unassigned
-xdsxdm		6558/udp	 # 
-xdsxdm		6558/tcp	 # 
-#                          Brian Tackett <cym at acrux.net> possible contact
-#               6559-6565  Unassigned
-sane-port       6566/udp    # SANE Control Port
-sane-port       6566/tcp    # SANE Control Port
-#                          Henning Meier-Geinitz <henning at meier-geinitz.de> October 2002
-#               6567-6579  Unassigned
-parsec-master   6580/udp    # Parsec Masterserver
-parsec-master   6580/tcp    # Parsec Masterserver
-parsec-peer     6581/udp    # Parsec Peer-to-Peer
-parsec-peer     6581/tcp    # Parsec Peer-to-Peer
-parsec-game     6582/udp    # Parsec Gameserver
-parsec-game     6582/tcp    # Parsec Gameserver
-#                          Andreas Varga <sid at parsec.org>  
-#               6583-6587  Unassigned
-#               6588       Unassigned
-####Unofficial use of port 6588 by AnalogX and Microsoft####
-#               6589-6627  Unassigned
-afesc-mc        6628/udp    # AFE Stock Channel M/C
-afesc-mc        6628/tcp    # AFE Stock Channel M/C
-#                          Timothy Tam <ttam at hkcix.com> March 2003
-#               6629-6630  Unassigned
-mach            6631/udp    # Mitchell telecom host
-mach            6631/tcp    # Mitchell telecom host
-#                          Mark Derail <mderail at dmib.com> March 2003
-#               6632-6664  Unassigned
-#			   Brian Tackett <cym at acrux.net>
-vocaltec-gold   6670/udp    # Vocaltec Global Online Directory
-vocaltec-gold   6670/tcp    # Vocaltec Global Online Directory
-#                          Scott Petrack <Scott_Petrack at vocaltec.com>
-#               6671       Unassigned 
-vision_server   6672/udp    # vision_server
-vision_server   6672/tcp    # vision_server
-vision_elmd     6673/udp    # vision_elmd
-vision_elmd     6673/tcp    # vision_elmd
-#                          Chris Kramer <CKramer at gis.shl.com>
-#               6674-6700  Unassigned
-kti-icad-srvr	6701/udp    # KTI/ICAD Nameserver
-kti-icad-srvr	6701/tcp    # KTI/ICAD Nameserver
-#			   Stanley Knutson <Stanley.Knutson at KTIworld.com> 
-#               6702-6713  Unassigned
-ibprotocol      6714/udp    # Internet Backplane Protocol
-ibprotocol      6714/tcp    # Internet Backplane Protocol
-#                          Alessandro Bassi <abassi at cs.utk.edu>
-#               6715-6766  Unassigned
-bmc-perf-agent  6767/udp    # BMC PERFORM AGENT
-bmc-perf-agent  6767/tcp    # BMC PERFORM AGENT
-bmc-perf-mgrd   6768/udp    # BMC PERFORM MGRD
-bmc-perf-mgrd   6768/tcp    # BMC PERFORM MGRD   
-#                          Dima Seliverstov <Dima_Seliverstov at bmc.com>
-#               6769-6787  Unassigned  
-smc-http        6788/udp    # SMC-HTTP
-smc-http        6788/tcp    # SMC-HTTP
-#                          Ratnadeep Bhattacharjee <ratnadeep.bhattacharjee at sun.com> November 2002
-smc-https       6789/udp    # SMC-HTTPS
-smc-https       6789/tcp    # SMC-HTTPS
-#                          Ratnadeep Bhattacharjee <ratnadeep.bhattacharjee at sun.com> August 2002
-hnmp            6790/udp    # HNMP
-hnmp            6790/tcp    # HNMP
-#                          Jude George <jude at nas.nasa.gov>
-#               6791-6830  Unassigned
-ambit-lm        6831/udp    # ambit-lm
-ambit-lm        6831/tcp    # ambit-lm
-#                          Don Hejna <djhejna at ambit.com>
-#               6832-6840  Unassigned
-netmo-default	6841/udp    # Netmo Default
-netmo-default	6841/tcp    # Netmo Default
-netmo-http	6842/udp    # Netmo HTTP
-netmo-http	6842/tcp    # Netmo HTTP
-#			   Urs Bertschinger <urs at netmosphere.com>
-#               6843-6849  Unassigned 
-iccrushmore     6850/udp    # ICCRUSHMORE
-iccrushmore     6850/tcp    # ICCRUSHMORE
-#                          Dave Hubbard <dave at icc.net>
-#               6851-6887  Unassigned
-muse            6888/udp    # MUSE
-muse            6888/tcp    # MUSE
-#                          Muse Communications Corporation
-#                          <howard at muse3d.com>
-#               6889-6960  Unassigned                  
-jmact3		6961/udp    # JMACT3
-jmact3		6961/tcp    # JMACT3
-jmevt2		6962/udp    # jmevt2
-jmevt2		6962/tcp    # jmevt2
-swismgr1	6963/udp    # swismgr1
-swismgr1	6963/tcp    # swismgr1
-swismgr2	6964/udp    # swismgr2
-swismgr2	6964/tcp    # swismgr2
-swistrap	6965/udp    # swistrap
-swistrap	6965/tcp    # swistrap
-swispol		6966/udp    # swispol
-swispol		6966/tcp    # swispol
-#			   Yutaka Ono <ono at saint.nm.fujitsu.co.jp>
-#               6967-6968  Unassigned
-acmsoda         6969/udp    # acmsoda
-acmsoda         6969/tcp    # acmsoda
-#                          Daniel Simms <dsimms at acm.uiuc.edu>
-#               6970-6997  Unassigned
-iatp-highpri	6998/udp    # IATP-highPri
-iatp-highpri	6998/tcp    # IATP-highPri
-iatp-normalpri	6999/udp    # IATP-normalPri
-iatp-normalpri	6999/tcp    # IATP-normalPri
-#			   John Murphy <john.m.murphy at mci.com>
-afs3-fileserver 7000/udp    # file server itself
-afs3-fileserver 7000/tcp    # file server itself
-afs3-callback   7001/udp    # callbacks to cache managers
-afs3-callback   7001/tcp    # callbacks to cache managers
-afs3-prserver   7002/udp    # users & groups database
-afs3-prserver   7002/tcp    # users & groups database
-afs3-vlserver   7003/udp    # volume location database
-afs3-vlserver   7003/tcp    # volume location database
-afs3-kaserver   7004/udp    # AFS/Kerberos authentication service
-afs3-kaserver   7004/tcp    # AFS/Kerberos authentication service
-afs3-volser     7005/udp    # volume managment server
-afs3-volser     7005/tcp    # volume managment server
-afs3-errors     7006/udp    # error interpretation service
-afs3-errors     7006/tcp    # error interpretation service
-afs3-bos        7007/udp    # basic overseer process
-afs3-bos        7007/tcp    # basic overseer process
-afs3-update     7008/udp    # server-to-server updater
-afs3-update     7008/tcp    # server-to-server updater
-afs3-rmtsys     7009/udp    # remote cache manager service
-afs3-rmtsys     7009/tcp    # remote cache manager service
-#
-ups-onlinet     7010/udp    # onlinet uninterruptable power supplies
-ups-onlinet     7010/tcp    # onlinet uninterruptable power supplies
-#                          Brian Hammill <brianh at exide.com>
-talon-disc      7011/udp    # Talon Discovery Port
-talon-disc      7011/tcp    # Talon Discovery Port
-talon-engine    7012/udp    # Talon Engine
-talon-engine    7012/tcp    # Talon Engine
-microtalon-dis  7013/udp    # Microtalon Discovery
-microtalon-dis  7013/tcp    # Microtalon Discovery
-microtalon-com  7014/udp    # Microtalon Communications
-microtalon-com  7014/tcp    # Microtalon Communications
-talon-webserver 7015/udp    # Talon Webserver
-talon-webserver 7015/tcp    # Talon Webserver
-#                          Jack Curtin <curtinj at powerware.com>
-#               7016-7019  Unassigned
-dpserve         7020/udp    # DP Serve
-dpserve         7020/tcp    # DP Serve
-dpserveadmin    7021/udp    # DP Serve Admin
-dpserveadmin    7021/tcp    # DP Serve Admin
-#                          Allan Stanley <allan at hummingbird.com>
-#               7022-7029  Unassigned
-op-probe        7030/udp    # ObjectPlanet probe
-op-probe        7030/tcp    # ObjectPlanet probe
-#                          Bjorn Jarle Kvande <bjorn at objectplanet.com> April 2002
-#               7031-7069  Unassigned
-arcp            7070/udp    # ARCP
-arcp            7070/tcp    # ARCP
-#                          Jude George <jude at nas.nasa.gov>
-#               7071-7098  Unassigned
-lazy-ptop       7099/udp    # lazy-ptop
-lazy-ptop       7099/tcp    # lazy-ptop
-#                          Guy Keren <Guy_Keren at mail.stil.scitex.com>
-font-service    7100/udp    # X Font Service
-font-service    7100/tcp    # X Font Service
-#                          Stephen Gildea <gildea at lcs.mit.edu>
-#               7101-7120  Unassigned
-virprot-lm      7121/udp    # Virtual Prototypes License Manager
-virprot-lm      7121/tcp    # Virtual Prototypes License Manager
-#                          Victor Galis <galis at satchmo.virtualprototypes.ca>
-#               7122-7173  Unassigned
-clutild         7174/udp    # Clutild
-clutild         7174/tcp    # Clutild
-#                          Cheryl Stoutenburg <cstoutenburg at vnet.ibm.com>
-#               7175-7199  Unassigned
-fodms           7200/udp    # FODMS FLIP  
-fodms           7200/tcp    # FODMS FLIP  
-#                          David Anthony <anthony at power.amasd.anatcp.rockwell.com>
-dlip            7201/udp    # DLIP
-dlip            7201/tcp    # DLIP
-#                          Albert Manfredi <manfredi at engr05.comsys.rockwell.com>
-#               7202-7279  Unassigned
-itactionserver1 7280/udp    # ITACTIONSERVER 1
-itactionserver1 7280/tcp    # ITACTIONSERVER 1
-itactionserver2 7281/udp    # ITACTIONSERVER 2
-itactionserver2 7281/tcp    # ITACTIONSERVER 2
-#                          Brian Taylor <btaylor at imagetag.com>
-#               7282-7299  Unassigned
-#                          Edgar Blum <edgar.blum at swx.ch>
-mindfilesys     7391/udp    # mind-file system server
-mindfilesys     7391/tcp    # mind-file system server
-mrssrendezvous  7392/udp    # mrss-rendezvous server
-mrssrendezvous  7392/tcp    # mrss-rendezvous server
-#                          Dave Porter <porter at mango.com>   
-#               7393-7394  Unassigned
-winqedit        7395/udp    # winqedit
-winqedit        7395/tcp    # winqedit
-#                          David Greer <david_greer at robelle.com>
-#               7396-7425  Unassigned
-pmdmgr          7426/udp    # OpenView DM Postmaster Manager
-pmdmgr          7426/tcp    # OpenView DM Postmaster Manager
-oveadmgr        7427/udp    # OpenView DM Event Agent Manager
-oveadmgr        7427/tcp    # OpenView DM Event Agent Manager
-ovladmgr        7428/udp    # OpenView DM Log Agent Manager
-ovladmgr        7428/tcp    # OpenView DM Log Agent Manager
-opi-sock        7429/udp    # OpenView DM rqt communication
-opi-sock        7429/tcp    # OpenView DM rqt communication
-xmpv7           7430/udp    # OpenView DM xmpv7 api pipe
-xmpv7           7430/tcp    # OpenView DM xmpv7 api pipe
-pmd             7431/udp    # OpenView DM ovc/xmpv3 api pipe
-pmd             7431/tcp    # OpenView DM ovc/xmpv3 api pipe
-#                          Dave Lamb <rdl at rdl.cnd.hp.com>
-faximum         7437/udp    # Faximum
-faximum         7437/tcp    # Faximum
-#                          George Pajari <George.Pajari at faximum.com>
-#               7438-7490  Unassigned
-telops-lmd      7491/udp    # telops-lmd
-telops-lmd      7491/tcp    # telops-lmd
-#                          David Spencer <dspencer at telops.com>
-#               7492-7499  Unassigned
-#               7500       Unassigned       
-ovbus           7501/udp    # HP OpenView Bus Daemon
-ovbus           7501/tcp    # HP OpenView Bus Daemon
-#                          David M. Rhodes <davidrho at cnd.hp.com>
-#               7502-7509  Unassigned
-ovhpas          7510/udp    # HP OpenView Application Server
-ovhpas          7510/tcp    # HP OpenView Application Server
-#                          Jeff Conrad <jeff_conrad at hp.com>
-pafec-lm        7511/udp    # pafec-lm
-pafec-lm        7511/tcp    # pafec-lm
-#                          Billy Dhillon <bdsos at pafec.co.uk>
-#               7512-7543  Unassigned
-nta-ds          7544/udp    # FlowAnalyzer DisplayServer
-nta-ds          7544/tcp    # FlowAnalyzer DisplayServer
-nta-us          7545/udp    # FlowAnalyzer UtilityServer
-nta-us          7545/tcp    # FlowAnalyzer UtilityServer
-#                          Fred Messinger <fredm at cisco.com>
-#               7546-7565  Unassigned
-vsi-omega       7566/udp    # VSI Omega
-vsi-omega       7566/tcp    # VSI Omega	
-#                          Curtis Smith <curtis.smith at vsin.com>
-#               7567-7569   Unassigned
-aries-kfinder   7570/udp     # Aries Kfinder
-aries-kfinder   7570/tcp     # Aries Kfinder
-#                           James King, III <jking at ariessys.com>
-#               7571-7587   Unassigned
-sun-lm          7588/udp     # Sun License Manager
-sun-lm          7588/tcp     # Sun License Manager
-#                           Sophie Deng <Sophie.Deng at Eng.Sun.COM>
-#               7589-7623   Unassigned
-indi            7624/udp     # Instrument Neutral Distributed Interface
-indi            7624/tcp     # Instrument Neutral Distributed Interface
-#                           Elwood Downey <ecdowney at clearskyinstitute.com> April 2002
-#               7625-7632   Unassigned
-pmdfmgt         7633/udp     # PMDF Management
-pmdfmgt         7633/tcp     # PMDF Management
-#                           Hunter Goatley <goathunter at goatley.com>
-#               7634-7673   Unassigned
-imqtunnels      7674/udp     # iMQ SSL tunnel
-imqtunnels      7674/tcp     # iMQ SSL tunnel
-imqtunnel       7675/udp     # iMQ Tunnel
-imqtunnel       7675/tcp     # iMQ Tunnel
-#                           Shailesh S. Bavadekar <shailesh.bavadekar at sun.com> April 2002
-imqbrokerd      7676/udp     # iMQ Broker Rendezvous
-imqbrokerd      7676/tcp     # iMQ Broker Rendezvous
-#                           Joseph Di Pol <joe.dipol at sun.com> April 2002
-#               7677-7742   Unassigned
-sstp-1          7743/udp     # Sakura Script Transfer Protocol
-sstp-1          7743/tcp     # Sakura Script Transfer Protocol
-#                           Kouichi Takeda <KHBO5271 at nifty.com>
-#               7744-7776   Unassigned
-cbt             7777/udp     # cbt
-cbt             7777/tcp     # cbt
-#                           Tony Ballardie <A.Ballardie at cs.ucl.ac.uk>
-interwise       7778/udp     # Interwise
-interwise       7778/tcp     # Interwise
-#                           Joseph Gray <gray at interwise.co.il>
-vstat           7779/udp     # VSTAT
-vstat           7779/tcp     # VSTAT
-#                           Vinh Nguyn <vinh at sportvision.com>
-#               7780        Unassigned
-accu-lmgr       7781/udp     # accu-lmgr
-accu-lmgr       7781/tcp     # accu-lmgr
-#                           Moises E. Hernandez <moises at accugraph.com>
-#               7782-7785   Unassigned
-minivend        7786/udp     # MINIVEND
-minivend        7786/tcp     # MINIVEND
-#                           Mike Heins <mike at minivend.com>
-#               7787-7796   Unassigned
-pnet-conn       7797/udp     # Propel Connector port
-pnet-conn       7797/tcp     # Propel Connector port
-pnet-enc        7798/udp     # Propel Encoder port
-pnet-enc        7798/tcp     # Propel Encoder port
-#                           Leif Hedstrom <leif at propel.com> April 2002
-#               7799-7844   Unassigned
-apc-7845        7845/udp     # APC 7845
-apc-7845        7845/tcp     # APC 7845
-apc-7846        7846/udp     # APC 7846
-apc-7846        7846/tcp     # APC 7846
-#                           American Power Conversion <ports at apcc.com>
-#               7847-7912   Unassigned
-qo-secure       7913/udp     # QuickObjects secure port
-qo-secure       7913/tcp     # QuickObjects secure port
-#                           Jonas Bovin <jonas.bovin at quickobjects.com>  
-#               7914-7931   Unassigned
-t2-drm          7932/udp     # Tier 2 Data Resource Manager
-t2-drm          7932/tcp     # Tier 2 Data Resource Manager
-t2-brm          7933/udp     # Tier 2 Business Rules Manager
-t2-brm          7933/tcp     # Tier 2 Business Rules Manager
-#                           Peter Carlson <pcarlson at tier2.com>
-#               7934-7966   Unassigned
-supercell       7967/udp     # Supercell
-supercell       7967/tcp     # Supercell
-#                           Kevin Nakagawa <nakagawa at sigsci.com>
-#               7968-7978   Unassigned     
-micromuse-ncps  7979/udp     # Micromuse-ncps
-micromuse-ncps  7979/tcp     # Micromuse-ncps
-#                           Hing Wing To <wing.to at mircromuse.com>
-quest-vista     7980/udp     # Quest Vista
-quest-vista     7980/tcp     # Quest Vista
-#                           Preston Bannister <pbannister at quests.com>
-#               7981-7998   Unassigned
-irdmi2          7999/udp     # iRDMI2
-irdmi2          7999/tcp     # iRDMI2
-irdmi           8000/udp     # iRDMI
-irdmi           8000/tcp     # iRDMI
-#                           Gil Shafriri <shafriri at ilccm1.iil.intel.com>
-vcom-tunnel	8001/udp     # VCOM Tunnel
-vcom-tunnel	8001/tcp     # VCOM Tunnel
-#			    Mark Lewandowski <mlewan0 at us.ibm.com>
-teradataordbms	8002/udp     # Teradata ORDBMS
-teradataordbms	8002/tcp     # Teradata ORDBMS
-#			    Curt Ellmann <curt.ellmann at ncr.com>
-#               8003-8007   Unassigned 
-http-alt	8008/udp     # HTTP Alternate
-http-alt	8008/tcp     # HTTP Alternate
-#			    James Gettys <jg at w3.org>
-#               8009-8021   Unassigned
-oa-system       8022/udp     # oa-system 
-oa-system       8022/tcp     # oa-system
-#                           Denis Girault <Denis.Girault at evidian.com> 
-#               8023-8031   Unassigned
-pro-ed		8032/udp     # ProEd
-pro-ed		8032/tcp     # ProEd
-mindprint	8033/udp     # MindPrint
-mindprint	8033/tcp     # MindPrint
-#			    Larry Tusoni <larry at goldrush.com>
-#               8034-8079   Unassigned
-http-alt	8080/udp     # HTTP Alternate (see port 80)
-http-alt	8080/tcp     # HTTP Alternate (see port 80)
-#			    Stephen Casner <casner at precpt.com>
-#               8081-8087   Unassigned
-radan-http      8088/udp     # Radan HTTP
-radan-http      8088/tcp     # Radan HTTP
-#                           Steve Hay <Steve.Hay at uk.radan.com> April 2002
-#               8089-8099   Unassigned
-xprint-server   8100/udp     # Xprint Server
-xprint-server   8100/tcp     # Xprint Server
-#                           John McKernan <John.McKernan at sun.com>
-#               8101-8114   Unassigned
-mtl8000-matrix  8115/udp     # MTL8000 Matrix
-mtl8000-matrix  8115/tcp     # MTL8000 Matrix
-#                           David Pinch <dpinch at mtl-inst.com> April 2002
-cp-cluster      8116/udp     # Check Point Clustering
-cp-cluster      8116/tcp     # Check Point Clustering
-#                           Roni Moshitzky <rmosh at checkpoint.com>
-#               8117        Unassigned
-privoxy         8118/udp     # Privoxy HTTP proxy
-privoxy         8118/tcp     # Privoxy HTTP proxy
-#                           Andreas Oesterhelt <oes at privoxy.org> June 2002
-#               8119-8129   Unassigned
-indigo-vrmi     8130/udp     # INDIGO-VRMI
-indigo-vrmi     8130/tcp     # INDIGO-VRMI
-indigo-vbcp     8131/udp     # INDIGO-VBCP
-indigo-vbcp     8131/tcp     # INDIGO-VBCP
-#                           Colin Caughie <cfc at indigo-avs.com>
-dbabble	        8132/udp     # dbabble
-dbabble         8132/tcp     # dbabble
-#                           Chris Pugmire <chrisp at netwinsite.com>        
-#               8133-8159   Unassigned
-patrol		8160/udp     # Patrol
-patrol		8160/tcp     # Patrol
-patrol-snmp	8161/udp     # Patrol SNMP
-patrol-snmp	8161/tcp     # Patrol SNMP
-#			    Daisy Tam <Daisy_Tam at bmc.com>
-#               8162-8198   Unassigned
-vvr-data        8199/udp     # VVR DATA
-vvr-data        8199/tcp     # VVR DATA
-#                           Ming Xu <ming at veritas.com>
-trivnet1	8200/udp     # TRIVNET
-trivnet1	8200/tcp     # TRIVNET
-trivnet2	8201/udp     # TRIVNET
-trivnet2	8201/tcp     # TRIVNET
-#			    Saar Wilf <saar at trivnet.com>
-#               8202-8203   Unassigned
-lm-perfworks	8204/udp     # LM Perfworks
-lm-perfworks	8204/tcp     # LM Perfworks
-lm-instmgr	8205/udp     # LM Instmgr
-lm-instmgr	8205/tcp     # LM Instmgr
-lm-dta		8206/udp     # LM Dta
-lm-dta		8206/tcp     # LM Dta
-lm-sserver	8207/udp     # LM SServer
-lm-sserver	8207/tcp     # LM SServer
-lm-webwatcher	8208/udp     # LM Webwatcher
-lm-webwatcher	8208/tcp     # LM Webwatcher
-#			    Chris Flynn <cflynn at landmark.com>
-#               8209-8350   Unassigned
-server-find	8351/udp     # Server Find
-server-find	8351/tcp     # Server Find
-#			    Chris Brown <chrisb at chancery.com>
-#               8352-8375   Unassigned
-cruise-enum	8376/udp     # Cruise ENUM
-cruise-enum	8376/tcp     # Cruise ENUM
-cruise-swroute	8377/udp     # Cruise SWROUTE
-cruise-swroute	8377/tcp     # Cruise SWROUTE
-cruise-config	8378/udp     # Cruise CONFIG
-cruise-config	8378/tcp     # Cruise CONFIG
-cruise-diags	8379/udp     # Cruise DIAGS
-cruise-diags	8379/tcp     # Cruise DIAGS
-cruise-update	8380/udp     # Cruise UPDATE
-cruise-update	8380/tcp     # Cruise UPDATE
-#			    Steve Husak <portmaster at cruisetech.com>   
-#               8381-8399   Unassigned
-cvd		8400/udp     # cvd
-cvd		8400/tcp     # cvd
-sabarsd		8401/udp     # sabarsd
-sabarsd		8401/tcp     # sabarsd
-abarsd		8402/udp     # abarsd
-abarsd		8402/tcp     # abarsd
-admind		8403/udp     # admind
-admind		8403/tcp     # admind
-#			    Aaron Bilbrey <abilbrey at commvault.com>
-#               8404-8415   Unassigned
-espeech         8416/udp     # eSpeech Session Protocol
-espeech         8416/tcp     # eSpeech Session Protocol
-#                           Scott Tarone <starone at proactivethought.com> November 2002
-espeech-rtp     8417/udp    # eSpeech RTP Protocol
-espeech-rtp     8417/tcp    # eSpeech RTP Protocol
-#                          Scott Tarone <starone at proactivethought.com> April 2003
-#               8418-8442   Unassigned
-pcsync-https    8443/udp     # PCsync HTTPS
-pcsync-https    8443/tcp     # PCsync HTTPS
-pcsync-http     8444/udp     # PCsync HTTP
-pcsync-http     8444/tcp     # PCsync HTTP
-#                           Katy Lynn McCullough <KatyM at LapLink.com>
-#               8445-8449   Unassigned 
-npmp            8450/udp     # npmp
-npmp            8450/tcp     # npmp
-#                           Ian Chard <ian at tanagra.demon.co.uk>
-#               8451-8472   Unassigned
-vp2p            8473/udp     # Virtual Point to Point
-vp2p            8473/tcp     # Virtual Point to Point
-#                           Jerome Grimbert <jerome.grimbert at atosorigin.com>
-#               8474-8553   Unassigned
-rtsp-alt        8554/udp     # RTSP Alternate (see port 554)
-rtsp-alt        8554/tcp     # RTSP Alternate (see port 554)
-#                           Stephen Casner <casner at precept.com>
-d-fence         8555/udp     # SYMAX D-FENCE
-d-fence         8555/tcp     # SYMAX D-FENCE
-#                           Thomas Geisel <tgeisel at symax.de> January 2003
-#               8556-8667   Unassigned
-natd            8668/divert # Network Address Translation
-#               8669-8732   Unassigned
-ibus		8733/udp     # iBus
-ibus		8733/tcp     # iBus
-#			    Silvano Maffeis <maffeis at softwired.ch>
-#               8734-8762   Unassigned
-mc-appserver    8763/udp     # MC-APPSERVER
-mc-appserver    8763/tcp     # MC-APPSERVER
-#                           Romeo Kasanwidjojo <romeo at microcomgroup.com>       
-openqueue       8764/udp     # OPENQUEUE
-openqueue       8764/tcp     # OPENQUEUE
-#                           Matt Jensen <mattj at newsblip.com>                   
-ultraseek-http	8765/udp     # Ultraseek HTTP
-ultraseek-http	8765/tcp     # Ultraseek HTTP
-#			    Walter Underwood <wunder at infoseek.com>
-#               8766-8785   Unassigned
-msgclnt         8786/udp     # Message Client
-msgclnt         8786/tcp     # Message Client
-msgsrvr         8787/udp     # Message Server
-msgsrvr         8787/tcp     # Message Server
-#                           Michael O'Brien <mobrien02 at attbi.com> March 2003
-#               8788-8803   Unassigned
-truecm          8804/udp     # truecm
-truecm          8804/tcp     # truecm
-#                           Scott Kramer <scottk at truebluesoftware.com>
-#               8805-8879           
-cddbp-alt	8880/udp     # CDDBP
-cddbp-alt	8880/tcp     # CDDBP
-#			    Steve Scherf <steve at moonsoft.com>
-#               8881-8887   Unassigned
-ddi-udp-1       8888/udp     # NewsEDGE server UDP (UDP 1)
-ddi-tcp-1       8888/tcp     # NewsEDGE server TCP (TCP 1)
-ddi-udp-2       8889/udp     # NewsEDGE server broadcast
-ddi-tcp-2       8889/tcp     # Desktop Data TCP 1
-ddi-udp-3       8890/udp     # NewsEDGE client broadcast
-ddi-tcp-3       8890/tcp     # Desktop Data TCP 2
-ddi-udp-4       8891/udp     # Desktop Data UDP 3: NESS application
-ddi-tcp-4       8891/tcp     # Desktop Data TCP 3: NESS application
-ddi-udp-5       8892/udp     # Desktop Data UDP 4: FARM product
-ddi-tcp-5       8892/tcp     # Desktop Data TCP 4: FARM product
-ddi-udp-6       8893/udp     # Desktop Data UDP 5: NewsEDGE/Web application
-ddi-tcp-6       8893/tcp     # Desktop Data TCP 5: NewsEDGE/Web application
-ddi-udp-7       8894/udp     # Desktop Data UDP 6: COAL application
-ddi-tcp-7       8894/tcp     # Desktop Data TCP 6: COAL application
-#                           Fred Yao <Fred_Yao at DDIGATE2.desktopdata.com>
-#               8895-8899   Unassigned 
-jmb-cds1        8900/udp     # JMB-CDS 1
-jmb-cds1        8900/tcp     # JMB-CDS 1
-jmb-cds2        8901/udp     # JMB-CDS 2
-jmb-cds2        8901/tcp     # JMB-CDS 2
-#			    Curtis Bray <CurtisB at creativedesign.com>
-#               8902-8909   Unassigned
-manyone-http    8910/udp     # manyone-http
-manyone-http    8910/tcp     # manyone-http
-manyone-xml     8911/udp     # manyone-xml
-manyone-xml     8911/tcp     # manyone-xml
-#                           Matt King <m at manyone.net> April 2002
-#               8912-8953   Unassigned
-cumulus-admin   8954/udp     # Cumulus Admin Port
-cumulus-admin   8954/tcp     # Cumulus Admin Port
-#                           Thomas Schleu <tschleu at canto.de>
-#               8955-8998   Unassigned
-bctp            8999/udp     # Brodos Crypto Trade Protocol
-bctp            8999/tcp     # Brodos Crypto Trade Protocol
-#                           Alexander Sahler <alexander.sahler at brodos.de> February 2002
-cslistener      9000/udp     # CSlistener
-cslistener      9000/tcp     # CSlistener
-#                           David Jones <djones at cincom.com>
-etlservicemgr   9001/udp     # ETL Service Manager
-etlservicemgr   9001/tcp     # ETL Service Manager
-#                           Stephen McCrea <smccrea at etlelectronique.com> March 2002
-dynamid         9002/udp     # DynamID authentication
-dynamid         9002/tcp     # DynamID authentication
-#                           Jerome Dusautois <jdusautois at scrypto.fr> March 2002
-#               9003-9005   Unassigned
-#               9006        De-Commissioned Port 02/24/00, ms
-#               9007-9019   Unassigned
-tambora         9020/udp     # TAMBORA
-tambora         9020/tcp     # TAMBORA
-#                           Jason van Zyl <jvanzyl at zenplex.com> March 2002
-panagolin-ident 9021/udp     # Pangolin Identification
-panagolin-ident 9021/tcp     # Pangolin Identification
-#                           William Benner <bill at pangolin.com> March 2002
-paragent        9022/udp     # PrivateArk Remote Agent
-paragent        9022/tcp     # PrivateArk Remote Agent
-#                           Gal Cucuy <galc at cyber-ark.com> March 2002
-swa-1           9023/udp     # Secure Web Access - 1
-swa-1           9023/tcp     # Secure Web Access - 1
-swa-2           9024/udp     # Secure Web Access - 2
-swa-2           9024/tcp     # Secure Web Access - 2
-swa-3           9025/udp     # Secure Web Access - 3
-swa-3           9025/tcp     # Secure Web Access - 3
-swa-4           9026/udp     # Secure Web Access - 4
-swa-4           9026/tcp     # Secure Web Access - 4
-#                           Tim McGranaghan <tim_mcgranaghan at mech.disa.mil>
-#               9027-9079   Unassigned
-glrpc           9080/udp     # Groove GLRPC
-glrpc           9080/tcp     # Groove GLRPC
-#                           Adrian Popescu <Adrian_Popescu at groove.net> September 2002
-#               9081-9089   Unassigned
-websm           9090/udp     # WebSM
-websm           9090/tcp     # WebSM
-#                           I-Hsing Tsao <itsao at austin.ibm.com>
-xmltec-xmlmail  9091/udp     # xmltec-xmlmail
-xmltec-xmlmail  9091/tcp     # xmltec-xmlmail
-#                           Mitch Kaufman <mk at weconnectyou.com>
-#               9092-9099   Unassigned
-hp-pdl-datastr  9100/udp     # PDL Data Streaming Port
-hp-pdl-datastr  9100/tcp     # PDL Data Streaming Port
-#                           Shivaun Albright <shivaun_albright at hp.com> April 2002
-#### The protocol name "pdl-datastream" is primarily registered for use #### 
-#### in DNS SRV records (RFC 2782). DNS SRV records allow a protocol to run on ####
-#### any port number, but the default port for this protocol is 9100 ####.
-pdl-datastream  9100/udp     # Printer PDL Data Stream 
-pdl-datastream  9100/tcp     # Printer PDL Data Stream 
-bacula-dir      9101/udp     # Bacula Director
-bacula-dir      9101/tcp     # Bacula Director
-bacula-fd       9102/udp     # Bacula File Daemon
-bacula-fd       9102/tcp     # Bacula File Daemon  
-bacula-sd       9103/udp     # Bacula Storage Daemon
-bacula-sd       9103/tcp     # Bacula Storage Daemon
-#                           Kern Sibbald <kern at sibbald.com>  January 2002
-#               9104-9159   Unassigned
-netlock1	9160/udp     # NetLOCK1
-netlock1	9160/tcp     # NetLOCK1
-netlock2	9161/udp     # NetLOCK2
-netlock2	9161/tcp     # NetLOCK2
-netlock3	9162/udp     # NetLOCK3
-netlock3	9162/tcp     # NetLOCK3
-netlock4	9163/udp     # NetLOCK4
-netlock4	9163/tcp     # NetLOCK4
-netlock5	9164/udp     # NetLOCK5
-netlock5	9164/tcp     # NetLOCK5
-#			    Steven Sawkins <ssawkins at netlock.com>
-#               9165-9199   Unassigned
-wap-wsp		9200/udp     # WAP connectionless session service
-wap-wsp		9200/tcp     # WAP connectionless session service
-wap-wsp-wtp	9201/udp     # WAP session service
-wap-wsp-wtp	9201/tcp     # WAP session service
-wap-wsp-s	9202/udp     # WAP secure connectionless session service
-wap-wsp-s	9202/tcp     # WAP secure connectionless session service
-wap-wsp-wtp-s	9203/udp     # WAP secure session service
-wap-wsp-wtp-s	9203/tcp     # WAP secure session service
-wap-vcard	9204/udp     # WAP vCard
-wap-vcard	9204/tcp     # WAP vCard
-wap-vcal	9205/udp     # WAP vCal
-wap-vcal	9205/tcp     # WAP vCal
-wap-vcard-s	9206/udp     # WAP vCard Secure
-wap-vcard-s	9206/tcp     # WAP vCard Secure
-wap-vcal-s	9207/udp     # WAP vCal Secure
-wap-vcal-s	9207/tcp     # WAP vCal Secure
-#                           WAP Forum <wap-feedback at mail.wapforum.org>	
-#                           WAP Forum <pg at uplanet.com>
-#               9208-9209   Unassigned
-lif-mlp         9210/udp     # LIF Mobile Locn Protocol
-lif-mlp         9210/tcp     # LIF Mobile Locn Protocol
-lif-mlp-s       9211/udp     # LIF Mobile Locn Secure
-lif-mlp-s       9211/tcp     # LIF Mobile Locn Secure
-#                           Location Interoperability Forum
-#                           <greening at bigtribe.com> April 2002
-#               9212-9216   Unassigned
-fsc-port        9217/udp     # FSC Communication Port
-fsc-port        9217/tcp     # FSC Communication Port
-#                           Teijo Mustonen <Teijo.Mustonen at F-Secure.com> March 2002
-#               9218-9280   Unassigned
-swtp-port1      9281/udp     # SofaWare transport port 1
-swtp-port1      9281/tcp     # SofaWare transport port 1
-swtp-port2      9282/udp     # SofaWare transport port 2
-swtp-port2      9282/tcp     # SofaWare transport port 2
-#                           Amir Rapson <rapson at sofaware.com> February 2002
-callwaveiam     9283/udp     # CallWaveIAM
-callwaveiam     9283/tcp     # CallWaveIAM
-#                           Colin Kelley <cdk at callwave.com> 
-visd            9284/udp     # VERITAS Information Serve
-visd            9284/tcp     # VERITAS Information Serve
-#                           Ravi Tavakely <ravi.tavakley at veritas.com> February 2002
-n2h2server      9285/udp     # N2H2 Filter Service Port
-n2h2server      9285/tcp     # N2H2 Filter Service Port
-#                           Jim Irwin <jirwin at n2h2.com> February 2002
-#               9286        Unassigned
-cumulus		9287/udp     # Cumulus
-cumulus         9287/tcp     # Cumulus
-#                           Thomas Schleu <tschleu at canto.de>                  
-#               9288-9291   Unassigned
-armtechdaemon   9292/udp     # ArmTech Daemon
-armtechdaemon   9292/tcp     # ArmTech Daemon
-#                           Rohan Story <rohan at aurema.com>
-#               9293-9320   Unassigned 
-guibase		9321/udp     # guibase
-guibase		9321/tcp     # guibase
-#			    Yutaka Ono <ono at saint.nm.fujitsu.co.jp>
-#               9322-9342   Unassigned
-mpidcmgr	9343/udp     # MpIdcMgr
-mpidcmgr	9343/tcp     # MpIdcMgr
-mphlpdmc	9344/udp     # Mphlpdmc
-mphlpdmc	9344/tcp     # Mphlpdmc
-#			    Yutaka Ono <ono at saint.nm.fujitsu.co.jp>
-#               9345        Unassigned    
-ctechlicensing  9346/udp     # C Tech Licensing
-ctechlicensing  9346/tcp     # C Tech Licensing
-#                           Reed Copsey, Jr. <reedc at ctech.com>       
-#               9347-9373   Unassigned
-fjdmimgr	9374/udp     # fjdmimgr
-fjdmimgr	9374/tcp     # fjdmimgr
-#			    Yutaka Ono <ono at saint.nm.fujitsu.co.jp>
-#               9375-9395   Unassigned
-fjinvmgr	9396/udp     # fjinvmgr
-fjinvmgr	9396/tcp     # fjinvmgr
-mpidcagt	9397/udp     # MpIdcAgt
-mpidcagt	9397/tcp     # MpIdcAgt
-#			    Yutaka Ono <ono at saint.nm.fujitsu.co.jp>
-#               9398-9499   Unassigned
-ismserver	9500/udp     # ismserver
-ismserver	9500/tcp     # ismserver
-#			    Ian Gordon <iang at micromuse.co.uk>
-#               9501-9534   Unassigned
-mngsuite        9535/udp     # Management Suite Remote Control
-mngsuite        9535/tcp     # Management Suite Remote Control
-#                           Alan Butt <alan.butt at landesk.com>
-#               9536-9593   Unassigned
-msgsys          9594/udp     # Message System
-msgsys          9594/tcp     # Message System
-pds             9595/udp     # Ping Discovery Service
-pds             9595/tcp     # Ping Discovery Service
-#                           Alan Butt <alan.butt at landesk.com>
-#               9596-9599   Unassigned
-micromuse-ncpw  9600/udp     # MICROMUSE-NCPW
-micromuse-ncpw  9600/tcp     # MICROMUSE-NCPW
-#                           Hing Wing To <wing.to at micromuse.com>
-#               9601-9611   Unassigned
-streamcomm-ds	9612/udp     # StreamComm User Directory
-streamcomm-ds   9612/tcp     # StreamComm User Directory
-#                           Brian C. Wiles <brian at streamcomm.com>
-#               9613-9746   Unassigned
-l5nas-parchan   9747/udp     # L5NAS Parallel Channel
-l5nas-parchan   9747/tcp     # L5NAS Parallel Channel
-#                           Lawrence J. Dickson - Land-5 Corporation
-#                           <ldickson at land-5.com> March 2002             
-#               9748-9752   Unassigned
-rasadv		9753/udp     # rasadv
-rasadv		9753/tcp     # rasadv
-#			    Dave Thaler <dthaler at microsoft.com>
-#               9754-9799   Unassigned
-davsrc          9800/udp     # WebDav Source Port
-davsrc          9800/tcp     # WebDav Source Port
-#                           Ethan Fremen <mindlace at digicool.com>
-sstp-2          9801/udp     # Sakura Script Transfer Protocol-2
-sstp-2          9801/tcp     # Sakura Script Transfer Protocol-2
-#                           Kouichi Takeda <KHB05271 at nifty.com>
-#               9802-9874   Unassigned
-sapv1           9875/udp     # Session Announcement v1
-sapv1           9875/tcp     # Session Announcement v1
-#                           RFC 2974 <ftp://ftp.isi.edu/in-notes/rfc2974.txt>
-sd              9876/udp     # Session Director
-sd              9876/tcp     # Session Director
-#                           Van Jacobson <van at ee.lbl.gov>
-cyborg-systems	9888/udp     # CYBORG Systems
-cyborg-systems	9888/tcp     # CYBORG Systems
-#			    Malcolm Graham <Malcolm_Graham at CYBORG.COM>
-monkeycom	9898/udp     # MonkeyCom
-monkeycom	9898/tcp     # MonkeyCom
-#			    Yuji Kuwabara <HHG01200 at niftyserve.or.jp>
-sctp-tunneling  9899/udp     # SCTP TUNNELING
-sctp-tunneling  9899/tcp     # SCTP TUNNELING
-iua             9900/sctp    # IUA  
-iua             9900/udp     # IUA
-iua             9900/tcp     # IUA
-#                           Lyndon Ong <LyOng at ciena.com>
-#		9901-9908   Unassigned
-domaintime      9909/udp    # domaintime
-domaintime      9909/tcp    # domaintime
-#                          Jeffry Dwight <jeffryd at greyware.com>
-#               9910       Unassigned
-sype-transport  9911/udp    # SYPECom Transport Protocol
-sype-transport  9911/tcp    # SYPECom Transport Protocol
-#                          Sylvain Pedneault <sylvain at sypecom.qc.ca> March 2003    
-#               9912-9949  Unassigned
-apc-9950        9950/udp    # APC 9950
-apc-9950        9950/tcp    # APC 9950
-apc-9951        9951/udp    # APC 9951
-apc-9951        9951/tcp    # APC 9951 
-apc-9952        9952/udp    # APC 9952
-apc-9952        9952/tcp    # APC 9952
-#                          American Power Conversion <ports at apcc.com>
-#		9953-9991   Unassigned
-palace-1        9992/udp     # OnLive-1
-palace-1        9992/tcp     # OnLive-1
-palace-2        9993/udp     # OnLive-2
-palace-2        9993/tcp     # OnLive-2
-palace-3        9994/udp     # OnLive-3
-palace-3        9994/tcp     # OnLive-3
-palace-4        9995/udp     # Palace-4
-palace-4        9995/tcp     # Palace-4
-palace-5        9996/udp     # Palace-5
-palace-5        9996/tcp     # Palace-5
-palace-6	9997/udp     # Palace-6
-palace-6	9997/tcp     # Palace-6
-#			    Douglas Crockford <crock at communities.com>
-distinct32      9998/udp     # Distinct32
-distinct32      9998/tcp     # Distinct32
-distinct        9999/udp    # distinct
-distinct        9999/tcp    # distinct
-#                          Anoop Tewari <anoop at next.distinct.com>
-ndmp            10000/udp   # Network Data Management Protocol
-ndmp            10000/tcp   # Network Data Management Protocol
-#                          Brian Ehrmantraut <bae at netapp.com>
-scp-config      10001/udp   # SCP Configuration Port
-scp-config      10001/tcp   # SCP Configuration Port
-#                          Brad Strand <brad.strand at 3ware.com>
-#	        10002-10006 Unassigned
-mvs-capacity	10007/udp   # MVS Capacity
-mvs-capacity	10007/tcp   # MVS Capacity
-#                          Donna Dillenberger <engd at us.ibm.com>
-octopus         10008/udp   # Octopus Multiplexer
-octopus         10008/tcp   # Octopus Multiplexer
-#                          Chris Koeritz <fred at gruntose.com> October 2002
-#               10009-10079 Unassigned
-amanda          10080/udp   # Amanda 
-amanda          10080/tcp   # Amanda 
-#                          John Jackson <jrj at gandalf.cc.purdue.edu>
-#                          <amanda-core at amanda.org>
-#               10081-10100 Unassigned
-ezmeeting-2     10101/udp   # eZmeeting
-ezmeeting-2     10101/tcp   # eZmeeting
-ezproxy-2       10102/udp   # eZproxy
-ezproxy-2       10102/tcp   # eZproxy
-ezrelay         10103/udp   # eZrelay
-ezrelay         10103/tcp   # eZrelay
-#                          Albert C. Yang <albert.yang at eZmeeting.com> March 2002
-#               10104-10112 Unassigned
-netiq-endpoint  10113/udp   # NetIQ Endpoint
-netiq-endpoint  10113/tcp   # NetIQ Endpoint
-netiq-qcheck    10114/udp   # NetIQ Qcheck
-netiq-qcheck    10114/tcp   # NetIQ Qcheck
-#                          John Wood <John.Wood at netiq.com> 
-netiq-endpt	10115/udp   # NetIQ Endpoint
-netiq-endpt     10115/tcp   # NetIQ Endpoint
-#			   Gary Weichinger <gary.weichinger at netiq.com>
-netiq-voipa     10116/udp   # NetIQ VoIP Assessor
-netiq-voipa     10116/tcp   # NetIQ VoIP Assessor
-#                          Gary Weichinger <gary.weichinger at netiq.com>
-#		10117-10127 Unassigned
-bmc-perf-sd     10128/udp   # BMC-PERFORM-SERVICE DAEMON
-bmc-perf-sd     10128/tcp   # BMC-PERFORM-SERVICE DAEMON
-#                          Dima Seliverstov <Dima_Seliverstov at bmc.com> 
-#               10129-10259 Unassigned
-axis-wimp-port  10260/udp   # Axis WIMP Port
-axis-wimp-port  10260/tcp   # Axis WIMP Port
-#                          Stefan Eriksson <contact-iana at axis.com>
-#               10261-10287 Unassigned
-blocks		10288/udp   # Blocks 
-blocks		10288/tcp   # Blocks 
-#			   Carl Malamud
-#		10289-10989 Unassigned
-rmiaux          10990/udp   # Auxiliary RMI Port
-rmiaux          10990/tcp   # Auxiliary RMI Port
-#                          Eugen Bacic <eugen at texar.com>
-#               10991-10999 Unassigned
-irisa		11000/udp   # IRISA
-irisa		11000/tcp   # IRISA
-#			   Vladimir Brauner <vbrauner at datamedia.fr>
-metasys		11001/udp   # Metasys
-metasys		11001/tcp   # Metasys
-#			   Tobin Schuster <tobin.j.schuster at jci.com>
-#               11002-11110 Unassigned
-vce		11111/udp   # Viral Computing Environment (VCE)
-vce		11111/tcp   # Viral Computing Environment (VCE)
-#			   Fred Cohen <fc at all.net>
-#               11112-11200 Unassigned
-smsqp           11201/udp   # smsqp
-smsqp           11201/tcp   # smsqp
-#                          Andres Seco Hernandez <AndresSH at alamin.org>
-#               11202-11318 Unassigned
-imip            11319/udp    # IMIP
-imip            11319/tcp    # IMIP
-#                           IM Unified Coalition, Len Zuvela
-#                           <imu-comments at egroups.com>
-imip-channels   11320/udp    # IMIP Channels Port
-imip-channels   11320/tcp    # IMIP Channels Port
-#                           Len Zuvela <lenz at microsoft.com>
-arena-server    11321/udp    # Arena Server Listen
-arena-server    11321/tcp    # Arena Server Listen
-#                           Earl Brannigan <earl.brannigan at lindenhous.co.uk>
-#               11322-11366 Unassigned
-atm-uhas        11367/udp    # ATM UHAS
-atm-uhas        11367/tcp    # ATM UHAS
-#                           Todd Barker <toddba at attachmate.com>
-#               11368-11370 Unassigned
-hkp             11371/udp    # OpenPGP HTTP Keyserver
-hkp             11371/tcp    # OpenPGP HTTP Keyserver
-#                           David Shaw <dshaw at jabberwocky.com> May 2003 
-#               11372-11599 Unassigned
-tempest-port    11600/udp    # Tempest Protocol Port
-tempest-port    11600/tcp    # Tempest Protocol Port
-#                           Francis Cianfrocca <francis at tempest.com>
-#               11601-11719 Unassigned
-h323callsigalt  11720/udp    # h323 Call Signal Alternate
-h323callsigalt  11720/tcp    # h323 Call Signal Alternate
-#                           Chris White <cjwhite at cisco.com>
-#               11721-11750 Unassigned
-intrepid-ssl    11751/udp   # Intrepid SSL
-intrepid-ssl    11751/tcp   # Intrepid SSL
-#                          Robert Eden <reden at sieglertech.com> March 2003
-#               11752-11966 Unassigned 
-sysinfo-sp      11967/udp   # SysInfo Sercice Protocol
-sysinfo-sp      11967/tcp   # SysInfo Service Protocol
-#                          Mike Cooper <mcooper at magnicomp.com> March 2003
-#               11968-11999 Unassiged
-entextxid	12000/udp   # IBM Enterprise Extender SNA XID Exchange
-entextxid	12000/tcp   # IBM Enterprise Extender SNA XID Exchange
-entextnetwk	12001/udp   # IBM Enterprise Extender SNA COS Network Priority
-entextnetwk	12001/tcp   # IBM Enterprise Extender SNA COS Network Priority
-entexthigh	12002/udp   # IBM Enterprise Extender SNA COS High Priority
-entexthigh	12002/tcp   # IBM Enterprise Extender SNA COS High Priority
-entextmed	12003/udp   # IBM Enterprise Extender SNA COS Medium Priority
-entextmed	12003/tcp   # IBM Enterprise Extender SNA COS Medium Priority
-entextlow	12004/udp   # IBM Enterprise Extender SNA COS Low Priority
-entextlow	12004/tcp   # IBM Enterprise Extender SNA COS Low Priority
-#			   Eugene Cox <genecox at raleigh.ibm.com>
-dbisamserver1   12005/udp   # DBISAM Database Server - Regular
-dbisamserver1   12005/tcp   # DBISAM Database Server - Regular
-dbisamserver2   12006/udp   # DBISAM Database Server - Admin
-dbisamserver2   12006/tcp   # DBISAM Database Server - Admin
-#                          Tim Young <timyoung at elevatesoft.com> May 2002
-#               12007-12108 Unassigned
-rets-ssl        12109/udp   # RETS over SSL
-rets-ssl        12109/tcp   # RETS over SSL
-#                          Bruce Toback <btoback at optc.com> February 2003 
-#               12110-12171 Unassigned
-hivep		12172/udp   # HiveP
-hivep		12172/tcp   # HiveP
-#			   Dick Augustsson <dick at skenbe.net>
-#               12173-12344 Unassigned
-italk           12345/udp   # Italk Chat System
-italk           12345/tcp   # Italk Chat System
-#                          Takayuki Ito <yuki at euc.jp>
-#               12346-12752 Unassigned
-tsaf            12753/udp   # tsaf port   
-tsaf            12753/tcp   # tsaf port   
-#                          Andreas Fehr <100042.2070 at CompuServe.COM>
-#               12754-13159 Unassigned
-i-zipqd		13160/udp   # I-ZIPQD
-i-zipqd		13160/tcp   # I-ZIPQD
-#			   Chuck Runquist <crunquist at quarterdeck.com>
-#               13161-13222 Unassigned     
-powwow-client   13223/udp   # PowWow Client
-powwow-client   13223/tcp   # PowWow Client
-powwow-server   13224/udp   # PowWow Server
-powwow-server   13224/tcp   # PowWow Server
-#                          Paul K. Peterson <paul at tribal.com>
-#               13225-13719 Unassigned
-bprd		13720/udp   # BPRD Protocol (VERITAS NetBackup)
-bprd		13720/tcp   # BPRD Protocol (VERITAS NetBackup)
-bpdbm		13721/udp   # BPDBM Protocol (VERITAS NetBackup)
-bpdbm		13721/tcp   # BPDBM Protocol (VERITAS NetBackup)
-#			   Jeff Holmbeck <Jeff.Holmbeck at veritas.com>
-bpjava-msvc	13722/udp   # BP Java MSVC Protocol
-bpjava-msvc	13722/tcp   # BP Java MSVC Protocol
-#			   Tim Schmidt <Tim.Schmidt at veritas.com>
-#               13723      Unassigned
-vnetd           13724/udp   # Veritas Network Utility
-vnetd           13724/tcp   # Veritas Network Utility
-#                          Jeff Holmbeck <Jeff.Holmbeck at veritas.com> 
-#               13725-13781 Unassigned 
-bpcd		13782/udp   # VERITAS NetBackup
-bpcd		13782/tcp   # VERITAS NetBackup
-vopied		13783/udp   # VOPIED Protocol
-vopied		13783/tcp   # VOPIED Protocol
-#			   Jeff Holmbeck <Jeff.Holmbeck at veritas.com>
-#               13784-13817 Unassigned
-dsmcc-config	13818/udp   # DSMCC Config
-dsmcc-config    13818/tcp   # DSMCC Config
-dsmcc-session	13819/udp   # DSMCC Session Messages
-dsmcc-session	13819/tcp   # DSMCC Session Messages
-dsmcc-passthru	13820/udp   # DSMCC Pass-Thru Messages
-dsmcc-passthru	13820/tcp   # DSMCC Pass-Thru Messages
-dsmcc-download	13821/udp   # DSMCC Download Protocol
-dsmcc-download	13821/tcp   # DSMCC Download Protocol
-dsmcc-ccp	13822/udp   # DSMCC Channel Change Protocol
-dsmcc-ccp	13822/tcp   # DSMCC Channel Change Protocol
-#			   Tim Addington <Tim.Addington at sciatl.com>
-#			   ISO/IEC 13818-6 MPEG-2 DSM-CC
-#               13823-14000 Unassigned
-sua             14001/sctp  # SUA
-sua	        14001/udp   # De-Registered (2001 June 06)
-sua	        14001/tcp   # SUA
-#			   Miguel Angel Garcia <Miguel.A.Garcia at ericsson.com>
-#               14002-14032 Unassigned
-sage-best-com1  14033/udp   # sage Best! Config Server 1
-sage-best-com1  14033/tcp   # sage Best! Config Server 1
-sage-best-com2  14034/udp   # sage Best! Config Server 2
-sage-best-com2  14034/tcp   # sage Best! Config Server 2
-#                          Christian Rubach <Christian_Rubach at bestsoftware.com>
-#               14035-14140 Unassigned  
-vcs-app         14141/udp   # VCS Application
-vcs-app         14141/tcp   # VCS Application
-#                          Ming Xu <ming at veritas.com>
-#               14142-14144 Unassigned
-gcm-app         14145/udp   # GCM Application
-gcm-app         14145/tcp   # GCM Application
-#                          Ming Xu <ming at veritas.com>
-#               14146-14148 Unassigned
-vrts-tdd        14149/udp   # Veritas Traffic Director
-vrts-tdd        14149/tcp   # Veritas Traffic Director
-#                          Sameer Deokule <sameer.deokule at veritas.com> March 2002
-#               14150-14935 Unassigned
-hde-lcesrvr-1   14936/udp   # hde-lcesrvr-1
-hde-lcesrvr-1   14936/tcp   # hde-lcesrvr-1
-hde-lcesrvr-2   14937/udp   # hde-lcesrvr-2
-hde-lcesrvr-2   14937/tcp   # hde-lcesrvr-2
-#                          Horizon Digital Enterprise, Inc. <info at hde.co.jp>
-#               14938-14999 Unassigned
-hydap           15000/udp   # Hypack Data Aquisition
-hydap           15000/tcp   # Hypack Data Aquisition
-#                          Mircea Neacsu <mircea at videotron.ca>  
-#               15001-15344 Unassigned
-xpilot          15345/udp   # XPilot Contact Port
-xpilot          15345/tcp   # XPilot Contact Port
-#                          Bert Gijsbers <bert at xpilot.org> 
-#               15346-15362 Unassigned
-3link           15363/udp   # 3Link Negotiation
-3link           15363/tcp   # 3Link Negotiation
-#                          Brant Thomsen <brant_thomsen at 3com.com> January 2003
-#               15364-16359 Unassigned
-netserialext1	16360/udp   # netserialext1
-netserialext1	16360/tcp   # netserialext1
-netserialext2	16361/udp   # netserialext2
-netserialext2	16361/tcp   # netserialext2
-#                          Mike Hoy <mhoy at aquilagroup.com>
-#               16362-16366 Unassigned
-netserialext3	16367/udp   # netserialext3
-netserialext3	16367/tcp   # netserialext3
-netserialext4   16368/udp   # netserialext4
-netserialext4	16368/tcp   # netserialext4
-#			   Mike Hoy <mhoy at aquilagroup.com>
-#               16369-16990 Unassigned
-intel-rci-mp    16991/udp   # INTEL-RCI-MP
-intel-rci-mp    16991/tcp   # INTEL-RCI-MP
-#                          Jane Dashevsky <jane.dashevsky at intel.com> 
-#               16992-17006 Unassigned
-isode-dua	17007/udp # 
-isode-dua	17007/tcp # 
-#               17008-17184 Unassigned
-soundsvirtual   17185/udp   # Sounds Virtual
-soundsvirtual   17185/tcp   # Sounds Virtual
-#                          Richard Snider <rsnider at sounds.com>   
-#               17186-17218 Unassigned
-chipper		17219/udp   # Chipper
-chipper		17219/tcp   # Chipper
-#			   Ronald Jimmink <Ronald.Jimmink at chipper.nl>
-#               17220-17999 Unassigned
-biimenu         18000/udp   # Beckman Instruments, Inc.
-biimenu         18000/tcp   # Beckman Instruments, Inc.
-#                    R. L. Meyering <RLMEYERING at BIIVAX.DP.BECKMAN.COM>
-#               18001-18180 Unassigned
-opsec-cvp	18181/udp   # OPSEC CVP 
-opsec-cvp	18181/tcp   # OPSEC CVP 
-opsec-ufp	18182/udp   # OPSEC UFP
-opsec-ufp	18182/tcp   # OPSEC UFP
-#			   Alon Kantor <alonk at checkpoint.com>
-opsec-sam       18183/udp   # OPSEC SAM
-opsec-sam       18183/tcp   # OPSEC SAM
-opsec-lea       18184/udp   # OPSEC LEA
-opsec-lea       18184/tcp   # OPSEC LEA
-opsec-omi       18185/udp   # OPSEC OMI
-opsec-omi       18185/tcp   # OPSEC OMI
-#                          Alon Kantor <alonk at checkpoint.com>
-#               18186      Unassigned
-opsec-ela       18187/udp   # OPSEC ELA
-opsec-ela       18187/tcp   # OPSEC ELA
-#                          Alon Kantor <alonk at checkpoint.com>
-#               18188-18240 Unassigned
-checkpoint-rtm  18241/udp   # Check Point RTM
-checkpoint-rtm  18241/tcp   # Check Point RTM
-#                          Dudi Hazan <dudi at checkpoint.com>
-#               18242-18462 Unassigned
-ac-cluster	18463/udp   # AC Cluster
-ac-cluster	18463/tcp   # AC Cluster
-#			   Lisa Zhong <lzhong at cup.hp.com>
-#               18464-18768 Unassigned
-ique            18769/udp   # IQue Protocol
-ique            18769/tcp   # IQue Protocol
-#                          Avi Drissman <avi_drissman at baseview.com> July 2002
-#               18770-18887 Unassigned
-apc-necmp       18888/udp   # APCNECMP 
-apc-necmp       18888/tcp   # APCNECMP 
-#                          Michael Yip <Michael.Yip at alcatel.com>
-#               18889-19190 Unassigned
-opsec-uaa       19191/udp   # OPSEC UAA
-opsec-uaa       19191/tcp   # OPSEC UAA
-#                          Reuven Harrison  <rnd_ana at checkpoint.com> 
-#               19192-19193 Unassigned
-ua-secureagent  19194/udp   # UserAuthority SecureAgent
-ua-secureagent  19194/tcp   # UserAuthority SecureAgent
-#                          Reuven Harrison <rharrison at checkpoint.com> January 2003
-#               19195-19282 Unassigned
-keysrvr         19283/udp   # Key Server for SASSAFRAS
-keysrvr         19283/tcp   # Key Server for SASSAFRAS
-#                          Mark Valence <kurash at sassafras.com>
-#               19284-19314 Unassigned
-keyshadow       19315/udp   # Key Shadow for SASSAFRAS
-keyshadow       19315/tcp   # Key Shadow for SASSAFRAS
-#                          Mark Valence <kurash at sassafras.com>
-#               19316-19397 Unassigned
-mtrgtrans       19398/udp   # mtrgtrans
-mtrgtrans       19398/tcp   # mtrgtrans
-#                          Katsuhito Muroi <muroi at pfu.co.jp>
-#               19399-19409 Unassigned
-hp-sco		19410/udp   # hp-sco
-hp-sco		19410/tcp   # hp-sco 
-hp-sca		19411/udp   # hp-sca
-hp-sca		19411/tcp   # hp-sca
-#			   Larry Schwartz <lrs at cup.hp.com>
-hp-sessmon      19412/udp   # HP-SESSMON
-hp-sessmon      19412/tcp   # HP-SESSMON
-#                          Gita Murthy <gita at cup.hp.com> 
-#               19413-19539 Unassigned
-sxuptp          19540/udp   # SXUPTP
-sxuptp          19540/tcp   # SXUPTP
-#                          Keiji Okuma <okuma at silex.jp> August 2002
-jcp             19541/udp   # JCP Client
-jcp             19541/tcp   # JCP Client
-#                          Yuji Sasaki <sasaki at silex.jp>
-#               19542-19999 Unassigned
-dnp             20000/udp   # DNP
-dnp             20000/tcp   # DNP
-#                          Michael Thesing <michael.thesing at acsatlanta.com>
-#               20001-20201 Unassigned
-ipdtp-port      20202/udp   # IPD Tunneling Port
-ipdtp-port      20202/tcp   # IPD Tunneling Port
-#                          Vikki Yin Wei <vikki at ipdynamics.com> January 2003
-#               20203-20221 Unassigned
-ipulse-ics      20222/udp   # iPulse-ICS
-ipulse-ics      20222/tcp   # iPulse-ICS
-#                          Meggie Garica-Woodruff <ipulse at ericsson.com>
-#               20223-20669 Unassigned
-track		20670/udp   # Track
-track		20670/tcp   # Track
-#			   Michael Sweet <msweet at ctr.nawcad.navy.mil>	
-#               20671-20998 Unassigned
-athand-mmp      20999/udp   # AT Hand MMP
-athand-mmp      20999/tcp   # At Hand MMP
-#                          Stepan Riha <stepan.riha at hand.com> 
-#               20300-21589 Unassigned
-vofr-gateway	21590/udp   # VoFR Gateway
-vofr-gateway	21590/tcp   # VoFR Gateway
-#			   Marty Borden <mborden at tollbridgetech.com>
-#               21591-21799 Unassigned
-tvpm            21800/udp  # TVNC Pro Multiplexing
-tvpm            21800/tcp  # TVNC Pro Multiplexing
-#                         Brian Blevins <brian.blevins at tridia.com>
-#               21801-21844 Unassigned
-webphone        21845/udp  # webphone
-webphone        21845/tcp  # webphone
-netspeak-is     21846/udp  # NetSpeak Corp. Directory Services
-netspeak-is     21846/tcp  # NetSpeak Corp. Directory Services
-netspeak-cs     21847/udp  # NetSpeak Corp. Connection Services
-netspeak-cs     21847/tcp  # NetSpeak Corp. Connection Services
-netspeak-acd    21848/udp  # NetSpeak Corp. Automatic Call Distribution
-netspeak-acd    21848/tcp  # NetSpeak Corp. Automatic Call Distribution
-netspeak-cps    21849/udp  # NetSpeak Corp. Credit Processing System
-netspeak-cps    21849/tcp  # NetSpeak Corp. Credit Processing System
-#                         Toby Hosterman <root at netspeak.com>
-#               21850-21999 Unassigned  
-snapenetio	22000/udp  # SNAPenetIO
-snapenetio	22000/tcp  # SNAPenetIO
-optocontrol	22001/udp  # OptoControl
-optocontrol	22001/tcp  # OptoControl
-#			  Kevin Kuhns <kkuhns at opto22.com>
-#               22002-22272 Unassigned
-wnn6            22273/udp  # wnn6
-wnn6            22273/tcp  # wnn6
-#                         Yasunari Gon Yamasita <yamasita at omronsoft.co.jp
-#               22274-22554 Unassigned
-vocaltec-phone  22555/udp  # Vocaltec Internet Phone
-vocaltec-wconf  22555/tcp  # Vocaltec Web Conference
-#                         Scott Petrack >Scott_Petrack at vocaltec.com>
-#               22556-22799 Unassigned
-aws-brf         22800/udp  # Telerate Information Platform LAN
-aws-brf         22800/tcp  # Telerate Information Platform LAN
-#                         Timo Sivonen <timo.sivonen at ccmail.dowjones.com>
-#               22801-22950 Unassigned
-brf-gw          22951/udp  # Telerate Information Platform WAN
-brf-gw          22951/tcp  # Telerate Information Platform WAN
-#                         Timo Sivonen <timo.sivonen at ccmail.dowjones.com>
-#               22952-23999 Unassigned
-med-ltp		24000/udp  # med-ltp
-med-ltp		24000/tcp  # med-ltp
-med-fsp-rx	24001/udp  # med-fsp-rx
-med-fsp-rx	24001/tcp  # med-fsp-rx
-med-fsp-tx	24002/udp  # med-fsp-tx
-med-fsp-tx	24002/tcp  # med-fsp-tx
-med-supp	24003/udp  # med-supp
-med-supp	24003/tcp  # med-supp
-med-ovw		24004/udp  # med-ovw
-med-ovw		24004/tcp  # med-ovw
-med-ci		24005/udp  # med-ci
-med-ci		24005/tcp  # med-ci
-med-net-svc	24006/udp  # med-net-svc
-med-net-svc	24006/tcp  # med-net-svc
-#			  Juergen Fischbach <Juergen_Fischbach at agilent.com>
-#               24007-24241 Unassigned
-filesphere      24242/udp  # fileSphere
-filesphere      24242/tcp  # fileSphere
-#                         Carl Cedergren <asperon at home.se>
-#               24243-24248 Unassigned
-vista-4gl       24249/udp  # Vista 4GL
-vista-4gl       24249/tcp  # Vista 4GL
-#                         Mark Itzcovitz <mji at vistacomp.com>
-#               24250-24385 Unassigned
-intel_rci	24386/udp  # Intel RCI
-intel_rci	24386/tcp  # Intel RCI 
-#			  Mark Lewis <mark.h.lewis at intel.com> 
-#               24387-24553 Unassigned
-binkp           24554/udp  # BINKP
-binkp           24554/tcp  # BINKP
-#                         Max Masyutin <max at ritlabs.com>
-#               24554-34676 Unassigned
-flashfiler      24677/udp  # FlashFiler
-flashfiler      24677/tcp  # FlashFiler
-#                         Ben Oram <beno at turbopower.com>  
-proactivate     24678/udp  # Turbopower Proactivate
-proactivate     24678/tcp  # Turbopower Proactivate
-#                         Ben Oram <beno at turbopower.com>
-#               24679-24921 Unassigned
-snip            24922/udp  # Simple Net Ident Protocol
-snip            24922/tcp  # Simple Net Ident Protocol
-#                         Jean-Paul Moreaux 
-#                         <jean-paul.moreaux at airbus.dasa.de>
-#               24923-24999 Unassigned 
-icl-twobase1    25000/udp  # icl-twobase1
-icl-twobase1    25000/tcp  # icl-twobase1
-icl-twobase2    25001/udp  # icl-twobase2
-icl-twobase2    25001/tcp  # icl-twobase2
-icl-twobase3    25002/udp  # icl-twobase3
-icl-twobase3    25002/tcp  # icl-twobase3
-icl-twobase4    25003/udp  # icl-twobase4
-icl-twobase4    25003/tcp  # icl-twobase4
-icl-twobase5    25004/udp  # icl-twobase5
-icl-twobase5    25004/tcp  # icl-twobase5
-icl-twobase6    25005/udp  # icl-twobase6
-icl-twobase6    25005/tcp  # icl-twobase6
-icl-twobase7    25006/udp  # icl-twobase7
-icl-twobase7    25006/tcp  # icl-twobase7
-icl-twobase8    25007/udp  # icl-twobase8
-icl-twobase8    25007/tcp  # icl-twobase8
-icl-twobase9    25008/udp  # icl-twobase9
-icl-twobase9    25008/tcp  # icl-twobase9
-icl-twobase10   25009/udp  # icl-twobase10
-icl-twobase10   25009/tcp  # icl-twobase10
-#               J. A. (Tony) Sever <J.A.Sever at bra0119.wins.icl.co.uk>
-#               25010-25792 Unassigned 
-vocaltec-hos    25793/udp   # Vocaltec Address Server
-vocaltec-hos    25793/tcp   # Vocaltec Address Server      
-#                          Scott Petrack <Scott_Petrack at vocaltec.com>
-#               25794-25900 Unassigned
-niobserver      25901/udp   # NIObserver
-niobserver      25901/tcp   # NIObserver
-#                          Roman Oliynyk <romano at netinst.com>
-#               25902      Unassigned
-niprobe         25903/udp   # NIProbe
-niprobe         25903/tcp   # NIProbe
-#                          Roman Oliynyk <romano at netinst.com>
-#               25904-25999 Unassigned
-quake           26000/udp   # quake
-quake           26000/tcp   # quake
-#                          Yasunari Gon Yamasita <yamasita at omronsoft.co.jp>  
-#               26001-26207 Unassigned
-wnn6-ds         26208/udp   # wnn6-ds
-wnn6-ds         26208/tcp   # wnn6-ds
-#                          Yasunari Gon Yamasita <yamasita at omronsoft.co.jp>
-#               26209-26259 Unassigned
-ezproxy         26260/udp   # eZproxy
-ezproxy         26260/tcp   # eZproxy
-ezmeeting       26261/udp   # eZmeeting
-ezmeeting       26261/tcp   # eZmeeting
-#                          Albert C. Yang <albert.yang at eZmeeting.com>
-k3software-svr  26262/udp   # K3 Software-Server
-k3software-svr  26262/tcp   # K3 Software-Server
-k3software-cli  26263/udp   # K3 Software-Client
-k3software-cli  26263/tcp   # K3 Software-Client
-#                          Jim Baldridge <jimb at rpower.com>
-gserver         26264/udp   # Gserver
-gserver         26264/tcp   # Gserver 
-#                          Szanto Gabor <sgabor90 at hotmail.com> 
-#               26265-26999 Unassigned
-#			   Daniel Birns <daniel at globes.com>
-#               27010-27344 Unassigned
-imagepump       27345/udp   # ImagePump
-imagepump       27345/tcp   # ImagePump
-#                          Richard Minner <ports at xippix.com>
-#               27346-27503 Unassigned
-kopek-httphead  27504/udp   # Kopek HTTP Head Port
-kopek-httphead  27504/tcp   # Kopek HTTP Head Port
-#                          Sten H. Danielsen <shd at kopek.net> July 2002
-#               27505-27998 Unassigned
-tw-auth-key     27999/udp   # Attribute Certificate Services
-tw-auth-key     27999/tcp   # TW Authentication/Key Distribution and 
-#                          Alex Duncan <Alex.Duncan at sse.ie> 
-#               28000-30000 Unassigned
-pago-services1  30001/udp    # Pago Services 1
-pago-services1  30001/tcp    # Pago Services 1
-pago-services2  30002/udp    # Pago Services 2
-pago-services2  30002/tcp    # Pago Services 2
-#                           Balduin Mueller-Platz 
-#                           <balduin.mueller-platz at pago.de> March 2002
-#               30003-31415 Unassigned
-xqosd           31416/udp    # XQoS network monitor
-xqosd           31416/tcp    # XQoS network monitor
-#                           Joe Elliott <joe at inetd.com> June 2002
-#               31417-31619 Unassigned
-lm-mon          31620/udp    # lm mon
-lm-mon          31620/tcp    # lm mon
-#                           Mounir Hahad <mounir.hahad at eecad.com> June 2003
-#               31621-31764 Unassigned
-gamesmith-port  31765/udp    # GameSmith Port
-gamesmith-port  31765/tcp    # GameSmith Port
-#                           Randy Thompson <thompr at earthlink.net> August 2002
-#               31766-32767 Unassigned
-filenet-tms     32768/udp    # Filenet TMS
-filenet-tms     32768/tcp    # Filenet TMS
-filenet-rpc     32769/udp    # Filenet RPC
-filenet-rpc     32769/tcp    # Filenet RPC
-filenet-nch     32770/udp    # Filenet NCH
-filenet-nch     32770/tcp    # Filenet NCH
-#                           Daniel Whelan <dwhelan at filenet.com>	
-filenet-rmi     32771/udp    # FileNet RMI
-filenet-rmi     32771/tcp    # FileNET RMI
-#                           Chris Adkins <cadkins at filenet.com>
-filenet-pa      32772/udp    # FileNET Process Analyzer
-filenet-pa      32772/tcp    # FileNET Process Analyzer 
-#                           Chris Adkins <cadkins at filenet.com> January 2003
-#               32773-32895 Unassigned
-idmgratm        32896/udp    # Attachmate ID Manager
-idmgratm        32896/tcp    # Attachmate ID Manager
-#                           George Gianelos <GeorgeGi at Attachmate.com> March 2003
-#               32897-33330 Unassigned
-diamondport     33331/udp    # DiamondCentral Interface
-diamondport     33331/tcp    # DiamondCentral Interface
-#                           Edward Browdy <ebrowdy at cryptek.com> July 2002
-#               33332-33433 Unassigned
-traceroute      33434/udp    # traceroute use
-traceroute      33434/tcp    # traceroute use
-#                           IANA <iana at iana.org>
-#               33435-34248 Unassigned
-turbonote-2     34249/udp    # TurboNote Relay Server Default Port
-turbonote-2     34249/tcp    # TurboNote Relay Server Default Port
-#                           Peter Hyde <peter at spis.co.nz>
-#               34250-36864 Unassigned
-kastenxpipe     36865/udp    # KastenX Pipe
-kastenxpipe     36865/tcp    # KastenX Pipe
-#                           Guy Cheng <GCHE at kastenchase.com>
-#               36866-37474 Unassigned
-neckar          37475/udp    # science + computing's Venus Administration Port
-neckar          37475/tcp    # science + computing's Venus Administration Port
-#                           Ralf Allrutz <R.Allrutz at science-computing.de> February 2002
-#               37476-38200 Unassigned
-galaxy7-data    38201/udp    # Galaxy7 Data Tunnel
-galaxy7-data    38201/tcp    # Galaxy7 Data Tunnel
-#                           Tatham Oddie <tatham at e-oddie.com> September 2002
-#               38202-39680 Unassigned
-turbonote-1     39681/udp    # TurboNote Default Port
-turbonote-1     39681/tcp    # TurboNote Default Port
-#                           Peter Hyde <peter at spis.co.nz>
-#               39682-40840 Unassigned
-cscp            40841/udp    # CSCP
-cscp            40841/tcp    # CSCP
-#                           Michael Dodge <sarge at centerspan.com>      
-csccredir       40842/udp    # CSCCREDIR
-csccredir       40842/tcp    # CSCCREDIR
-csccfirewall    40843/udp    # CSCCFIREWALL
-csccfirewall    40843/tcp    # CSCCFIREWALL
-#                           Sudhir Menon <sudhir at centerspan.com>
-#               40844-41110 Unassigned
-fs-qos          41111/udp    # Foursticks QoS Protocol
-fs-qos          41111/tcp    # Foursticks QoS Protocol
-#                           Chee Kent Lam <cklam at foursticks.com> April 2002
-#               41112-41793 Unassigned
-crestron-cip    41794/udp    # Crestron Control Port
-crestron-cip    41794/tcp    # Crestron Control Port
-crestron-ctp    41795/udp    # Crestron Terminal Port
-crestron-ctp    41795/tcp    # Crestron Terminal Port
-#                           Ed Ranney <eranney at crestron.com> January 2003
-#               41796-43187 Unassigned
-reachout        43188/udp    # REACHOUT
-reachout        43188/tcp    # REACHOUT
-ndm-agent-port  43189/udp    # NDM-AGENT-PORT
-ndm-agent-port  43189/tcp    # NDM-AGENT-PORT
-ip-provision    43190/udp    # IP-PROVISION
-ip-provision    43190/tcp    # IP-PROVISION
-#                           Roman Kriis <roman at previo.ee>
-#               43191-44320 Unassigned
-pmcd            44321/udp    # PCP server (pmcd)
-pmcd            44321/tcp    # PCP server (pmcd)
-#                           Ken McDonell <kenmcd at sgi.com> June 2002
-#               44322-44817 Unassigned
-rockwell-encap  44818/udp    # Rockwell Encapsulation
-rockwell-encap  44818/tcp    # Rockwell Encapsulation
-#                           Brian Batke <babatke at ra.rockwell.com>
-#               44819-45053 Unassigned
-invision-ag     45054/udp    # InVision AG
-invision-ag     45054/tcp    # InVision AG 
-#                           Matthias Schroer <matthias.schroer at invision.de>
-#               45055-45677 Unassigned
-eba             45678/udp    # EBA PRISE
-eba             45678/tcp    # EBA PRISE
-#                           Patrick Kara <Patrick at EBA.NET>
-#               45679-45965 Unassigned
-ssr-servermgr   45966/udp    # SSRServerMgr
-ssr-servermgr   45966/tcp    # SSRServerMgr
-#                           Jeremy Gilliat <jeremy.gilliat at geac.com>
-#               45967-46999 Unassigned
-mbus            47000/udp    # Message Bus
-mbus            47000/tcp    # Message Bus
-#                           Dirk Kutscher <dku at informatik.uni-bremen.de> 
-#               47001-47556 Unassigned
-dbbrowse        47557/udp    # Databeam Corporation
-dbbrowse        47557/tcp    # Databeam Corporation
-#                           Cindy Martin <cmartin at databeam.com>
-#               47558-47623 Unassigned
-directplaysrvr  47624/udp    # Direct Play Server
-directplaysrvr  47624/tcp    # Direct Play Server
-#                           Ajay Jindal <ajayj at microsoft.com>
-#               47625-47805 Unassigned
-ap              47806/udp    # ALC Protocol
-ap              47806/tcp    # ALC Protocol
-#                           Andrew Newton <alnewton at automatedlogic.com>
-#               47807       Unassigned
-bacnet          47808/udp    # Building Automation and Control Networks
-bacnet          47808/tcp    # Building Automation and Control Networks
-#                           H. Michael Newman <hmn2 at cornell.edu>
-#               47809-47999 Unassigned
-nimcontroller   48000/udp    # Nimbus Controller
-nimcontroller   48000/tcp    # Nimbus Controller
-nimspooler      48001/udp    # Nimbus Spooler
-nimspooler      48001/tcp    # Nimbus Spooler
-nimhub          48002/udp    # Nimbus Hub
-nimhub          48002/tcp    # Nimbus Hub
-nimgtw          48003/udp    # Nimbus Gateway
-nimgtw          48003/tcp    # Nimbus Gateway
-#                           Carstein Seeberg <case at nimsoft.no>
-#               48004-48555 Unassigned
-com-bardac-dw   48556/udp    # com-bardac-dw
-com-bardac-dw   48556/tcp    # com-bardac-dw
-#                           Nicholas J Howes <nick at ghostwood.org>
-#               48557-49150 Unassigned 
-#               49151       IANA Reserved
diff --git a/test/data/types/ssh_authorized_key/1 b/test/data/types/ssh_authorized_key/1
deleted file mode 100644
index 69d1af1..0000000
--- a/test/data/types/ssh_authorized_key/1
+++ /dev/null
@@ -1,2 +0,0 @@
-ssh-dss AAAAB3NzaC1kc3MAAACBAJkupmdsJSDXfUy5EU5NTRBDr9Woo3w0YnB8KmnJW9ghU8C7SkWPB1fIHVe+esFfd3qWBseb83PoFX63geZJAg6bjV4/Rdn1zEoa9EO2QyUdYUen4+rpsh3vVKZ6HFNsn3+W5+kPYgE1F/N4INqkbjY3sqCkP/W1BL9+sbVVbuJFAAAAFQCfjWDk5XhvGUkPjNWWVqltBYzHtwAAAIEAg/XL7ky7x9Ad5banzPFAfmM+DGFe0A/JEbLDjKmr5KBM5x4RFohtEvZ8ECuVGUOqBWdgAjyYwsG4oRVjLnKrf/rgmbNRzSFgEWkcAye3BVwk7Dt6hh4knEl+mNfOLq+FH0011UhecOiqTcESMzQDtgQ1vJh2VchElBLjl3x/ZugAAACAAh5jGQC338t5ObP8trSlOefkx0sXmmEzUbo3Mt8mGUuGJPx8m+X0L8Xd+l5rQxytqE3SmV/RD+6REqBuPqHM8RQuqAzfjdOeg/Ajdggx1CRMTVhltZsgQoxO30cz9Qo0SdPoL+Jp1fLuaLZq7m/RmsWYvoLT3jebBlpvvQE8YlI= francois.deppierraz at camptocamp.com
-from="192.168.1.2",command="/usr/local/bin/backup.sh",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1kc3MAAACBAJkupmdsJSDXfUy5EU5NTRBDr9Woo3w0YnB8KmnJW9ghU8C7SkWPB1fIHVesG4oRVjLnKrf/rgmbNRzSFgEWkcAye3BVwk7Dt6hh4ksG4oRVjLnKrf/rgmbNRzSFgEWkcAye3BVwk7Dt6hh4ksG4oRVjLnKrf/rgmbNRzSFgEWkcAye3BVwk7Dt6hh4kxytqE3SmV/RD+6REqBuPqHM8RQuqAzfjdOeg/Ajdggx1CRMTVhltZsgQoxO30cz9Qo0SdPoL+Jp1fLuaL Backup system
diff --git a/test/data/types/sshkey/1 b/test/data/types/sshkey/1
deleted file mode 100644
index 840ed19..0000000
--- a/test/data/types/sshkey/1
+++ /dev/null
@@ -1,21 +0,0 @@
-hosting2.planetargon.com,64.34.164.77 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAy+f2t52cDMrYkgEKQ6juqfMf/a0nDFry3JAzl+SAWQ0gTklVxNcVbfHx2pkZk66EBGQfrK33Bx1BflZ/iEDyiCwmzVtNba0X9A6ELYjB9WSkWdIqZCfPlKZMu9N//aZ6+3SDVuz/BVFsAVmtqQ4Let2QjOFiSIKXrtPqWvVT/MM=
-kirby.madstop.com,192.168.0.5 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAw9iHuAa/wepHoUzWqsvhQvSkpE4K7agrdLOWHM9mvyRQ2X3HVq5GqzAvWu4J+f0FvcLPwA9tivpxt1oSt5MOtvDM6HoM+8m3P4daBp0nlNaYR8/vHCAmX6N3RyM8FWfp+VqWyux1SooQwxYxVFy86G78ApTqNsZ+p7cHmnBYqk0=
-fedora1,192.168.0.51 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAyz1rKcApU4//j8CHYKexq4qnq2WVqLPrZYGnlij1t7FscLiDVKvBuRHVkfyTNIjAM/t7tM1Dj+FuD4iWziCmf7RO9q4wI5y/1zgCiSUegnZVSmH2yxnWGMdHGpXOkN3NXcpy6jylxyBo0M7T22PSezCxyUVfMclesjOEO1jETd0=
-kirby ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAw9iHuAa/wepHoUzWqsvhQvSkpE4K7agrdLOWHM9mvyRQ2X3HVq5GqzAvWu4J+f0FvcLPwA9tivpxt1oSt5MOtvDM6HoM+8m3P4daBp0nlNaYR8/vHCAmX6N3RyM8FWfp+VqWyux1SooQwxYxVFy86G78ApTqNsZ+p7cHmnBYqk0=
-sol10b,192.168.0.50 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAs37kiDwKxWqi6EfSdKwRaZXBwh2doOARRqZzyitBaPwESy26DwTx+xdQ2rwB4V2k1WIec+1f3bgTS2ArH75dQSPyba2HKqxaSRBd3Zh4z23+uUxpupEyoRdW1HolMOvuoceheSMsruiuYcuiyct41d4c/Qmr51Dv04Doi00k6Ws=
-piratehaven.org,64.81.59.88 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA7TYRRkle0wDNohZ0TNZN6R1Zp0svxgX+GJ9umI5yNM1bMxUTgeNRh5nIvZg1HgD1WRXQ57dSxxLzbvRyAqc245g6S8eWWCtenvOFLl0rOF5D3VxbQuw79sOe8/Ac8TC+c8RuWB7aaxpwL5Rv9xfDeazOtoKXj7+uwQW1PUmTaEM=
-atalanta,192.168.0.10 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAysniuWiJH6OQLXl63XXcS1b/hP2lAgSz0IutjQ6ZUfBrt1BZ8udEgSh57w5QDLsZ1lNvND61u5cy6iDKXI5TIQY4DvUmsoFZhyr4iYJbtT/h6UJSyaZtEnA7ZMRjGhUIMOn+mjbj7Z3zmJMhxtImK3Xo3O2fJ1hnK4jsBwQPSLc=
-pixie,192.168.0.9 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAzDp588CvET6w11LB2s/vPjc4tX9+u46iYJgNFfhzxrXYMVv4GF7d30IXB5+Hwyi2FOQIG1+h0kUXVGWEv64rAFBT7pD2KMFX0lcDERV4avqT0TRDIIA5OqFOhq9Ff+kOmHS2cB7eFyR5vqbN4ujOnJGTmru9dcqyL+2AcFekvh0=
-culain,192.168.0.3 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvJ/IORhQMdAsJ7LB1sI2LlWUHc7HPTCDiEgJ96ij3jFvqaIiYieRFaNkxbbk75mPkj3vIqWIgAsAtHmKX4wDikNG/gyjs4WM4cWFKtl2jiVhqpoxqqCaVxs6Ex+vpKuKhQR6SzFBFDlBZYP9an6DPu1msTLT8/hZH2WwswVmpyU=
-cs312-server.een.orst.edu,128.193.40.66 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA+t3hsOiyp1mztt013bLdJqIAFCo8lxlz86MYEPz/mADHzWLs3Xv7xpAUv/E8pRbhEOzXo84EddORRBXz6DgVyMah8+v/u3IOkpXuZI0Iu1n5hZyf2l5DGEyGecr3oqqjUdMuM9HeXFLnqXJI3hDE7civBtqf5AJSol+TCcipeE8=
-freebsd1,192.168.0.52 ssh-dss AAAAB3NzaC1kc3MAAACBAJSiOyQhYlKAi0FDLKy42VzLDq6yJWXGXVCLSfgWyVx7QCq/3+W3C1dtHuAvjbypcjqqvsuGGITgQ1Y6B/+76n5d7FyQnj4SFZ5drOBn/TvslXhrS/Ok5KCcndfNAa+EyMnSZJ21jhoRjZftY4lmb4hy6fEF3RvjuOdf1qBN5FWpAAAAFQDcsWF0zELAW6YUlSjAyO0T0lfPbwAAAIAlOLdOd/WszzVaplCOnH5vF6LWfr6BosZKDkFi0mv6Ec636YGaj4AMxK8sRPusHv6sVByN17ntIJnLo2XD1SuoH28bZ0ZnPIdVnd0l1KqsOCuuow9LZYJUihezoUuYuTvij1jZdrwltuPNJTVLYtsZDnKE5plw+Tjzeb7ImjbXGwAAAIBT40olg3fxhRDiZECle0WK7GitgXCB3njs+4dba8VwveEJb9UuulMc1eR+zQiJR96IUBagC9NiLvUGS1IfiIHpT4FA8O/MK1W9SgxXB9d39Nk/9l8dH3U/fLnbC/hYVo8bN0or/mKxcxQMkdBwpPlWAbELRftod2BkkkvgfQdc+g==
-192.168.0.2 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgwCZ+qxpMMRJ3otGsjaYeKTKf6tuCZyK1cD+ns9Eu7V0ZJLJ/LLMxduu7n4H/ufGI5rGV5axzgx8yZhjDRzsrGjLAQYsqlomMkf901YQI6UuieSA4MZa5MDkq/Jt6Vx1kEGTpkgrfw9kRMX5BngECt1QKY4xTgC7Ex+WlFvZwk+tRUT3
-openbsd1,192.168.0.54 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvgRVrtJk0fBg9YsLf7rWR1X32ZjFcva5XBvenDlHruObaHzuGXyyr6iOCAEOc7eCZjlPBYrGZ2potqyk8HlBOHXr1cCBf49t4yAt8KgKswtzWlgdbU1UEwllSRVOpzqULAT0smv/jfaIZdvRoN1rLriqtpn4bQL//ZOHiyXCwdlJ+di8Mza2L8KZ5T75hwIFBhrgL12xfymRp3v+Iy21MjjzsF3pROIkZ7icitNqQF55U9vsHaA37vG8FepVkO10bYYP7IHPZaBPBMPx7qPyRgRDJahEUGBnkIkzwJHEmA+7YMiNTZu6MigezD+CIqY1xOi/eXZwObLwLKXo7eRmpw==
-192.168.0.60 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAufcvE7s1eRwhUwMBfZ6uFNxkdSdzjSDEn3vjByOjG/eraNhnYAW3rxV7WIf2pEa6JSOMrE1mqsEL75xEtpXlzC949Ysz4+1OSHY52KonoFm/a+FbmbFp81TVuVPYaLoeWN27STiJh+puC5spkIZe0laqT1GU13M4gj6B+j3NLhU=
-rh3a,192.168.0.55 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAufcvE7s1eRwhUwMBfZ6uFNxkdSdzjSDEn3vjByOjG/eraNhnYAW3rxV7WIf2pEa6JSOMrE1mqsEL75xEtpXlzC949Ysz4+1OSHY52KonoFm/a+FbmbFp81TVuVPYaLoeWN27STiJh+puC5spkIZe0laqT1GU13M4gj6B+j3NLhU=
-tsetse,192.168.0.7 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwCDGn82BEMSCfcE2LZKcwdAoyIBC+u2twVwWNRm3KzyrJMQ+RbTQo4AwGOdyr/QYh6KaxTKTSoDtiBLr132uenMQKwF47gCKMA1T47uiy+TBUehgOGwOxteSYP/pQRpKXFmhOppSPyDPQVq234XvANeJp0iT8ZKEhF2FsWTs6sM=
-config.sage.org,131.106.3.205 ssh-dss AAAAB3NzaC1kc3MAAACBAL2akEcIfQsfm3zCd2hD6PgH3kWA/tqX/qbrLhL/ipX7iqK/y282GMClZQSQjc1YNi9virvLzb6u/gdZxicZ8K5O3FaJrULQJOZaP62SOHk5CUSHVnvpMCaCnbwB6gEHa2LeMWStcEfWW+g1CC2hzPJw16/S5GISGXbyanO02MnXAAAAFQDomwx/OCjTmmQljMTU5rgNn2E4gwAAAIBmtMSfcs2Tq5iFFKK5cahluv047vVNfXqYIAkeJniceL0Et16MKfuzadpq0H9ocxQYW/5Ir9nUULrdxBUN9LxNKq15/uWkJC9QCSh8PysgvFnjVZeCODua/dn6eZTZnY9DZ3S6v1pT8CP6uWr5fmZJ8FKJGrC3gYX4y1V1ZTCVewAAAIB6e7RCST6vkTS5rgn5wGbrfLK5ad+PW+2i66k77Zv1pjtfRz+0oejBjwJDPNVSc2YNEl7X0nEEMNjo/a5x8Ls+nVqhzJA+NXIwS1e/moKbXFGewW5HAtxd79gtInC8dEIO7hmnWnqF1dBkRHXg1YffYkHrMVJBxpzagw7nYa0BBQ==
-rh3b,192.168.0.56 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAufcvE7s1eRwhUwMBfZ6uFNxkdSdzjSDEn3vjByOjG/eraNhnYAW3rxV7WIf2pEa6JSOMrE1mqsEL75xEtpXlzC949Ysz4+1OSHY52KonoFm/a+FbmbFp81TVuVPYaLoeWN27STiJh+puC5spkIZe0laqT1GU13M4gj6B+j3NLhU=
-centos1,192.168.0.57 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA0DXqYF+3Lf68GkWBAjjKBb6UITNnzm4wiDi/AGjv5+DoVXqDcqHvZ8rZFAMgUe1dVob4pWT2ZWLHW0gicoJCdr4UQbPXlWz1F62z8fo2PRRPlG6KN1wmF7pnyml8jr0wBX8lQZJsMqi4InGozf7wFHLH/7DNGRK3MD6tSp3Z4is=
-doorstop.cafes.net,205.241.238.186 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApJKeB9/bN5t55zLETHs0MVo/vEkfQ3EzY7178GKLI/yiOFmcn+NvUvUtCQK/xKpod813LBHCODxZPG1Kb0SjlaC/EkFEenb74LNu0o1qXa1GWh3wfaIm0JRNjXqPqxAWTlMs43O2HXwOwmLVhl7SSP3xtTw6h9gREbVKmfBaRdsRfzD0etfz1NCnmGh/1Sh9+j4eeS+IBtwoR5JVhZVhuofHCqs5HZ8gLDgfn8HXP7pMbLkx54cf1R/tmFmn9JGLdTPtEGcSIiu7414XSbfChSC83rGZCDPKHq7ZodiE8GpbWLBnyPXi2AYxTPM7aZMqitIHv3MWf5suV0q0WLGdnQ==
-host.domain.com,host1.domain.com,192.168.0.1 dss thisismykey1
diff --git a/test/data/types/yumrepos/fedora-devel.repo b/test/data/types/yumrepos/fedora-devel.repo
deleted file mode 100644
index ebb150b..0000000
--- a/test/data/types/yumrepos/fedora-devel.repo
+++ /dev/null
@@ -1,26 +0,0 @@
-[development]
-# These packages are untested and still under development. This
-# repository is used for updates to test releases, and for
-# development of new releases.
-#
-# This repository can see significant daily turn over and can see major
-# functionality changes which cause unexpected problems with other
-# development packages. Please use these packages if you want to work
-# with the Fedora developers by testing these new development packages.
-#
-# fedora-test-list at redhat.com is available as a discussion forum for
-# testing and troubleshooting for development packages in conjunction
-# with new test releases.
-#
-# fedora-devel-list at redhat.com is available as a discussion forum for
-# testing and troubleshooting for development packages in conjunction
-# with developing new releases.
-#
-# Reportable issues should be filed at bugzilla.redhat.com
-# Product: Fedora Core
-# Version: devel
-name=Fedora Core $releasever - Development Tree
-#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/development/$basearch/
-mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-rawhide
-enabled=0
-gpgcheck=0
diff --git a/test/data/types/yumrepos/fedora.repo b/test/data/types/yumrepos/fedora.repo
deleted file mode 100644
index 995fa68..0000000
--- a/test/data/types/yumrepos/fedora.repo
+++ /dev/null
@@ -1,9 +0,0 @@
-[base]
-name=Fedora Core $releasever - $basearch - Base
-mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-$releasever
-enabled=1
-gpgcheck=1
-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
-exclude=foo
-  bar
-  baz
diff --git a/test/executables/filebucket.rb b/test/executables/filebucket.rb
deleted file mode 100755
index 4916307..0000000
--- a/test/executables/filebucket.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/network/client'
-require 'puppettest'
-require 'socket'
-require 'facter'
-
-class TestFileBucketExe < Test::Unit::TestCase
-    include PuppetTest::ExeTest
-
-    def test_local
-        bucket = tempfile
-        file = tempfile
-        text = "somet ext"
-        md5 = Digest::MD5.hexdigest(text)
-        File.open(file, "w") { |f| f.print text }
-        out = %x{filebucket --bucket #{bucket} backup #{file}}
-
-        outfile, outmd5 = out.chomp.split(": ")
-
-        assert_equal(0, $?, "filebucket did not run successfully")
-
-        assert_equal(file, outfile, "did not output correct file name")
-        assert_equal(md5, outmd5, "did not output correct md5 sum")
-
-        dipper = Puppet::Network::Client.dipper.new(:Path => bucket)
-
-        newtext = nil
-        assert_nothing_raised("Could not get file from bucket") do
-            newtext = dipper.getfile(md5)
-        end
-
-        assert_equal(text, newtext, "did not get correct file from md5 sum")
-
-        out = %x{filebucket --bucket #{bucket} get #{md5}}
-        assert_equal(0, $?, "filebucket did not run successfully")
-        assert_equal(text, out, "did not get correct text back from filebucket")
-
-        File.open(file, "w") { |f| f.puts "some other txt" }
-        out = %x{filebucket --bucket #{bucket} restore #{file} #{md5}}
-        assert_equal(0, $?, "filebucket did not run successfully")
-        assert_equal(text, File.read(file), "file was not restored")
-    end
-end
-
diff --git a/test/executables/puppetbin.rb b/test/executables/puppetbin.rb
deleted file mode 100755
index 08329ef..0000000
--- a/test/executables/puppetbin.rb
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-
-class TestPuppetBin < Test::Unit::TestCase
-    include PuppetTest::ExeTest
-    def test_version
-        output = nil
-        assert_nothing_raised {
-          output = %x{puppet --version}.chomp
-        }
-        assert_equal(Puppet.version, output)
-    end
-
-    def test_execution
-        file = mktestmanifest()
-
-        output = nil
-        cmd = "puppet"
-        if Puppet[:debug]
-            cmd += " --debug"
-        end
-        cmd += " --confdir %s" % Puppet[:confdir]
-        cmd += " --vardir %s" % Puppet[:vardir]
-        unless Puppet[:debug]
-            cmd += " --logdest %s" % "/dev/null"
-        end
-
-        assert_nothing_raised {
-            output = %x{#{cmd + " " + file} 2>&1}
-        }
-        assert($? == 0, "Puppet exited with code %s" % $?.to_i)
-
-        assert(FileTest.exists?(@createdfile), "Failed to create config'ed file")
-    end
-
-    def test_inlineexecution
-        path = tempfile()
-        code = "file { '#{path}': ensure => file }"
-
-        output = nil
-        cmd = "puppet"
-        if Puppet[:debug]
-            cmd += " --debug"
-        end
-        #cmd += " --fqdn %s" % fqdn
-        cmd += " --confdir %s" % Puppet[:confdir]
-        cmd += " --vardir %s" % Puppet[:vardir]
-        unless Puppet[:debug]
-            cmd += " --logdest %s" % "/dev/null"
-        end
-
-        cmd += " -e \"#{code}\""
-
-        assert_nothing_raised {
-            out = %x{#{cmd} 2>&1}
-        }
-        assert($? == 0, "Puppet exited with code %s" % $?.to_i)
-
-        assert(FileTest.exists?(path), "Failed to create config'ed file")
-    end
-
-    def test_stdin_execution
-        path = tempfile()
-        manifest = tempfile()
-        env = %x{which env}.chomp
-        if env == ""
-            Puppet.info "cannot find env; cannot test stdin_execution"
-            return
-        end
-        File.open(manifest, "w") do |f|
-            f.puts "#!#{env} puppet
-            file { '#{path}': ensure => file }"
-        end
-        File.chmod(0755, manifest)
-
-        assert_nothing_raised {
-            out = %x{#{manifest} 2>&1}
-        }
-        assert($? == 0, "manifest exited with code %s" % $?.to_i)
-
-        assert(FileTest.exists?(path), "Failed to create config'ed file")
-    end
-
-    def test_parseonly
-        path = tempfile()
-        manifest = tempfile()
-        puppet = %x{which puppet}.chomp
-        if puppet == ""
-            Puppet.info "cannot find puppet; cannot test parseonly"
-            return
-        end
-        code = 'File <<| |>>
-        include nosuchclass'
-
-        assert_nothing_raised {
-            IO.popen("#{puppet} --parseonly", 'w') { |p| p.puts code }
-        }
-        assert($? == 0, "parseonly test exited with code %s" % $?.to_i)
-    end
-end
-
diff --git a/test/executables/puppetca.rb b/test/executables/puppetca.rb
deleted file mode 100755
index cdc8270..0000000
--- a/test/executables/puppetca.rb
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-
-class TestPuppetCA < Test::Unit::TestCase
-    include PuppetTest::ExeTest
-
-    def setup
-      super
-      Puppet::Util::SUIDManager.stubs(:asuser).yields
-    end
-    
-    def gen_cert(ca, host)
-        runca("-g #{host}")
-        ca.getclientcert(host)[0]
-    end
-    
-    def mkca
-        Puppet::Network::Handler.ca.new()
-    end
-    
-    def mkcert(hostname)
-        cert = nil
-        assert_nothing_raised {
-            cert = Puppet::SSLCertificates::Certificate.new(
-                :name => hostname
-            )
-            cert.mkcsr
-        }
-
-        return cert
-    end
-    
-    def runca(args)
-        debug = ""
-        if Puppet[:debug]
-            debug = "-d "
-        end
-        return %x{puppetca --user=#{Puppet[:user]} #{debug} --group=#{Puppet[:group]} --confdir=#{Puppet[:confdir]} --vardir=#{Puppet[:vardir]} #{args} 2>&1}
-    end
-
-    def test_signing
-        ca = mkca
-        Puppet[:autosign] = false
-        
-        %w{host.test.com Other.Testing.Com}.each do |host|
-            cert = mkcert(host)
-            resp = nil
-            assert_nothing_raised {
-                # We need to use a fake name so it doesn't think the cert is from
-                # itself.  Strangely, getcert stores the csr, because it's a server-side
-                # method, not client.
-                resp = ca.getcert(cert.csr.to_pem, host, "127.0.0.1")
-            }
-            assert_equal(["",""], resp)
-
-            output = nil
-            assert_nothing_raised {
-                output = runca("--list").chomp.split("\n").reject { |line| line =~ /warning:/ } # stupid ssl.rb
-            }
-            assert_equal($?,0)
-            assert_equal([host.downcase], output)
-            assert_nothing_raised {
-                output = runca("--sign -a").chomp.split("\n")
-            }
-
-
-            assert_equal($?,0)
-            assert_equal(["Signed #{host.downcase}"], output)
-
-            
-            signedfile = ca.ca.host2certfile(host)
-            assert(FileTest.exists?(signedfile), "cert does not exist")
-            assert(! FileTest.executable?(signedfile), "cert is executable")
-
-            uid = Puppet::Util.uid(Puppet[:user])
-
-            if Puppet::Util::SUIDManager.uid == 0
-                assert(! FileTest.owned?(signedfile), "cert is owned by root")
-            end
-            assert_nothing_raised {
-                output = runca("--list").chomp.split("\n")
-            }
-            assert_equal($?,0)
-            assert_equal(["No certificates to sign"], output)
-        end
-    end
-    
-    # This method takes a long time to run because of all of the external
-    # executable calls.
-    def test_revocation
-        ca = Puppet::SSLCertificates::CA.new()
-        host1 = gen_cert(ca, "host1.example.com")
-        host2 = gen_cert(ca, "host2.example.com")
-        host3 = gen_cert(ca, "host3.example.com")
-        runca("-r host1.example.com")
-        runca("-r #{host2.serial}")
-        runca("-r 0x#{host3.serial.to_s(16)}")
-        runca("-r 0xff")
-
-        # Recreate CA to force reading of CRL
-        ca = Puppet::SSLCertificates::CA.new()
-        crl = ca.crl
-        revoked = crl.revoked.collect { |r| r.serial }
-        exp = [host1.serial, host2.serial, host3.serial, 255]
-        assert_equal(exp, revoked)
-    end
-    
-    def test_case_insensitive_sign
-    end
-end
-
diff --git a/test/executables/puppetd.rb b/test/executables/puppetd.rb
deleted file mode 100755
index d770ff9..0000000
--- a/test/executables/puppetd.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/network/client'
-require 'puppettest'
-require 'socket'
-require 'facter'
-
-class TestPuppetDExe < Test::Unit::TestCase
-    include PuppetTest::ExeTest
-    def setup
-        super
-        Puppet[:certdnsnames] = "localhost"
-        # start the master
-        @manifest = startmasterd
-
-
-        @cmd = "puppetd"
-        @cmd += " --verbose"
-        @cmd += " --test"
-        @cmd += " --masterport %s" % @@port
-        @cmd += " --confdir %s" % Puppet[:confdir]
-        @cmd += " --rundir %s" % File.join(Puppet[:vardir], "run")
-        @cmd += " --vardir %s" % Puppet[:vardir]
-        @cmd += " --server localhost"
-    end
-
-    def test_normalstart
-        # and verify our daemon runs
-        output = nil
-        assert_nothing_raised {
-            output = %x{#{@cmd} 2>&1}
-        }
-        sleep 1
-        assert($? == 0, "Puppetd exited with code %s" % $?)
-
-        assert(FileTest.exists?(@createdfile), "Failed to create file %s" % @createdfile)
-    end
-
-    # now verify that --noop works
-    def test_noop_start
-        @cmd += " --noop"
-        assert_nothing_raised {
-            output = %x{#{@cmd}}.chomp
-        }
-        sleep 1
-        assert($? == 0, "Puppetd exited with code %s" % $?)
-
-        assert(! FileTest.exists?(@createdfile),
-            "Noop created config'ed file")
-    end
-end
-
diff --git a/test/executables/puppetmasterd.rb b/test/executables/puppetmasterd.rb
deleted file mode 100755
index 6d4ddf5..0000000
--- a/test/executables/puppetmasterd.rb
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/network/client'
-require 'puppettest'
-require 'socket'
-
-class TestPuppetMasterD < Test::Unit::TestCase
-    include PuppetTest::ExeTest
-    def setup
-        super
-        Puppet[:certdnsnames] = "localhost"
-    end
-
-    def getcerts
-        include Puppet::Daemon
-        if self.readcerts
-            return [@cert, @key, @cacert, @cacertfile]
-        else
-            raise "Couldn't read certs"
-        end
-    end
-
-    # start the daemon and verify it responds and such
-    def test_normalstart
-        startmasterd
-
-        pidfile = File.join(Puppet[:vardir], "run", "puppetmasterd.pid")
-        assert(FileTest.exists?(pidfile), "PID file does not exist")
-
-        sleep(1)
-        assert_nothing_raised {
-            socket = TCPSocket.new("127.0.0.1", @@port)
-            socket.close
-        }
-
-        client = nil
-        assert_nothing_raised() {
-            client = Puppet::Network::Client.status.new(
-                :Server => "localhost",
-                :Port => @@port
-            )
-        }
-
-        # set our client up to auto-sign
-        assert(Puppet[:autosign] =~ /^#{File::SEPARATOR}/,
-            "Autosign is set to %s, not a file" % Puppet[:autosign])
-
-        FileUtils.mkdir_p(File.dirname(Puppet[:autosign]))
-        File.open(Puppet[:autosign], "w") { |f|
-            f.puts Puppet[:certname]
-        }
-
-        retval = nil
-
-        # init the client certs
-        assert_nothing_raised() {
-            client.cert
-        }
-
-        # call status
-        assert_nothing_raised() {
-            retval = client.status
-        }
-        assert_equal(1, retval, "Status.status return value was %s" % retval)
-
-        # this client shoulduse the same certs
-        assert_nothing_raised() {
-            client = Puppet::Network::Client.master.new(
-                :Server => "localhost",
-                :Port => @@port
-            )
-        }
-        assert_nothing_raised() {
-            retval = client.getconfig
-        }
-
-        objects = nil
-    end
-
-    # verify that we can run puppetmasterd in parse-only mode
-    def test_parseonly
-        startmasterd("--parseonly > /dev/null")
-        sleep(1)
-
-        pid = nil
-        ps = Facter["ps"].value || "ps -ef"
-        %x{#{ps}}.chomp.split(/\n/).each { |line|
-            next if line =~ /^puppet/ # skip normal master procs
-            if line =~ /puppetmasterd.+--manifest/
-                ary = line.split(" ")
-                pid = ary[1].to_i
-            end
-        }
-
-        assert($? == 0, "Puppetmasterd ended with non-zero exit status")
-
-        assert_nil(pid, "Puppetmasterd is still running after parseonly")
-    end
-
-    def disabled_test_sslconnection
-        #file = File.join(exampledir, "code", "head")
-        #startmasterd("--manifest #{file}")
-
-        #assert_nothing_raised {
-        #    socket = TCPSocket.new("127.0.0.1", Puppet[:masterport])
-        #    socket.close
-        #}
-
-        client = nil
-        cert, key, cacert, cacertfile = getcerts()
-
-        assert_nothing_raised() {
-            client = Net::HTTP.new("localhost", Puppet[:masterport])
-            client.cert = cert
-            client.key = key
-            client.ca_file = cacertfile
-            client.use_ssl = true
-            client.start_immediately = true
-        }
-        retval = nil
-
-        assert_nothing_raised() {
-            retval = client.nothing
-        }
-        assert_equal(1, retval, "return value was %s" % retval)
-        facts = {}
-        Facter.each { |p,v|
-            facts[p] = v
-        }
-        textfacts = CGI.escape(YAML.dump(facts))
-        assert_nothing_raised() {
-            #Puppet.notice "calling status"
-            #retval = client.call("status.status", "")
-            retval = client.call("puppetmaster.getconfig", textfacts, "yaml")
-        }
-
-        objects = nil
-        assert_nothing_raised {
-            YAML.load(CGI.unescape(retval))
-        }
-        #stopmasterd
-    end
-end
-
diff --git a/test/executables/puppetmodule.rb b/test/executables/puppetmodule.rb
deleted file mode 100755
index ce28796..0000000
--- a/test/executables/puppetmodule.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-
-class TestPuppetModule < Test::Unit::TestCase
-    include PuppetTest::ExeTest
-
-
-    def setup
-        super
-        @module = File.join(basedir, "ext", "module_puppet")
-    end
-
-    def test_existence
-        assert(FileTest.exists?(@module), "Module does not exist")
-    end
-
-    def test_execution
-        file = tempfile()
-
-        createdfile = tempfile()
-
-        File.open(file, "w") { |f|
-            f.puts "class yaytest { file { \"#{createdfile}\": ensure => file } }"
-        }
-
-        output = nil
-        cmd = @module
-        cmd += " --verbose"
-        #cmd += " --fqdn %s" % fqdn
-        cmd += " --confdir %s" % Puppet[:confdir]
-        cmd += " --vardir %s" % Puppet[:vardir]
-        if Puppet[:debug]
-            cmd += " --logdest %s" % "console"
-            cmd += " --debug"
-            cmd += " --trace"
-        else
-            cmd += " --logdest %s" % "/dev/null"
-        end
-
-        ENV["CFALLCLASSES"] = "yaytest:all"
-        libsetup
-
-        out = nil
-        assert_nothing_raised {
-            out = %x{#{cmd + " " + file} 2>&1}
-        }
-        assert($? == 0, "Puppet module exited with code %s: %s" % [$?.to_i, out])
-
-        assert(FileTest.exists?(createdfile), "Failed to create config'ed file")
-    end
-end
-
diff --git a/test/language/ast.rb b/test/language/ast.rb
deleted file mode 100755
index 8c0f31a..0000000
--- a/test/language/ast.rb
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/parser/interpreter'
-require 'puppet/parser/parser'
-require 'puppettest/resourcetesting'
-require 'puppettest/parsertesting'
-require 'puppettest/support/collection'
-
-class TestAST < Test::Unit::TestCase
-    include PuppetTest::ParserTesting
-    include PuppetTest::ResourceTesting
-    include PuppetTest::Support::Collection
-
-    def test_if
-        astif = nil
-        astelse = nil
-        fakeelse = FakeAST.new(:else)
-        faketest = FakeAST.new(true)
-        fakeif = FakeAST.new(:if)
-
-        assert_nothing_raised {
-            astelse = AST::Else.new(:statements => fakeelse)
-        }
-        assert_nothing_raised {
-            astif = AST::IfStatement.new(
-                :test => faketest,
-                :statements => fakeif,
-                :else => astelse
-            )
-        }
-
-        # We initialized it to true, so we should get that first
-        ret = nil
-        assert_nothing_raised {
-            ret = astif.evaluate("yay")
-        }
-        assert_equal(:if, ret)
-
-        # Now set it to false and check that
-        faketest.evaluate = false
-        assert_nothing_raised {
-            ret = astif.evaluate("yay")
-        }
-        assert_equal(:else, ret)
-    end
-
-    # Make sure our override object behaves "correctly"
-    def test_override
-        scope = mkscope
-
-        ref = nil
-        assert_nothing_raised do
-            ref = resourceoverride("file", "/yayness", "owner" => "blah", "group" => "boo")
-        end
-
-        Puppet::Parser::Resource.expects(:new).with { |o| o.is_a?(Hash) }.returns(:override)
-        scope.compiler.expects(:add_override).with(:override)
-        ret = nil
-        assert_nothing_raised do
-            ret = ref.evaluate scope
-        end
-
-        assert_equal(:override, ret, "Did not return override")
-    end
-
-    # make sure our resourcedefaults ast object works correctly.
-    def test_resourcedefaults
-        scope = mkscope
-
-        # Now make some defaults for files
-        args = {:source => "/yay/ness", :group => "yayness"}
-        assert_nothing_raised do
-            obj = defaultobj "file", args
-            obj.evaluate scope
-        end
-
-        hash = nil
-        assert_nothing_raised do
-            hash = scope.lookupdefaults("File")
-        end
-
-        hash.each do |name, value|
-            assert_instance_of(Symbol, name) # params always convert
-            assert_instance_of(Puppet::Parser::Resource::Param, value)
-        end
-
-        args.each do |name, value|
-            assert(hash[name], "Did not get default %s" % name)
-            assert_equal(value, hash[name].value)
-        end
-    end
-
-    def test_collection
-        scope = mkscope
-
-        coll = nil
-        assert_nothing_raised do
-            coll = AST::Collection.new(:type => "file", :form => :virtual)
-        end
-
-        assert_instance_of(AST::Collection, coll)
-
-        ret = nil
-        assert_nothing_raised do
-            ret = coll.evaluate scope
-        end
-
-        assert_instance_of(Puppet::Parser::Collector, ret)
-
-        # Now make sure we get it back from the scope
-        colls = scope.compiler.instance_variable_get("@collections")
-        assert_equal([ret], colls, "Did not store collector in config's collection list")
-    end
-
-    def test_virtual_collexp
-        scope = mkscope
-
-        # make a resource
-        resource = mkresource(:type => "file", :title => "/tmp/testing",
-            :scope => scope, :params => {:owner => "root", :group => "bin", :mode => "644"})
-
-        run_collection_queries(:virtual) do |string, result, query|
-            code = nil
-            assert_nothing_raised do
-                str, code = query.evaluate scope
-            end
-
-            assert_instance_of(Proc, code)
-            assert_nothing_raised do
-                assert_equal(result, code.call(resource),
-                    "'#{string}' failed")
-            end
-        end
-    end
-end
diff --git a/test/language/ast/casestatement.rb b/test/language/ast/casestatement.rb
deleted file mode 100755
index d95d788..0000000
--- a/test/language/ast/casestatement.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2006-12-22.
-#  Copyright (c) 2006. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/parsertesting'
-
-class TestCaseStatement < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::ParserTesting
-	AST = Puppet::Parser::AST
-	
-	class ActiveAST < FakeAST
-	    def self.clear
-	        $evaluated = []
-        end
-	    def evaluate
-	        $evaluated ||= []
-	        $evaluated << @evaluate
-        end
-    end
-	
-	def test_evaluate
-        ast = nil
-        scope = mkscope
-        param = nameobj("MyParam")
-
-        hash = {
-            "myparam" => ActiveAST.new("lower"),
-            "MyParam" => ActiveAST.new("upper"),
-            true => ActiveAST.new(true)
-        }
-        options = ["myparam", "MyParam"].collect do |p|
-            AST::CaseOpt.new(:value => FakeAST.new(p), :statements => hash[p])
-        end
-        assert_nothing_raised do
-            ast = AST::CaseStatement.new(:test => param, :options => options)
-        end
-
-        # Start out case-sensitive
-        Puppet[:casesensitive] = true
-
-        result = nil
-        assert_nothing_raised do
-            result = ast.evaluate scope
-        end
-        assert(result, "did not get valid result")
-        assert_equal(["upper"], $evaluated, "Did not match case-sensitively")
-        assert(! hash["myparam"].evaluated?, "lower value was evaluated even though it did not match")
-
-        # Now try it case-insensitive
-        Puppet[:casesensitive] = false
-        $evaluated.clear
-        hash["MyParam"].reset
-        assert_nothing_raised do
-            result = ast.evaluate scope
-        end
-        assert(result, "did not get valid result")
-        assert_equal(["lower"], result, "Did not match case-insensitively")
-        assert(! hash["MyParam"].evaluated?, "upper value was evaluated even though it did not match")
-    end
-
-    # #522 - test that case statements with multiple values work as
-    # expected, where any true value suffices.
-    def test_multiple_values
-        ast = nil
-
-        tests = {
-            "one" => %w{a b c},
-            "two" => %w{e f g}
-        }
-        options = tests.collect do |result, values|
-            values = values.collect { |v| AST::Leaf.new :value => v }
-            AST::CaseOpt.new(:value => AST::ASTArray.new(:children => values),
-                :statements => AST::Leaf.new(:value => result))
-        end
-        options << AST::CaseOpt.new(:value => AST::Default.new(:value => "default"),
-            :statements => AST::Leaf.new(:value => "default"))
-
-        ast = nil
-        param = AST::Variable.new(:value => "testparam")
-        assert_nothing_raised do
-            ast = AST::CaseStatement.new(:test => param, :options => options)
-        end
-        result = nil
-        tests.each do |should, values|
-            values.each do |value|
-                result = nil
-                scope = mkscope
-                scope.setvar("testparam", value)
-                assert_nothing_raised do
-                    result = ast.evaluate(scope)
-                end
-
-                assert_equal(should, result, "Got incorrect result for %s" % value)
-            end
-        end
-    end
-end
-
diff --git a/test/language/ast/resource.rb b/test/language/ast/resource.rb
deleted file mode 100755
index 97541d9..0000000
--- a/test/language/ast/resource.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2007-07-8.
-#  Copyright (c) 2007. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/parsertesting'
-
-class TestASTResource< Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::ParserTesting
-	AST = Puppet::Parser::AST
-
-    def setup
-        super
-        @scope = mkscope
-        @parser = @scope.compiler.parser
-    end
-
-    def newdef(type, title, params = nil)
-        params ||= AST::ASTArray.new(:children => [])
-        AST::Resource.new(:type => type, :title => AST::String.new(:value => title), :params => params)
-    end
-
-    # Related to #806, make sure resources always look up the full path to the resource.
-    def test_scoped_types
-        @parser.newdefine "one"
-        @parser.newdefine "one::two"
-        @parser.newdefine "three"
-        twoscope = @scope.newscope(:namespace => "one")
-        twoscope.resource = @scope.resource
-        assert(twoscope.finddefine("two"), "Could not find 'two' definition")
-        title = "title"
-
-        # First try a qualified type
-        assert_equal("One::Two", newdef("two", title).evaluate(twoscope)[0].type,
-            "Defined type was not made fully qualified")
-
-        # Then try a type that does not need to be qualified
-        assert_equal("One", newdef("one", title).evaluate(twoscope)[0].type,
-            "Unqualified defined type was not handled correctly")
-
-        # Then an unqualified type from within the one namespace
-        assert_equal("Three", newdef("three", title).evaluate(twoscope)[0].type,
-            "Defined type was not made fully qualified")
-
-        # Then a builtin type
-        assert_equal("File", newdef("file", title).evaluate(twoscope)[0].type,
-            "Builtin type was not handled correctly")
-
-        # Now try a type that does not exist, which should throw an error.
-        assert_raise(Puppet::ParseError, "Did not fail on a missing type in a resource reference") do
-            newdef("nosuchtype", title).evaluate(twoscope)
-        end
-    end
-end
diff --git a/test/language/ast/resource_reference.rb b/test/language/ast/resource_reference.rb
deleted file mode 100755
index 75cb53c..0000000
--- a/test/language/ast/resource_reference.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2007-07-8.
-#  Copyright (c) 2007. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/parsertesting'
-
-class TestASTResourceReference < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::ParserTesting
-	AST = Puppet::Parser::AST
-    
-    def newref(type, title)
-        AST::ResourceReference.new(:type => type, :title => AST::String.new(:value => title))
-    end
-
-    def setup
-        super
-        @scope = mkscope
-        @parser = @scope.compiler.parser
-    end
-
-    # Related to #706, make sure resource references correctly translate to qualified types.
-    def test_scoped_references
-        @parser.newdefine "one"
-        @parser.newdefine "one::two"
-        @parser.newdefine "three"
-        twoscope = @scope.newscope(:namespace => "one")
-        assert(twoscope.finddefine("two"), "Could not find 'two' definition")
-        title = "title"
-
-        # First try a qualified type
-        assert_equal("One::Two", newref("two", title).evaluate(twoscope).type,
-            "Defined type was not made fully qualified")
-
-        # Then try a type that does not need to be qualified
-        assert_equal("One", newref("one", title).evaluate(twoscope).type,
-            "Unqualified defined type was not handled correctly")
-
-        # Then an unqualified type from within the one namespace
-        assert_equal("Three", newref("three", title).evaluate(twoscope).type,
-            "Defined type was not made fully qualified")
-
-        # Then a builtin type
-        assert_equal("File", newref("file", title).evaluate(twoscope).type,
-            "Builtin type was not handled correctly")
-
-        # Now try a type that does not exist, which should throw an error.
-        assert_raise(Puppet::ParseError, "Did not fail on a missing type in a resource reference") do
-            newref("nosuchtype", title).evaluate(twoscope)
-        end
-
-        # Now run the same tests, but with the classes
-        @parser.newclass "four"
-        @parser.newclass "one::five"
-
-        # First try an unqualified type
-        assert_equal("four", newref("class", "four").evaluate(twoscope).title,
-            "Unqualified class was not found")
-
-        # Then a qualified class
-        assert_equal("one::five", newref("class", "five").evaluate(twoscope).title,
-            "Class was not made fully qualified")
-
-        # Then try a type that does not need to be qualified
-        assert_equal("four", newref("class", "four").evaluate(twoscope).title,
-            "Unqualified class was not handled correctly")
-
-        # Now try a type that does not exist, which should throw an error.
-        assert_raise(Puppet::ParseError, "Did not fail on a missing type in a resource reference") do
-            newref("class", "nosuchclass").evaluate(twoscope)
-        end
-    end
-end
diff --git a/test/language/ast/selector.rb b/test/language/ast/selector.rb
deleted file mode 100755
index 6e923bd..0000000
--- a/test/language/ast/selector.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2006-12-22.
-#  Copyright (c) 2006. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/parsertesting'
-
-class TestSelector < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::ParserTesting
-	AST = Puppet::Parser::AST
-    
-    def test_evaluate
-        scope = mkscope
-        upperparam = nameobj("MYPARAM")
-        lowerparam = nameobj("myparam")
-        
-        should = {"MYPARAM" => "upper", "myparam" => "lower"}
-        
-        maker = Proc.new do
-            {
-            :default => AST::ResourceParam.new(:param => AST::Default.new(:value => "default"), :value => FakeAST.new("default")),
-            :lower => AST::ResourceParam.new(:param => FakeAST.new("myparam"), :value => FakeAST.new("lower")),
-            :upper => AST::ResourceParam.new(:param => FakeAST.new("MYPARAM"), :value => FakeAST.new("upper")),
-            }
-            
-        end
-        
-        # Start out case-sensitive
-        Puppet[:casesensitive] = true
-        
-        %w{MYPARAM myparam}.each do |str|
-            param = nameobj(str)
-            params = maker.call()
-            sel = AST::Selector.new(:param => param, :values => params.values)
-            result = nil
-            assert_nothing_raised { result = sel.evaluate(scope) }
-            assert_equal(should[str], result, "did not case-sensitively match %s" % str)
-        end
-        
-        # then insensitive
-        Puppet[:casesensitive] = false
-        
-        %w{MYPARAM myparam}.each do |str|
-            param = nameobj(str)
-            params = maker.call()
-
-            # Delete the upper value, since we don't want it to match
-            # and it introduces a hash-ordering bug in testing.
-            params.delete(:upper)
-            sel = AST::Selector.new(:param => param, :values => params.values)
-            result = nil
-            assert_nothing_raised { result = sel.evaluate(scope) }
-            assert_equal("lower", result, "did not case-insensitively match %s" % str)
-        end
-    end
-end
-
diff --git a/test/language/ast/variable.rb b/test/language/ast/variable.rb
deleted file mode 100755
index bde397b..0000000
--- a/test/language/ast/variable.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2007-0419.
-#  Copyright (c) 2006. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/parsertesting'
-
-class TestVariable < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::ParserTesting
-	AST = Puppet::Parser::AST
-    
-    def setup
-        super
-        @interp = mkinterp
-        @scope = mkscope :interp => @interp
-        @name = "myvar"
-        @var = AST::Variable.new(:value => @name)
-    end
-
-    def test_evaluate
-        assert_equal("", @var.evaluate(@scope), "did not return empty string on unset var")
-        @scope.setvar(@name, "something")
-        assert_equal("something", @var.evaluate(@scope), "incorrect variable value")
-    end
-end
-
diff --git a/test/language/functions.rb b/test/language/functions.rb
deleted file mode 100755
index d9a1a56..0000000
--- a/test/language/functions.rb
+++ /dev/null
@@ -1,592 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/parser/parser'
-require 'puppet/network/client'
-require 'puppettest'
-require 'puppettest/resourcetesting'
-
-class TestLangFunctions < Test::Unit::TestCase
-    include PuppetTest::ParserTesting
-    include PuppetTest::ResourceTesting
-    def test_functions
-        assert_raise(Puppet::ParseError) do
-            Puppet::Parser::AST::Function.new(
-                :name => "fakefunction",
-                :arguments => AST::ASTArray.new(
-                    :children => [nameobj("avalue")]
-                )
-            )
-        end
-
-        assert_nothing_raised do
-            Puppet::Parser::Functions.newfunction(:fakefunction, :type => :rvalue) do |input|
-                return "output %s" % input[0]
-            end
-        end
-
-        func = nil
-        assert_nothing_raised do
-            func = Puppet::Parser::AST::Function.new(
-                :name => "fakefunction",
-                :ftype => :rvalue,
-                :arguments => AST::ASTArray.new(
-                    :children => [nameobj("avalue")]
-                )
-            )
-        end
-
-        scope = mkscope
-        val = nil
-        assert_nothing_raised do
-            val = func.evaluate(scope)
-        end
-
-        assert_equal("output avalue", val)
-    end
-
-    def test_taggedfunction
-        scope = mkscope
-        scope.resource.tag("yayness")
-
-        # Make sure the ast stuff does what it's supposed to
-        {"yayness" => true, "booness" => false}.each do |tag, retval|
-            func = taggedobj(tag, :rvalue)
-
-            val = nil
-            assert_nothing_raised do
-                val = func.evaluate(scope)
-            end
-
-            assert_equal(retval, val, "'tagged' returned %s for %s" % [val, tag])
-        end
-
-        # Now make sure we correctly get tags.
-        scope.resource.tag("resourcetag")
-        assert(scope.function_tagged("resourcetag"), "tagged function did not catch resource tags")
-        scope.compiler.catalog.tag("configtag")
-        assert(scope.function_tagged("configtag"), "tagged function did not catch catalog tags")
-    end
-
-    def test_failfunction
-        func = nil
-        assert_nothing_raised do
-            func = Puppet::Parser::AST::Function.new(
-                :name => "fail",
-                :ftype => :statement,
-                :arguments => AST::ASTArray.new(
-                    :children => [stringobj("this is a failure"),
-                        stringobj("and another")]
-                )
-            )
-        end
-
-        scope = mkscope
-        val = nil
-        assert_raise(Puppet::ParseError) do
-            val = func.evaluate(scope)
-        end
-    end
-
-    def test_multipletemplates
-        Dir.mkdir(Puppet[:templatedir])
-        onep = File.join(Puppet[:templatedir], "one")
-        twop = File.join(Puppet[:templatedir], "two")
-
-        File.open(onep, "w") do |f|
-            f.puts "<%- if @one.nil? then raise '@one undefined' end -%>" +
-                "template <%= @one %>"
-        end
-
-        File.open(twop, "w") do |f|
-            f.puts "template <%= @two %>"
-        end
-        func = nil
-        assert_nothing_raised do
-            func = Puppet::Parser::AST::Function.new(
-                :name => "template",
-                :ftype => :rvalue,
-                :arguments => AST::ASTArray.new(
-                    :children => [stringobj("one"),
-                        stringobj("two")]
-                )
-            )
-        end
-        ast = varobj("output", func)
-
-        scope = mkscope
-
-        # Test that our manual exception throw fails the parse
-        assert_raise(Puppet::ParseError) do
-            ast.evaluate(scope)
-        end
-
-        # Test that our use of an undefined instance variable does not throw
-        # an exception, but only safely continues.
-        scope.setvar("one", "One")
-        assert_nothing_raised do
-            ast.evaluate(scope)
-        end
-
-        # Ensure that we got the output we expected from that evaluation.
-        assert_equal("template One\ntemplate \n", scope.lookupvar("output"),
-                     "Undefined template variables do not raise exceptions")
-
-        # Now, fill in the last variable and make sure the whole thing
-        # evaluates correctly.
-        scope.setvar("two", "Two")
-        scope.unsetvar("output")
-        assert_nothing_raised do
-            ast.evaluate(scope)
-        end
-
-        assert_equal("template One\ntemplate Two\n", scope.lookupvar("output"),
-            "Templates were not handled correctly")
-    end
-
-    # Now make sure we can fully qualify files, and specify just one
-    def test_singletemplates
-        template = tempfile()
-
-        File.open(template, "w") do |f|
-            f.puts "template <%= @yay.nil?() ? raise('yay undefined') : @yay %>"
-        end
-
-        func = nil
-        assert_nothing_raised do
-            func = Puppet::Parser::AST::Function.new(
-                :name => "template",
-                :ftype => :rvalue,
-                :arguments => AST::ASTArray.new(
-                    :children => [stringobj(template)]
-                )
-            )
-        end
-        ast = varobj("output", func)
-
-        scope = mkscope
-        assert_raise(Puppet::ParseError) do
-            ast.evaluate(scope)
-        end
-
-        scope.setvar("yay", "this is yay")
-
-        assert_nothing_raised do
-            ast.evaluate(scope)
-        end
-
-        assert_equal("template this is yay\n", scope.lookupvar("output"),
-            "Templates were not handled correctly")
-
-    end
-
-    # Make sure that legacy template variable access works as expected.
-    def test_legacyvariables
-        template = tempfile()
-
-        File.open(template, "w") do |f|
-            f.puts "template <%= deprecated %>"
-        end
-
-        func = nil
-        assert_nothing_raised do
-            func = Puppet::Parser::AST::Function.new(
-                :name => "template",
-                :ftype => :rvalue,
-                :arguments => AST::ASTArray.new(
-                    :children => [stringobj(template)]
-                )
-            )
-        end
-        ast = varobj("output", func)
-
-        # Verify that we get an exception using old-style accessors.
-        scope = mkscope
-        assert_raise(Puppet::ParseError) do
-            ast.evaluate(scope)
-        end
-
-        # Verify that we evaluate and return their value correctly.
-        scope.setvar("deprecated", "deprecated value")
-        assert_nothing_raised do
-            ast.evaluate(scope)
-        end
-
-        assert_equal("template deprecated value\n", scope.lookupvar("output"),
-                     "Deprecated template variables were not handled correctly")
-    end
-
-    # Make sure that problems with kernel method visibility still exist.
-    def test_kernel_module_shadows_deprecated_var_lookup
-        template = tempfile()
-        File.open(template, "w").puts("<%= binding %>")
-
-        func = nil
-        assert_nothing_raised do
-            func = Puppet::Parser::AST::Function.new(
-                :name => "template",
-                :ftype => :rvalue,
-                :arguments => AST::ASTArray.new(
-                    :children => [stringobj(template)]
-                )
-            )
-        end
-        ast = varobj("output", func)
-
-        # Verify that Kernel methods still shadow deprecated variable lookups.
-        scope = mkscope
-        assert_nothing_raised("No exception for Kernel shadowed variable names") do
-            ast.evaluate(scope)
-        end
-    end
-
-    def test_tempatefunction_cannot_see_scopes
-        template = tempfile()
-
-        File.open(template, "w") do |f|
-            f.puts "<%= lookupvar('myvar') %>"
-        end
-
-        func = nil
-        assert_nothing_raised do
-            func = Puppet::Parser::AST::Function.new(
-                :name => "template",
-                :ftype => :rvalue,
-                :arguments => AST::ASTArray.new(
-                    :children => [stringobj(template)]
-                )
-            )
-        end
-        ast = varobj("output", func)
-
-        scope = mkscope
-        scope.setvar("myvar", "this is yayness")
-        assert_raise(Puppet::ParseError) do
-            ast.evaluate(scope)
-        end
-    end
-
-    def test_template_reparses
-        template = tempfile()
-
-        File.open(template, "w") do |f|
-            f.puts "original text"
-        end
-
-        file = tempfile()
-
-        Puppet[:code] = %{file { "#{file}": content => template("#{template}") }}
-        Puppet[:environment] = "yay"
-        interp = Puppet::Parser::Interpreter.new
-        node = mknode
-        node.stubs(:environment).returns("yay")
-
-        Puppet[:environment] = "yay"
-
-        catalog = nil
-        assert_nothing_raised {
-            catalog = interp.compile(node)
-        }
-
-        version = catalog.version
-
-        fileobj = catalog.vertices.find { |r| r.title == file }
-        assert(fileobj, "File was not in catalog")
-
-        assert_equal("original text\n", fileobj["content"],
-            "Template did not work")
-
-        Puppet[:filetimeout] = -5
-        # Have to sleep because one second is the fs's time granularity.
-        sleep(1)
-
-        # Now modify the template
-        File.open(template, "w") do |f|
-            f.puts "new text"
-        end
-
-        newversion = interp.compile(node).version
-
-        assert(version != newversion, "Parse date did not change")
-    end
-
-    def test_template_defined_vars
-        template = tempfile()
-
-        File.open(template, "w") do |f|
-            f.puts "template <%= @yayness %>"
-        end
-
-        func = nil
-        assert_nothing_raised do
-            func = Puppet::Parser::AST::Function.new(
-                :name => "template",
-                :ftype => :rvalue,
-                :arguments => AST::ASTArray.new(
-                    :children => [stringobj(template)]
-                )
-            )
-        end
-        ast = varobj("output", func)
-
-        {
-            "" => "",
-            false => "false",
-        }.each do |string, value|
-            scope = mkscope
-            scope.setvar("yayness", string)
-            assert_equal(string, scope.lookupvar("yayness", false))
-
-            assert_nothing_raised("An empty string was not a valid variable value") do
-                ast.evaluate(scope)
-            end
-
-            assert_equal("template #{value}\n", scope.lookupvar("output"),
-                         "%s did not get evaluated correctly" % string.inspect)
-        end
-    end
-
-    def test_autoloading_functions
-        assert_equal(false, Puppet::Parser::Functions.function(:autofunc),
-            "Got told autofunc already exists")
-
-        dir = tempfile()
-        $: << dir
-        newpath = File.join(dir, "puppet", "parser", "functions")
-        FileUtils.mkdir_p(newpath)
-
-        File.open(File.join(newpath, "autofunc.rb"), "w") { |f|
-            f.puts %{
-                Puppet::Parser::Functions.newfunction(:autofunc, :type => :rvalue) do |vals|
-                    Puppet.wanring vals.inspect
-                end
-            }
-        }
-
-        obj = nil
-        assert_nothing_raised {
-            obj = Puppet::Parser::Functions.function(:autofunc)
-        }
-
-        assert(obj, "Did not autoload function")
-        assert(Puppet::Parser::Scope.method_defined?(:function_autofunc),
-            "Did not set function correctly")
-    end
-
-    def test_realize
-        scope = mkscope
-        parser = scope.compiler.parser
-    
-        realize = Puppet::Parser::Functions.function(:realize)
-
-        # Make a definition
-        parser.newdefine("mytype")
-        
-        [%w{file /tmp/virtual}, %w{mytype yay}].each do |type, title|
-            # Make a virtual resource
-            virtual = mkresource(:type => type, :title => title,
-                :virtual => true, :params => {}, :scope => scope)
-        
-            scope.compiler.add_resource(scope, virtual)
-
-            ref = Puppet::Parser::Resource::Reference.new(
-                :type => type, :title => title,
-                :scope => scope
-            )
-            # Now call the realize function
-            assert_nothing_raised do
-                scope.function_realize(ref)
-            end
-
-            # Make sure it created a collection
-            assert_equal(1, scope.compiler.collections.length,
-                "Did not set collection")
-
-            assert_nothing_raised do
-                scope.compiler.collections.each do |coll| coll.evaluate end
-            end
-            scope.compiler.collections.clear
-
-            # Now make sure the virtual resource is no longer virtual
-            assert(! virtual.virtual?, "Did not make virtual resource real")
-        end
-
-        # Make sure we puke on any resource that doesn't exist
-        none = Puppet::Parser::Resource::Reference.new(
-            :type => "file", :title => "/tmp/nosuchfile",
-            :scope => scope
-        )
-
-        # The function works
-        assert_nothing_raised do
-            scope.function_realize(none.to_s)
-        end
-
-        # Make sure it created a collection
-        assert_equal(1, scope.compiler.collections.length,
-            "Did not set collection")
-
-        # And the collection has our resource in it
-        assert_equal([none.to_s], scope.compiler.collections[0].resources,
-            "Did not set resources in collection")
-    end
-    
-    def test_defined
-        scope = mkscope
-        parser = scope.compiler.parser
-
-        defined = Puppet::Parser::Functions.function(:defined)
-        
-        parser.newclass("yayness")
-        parser.newdefine("rahness")
-        
-        assert_nothing_raised do
-            assert(scope.function_defined("yayness"), "yayness class was not considered defined")
-            assert(scope.function_defined("rahness"), "rahness definition was not considered defined")
-            assert(scope.function_defined("service"), "service type was not considered defined")
-            assert(! scope.function_defined("fakness"), "fakeness was considered defined")
-        end
-        
-        # Now make sure any match in a list will work
-        assert(scope.function_defined(["booness", "yayness", "fakeness"]),
-            "A single answer was not sufficient to return true")
-        
-        # and make sure multiple falses are still false
-        assert(! scope.function_defined(%w{no otherno stillno}),
-            "Multiple falses were somehow true")
-        
-        # Now make sure we can test resources
-        scope.compiler.add_resource(scope, mkresource(:type => "file", :title => "/tmp/rahness",
-            :scope => scope, :source => scope.source,
-            :params => {:owner => "root"}))
-        
-        yep = Puppet::Parser::Resource::Reference.new(:type => "file", :title => "/tmp/rahness")
-        nope = Puppet::Parser::Resource::Reference.new(:type => "file", :title => "/tmp/fooness")
-        
-        assert(scope.function_defined([yep]), "valid resource was not considered defined")
-        assert(! scope.function_defined([nope]), "invalid resource was considered defined")
-    end
-
-    def test_search
-        parser = mkparser
-        scope = mkscope(:parser => parser)
-        
-        fun = parser.newdefine("yay::ness")
-        foo = parser.newdefine("foo::bar")
-
-        search = Puppet::Parser::Functions.function(:search)
-        assert_nothing_raised do
-            scope.function_search(["foo", "yay"])
-        end
-
-        ffun = ffoo = nil
-        assert_nothing_raised("Search path change did not work") do
-            ffun = scope.finddefine("ness")
-            ffoo = scope.finddefine('bar')
-        end
-
-        assert(ffun, "Could not find definition in 'fun' namespace")
-        assert(ffoo, "Could not find definition in 'foo' namespace")
-    end
-
-    def test_include
-        scope = mkscope
-        parser = scope.compiler.parser
-
-        include = Puppet::Parser::Functions.function(:include)
-
-        assert_raise(Puppet::ParseError, "did not throw error on missing class") do
-            scope.function_include("nosuchclass")
-        end
-
-        parser.newclass("myclass")
-
-        scope.compiler.expects(:evaluate_classes).with(%w{myclass otherclass}, scope, false).returns(%w{myclass otherclass})
-
-        assert_nothing_raised do
-            scope.function_include(["myclass", "otherclass"])
-        end
-    end
-
-    def test_file
-        parser = mkparser
-        scope = mkscope(:parser => parser)
-
-        file = Puppet::Parser::Functions.function(:file)
-
-        file1 = tempfile
-        file2 = tempfile
-        file3 = tempfile
-
-        File.open(file2, "w") { |f| f.puts "yaytest" }
-
-        val = nil
-        assert_nothing_raised("Failed to call file with one arg") do
-            val = scope.function_file([file2])
-        end
-
-        assert_equal("yaytest\n", val, "file() failed")
-
-        assert_nothing_raised("Failed to call file with two args") do
-            val = scope.function_file([file1, file2])
-        end
-
-        assert_equal("yaytest\n", val, "file() failed")
-
-        assert_raise(Puppet::ParseError, "did not fail when files are missing") do
-            val = scope.function_file([file1, file3])
-        end
-    end
-
-    def test_generate
-        command = tempfile
-        sh = %x{which sh}
-        File.open(command, "w") do |f|
-            f.puts %{#!#{sh}
-            if [ -n "$1" ]; then
-                echo "yay-$1"
-            else
-                echo yay
-            fi
-            }
-        end
-        File.chmod(0755, command)
-        assert_equal("yay\n", %x{#{command}}, "command did not work")
-        assert_equal("yay-foo\n", %x{#{command} foo}, "command did not work")
-
-        generate = Puppet::Parser::Functions.function(:generate)
-
-        scope = mkscope
-        parser = scope.compiler.parser
-
-        val = nil
-        assert_nothing_raised("Could not call generator with no args") do
-            val = scope.function_generate([command])
-        end
-        assert_equal("yay\n", val, "generator returned wrong results")
-
-        assert_nothing_raised("Could not call generator with args") do
-            val = scope.function_generate([command, "foo"])
-        end
-        assert_equal("yay-foo\n", val, "generator returned wrong results")
-
-        assert_raise(Puppet::ParseError, "Did not fail with an unqualified path") do
-            val = scope.function_generate([File.basename(command), "foo"])
-        end
-
-        assert_raise(Puppet::ParseError, "Did not fail when command failed") do
-            val = scope.function_generate([%x{which touch}.chomp, "/this/dir/does/not/exist"])
-        end
-
-        fake = File.join(File.dirname(command), "..")
-        dir = File.dirname(command)
-        dirname = File.basename(dir)
-        bad = File.join(dir, "..", dirname, File.basename(command))
-        assert_raise(Puppet::ParseError, "Did not fail when command failed") do
-            val = scope.function_generate([bad])
-        end
-    end
-end
-
diff --git a/test/language/parser.rb b/test/language/parser.rb
deleted file mode 100755
index 2453bdf..0000000
--- a/test/language/parser.rb
+++ /dev/null
@@ -1,1233 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'mocha'
-require 'puppet'
-require 'puppet/parser/parser'
-require 'puppettest'
-require 'puppettest/support/utils'
-
-class TestParser < Test::Unit::TestCase
-    include PuppetTest
-    include PuppetTest::ParserTesting
-    include PuppetTest::Support::Utils
-    def setup
-        super
-        Puppet[:parseonly] = true
-        #@lexer = Puppet::Parser::Lexer.new()
-    end
-
-    def test_each_file
-        textfiles { |file|
-            parser = mkparser
-            Puppet.debug("parsing %s" % file) if __FILE__ == $0
-            assert_nothing_raised() {
-                parser.file = file
-                parser.parse
-            }
-
-            Puppet::Type.eachtype { |type|
-                type.each { |obj|
-                    assert(obj.file, "File is not set on %s" % obj.ref)
-                    assert(obj.name, "Name is not set on %s" % obj.ref)
-                    assert(obj.line, "Line is not set on %s" % obj.ref)
-                }
-            }
-            Puppet::Type.allclear
-        }
-    end
-
-    def test_failers
-        failers { |file|
-            parser = mkparser
-            Puppet.debug("parsing failer %s" % file) if __FILE__ == $0
-            assert_raise(Puppet::ParseError, "Did not fail while parsing %s" % file) {
-                parser.file = file
-                ast = parser.parse
-                config = mkcompiler(parser)
-                config.compile
-                #ast.classes[""].evaluate config.topscope
-            }
-            Puppet::Type.allclear
-        }
-    end
-
-    def test_arrayrvalues
-        parser = mkparser
-        ret = nil
-        file = tempfile()
-        assert_nothing_raised {
-            parser.string = "file { \"#{file}\": mode => [755, 640] }"
-        }
-
-        assert_nothing_raised {
-            ret = parser.parse
-        }
-    end
-
-    def test_arrayrvalueswithtrailingcomma
-        parser = mkparser
-        ret = nil
-        file = tempfile()
-        assert_nothing_raised {
-            parser.string = "file { \"#{file}\": mode => [755, 640,] }"
-        }
-
-        assert_nothing_raised {
-            ret = parser.parse
-        }
-    end
-
-    def mkmanifest(file)
-        name = File.join(tmpdir, "file%s" % rand(100))
-        @@tmpfiles << name
-
-        File.open(file, "w") { |f|
-            f.puts "file { \"%s\": ensure => file, mode => 755 }\n" %
-               name
-        }
-    end
-
-    def test_importglobbing
-        basedir = File.join(tmpdir(), "importesting")
-        @@tmpfiles << basedir
-        Dir.mkdir(basedir)
-
-        subdir = "subdir"
-        Dir.mkdir(File.join(basedir, subdir))
-        manifest = File.join(basedir, "manifest")
-        File.open(manifest, "w") { |f|
-            f.puts "import \"%s/*\"" % subdir
-        }
-
-        4.times { |i|
-            path = File.join(basedir, subdir, "subfile%s" % i)
-            mkmanifest(path)
-        }
-
-        assert_nothing_raised("Could not parse multiple files") {
-            parser = mkparser
-            parser.file = manifest
-            parser.parse
-        }
-    end
-
-    def test_nonexistent_import
-        basedir = File.join(tmpdir(), "importesting")
-        @@tmpfiles << basedir
-        Dir.mkdir(basedir)
-        manifest = File.join(basedir, "manifest")
-        File.open(manifest, "w") do |f|
-            f.puts "import \" no such file \""
-        end
-        assert_raise(Puppet::ParseError) {
-            parser = mkparser
-            parser.file = manifest
-            parser.parse
-        }
-    end
-
-    def test_trailingcomma
-        path = tempfile()
-        str = %{file { "#{path}": ensure => file, }
-        }
-
-        parser = mkparser
-        parser.string = str
-
-        assert_nothing_raised("Could not parse trailing comma") {
-            parser.parse
-        }
-    end
-
-    def test_importedclasses
-        imported = tempfile()
-        importer = tempfile()
-
-        made = tempfile()
-
-        File.open(imported, "w") do |f|
-            f.puts %{class foo { file { "#{made}": ensure => file }}}
-        end
-
-        File.open(importer, "w") do |f|
-            f.puts %{import "#{imported}"\ninclude foo}
-        end
-
-        parser = mkparser
-        parser.file = importer
-
-        # Make sure it parses fine
-        assert_nothing_raised {
-            parser.parse
-        }
-
-        # Now make sure it actually does the work
-        assert_creates(importer, made)
-    end
-
-    # Make sure fully qualified and unqualified files can be imported
-    def test_fqfilesandlocalfiles
-        dir = tempfile()
-        Dir.mkdir(dir)
-        importer = File.join(dir, "site.pp")
-        fullfile = File.join(dir, "full.pp")
-        localfile = File.join(dir, "local.pp")
-
-        files = []
-
-        File.open(importer, "w") do |f|
-            f.puts %{import "#{fullfile}"\ninclude full\nimport "local.pp"\ninclude local}
-        end
-
-        fullmaker = tempfile()
-        files << fullmaker
-
-        File.open(fullfile, "w") do |f|
-            f.puts %{class full { file { "#{fullmaker}": ensure => file }}}
-        end
-
-        localmaker = tempfile()
-        files << localmaker
-
-        File.open(localfile, "w") do |f|
-            f.puts %{class local { file { "#{localmaker}": ensure => file }}}
-        end
-
-        parser = mkparser
-        parser.file = importer
-
-        # Make sure it parses
-        assert_nothing_raised {
-            parser.parse
-        }
-
-        # Now make sure it actually does the work
-        assert_creates(importer, *files)
-    end
-
-    # Make sure the parser adds '.pp' when necessary
-    def test_addingpp
-        dir = tempfile()
-        Dir.mkdir(dir)
-        importer = File.join(dir, "site.pp")
-        localfile = File.join(dir, "local.pp")
-
-        files = []
-
-        File.open(importer, "w") do |f|
-            f.puts %{import "local"\ninclude local}
-        end
-
-        file = tempfile()
-        files << file
-
-        File.open(localfile, "w") do |f|
-            f.puts %{class local { file { "#{file}": ensure => file }}}
-        end
-
-        parser = mkparser
-        parser.file = importer
-
-        assert_nothing_raised {
-            parser.parse
-        }
-    end
-
-    # Make sure that file importing changes file relative names.
-    def test_changingrelativenames
-        dir = tempfile()
-        Dir.mkdir(dir)
-        Dir.mkdir(File.join(dir, "subdir"))
-        top = File.join(dir, "site.pp")
-        subone = File.join(dir, "subdir/subone")
-        subtwo = File.join(dir, "subdir/subtwo")
-
-        files = []
-        file = tempfile()
-        files << file
-
-        File.open(subone + ".pp", "w") do |f|
-            f.puts %{class one { file { "#{file}": ensure => file }}}
-        end
-
-        otherfile = tempfile()
-        files << otherfile
-        File.open(subtwo + ".pp", "w") do |f|
-            f.puts %{import "subone"\n class two inherits one {
-                file { "#{otherfile}": ensure => file }
-            }}
-        end
-
-        File.open(top, "w") do |f|
-            f.puts %{import "subdir/subtwo"}
-        end
-
-        parser = mkparser
-        parser.file = top
-
-        assert_nothing_raised {
-            parser.parse
-        }
-    end
-
-    # Defaults are purely syntactical, so it doesn't make sense to be able to
-    # collect them.
-    def test_uncollectabledefaults
-        string = "@Port { protocols => tcp }"
-
-        assert_raise(Puppet::ParseError) {
-            mkparser.parse(string)
-        }
-    end
-
-    # Verify that we can parse collections
-    def test_collecting
-        text = "Port <| |>"
-        parser = mkparser
-        parser.string = text
-
-        ret = nil
-        assert_nothing_raised {
-            ret = parser.parse
-        }
-
-        ret.classes[""].code.each do |obj|
-            assert_instance_of(AST::Collection, obj)
-        end
-    end
-
-    def test_emptyfile
-        file = tempfile()
-        File.open(file, "w") do |f|
-            f.puts %{}
-        end
-        parser = mkparser
-        parser.file = file
-        assert_nothing_raised {
-            parser.parse
-        }
-    end
-
-    def test_multiple_nodes_named
-        file = tempfile()
-        other = tempfile()
-
-        File.open(file, "w") do |f|
-            f.puts %{
-node nodeA, nodeB {
-    file { "#{other}": ensure => file }
-    
-}
-}
-        end
-
-        parser = mkparser
-        parser.file = file
-        ast = nil
-        assert_nothing_raised {
-            ast = parser.parse
-        }
-    end
-
-    def test_emptyarrays
-        str = %{$var = []\n}
-
-        parser = mkparser
-        parser.string = str
-
-        # Make sure it parses fine
-        assert_nothing_raised {
-            parser.parse
-        }
-    end
-
-    # Make sure function names aren't reserved words.
-    def test_functionnamecollision
-        str = %{tag yayness
-tag(rahness)
-
-file { "/tmp/yayness":
-    tag => "rahness",
-    ensure => exists
-}
-}
-        parser = mkparser
-        parser.string = str
-
-        # Make sure it parses fine
-        assert_nothing_raised {
-            parser.parse
-        }
-    end
-
-    def test_metaparams_in_definition_prototypes
-        parser = mkparser
-
-
-        assert_raise(Puppet::ParseError) {
-            parser.parse %{define mydef($schedule) {}}
-        }
-
-        assert_nothing_raised {
-            parser.parse %{define adef($schedule = false) {}}
-            parser.parse %{define mydef($schedule = daily) {}}
-        }
-    end
-
-    def test_parsingif
-        parser = mkparser
-        exec = proc do |val|
-            %{exec { "/bin/echo #{val}": logoutput => true }}
-        end
-        str1 = %{if true { #{exec.call("true")} }}
-        ret = nil
-        assert_nothing_raised {
-            ret = parser.parse(str1).classes[""].code[0]
-        }
-        assert_instance_of(Puppet::Parser::AST::IfStatement, ret)
-        parser = mkparser
-        str2 = %{if true { #{exec.call("true")} } else { #{exec.call("false")} }}
-        assert_nothing_raised {
-            ret = parser.parse(str2).classes[""].code[0]
-        }
-        assert_instance_of(Puppet::Parser::AST::IfStatement, ret)
-        assert_instance_of(Puppet::Parser::AST::Else, ret.else)
-    end
-
-    def test_hostclass
-        parser = mkparser
-
-        assert_nothing_raised {
-            parser.parse %{class myclass { class other {} }}
-        }
-        assert(parser.classes["myclass"], "Could not find myclass")
-        assert(parser.classes["myclass::other"], "Could not find myclass::other")
-
-        assert_nothing_raised {
-            parser.parse "class base {}
-            class container {
-                class deep::sub inherits base {}
-            }"
-        }
-        sub = parser.classes["container::deep::sub"]
-        assert(sub, "Could not find sub")
-        
-        # Now try it with a parent class being a fq class
-        assert_nothing_raised {
-            parser.parse "class container::one inherits container::deep::sub {}"
-        }
-        sub = parser.classes["container::one"]
-        assert(sub, "Could not find one")
-        assert_equal("container::deep::sub", sub.parentclass)
-        
-        # Finally, try including a qualified class
-        assert_nothing_raised("Could not include fully qualified class") {
-            parser.parse "include container::deep::sub"
-        }
-    end
-
-    def test_topnamespace
-        parser = mkparser
-
-        # Make sure we put the top-level code into a class called "" in
-        # the "" namespace
-        assert_nothing_raised do
-            out = parser.parse ""
-
-            assert_instance_of(Puppet::Parser::Parser::ASTSet, out)
-            assert_nil(parser.classes[""], "Got a 'main' class when we had no code")
-        end
-
-        # Now try something a touch more complicated
-        parser.initvars
-        assert_nothing_raised do
-            out = parser.parse "Exec { path => '/usr/bin:/usr/sbin' }"
-            assert_instance_of(Puppet::Parser::Parser::ASTSet, out)
-            assert_equal("", parser.classes[""].classname)
-            assert_equal("", parser.classes[""].namespace)
-        end
-    end
-
-    # Make sure virtual and exported resources work appropriately.
-    def test_virtualresources
-        tests = [:virtual]
-        if Puppet.features.rails?
-            Puppet[:storeconfigs] = true
-            tests << :exported
-        end
-
-        tests.each do |form|
-            parser = mkparser
-
-            if form == :virtual
-                at = "@"
-            else
-                at = "@@"
-            end
-
-            check = proc do |res, msg|
-                if res.is_a?(Puppet::Parser::Resource)
-                    txt = res.ref
-                else
-                    txt = res.class
-                end
-                # Real resources get marked virtual when exported
-                if form == :virtual or res.is_a?(Puppet::Parser::Resource)
-                    assert(res.virtual, "#{msg} #{at}#{txt} is not virtual")
-                end
-                if form == :virtual
-                    assert(! res.exported, "#{msg} #{at}#{txt} is exported")
-                else
-                    assert(res.exported, "#{msg} #{at}#{txt} is not exported")
-                end
-            end
-
-            ret = nil
-            assert_nothing_raised do
-                ret = parser.parse("#{at}file { '/tmp/testing': owner => root }")
-            end
-
-            assert_instance_of(AST::ASTArray, ret.classes[""].code)
-            resdef = ret.classes[""].code[0]
-            assert_instance_of(AST::Resource, resdef)
-            assert_equal("/tmp/testing", resdef.title.value)
-            # We always get an astarray back, so...
-            check.call(resdef, "simple resource")
-
-            # Now let's try it with multiple resources in the same spec
-            assert_nothing_raised do
-                ret = parser.parse("#{at}file { ['/tmp/1', '/tmp/2']: owner => root }")
-            end
-
-            ret.classes[""].each do |res|
-                assert_instance_of(AST::Resource, res)
-                check.call(res, "multiresource")
-            end
-        end
-    end
-
-    def test_collections
-        tests = [:virtual]
-        if Puppet.features.rails?
-            Puppet[:storeconfigs] = true
-            tests << :exported
-        end
-
-        tests.each do |form|
-            parser = mkparser
-
-            if form == :virtual
-                arrow = "<||>"
-            else
-                arrow = "<<||>>"
-            end
-
-            ret = nil
-            assert_nothing_raised do
-                ret = parser.parse("File #{arrow}")
-            end
-
-            coll = ret.classes[""].code[0]
-            assert_instance_of(AST::Collection, coll)
-            assert_equal(form, coll.form)
-        end
-    end
-
-    def test_collectionexpressions
-        %w{== !=}.each do |oper|
-            str = "File <| title #{oper} '/tmp/testing' |>"
-
-            parser = mkparser
-
-            res = nil
-            assert_nothing_raised do
-                res = parser.parse(str).classes[""].code[0]
-            end
-
-            assert_instance_of(AST::Collection, res)
-
-            query = res.query
-            assert_instance_of(AST::CollExpr, query)
-
-            assert_equal(:virtual, query.form)
-            assert_equal("title", query.test1.value)
-            assert_equal("/tmp/testing", query.test2.value)
-            assert_equal(oper, query.oper)
-        end
-    end
-
-    def test_collectionstatements
-        %w{and or}.each do |joiner|
-            str = "File <| title == '/tmp/testing' #{joiner} owner == root |>"
-
-            parser = mkparser
-
-            res = nil
-            assert_nothing_raised do
-                res = parser.parse(str).classes[""].code[0]
-            end
-
-            assert_instance_of(AST::Collection, res)
-
-            query = res.query
-            assert_instance_of(AST::CollExpr, query)
-
-            assert_equal(joiner, query.oper)
-            assert_instance_of(AST::CollExpr, query.test1)
-            assert_instance_of(AST::CollExpr, query.test2)
-        end
-    end
-
-    def test_collectionstatements_with_parens
-        [
-            "(title == '/tmp/testing' and owner == root) or owner == wheel",
-            "(title == '/tmp/testing')"
-        ].each do |test|
-            str = "File <| #{test} |>"
-            parser = mkparser
-
-            res = nil
-            assert_nothing_raised("Could not parse '#{test}'") do
-                res = parser.parse(str).classes[""].code[0]
-            end
-
-            assert_instance_of(AST::Collection, res)
-
-            query = res.query
-            assert_instance_of(AST::CollExpr, query)
-
-            #assert_equal(joiner, query.oper)
-            #assert_instance_of(AST::CollExpr, query.test1)
-            #assert_instance_of(AST::CollExpr, query.test2)
-        end
-    end
-
-    # We've had problems with files other than site.pp importing into main.
-    def test_importing_into_main
-        top = tempfile()
-        other = tempfile()
-        File.open(top, "w") do |f|
-            f.puts "import '#{other}'"
-        end
-
-        file = tempfile()
-        File.open(other, "w") do |f|
-            f.puts "file { '#{file}': ensure => present }"
-        end
-
-        Puppet[:manifest] = top
-        interp = Puppet::Parser::Interpreter.new
-
-        code = nil
-        assert_nothing_raised do
-            code = interp.compile(mknode).extract.flatten
-        end
-        assert(code.length == 1, "Did not get the file")
-        assert_instance_of(Puppet::TransObject, code[0])
-    end
-    
-    def test_fully_qualified_definitions
-        parser = mkparser
-
-        assert_nothing_raised("Could not parse fully-qualified definition") {
-            parser.parse %{define one::two { }}
-        }
-        assert(parser.definitions["one::two"], "Could not find one::two with no namespace")
-        
-        # Now try using the definition
-        assert_nothing_raised("Could not parse fully-qualified definition usage") {
-            parser.parse %{one::two { yayness: }}
-        }
-    end
-
-    # #524
-    def test_functions_with_no_arguments
-        parser = mkparser
-        assert_nothing_raised("Could not parse statement function with no args") {
-            parser.parse %{tag()}
-        }
-        assert_nothing_raised("Could not parse rvalue function with no args") {
-            parser.parse %{$testing = template()}
-        }
-    end
-
-    # #774
-    def test_fully_qualified_collection_statement
-        parser = mkparser
-        assert_nothing_raised("Could not parse fully qualified collection statement") {
-            parser.parse %{Foo::Bar <||>}
-        }
-    end
-
-    def test_module_import
-        basedir = File.join(tmpdir(), "module-import")
-        @@tmpfiles << basedir
-        Dir.mkdir(basedir)
-        modfiles = [ "init.pp", "mani1.pp", "mani2.pp",
-                     "sub/smani1.pp", "sub/smani2.pp" ]
-
-        modpath = File.join(basedir, "modules")
-        Puppet[:modulepath] = modpath
-
-        modname = "amod"
-        manipath = File::join(modpath, modname, Puppet::Module::MANIFESTS)
-        FileUtils::mkdir_p(File::join(manipath, "sub"))
-        targets = []
-        modfiles.each do |fname|
-            target = File::join(basedir, File::basename(fname, '.pp'))
-            targets << target
-            txt = %[ file { '#{target}': content => "#{fname}" } ]
-            if fname == "init.pp"
-                txt = %[import 'mani1' \nimport '#{modname}/mani2'\nimport '#{modname}/sub/*.pp'\n ] + txt
-            end
-            File::open(File::join(manipath, fname), "w") do |f|
-                f.puts txt
-            end
-        end
-
-        manifest_texts = [ "import '#{modname}'",
-                           "import '#{modname}/init'",
-                           "import '#{modname}/init.pp'" ]
-
-        manifest = File.join(modpath, "manifest.pp")
-        manifest_texts.each do |txt|
-            Puppet::Type.allclear
-            File.open(manifest, "w") { |f| f.puts txt }
-
-            assert_nothing_raised {
-                parser = mkparser
-                parser.file = manifest
-                parser.parse
-            }
-            assert_creates(manifest, *targets)
-        end
-    end
-
-    # #544
-    def test_ignoreimports
-        parser = mkparser
-
-        assert(! Puppet[:ignoreimport], ":ignoreimport defaulted to true")
-        assert_raise(Puppet::ParseError, "Did not fail on missing import") do
-            parser.parse("import 'nosuchfile'")
-        end
-        assert_nothing_raised("could not set :ignoreimport") do
-            Puppet[:ignoreimport] = true
-        end
-        assert_nothing_raised("Parser did not follow :ignoreimports") do
-            parser.parse("import 'nosuchfile'")
-        end
-    end
-
-    def test_multiple_imports_on_one_line
-        one = tempfile
-        two = tempfile
-        base = tempfile
-        File.open(one, "w") { |f| f.puts "$var = value" }
-        File.open(two, "w") { |f| f.puts "$var = value" }
-        File.open(base, "w") { |f| f.puts "import '#{one}', '#{two}'" }
-
-        parser = mkparser
-        parser.file = base
-
-        # Importing is logged at debug time.
-        Puppet::Util::Log.level = :debug
-        assert_nothing_raised("Parser could not import multiple files at once") do
-            parser.parse
-        end
-
-        [one, two].each do |file|
-            assert(@logs.detect { |l| l.message =~ /importing '#{file}'/},
-                "did not import %s" % file)
-        end
-    end
-
-    def test_cannot_assign_qualified_variables
-        parser = mkparser
-        assert_raise(Puppet::ParseError, "successfully assigned a qualified variable") do
-            parser.parse("$one::two = yay")
-        end
-    end
-
-    # #588
-    def test_globbing_with_directories
-        dir = tempfile
-        Dir.mkdir(dir)
-        subdir = File.join(dir, "subdir")
-        Dir.mkdir(subdir)
-        file = File.join(dir, "file.pp")
-        maker = tempfile
-        File.open(file, "w") { |f| f.puts "file { '#{maker}': ensure => file }" }
-
-        parser = mkparser
-        assert_nothing_raised("Globbing failed when it matched a directory") do
-            parser.import("%s/*" % dir)
-        end
-    end
-
-    # #629 - undef keyword
-    def test_undef
-        parser = mkparser
-        result = nil
-        assert_nothing_raised("Could not parse assignment to undef") {
-            result = parser.parse %{$variable = undef}
-        }
-
-        main = result.classes[""].code
-        children = main.children
-        assert_instance_of(AST::VarDef, main.children[0])
-        assert_instance_of(AST::Undef, main.children[0].value)
-    end
-
-    # Prompted by #729 -- parsing should not modify the interpreter.
-    def test_parse
-        parser = mkparser
-
-        str = "file { '/tmp/yay': ensure => file }\nclass yay {}\nnode foo {}\ndefine bar {}\n" 
-        result = nil
-        assert_nothing_raised("Could not parse") do
-            result = parser.parse(str)
-        end
-        assert_instance_of(Puppet::Parser::Parser::ASTSet, result, "Did not get a ASTSet back from parsing")
-
-        assert_instance_of(AST::HostClass, result.classes["yay"], "Did not create 'yay' class")
-        assert_instance_of(AST::HostClass, result.classes[""], "Did not create main class")
-        assert_instance_of(AST::Definition, result.definitions["bar"], "Did not create 'bar' definition")
-        assert_instance_of(AST::Node, result.nodes["foo"], "Did not create 'foo' node")
-    end
-
-    # Make sure our node gets added to the node table.
-    def test_newnode
-        parser = mkparser
-
-        # First just try calling it directly
-        assert_nothing_raised {
-            parser.newnode("mynode", :code => :yay)
-        }
-
-        assert_equal(:yay, parser.nodes["mynode"].code)
-
-        # Now make sure that trying to redefine it throws an error.
-        assert_raise(Puppet::ParseError) {
-            parser.newnode("mynode", {})
-        }
-
-        # Now try one with no code
-        assert_nothing_raised {
-            parser.newnode("simplenode", :parent => :foo)
-        }
-
-        # Now define the parent node
-        parser.newnode(:foo)
-
-        # And make sure we get things back correctly
-        assert_equal(:foo, parser.nodes["simplenode"].parentclass)
-        assert_nil(parser.nodes["simplenode"].code)
-
-        # Now make sure that trying to redefine it throws an error.
-        assert_raise(Puppet::ParseError) {
-            parser.newnode("mynode", {})
-        }
-
-        # Test multiple names
-        names = ["one", "two", "three"]
-        assert_nothing_raised {
-            parser.newnode(names, {:code => :yay, :parent => :foo})
-        }
-
-        names.each do |name|
-            assert_equal(:yay, parser.nodes[name].code)
-            assert_equal(:foo, parser.nodes[name].parentclass)
-            # Now make sure that trying to redefine it throws an error.
-            assert_raise(Puppet::ParseError) {
-                parser.newnode(name, {})
-            }
-        end
-    end
-
-    def test_newdefine
-        parser = mkparser
-
-        assert_nothing_raised {
-            parser.newdefine("mydefine", :code => :yay,
-                :arguments => ["a", stringobj("b")])
-        }
-
-        mydefine = parser.definitions["mydefine"]
-        assert(mydefine, "Could not find definition")
-        assert_equal("", mydefine.namespace)
-        assert_equal("mydefine", mydefine.classname)
-
-        assert_raise(Puppet::ParseError) do
-            parser.newdefine("mydefine", :code => :yay,
-                :arguments => ["a", stringobj("b")])
-        end
-
-        # Now define the same thing in a different scope
-        assert_nothing_raised {
-            parser.newdefine("other::mydefine", :code => :other,
-                :arguments => ["a", stringobj("b")])
-        }
-        other = parser.definitions["other::mydefine"]
-        assert(other, "Could not find definition")
-        assert(parser.definitions["other::mydefine"],
-            "Could not find other::mydefine")
-        assert_equal(:other, other.code)
-        assert_equal("other", other.namespace)
-        assert_equal("other::mydefine", other.classname)
-    end
-
-    def test_newclass
-        scope = mkscope
-        parser = scope.compiler.parser
-
-        mkcode = proc do |ary|
-            classes = ary.collect do |string|
-                AST::FlatString.new(:value => string)
-            end
-            AST::ASTArray.new(:children => classes)
-        end
-
-
-        # First make sure that code is being appended
-        code = mkcode.call(%w{original code})
-
-        klass = nil
-        assert_nothing_raised {
-            klass = parser.newclass("myclass", :code => code)
-        }
-
-        assert(klass, "Did not return class")
-
-        assert(parser.classes["myclass"], "Could not find definition")
-        assert_equal("myclass", parser.classes["myclass"].classname)
-        assert_equal(%w{original code},
-             parser.classes["myclass"].code.evaluate(scope))
-
-        # Newclass behaves differently than the others -- it just appends
-        # the code to the existing class.
-        code = mkcode.call(%w{something new})
-        assert_nothing_raised do
-            klass = parser.newclass("myclass", :code => code)
-        end
-        assert(klass, "Did not return class when appending")
-        assert_equal(%w{original code something new},
-            parser.classes["myclass"].code.evaluate(scope))
-
-        # Now create the same class name in a different scope
-        assert_nothing_raised {
-            klass = parser.newclass("other::myclass",
-                            :code => mkcode.call(%w{something diff}))
-        }
-        assert(klass, "Did not return class")
-        other = parser.classes["other::myclass"]
-        assert(other, "Could not find class")
-        assert_equal("other::myclass", other.classname)
-        assert_equal("other::myclass", other.namespace)
-        assert_equal(%w{something diff},
-             other.code.evaluate(scope))
-
-        # Make sure newclass deals correctly with nodes with no code
-        klass = parser.newclass("nocode")
-        assert(klass, "Did not return class")
-
-        assert_nothing_raised do
-            klass = parser.newclass("nocode", :code => mkcode.call(%w{yay test}))
-        end
-        assert(klass, "Did not return class with no code")
-        assert_equal(%w{yay test},
-            parser.classes["nocode"].code.evaluate(scope))
-
-        # Then try merging something into nothing
-        parser.newclass("nocode2", :code => mkcode.call(%w{foo test}))
-        assert(klass, "Did not return class with no code")
-
-        assert_nothing_raised do
-            klass = parser.newclass("nocode2")
-        end
-        assert(klass, "Did not return class with no code")
-        assert_equal(%w{foo test},
-            parser.classes["nocode2"].code.evaluate(scope))
-
-        # And lastly, nothing and nothing
-        klass = parser.newclass("nocode3")
-        assert(klass, "Did not return class with no code")
-
-        assert_nothing_raised do
-            klass = parser.newclass("nocode3")
-        end
-        assert(klass, "Did not return class with no code")
-        assert_nil(parser.classes["nocode3"].code)
-    end
-
-    # Make sure you can't have classes and defines with the same name in the
-    # same scope.
-    def test_classes_beat_defines
-        parser = mkparser
-
-        assert_nothing_raised {
-            parser.newclass("yay::funtest")
-        }
-
-        assert_raise(Puppet::ParseError) do
-            parser.newdefine("yay::funtest")
-        end
-
-        assert_nothing_raised {
-            parser.newdefine("yay::yaytest")
-        }
-
-        assert_raise(Puppet::ParseError) do
-            parser.newclass("yay::yaytest")
-        end
-    end
-
-    def test_namesplit
-        parser = mkparser
-
-        assert_nothing_raised do
-            {"base::sub" => %w{base sub},
-                "main" => ["", "main"],
-                "one::two::three::four" => ["one::two::three", "four"],
-            }.each do |name, ary|
-                result = parser.namesplit(name)
-                assert_equal(ary, result, "%s split to %s" % [name, result])
-            end
-        end
-    end
-    
-    # Now make sure we get appropriate behaviour with parent class conflicts.
-    def test_newclass_parentage
-        parser = mkparser
-        parser.newclass("base1")
-        parser.newclass("one::two::three")
-
-        # First create it with no parentclass.
-        assert_nothing_raised {
-            parser.newclass("sub")
-        }
-        assert(parser.classes["sub"], "Could not find definition")
-        assert_nil(parser.classes["sub"].parentclass)
-
-        # Make sure we can't set the parent class to ourself.
-        assert_raise(Puppet::ParseError) {
-            parser.newclass("sub", :parent => "sub")
-        }
-
-        # Now create another one, with a parentclass.
-        assert_nothing_raised {
-            parser.newclass("sub", :parent => "base1")
-        }
-
-        # Make sure we get the right parent class, and make sure it's not an object.
-        assert_equal("base1",
-                    parser.classes["sub"].parentclass)
-
-        # Now make sure we get a failure if we try to conflict.
-        assert_raise(Puppet::ParseError) {
-            parser.newclass("sub", :parent => "one::two::three")
-        }
-
-        # Make sure that failure didn't screw us up in any way.
-        assert_equal("base1",
-                    parser.classes["sub"].parentclass)
-        # But make sure we can create a class with a fq parent
-        assert_nothing_raised {
-            parser.newclass("another", :parent => "one::two::three")
-        }
-        assert_equal("one::two::three",
-                    parser.classes["another"].parentclass)
-
-    end
-
-    def test_fqfind
-        parser = mkparser
-
-        table = {}
-        # Define a bunch of things.
-        %w{a c a::b a::b::c a::c a::b::c::d a::b::c::d::e::f c::d}.each do |string|
-            table[string] = string
-        end
-
-        check = proc do |namespace, hash|
-            hash.each do |thing, result|
-                assert_equal(result, parser.fqfind(namespace, thing, table),
-                            "Could not find %s in %s" % [thing, namespace])
-            end
-        end
-
-        # Now let's do some test lookups.
-
-        # First do something really simple
-        check.call "a", "b" => "a::b", "b::c" => "a::b::c", "d" => nil, "::c" => "c"
-
-        check.call "a::b", "c" => "a::b::c", "b" => "a::b", "a" => "a"
-
-        check.call "a::b::c::d::e", "c" => "a::b::c", "::c" => "c",
-            "c::d" => "a::b::c::d", "::c::d" => "c::d"
-
-        check.call "", "a" => "a", "a::c" => "a::c"
-    end
-
-    # Setup a module.
-    def mk_module(name, files = {})
-        mdir = File.join(@dir, name)
-        mandir = File.join(mdir, "manifests")
-        FileUtils.mkdir_p mandir
-
-        if defs = files[:define]
-            files.delete(:define)
-        end
-        Dir.chdir(mandir) do
-            files.each do |file, classes|
-                File.open("%s.pp" % file, "w") do |f|
-                    classes.each { |klass|
-                        if defs
-                            f.puts "define %s {}" % klass
-                        else
-                            f.puts "class %s {}" % klass
-                        end
-                    }
-                end
-            end
-        end
-    end
-
-    # #596 - make sure classes and definitions load automatically if they're in modules, so we don't have to manually load each one.
-    def test_module_autoloading
-        @dir = tempfile
-        Puppet[:modulepath] = @dir
-
-        FileUtils.mkdir_p @dir
-
-        parser = mkparser
-
-        # Make sure we fail like normal for actually missing classes
-        assert_nil(parser.findclass("", "nosuchclass"), "Did not return nil on missing classes")
-
-        # test the simple case -- the module class itself
-        name = "simple"
-        mk_module(name, :init => [name])
-
-        # Try to load the module automatically now
-        klass = parser.findclass("", name)
-        assert_instance_of(AST::HostClass, klass, "Did not autoload class from module init file")
-        assert_equal(name, klass.classname, "Incorrect class was returned")
-
-        # Try loading the simple module when we're in something other than the base namespace.
-        parser = mkparser
-        klass = parser.findclass("something::else", name)
-        assert_instance_of(AST::HostClass, klass, "Did not autoload class from module init file")
-        assert_equal(name, klass.classname, "Incorrect class was returned")
-
-        # Now try it with a definition as the base file
-        name = "simpdef"
-        mk_module(name, :define => true, :init => [name])
-
-        klass = parser.finddefine("", name)
-        assert_instance_of(AST::Definition, klass, "Did not autoload class from module init file")
-        assert_equal(name, klass.classname, "Incorrect class was returned")
-
-        # Now try it with namespace classes where both classes are in the init file
-        parser = mkparser
-        modname = "both"
-        name = "sub"
-        mk_module(modname, :init => %w{both both::sub})
-
-        # First try it with a namespace
-        klass = parser.findclass("both", name)
-        assert_instance_of(AST::HostClass, klass, "Did not autoload sub class from module init file with a namespace")
-        assert_equal("both::sub", klass.classname, "Incorrect class was returned")
-
-        # Now try it using the fully qualified name
-        parser = mkparser
-        klass = parser.findclass("", "both::sub")
-        assert_instance_of(AST::HostClass, klass, "Did not autoload sub class from module init file with no namespace")
-        assert_equal("both::sub", klass.classname, "Incorrect class was returned")
-
-
-        # Now try it with the class in a different file
-        parser = mkparser
-        modname = "separate"
-        name = "sub"
-        mk_module(modname, :init => %w{separate}, :sub => %w{separate::sub})
-
-        # First try it with a namespace
-        klass = parser.findclass("separate", name)
-        assert_instance_of(AST::HostClass, klass, "Did not autoload sub class from separate file with a namespace")
-        assert_equal("separate::sub", klass.classname, "Incorrect class was returned")
-
-        # Now try it using the fully qualified name
-        parser = mkparser
-        klass = parser.findclass("", "separate::sub")
-        assert_instance_of(AST::HostClass, klass, "Did not autoload sub class from separate file with no namespace")
-        assert_equal("separate::sub", klass.classname, "Incorrect class was returned")
-
-        # Now make sure we don't get a failure when there's no module file
-        parser = mkparser
-        modname = "alone"
-        name = "sub"
-        mk_module(modname, :sub => %w{alone::sub})
-
-        # First try it with a namespace
-        assert_nothing_raised("Could not autoload file when module file is missing") do
-            klass = parser.findclass("alone", name)
-        end
-        assert_instance_of(AST::HostClass, klass, "Did not autoload sub class from alone file with a namespace")
-        assert_equal("alone::sub", klass.classname, "Incorrect class was returned")
-
-        # Now try it using the fully qualified name
-        parser = mkparser
-        klass = parser.findclass("", "alone::sub")
-        assert_instance_of(AST::HostClass, klass, "Did not autoload sub class from alone file with no namespace")
-        assert_equal("alone::sub", klass.classname, "Incorrect class was returned")
-
-        # and with the definition in its own file
-        name = "mymod"
-        mk_module(name, :define => true, :mydefine => ["mymod::mydefine"])
-
-        klass = parser.finddefine("", "mymod::mydefine")
-        assert_instance_of(AST::Definition, klass, "Did not autoload definition from its own file")
-        assert_equal("mymod::mydefine", klass.classname, "Incorrect definition was returned")
-    end
-    
-    # Make sure class, node, and define methods are case-insensitive
-    def test_structure_case_insensitivity
-        parser = mkparser
-        
-        result = nil
-        assert_nothing_raised do
-            result = parser.newclass "Yayness"
-        end
-        assert_equal(result, parser.findclass("", "yayNess"))
-        
-        assert_nothing_raised do
-            result = parser.newdefine "FunTest"
-        end
-        assert_equal(result, parser.finddefine("", "fUntEst"),
-            "%s was not matched" % "fUntEst")
-    end
-
-    def test_manifests_with_multiple_environments
-        parser = mkparser :environment => "something"
-
-        # We use an exception to cut short the processing to simplify our stubbing
-        #Puppet::Module.expects(:find_manifests).with("test", {:cwd => ".", :environment => "something"}).raises(Puppet::ParseError)
-        Puppet::Module.expects(:find_manifests).with("test", {:cwd => ".", :environment => "something"}).returns([])
-
-        assert_raise(Puppet::ImportError) do
-            parser.import("test") 
-        end
-    end
-
-    def test_watch_file_only_once
-        FileTest.stubs(:exists?).returns(true)
-        parser = mkparser
-        parser.watch_file("doh")
-        parser.watch_file("doh")
-        assert_equal(1, parser.files.select { |name, file| file.file == "doh" }.length, "Length of watched 'doh' files was not 1")
-    end
-end
-
diff --git a/test/language/resource.rb b/test/language/resource.rb
deleted file mode 100755
index b3eaf03..0000000
--- a/test/language/resource.rb
+++ /dev/null
@@ -1,297 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/resourcetesting'
-
-class TestResource < PuppetTest::TestCase
-	include PuppetTest
-    include PuppetTest::ParserTesting
-    include PuppetTest::ResourceTesting
-    Parser = Puppet::Parser
-    AST = Parser::AST
-    Resource = Puppet::Parser::Resource
-    Reference = Puppet::Parser::Resource::Reference
-
-    def setup
-        super
-        Puppet[:trace] = false
-    end
-
-    def teardown
-        mocha_verify
-    end
-
-    # Make sure we paramcheck our params
-    def test_validate
-        res = mkresource
-        params = res.instance_variable_get("@params")
-        params[:one] = :two
-        params[:three] = :four
-        res.expects(:paramcheck).with(:one)
-        res.expects(:paramcheck).with(:three)
-        res.send(:validate)
-    end
-
-    def test_set_parameter
-        res = mkresource
-        params = res.instance_variable_get("@params")
-
-        # First test the simple case:  It's already a parameter
-        param = mock('param')
-        param.expects(:is_a?).with(Resource::Param).returns(true)
-        param.expects(:name).returns("pname")
-        res.send(:set_parameter, param)
-        assert_equal(param, params["pname"], "Parameter was not added to hash")
-
-        # Now the case where there's no value but it's not a param
-        param = mock('param')
-        param.expects(:is_a?).with(Resource::Param).returns(false)
-        assert_raise(ArgumentError, "Did not fail when a non-param was passed") do
-            res.send(:set_parameter, param)
-        end
-
-        # and the case where a value is passed in
-        param = stub :name => "pname", :value => "whatever"
-        Resource::Param.expects(:new).with(:name => "pname", :value => "myvalue", :source => res.source).returns(param)
-        res.send(:set_parameter, "pname", "myvalue")
-        assert_equal(param, params["pname"], "Did not put param in hash")
-    end
-
-    def test_paramcheck
-        # There are three cases here:
-
-        # It's a valid parameter
-        res = mkresource
-        ref = mock('ref')
-        res.instance_variable_set("@ref", ref)
-        klass = mock("class")
-        ref.expects(:typeclass).returns(klass).times(4)
-        klass.expects(:validattr?).with("good").returns(true)
-        assert(res.send(:paramcheck, :good), "Did not allow valid param")
-
-        # It's name or title
-        klass.expects(:validattr?).with("name").returns(false)
-        assert(res.send(:paramcheck, :name), "Did not allow name")
-        klass.expects(:validattr?).with("title").returns(false)
-        assert(res.send(:paramcheck, :title), "Did not allow title")
-
-        # It's not actually allowed
-        klass.expects(:validattr?).with("other").returns(false)
-        res.expects(:fail)
-        ref.expects(:type)
-        res.send(:paramcheck, :other)
-    end
-
-    def test_to_transobject
-        # First try translating a builtin resource.  Make sure we use some references
-        # and arrays, to make sure they translate correctly.
-        source = mock("source")
-        scope = mkscope
-        scope.stubs(:tags).returns([])
-        refs = []
-        4.times { |i| refs << Puppet::Parser::Resource::Reference.new(:title => "file%s" % i, :type => "file") }
-        res = Parser::Resource.new :type => "file", :title => "/tmp",
-            :source => source, :scope => scope,
-            :params => paramify(source, :owner => "nobody", :group => %w{you me},
-            :require => refs[0], :ignore => %w{svn},
-            :subscribe => [refs[1], refs[2]], :notify => [refs[3]])
-
-        obj = nil
-        assert_nothing_raised do
-            obj = res.to_trans
-        end
-
-        assert_instance_of(Puppet::TransObject, obj)
-
-        assert_equal(obj.type, res.type.downcase)
-        assert_equal(obj.name, res.title)
-
-        # TransObjects use strings, resources use symbols
-        assert_equal("nobody", obj["owner"], "Single-value string was not passed correctly")
-        assert_equal(%w{you me}, obj["group"], "Array of strings was not passed correctly")
-        assert_equal("svn", obj["ignore"], "Array with single string was not turned into single value")
-        assert_equal(["file", refs[0].title], obj["require"], "Resource reference was not passed correctly")
-        assert_equal([["file", refs[1].title], ["file", refs[2].title]], obj["subscribe"], "Array of resource references was not passed correctly")
-        assert_equal(["file", refs[3].title], obj["notify"], "Array with single resource reference was not turned into single value")
-    end
-
-    # FIXME This isn't a great test, but I need to move on.
-    def test_to_transbucket
-        bucket = mock("transbucket")
-        source = mock("source")
-        scope = mkscope
-        res = Parser::Resource.new :type => "mydefine", :title => "yay",
-            :source => source, :scope => scope
-
-
-        result = res.to_trans
-        assert_equal("yay", result.name, "did not set bucket name correctly")
-        assert_equal("Mydefine", result.type, "did not set bucket type correctly")
-    end
-
-    def test_evaluate
-        # First try the most common case, we're not a builtin type.
-        res = mkresource
-        ref = res.instance_variable_get("@ref")
-        type = mock("type")
-        ref.expects(:definedtype).returns(type)
-        res.expects(:finish)
-        res.scope = mock("scope")
-
-        type.expects(:evaluate_code).with(res)
-
-        res.evaluate
-    end
-
-    def test_proxymethods
-        res = Parser::Resource.new :type => "evaltest", :title => "yay",
-            :source => mock("source"), :scope => mkscope
-
-        assert_equal("Evaltest", res.type)
-        assert_equal("yay", res.title)
-        assert_equal(false, res.builtin?)
-    end
-
-    def test_reference_conversion
-        # First try it as a normal string
-        ref = Parser::Resource::Reference.new(:type => "file", :title => "/tmp/ref1")
-
-        # Now create an obj that uses it
-        res = mkresource :type => "file", :title => "/tmp/resource",
-            :params => {:require => ref}
-        res.scope = mkscope
-
-        trans = nil
-        assert_nothing_raised do
-            trans = res.to_trans
-        end
-
-        assert_instance_of(Array, trans["require"])
-        assert_equal(["file", "/tmp/ref1"], trans["require"])
-
-        # Now try it when using an array of references.
-        two = Parser::Resource::Reference.new(:type => "file", :title => "/tmp/ref2")
-        res = mkresource :type => "file", :title => "/tmp/resource2",
-            :params => {:require => [ref, two]}
-        res.scope = mkscope
-
-        trans = nil
-        assert_nothing_raised do
-            trans = res.to_trans
-        end
-
-        assert_instance_of(Array, trans["require"][0])
-        trans["require"].each do |val|
-            assert_instance_of(Array, val)
-            assert_equal("file", val[0])
-            assert(val[1] =~ /\/tmp\/ref[0-9]/,
-                "Was %s instead of the file name" % val[1])
-        end
-    end
-
-    # This is a bit of a weird one -- the user should not actually know
-    # that components exist, so we want references to act like they're not
-    # builtin
-    def test_components_are_not_builtin
-        ref = Parser::Resource::Reference.new(:type => "component", :title => "yay")
-
-        assert_nil(ref.builtintype, "Definition was considered builtin")
-    end
-
-    # The second part of #539 - make sure resources pass the arguments
-    # correctly.
-    def test_title_with_definitions
-        parser = mkparser
-        define = parser.newdefine "yayness",
-            :code => resourcedef("file", "/tmp",
-                "owner" => varref("name"), "mode" => varref("title"))
-
-
-        klass = parser.findclass("", "")
-        should = {:name => :owner, :title => :mode}
-        [
-        {:name => "one", :title => "two"},
-        {:title => "three"},
-        ].each do |hash|
-            config = mkcompiler parser
-            args = {:type => "yayness", :title => hash[:title],
-                :source => klass, :scope => config.topscope}
-            if hash[:name]
-                args[:params] = {:name => hash[:name]}
-            else
-                args[:params] = {} # override the defaults
-            end
-
-            res = nil
-            assert_nothing_raised("Could not create res with %s" % hash.inspect) do
-                res = mkresource(args)
-            end
-            assert_nothing_raised("Could not eval res with %s" % hash.inspect) do
-                res.evaluate
-            end
-
-            made = config.topscope.findresource("File[/tmp]")
-            assert(made, "Did not create resource with %s" % hash.inspect)
-            should.each do |orig, param|
-                assert_equal(hash[orig] || hash[:title], made[param],
-                    "%s was not set correctly with %s" % [param, hash.inspect])
-            end
-        end
-    end
-
-    # part of #629 -- the undef keyword.  Make sure 'undef' params get skipped.
-    def test_undef_and_to_hash
-        res = mkresource :type => "file", :title => "/tmp/testing",
-            :source => mock("source"), :scope => mkscope,
-            :params => {:owner => :undef, :mode => "755"}
-
-        hash = nil
-        assert_nothing_raised("Could not convert resource with undef to hash") do
-            hash = res.to_hash
-        end
-
-        assert_nil(hash[:owner], "got a value for an undef parameter")
-    end
-
-    # #643 - Make sure virtual defines result in virtual resources
-    def test_virtual_defines
-        parser = mkparser
-        define = parser.newdefine("yayness",
-            :code => resourcedef("file", varref("name"),
-                "mode" => "644"))
-
-        config = mkcompiler(parser)
-
-        res = mkresource :type => "yayness", :title => "foo", :params => {}, :scope => config.topscope
-        res.virtual = true
-
-        result = nil
-        assert_nothing_raised("Could not evaluate defined resource") do
-            result = res.evaluate
-        end
-
-        scope = res.scope
-        newres = scope.findresource("File[foo]")
-        assert(newres, "Could not find resource")
-
-        assert(newres.virtual?, "Virtual defined resource generated non-virtual resources")
-
-        # Now try it with exported resources
-        res = mkresource :type => "yayness", :title => "bar", :params => {}, :scope => config.topscope
-        res.exported = true
-
-        result = nil
-        assert_nothing_raised("Could not evaluate exported resource") do
-            result = res.evaluate
-        end
-
-        scope = res.scope
-        newres = scope.findresource("File[bar]")
-        assert(newres, "Could not find resource")
-
-        assert(newres.exported?, "Exported defined resource generated non-exported resources")
-        assert(newres.virtual?, "Exported defined resource generated non-virtual resources")
-    end
-end
diff --git a/test/language/scope.rb b/test/language/scope.rb
deleted file mode 100755
index 0fa211f..0000000
--- a/test/language/scope.rb
+++ /dev/null
@@ -1,522 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'mocha'
-require 'puppettest'
-require 'puppettest/parsertesting'
-require 'puppettest/resourcetesting'
-
-# so, what kind of things do we want to test?
-
-# we don't need to test function, since we're confident in the
-# library tests.  We do, however, need to test how things are actually
-# working in the language.
-
-# so really, we want to do things like test that our ast is correct
-# and test whether we've got things in the right scopes
-
-class TestScope < Test::Unit::TestCase
-    include PuppetTest::ParserTesting
-    include PuppetTest::ResourceTesting
-
-    def to_ary(hash)
-        hash.collect { |key,value|
-            [key,value]
-        }
-    end
-
-    def test_variables
-        config = mkcompiler
-        topscope = config.topscope
-        midscope = config.newscope(topscope)
-        botscope = config.newscope(midscope)
-
-        scopes = {:top => topscope, :mid => midscope, :bot => botscope}
-
-        # Set a variable in the top and make sure all three can get it
-        topscope.setvar("first", "topval")
-        scopes.each do |name, scope|
-            assert_equal("topval", scope.lookupvar("first", false), "Could not find var in %s" % name)
-        end
-
-        # Now set a var in the midscope and make sure the mid and bottom can see it but not the top
-        midscope.setvar("second", "midval")
-        assert_equal(:undefined, scopes[:top].lookupvar("second", false), "Found child var in top scope")
-        [:mid, :bot].each do |name|
-            assert_equal("midval", scopes[name].lookupvar("second", false), "Could not find var in %s" % name)
-        end
-
-        # And set something in the bottom, and make sure we only find it there.
-        botscope.setvar("third", "botval")
-        [:top, :mid].each do |name|
-            assert_equal(:undefined, scopes[name].lookupvar("third", false), "Found child var in top scope")
-        end
-        assert_equal("botval", scopes[:bot].lookupvar("third", false), "Could not find var in bottom scope")
-
-
-        # Test that the scopes convert to hash structures correctly.
-        # For topscope recursive vs non-recursive should be identical
-        assert_equal(topscope.to_hash(false), topscope.to_hash(true),
-                     "Recursive and non-recursive hash is identical for topscope")
-
-        # Check the variable we expect is present.
-        assert_equal({"first" => "topval"}, topscope.to_hash(),
-                     "topscope returns the expected hash of variables")
-
-        # Now, check that midscope does the right thing in all cases.
-        assert_equal({"second" => "midval"},
-                     midscope.to_hash(false),
-                     "midscope non-recursive hash contains only midscope variable")
-        assert_equal({"first" => "topval", "second" => "midval"},
-                     midscope.to_hash(true),
-                     "midscope recursive hash contains topscope variable also")
-
-        # Finally, check the ability to shadow symbols by adding a shadow to
-        # bottomscope, then checking that we see the right stuff.
-        botscope.setvar("first", "shadowval")
-        assert_equal({"third" => "botval", "first" => "shadowval"},
-                     botscope.to_hash(false),
-                     "botscope has the right non-recursive hash")
-        assert_equal({"third" => "botval", "first" => "shadowval", "second" => "midval"},
-                     botscope.to_hash(true),
-                     "botscope values shadow parent scope values")
-    end
-
-    def test_lookupvar
-        parser = mkparser
-        scope = mkscope :parser => parser
-
-        # first do the plain lookups
-        assert_equal("", scope.lookupvar("var"), "scope did not default to string")
-        assert_equal("", scope.lookupvar("var", true), "scope ignored usestring setting")
-        assert_equal(:undefined, scope.lookupvar("var", false), "scope ignored usestring setting when false")
-
-        # Now set the var
-        scope.setvar("var", "yep")
-        assert_equal("yep", scope.lookupvar("var"), "did not retrieve value correctly")
-
-        # Now test the parent lookups 
-        subscope = mkscope :parser => parser
-        subscope.parent = scope
-        assert_equal("", subscope.lookupvar("nope"), "scope did not default to string with parent")
-        assert_equal("", subscope.lookupvar("nope", true), "scope ignored usestring setting with parent")
-        assert_equal(:undefined, subscope.lookupvar("nope", false), "scope ignored usestring setting when false with parent")
-
-        assert_equal("yep", subscope.lookupvar("var"), "did not retrieve value correctly from parent")
-
-        # Now override the value in the subscope
-        subscope.setvar("var", "sub")
-        assert_equal("sub", subscope.lookupvar("var"), "did not retrieve overridden value correctly")
-
-        # Make sure we punt when the var is qualified.  Specify the usestring value, so we know it propagates.
-        scope.expects(:lookup_qualified_var).with("one::two", false).returns(:punted)
-        assert_equal(:punted, scope.lookupvar("one::two", false), "did not return the value of lookup_qualified_var")
-    end
-
-    def test_lookup_qualified_var
-        parser = mkparser
-        scope = mkscope :parser => parser
-
-        scopes = {}
-        classes = ["", "one", "one::two", "one::two::three"].each do |name|
-            klass = parser.newclass(name)
-            Puppet::Parser::Resource.new(:type => "class", :title => name, :scope => scope, :source => mock('source')).evaluate
-            scopes[name] = scope.compiler.class_scope(klass)
-        end
-
-        classes.each do |name|
-            var = [name, "var"].join("::")
-            scopes[name].expects(:lookupvar).with("var", false).returns(name)
-
-            assert_equal(name, scope.send(:lookup_qualified_var, var, false), "did not get correct value from lookupvar")
-        end
-    end
-
-    def test_declarative
-        # set to declarative
-        top = mkscope
-        sub = mkscope(:parent => top)
-
-        assert_nothing_raised {
-            top.setvar("test","value")
-        }
-        assert_raise(Puppet::ParseError) {
-            top.setvar("test","other")
-        }
-        assert_nothing_raised {
-            sub.setvar("test","later")
-        }
-        assert_raise(Puppet::ParseError) {
-            top.setvar("test","yeehaw")
-        }
-    end
-
-    def test_setdefaults
-        config = mkcompiler
-
-        scope = config.topscope
-
-        defaults = scope.instance_variable_get("@defaults")
-
-        # First the case where there are no defaults and we pass a single param
-        param = stub :name => "myparam", :file => "f", :line => "l"
-        scope.setdefaults(:mytype, param)
-        assert_equal({"myparam" => param}, defaults[:mytype], "Did not set default correctly")
-
-        # Now the case where we pass in multiple parameters
-        param1 = stub :name => "one", :file => "f", :line => "l"
-        param2 = stub :name => "two", :file => "f", :line => "l"
-        scope.setdefaults(:newtype, [param1, param2])
-        assert_equal({"one" => param1, "two" => param2}, defaults[:newtype], "Did not set multiple defaults correctly")
-
-        # And the case where there's actually a conflict.  Use the first default for this.
-        newparam = stub :name => "myparam", :file => "f", :line => "l"
-        assert_raise(Puppet::ParseError, "Allowed resetting of defaults") do
-            scope.setdefaults(:mytype, param)
-        end
-        assert_equal({"myparam" => param}, defaults[:mytype], "Replaced default even though there was a failure")
-    end
-
-    def test_lookupdefaults
-        config = mkcompiler
-        top = config.topscope
-
-        # Make a subscope
-        sub = config.newscope(top)
-
-        topdefs = top.instance_variable_get("@defaults")
-        subdefs = sub.instance_variable_get("@defaults")
-
-        # First add some defaults to our top scope
-        topdefs[:t1] = {:p1 => :p2, :p3 => :p4}
-        topdefs[:t2] = {:p5 => :p6}
-
-        # Then the sub scope
-        subdefs[:t1] = {:p1 => :p7, :p8 => :p9}
-        subdefs[:t2] = {:p5 => :p10, :p11 => :p12}
-
-        # Now make sure we get the correct list back
-        result = nil
-        assert_nothing_raised("Could not get defaults") do
-            result = sub.lookupdefaults(:t1)
-        end
-        assert_equal(:p9, result[:p8], "Did not get child defaults")
-        assert_equal(:p4, result[:p3], "Did not override parent defaults with child default")
-        assert_equal(:p7, result[:p1], "Did not get parent defaults")
-    end
-
-    def test_parent
-        config = mkcompiler
-        top = config.topscope
-
-        # Make a subscope
-        sub = config.newscope(top)
-
-        assert_equal(top, sub.parent, "Did not find parent scope correctly")
-        assert_equal(top, sub.parent, "Did not find parent scope on second call")
-    end
-    
-    def test_strinterp
-        # Make and evaluate our classes so the qualified lookups work
-        parser = mkparser
-        klass = parser.newclass("")
-        scope = mkscope(:parser => parser)
-        Puppet::Parser::Resource.new(:type => "class", :title => :main, :scope => scope, :source => mock('source')).evaluate
-
-        assert_nothing_raised {
-            scope.setvar("test","value")
-        }
-
-        scopes = {"" => scope}
-
-        %w{one one::two one::two::three}.each do |name|
-            klass = parser.newclass(name)
-            Puppet::Parser::Resource.new(:type => "class", :title => name, :scope => scope, :source => mock('source')).evaluate
-            scopes[name] = scope.compiler.class_scope(klass)
-            scopes[name].setvar("test", "value-%s" % name.sub(/.+::/,''))
-        end
-
-        assert_equal("value", scope.lookupvar("::test"), "did not look up qualified value correctly")
-        tests = {
-            "string ${test}" => "string value",
-            "string ${one::two::three::test}" => "string value-three",
-            "string $one::two::three::test" => "string value-three",
-            "string ${one::two::test}" => "string value-two",
-            "string $one::two::test" => "string value-two",
-            "string ${one::test}" => "string value-one",
-            "string $one::test" => "string value-one",
-            "string ${::test}" => "string value",
-            "string $::test" => "string value",
-            "string ${test} ${test} ${test}" => "string value value value",
-            "string $test ${test} $test" => "string value value value",
-            "string \\$test" => "string $test",
-            '\\$test string' => "$test string",
-            '$test string' => "value string",
-            'a testing $' => "a testing $",
-            'a testing \$' => "a testing $",
-            "an escaped \\\n carriage return" => "an escaped  carriage return",
-            '\$' => "$",
-            '\s' => "\s",
-            '\t' => "\t",
-            '\n' => "\n"
-        }
-
-        tests.each do |input, output|
-            assert_nothing_raised("Failed to scan %s" % input.inspect) do
-                assert_equal(output, scope.strinterp(input),
-                    'did not parserret %s correctly' % input.inspect)
-            end
-        end
-
-        logs = []
-        Puppet::Util::Log.close
-        Puppet::Util::Log.newdestination(logs)
-
-        # #523
-        %w{d f h l w z}.each do |l|
-            string = "\\" + l
-            assert_nothing_raised do
-                assert_equal(string, scope.strinterp(string),
-                    'did not parserret %s correctly' % string)
-            end
-
-            assert(logs.detect { |m| m.message =~ /Unrecognised escape/ },
-                "Did not get warning about escape sequence with %s" % string)
-            logs.clear
-        end
-    end
-
-    def test_tagfunction
-        scope = mkscope
-        resource = mock 'resource'
-        scope.resource = resource
-        resource.expects(:tag).with("yayness", "booness")
-
-        scope.function_tag(%w{yayness booness})
-    end
-
-    def test_includefunction
-        parser = mkparser
-        scope = mkscope :parser => parser
-
-        myclass = parser.newclass "myclass"
-        otherclass = parser.newclass "otherclass"
-
-        function = Puppet::Parser::AST::Function.new(
-            :name => "include",
-            :ftype => :statement,
-            :arguments => AST::ASTArray.new(
-                :children => [nameobj("myclass"), nameobj("otherclass")]
-            )
-        )
-
-        assert_nothing_raised do
-            function.evaluate scope
-        end
-
-        scope.compiler.send(:evaluate_generators)
-
-        [myclass, otherclass].each do |klass|
-            assert(scope.compiler.class_scope(klass),
-                "%s was not set" % klass.classname)
-        end
-    end
-
-    def test_definedfunction
-        parser = mkparser
-        %w{one two}.each do |name|
-            parser.newdefine name
-        end
-
-        scope = mkscope :parser => parser
-
-        assert_nothing_raised {
-            %w{one two file user}.each do |type|
-                assert(scope.function_defined([type]),
-                    "Class #{type} was not considered defined")
-            end
-
-            assert(!scope.function_defined(["nopeness"]),
-                "Class 'nopeness' was incorrectly considered defined")
-        }
-    end
-
-    # Make sure we know what we consider to be truth.
-    def test_truth
-        assert_equal(true, Puppet::Parser::Scope.true?("a string"),
-            "Strings not considered true")
-        assert_equal(true, Puppet::Parser::Scope.true?(true),
-            "True considered true")
-        assert_equal(false, Puppet::Parser::Scope.true?(""),
-            "Empty strings considered true")
-        assert_equal(false, Puppet::Parser::Scope.true?(false),
-            "false considered true")
-        assert_equal(false, Puppet::Parser::Scope.true?(:undef),
-            "undef considered true")
-    end
-
-    # Verify that we recursively mark as exported the results of collectable
-    # components.
-    def test_virtual_definitions_do_not_get_evaluated
-        config = mkcompiler
-        parser = config.parser
-
-        # Create a default source
-        config.topscope.source = parser.newclass "", ""
-
-        # And a scope resource
-        scope_res = stub 'scope_resource', :virtual? => true, :exported? => false, :tags => [], :builtin? => true, :type => "eh", :title => "bee"
-        config.topscope.resource = scope_res
-
-        args = AST::ASTArray.new(
-            :file => tempfile(),
-            :line => rand(100),
-            :children => [nameobj("arg")]
-        )
-
-        # Create a top-level define
-        parser.newdefine "one", :arguments => [%w{arg}],
-            :code => AST::ASTArray.new(
-                :children => [
-                    resourcedef("file", "/tmp", {"owner" => varref("arg")})
-                ]
-            )
-
-        # create a resource that calls our third define
-        obj = resourcedef("one", "boo", {"arg" => "parentfoo"})
-
-        # And mark it as virtual
-        obj.virtual = true
-
-        # And then evaluate it
-        obj.evaluate config.topscope
-
-        # And run the loop.
-        config.send(:evaluate_generators)
-
-        %w{File}.each do |type|
-            objects = config.resources.find_all { |r| r.type == type and r.virtual }
-
-            assert(objects.empty?, "Virtual define got evaluated")
-        end
-    end
-
-    if defined? ActiveRecord
-    # Verify that we can both store and collect an object in the same
-    # run, whether it's in the same scope as a collection or a different
-    # scope.
-    def test_storeandcollect
-        Puppet[:storeconfigs] = true
-        Puppet::Rails.init
-        sleep 1
-        children = []
-        Puppet[:code] = "
-class yay {
-    @@host { myhost: ip => \"192.168.0.2\" }
-}
-include yay
-@@host { puppet: ip => \"192.168.0.3\" }
-Host <<||>>"
-
-        interp = nil
-        assert_nothing_raised {
-            interp = Puppet::Parser::Interpreter.new
-        }
-
-        config = nil
-        # We run it twice because we want to make sure there's no conflict
-        # if we pull it up from the database.
-        node = mknode
-        node.parameters = {"hostname" => node.name}
-        2.times { |i|
-            assert_nothing_raised {
-                config = interp.compile(node)
-            }
-
-            flat = config.extract.flatten
-
-            %w{puppet myhost}.each do |name|
-                assert(flat.find{|o| o.name == name }, "Did not find #{name}")
-            end
-        }
-    end
-    else
-        $stderr.puts "No ActiveRecord -- skipping collection tests"
-    end
-
-    def test_namespaces
-        scope = mkscope
-
-        assert_equal([""], scope.namespaces,
-            "Started out with incorrect namespaces")
-        assert_nothing_raised { scope.add_namespace("fun::test") }
-        assert_equal(["fun::test"], scope.namespaces,
-            "Did not add namespace correctly")
-        assert_nothing_raised { scope.add_namespace("yay::test") }
-        assert_equal(["fun::test", "yay::test"], scope.namespaces,
-            "Did not add extra namespace correctly")
-    end
-
-    def test_findclass_and_finddefine
-        parser = mkparser
-
-        # Make sure our scope calls the parser findclass method with
-        # the right namespaces
-        scope = mkscope :parser => parser
-
-        parser.metaclass.send(:attr_accessor, :last)
-
-        methods = [:findclass, :finddefine]
-        methods.each do |m|
-            parser.meta_def(m) do |namespace, name|
-                @checked ||= []
-                @checked << [namespace, name]
-
-                # Only return a value on the last call.
-                if @last == namespace
-                    ret = @checked.dup
-                    @checked.clear
-                    return ret
-                else
-                    return nil
-                end
-            end
-        end
-
-        test = proc do |should|
-            parser.last = scope.namespaces[-1]
-            methods.each do |method|
-                result = scope.send(method, "testing")
-                assert_equal(should, result,
-                    "did not get correct value from %s with namespaces %s" %
-                    [method, scope.namespaces.inspect])
-            end
-        end
-
-        # Start with the empty namespace
-        assert_nothing_raised { test.call([["", "testing"]]) }
-
-        # Now add a namespace
-        scope.add_namespace("a")
-        assert_nothing_raised { test.call([["a", "testing"]]) }
-
-        # And another
-        scope.add_namespace("b")
-        assert_nothing_raised { test.call([["a", "testing"], ["b", "testing"]]) }
-    end
-
-    # #629 - undef should be "" or :undef
-    def test_lookupvar_with_undef
-        scope = mkscope
-
-        scope.setvar("testing", :undef)
-
-        assert_equal(:undef, scope.lookupvar("testing", false),
-            "undef was not returned as :undef when not string")
-
-        assert_equal("", scope.lookupvar("testing", true),
-            "undef was not returned as '' when string")
-    end
-end
-
diff --git a/test/language/snippets.rb b/test/language/snippets.rb
deleted file mode 100755
index ebc9773..0000000
--- a/test/language/snippets.rb
+++ /dev/null
@@ -1,511 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/parser/interpreter'
-require 'puppet/parser/parser'
-require 'puppet/network/client'
-require 'puppet/network/handler'
-require 'puppettest'
-
-class TestSnippets < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @file = Puppet::Type.type(:file)
-        Facter.stubs(:to_hash).returns({})
-        Facter.stubs(:value).returns("whatever")
-    end
-
-    def self.snippetdir
-        PuppetTest.datadir "snippets"
-    end
-
-    def assert_file(path, msg = nil)
-        unless file = @file[path]
-            msg ||= "Could not find file %s" % path
-            raise msg
-        end
-    end
-
-    def assert_mode_equal(mode, path)
-        unless file = @file[path]
-            raise "Could not find file %s" % path
-        end
-
-        unless mode == file.should(:mode)
-            raise "Mode for %s is incorrect: %o vs %o" % [path, mode, file.should(:mode)]
-        end
-    end
-
-    def snippet(name)
-        File.join(self.class.snippetdir, name)
-    end
-    
-    def file2ast(file)
-        parser = Puppet::Parser::Parser.new()
-        parser.file = file
-        ast = parser.parse
-
-        return ast
-    end
-
-    def snippet2ast(text)
-        parser = Puppet::Parser::Parser.new()
-        parser.string = text
-        ast = parser.parse
-
-        return ast
-    end
-
-    def client
-        args = {
-            :Listen => false
-        }
-        Puppet::Network::Client.new(args)
-    end
-
-    def ast2scope(ast)
-        interp = Puppet::Parser::Interpreter.new(
-            :ast => ast,
-            :client => client()
-        )
-        scope = Puppet::Parser::Scope.new()
-        ast.evaluate(scope)
-
-        return scope
-    end
-
-    def scope2objs(scope)
-        objs = scope.to_trans
-    end
-
-    def snippet2scope(snippet)
-        ast = snippet2ast(snippet)
-        scope = ast2scope(ast)
-    end
-
-    def snippet2objs(snippet)
-        ast = snippet2ast(snippet)
-        scope = ast2scope(ast)
-        objs = scope2objs(scope)
-    end
-
-    def properties(type)
-        properties = type.validproperties
-    end
-
-    def metaparams(type)
-        mparams = []
-        Puppet::Type.eachmetaparam { |param|
-            mparams.push param
-        }
-
-        mparams
-    end
-
-    def params(type)
-        params = []
-        type.parameters.each { |name,property|
-            params.push name
-        }
-
-        params
-    end
-
-    def randthing(thing,type)
-        list = self.send(thing,type)
-        list[rand(list.length)]
-    end
-
-    def randeach(type)
-        [:properties, :metaparams, :params].collect { |thing|
-            randthing(thing,type)
-        }
-    end
-
-    @@snippets = {
-        true => [
-            %{File { mode => 755 }}
-        ],
-    }
-
-    def disabled_test_defaults
-        Puppet::Type.eachtype { |type|
-            next if type.name == :puppet or type.name == :component
-            
-            rands = randeach(type)
-
-            name = type.name.to_s.capitalize
-
-            [0..1, 0..2].each { |range|
-                params = rands[range]
-                paramstr = params.collect { |param|
-                    "%s => fake" % param
-                }.join(", ")
-
-                str = "%s { %s }" % [name, paramstr]
-
-                scope = nil
-                assert_nothing_raised {
-                    scope = snippet2scope(str)
-                }
-
-                defaults = nil
-                assert_nothing_raised {
-                    defaults = scope.lookupdefaults(name)
-                }
-
-                p defaults
-
-                params.each { |param|
-                    puts "%s => '%s'" % [name,param]
-                    assert(defaults.include?(param))
-                }
-            }
-        }
-    end
-
-    # this is here in case no tests get defined; otherwise we get a warning
-    def test_nothing
-    end
-
-    def snippet_filecreate
-        %w{a b c d}.each { |letter|
-            path = "/tmp/create%stest" % letter
-            assert_file(path)
-            if %w{a b}.include?(letter)
-                assert_mode_equal(0755, path)
-            end
-        }
-    end
-
-    def snippet_simpledefaults
-        path = "/tmp/defaulttest"
-        assert_file(path)
-        assert_mode_equal(0755, path)
-    end
-
-    def snippet_simpleselector
-        files = %w{a b c d}.collect { |letter|
-            path = "/tmp/snippetselect%stest" % letter
-            assert_file(path)
-            assert_mode_equal(0755, path)
-        }
-    end
-
-    def snippet_classpathtest
-        path = "/tmp/classtest"
-
-        file = @catalog.resource(:file, path)
-        assert(file, "did not create file %s" % path)
-
-        assert_nothing_raised {
-            assert_equal(
-                "//testing/Mytype[componentname]/File[/tmp/classtest]",
-                file.path)
-        }
-    end
-
-    def snippet_argumentdefaults
-        path1 = "/tmp/argumenttest1"
-        path2 = "/tmp/argumenttest2"
-
-        file1 = @file[path1]
-        file2 = @file[path2]
-
-        assert_file(path1)
-        assert_mode_equal(0755, path1)
-
-        assert_file(path2)
-        assert_mode_equal(0644, path2)
-    end
-
-    def snippet_casestatement
-        paths = %w{
-            /tmp/existsfile
-            /tmp/existsfile2
-            /tmp/existsfile3
-            /tmp/existsfile4
-            /tmp/existsfile5
-        }
-
-        paths.each { |path|
-            file = @file[path]
-            assert(file, "File %s is missing" % path)
-            assert_mode_equal(0755, path)
-        }
-    end
-
-    def snippet_implicititeration
-        paths = %w{a b c d e f g h}.collect { |l| "/tmp/iteration%stest" % l }
-
-        paths.each { |path|
-            file = @file[path]
-            assert_file(path)
-            assert_mode_equal(0755, path)
-        }
-    end
-
-    def snippet_multipleinstances
-        paths = %w{a b c}.collect { |l| "/tmp/multipleinstances%s" % l }
-
-        paths.each { |path|
-            assert_file(path)
-            assert_mode_equal(0755, path)
-
-        }
-    end
-
-    def snippet_namevartest
-        file = "/tmp/testfiletest"
-        dir = "/tmp/testdirtest"
-        assert_file(file)
-        assert_file(dir)
-        assert_equal(:directory, @file[dir].should(:ensure), "Directory is not set to be a directory")
-    end
-
-    def snippet_scopetest
-        file = "/tmp/scopetest"
-        assert_file(file)
-        assert_mode_equal(0755, file)
-    end
-
-    def snippet_selectorvalues
-        nums = %w{1 2 3 4 5}
-        files = nums.collect { |n|
-            "/tmp/selectorvalues%s" % n
-        }
-
-        files.each { |f|
-            assert_file(f)
-            assert_mode_equal(0755, f)
-        }
-    end
-
-    def snippet_singleselector
-        nums = %w{1 2 3}
-        files = nums.collect { |n|
-            "/tmp/singleselector%s" % n
-        }
-
-        files.each { |f|
-            assert_file(f)
-            assert_mode_equal(0755, f)
-        }
-    end
-
-    def snippet_falsevalues
-        file = "/tmp/falsevaluesfalse"
-        assert_file(file)
-    end
-
-    def disabled_snippet_classargtest
-        [1,2].each { |num|
-            file = "/tmp/classargtest%s" % num
-            assert_file(file)
-            assert_mode_equal(0755, file)
-        }
-    end
-
-    def snippet_classheirarchy
-        [1,2,3].each { |num|
-            file = "/tmp/classheir%s" % num
-            assert_file(file)
-            assert_mode_equal(0755, file)
-        }
-    end
-
-    def snippet_singleary
-        [1,2,3,4].each { |num|
-            file = "/tmp/singleary%s" % num
-            assert_file(file)
-        }
-    end
-
-    def snippet_classincludes
-        [1,2,3].each { |num|
-            file = "/tmp/classincludes%s" % num
-            assert_file(file)
-            assert_mode_equal(0755, file)
-        }
-    end
-
-    def snippet_componentmetaparams
-        ["/tmp/component1", "/tmp/component2"].each { |file|
-            assert_file(file)
-        }
-    end
-
-    def snippet_aliastest
-        %w{/tmp/aliastest /tmp/aliastest2 /tmp/aliastest3}.each { |file|
-            assert_file(file)
-        }
-    end
-
-    def snippet_singlequote
-        {   1 => 'a $quote',
-            2 => 'some "\yayness\"'
-        }.each { |count, str|
-            path = "/tmp/singlequote%s" % count
-            assert_file(path)
-            assert_equal(str, @file[path].should(:content))
-        }
-    end
-
-    # There's no way to actually retrieve the list of classes from the
-    # transaction.
-    def snippet_tag
-    end
-
-    # Make sure that set tags are correctly in place, yo.
-    def snippet_tagged
-        tags = {"testing" => true, "yayness" => false,
-            "both" => false, "bothtrue" => true, "define" => true}
-
-        tags.each do |tag, retval|
-            assert_file("/tmp/tagged#{tag}#{retval.to_s}")
-        end
-    end
-
-    def snippet_defineoverrides
-        file = "/tmp/defineoverrides1"
-        assert_file(file)
-        assert_mode_equal(0755, file)
-    end
-
-    def snippet_deepclassheirarchy
-        5.times { |i|
-            i += 1
-            file = "/tmp/deepclassheir%s" % i
-            assert_file(file)
-        }
-    end
-
-    def snippet_emptyclass
-        # There's nothing to check other than that it works
-    end
-
-    def snippet_emptyexec
-        assert(Puppet::Type.type(:exec)["touch /tmp/emptyexectest"],
-            "Did not create exec")
-    end
-
-    def snippet_multisubs
-        path = "/tmp/multisubtest"
-        assert_file(path)
-        file = @file[path]
-        assert_equal("sub2", file.should(:content), "sub2 did not override content")
-        assert_mode_equal(0755, path)
-    end
-
-    def snippet_collection
-        assert_file("/tmp/colltest1")
-        assert_nil(@file["/tmp/colltest2"], "Incorrectly collected file")
-    end
-
-    def snippet_virtualresources
-        %w{1 2 3 4}.each do |num|
-            assert_file("/tmp/virtualtest#{num}")
-        end
-    end
-    
-    def snippet_componentrequire
-        %w{1 2}.each do |num|
-            assert_file("/tmp/testing_component_requires#{num}",
-                "#{num} does not exist")
-        end
-    end
-
-    def snippet_realize_defined_types
-        assert_file("/tmp/realize_defined_test1")
-        assert_file("/tmp/realize_defined_test2")
-    end
-
-    def snippet_collection_within_virtual_definitions
-        assert_file("/tmp/collection_within_virtual_definitions1_foo.txt")
-        assert_file("/tmp/collection_within_virtual_definitions2_foo2.txt")
-    end
-
-    def snippet_fqparents
-        assert_file("/tmp/fqparent1", "Did not make file from parent class")
-        assert_file("/tmp/fqparent2", "Did not make file from subclass")
-    end
-
-    def snippet_fqdefinition
-        assert_file("/tmp/fqdefinition",
-            "Did not make file from fully-qualified definition")
-    end
-
-    def snippet_subclass_name_duplication
-        assert_file("/tmp/subclass_name_duplication1",
-            "Did not make first file from duplicate subclass names")
-        assert_file("/tmp/subclass_name_duplication2",
-            "Did not make second file from duplicate subclass names")
-    end
-
-    def snippet_funccomma
-        assert_file("/tmp/funccomma1",
-            "Did not make first file from trailing function comma")
-        assert_file("/tmp/funccomma2",
-            "Did not make second file from trailing function comma")
-    end
-
-    def snippet_arraytrailingcomma
-        assert_file("/tmp/arraytrailingcomma1",
-            "Did not make first file from array")
-        assert_file("/tmp/arraytrailingcomma2",
-            "Did not make second file from array")
-    end
-
-    # Iterate across each of the snippets and create a test.
-    Dir.entries(snippetdir).sort.each { |file|
-        next if file =~ /^\./
-
-
-        mname = "snippet_" + file.sub(/\.pp$/, '')
-        if self.method_defined?(mname)
-            #eval("alias %s %s" % [testname, mname])
-            testname = ("test_" + mname).intern
-            self.send(:define_method, testname) {
-                Puppet[:manifest] = snippet(file)
-                facts = {
-                    "hostname" => "testhost",
-                    "domain" => "domain.com",
-                    "ipaddress" => "127.0.0.1",
-                    "fqdn" => "testhost.domain.com"
-                }
-
-                node = Puppet::Node.new("testhost")
-                node.merge(facts)
-
-                catalog = nil
-                assert_nothing_raised("Could not compile catalog") {
-                    catalog = Puppet::Node::Catalog.find(node)
-                }
-
-                assert_nothing_raised("Could not convert catalog") {
-                    catalog = catalog.to_ral
-                }
-
-                Puppet::Type.eachtype { |type|
-                    type.each { |obj|
-                        # don't worry about this for now
-                        #unless obj.name == "puppet[top]" or
-                        #    obj.is_a?(Puppet.type(:schedule))
-                        #    assert(obj.parent, "%s has no parent" % obj.name)
-                        #end
-                        assert(obj.name)
-                    }
-                }
-                @catalog = catalog
-                assert_nothing_raised {
-                    self.send(mname)
-                }
-            }
-            mname = mname.intern
-        end
-    }
-end
diff --git a/test/language/transportable.rb b/test/language/transportable.rb
deleted file mode 100755
index 7ea6a17..0000000
--- a/test/language/transportable.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/transportable'
-require 'puppettest'
-require 'puppettest/parsertesting'
-require 'yaml'
-
-class TestTransportable < Test::Unit::TestCase
-    include PuppetTest::ParserTesting
-
-    def test_yamldumpobject
-        obj = mk_transobject
-        obj.to_yaml_properties
-        str = nil
-        assert_nothing_raised {
-            str = YAML.dump(obj)
-        }
-
-        newobj = nil
-        assert_nothing_raised {
-            newobj = YAML.load(str)
-        }
-
-        assert(newobj.name, "Object has no name")
-        assert(newobj.type, "Object has no type")
-    end
-
-    def test_yamldumpbucket
-        objects = %w{/etc/passwd /etc /tmp /var /dev}.collect { |d|
-            mk_transobject(d)
-        }
-        bucket = mk_transbucket(*objects)
-        str = nil
-        assert_nothing_raised {
-            str = YAML.dump(bucket)
-        }
-
-        newobj = nil
-        assert_nothing_raised {
-            newobj = YAML.load(str)
-        }
-
-        assert(newobj.name, "Bucket has no name")
-        assert(newobj.type, "Bucket has no type")
-    end
-
-    # Make sure our 'delve' command is working
-    def test_delve
-        top = mk_transtree do |object, depth, width|
-            if width % 2 == 1
-                object.file = :funtest
-            end
-        end
-
-        objects = []
-        buckets = []
-        found = []
-
-        count = 0
-        assert_nothing_raised {
-            top.delve do |object|
-                count += 1
-                if object.is_a? Puppet::TransBucket
-                    buckets << object
-                else
-                    objects << object
-                    if object.file == :funtest
-                        found << object
-                    end
-                end
-            end
-        }
-
-        top.flatten.each do |obj|
-            assert(objects.include?(obj), "Missing obj %s[%s]" % [obj.type, obj.name])
-        end
-
-        assert_equal(found.length,
-            top.flatten.find_all { |o| o.file == :funtest }.length,
-            "Found incorrect number of objects")
-    end
-end
-
diff --git a/test/lib/mocha_standalone.rb b/test/lib/mocha_standalone.rb
deleted file mode 100644
index ce60581..0000000
--- a/test/lib/mocha_standalone.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require 'mocha/standalone'
-require 'mocha/object'
diff --git a/test/lib/puppettest.rb b/test/lib/puppettest.rb
deleted file mode 100755
index 63f8121..0000000
--- a/test/lib/puppettest.rb
+++ /dev/null
@@ -1,344 +0,0 @@
-# Add .../test/lib
-testlib = File.expand_path(File.dirname(__FILE__))
-$LOAD_PATH.unshift(testlib) unless $LOAD_PATH.include?(testlib)
-# Add .../lib
-mainlib = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-$LOAD_PATH.unshift(mainlib) unless $LOAD_PATH.include?(mainlib)
-
-require 'puppet'
-
-# include any gems in vendor/gems
-Dir["#{mainlib}/../vendor/gems/**"].each do |path| 
-    libpath = File.join(path, "lib")
-    if File.directory?(libpath)
-        $LOAD_PATH.unshift(libpath)
-    else
-        $LOAD_PATH.unshift(path)
-    end
-end
-
-require 'mocha'
-
-# Only load the test/unit class if we're not in the spec directory.
-# Else we get the bogus 'no tests, no failures' message.
-unless Dir.getwd =~ /spec/
-    require 'test/unit'
-end
-
-# Yay; hackish but it works
-if ARGV.include?("-d")
-    ARGV.delete("-d")
-    $console = true
-end
-
-# Some monkey-patching to allow us to test private methods.
-class Class
-    def publicize_methods(*methods)
-        saved_private_instance_methods = methods.empty? ? self.private_instance_methods : methods
-
-        self.class_eval { public(*saved_private_instance_methods) }
-        yield
-        self.class_eval { private(*saved_private_instance_methods) }
-    end
-end
-
-module PuppetTest
-    # These need to be here for when rspec tests use these
-    # support methods.
-    @@tmpfiles = []
-
-    # Munge cli arguments, so we can enable debugging if we want
-    # and so we can run just specific methods.
-    def self.munge_argv
-        require 'getoptlong'
-
-        result = GetoptLong.new(
-            [ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-            [ "--resolve",	"-r",			GetoptLong::REQUIRED_ARGUMENT ],
-            [ "-n",			                GetoptLong::REQUIRED_ARGUMENT ],
-            [ "--help",		"-h",			GetoptLong::NO_ARGUMENT ]
-        )
-
-        usage = "USAGE: TESTOPTS='[-n <method> -n <method> ...] [-d]' rake [target] [target] ..."
-
-        opts = []
-
-        dir = method = nil
-        result.each { |opt,arg|
-            case opt
-            when "--resolve"
-                dir, method = arg.split(",")
-            when "--debug"
-                $puppet_debug = true
-                Puppet::Util::Log.level = :debug
-                Puppet::Util::Log.newdestination(:console)
-            when "--help"
-                puts usage
-                exit
-            else
-                opts << opt << arg
-            end
-        }
-        suites = nil
-
-        args = ARGV.dup
-
-        # Reset the options, so the test suite can deal with them (this is
-        # what makes things like '-n' work).
-        opts.each { |o| ARGV << o }
-
-        return args
-    end
-
-    # Find the root of the Puppet tree; this is not the test directory, but
-    # the parent of that dir.
-    def basedir(*list)
-        unless defined? @@basedir
-            Dir.chdir(File.dirname(__FILE__)) do
-                @@basedir = File.dirname(File.dirname(Dir.getwd))
-            end
-        end
-        if list.empty?
-            @@basedir
-        else
-            File.join(@@basedir, *list)
-        end
-    end
-
-    def datadir(*list)
-        File.join(basedir, "test", "data", *list)
-    end
-
-    def exampledir(*args)
-        unless defined? @@exampledir
-            @@exampledir = File.join(basedir, "examples")
-        end
-
-        if args.empty?
-            return @@exampledir
-        else
-            return File.join(@@exampledir, *args)
-        end
-    end
-
-    module_function :basedir, :datadir, :exampledir
-
-    def cleanup(&block)
-        @@cleaners << block
-    end
-
-    # Rails clobbers RUBYLIB, thanks
-    def libsetup
-        curlibs = ENV["RUBYLIB"].split(":")
-        $:.reject do |dir| dir =~ /^\/usr/ end.each do |dir|
-            unless curlibs.include?(dir)
-                curlibs << dir
-            end
-        end
-
-        ENV["RUBYLIB"] = curlibs.join(":")
-    end
-    
-    def logcollector
-        collector = []
-        Puppet::Util::Log.newdestination(collector)
-        cleanup do
-            Puppet::Util::Log.close(collector)
-        end
-        collector
-    end
-
-    def rake?
-        $0 =~ /test_loader/
-    end
-
-    # Redirect stdout and stderr
-    def redirect
-        @stderr = tempfile
-        @stdout = tempfile
-        $stderr = File.open(@stderr, "w")
-        $stdout = File.open(@stdout, "w")
-
-        cleanup do
-            $stderr = STDERR
-            $stdout = STDOUT
-        end
-    end
-
-    def setup
-        @memoryatstart = Puppet::Util.memory
-        if defined? @@testcount
-            @@testcount += 1
-        else
-            @@testcount = 0
-        end
-
-        @configpath = File.join(tmpdir,
-            "configdir" + @@testcount.to_s + "/"
-        )
-
-        unless defined? $user and $group
-            $user = nonrootuser().uid.to_s
-            $group = nonrootgroup().gid.to_s
-        end
-
-        Puppet.settings.clear
-        Puppet[:user] = $user
-        Puppet[:group] = $group
-
-        Puppet[:confdir] = @configpath
-        Puppet[:vardir] = @configpath
-
-        unless File.exists?(@configpath)
-            Dir.mkdir(@configpath)
-        end
-
-        @@tmpfiles << @configpath << tmpdir()
-        @@tmppids = []
-
-        @@cleaners = []
-
-        @logs = []
-
-        # If we're running under rake, then disable debugging and such.
-        #if rake? or ! Puppet[:debug]
-        #if defined?($puppet_debug) or ! rake?
-            if textmate?
-                Puppet[:color] = false
-            end
-            Puppet::Util::Log.newdestination(@logs)
-            if defined? $console
-                Puppet.info @method_name
-                Puppet::Util::Log.newdestination(:console)
-                Puppet[:trace] = true
-            end
-            Puppet::Util::Log.level = :debug
-            #$VERBOSE = 1
-        #else    
-        #    Puppet::Util::Log.close
-        #    Puppet::Util::Log.newdestination(@logs)
-        #    Puppet[:httplog] = tempfile()
-        #end
-
-        Puppet[:ignoreschedules] = true
-
-        #@start = Time.now
-    end
-
-    def tempfile
-        if defined? @@tmpfilenum
-            @@tmpfilenum += 1
-        else
-            @@tmpfilenum = 1
-        end
-
-        f = File.join(self.tmpdir(), "tempfile_" + @@tmpfilenum.to_s)
-        @@tmpfiles << f
-        return f
-    end
-    
-    def textmate?
-        if ENV["TM_FILENAME"]
-            return true
-        else
-            return false
-        end
-    end
-
-    def tstdir
-        dir = tempfile()
-        Dir.mkdir(dir)
-        return dir
-    end
-
-    def tmpdir
-        unless defined? @tmpdir and @tmpdir
-            @tmpdir = case Facter["operatingsystem"].value
-                      when "Darwin": "/private/tmp"
-                      when "SunOS": "/var/tmp"
-                      else
-                            "/tmp"
-                      end
-
-
-            @tmpdir = File.join(@tmpdir, "puppettesting" + Process.pid.to_s)
-
-            unless File.exists?(@tmpdir)
-                FileUtils.mkdir_p(@tmpdir)
-                File.chmod(01777, @tmpdir)
-            end
-        end
-        @tmpdir
-    end
-
-    def remove_tmp_files
-        @@tmpfiles.each { |file|
-            unless file =~ /tmp/
-                puts "Not deleting tmpfile %s" % file
-                next
-            end
-            if FileTest.exists?(file)
-                system("chmod -R 755 %s" % file)
-                system("rm -rf %s" % file)
-            end
-        }
-        @@tmpfiles.clear
-    end
-
-    def teardown
-        #@stop = Time.now
-        #File.open("/tmp/test_times.log", ::File::WRONLY|::File::CREAT|::File::APPEND) { |f| f.puts "%0.4f %s %s" % [@stop - @start, @method_name, self.class] }
-        @@cleaners.each { |cleaner| cleaner.call() }
-
-        remove_tmp_files
-
-        @@tmppids.each { |pid|
-            %x{kill -INT #{pid} 2>/dev/null}
-        }
-
-        @@tmppids.clear
-
-        Puppet::Type.allclear
-        Puppet::Util::Storage.clear
-        Puppet.clear
-        Puppet.settings.clear
-        Puppet::Indirector::Indirection.clear_cache
-
-        @memoryatend = Puppet::Util.memory
-        diff = @memoryatend - @memoryatstart
-
-        if diff > 1000
-            Puppet.info "%s#%s memory growth (%s to %s): %s" %
-                [self.class, @method_name, @memoryatstart, @memoryatend, diff]
-        end
-
-        # reset all of the logs
-        Puppet::Util::Log.close
-        @logs.clear
-
-        # Just in case there are processes waiting to die...
-        require 'timeout'
-
-        begin
-            Timeout::timeout(5) do
-                Process.waitall
-            end
-        rescue Timeout::Error
-            # just move on
-        end
-    end
-
-    def logstore
-        @logs = []
-        Puppet::Util::Log.newdestination(@logs)
-    end
-end
-
-require 'puppettest/support'
-require 'puppettest/filetesting'
-require 'puppettest/fakes'
-require 'puppettest/exetest'
-require 'puppettest/parsertesting'
-require 'puppettest/servertest'
-require 'puppettest/testcase'
-
diff --git a/test/lib/puppettest/certificates.rb b/test/lib/puppettest/certificates.rb
deleted file mode 100644
index fbd18e9..0000000
--- a/test/lib/puppettest/certificates.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# Certificate-related helper methods.
-
-require 'puppettest'
-
-module PuppetTest::Certificates
-    include PuppetTest
-
-    def mkPassFile()
-        keyfile = File.join(@dir, "tmpkeyfile")
-        @@tmpfiles << keyfile
-        unless FileTest.exists?(@dir)
-            system("mkdir -p %s" % @dir)
-        end
-        File.open(keyfile, "w", 0600) { |f|
-            f.print "as;dklj23rlkjzdflij23wr"
-        }
-
-        return keyfile
-    end
-
-    def mkCA
-        ca = nil
-        assert_nothing_raised {
-            ca = Puppet::SSLCertificates::CA.new()
-        }
-
-        return ca
-    end
-
-    def mkStore(ca)
-        store = OpenSSL::X509::Store.new
-        store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT
-        store.flags = OpenSSL::X509::V_FLAG_CRL_CHECK
-        store.add_cert(ca.cert)
-        store.add_crl(ca.crl)
-        store
-    end
-
-    def mkcert(hostname)
-        cert = nil
-        assert_nothing_raised {
-            cert = Puppet::SSLCertificates::Certificate.new(:name => hostname)
-            cert.mkcsr
-        }
-        
-        return cert
-    end 
-
-    def mksignedcert(ca = nil, hostname = nil)
-        ca ||= mkCA()
-        hostname ||= "ttltest.example.com"
-
-        cert = nil
-        assert_nothing_raised {
-            cert, cacert = ca.sign(mkcert(hostname).mkcsr)
-        }
-        return cert
-    end
-end
-
diff --git a/test/lib/puppettest/exetest.rb b/test/lib/puppettest/exetest.rb
deleted file mode 100644
index 05de56c..0000000
--- a/test/lib/puppettest/exetest.rb
+++ /dev/null
@@ -1,130 +0,0 @@
-require 'puppettest/servertest'
-
-module PuppetTest::ExeTest
-    include PuppetTest::ServerTest
-
-    def setup
-        super
-        setbindir
-        setlibdir
-    end
-
-    def bindir
-        File.join(basedir, "bin")
-    end
-
-    def sbindir
-        File.join(basedir, "sbin")
-    end
-
-    def setbindir
-        unless ENV["PATH"].split(":").include?(bindir)
-            ENV["PATH"] = [bindir, ENV["PATH"]].join(":")
-        end
-        unless ENV["PATH"].split(":").include?(sbindir)
-            ENV["PATH"] = [sbindir, ENV["PATH"]].join(":")
-        end
-    end
-
-    def setlibdir
-        ENV["RUBYLIB"] = $:.find_all { |dir|
-            dir =~ /puppet/ or dir =~ /\.\./
-        }.join(":")
-    end
-
-    # Run a ruby command.  This explicitly uses ruby to run stuff, since we
-    # don't necessarily know where our ruby binary is, dernit.
-    # Currently unused, because I couldn't get it to work.
-    def rundaemon(*cmd)
-        @ruby ||= %x{which ruby}.chomp
-        cmd = cmd.unshift(@ruby).join(" ")
-
-        out = nil
-        Dir.chdir(bindir()) {
-            out = %x{#{@ruby} #{cmd}}
-        }
-        return out
-    end
-
-    def startmasterd(args = "")
-        output = nil
-
-        manifest = mktestmanifest()
-        args += " --manifest %s" % manifest
-        args += " --confdir %s" % Puppet[:confdir]
-        args += " --rundir %s" % File.join(Puppet[:vardir], "run")
-        args += " --vardir %s" % Puppet[:vardir]
-        args += " --certdnsnames %s" % Puppet[:certdnsnames]
-        args += " --masterport %s" % @@port
-        args += " --user %s" % Puppet::Util::SUIDManager.uid
-        args += " --group %s" % Puppet::Util::SUIDManager.gid
-        args += " --nonodes"
-        args += " --autosign true"
-
-        #if Puppet[:debug]
-        #    args += " --debug"
-        #end
-
-        cmd = "puppetmasterd %s" % args
-
-
-        assert_nothing_raised {
-            output = %x{#{cmd}}.chomp
-        }
-        assert_equal("", output, "Puppetmasterd produced output %s" % output)
-        assert($? == 0, "Puppetmasterd exit status was %s" % $?)
-        sleep(1)
-
-        cleanup do
-            stopmasterd
-            sleep(1)
-        end
-
-        return manifest
-    end
-
-    def stopmasterd(running = true)
-        ps = Facter["ps"].value || "ps -ef"
-
-        pidfile = File.join(Puppet[:vardir], "run", "puppetmasterd.pid")
-
-        pid = nil
-        if FileTest.exists?(pidfile)
-            pid = File.read(pidfile).chomp.to_i
-            File.unlink(pidfile)
-        end
-
-        return unless running
-        if running or pid
-            runningpid = nil
-            %x{#{ps}}.chomp.split(/\n/).each { |line|
-                if line =~ /ruby.+puppetmasterd/
-                    next if line =~ /\.rb/ # skip the test script itself
-                    next if line =~ /^puppet/ # skip masters running as 'puppet'
-                    ary = line.sub(/^\s+/, '').split(/\s+/)
-                    pid = ary[1].to_i
-                end
-            }
-
-        end
-
-        # we default to mandating that it's running, but teardown
-        # doesn't require that
-        if pid
-            if pid == $$
-                raise Puppet::Error, "Tried to kill own pid"
-            end
-            begin
-                Process.kill(:INT, pid)
-            rescue
-                # ignore it
-            end
-        end
-    end
-
-    def teardown
-        stopmasterd(false)
-        super
-    end
-end
-
diff --git a/test/lib/puppettest/fakes.rb b/test/lib/puppettest/fakes.rb
deleted file mode 100644
index 739b098..0000000
--- a/test/lib/puppettest/fakes.rb
+++ /dev/null
@@ -1,204 +0,0 @@
-require 'puppettest'
-
-module PuppetTest
-    # A baseclass for the faketypes.
-    class FakeModel
-        include Puppet::Util
-        class << self
-            attr_accessor :name, :realresource
-            @name = :fakeresource
-        end
-
-        def self.namevar
-            @realresource.namevar
-        end
-
-        def self.validproperties
-            Puppet::Type.type(@name).validproperties
-        end
-
-        def self.validproperty?(name)
-            Puppet::Type.type(@name).validproperty?(name)
-        end
-
-        def self.to_s
-            "Fake%s" % @name.to_s.capitalize
-        end
-
-        def [](param)
-            if @realresource.attrtype(param) == :property
-                @is[param]
-            else
-                @params[param]
-            end
-        end
-
-        def []=(param, value)
-            param = symbolize(param)
-            unless @realresource.validattr?(param)
-                raise Puppet::DevError, "Invalid attribute %s for %s" %
-                    [param, @realresource.name]
-            end
-            if @realresource.attrtype(param) == :property
-                @should[param] = value
-            else
-                @params[param] = value
-            end
-        end
-
-        def initialize(name)
-            @realresource = Puppet::Type.type(self.class.name)
-            raise "Could not find type #{self.class.name}" unless @realresource
-            @is = {}
-            @should = {}
-            @params = {}
-            self[@realresource.namevar] = name
-        end
-
-        def inspect
-            "%s(%s)" % [self.class.to_s.sub(/.+::/, ''), super()]
-        end
-
-        def is(param)
-            @is[param]
-        end
-
-        def should(param)
-            @should[param]
-        end
-
-        def to_hash
-            hash = @params.dup
-            [@is, @should].each do |h|
-                h.each do |p, v|
-                    hash[p] = v
-                end
-            end
-            hash
-        end
-
-        def name
-            self[:name]
-        end
-    end
-
-    class FakeProvider
-        attr_accessor :resource
-        class << self
-            attr_accessor :name, :resource_type, :methods
-        end
-
-        # A very low number, so these never show up as defaults via the standard
-        # algorithms.
-        def self.defaultnum
-            -50
-        end
-
-        # Set up methods to fake things
-        def self.apimethods(*ary)
-            @resource_type.validproperties.each do |property|
-                ary << property unless ary.include? property
-            end
-            attr_accessor(*ary)
-
-            @methods = ary
-        end
-
-        def self.default?
-            false
-        end
-
-        def self.initvars
-            @calls = Hash.new do |hash, key|
-                hash[key] = 0
-            end
-        end
-
-        def self.source
-            self.name
-        end
-
-        def self.supports_parameter?(param)
-            true
-        end
-
-        def self.suitable?
-            true
-        end
-
-        def clear
-            @resource = nil
-        end
-
-        def initialize(resource)
-            @resource = resource
-        end
-
-        def properties
-            self.class.resource_type.validproperties.inject({}) do |props, name|
-                props[name] = self.send(name) || :absent
-                props
-            end
-        end
-    end
-
-    class FakeParsedProvider < FakeProvider
-        def hash
-            ret = {}
-            instance_variables.each do |v|
-                v = v.sub("@", '')
-                if val = self.send(v)
-                    ret[v.intern] = val
-                end
-            end
-
-            return ret
-        end 
-
-        def store(hash)
-            hash.each do |n, v|
-                method = n.to_s + "="
-                if respond_to? method
-                    send(method, v)
-                end
-            end
-        end
-    end
-
-    @@fakeresources = {}
-    @@fakeproviders = {}
-
-    def fakeresource(type, name, options = {})
-        type = type.intern if type.is_a? String
-        unless @@fakeresources.include? type
-            @@fakeresources[type] = Class.new(FakeModel)
-            @@fakeresources[type].name = type
-
-            resource = Puppet::Type.type(type)
-            raise("Could not find type %s" % type) unless resource
-            @@fakeresources[type].realresource = resource
-        end
-
-        obj = @@fakeresources[type].new(name)
-        options.each do |name, val|
-            obj[name] = val
-        end
-        obj
-    end
-
-    module_function :fakeresource
-
-    def fakeprovider(type, resource)
-        type = type.intern if type.is_a? String
-        unless @@fakeproviders.include? type
-            @@fakeproviders[type] = Class.new(FakeModel) do
-                @name = type
-            end
-        end
-
-        @@fakeproviders[type].new(resource)
-    end
-
-    module_function :fakeprovider
-end
-
diff --git a/test/lib/puppettest/fileparsing.rb b/test/lib/puppettest/fileparsing.rb
deleted file mode 100644
index 11de002..0000000
--- a/test/lib/puppettest/fileparsing.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-module PuppetTest::FileParsing
-    # Run an isomorphism test on our parsing process.
-    def fakedataparse(*files)
-        files.each do |file|
-            @provider.stubs(:default_target).returns(file)
-
-            @provider.prefetch
-
-            text = @provider.to_file(@provider.target_records(file))
-            text.gsub!(/^# HEADER.+\n/, '')
-
-            yield if block_given?
-
-            oldlines = File.readlines(file)
-            newlines = text.chomp.split "\n"
-            oldlines.zip(newlines).each do |old, new|
-                if self.is_a?(Test::Unit::TestCase)
-                    assert_equal(old.chomp.gsub(/\s+/, ''), new.gsub(/\s+/, ''), "File was not written back out correctly")
-                else
-                    new.gsub(/\s+/, '').should == old.chomp.gsub(/\s+/, '')
-                end
-            end
-        end
-    end
-end
-
diff --git a/test/lib/puppettest/filetesting.rb b/test/lib/puppettest/filetesting.rb
deleted file mode 100644
index 1aa1cf7..0000000
--- a/test/lib/puppettest/filetesting.rb
+++ /dev/null
@@ -1,230 +0,0 @@
-require 'puppettest'
-
-module PuppetTest::FileTesting
-    include PuppetTest
-    def cycle(comp)
-        trans = nil
-        assert_nothing_raised {
-            trans = comp.evaluate
-        }
-        assert_nothing_raised {
-            trans.evaluate
-        }
-    end
-
-    def randlist(list)
-        num = rand(4)
-        if num == 0
-            num = 1
-        end
-        set = []
-
-        ret = []
-        num.times { |index|
-            item = list[rand(list.length)]
-            if set.include?(item)
-                redo
-            end
-
-            ret.push item
-        }
-        return ret
-    end
-
-    def mkranddirsandfiles(dirs = nil,files = nil,depth = 3)
-        if depth < 0
-            return
-        end
-
-        unless dirs
-            dirs = %w{This Is A Set Of Directories}
-        end
-
-        unless files
-            files = %w{and this is a set of files}
-        end
-
-        tfiles = randlist(files)
-        tdirs = randlist(dirs)
-
-        tfiles.each { |file|
-            File.open(file, "w") { |of|
-                4.times {
-                    of.puts rand(100)
-                }
-            }
-        }
-
-        tdirs.each { |dir|
-            # it shouldn't already exist, but...
-            unless FileTest.exists?(dir)
-                Dir.mkdir(dir)
-                FileUtils.cd(dir) {
-                    mkranddirsandfiles(dirs,files,depth - 1)
-                }
-            end
-        }
-    end
-
-    def file_list(dir)
-        list = nil
-        FileUtils.cd(dir) {
-            list = %x{find . 2>/dev/null}.chomp.split(/\n/)
-        }
-        return list
-    end
-
-    def assert_trees_equal(fromdir,todir)
-        assert(FileTest.directory?(fromdir))
-        assert(FileTest.directory?(todir))
-
-        # verify the file list is the same
-        fromlist = nil
-        FileUtils.cd(fromdir) {
-            fromlist = %x{find . 2>/dev/null}.chomp.split(/\n/).reject { |file|
-            ! FileTest.readable?(file)
-        }.sort
-        }
-        tolist = file_list(todir).sort
-
-        fromlist.sort.zip(tolist.sort).each { |a,b|
-            assert_equal(a, b,
-        "Fromfile %s with length %s does not match tofile %s with length %s" %
-            [a, fromlist.length, b, tolist.length])
-        }
-        #assert_equal(fromlist,tolist)
-
-        # and then do some verification that the files are actually set up
-        # the same
-        checked = 0
-        fromlist.each_with_index { |file,i|
-            fromfile = File.join(fromdir,file)
-            tofile = File.join(todir,file)
-            fromstat = File.stat(fromfile)
-            tostat = File.stat(tofile)
-            [:ftype,:gid,:mode,:uid].each { |method|
-                assert_equal(
-                             fromstat.send(method),
-                             tostat.send(method)
-                            )
-
-                            next if fromstat.ftype == "directory"
-                            if checked < 10 and i % 3 == 0
-                                from = File.open(fromfile) { |f| f.read }
-                                to = File.open(tofile) { |f| f.read }
-
-                                assert_equal(from,to)
-                                checked += 1
-                            end
-            }
-        }
-    end
-
-    def random_files(dir)
-        checked = 0
-        list = file_list(dir)
-        list.reverse.each_with_index { |file,i|
-            path = File.join(dir,file)
-            stat = File.stat(dir)
-            if checked < 10 and (i % 3) == 2
-                unless yield path
-                    next
-                end
-                checked += 1
-            end
-        }
-    end
-
-    def delete_random_files(dir)
-        deleted = []
-        random_files(dir) { |file|
-            stat = File.stat(file)
-            begin
-                if stat.ftype == "directory"
-                    false
-                else
-                    deleted << file
-                    File.unlink(file)
-                    true
-                end
-            rescue => detail
-                # we probably won't be able to open our own secured files
-                puts detail
-                false
-            end
-        }
-
-        return deleted
-    end
-
-    def add_random_files(dir)
-        added = []
-        random_files(dir) { |file|
-            stat = File.stat(file)
-            begin
-                if stat.ftype == "directory"
-                    name = File.join(file,"file" + rand(100).to_s)
-                    File.open(name, "w") { |f|
-                        f.puts rand(10)
-                    }
-                    added << name
-                else
-                    false
-                end
-            rescue => detail
-                # we probably won't be able to open our own secured files
-                puts detail
-                false
-            end
-        }
-        return added
-    end
-
-    def modify_random_files(dir)
-        modded = []
-        random_files(dir) { |file|
-            stat = File.stat(file)
-            begin
-                if stat.ftype == "directory"
-                    false
-                else
-                    File.open(file, "w") { |f|
-                        f.puts rand(10)
-                    }
-                    modded << name
-                    true
-                end
-            rescue => detail
-                # we probably won't be able to open our own secured files
-                puts detail
-                false
-            end
-        }
-        return modded
-    end
-
-    def readonly_random_files(dir)
-        modded = []
-        random_files(dir) { |file|
-            stat = File.stat(file)
-            begin
-                if stat.ftype == "directory"
-                    File.new(file).chmod(0111)
-                else
-                    File.new(file).chmod(0000)
-                end
-                modded << file
-            rescue => detail
-                # we probably won't be able to open our own secured files
-                puts detail
-                false
-            end
-        }
-        return modded
-    end
-
-    def conffile
-        exampledir("root/etc/configfile")
-    end
-end
-
diff --git a/test/lib/puppettest/parsertesting.rb b/test/lib/puppettest/parsertesting.rb
deleted file mode 100644
index 1a08ecb..0000000
--- a/test/lib/puppettest/parsertesting.rb
+++ /dev/null
@@ -1,406 +0,0 @@
-require 'puppettest'
-require 'puppet/rails'
-
-module PuppetTest::ParserTesting
-    include PuppetTest
-    AST = Puppet::Parser::AST
-
-    Compiler = Puppet::Parser::Compiler
-
-    # A fake class that we can use for testing evaluation.
-    class FakeAST
-        attr_writer :evaluate
-
-        def evaluated?
-            defined? @evaluated and @evaluated
-        end
-        
-        def evaluate(*args)
-            @evaluated = true
-            return @evaluate
-        end
-
-        def initialize(val = nil)
-            if val
-                @evaluate = val
-            end
-        end
-        
-        def reset
-            @evaluated = nil
-        end
-
-        def safeevaluate(*args)
-            evaluate()
-        end
-    end
-    
-    def astarray(*args)
-        AST::ASTArray.new(
-            :children => args
-        )
-    end
-
-    def mkcompiler(parser = nil)
-        parser ||= mkparser
-        node = mknode
-        return Compiler.new(node, parser)
-    end
-
-    def mknode(name = nil)
-        require 'puppet/node'
-        name ||= "nodename"
-        Puppet::Network::Handler.handler(:node)
-        Puppet::Node.new(name)
-    end
-
-    def mkinterp
-        Puppet::Parser::Interpreter.new
-    end
-
-    def mkparser(args = {})
-        Puppet::Parser::Parser.new(args)
-    end
-
-    def mkscope(hash = {})
-        hash[:parser] ||= mkparser
-        compiler ||= mkcompiler(hash[:parser])
-        compiler.topscope.source = (hash[:parser].findclass("", "") || hash[:parser].newclass(""))
-
-        unless compiler.topscope.source
-            raise "Could not find source for scope"
-        end
-        # Make the 'main' stuff
-        compiler.send(:evaluate_main)
-        compiler.topscope
-    end
-
-    def classobj(name, hash = {})
-        hash[:file] ||= __FILE__
-        hash[:line] ||= __LINE__
-        hash[:type] ||= name
-        AST::HostClass.new(hash)
-    end
-
-    def tagobj(*names)
-        args = {}
-        newnames = names.collect do |name|
-            if name.is_a? AST
-                name
-            else
-                nameobj(name)
-            end
-        end
-        args[:type] = astarray(*newnames)
-        assert_nothing_raised("Could not create tag %s" % names.inspect) {
-            return AST::Tag.new(args)
-        }
-    end
-
-    def resourcedef(type, title, params)
-        unless title.is_a?(AST)
-            title = stringobj(title)
-        end
-        assert_nothing_raised("Could not create %s %s" % [type, title]) {
-            return AST::Resource.new(
-                :file => __FILE__,
-                :line => __LINE__,
-                :title => title,
-                :type => type,
-                :params => resourceinst(params)
-            )
-        }
-    end
-
-    def virt_resourcedef(*args)
-        res = resourcedef(*args)
-        res.virtual = true
-        res
-    end
-
-    def resourceoverride(type, title, params)
-        assert_nothing_raised("Could not create %s %s" % [type, name]) {
-            return AST::ResourceOverride.new(
-                :file => __FILE__,
-                :line => __LINE__,
-                :object => resourceref(type, title),
-                :type => type,
-                :params => resourceinst(params)
-            )
-        }
-    end
-
-    def resourceref(type, title)
-        assert_nothing_raised("Could not create %s %s" % [type, title]) {
-            return AST::ResourceReference.new(
-                :file => __FILE__,
-                :line => __LINE__,
-                :type => type,
-                :title => stringobj(title)
-            )
-        }
-    end
-
-    def fileobj(path, hash = {"owner" => "root"})
-        assert_nothing_raised("Could not create file %s" % path) {
-            return resourcedef("file", path, hash)
-        }
-    end
-
-    def nameobj(name)
-        assert_nothing_raised("Could not create name %s" % name) {
-            return AST::Name.new(
-                                 :file => tempfile(),
-                                 :line => rand(100),
-                                 :value => name
-                                )
-        }
-    end
-
-    def typeobj(name)
-        assert_nothing_raised("Could not create type %s" % name) {
-            return AST::Type.new(
-                                 :file => tempfile(),
-                                 :line => rand(100),
-                                 :value => name
-                                )
-        }
-    end
-
-    def nodedef(name)
-        assert_nothing_raised("Could not create node %s" % name) {
-            return AST::NodeDef.new(
-                :file => tempfile(),
-                :line => rand(100),
-                :names => nameobj(name),
-                :code => AST::ASTArray.new(
-                    :children => [
-                        varobj("%svar" % name, "%svalue" % name),
-                        fileobj("/%s" % name)
-                    ]
-                )
-            )
-        }
-    end
-
-    def resourceinst(hash)
-        assert_nothing_raised("Could not create resource instance") {
-            params = hash.collect { |param, value|
-            resourceparam(param, value)
-        }
-        return AST::ResourceInstance.new(
-                                   :file => tempfile(),
-                                   :line => rand(100),
-                                   :children => params
-                                  )
-        }
-    end
-
-    def resourceparam(param, value)
-        # Allow them to pass non-strings in
-        if value.is_a?(String)
-            value = stringobj(value)
-        end
-        assert_nothing_raised("Could not create param %s" % param) {
-            return AST::ResourceParam.new(
-                                        :file => tempfile(),
-                                        :line => rand(100),
-                                        :param => param,
-                                        :value => value
-                                       )
-        }
-    end
-
-    def stringobj(value)
-        AST::String.new(
-                        :file => tempfile(),
-                        :line => rand(100),
-                        :value => value
-                       )
-    end
-
-    def varobj(name, value)
-        unless value.is_a? AST
-            value = stringobj(value)
-        end
-        assert_nothing_raised("Could not create %s code" % name) {
-            return AST::VarDef.new(
-                                   :file => tempfile(),
-                                   :line => rand(100),
-                                   :name => nameobj(name),
-                                   :value => value
-                                  )
-        }
-    end
-
-    def varref(name)
-        assert_nothing_raised("Could not create %s variable" % name) {
-            return AST::Variable.new(
-                                     :file => __FILE__,
-                                     :line => __LINE__,
-                                     :value => name
-                                    )
-        }
-    end
-
-    def argobj(name, value)
-        assert_nothing_raised("Could not create %s compargument" % name) {
-            return AST::CompArgument.new(
-                                         :children => [nameobj(name), stringobj(value)]
-                                        )
-        }
-    end
-
-    def defaultobj(type, params)
-        pary = []
-        params.each { |p,v|
-            pary << AST::ResourceParam.new(
-                                         :file => __FILE__,
-                                         :line => __LINE__,
-                                         :param => p,
-                                         :value => stringobj(v)
-                                        )
-        }
-        past = AST::ASTArray.new(
-                                 :file => __FILE__,
-                                 :line => __LINE__,
-                                 :children => pary
-                                )
-
-        assert_nothing_raised("Could not create defaults for %s" % type) {
-            return AST::ResourceDefaults.new(
-                :file => __FILE__,
-                :line => __LINE__,
-                :type => type,
-                :params => past
-            )
-        }
-    end
-
-    def taggedobj(name, ftype = :statement)
-        functionobj("tagged", name, ftype)
-    end
-
-    def functionobj(function, name, ftype = :statement)
-        func = nil
-        assert_nothing_raised do
-            func = Puppet::Parser::AST::Function.new(
-                :name => function,
-                :ftype => ftype,
-                :arguments => AST::ASTArray.new(
-                    :children => [nameobj(name)]
-                )
-            )
-        end
-
-        return func
-    end
-
-    # This assumes no nodes
-    def assert_creates(manifest, *files)
-        interp = nil
-        oldmanifest = Puppet[:manifest]
-        Puppet[:manifest] = manifest
-        assert_nothing_raised {
-            interp = Puppet::Parser::Interpreter.new
-        }
-
-        trans = nil
-        assert_nothing_raised {
-            trans = interp.compile(mknode)
-        }
-
-        config = nil
-        assert_nothing_raised {
-            config = trans.extract.to_catalog
-        }
-
-        config.apply
-
-        files.each do |file|
-            assert(FileTest.exists?(file), "Did not create %s" % file)
-        end
-    ensure
-        Puppet[:manifest] = oldmanifest
-    end
-
-    def mk_transobject(file = "/etc/passwd")
-        obj = nil
-        assert_nothing_raised {
-            obj = Puppet::TransObject.new("file", file)
-            obj["owner"] = "root"
-            obj["mode"] = "644"
-        }
-
-        return obj
-    end
-
-    def mk_transbucket(*resources)
-        bucket = nil
-        assert_nothing_raised {
-            bucket = Puppet::TransBucket.new
-            bucket.name = "yayname"
-            bucket.type = "yaytype"
-        }
-
-        resources.each { |o| bucket << o }
-
-        return bucket
-    end
-
-    # Make a tree of resources, yielding if desired
-    def mk_transtree(depth = 4, width = 2)
-        top = nil
-        assert_nothing_raised {
-            top = Puppet::TransBucket.new
-            top.name = "top"
-            top.type = "bucket"
-        }
-
-        bucket = top
-
-        file = tempfile()
-        depth.times do |i|
-            resources = []
-            width.times do |j|
-                path = tempfile + i.to_s
-                obj = Puppet::TransObject.new("file", path)
-                obj["owner"] = "root"
-                obj["mode"] = "644"
-
-                # Yield, if they want
-                if block_given?
-                    yield(obj, i, j)
-                end
-
-                resources << obj
-            end
-
-            newbucket = mk_transbucket(*resources)
-
-            bucket.push newbucket
-            bucket = newbucket
-        end
-
-        return top
-    end
-
-    # Take a list of AST resources, evaluate them, and return the results
-    def assert_evaluate(children)
-        top = nil
-        assert_nothing_raised("Could not create top object") {
-            top = AST::ASTArray.new(
-                :children => children
-            )
-        }
-
-        trans = nil
-        scope = nil
-        assert_nothing_raised {
-            scope = Puppet::Parser::Scope.new()
-            trans = scope.evaluate(:ast => top)
-        }
-
-        return trans
-    end
-end
diff --git a/test/lib/puppettest/railstesting.rb b/test/lib/puppettest/railstesting.rb
deleted file mode 100644
index a9d8601..0000000
--- a/test/lib/puppettest/railstesting.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-module PuppetTest::RailsTesting
-    Parser = Puppet::Parser
-    AST = Puppet::Parser::AST
-    include PuppetTest::ParserTesting
-
-    def teardown
-        super
-
-        # If we don't clean up the connection list, then the rails
-        # lib will still think it's connected.
-        if Puppet.features.rails?
-            ActiveRecord::Base.clear_active_connections!
-        end
-    end
-
-    def railsinit
-        Puppet::Rails.init
-    end
-
-    def railsteardown
-        if Puppet[:dbadapter] != "sqlite3"
-            Puppet::Rails.teardown
-        end
-    end
-
-    def railsresource(type = "file", title = "/tmp/testing", params = {})
-        railsteardown
-        railsinit
-        
-        # We need a host for resources
-        #host = Puppet::Rails::Host.new(:name => Facter.value("hostname"))
-
-        # Now build a resource
-        resources = []
-        resources << mkresource(:type => type, :title => title, :exported => true,
-                   :params => params)
-
-        # Now collect our facts
-        facts = Facter.to_hash
-
-        # Now try storing our crap
-        host = nil 
-        node = mknode(facts["hostname"])
-        node.parameters = facts
-        assert_nothing_raised {
-            host = Puppet::Rails::Host.store(node, resources)
-        }        
-
-        # Now save the whole thing
-        host.save
-    end
-end
-
diff --git a/test/lib/puppettest/reporttesting.rb b/test/lib/puppettest/reporttesting.rb
deleted file mode 100644
index 4d88c3c..0000000
--- a/test/lib/puppettest/reporttesting.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-module PuppetTest::Reporttesting
-    def fakereport
-        # Create a bunch of log messages in an array.
-        report = Puppet::Transaction::Report.new
-
-        3.times { |i|
-            # We have to use warning so that the logs always happen
-            log = Puppet.warning("Report test message %s" % i)
-
-            report.newlog(log)
-        }
-
-        return report
-    end
-end
-
diff --git a/test/lib/puppettest/resourcetesting.rb b/test/lib/puppettest/resourcetesting.rb
deleted file mode 100644
index d4469a2..0000000
--- a/test/lib/puppettest/resourcetesting.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-module PuppetTest::ResourceTesting
-    Parser = Puppet::Parser
-    AST = Puppet::Parser::AST
-
-    def mkevaltest(parser = nil)
-        parser ||= mkparser
-        @parser.newdefine("evaltest",
-            :arguments => [%w{one}, ["two", stringobj("755")]],
-            :code => resourcedef("file", "/tmp",
-                "owner" => varref("one"), "mode" => varref("two"))
-        )
-    end
-
-    def mkresource(args = {})
-        args[:source] ||= "source"
-        args[:scope] ||= mkscope
-
-        {:type => "resource", :title => "testing",
-            :source => "source", :scope => "scope"}.each do |param, value|
-                args[param] ||= value
-        end
-
-        params = args[:params] || {:one => "yay", :three => "rah"}
-        if args[:params] == :none
-            args.delete(:params)
-        else
-            args[:params] = paramify args[:source], params
-        end
-
-        Parser::Resource.new(args)
-    end
-
-    def param(name, value, source)
-        Parser::Resource::Param.new(:name => name, :value => value, :source => source)
-    end
-
-    def paramify(source, hash)
-        hash.collect do |name, value|
-            Parser::Resource::Param.new(
-                :name => name, :value => value, :source => source
-            )
-        end
-    end
-end
-
diff --git a/test/lib/puppettest/runnable_test.rb b/test/lib/puppettest/runnable_test.rb
deleted file mode 100644
index 6dab1b7..0000000
--- a/test/lib/puppettest/runnable_test.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# Manage whether a test is runnable.
-module PuppetTest
-    module RunnableTest
-        # Confine this test based on specified criteria.  The keys of the
-        # hash should be the message to use if the test is not suitable,
-        # and the values should be either 'true' or 'false'; true values
-        # mean the test is suitable.
-        def confine(hash)
-            @confines ||= {}
-            hash.each do |message, result|
-                @confines[message] = result
-            end
-        end
-
-        attr_reader :messages
-
-        # Evaluate all of our tests to see if any of them are false
-        # and thus whether this test is considered not runnable.
-        def runnable?
-            if superclass.respond_to?(:runnable?) and ! superclass.runnable?
-                return false
-            end
-            @messages ||= []
-            return false unless @messages.empty?
-            return true unless defined? @confines
-            @confines.find_all do |message, result|
-                ! result
-            end.each do |message, result|
-                @messages << message
-            end
-
-            return @messages.empty?
-        end
-    end
-end
diff --git a/test/lib/puppettest/servertest.rb b/test/lib/puppettest/servertest.rb
deleted file mode 100644
index 11c24f5..0000000
--- a/test/lib/puppettest/servertest.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-require 'puppettest'
-require 'puppet/network/http_server/webrick'
-
-module PuppetTest::ServerTest
-    include PuppetTest
-    def setup
-        super
-
-        if defined? @@port
-            @@port += 1
-        else
-            @@port = 20000
-        end
-    end
-
-    # create a simple manifest that just creates a file
-    def mktestmanifest
-        file = File.join(Puppet[:confdir], "%ssite.pp" % (self.class.to_s + "test"))
-        #@createdfile = File.join(tmpdir(), self.class.to_s + "manifesttesting" +
-        #    "_" + @method_name)
-        @createdfile = tempfile()
-
-        File.open(file, "w") { |f|
-            f.puts "file { \"%s\": ensure => file, mode => 755 }\n" % @createdfile
-        }
-
-        @@tmpfiles << @createdfile
-        @@tmpfiles << file
-
-        return file
-    end
-
-    # create a server, forked into the background
-    def mkserver(handlers = nil)
-        Puppet[:name] = "puppetmasterd"
-        # our default handlers
-        unless handlers
-            handlers = {
-                :CA => {}, # so that certs autogenerate
-                :Master => {
-                    :Manifest => mktestmanifest(),
-                    :UseNodes => false
-                },
-            }
-        end
-
-        # then create the actual server
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::HTTPServer::WEBrick.new(
-                :Port => @@port,
-                :Handlers => handlers
-            )
-        }
-
-        # fork it
-        spid = fork {
-            trap(:INT) { server.shutdown }
-            server.start
-        }
-
-        # and store its pid for killing
-        @@tmppids << spid
-
-        # give the server a chance to do its thing
-        sleep 1 
-        return spid
-    end
-
-end
-
diff --git a/test/lib/puppettest/support.rb b/test/lib/puppettest/support.rb
deleted file mode 100644
index c81b5cd..0000000
--- a/test/lib/puppettest/support.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'puppettest'
-
-module PuppetTest::Support
-end
-
-require 'puppettest/support/assertions'
-require 'puppettest/support/helpers'
-require 'puppettest/support/utils'
diff --git a/test/lib/puppettest/support/assertions.rb b/test/lib/puppettest/support/assertions.rb
deleted file mode 100644
index 2159c8d..0000000
--- a/test/lib/puppettest/support/assertions.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-require 'puppettest'
-require 'puppettest/support/utils'
-require 'fileutils'
-
-module PuppetTest
-    include PuppetTest::Support::Utils
-    def assert_logged(level, regex, msg = nil)
-        # Skip verifying logs that we're not supposed to send.
-        return unless Puppet::Util::Log.sendlevel?(level)
-        r = @logs.detect { |l| l.level == level and l.message =~ regex }
-        @logs.clear
-        assert(r, msg)
-    end
-
-    def assert_uid_gid(uid, gid, filename)
-        flunk "Must be uid 0 to run these tests" unless Process.uid == 0
-
-        fork do 
-            Puppet::Util::SUIDManager.gid = gid
-            Puppet::Util::SUIDManager.uid = uid
-            # FIXME: use the tempfile method from puppettest.rb
-            system("mkfifo "+filename)
-            f = File.open(filename, "w")
-            f << "#{Puppet::Util::SUIDManager.uid}\n#{Puppet::Util::SUIDManager.gid}\n"
-            yield if block_given?
-        end
-
-        # avoid a race.
-        true while !File.exists? filename
-
-        f = File.open(filename, "r")
-
-        a = f.readlines 
-        assert_equal(uid, a[0].chomp.to_i, "UID was incorrect")
-        assert_equal(gid, a[1].chomp.to_i, "GID was incorrect")
-        FileUtils.rm(filename)
-    end
-
-    def assert_rollback_events(trans, events, msg = nil)
-        run_events(:rollback, trans, events, msg)
-    end
-
-    def assert_events(events, *resources)
-        trans = nil
-        comp = nil
-        msg = nil
-
-        unless events.is_a? Array
-            raise Puppet::DevError, "Incorrect call of assert_events"
-        end
-        if resources[-1].is_a? String
-            msg = resources.pop
-        end
-
-        config = resources2catalog(*resources)
-        transaction = Puppet::Transaction.new(config)
-
-        run_events(:evaluate, transaction, events, msg)
-
-        return transaction
-    end
-
-    # A simpler method that just applies what we have.
-    def assert_apply(*resources)
-        config = resources2catalog(*resources)
-
-        events = nil
-        assert_nothing_raised("Failed to evaluate") {
-            events = config.apply.events
-        }
-        events
-    end
-end
diff --git a/test/lib/puppettest/support/collection.rb b/test/lib/puppettest/support/collection.rb
deleted file mode 100644
index 43df030..0000000
--- a/test/lib/puppettest/support/collection.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-
-module PuppetTest::Support::Collection
-    def run_collection_queries(form)
-        {true => [%{title == "/tmp/testing"}, %{(title == "/tmp/testing")}, %{group == bin},
-            %{title == "/tmp/testing" and group == bin}, %{title == bin or group == bin},
-            %{title == "/tmp/testing" or title == bin}, %{title == "/tmp/testing"},
-            %{(title == "/tmp/testing" or title == bin) and group == bin}],
-        false => [%{title == bin}, %{title == bin or (title == bin and group == bin)},
-            %{title != "/tmp/testing"}, %{title != "/tmp/testing" and group != bin}]
-        }.each do |res, ary|
-            ary.each do |str|
-                if form == :virtual
-                    code = "File <| #{str} |>"
-                else
-                    code = "File <<| #{str} |>>"
-                end
-                parser = mkparser
-                query = nil
-
-                assert_nothing_raised("Could not parse '#{str}'") do
-                    query = parser.parse(code).classes[""].code[0].query
-                end
-
-                yield str, res, query
-            end
-        end
-    end
-end
-
diff --git a/test/lib/puppettest/support/helpers.rb b/test/lib/puppettest/support/helpers.rb
deleted file mode 100644
index 5b1872d..0000000
--- a/test/lib/puppettest/support/helpers.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'puppettest'
-
-module PuppetTest
-    # NOTE: currently both of these will produce bogus results on Darwin due to the wonderful
-    # UID of nobody.
-    def nonrootuser
-        Etc.passwd { |user|
-            if user.uid != Puppet::Util::SUIDManager.uid and user.uid > 0 and user.uid < 255
-                return user
-            end
-        }
-    end
-
-    def nonrootgroup
-        Etc.group { |group|
-            if group.gid != Puppet::Util::SUIDManager.gid and group.gid > 0 and group.gid < 255
-                return group
-            end
-        }
-    end
-end
-
diff --git a/test/lib/puppettest/support/resources.rb b/test/lib/puppettest/support/resources.rb
deleted file mode 100755
index 255c555..0000000
--- a/test/lib/puppettest/support/resources.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2006-11-29.
-#  Copyright (c) 2006. All rights reserved.
-
-module PuppetTest::Support::Resources
-    def tree_resource(name)
-        Puppet::Type.type(:file).create :title => name, :path => "/tmp/#{name}", :mode => 0755
-    end
-    
-    def tree_container(name)
-        Puppet::Type::Component.create :name => name, :type => "yay"
-    end
-    
-    def treenode(config, name, *resources)
-        comp = tree_container name
-        resources.each do |resource| 
-            if resource.is_a?(String)
-                resource = tree_resource(resource)
-            end
-            config.add_edge(comp, resource)
-            config.add_resource resource unless config.resource(resource.ref)
-        end
-        return comp
-    end
-    
-    def mktree
-        catalog = Puppet::Node::Catalog.new do |config|
-            one = treenode(config, "one", "a", "b")
-            two = treenode(config, "two", "c", "d")
-            middle = treenode(config, "middle", "e", "f", two)
-            top = treenode(config, "top", "g", "h", middle, one)
-        end
-        
-        return catalog
-    end
-end
diff --git a/test/lib/puppettest/support/utils.rb b/test/lib/puppettest/support/utils.rb
deleted file mode 100644
index 654531c..0000000
--- a/test/lib/puppettest/support/utils.rb
+++ /dev/null
@@ -1,178 +0,0 @@
-require 'puppettest'
-
-module PuppetTest::Support
-end
-module PuppetTest::Support::Utils
-    def gcdebug(type)
-        Puppet.warning "%s: %s" % [type, ObjectSpace.each_object(type) { |o| }]
-    end
-
-    #
-    # TODO: I think this method needs to be renamed to something a little more
-    # explanatory.
-    #
-
-    def newobj(type, name, hash)
-        transport = Puppet::TransObject.new(name, "file")
-        transport[:path] = path
-        transport[:ensure] = "file"
-        assert_nothing_raised {
-            file = transport.to_type
-        }
-    end
-
-    # Turn a list of resources, or possibly a catalog and some resources,
-    # into a catalog object.
-    def resources2catalog(*resources)
-        if resources[0].is_a?(Puppet::Node::Catalog)
-            config = resources.shift
-            unless resources.empty?
-                resources.each { |r| config.add_resource r }
-            end
-        elsif resources[0].is_a?(Puppet.type(:component))
-            raise ArgumentError, "resource2config() no longer accpts components"
-            comp = resources.shift
-            comp.delve
-        else
-            config = Puppet::Node::Catalog.new
-            resources.each { |res| config.add_resource res }
-        end
-        return config
-    end
-
-    # stop any services that might be hanging around
-    def stopservices
-        if stype = Puppet::Type.type(:service)
-            stype.each { |service|
-                service[:ensure] = :stopped
-                service.evaluate
-            }
-        end
-    end
-
-    # TODO: rewrite this to use the 'etc' module.
-
-    # Define a variable that contains the name of my user.
-    def setme
-        # retrieve the user name
-        id = %x{id}.chomp
-        if id =~ /uid=\d+\(([^\)]+)\)/
-            @me = $1
-        else
-            puts id
-        end
-        unless defined? @me
-            raise "Could not retrieve user name; 'id' did not work"
-        end
-    end
-
-    # Define a variable that contains a group I'm in.
-    def set_mygroup
-        # retrieve the user name
-        group = %x{groups}.chomp.split(/ /)[0]
-	unless group
-	    raise "Could not find group to set in @mygroup"
-	end
-	@mygroup = group
-    end
-
-    def run_events(type, trans, events, msg)
-        case type
-        when :evaluate, :rollback: # things are hunky-dory
-        else
-            raise Puppet::DevError, "Incorrect run_events type"
-        end
-
-        method = type
-
-        newevents = nil
-        assert_nothing_raised("Transaction %s %s failed" % [type, msg]) {
-            newevents = trans.send(method).reject { |e| e.nil? }.collect { |e|
-                e.name
-            }
-        }
-
-        assert_equal(events, newevents, "Incorrect %s %s events" % [type, msg])
-
-        return trans
-    end
-
-    # If there are any fake data files, retrieve them
-    def fakedata(dir)
-        ary = [basedir, "test"]
-        ary += dir.split("/")
-        dir = File.join(ary)
-
-        unless FileTest.exists?(dir)
-            raise Puppet::DevError, "No fakedata dir %s" % dir
-        end
-        files = Dir.entries(dir).reject { |f| f =~ /^\./ }.collect { |f|
-            File.join(dir, f)
-        }
-
-        return files
-    end
-
-    def fakefile(name)
-        ary = [PuppetTest.basedir, "test"]
-        ary += name.split("/")
-        file = File.join(ary)
-        unless FileTest.exists?(file)
-            raise Puppet::DevError, "No fakedata file %s" % file
-        end
-        return file
-    end
-
-    # wrap how to retrieve the masked mode
-    def filemode(file)
-        File.stat(file).mode & 007777
-    end
-
-    def memory
-        Puppet::Util.memory
-    end
-
-    # a list of files that we can parse for testing
-    def textfiles
-        textdir = datadir "snippets"
-        Dir.entries(textdir).reject { |f|
-            f =~ /^\./ or f =~ /fail/
-        }.each { |f|
-            yield File.join(textdir, f)
-        }
-    end
-
-    def failers
-        textdir = datadir "failers"
-        # only parse this one file now
-        files = Dir.entries(textdir).reject { |file|
-            file =~ %r{\.swp}
-        }.reject { |file|
-            file =~ %r{\.disabled}
-        }.collect { |file|
-            File.join(textdir,file)
-        }.find_all { |file|
-            FileTest.file?(file)
-        }.sort.each { |file|
-            Puppet.debug "Processing %s" % file
-            yield file
-        }
-    end
-
-    def mk_catalog(*resources)
-        if resources[0].is_a?(String)
-            name = resources.shift
-        else
-            name = :testing
-        end
-        config = Puppet::Node::Catalog.new :testing do |conf|
-            resources.each { |resource| conf.add_resource resource }
-        end
-
-        return config
-    end
-end
-
-module PuppetTest
-    include PuppetTest::Support::Utils
-end
diff --git a/test/lib/puppettest/testcase.rb b/test/lib/puppettest/testcase.rb
deleted file mode 100644
index 15c8358..0000000
--- a/test/lib/puppettest/testcase.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2007-03-05.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'puppettest'
-require 'puppettest/runnable_test'
-
-class PuppetTest::TestCase < Test::Unit::TestCase
-	include PuppetTest
-    extend PuppetTest::RunnableTest
-
-    def self.suite
-        # Always skip this parent class.  It'd be nice if there were a
-        # "supported" way to do this.
-        if self == PuppetTest::TestCase
-            suite = Test::Unit::TestSuite.new(name)
-            return suite
-        elsif self.runnable?
-            return super
-        else
-            if defined? $console
-                puts "Skipping %s: %s" % [name, @messages.join(", ")]
-            end
-            suite = Test::Unit::TestSuite.new(name)
-            return suite
-        end
-    end
-end
diff --git a/test/lib/rake/puppet_test_loader.rb b/test/lib/rake/puppet_test_loader.rb
deleted file mode 100644
index be3319c..0000000
--- a/test/lib/rake/puppet_test_loader.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-
-require 'test/unit/autorunner'
-require 'getoptlong'
-require 'puppettest'
-
-args = PuppetTest.munge_argv
-
-args.each { |f| require f unless f =~ /^-/  }
-
-runner = Test::Unit::AutoRunner.new(false)
-runner.process_args
-
-unless runner.run
-    exit 14
-end
-
diff --git a/test/lib/rake/puppet_testtask.rb b/test/lib/rake/puppet_testtask.rb
deleted file mode 100644
index a4b8d8b..0000000
--- a/test/lib/rake/puppet_testtask.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rake'
-require 'rake/testtask'
-
-module Rake
-    class PuppetTestTask < Rake::TestTask
-        def rake_loader
-            if Integer(RUBY_VERSION.split(/\./)[2]) < 4
-                file = super
-            else
-                file = find_file('rake/puppet_test_loader') or
-                    fail "unable to find rake test loader"
-            end
-            return file
-        end
-    end
-end
-
diff --git a/test/lib/stubba.rb b/test/lib/stubba.rb
deleted file mode 100644
index 747054c..0000000
--- a/test/lib/stubba.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-# for backwards compatibility
-require 'mocha'
diff --git a/test/network/authconfig.rb b/test/network/authconfig.rb
deleted file mode 100755
index 3a05096..0000000
--- a/test/network/authconfig.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-
-require 'puppet/network/authconfig'
-
-class TestAuthConfig < Test::Unit::TestCase
-	include PuppetTest
-
-    def request(call, client, ip)
-        r = Puppet::Network::ClientRequest.new(client, ip, false)
-        h, m = call.split(".")
-        r.handler = h
-        r.method = m
-        r
-    end
-
-    def test_parsingconfigfile
-        file = tempfile()
-        assert(Puppet[:authconfig], "No config path")
-
-        Puppet[:authconfig] = file
-
-        File.open(file, "w") { |f|
-            f.puts "[pelementserver.describe]
-    allow *.madstop.com
-    deny 10.10.1.1
-
-[fileserver]
-    allow *.madstop.com
-    deny 10.10.1.1
-
-[fileserver.list]
-    allow 10.10.1.1
-"
-        }
-
-        config = nil
-        assert_nothing_raised {
-            config = Puppet::Network::AuthConfig.new(file)
-        }
-
-        assert_nothing_raised {
-            assert(config.allowed?(request("pelementserver.describe",
-                "culain.madstop.com", "1.1.1.1")), "Did not allow host")
-            assert(! config.allowed?(request("pelementserver.describe",
-                "culain.madstop.com", "10.10.1.1")), "Allowed host")
-            assert(config.allowed?(request("fileserver.yay",
-                "culain.madstop.com", "10.1.1.1")), "Did not allow host to fs")
-            assert(! config.allowed?(request("fileserver.yay",
-                "culain.madstop.com", "10.10.1.1")), "Allowed host to fs")
-            assert(config.allowed?(request("fileserver.list",
-                "culain.madstop.com", "10.10.1.1")), "Did not allow host to fs.list")
-        }
-    end
-
-    def test_singleton
-        auth = nil
-        assert_nothing_raised { auth = Puppet::Network::AuthConfig.main }
-        assert(auth, "did not get main authconfig")
-
-        other = nil
-        assert_nothing_raised { other = Puppet::Network::AuthConfig.main }
-        assert_equal(auth.object_id, other.object_id,
-            "did not get same authconfig from class")
-    end
-end
-
-
diff --git a/test/network/authorization.rb b/test/network/authorization.rb
deleted file mode 100755
index 23ec8f9..0000000
--- a/test/network/authorization.rb
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/authorization'
-require 'mocha'
-
-class TestAuthConfig < Test::Unit::TestCase
-	include PuppetTest
-
-    # A mock class for authconfig
-    class FakeAuth
-        class << self
-            attr_accessor :allow, :exists
-        end
-        def allowed?(req)
-            self.class.allow
-        end
-        def exists?
-            self.class.exists
-        end
-    end
-
-    class AuthTest
-        include Puppet::Network::Authorization
-
-        def clear
-            @loaded.clear
-        end
-
-        def load(name)
-            @loaded ||= []
-            @loaded << name
-        end
-
-        def handler_loaded?(name)
-            @loaded ||= []
-            @loaded.include?(name)
-        end
-    end
-
-    def setup
-        super
-        @obj = AuthTest.new
-
-        # Override the authconfig to make life easier
-        class << @obj
-            def authconfig
-                @authconfig ||= FakeAuth.new
-                @authconfig
-            end
-        end
-        @request = Puppet::Network::ClientRequest.new("host", "ip", false)
-        @request.handler = "foo"
-        @request.method = "bar"
-    end
-
-    def test_authconfig
-        obj = AuthTest.new
-        auth = nil
-        assert_nothing_raised { auth = obj.send(:authconfig) }
-        assert(auth, "did not get auth")
-        assert_equal(Puppet::Network::AuthConfig.main.object_id, auth.object_id,
-            "did not get main authconfig")
-    end
-
-    def test_authorize
-        # Make sure that unauthenticated clients can do puppetca stuff, but
-        # nothing else.
-        @request.handler = "puppetca"
-        @request.method = "yay"
-        assert(@obj.authorized?(@request), "Did not allow unauthenticated ca call")
-        assert_logged(:notice, /Allowing/, "did not log call")
-        @request.handler = "other"
-        assert(! @obj.authorized?(@request), "Allowed unauthencated other call")
-        assert_logged(:notice, /Denying/, "did not log call")
-
-        @request.authenticated = true
-        # We start without the namespace auth file, so everything should
-        # start out denied
-        assert(! @obj.authorized?(@request), "Allowed call with no config file")
-        assert_logged(:notice, /Denying/, "did not log call")
-
-        # Now set our name to the master, so calls are allowed
-        Puppet[:name] = "puppetmasterd"
-        assert(@obj.authorized?(@request),
-            "Denied call with no config file and master")
-        assert_logged(:debug, /Allowing/, "did not log call")
-
-        # Now "create" the file, so we do real tests
-        FakeAuth.exists = true
-
-        # We start out denying
-        assert(! @obj.authorized?(@request), "Allowed call when denying")
-        assert_logged(:notice, /Denying/, "did not log call")
-
-        FakeAuth.allow = true
-        assert(@obj.authorized?(@request), "Denied call when allowing")
-        assert_logged(:debug, /Allowing/, "did not log call")
-    end
-
-    def test_available?
-        # Start out false
-        assert(! @obj.available?(@request), "Defaulted to true")
-        assert_logged(:warning, /requested unavailable/, "did not log call")
-
-        @obj.load(@request.handler)
-        assert(@obj.available?(@request), "did not see it loaded")
-    end
-
-    # Make sure we raise things appropriately
-    def test_verify
-        # Start out unavailabl
-        assert_raise(Puppet::Network::InvalidClientRequest) do
-            @obj.verify(@request)
-        end
-        class << @obj
-            def available?(req)
-                true
-            end
-        end
-        assert_raise(Puppet::Network::InvalidClientRequest) do
-            @obj.verify(@request)
-        end
-        class << @obj
-            def authorized?(req)
-                true
-            end
-        end
-        assert_nothing_raised do
-            @obj.verify(@request)
-        end
-    end
-end
-
-
diff --git a/test/network/authstore.rb b/test/network/authstore.rb
deleted file mode 100755
index ad4a4f1..0000000
--- a/test/network/authstore.rb
+++ /dev/null
@@ -1,449 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-require 'puppet/network/authstore'
-
-class TestAuthStore < Test::Unit::TestCase
-	include PuppetTest
-    Declaration = Puppet::Network::AuthStore::Declaration
-    def mkstore
-        store = nil
-        assert_nothing_raised {
-            store = Puppet::Network::AuthStore.new
-        }
-
-        return store
-    end
-
-    def setup
-        super
-        @store = mkstore
-    end
-
-    def test_localallow
-        Puppet[:trace] = false
-        assert_nothing_raised {
-            assert(@store.allowed?(nil, nil), "Store disallowed local access")
-        }
-
-        assert_raise(Puppet::DevError) {
-            @store.allowed?("kirby.madstop.com", nil)
-        }
-
-        assert_raise(Puppet::DevError) {
-            @store.allowed?(nil, "192.168.0.1")
-        }
-    end
-
-    def test_simpleips
-        %w{
-            192.168.0.5
-            7.0.48.7
-        }.each { |ip|
-            assert_nothing_raised("Failed to @store IP address %s" % ip) {
-                @store.allow(ip)
-            }
-
-            assert(@store.allowed?("hosttest.com", ip), "IP %s not allowed" % ip)
-        }
-
-        #assert_raise(Puppet::AuthStoreError) {
-        #    @store.allow("192.168.674.0")
-        #}
-
-        assert_raise(Puppet::AuthStoreError) {
-            @store.allow("192.168.0")
-        }
-    end
-
-    def test_ipranges
-        %w{
-            192.168.0.*
-            192.168.1.0/24
-            192.178.*
-            193.179.0.0/8
-        }.each { |range|
-            assert_nothing_raised("Failed to @store IP range %s" % range) {
-                @store.allow(range)
-            }
-        }
-
-        %w{
-            192.168.0.1
-            192.168.1.5
-            192.178.0.5
-            193.0.0.1
-        }.each { |ip|
-            assert(@store.allowed?("fakename.com", ip), "IP %s is not allowed" % ip)
-        }
-    end
-
-    def test_iprangedenials
-        assert_nothing_raised("Failed to @store overlapping IP ranges") {
-            @store.allow("192.168.0.0/16")
-            @store.deny("192.168.0.0/24")
-        }
-
-        assert(@store.allowed?("fake.name", "192.168.1.50"), "/16 ip not allowed")
-        assert(! @store.allowed?("fake.name", "192.168.0.50"), "/24 ip allowed")
-    end
-
-    def test_subdomaindenails
-        assert_nothing_raised("Failed to @store overlapping IP ranges") {
-            @store.allow("*.madstop.com")
-            @store.deny("*.sub.madstop.com")
-        }
-
-        assert(@store.allowed?("hostname.madstop.com", "192.168.1.50"),
-            "hostname not allowed")
-        assert(! @store.allowed?("name.sub.madstop.com", "192.168.0.50"),
-            "subname name allowed")
-    end
-
-    def test_orderingstuff
-        assert_nothing_raised("Failed to @store overlapping IP ranges") {
-            @store.allow("*.madstop.com")
-            @store.deny("192.168.0.0/24")
-        }
-
-        assert(@store.allowed?("hostname.madstop.com", "192.168.1.50"),
-            "hostname not allowed")
-        assert(! @store.allowed?("hostname.madstop.com", "192.168.0.50"),
-            "Host allowed over IP")
-    end
-
-    def test_globalallow
-        assert_nothing_raised("Failed to add global allow") {
-            @store.allow("*")
-        }
-
-        [
-            %w{hostname.com 192.168.0.4},
-            %w{localhost 192.168.0.1},
-            %w{localhost 127.0.0.1}
-            
-        ].each { |ary|
-            assert(@store.allowed?(*ary), "Failed to allow %s" % [ary.join(",")])
-        }
-    end
-
-    def test_store
-        assert_nothing_raised do
-            assert_nil(@store.send(:store, :allow, "*.host.com"),
-                "store did not return nil")
-        end
-        assert_equal([Declaration.new(:allow, "*.host.com")],
-            @store.send(:instance_variable_get, "@declarations"),
-            "Did not store declaration")
-
-        # Now add another one and make sure it gets sorted appropriately
-        assert_nothing_raised do
-            assert_nil(@store.send(:store, :allow, "me.host.com"),
-                "store did not return nil")
-        end
-
-        assert_equal([
-            Declaration.new(:allow, "me.host.com"),
-            Declaration.new(:allow, "*.host.com")
-        ],
-            @store.send(:instance_variable_get, "@declarations"),
-            "Did not sort declarations")
-    end
-
-    def test_allow_and_deny
-        store = Puppet::Network::AuthStore.new
-        store.expects(:store).with(:allow, "host.com")
-        store.allow("host.com")
-
-        store = Puppet::Network::AuthStore.new
-        store.expects(:store).with(:deny, "host.com")
-        store.deny("host.com")
-
-        store = Puppet::Network::AuthStore.new
-        assert_nothing_raised do
-            assert_nil(store.allow("*"),
-                "allow did not return nil")
-        end
-
-        assert(store.globalallow?,
-            "did not enable global allow")
-    end
-
-    def test_hostnames
-        Puppet[:trace] = false
-        %w{
-            kirby.madstop.com
-            luke.madstop.net
-            name-other.madstop.net
-        }.each { |name|
-            assert_nothing_raised("Failed to @store simple name %s" % name) {
-                @store.allow(name)
-            }
-            assert(@store.allowed?(name, "192.168.0.1"), "Name %s not allowed" % name)
-        }
-
-        %w{
-            invalid
-            ^invalid!
-            inval$id
-        
-        }.each { |pat|
-            assert_raise(Puppet::AuthStoreError,
-                "name '%s' was allowed" % pat) {
-                @store.allow(pat)
-            }
-        }
-    end
-
-    def test_domains
-        assert_nothing_raised("Failed to @store domains") {
-            @store.allow("*.a.very.long.domain.name.com")
-            @store.allow("*.madstop.com")
-            @store.allow("*.some-other.net")
-            @store.allow("*.much.longer.more-other.net")
-        }
-
-        %w{
-            madstop.com
-            culain.madstop.com
-            kirby.madstop.com
-            funtest.some-other.net
-            ya-test.madstop.com
-            some.much.much.longer.more-other.net
-        }.each { |name|
-            assert(@store.allowed?(name, "192.168.0.1"), "Host %s not allowed" % name)
-        }
-
-        assert_raise(Puppet::AuthStoreError) {
-            @store.allow("domain.*.com")
-        }
-
-        assert(!@store.allowed?("very.long.domain.name.com", "1.2.3.4"),
-            "Long hostname allowed")
-
-        assert_raise(Puppet::AuthStoreError) {
-            @store.allow("domain.*.other.com")
-        }
-    end
-
-    # #531
-    def test_case_insensitivity
-        @store.allow("hostname.com")
-
-        %w{hostname.com Hostname.COM hostname.Com HOSTNAME.COM}.each do |name|
-            assert(@store.allowed?(name, "127.0.0.1"),
-                "did not allow %s" % name)
-        end
-    end
-
-    def test_allowed?
-        Puppet[:trace] = false
-        assert(@store.allowed?(nil, nil),
-            "Did not default to true for local checks")
-        assert_raise(Puppet::DevError, "did not fail on one input") do
-            @store.allowed?("host.com", nil)
-        end
-        assert_raise(Puppet::DevError, "did not fail on one input") do
-            @store.allowed?(nil, "192.168.0.1")
-        end
-
-    end
-
-    # Make sure more specific allows and denies win over generalities
-    def test_specific_overrides
-        @store.allow("host.madstop.com")
-        @store.deny("*.madstop.com")
-
-        assert(@store.allowed?("host.madstop.com", "192.168.0.1"),
-            "More specific allowal by name failed")
-
-        @store.allow("192.168.0.1")
-        @store.deny("192.168.0.0/24")
-
-        assert(@store.allowed?("host.madstop.com", "192.168.0.1"),
-            "More specific allowal by ip failed")
-    end
-end
-
-class TestAuthStoreDeclaration < PuppetTest::TestCase
-	include PuppetTest
-    Declaration = Puppet::Network::AuthStore::Declaration
-
-    def setup
-        super
-        @decl = Declaration.new(:allow, "hostname.com")
-    end
-
-    def test_parse
-        {
-            "192.168.0.1" =>        [:ip, IPAddr.new("192.168.0.1"), nil],
-            "2001:700:300:1800::" => [:ip, IPAddr.new("2001:700:300:1800::"), nil],
-            "2001:700:300:1800::/64" => [:ip, IPAddr.new("2001:700:300:1800::/64"), 64],
-            "192.168.0.1/32" =>     [:ip, IPAddr.new("192.168.0.1/32"), 32],
-            "192.168.0.1/24" =>     [:ip, IPAddr.new("192.168.0.1/24"), 24],
-            "192.*" =>              [:ip, IPAddr.new("192.0.0.0/8"), 8],
-            "192.168.*" =>          [:ip, IPAddr.new("192.168.0.0/16"), 16],
-            "192.168.0.*" =>        [:ip, IPAddr.new("192.168.0.0/24"), 24],
-            "hostname.com" =>       [:domain, %w{com hostname}, nil],
-            "Hostname.COM" =>       [:domain, %w{com hostname}, nil],
-            "billy.Hostname.COM" => [:domain, %w{com hostname billy}, nil],
-            "billy-jean.Hostname.COM" => [:domain, %w{com hostname billy-jean}, nil],
-            "*.hostname.COM" => [:domain, %w{com hostname}, 2],
-            "*.hostname.COM" => [:domain, %w{com hostname}, 2]
-        }.each do |input, output|
-
-            # Create a new decl each time, so values aren't cached.
-            assert_nothing_raised do
-                @decl = Declaration.new(:allow, input)
-            end
-
-            [:name, :pattern, :length].zip(output).each do |method, value|
-                assert_equal(value, @decl.send(method),
-                    "Got incorrect value for %s from %s" % [method, input])
-            end
-        end
-
-        %w{192.168 hostname -hostname.com hostname.*}.each do |input|
-            assert_raise(Puppet::AuthStoreError, "Did not fail on %s" % input) do
-                @decl.pattern = input
-            end
-        end
-
-        ["hostname .com", "192.168 .0.1"].each do |input|
-            assert_raise(Puppet::AuthStoreError, "Did not fail on %s" % input) do
-                @decl.pattern = input
-            end
-        end
-    end
-
-    def test_result
-        ["allow", :allow].each do |val|
-            assert_nothing_raised { @decl.type = val }
-            assert_equal(true, @decl.result, "did not result to true with %s" %
-                val.inspect)
-        end
-
-        [:deny, "deny"].each do |val|
-            assert_nothing_raised { @decl.type = val }
-            assert_equal(false, @decl.result,
-                "did not result to false with %s" % val.inspect)
-        end
-
-        ["yay", 1, nil, false, true].each do |val|
-            assert_raise(ArgumentError, "Did not fail on %s" % val.inspect) do
-                @decl.type = val
-            end
-        end
-    end
-
-    def test_munge_name
-        {
-            "hostname.com" => %w{com hostname},
-            "alley.hostname.com" => %w{com hostname alley},
-            "*.hostname.com" => %w{com hostname *},
-            "*.HOSTNAME.Com" => %w{com hostname *},
-            "*.HOSTNAME.Com" => %w{com hostname *},
-
-        }.each do |input, output|
-            assert_equal(output, @decl.send(:munge_name, input),
-                "munged %s incorrectly" % input)
-        end
-    end
-
-    # Make sure people can specify TLDs
-    def test_match_tlds
-        assert_nothing_raised {
-            @decl.pattern = "*.tld"
-        }
-
-        assert_equal(%w{tld}, @decl.pattern, "Failed to allow custom tld")
-    end
-
-    # Make sure we sort correctly.
-    def test_sorting
-        # Make sure declarations with no length sort first.
-        host_exact = Declaration.new(:allow, "host.com")
-        host_range = Declaration.new(:allow, "*.host.com")
-
-        ip_exact = Declaration.new(:allow, "192.168.0.1")
-        ip_range = Declaration.new(:allow, "192.168.0.*")
-
-        assert_equal(-1, host_exact <=> host_range,
-            "exact name match did not sort first")
-
-        assert_equal(-1, ip_exact <=> ip_range,
-            "exact ip match did not sort first")
-
-        # Next make sure we sort by length
-        ip_long = Declaration.new(:allow, "192.168.*")
-        assert_equal(-1, ip_range <=> ip_long, "/16 sorted before /24 in ip")
-
-        # Now try it using masks
-        ip24 = Declaration.new(:allow, "192.168.0.0/24")
-        ip16 = Declaration.new(:allow, "192.168.0.0/16")
-
-        assert_equal(-1, ip24 <=> ip16, "/16 sorted before /24 in ip with masks")
-
-        # Make sure ip checks sort before host checks
-        assert_equal(-1, ip_exact <=> host_exact,
-            "IP exact did not sort before host exact")
-
-        assert_equal(-1, ip_range <=> host_range,
-            "IP range did not sort before host range")
-
-        host_long = Declaration.new(:allow, "*.domain.host.com")
-
-        assert_equal(-1, host_long <=> host_range, "did not sort by domain length")
-
-        # Now make sure denies sort before allows, for equivalent
-        # declarations.
-        host_deny = Declaration.new(:deny, "host.com")
-        assert_equal(-1, host_deny <=> host_exact, "deny did not sort before allow when exact")
-
-        host_range_deny = Declaration.new(:deny, "*.host.com")
-        assert_equal(-1, host_range_deny <=> host_range,
-            "deny did not sort before allow when ranged")
-
-        ip_allow = Declaration.new(:allow, "192.168.0.0/16")
-        ip_deny = Declaration.new(:deny, "192.168.0.0/16")
-
-        assert_equal(-1, ip_deny <=> ip_allow,
-            "deny did not sort before allow in ip range")
-
-        %w{host.com *.domain.com 192.168.0.1 192.168.0.1/24}.each do |decl|
-            assert_equal(0, Declaration.new(:allow, decl) <=>
-                Declaration.new(:allow, decl),
-                "Equivalent declarations for %s were considered different" %
-                decl
-            )
-        end
-    end
-
-    def test_match?
-        host = Declaration.new(:allow, "host.com")
-        host.expects(:matchname?).with("host.com")
-        host.match?("host.com", "192.168.0.1")
-
-        ip = Declaration.new(:allow, "192.168.0.1")
-        ip.pattern.expects(:include?)
-        ip.match?("host.com", "192.168.0.1")
-    end
-
-    def test_matchname?
-        host = Declaration.new(:allow, "host.com")
-        assert(host.send(:matchname?, "host.com"), "exact did not match")
-        assert(! host.send(:matchname?, "yay.com"), "incorrect match")
-
-        domain = Declaration.new(:allow, "*.domain.com")
-        %w{host.domain.com domain.com very.long.domain.com very-long.domain.com
-        }.each do |name|
-            assert(domain.send(:matchname?, name),
-                "Did not match %s" % name)
-        end
-    end
-end
-
-
diff --git a/test/network/client/ca.rb b/test/network/client/ca.rb
deleted file mode 100755
index 56419b6..0000000
--- a/test/network/client/ca.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'mocha'
-require 'puppettest'
-require 'puppet/network/client/ca'
-require 'puppet/sslcertificates/support'
-
-class TestClientCA < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-
-    def setup
-        Puppet::Util::SUIDManager.stubs(:asuser).yields
-        super
-        @ca = Puppet::Network::Handler.ca.new
-        @client = Puppet::Network::Client.ca.new :CA => @ca
-    end
-
-    def test_request_cert
-        assert_nothing_raised("Could not request cert") do
-            @client.request_cert
-        end
-
-        [:hostprivkey, :hostcert, :localcacert].each do |name|
-            assert(FileTest.exists?(Puppet.settings[name]),
-                "Did not create cert %s" % name)
-        end
-    end
-
-    # Make sure the ca defaults to specific ports and names
-    def test_ca_server
-        Puppet.settings.stubs(:value).returns "eh"
-        Puppet.settings.expects(:value).with(:ca_server).returns("myca")
-        Puppet.settings.expects(:value).with(:ca_port).returns(321)
-        Puppet.settings.stubs(:value).with(:http_proxy_host).returns(nil)
-        Puppet.settings.stubs(:value).with(:http_proxy_port).returns(nil)
-        Puppet.settings.stubs(:value).with(:http_keepalive).returns(false)
-
-        # Just throw an error; the important thing is the values, not what happens next.
-        Net::HTTP.stubs(:new).with("myca", 321, nil, nil).raises(ArgumentError)
-        assert_raise(ArgumentError) { Puppet::Network::Client.ca.new }
-    end
-
-    # #578
-    def test_invalid_certs_are_not_written
-        # Run the get once, which should be valid
-
-        assert_nothing_raised("Could not get a certificate") do
-            @client.request_cert
-        end
-
-        # Now remove the cert and keys, so we get a broken cert
-        File.unlink(Puppet[:hostcert])
-        File.unlink(Puppet[:localcacert])
-        File.unlink(Puppet[:hostprivkey])
-
-        @client = Puppet::Network::Client.ca.new :CA => @ca
-        @ca.expects(:getcert).returns("yay") # not a valid cert
-        # Now make sure it fails, since we'll get the old cert but have new keys
-        assert_raise(Puppet::Network::Client::CA::InvalidCertificate, "Did not fail on invalid cert") do
-            @client.request_cert
-        end
-
-        # And then make sure the cert isn't written to disk
-        assert(! FileTest.exists?(Puppet[:hostcert]),
-            "Invalid cert got written to disk")
-    end
-end
-
diff --git a/test/network/client/client.rb b/test/network/client/client.rb
deleted file mode 100755
index 5f96cac..0000000
--- a/test/network/client/client.rb
+++ /dev/null
@@ -1,195 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-require 'puppet/network/client'
-
-class TestClient < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-    class FakeClient < Puppet::Network::Client
-        @drivername = :Test
-    end
-
-    class FakeDriver
-    end
-
-    # a single run through of connect, auth, etc.
-    def disabled_test_sslInitWithAutosigningLocalServer
-        # autosign everything, for simplicity
-        Puppet[:autosign] = true
-
-        # create a server to which to connect
-        mkserver()
-
-        # create our client
-        client = nil
-        assert_nothing_raised {
-            client = Puppet::Network::Client.master.new(
-                :Server => "localhost",
-                :Port => @@port
-            )
-        }
-
-        # get our certs
-        assert_nothing_raised {
-            client.initcerts
-        }
-
-        # make sure all of our cert files exist
-        certfile = File.join(Puppet[:certdir], [client.fqdn, "pem"].join("."))
-        keyfile = File.join(Puppet[:privatekeydir], [client.fqdn, "pem"].join("."))
-        publickeyfile = File.join(Puppet[:publickeydir], [client.fqdn, "pem"].join("."))
-
-        assert(File.exists?(keyfile))
-        assert(File.exists?(certfile))
-        assert(File.exists?(publickeyfile))
-
-        # verify we can retrieve the catalog
-        assert_nothing_raised("Client could not retrieve catalog") {
-            client.getconfig
-        }
-
-        # and apply it
-        assert_nothing_raised("Client could not apply catalog") {
-            client.apply
-        }
-
-        # and verify that it did what it was supposed to
-        assert(FileTest.exists?(@createdfile),
-            "Applied file does not exist")
-    end
-
-
-    # here we create two servers; we 
-    def disabled_test_failureWithUntrustedCerts
-        Puppet[:autosign] = true
-
-        # create a pair of clients with no certs
-        nonemaster = nil
-        assert_nothing_raised {
-            nonemaster = Puppet::Network::Client.master.new(
-                :Server => "localhost",
-                :Port => @@port
-            )
-        }
-
-        nonebucket = nil
-        assert_nothing_raised {
-            nonebucket = Puppet::Network::Client.dipper.new(
-                :Server => "localhost",
-                :Port => @@port
-            )
-        }
-
-        # create a ca so we can create a set of certs
-        # make a new ssldir for it
-        ca = nil
-        assert_nothing_raised {
-            ca = Puppet::Network::Client.ca.new(
-                :CA => true, :Local => true
-            )
-            ca.requestcert
-        }
-
-        # initialize our clients with this set of certs
-        certmaster = nil
-        assert_nothing_raised {
-            certmaster = Puppet::Network::Client.master.new(
-                :Server => "localhost",
-                :Port => @@port
-            )
-        }
-
-        certbucket = nil
-        assert_nothing_raised {
-            certbucket = Puppet::Network::Client.dipper.new(
-                :Server => "localhost",
-                :Port => @@port
-            )
-        }
-
-        # Create a new ssl root.
-        confdir = tempfile()
-        Puppet[:ssldir] = confdir
-        Puppet.settings.mkdir(:ssldir)
-        Puppet.settings.clearused
-        Puppet.settings.use(:ssl, :ca)
-
-        mkserver
-
-        # now verify that our client cannot do non-cert operations
-        # because its certs are signed by a different CA
-        assert_raise(Puppet::Error,
-            "Client was allowed to call getconfig with no certs") {
-            nonemaster.getconfig
-        }
-        assert_raise(Puppet::Error,
-            "Client was allowed to call getconfig with untrusted certs") {
-            certmaster.getconfig
-        }
-
-        assert_raise(Puppet::Network::XMLRPCClientError,
-            "Client was allowed to call backup with no certs") {
-            nonebucket.backup("/etc/passwd")
-        }
-        assert_raise(Puppet::Network::XMLRPCClientError,
-            "Client was allowed to call backup with untrusted certs") {
-            certbucket.backup("/etc/passwd")
-        }
-    end
-
-    def test_client_loading
-        # Make sure we don't get a failure but that we also get nothing back
-        assert_nothing_raised do
-            assert_nil(Puppet::Network::Client.client(:fake),
-                "Got something back from a missing client")
-            assert_nil(Puppet::Network::Client.fake,
-                "Got something back from missing client method")
-        end
-        # Make a fake client
-        dir = tempfile()
-        libdir = File.join([dir, %w{puppet network client}].flatten)
-        FileUtils.mkdir_p(libdir)
-
-        file = File.join(libdir, "faker.rb")
-        File.open(file, "w") do |f|
-            f.puts %{class Puppet::Network::Client
-                class Faker < Client
-                end
-            end
-            }
-        end
-
-        $: << dir
-        cleanup { $:.delete(dir) if $:.include?(dir) }
-
-        client = nil
-        assert_nothing_raised do
-            client = Puppet::Network::Client.client(:faker)
-        end
-        assert(client, "did not load client")
-        assert_nothing_raised do
-            assert_equal(client, Puppet::Network::Client.faker,
-                "Did not get client back from client method")
-        end
-
-        # Now make sure the client behaves correctly
-        assert_equal(:Faker, client.name, "name was not calculated correctly")
-    end
-
-    # Make sure we get a client class for each handler type.
-    def test_loading_all_clients
-        %w{ca dipper file master report resource runner status}.each do |name|
-            client = nil
-            assert_nothing_raised do
-                client = Puppet::Network::Client.client(name)
-            end
-            assert(client, "did not get client for %s" % name)
-            [:name, :handler, :drivername].each do |thing|
-                assert(client.send(thing), "did not get %s for %s" % [thing, name])
-            end
-        end
-    end
-end
diff --git a/test/network/client/dipper.rb b/test/network/client/dipper.rb
deleted file mode 100755
index 51494be..0000000
--- a/test/network/client/dipper.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/client/resource'
-
-class TestDipperClient < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-
-    def setup
-        super
-        @dipper = Puppet::Network::Client.dipper.new(:Path => tempfile)
-    end
-
-    # Make sure we can create a new file with 'restore'.
-    def test_restore_to_new_file
-        file = tempfile
-        text = "asdf;lkajseofiqwekj"
-        File.open(file, "w") { |f| f.puts text }
-        md5 = nil
-        assert_nothing_raised("Could not send file") do
-            md5 = @dipper.backup(file)
-        end
-
-        newfile = tempfile
-        assert_nothing_raised("could not restore to new path") do
-            @dipper.restore(newfile, md5)
-        end
-
-        assert_equal(File.read(file), File.read(newfile), "did not restore correctly")
-    end
-end
-
diff --git a/test/network/client/master.rb b/test/network/client/master.rb
deleted file mode 100755
index 90f747d..0000000
--- a/test/network/client/master.rb
+++ /dev/null
@@ -1,490 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-
-class TestMasterClient < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-
-    def setup
-        super
-        @master = Puppet::Network::Client.master
-    end
-
-    def mkmaster(options = {})
-        options[:UseNodes] = false
-        options[:Local] = true
-        if code = options[:Code]
-            Puppet[:code] = code
-        else
-            Puppet[:manifest] = options[:Manifest] || mktestmanifest
-        end
-        # create our master
-        # this is the default server setup
-        master = Puppet::Network::Handler.master.new(options)
-        return master
-    end
-
-    def mkclient(master = nil)
-        master ||= mkmaster()
-        client = Puppet::Network::Client.master.new(
-            :Master => master
-        )
-
-        return client
-    end
-
-    def test_disable
-        FileUtils.mkdir_p(Puppet[:statedir])
-        manifest = mktestmanifest
-
-        master = mkmaster(:Manifest => manifest)
-
-        client = mkclient(master)
-
-        assert_nothing_raised("Could not disable client") {
-            client.disable
-        }
-
-        client.expects(:getconfig).never
-
-        client.run
-
-        client = mkclient(master)
-
-        client.expects(:getconfig)
-
-        assert_nothing_raised("Could not enable client") {
-            client.enable
-        }
-        client.run
-    end
-
-    # Make sure we're getting the client version in our list of facts
-    def test_clientversionfact
-        facts = nil
-        assert_nothing_raised {
-            facts = Puppet::Network::Client.master.facts
-        }
-
-        assert_equal(Puppet.version.to_s, facts["clientversion"])
-        
-    end
-
-    # Make sure non-string facts don't make things go kablooie
-    def test_nonstring_facts
-        FileUtils.mkdir_p(Puppet[:statedir])
-        # Add a nonstring fact
-        Facter.add("nonstring") do
-            setcode { 1 }
-        end
-
-        assert_equal(1, Facter.nonstring, "Fact was a string from facter")
-
-        client = mkclient()
-
-        assert(! FileTest.exists?(@createdfile))
-
-        assert_nothing_raised {
-            client.run
-        }
-    end
-    
-    # This method downloads files, and yields each file object if a block is given.
-    def test_download
-        source = tempfile()
-        dest = tempfile()
-        sfile = File.join(source, "file")
-        dfile = File.join(dest, "file")
-        Dir.mkdir(source)
-        File.open(sfile, "w") {|f| f.puts "yay"}
-        
-        files = []
-        assert_nothing_raised do
-            files = Puppet::Network::Client.master.download(:dest => dest, :source => source, :name => "testing")
-        end
-        
-        assert(FileTest.directory?(dest), "dest dir was not created")
-        assert(FileTest.file?(dfile), "dest file was not created")
-        assert_equal(File.read(sfile), File.read(dfile), "Dest file had incorrect contents")
-        assert_equal([dest, dfile].sort, files.sort, "Changed files were not returned correctly")
-    end
-
-    def test_getplugins
-        Puppet[:filetimeout] = -1
-        Puppet[:pluginsource] = tempfile()
-        Dir.mkdir(Puppet[:pluginsource])
-        Dir.mkdir(File.join(Puppet[:pluginsource], "testing"))
-
-        $loaded = []
-        loader = Puppet::Util::Autoload.new(self, "testing")
-
-        myplugin = File.join(Puppet[:pluginsource], "testing", "myplugin.rb")
-        File.open(myplugin, "w") do |f|
-            f.puts %{$loaded << :myplugin}
-        end
-
-        assert_nothing_raised("Could not get plugins") {
-            Puppet::Network::Client.master.getplugins
-        }
-
-        destfile = File.join(Puppet[:plugindest], "testing", "myplugin.rb")
-
-        assert(File.exists?(destfile), "Did not get plugin")
-
-        assert(loader.load(:myplugin), "Did not load downloaded plugin")
-
-        assert($loaded.include?(:myplugin), "Downloaded code was not evaluated")
-
-        # Now modify the file and make sure the type is replaced
-        File.open(myplugin, "w") do |f|
-            f.puts %{$loaded << :changed}
-        end
-
-        assert_nothing_raised("Could not get plugin changes") {
-            Puppet::Network::Client.master.getplugins
-        }
-
-        assert($loaded.include?(:changed), "Changed code was not evaluated")
-
-        # Now try it again, to make sure we don't have any objects lying around
-        assert_nothing_raised {
-            Puppet::Network::Client.master.getplugins
-        }
-    end
-
-    def test_getfacts
-        Puppet[:filetimeout] = -1
-        Puppet[:factsource] = tempfile()
-        Dir.mkdir(Puppet[:factsource])
-        hostname = Facter.value(:hostname)
-
-        myfact = File.join(Puppet[:factsource], "myfact.rb")
-        File.open(myfact, "w") do |f|
-            f.puts %{Facter.add("myfact") do
-            setcode { "yayness" }
-end
-}
-        end
-
-        assert_nothing_raised {
-            Puppet::Network::Client.master.getfacts
-        }
-
-        destfile = File.join(Puppet[:factdest], "myfact.rb")
-
-        assert(File.exists?(destfile), "Did not get fact")
-
-        facts = Puppet::Network::Client.master.facts
-
-        assert_equal(hostname, facts["hostname"],
-            "Lost value to hostname")
-
-        assert_equal("yayness", facts["myfact"],
-            "Did not get correct fact value")
-
-        # Now modify the file and make sure the type is replaced
-        File.open(myfact, "w") do |f|
-            f.puts %{Facter.add("myfact") do
-            setcode { "funtest" }
-end
-}
-        end
-
-        assert_nothing_raised {
-            Puppet::Network::Client.master.getfacts
-        }
-        facts = Puppet::Network::Client.master.facts
-
-        assert_equal("funtest", facts["myfact"],
-            "Did not reload fact")
-        assert_equal(hostname, facts["hostname"],
-            "Lost value to hostname")
-
-        # Now run it again and make sure the fact still loads
-        assert_nothing_raised {
-            Puppet::Network::Client.master.getfacts
-        }
-        facts = Puppet::Network::Client.master.facts
-
-        assert_equal("funtest", facts["myfact"],
-            "Did not reload fact")
-        assert_equal(hostname, facts["hostname"],
-            "Lost value to hostname")
-    end
-
-    # Make sure that setting environment by fact takes precedence to configuration
-    def test_setenvironmentwithfact
-        name = "environment"
-        value = "test_environment"
-
-        Facter.stubs(:to_hash).returns(name => value)
-
-        assert_equal(value, Puppet::Network::Client.master.facts[name])
-    end
-
-    # Make sure we load all facts on startup.
-    def test_loadfacts
-        dirs = [tempfile(), tempfile()]
-        count = 0
-        names = []
-        dirs.each do |dir|
-            Dir.mkdir(dir)
-            name = "fact%s" % count
-            names << name
-            file = File.join(dir, "%s.rb" % name)
-
-            # Write out a plugin file
-            File.open(file, "w") do |f|
-                f.puts %{Facter.add("#{name}") do setcode { "#{name}" } end }
-            end
-            count += 1
-        end
-
-        Puppet[:factpath] = dirs.join(":")
-
-        names.each do |name|
-            assert_nil(Facter.value(name), "Somehow retrieved invalid fact")
-        end
-
-        assert_nothing_raised {
-            Puppet::Network::Client.master.loadfacts
-        }
-
-        names.each do |name|
-            assert_equal(name, Facter.value(name),
-                    "Did not retrieve facts")
-        end
-    end
-
-    if Process.uid == 0
-    # Testing #283.  Make sure plugins et al are downloaded as the running user.
-    def test_download_ownership
-        dir = tstdir()
-        dest = tstdir()
-        file = File.join(dir, "file")
-        File.open(file, "w") { |f| f.puts "funtest" }
-
-        user = nonrootuser()
-        group = nonrootgroup()
-        chowner = Puppet::Type.type(:file).create :path => dir,
-            :owner => user.name, :group => group.name, :recurse => true
-        assert_apply(chowner)
-        chowner.remove
-
-        assert_equal(user.uid, File.stat(file).uid)
-        assert_equal(group.gid, File.stat(file).gid)
-
-
-        assert_nothing_raised {
-            Puppet::Network::Client.master.download(:dest => dest, :source => dir,
-                :name => "testing"
-            ) {}
-        }
-
-        destfile = File.join(dest, "file")
-
-        assert(FileTest.exists?(destfile), "Did not create destfile")
-
-        assert_equal(Process.uid, File.stat(destfile).uid)
-    end
-    end
-    
-    # Test retrieving all of the facts.
-    def test_facts
-        facts = nil
-        assert_nothing_raised do
-            facts = Puppet::Network::Client.master.facts
-        end
-        Facter.to_hash.each do |fact, value|
-            assert_equal(facts[fact.downcase], value.to_s, "%s is not equal" % fact.inspect)
-        end
-        
-        # Make sure the puppet version got added
-        assert_equal(Puppet::PUPPETVERSION, facts["clientversion"], "client version did not get added")
-        
-        # And make sure the ruby version is in there
-        assert_equal(RUBY_VERSION, facts["rubyversion"], "ruby version did not get added")
-    end
-    
-    # #540 - make sure downloads aren't affected by noop
-    def test_download_in_noop
-        source = tempfile
-        File.open(source, "w") { |f| f.puts "something" }
-        dest = tempfile
-        Puppet[:noop] = true
-        node = stub 'node', :environment => "development"
-        Puppet::Node.stubs(:find).returns node
-        assert_nothing_raised("Could not download in noop") do
-            @master.download(:dest => dest, :source => source, :tag => "yay")
-        end
-
-        assert(FileTest.exists?(dest), "did not download in noop mode")
-
-        assert(Puppet[:noop], "noop got disabled in run")
-    end
-
-    # #491 - make sure a missing config doesn't kill us
-    def test_missing_localconfig
-        master = mkclient
-        master.local = false
-        driver = master.send(:instance_variable_get, "@driver")
-        driver.local = false
-        Puppet::Node::Facts.indirection.stubs(:save)
-        # Retrieve the configuration
-
-        master.getconfig
-
-        # Now the config is up to date, so get rid of the @objects var and
-        # the cached config
-        master.clear
-        File.unlink(master.cachefile)
-
-        assert_nothing_raised("Missing cache file threw error") do
-            master.getconfig
-        end
-
-        assert(! @logs.detect { |l| l.message =~ /Could not load/},
-            "Tried to load cache when it is non-existent")
-    end
-
-    def test_locking
-        master = mkclient
-
-        class << master
-            def getconfig
-                raise ArgumentError, "Just testing"
-            end
-        end
-
-        master.run
-
-        assert(! master.send(:lockfile).locked?,
-            "Master is still locked after failure")
-    end
-
-    # Make sure we get a value for timeout
-    def test_config_timeout
-        master = Puppet::Network::Client.client(:master)
-        time = Integer(Puppet[:configtimeout])
-        assert_equal(time, master.timeout, "Did not get default value for timeout")
-        assert_equal(time, master.timeout, "Did not get default value for timeout on second run")
-
-        # Reset it
-        Puppet[:configtimeout] = "50"
-        assert_equal(50, master.timeout, "Did not get changed default value for timeout")
-        assert_equal(50, master.timeout, "Did not get changed default value for timeout on second run")
-
-        # Now try an integer
-        Puppet[:configtimeout] = 100
-        assert_equal(100, master.timeout, "Did not get changed integer default value for timeout")
-        assert_equal(100, master.timeout, "Did not get changed integer default value for timeout on second run")
-    end
-
-    def test_splay
-        client = mkclient
-
-        # Make sure we default to no splay
-        client.expects(:sleep).never
-
-        assert_nothing_raised("Failed to call splay") do
-            client.send(:splay)
-        end
-
-        # Now set it to true and make sure we get the right value
-        client = mkclient
-        client.expects(:sleep)
-
-        Puppet[:splay] = true
-        assert_nothing_raised("Failed to call sleep when splay is true") do
-            client.send(:splay)
-        end
-
-        # Now try it again
-        client = mkclient
-        client.expects(:sleep)
-
-        assert_nothing_raised("Failed to call sleep when splay is true with a cached value") do
-            client.send(:splay)
-        end
-    end
-
-    def test_environment_is_added_to_facts
-        facts = Puppet::Network::Client::Master.facts
-        assert_equal(facts["environment"], Puppet[:environment], "Did not add environment to client facts")
-
-        # Now set it to a real value
-	Puppet[:environment] = "something"
-        facts = Puppet::Network::Client::Master.facts
-        assert_equal(facts["environment"], Puppet[:environment], "Did not add environment to client facts")
-    end
-
-    # This is partially to fix #532, but also to save on memory.
-    def test_remove_objects_after_every_run
-        client = mkclient
-
-        ftype = Puppet::Type.type(:file)
-        file = ftype.create :title => "/what/ever", :ensure => :present
-        config = Puppet::Node::Catalog.new
-        config.add_resource(file)
-
-        config.expects :apply
-
-        client.catalog = config
-        client.expects(:getconfig)
-        client.run
-
-        assert_nil(ftype[@createdfile], "file object was not removed from memory")
-    end
-
-    # #685
-    def test_http_failures_do_not_kill_puppetd
-        client = mkclient
-
-        client.meta_def(:getconfig) { raise "A failure" }
-
-        assert_nothing_raised("Failure in getconfig threw an error") do
-            client.run
-        end
-    end
-
-    def test_invalid_catalogs_do_not_get_cached
-        master = mkmaster :Code => "notify { one: require => File[yaytest] }"
-        master.local = false # so it gets cached
-        client = mkclient(master)
-        client.stubs(:facts).returns({})
-        client.local = false
-
-        Puppet::Node::Facts.indirection.stubs(:terminus_class).returns(:memory)
-
-        # Make sure the config is not cached.
-        client.expects(:cache).never
-
-        client.getconfig
-        # Doesn't throw an exception, but definitely fails.
-        client.run
-    end
-
-    def test_classfile
-        Puppet[:code] = "class yaytest {}\n class bootest {}\n include yaytest, bootest"
-
-        Puppet::Node::Facts.indirection.stubs(:save)
-
-        master = Puppet::Network::Handler.master.new( :Local => false)
-        client = Puppet::Network::Client.master.new( :Master => master)
-
-        # Fake that it's local, so it creates the class file
-        client.local = false
-
-        # We can't guarantee class ordering
-        client.expects(:setclasses).with do |array|
-            array.length == 2 and array.include?("yaytest") and array.include?("bootest")
-        end
-
-        assert_nothing_raised {
-            client.getconfig
-        }
-    end
-end
diff --git a/test/network/client/resource.rb b/test/network/client/resource.rb
deleted file mode 100755
index eb8e829..0000000
--- a/test/network/client/resource.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-require 'puppettest/support/assertions'
-require 'puppet/network/client/resource'
-
-class TestResourceClient < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-    include PuppetTest::Support::Utils
-
-    def mkresourceserver
-        Puppet::Network::Handler.resource.new
-    end
-
-    def mkclient
-        client = Puppet::Network::Client.resource.new(:Resource => mkresourceserver)
-    end
-
-    def test_resources
-        file = tempfile()
-        text = "yayness\n"
-        File.open(file, "w") { |f| f.print text }
-
-        mkresourceserver()
-
-        client = mkclient()
-
-        # Test describing
-        tobj = nil
-        assert_nothing_raised {
-            tobj = client.describe("file", file)
-        }
-
-        assert(tobj, "Did not get response")
-
-        assert_instance_of(Puppet::TransObject, tobj)
-
-        Puppet::Type.allclear
-        obj = nil
-        assert_nothing_raised {
-            obj = tobj.to_type
-        }
-        assert_events([], obj)
-        File.unlink(file)
-        assert_events([:file_created], obj)
-        File.unlink(file)
-
-        # Now test applying
-        Puppet::Type.allclear
-        result = nil
-        assert_nothing_raised {
-            result = client.apply(tobj)
-        }
-        assert(FileTest.exists?(file), "File was not created on apply")
-
-        # Lastly, test "list"
-        Puppet::Type.allclear
-        list = nil
-        assert_nothing_raised {
-            list = client.list("user")
-        }
-
-        assert_instance_of(Puppet::TransBucket, list)
-
-        count = 0
-        list.each do |tobj|
-            break if count > 3
-            assert_instance_of(Puppet::TransObject, tobj)
-
-            Puppet::Type.allclear
-            tobj2 = nil
-            assert_nothing_raised {
-                tobj2 = client.describe(tobj.type, tobj.name)
-            }
-
-            obj = nil
-            Puppet::Type.allclear
-            assert_nothing_raised {
-                obj = tobj2.to_type
-            }
-            assert_events([], obj)
-
-            count += 1
-        end
-    end
-end
-
diff --git a/test/network/client_request.rb b/test/network/client_request.rb
deleted file mode 100755
index 7408e2b..0000000
--- a/test/network/client_request.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-
-require 'puppet/network/client_request'
-
-class TestClientRequest < Test::Unit::TestCase
-	include PuppetTest
-
-    def test_initialize
-        req = nil
-        assert_nothing_raised do
-            req = Puppet::Network::ClientRequest.new("name", "ip", false)
-        end
-
-        assert_equal("name", req.name, "host name was not set correctly")
-        assert_equal("ip", req.ip, "host ip was not set correctly")
-        assert_equal(false, req.authenticated, "host auth was not set correctly")
-        assert(! req.authenticated, "host was incorrectly considered authenticated")
-
-        req.authenticated = true
-        assert(req.authenticated, "host was not considered authenticated")
-
-        assert_raise(ArgumentError) do
-            req.call
-        end
-
-        req.handler = "yay"
-        req.method = "foo"
-        assert_equal("yay.foo", req.call, "call was not built correctly")
-
-        assert_equal("name(ip)", req.to_s, "request string not correct")
-    end
-end
-
-
diff --git a/test/network/daemon.rb b/test/network/daemon.rb
deleted file mode 100755
index 5105c6e..0000000
--- a/test/network/daemon.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/daemon'
-
-class TestDaemon < Test::Unit::TestCase
-	include PuppetTest
-
-    class FakeDaemon
-        include Puppet::Daemon
-    end
-
-    def test_pidfile
-        daemon = FakeDaemon.new
-
-        assert_nothing_raised("removing non-existent file failed") do
-            daemon.rmpidfile
-        end
-
-        Puppet[:pidfile] = tempfile()
-        assert_nothing_raised "could not lock" do
-            daemon.setpidfile
-        end
-
-        assert(FileTest.exists?(daemon.pidfile),
-            "did not create pidfile")
-
-        assert_nothing_raised("removing non-existent file failed") do
-            daemon.rmpidfile
-        end
-
-        assert(! FileTest.exists?(daemon.pidfile),
-            "did not remove pidfile")
-    end
-
-    def test_daemonize
-        daemon = FakeDaemon.new
-        Puppet[:pidfile] = tempfile()
-
-        exiter = tempfile()
-
-        assert_nothing_raised("Could not fork and daemonize") do
-            fork do
-                daemon.send(:daemonize)
-                # Wait a max of 5 secs
-                50.times do
-                    if FileTest.exists?(exiter)
-                        daemon.rmpidfile
-                        exit(0)
-                    end
-                    sleep 0.1
-                end
-                exit(0)
-            end
-        end
-        sleep(0.1)
-        assert(FileTest.exists?(Puppet[:pidfile]),
-            "did not create pidfile on daemonize")
-
-        File.open(exiter, "w") { |f| f.puts "" }
-
-        sleep(0.2)
-        assert(! FileTest.exists?(Puppet[:pidfile]),
-            "did not remove pidfile on process death")
-    end
-end
-
-
diff --git a/test/network/handler/bucket.rb b/test/network/handler/bucket.rb
deleted file mode 100755
index 1a70633..0000000
--- a/test/network/handler/bucket.rb
+++ /dev/null
@@ -1,313 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/handler/filebucket'
-require 'base64'
-require 'mocha'
-
-class TestBucket < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-
-    def out
-        if defined? @num
-            @num += 1
-        else
-            @num = 1
-        end
-
-        #Puppet.err "#{Process.pid}: %s: %s" % [@num, memory()]
-        #gcdebug(String)
-    end
-
-    # run through all of the files and exercise the filebucket methods
-    def checkfiles(client)
-        files = filelist()
-
-        # iterate across all of the files
-        files.each { |file|
-            Puppet.warning file
-            out
-            tempdir = tempfile()
-            Dir.mkdir(tempdir)
-            name = File.basename(file)
-            tmppath = File.join(tempdir,name)
-            @@tmpfiles << tmppath
-
-            out
-            # copy the files to our tmp directory so we can modify them...
-            FileUtils.cp(file, tmppath)
-
-            # make sure the copy worked
-            assert(FileTest.exists?(tmppath))
-
-            # backup both the orig file and the tmp file
-            osum = nil
-            tsum = nil
-            nsum = nil
-            out
-            assert_nothing_raised("Could not back up file") {
-                osum = client.backup(file)
-            }
-            out
-            assert_nothing_raised("Could not back up second file") {
-                tsum = client.backup(tmppath)
-            }
-            out
-
-            # verify you got the same sum back for both
-            assert(tsum == osum)
-
-            # modify our tmp file
-            unless FileTest.writable?(tmppath)
-                File.chmod(0644, tmppath)
-            end
-            File.open(tmppath,File::WRONLY|File::TRUNC) { |wf|
-                wf.print "This is some test text\n"
-            }
-            out
-
-            # back it up
-            assert_nothing_raised {
-                #STDERR.puts("backing up %s" % tmppath) if $debug
-                nsum = client.backup(tmppath)
-            }
-            out
-
-            # and verify the sum changed
-            assert(tsum != nsum)
-
-            # restore the orig
-            assert_nothing_raised {
-                nsum = client.restore(tmppath,tsum)
-            }
-            out
-
-            # and verify it actually got restored
-            contents = File.open(tmppath) { |rf|
-                #STDERR.puts("reading %s" % tmppath) if $debug
-                rf.read
-            }
-            out
-            csum = Digest::MD5.hexdigest(contents)
-            out
-            assert(tsum == csum)
-        }
-    end
-
-    # a list of files that should be on the system
-    # just something to test moving files around
-    def filelist
-        if defined? @files
-            return @files
-        else
-            @files = []
-        end
-
-        %w{
-            who bash sh uname /etc/passwd /etc/syslog.conf /etc/hosts 
-        }.each { |file|
-            # if it's fully qualified, just add it
-            if file =~ /^\//
-                if FileTest.exists?(file)
-                    @files.push file
-                end
-            else
-                # else if it's unqualified, look for it in our path
-                begin
-                    path = %x{which #{file}}
-                rescue => detail
-                    #STDERR.puts "Could not search for binaries: %s" % detail
-                    next
-                end
-
-                if path != ""
-                    @files.push path.chomp
-                end
-            end
-        }
-
-        return @files
-    end
-
-    def setup
-        super
-        @bucket = tempfile()
-    end
-
-    #def teardown
-    #    system("lsof -p %s" % Process.pid)
-    #    super
-    #end
-
-    # test operating against the local filebucket object
-    # this calls the direct server methods, which are different than the
-    # Dipper methods
-    def test_localserver
-        files = filelist()
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.filebucket.new(
-                :Path => @bucket
-            )
-        }
-
-        # iterate across them...
-        files.each { |file|
-            contents = File.open(file) { |of| of.read }
-
-            md5 = nil
-
-            # add a file to the repository
-            assert_nothing_raised {
-                #STDERR.puts("adding %s" % file) if $debug
-                md5 = server.addfile(Base64.encode64(contents),file)
-            }
-
-            # and get it back again
-            newcontents = nil
-            assert_nothing_raised {
-                #STDERR.puts("getting %s" % file) if $debug
-                newcontents = Base64.decode64(server.getfile(md5))
-            }
-
-            # and then make sure they're still the same
-            assert(
-                contents == newcontents
-            )
-        }
-    end
-
-    # test with a server and a Dipper
-    def test_localboth
-        files = filelist()
-
-        bucket = nil
-        client = nil
-        threads = []
-        assert_nothing_raised {
-            bucket = Puppet::Network::Handler.filebucket.new(
-                :Path => @bucket
-            )
-        }
-
-        #sleep(30)
-        assert_nothing_raised {
-            client = Puppet::Network::Client.dipper.new(
-                :Bucket => bucket
-            )
-        }
-
-        #4.times { checkfiles(client) }
-        checkfiles(client)
-    end
-
-    def test_no_path_duplicates
-        bucket = nil
-        assert_nothing_raised {
-            bucket = Puppet::Network::Handler.filebucket.new(
-                :Path => @bucket
-            )
-        }
-
-        sum = nil
-        assert_nothing_raised {
-            sum = bucket.addfile("yayness", "/my/file")
-        }
-        assert_nothing_raised {
-            bucket.addfile("yayness", "/my/file")
-        }
-
-        a, b, pathfile = bucket.class.paths(bucket.path, sum)
-
-        assert(FileTest.exists?(pathfile), "No path file at %s" % pathfile)
-
-        assert_equal("/my/file\n", File.read(pathfile))
-    end
-
-    # #447 -- a flat file structure just won't suffice.
-    def test_deeper_filestructure
-        bucket = Puppet::Network::Handler.filebucket.new(:Path => @bucket)
-
-        text = "this is some text"
-        md5 = Digest::MD5.hexdigest(text)
-
-        olddir = File.join(@bucket, md5)
-        FileUtils.mkdir_p(olddir)
-        oldcontent = File.join(olddir, "contents")
-        File.open(oldcontent, "w") { |f| f.print text }
-
-        result = nil
-        assert_nothing_raised("Could not retrieve content from old structure") do
-            result = bucket.getfile(md5)
-        end
-        assert_equal(text, result, "old-style content is wrong")
-
-        text = "and this is some new text"
-        md5 = Digest::MD5.hexdigest(text)
-
-        dirs = File.join(md5[0..7].split(""))
-        dir = File.join(@bucket, dirs, md5)
-        filedir, contents, paths = bucket.class.paths(@bucket, md5)
-
-        assert_equal(dir, filedir, "did not use a deeper file structure") 
-        assert_equal(File.join(dir, "contents"), contents,
-            "content path is not the deeper version")
-        assert_equal(File.join(dir, "paths"), paths,
-            "paths file path is not the deeper version")
-
-        # Store our new text and make sure it gets stored in the new location
-        path = "/some/fake/path"
-        assert_nothing_raised("Could not store text") do
-            bucket.addfile(text, path)
-        end
-        assert(FileTest.exists?(contents), "did not create content file")
-        assert_equal(text, File.read(contents), "content is not right")
-        assert(FileTest.exists?(paths), "did not create paths file")
-        assert(File.read(paths).include?(path), "paths file does not contain path")
-
-        # And make sure we get it back out again
-        assert_nothing_raised("Could not retrieve new-style content") do
-            result = bucket.getfile(md5)
-        end
-        assert_equal(text, result, "did not retrieve new content correctly")
-    end
-
-    def test_add_path
-        bucket = Puppet::Network::Handler.filebucket.new(:Path => @bucket)
-
-        file = tempfile()
-
-        assert(! FileTest.exists?(file), "file already exists")
-
-        path = "/some/thing"
-        assert_nothing_raised("Could not add path") do
-            bucket.send(:add_path, path, file)
-        end
-        assert_equal(path + "\n", File.read(file), "path was not added")
-
-        assert_nothing_raised("Could not add path second time") do
-            bucket.send(:add_path, path, file)
-        end
-        assert_equal(path + "\n", File.read(file), "path was duplicated")
-
-        # Now try a new path
-        newpath = "/another/path"
-        assert_nothing_raised("Could not add path second time") do
-            bucket.send(:add_path, newpath, file)
-        end
-        text = [path, newpath].join("\n") + "\n"
-        assert_equal(text, File.read(file), "path was duplicated")
-
-        assert_nothing_raised("Could not add path third time") do
-            bucket.send(:add_path, path, file)
-        end
-        assert_equal(text, File.read(file), "path was duplicated")
-        assert_nothing_raised("Could not add second path second time") do
-            bucket.send(:add_path, newpath, file)
-        end
-        assert_equal(text, File.read(file), "path was duplicated")
-    end
-end
-
diff --git a/test/network/handler/ca.rb b/test/network/handler/ca.rb
deleted file mode 100755
index 16782bb..0000000
--- a/test/network/handler/ca.rb
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/handler/ca'
-require 'mocha'
-
-if ARGV.length > 0 and ARGV[0] == "short"
-    $short = true
-else
-    $short = false
-end
-
-class TestCA < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-
-    def setup
-        Puppet::Util::SUIDManager.stubs(:asuser).yields
-        super
-    end
-
-    # Verify that we're autosigning.  We have to autosign a "different" machine,
-    # since we always autosign the CA server's certificate.
-    def test_autocertgeneration
-        ca = nil
-
-        # create our ca
-        assert_nothing_raised {
-            ca = Puppet::Network::Handler.ca.new(:autosign => true)
-        }
-
-        # create a cert with a fake name
-        key = nil
-        csr = nil
-        cert = nil
-        hostname = "test.domain.com"
-        assert_nothing_raised {
-            cert = Puppet::SSLCertificates::Certificate.new(
-                :name => "test.domain.com"
-            )
-        }
-
-        # make the request
-        assert_nothing_raised {
-            cert.mkcsr
-        }
-
-        # and get it signed
-        certtext = nil
-        cacerttext = nil
-        assert_nothing_raised {
-            certtext, cacerttext = ca.getcert(cert.csr.to_s)
-        }
-
-        # they should both be strings
-        assert_instance_of(String, certtext)
-        assert_instance_of(String, cacerttext)
-
-        # and they should both be valid certs
-        assert_nothing_raised {
-            OpenSSL::X509::Certificate.new(certtext)
-        }
-        assert_nothing_raised {
-            OpenSSL::X509::Certificate.new(cacerttext)
-        }
-
-        # and pull it again, just to make sure we're getting the same thing
-        newtext = nil
-        assert_nothing_raised {
-            newtext, cacerttext = ca.getcert(
-                cert.csr.to_s, "test.reductivelabs.com", "127.0.0.1"
-            )
-        }
-
-        assert_equal(certtext,newtext)
-    end
-
-    # this time don't use autosign
-    def test_storeAndSign
-        ca = nil
-        caserv = nil
-
-        # make our CA server
-        assert_nothing_raised {
-            caserv = Puppet::Network::Handler.ca.new(:autosign => false)
-        }
-
-        # retrieve the actual ca object
-        assert_nothing_raised {
-            ca = caserv.ca
-        }
-
-        # make our test cert again
-        key = nil
-        csr = nil
-        cert = nil
-        hostname = "test.domain.com"
-        assert_nothing_raised {
-            cert = Puppet::SSLCertificates::Certificate.new(
-                :name => "anothertest.domain.com"
-            )
-        }
-        # and the CSR
-        assert_nothing_raised {
-            cert.mkcsr
-        }
-
-        # retrieve them
-        certtext = nil
-        assert_nothing_raised {
-            certtext, cacerttext = caserv.getcert(
-                cert.csr.to_s, "test.reductivelabs.com", "127.0.0.1"
-            )
-        }
-
-        # verify we got nothing back, since autosign is off
-        assert_equal("", certtext)
-
-        # now sign it manually, with the CA object
-        x509 = nil
-        assert_nothing_raised {
-            x509, cacert = ca.sign(cert.csr)
-        }
-
-        # and write it out
-        cert.cert = x509
-        assert_nothing_raised {
-            cert.write
-        }
-
-        assert(File.exists?(cert.certfile))
-
-        # now get them again, and verify that we actually get them
-        newtext = nil
-        assert_nothing_raised {
-            newtext, cacerttext  = caserv.getcert(cert.csr.to_s)
-        }
-
-        assert(newtext)
-        assert_nothing_raised {
-            OpenSSL::X509::Certificate.new(newtext)
-        }
-
-        # Now verify that we can clean a given host's certs
-        assert_nothing_raised {
-            ca.clean("anothertest.domain.com")
-        }
-
-        assert(!File.exists?(cert.certfile), "Cert still exists after clean")
-    end
-
-    # and now test the autosign file
-    def test_autosign
-        autosign = File.join(tmpdir, "autosigntesting")
-        @@tmpfiles << autosign
-        File.open(autosign, "w") { |f|
-            f.puts "hostmatch.domain.com"
-            f.puts "*.other.com"
-        }
-
-        caserv = nil
-        assert_nothing_raised {
-            caserv = Puppet::Network::Handler.ca.new(:autosign => autosign)
-        }
-
-        # make sure we know what's going on
-        assert(caserv.autosign?("hostmatch.domain.com"))
-        assert(caserv.autosign?("fakehost.other.com"))
-        assert(!caserv.autosign?("kirby.reductivelabs.com"))
-        assert(!caserv.autosign?("culain.domain.com"))
-    end
-
-    # verify that things aren't autosigned by default
-    def test_nodefaultautosign
-        caserv = nil
-        assert_nothing_raised {
-            caserv = Puppet::Network::Handler.ca.new()
-        }
-
-        # make sure we know what's going on
-        assert(!caserv.autosign?("hostmatch.domain.com"))
-        assert(!caserv.autosign?("fakehost.other.com"))
-        assert(!caserv.autosign?("kirby.reductivelabs.com"))
-        assert(!caserv.autosign?("culain.domain.com"))
-    end
-
-    # We want the CA to autosign its own certificate, because otherwise
-    # the puppetmasterd CA does not autostart.
-    def test_caautosign
-        server = nil
-        Puppet[:name] = "puppetmasterd"
-        assert_nothing_raised {
-            server = Puppet::Network::HTTPServer::WEBrick.new(
-                :Port => @@port,
-                :Handlers => {
-                    :CA => {}, # so that certs autogenerate
-                    :Status => nil
-                }
-            )
-        }
-    end
-
-    # Make sure true/false causes the file to be ignored.
-    def test_autosign_true_beats_file
-        caserv = nil
-        assert_nothing_raised {
-            caserv = Puppet::Network::Handler.ca.new()
-        }
-
-        host = "hostname.domain.com"
-
-        # Create an autosign file
-        file = tempfile()
-        Puppet[:autosign] = file
-
-        File.open(file, "w") { |f|
-            f.puts host
-        }
-
-        # Start with "false"
-        Puppet[:autosign] = false
-
-        assert(! caserv.autosign?(host), "Host was incorrectly autosigned")
-
-        # Then set it to true
-        Puppet[:autosign] = true
-        assert(caserv.autosign?(host), "Host was not autosigned")
-        # And try a different host
-        assert(caserv.autosign?("other.yay.com"), "Host was not autosigned")
-
-        # And lastly the file
-        Puppet[:autosign] = file
-        assert(caserv.autosign?(host), "Host was not autosigned")
-
-        # And try a different host
-        assert(! caserv.autosign?("other.yay.com"), "Host was autosigned")
-    end
-
-    # Make sure that a CSR created with keys that don't match the existing
-    # cert throws an exception on the server.
-    def test_mismatched_public_keys_throws_exception
-        ca = Puppet::Network::Handler.ca.new()
-
-        # First initialize the server
-        client = Puppet::Network::Client.ca.new :CA => ca
-        client.request_cert
-        File.unlink(Puppet[:hostcsr])
-
-        # Now use a different cert name
-        Puppet[:certname] = "my.host.com"
-        client = Puppet::Network::Client.ca.new :CA => ca
-        firstcsr = client.csr
-        File.unlink(Puppet[:hostcsr]) if FileTest.exists?(Puppet[:hostcsr])
-
-        assert_nothing_raised("Could not get cert") do
-            ca.getcert(firstcsr.to_s)
-        end
-
-        # Now get rid of the public key, forcing a new csr
-        File.unlink(Puppet[:hostprivkey])
-
-        client = Puppet::Network::Client.ca.new :CA => ca
-
-        second_csr = client.csr
-
-        assert(firstcsr.to_s != second_csr.to_s, "CSR did not change")
-
-        assert_raise(Puppet::Error, "CA allowed mismatched keys") do
-            ca.getcert(second_csr.to_s)
-        end
-    end
-end
-
diff --git a/test/network/handler/fileserver.rb b/test/network/handler/fileserver.rb
deleted file mode 100755
index 873657e..0000000
--- a/test/network/handler/fileserver.rb
+++ /dev/null
@@ -1,1183 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/handler/fileserver'
-
-class TestFileServer < Test::Unit::TestCase
-	include PuppetTest
-
-    def mkmount(path = nil)
-        mount = nil
-        name = "yaytest"
-        base = path || tempfile()
-        unless FileTest.exists?(base)
-            Dir.mkdir(base)
-        end
-        # Create a test file
-        File.open(File.join(base, "file"), "w") { |f| f.puts "bazoo" }
-        assert_nothing_raised {
-            mount = Puppet::Network::Handler.fileserver::Mount.new(name, base)
-        }
-
-        return mount
-    end
-    # make a simple file source
-    def mktestdir
-        testdir = File.join(tmpdir(), "remotefilecopytesting")
-        @@tmpfiles << testdir
-
-        # create a tmpfile
-        pattern = "tmpfile"
-        tmpfile = File.join(testdir, pattern)
-        assert_nothing_raised {
-            Dir.mkdir(testdir)
-            File.open(tmpfile, "w") { |f|
-                3.times { f.puts rand(100) }
-            }
-        }
-
-        return [testdir, %r{#{pattern}}, tmpfile]
-    end
-
-    # make a bunch of random test files
-    def mktestfiles(testdir)
-        @@tmpfiles << testdir
-        assert_nothing_raised {
-            files = %w{a b c d e}.collect { |l|
-                name = File.join(testdir, "file%s" % l)
-                File.open(name, "w") { |f|
-                    f.puts rand(100)
-                }
-                
-                name
-            }
-
-            return files
-        }
-    end
-
-    def assert_describe(base, file, server)
-        file = File.basename(file)
-        assert_nothing_raised {
-            desc = server.describe(base + file)
-            assert(desc, "Got no description for %s" % file)
-            assert(desc != "", "Got no description for %s" % file)
-            assert_match(/^\d+/, desc, "Got invalid description %s" % desc)
-        }
-    end
-
-    # test for invalid names
-    def test_namefailures
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        [" ", "=" "+", "&", "#", "*"].each do |char|
-            assert_raise(Puppet::Network::Handler::FileServerError, "'%s' did not throw a failure in fileserver module names" % char) {
-                server.mount("/tmp", "invalid%sname" % char)
-            }
-        end
-    end
-
-    # verify that listing the root behaves as expected
-    def test_listroot
-        server = nil
-        testdir, pattern, tmpfile = mktestdir()
-
-        file = nil
-        checks = Puppet::Network::Handler.fileserver::CHECKPARAMS
-
-        # and make our fileserver
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        # mount the testdir
-        assert_nothing_raised {
-            server.mount(testdir, "test")
-        }
-
-        # and verify different iterations of 'root' return the same value
-        list = nil
-        assert_nothing_raised {
-            list = server.list("/test/", :manage, true, false)
-        }
-
-        assert(list =~ pattern)
-
-        assert_nothing_raised {
-            list = server.list("/test", :manage, true, false)
-        }
-        assert(list =~ pattern)
-
-    end
-
-    # test listing individual files
-    def test_getfilelist
-        server = nil
-        testdir, pattern, tmpfile = mktestdir()
-
-        file = nil
-
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        assert_nothing_raised {
-            server.mount(testdir, "test")
-        }
-
-        # get our listing
-        list = nil
-        sfile = "/test/tmpfile"
-        assert_nothing_raised {
-            list = server.list(sfile, :manage, true, false)
-        }
-
-        assert_nothing_raised {
-            file = Puppet.type(:file)[tmpfile]
-        }
-
-        output = "/\tfile"
-
-        # verify it got listed as a file
-        assert_equal(output, list)
-
-        # verify we got all fields
-        assert(list !~ /\t\t/)
-
-        # verify that we didn't get the directory itself
-        list.split("\n").each { |line|
-            assert(line !~ %r{remotefile})
-        }
-
-        # and then verify that the contents match
-        contents = File.read(tmpfile)
-
-        ret = nil
-        assert_nothing_raised {
-            ret = server.retrieve(sfile)
-        }
-
-        assert_equal(contents, ret)
-    end
-
-    # check that the fileserver is seeing newly created files
-    def test_seenewfiles
-        server = nil
-        testdir, pattern, tmpfile = mktestdir()
-
-
-        newfile = File.join(testdir, "newfile")
-
-        # go through the whole schtick again...
-        file = nil
-        checks = Puppet::Network::Handler.fileserver::CHECKPARAMS
-
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        assert_nothing_raised {
-            server.mount(testdir, "test")
-        }
-
-        list = nil
-        sfile = "/test/"
-        assert_nothing_raised {
-            list = server.list(sfile, :manage, true, false)
-        }
-
-        # create the new file
-        File.open(newfile, "w") { |f|
-            3.times { f.puts rand(100) }
-        }
-
-        newlist = nil
-        assert_nothing_raised {
-            newlist = server.list(sfile, :manage, true, false)
-        }
-
-        # verify the list has changed
-        assert(list != newlist)
-
-        # and verify that we are specifically seeing the new file
-        assert(newlist =~ /newfile/)
-    end
-
-    # verify we can mount /, which is what local file servers will
-    # normally do
-    def test_mountroot
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        assert_nothing_raised {
-            server.mount("/", "root")
-        }
-
-        testdir, pattern, tmpfile = mktestdir()
-
-        list = nil
-        assert_nothing_raised {
-            list = server.list("/root/" + testdir, :manage, true, false)
-        }
-
-        assert(list =~ pattern)
-        assert_nothing_raised {
-            list = server.list("/root" + testdir, :manage, true, false)
-        }
-
-        assert(list =~ pattern)
-    end
-
-    # verify that we're correctly recursing the right number of levels
-    def test_recursionlevels
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        # make our deep recursion
-        basedir = File.join(tmpdir(), "recurseremotetesting")
-        testdir = "%s/with/some/sub/directories/for/the/purposes/of/testing" % basedir
-        oldfile = File.join(testdir, "oldfile")
-        assert_nothing_raised {
-            system("mkdir -p %s" % testdir)
-            File.open(oldfile, "w") { |f|
-                3.times { f.puts rand(100) }
-            }
-            @@tmpfiles << basedir
-        }
-
-        assert_nothing_raised {
-            server.mount(basedir, "test")
-        }
-
-        # get our list
-        list = nil
-        assert_nothing_raised {
-            list = server.list("/test/with", :manage, false, false)
-        }
-
-        # make sure we only got one line, since we're not recursing
-        assert(list !~ /\n/)
-
-        # for each level of recursion, make sure we get the right list
-        [0, 1, 2].each { |num|
-            assert_nothing_raised {
-                list = server.list("/test/with", :manage, num, false)
-            }
-
-            count = 0
-            while list =~ /\n/
-                list.sub!(/\n/, '')
-                count += 1
-            end
-            assert_equal(num, count)
-        }
-    end
-
-    # verify that we're not seeing the dir we ask for; i.e., that our
-    # list is relative to that dir, not it's parent dir
-    def test_listedpath
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-
-        # create a deep dir
-        basedir = tempfile()
-        testdir = "%s/with/some/sub/directories/for/testing" % basedir
-        oldfile = File.join(testdir, "oldfile")
-        assert_nothing_raised {
-            system("mkdir -p %s" % testdir)
-            File.open(oldfile, "w") { |f|
-                3.times { f.puts rand(100) }
-            }
-            @@tmpfiles << basedir
-        }
-
-        # mounty mounty
-        assert_nothing_raised {
-            server.mount(basedir, "localhost")
-        }
-
-        list = nil
-        # and then check a few dirs
-        assert_nothing_raised {
-            list = server.list("/localhost/with", :manage, false, false)
-        }
-
-        assert(list !~ /with/)
-
-        assert_nothing_raised {
-            list = server.list("/localhost/with/some/sub", :manage, true, false)
-        }
-
-        assert(list !~ /sub/)
-    end
-
-    # test many dirs, not necessarily very deep
-    def test_widelists
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        basedir = tempfile()
-        dirs = %w{a set of directories}
-        assert_nothing_raised {
-            Dir.mkdir(basedir)
-            dirs.each { |dir|
-                Dir.mkdir(File.join(basedir, dir))
-            }
-            @@tmpfiles << basedir
-        }
-
-        assert_nothing_raised {
-            server.mount(basedir, "localhost")
-        }
-
-        list = nil
-        assert_nothing_raised {
-            list = server.list("/localhost/", :manage, 1, false)
-        }
-        assert_instance_of(String, list, "Server returned %s instead of string")
-        list = list.split("\n")
-
-        assert_equal(dirs.length + 1, list.length)
-    end
-
-    # verify that 'describe' works as advertised
-    def test_describe
-        server = nil
-        testdir = tstdir()
-        files = mktestfiles(testdir)
-
-        file = nil
-        checks = Puppet::Network::Handler.fileserver::CHECKPARAMS
-
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        assert_nothing_raised {
-            server.mount(testdir, "test")
-        }
-
-        # get our list
-        list = nil
-        sfile = "/test/"
-        assert_nothing_raised {
-            list = server.list(sfile, :manage, true, false)
-        }
-
-        # and describe each file in the list
-        assert_nothing_raised {
-            list.split("\n").each { |line|
-                file, type = line.split("\t")
-
-                desc = server.describe(sfile + file)
-            }
-        }
-
-        # and then make sure we can describe everything that we know is there
-        files.each { |file|
-            assert_describe(sfile, file, server)
-        }
-
-        # And then describe some files that we know aren't there
-        retval = nil
-        assert_nothing_raised("Describing non-existent files raised an error") {
-            retval = server.describe(sfile + "noexisties")
-        }
-
-        assert_equal("", retval, "Description of non-existent files returned a value")
-
-        # Now try to describe some sources that don't even exist
-        retval = nil
-        assert_raise(Puppet::Network::Handler::FileServerError,
-            "Describing non-existent mount did not raise an error") {
-            retval = server.describe("/notmounted/" + "noexisties")
-        }
-
-        assert_nil(retval, "Description of non-existent mounts returned a value")
-    end
-
-    def test_describe_does_not_fail_when_mount_does_not_find_file
-        server = Puppet::Network::Handler.fileserver.new(:Local => true, :Config => false)
-
-        assert_nothing_raised("Failed when describing missing plugins") do
-            server.describe "/plugins"
-        end
-    end
-
-    # test that our config file is parsing and working as planned
-    def test_configfile
-        server = nil
-        basedir = File.join(tmpdir, "fileserverconfigfiletesting")
-        @@tmpfiles << basedir
-
-        # make some dirs for mounting
-        Dir.mkdir(basedir)
-        mounts = {}
-        %w{thing thus the-se those}.each { |dir|
-            path = File.join(basedir, dir)
-            Dir.mkdir(path)
-            mounts[dir] = mktestfiles(path)
-
-        }
-
-        # create an example file with each of them
-        conffile = tempfile
-        @@tmpfiles << conffile
-
-        File.open(conffile, "w") { |f|
-            f.print "# a test config file
- 
-[thing]
-    path #{basedir}/thing
-    allow 192.168.0.*
-
-[thus]
-    path #{basedir}/thus
-    allow *.madstop.com, *.kanies.com
-    deny *.sub.madstop.com
-
-[the-se]
-    path #{basedir}/the-se
-
-[those]
-    path #{basedir}/those
-
-"
-        }
-        
-
-        # create a server with the file
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => false,
-                :Config => conffile
-            )
-        }
-
-        list = nil
-        # run through once with no host/ip info, to verify everything is working
-        mounts.each { |mount, files|
-            mount = "/#{mount}/"
-            assert_nothing_raised {
-                list = server.list(mount, :manage, true, false)
-            }
-
-            assert_nothing_raised {
-                list.split("\n").each { |line|
-                    file, type = line.split("\t")
-
-                    desc = server.describe(mount + file)
-                }
-            }
-
-            files.each { |f|
-                assert_describe(mount, f, server)
-            }
-        }
-
-        # now let's check that things are being correctly forbidden
-        # this is just a map of names and expected results
-        {
-            "thing" => {
-                :deny => [
-                    ["hostname.com", "192.168.1.0"],
-                    ["hostname.com", "192.158.0.0"]
-                ],
-                :allow => [
-                    ["hostname.com", "192.168.0.0"],
-                    ["hostname.com", "192.168.0.245"],
-                ]
-            },
-            "thus" => {
-                :deny => [
-                    ["hostname.com", "192.168.1.0"],
-                    ["name.sub.madstop.com", "192.158.0.0"]
-                ],
-                :allow => [
-                    ["luke.kanies.com", "192.168.0.0"],
-                    ["luke.madstop.com", "192.168.0.245"],
-                ]
-            }
-        }.each { |mount, hash|
-            mount = "/#{mount}/"
-
-            # run through the map
-            hash.each { |type, ary|
-                ary.each { |sub|
-                    host, ip = sub
-
-                    case type
-                    when :deny:
-                        assert_raise(Puppet::AuthorizationError,
-                            "Host %s, ip %s, allowed %s" %
-                            [host, ip, mount]) {
-                                list = server.list(mount, :manage, true, false, host, ip)
-                        }
-                    when :allow:
-                        assert_nothing_raised("Host %s, ip %s, denied %s" %
-                            [host, ip, mount]) {
-                                list = server.list(mount, :manage, true, false, host, ip)
-                        }
-                    end
-                }
-            }
-        }
-
-    end
-
-    # Test that we smoothly handle invalid config files
-    def test_configfailures
-        # create an example file with each of them
-        conffile = tempfile()
-
-        invalidmounts = {
-            "noexist" => "[noexist]
-    path /this/path/does/not/exist
-    allow 192.168.0.*
-"
-}
-
-        invalidconfigs = [
-"[not valid]
-    path /this/path/does/not/exist
-    allow 192.168.0.*
-",
-"[valid]
-    invalidstatement
-    path /etc
-    allow 192.168.0.*
-",
-"[valid]
-    allow 192.168.0.*
-"
-]
-
-        invalidmounts.each { |mount, text|
-            File.open(conffile, "w") { |f|
-                f.print text
-            }
-            
-
-            # create a server with the file
-            server = nil
-            assert_nothing_raised {
-                server = Puppet::Network::Handler.fileserver.new(
-                    :Local => true,
-                    :Config => conffile
-                )
-            }
-
-            assert_raise(Puppet::Network::Handler::FileServerError,
-                "Invalid mount was mounted") {
-                    server.list(mount, :manage)
-            }
-        }
-
-        invalidconfigs.each_with_index { |text, i|
-            File.open(conffile, "w") { |f|
-                f.print text
-            }
-            
-
-            # create a server with the file
-            server = nil
-            assert_raise(Puppet::Network::Handler::FileServerError,
-                "Invalid config %s did not raise error" % i) {
-                server = Puppet::Network::Handler.fileserver.new(
-                    :Local => true,
-                    :Config => conffile
-                )
-            }
-        }
-    end
-
-    # verify we reread the config file when it changes
-    def test_filereread
-        server = nil
-
-        conffile = tempfile()
-        dir = tstdir()
-
-        files = mktestfiles(dir)
-        File.open(conffile, "w") { |f|
-            f.print "# a test config file
- 
-[thing]
-    path #{dir}
-    allow test1.domain.com
-"
-        }
-        
-        # Reset the timeout, so we reload faster
-        Puppet[:filetimeout] = 0.5
-
-        # start our server with a fast timeout
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => false,
-                :Config => conffile
-            )
-        }
-
-        list = nil
-        assert_nothing_raised {
-            list = server.list("/thing/", :manage, false, false,
-                "test1.domain.com", "127.0.0.1")
-        }
-        assert(list != "", "List returned nothing in rereard test")
-
-        assert_raise(Puppet::AuthorizationError, "List allowed invalid host") {
-            list = server.list("/thing/", :manage, false, false,
-                "test2.domain.com", "127.0.0.1")
-        }
-
-        sleep 1
-        File.open(conffile, "w") { |f|
-            f.print "# a test config file
- 
-[thing]
-    path #{dir}
-    allow test2.domain.com
-"
-        }
-        
-        assert_raise(Puppet::AuthorizationError, "List allowed invalid host") {
-            list = server.list("/thing/", :manage, false, false,
-                "test1.domain.com", "127.0.0.1")
-        }
-
-        assert_nothing_raised {
-            list = server.list("/thing/", :manage, false, false,
-                "test2.domain.com", "127.0.0.1")
-        }
-
-        assert(list != "", "List returned nothing in rereard test")
-
-        list = nil
-    end
-
-    # Verify that we get converted to the right kind of string
-    def test_mountstring
-        mount = nil
-        name = "yaytest"
-        path = tmpdir()
-        assert_nothing_raised {
-            mount = Puppet::Network::Handler.fileserver::Mount.new(name, path)
-        }
-
-        assert_equal("mount[#{name}]", mount.to_s)
-    end
-
-    def test_servinglinks
-        # Disable the checking, so changes propagate immediately.
-        Puppet[:filetimeout] = -5
-        server = nil
-        source = tempfile()
-        file = File.join(source, "file")
-        link = File.join(source, "link")
-        Dir.mkdir(source)
-        File.open(file, "w") { |f| f.puts "yay" }
-        File.symlink(file, link)
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        assert_nothing_raised {
-            server.mount(source, "mount")
-        }
-
-        # First describe the link when following
-        results = {}
-        assert_nothing_raised {
-            server.describe("/mount/link", :follow).split("\t").zip(
-                Puppet::Network::Handler.fileserver::CHECKPARAMS
-            ).each { |v,p| results[p] = v }
-        }
-
-        assert_equal("file", results[:type])
-
-        # Then not
-        results = {}
-        assert_nothing_raised {
-            server.describe("/mount/link", :manage).split("\t").zip(
-                Puppet::Network::Handler.fileserver::CHECKPARAMS
-            ).each { |v,p| results[p] = v }
-        }
-
-        assert_equal("link", results[:type])
-
-        results.each { |p,v|
-            assert(v, "%s has no value" % p)
-            assert(v != "", "%s has no value" % p)
-        }
-    end
-
-    # Test that substitution patterns in the path are exapanded
-    # properly.  Disabled, because it was testing too much of the process
-    # and in a non-portable way.  This is a thorough enough test that it should
-    # be kept, but it should be done in a way that is clearly portable (e.g.,
-    # no md5 sums of file paths).
-    def test_host_specific
-        client1 = "client1.example.com"
-        client2 = "client2.example.com"
-        ip = "127.0.0.1"
-
-        # Setup a directory hierarchy for the tests
-        fsdir = File.join(tmpdir(), "host-specific")
-        @@tmpfiles << fsdir
-        hostdir = File.join(fsdir, "host")
-        fqdndir = File.join(fsdir, "fqdn")
-        client1_hostdir = File.join(hostdir, "client1")
-        client2_fqdndir = File.join(fqdndir, client2)
-        contents = {
-            client1_hostdir => "client1\n",
-            client2_fqdndir => client2 + "\n"
-        }
-        [fsdir, hostdir, fqdndir, 
-         client1_hostdir, client2_fqdndir].each { |d|  Dir.mkdir(d) }
-        
-        [client1_hostdir, client2_fqdndir].each do |d|
-            File.open(File.join(d, "file.txt"), "w") do |f| 
-                f.print contents[d] 
-            end
-        end
-        conffile = tempfile()
-        File.open(conffile, "w") do |f|
-            f.print("
-[host]
-path #{hostdir}/%h
-allow *
-[fqdn]
-path #{fqdndir}/%H
-allow *
-")
-        end
-
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => conffile
-            )
-        }
-
-        # check that list returns the correct thing for the two clients
-        list = nil
-        sfile = "/host/file.txt"
-        assert_nothing_raised {
-            list = server.list(sfile, :manage, true, false, client1, ip)
-        }
-        assert_equal("/\tfile", list)
-        assert_nothing_raised {
-            list = server.list(sfile, :manage, true, false, client2, ip)
-        }
-        assert_equal("", list)
-
-        sfile = "/fqdn/file.txt"
-        assert_nothing_raised {
-            list = server.list(sfile, :manage, true, false, client1, ip)
-        }
-        assert_equal("", list)
-        assert_nothing_raised {
-            list = server.list(sfile, :manage, true, false, client2, ip)
-        }
-        assert_equal("/\tfile", list)
-
-        # check describe
-        sfile = "/host/file.txt"
-        assert_nothing_raised {
-            list = server.describe(sfile, :manage, client1, ip).split("\t")
-        }
-        assert_equal(5, list.size)
-        assert_equal("file", list[1])
-        md5 = Digest::MD5.hexdigest(contents[client1_hostdir])
-        assert_equal("{md5}#{md5}", list[4])
-
-        assert_nothing_raised {
-            list = server.describe(sfile, :manage, client2, ip).split("\t")
-        }
-        assert_equal([], list)
-
-        sfile = "/fqdn/file.txt"
-        assert_nothing_raised {
-            list = server.describe(sfile, :manage, client1, ip).split("\t")
-        }
-        assert_equal([], list)
-
-        assert_nothing_raised {
-            list = server.describe(sfile, :manage, client2, ip).split("\t")
-        }
-        assert_equal(5, list.size)
-        assert_equal("file", list[1])
-        md5 = Digest::MD5.hexdigest(contents[client2_fqdndir])
-        assert_equal("{md5}#{md5}", list[4])
-
-        # Check retrieve
-        sfile = "/host/file.txt"
-        assert_nothing_raised {
-            list = server.retrieve(sfile, :manage, client1, ip).chomp
-        }
-        assert_equal(contents[client1_hostdir].chomp, list)
-
-        assert_nothing_raised {
-            list = server.retrieve(sfile, :manage, client2, ip).chomp
-        }
-        assert_equal("", list)
-
-        sfile = "/fqdn/file.txt"
-        assert_nothing_raised {
-            list = server.retrieve(sfile, :manage, client1, ip).chomp
-        }
-        assert_equal("", list)
-
-        assert_nothing_raised {
-            list = server.retrieve(sfile, :manage, client2, ip).chomp
-        }
-        assert_equal(contents[client2_fqdndir].chomp, list)
-    end
-
-    # Make sure the 'subdir' method in Mount works.
-    def test_mount_subdir
-        mount = nil
-        base = tempfile()
-        Dir.mkdir(base)
-        subdir = File.join(base, "subdir")
-        Dir.mkdir(subdir)
-        [base, subdir].each do |d|
-            File.open(File.join(d, "file"), "w") { |f| f.puts "bazoo" }
-        end
-        mount = mkmount(base)
-
-        assert_equal(base, mount.subdir(), "Did not default to base path")
-        assert_equal(subdir, mount.subdir("subdir"), "Did not default to base path")
-    end
-
-    # Make sure mounts get correctly marked expandable or not, depending on
-    # the path.
-    def test_expandable
-        name = "yaytest"
-        dir = tempfile()
-        Dir.mkdir(dir)
-
-        mount = mkmount()
-        assert_nothing_raised {
-            mount.path = dir
-        }
-
-        assert(! mount.expandable?, "Mount incorrectly called expandable")
-
-        assert_nothing_raised {
-            mount.path = "/dir/a%a"
-        }
-        assert(mount.expandable?, "Mount not called expandable")
-
-        # This isn't a valid replacement pattern, so it should throw an error
-        # because the dir doesn't exist
-        assert_raise(Puppet::Network::Handler::FileServerError) {
-            mount.path = "/dir/a%"
-        }
-
-        # Now send it back to a normal path
-        assert_nothing_raised {
-            mount.path = dir
-        }
-        # Make sure it got reverted
-        assert(! mount.expandable?, "Mount incorrectly called expandable")
-
-
-    end
-
-    def test_mount_expand
-        mount = mkmount()
-
-        check = proc do |client, pattern, repl|
-            path = "/my/#{pattern}/file"
-            assert_equal("/my/#{repl}/file", mount.expand(path, client))
-        end
-
-        # Do a round of checks with a fake client
-        client = "host.domain.com"
-        {"%h" => "host", # Short name
-         "%H" => client, # Full name
-         "%d" => "domain.com", # domain
-         "%%" => "%", # escape
-         "%o" => "%o" # other
-         }.each do |pat, repl|
-             result = check.call(client, pat, repl)
-         end
-
-        # Now, check that they use Facter info 
-        Puppet.notice "The following messages are normal"
-        client = nil
-        Facter.stubs(:value).with(:ipaddress).returns("127.0.0.1")
-        Facter.stubs(:value).with { |v| v.to_s == "hostname" }.returns("myhost")
-        Facter.stubs(:value).with { |v| v.to_s == "domain" }.returns("mydomain.com")
-        Facter.stubs(:value).with(:domain).returns("mydomain.com")
-
-        {"%h" => "myhost", # Short name
-         "%H" => "myhost.mydomain.com", # Full name
-         "%d" => "mydomain.com", # domain
-         "%%" => "%", # escape
-         "%o" => "%o" # other
-         }.each do |pat, repl|
-             check.call(client, pat, repl)
-         end
-
-    end
-
-    # Test that the fileserver expands the %h and %d things.
-    def test_fileserver_expansion
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.fileserver.new(
-                :Local => true,
-                :Config => false
-            )
-        }
-
-        dir = tempfile()
-        Facter.stubs(:value).with(:ipaddress).returns("127.0.0.1")
-        Facter.stubs(:value).with { |v| v.to_s == "hostname" }.returns("myhost")
-        Facter.stubs(:value).with { |v| v.to_s == "domain" }.returns("mydomain.com")
-        Facter.stubs(:value).with(:domain).returns("mydomain.com")
-        ip = Facter.value(:ipaddress)
-
-        Dir.mkdir(dir)
-        host = "myhost.mydomain.com"
-        {
-            "%H" => "myhost.mydomain.com", "%h" => "myhost", "%d" => "mydomain.com"
-        }.each do |pattern, string|
-            file = File.join(dir, string)
-            mount = File.join(dir, pattern)
-            File.open(file, "w") do |f| f.puts "yayness: %s" % string end
-            name = "name"
-            obj = nil
-            assert_nothing_raised {
-                obj = server.mount(mount, name)
-            }
-            obj.allow "*"
-
-            ret = nil
-            assert_nothing_raised do
-                ret = server.list("/name", :manage, false, false, host, ip)
-            end
-
-            assert_equal("/\tfile", ret)
-
-            assert_nothing_raised do
-                ret = server.describe("/name", :manage, host, ip)
-            end
-            assert(ret =~ /\tfile\t/, "Did not get valid a description (#{ret.inspect})")
-
-            assert_nothing_raised do
-                ret = server.retrieve("/name", :manage, host, ip)
-            end
-
-            assert_equal(ret, File.read(file))
-
-            server.umount(name)
-
-            File.unlink(file)
-        end
-    end
-
-    # Test the default modules fileserving
-    def test_modules_default
-        moddir = tempfile
-        Dir.mkdir(moddir)
-        mounts = {}
-        Puppet[:modulepath] = moddir
-
-        mods = %w{green red}.collect do |name|
-            path = File::join(moddir, name, Puppet::Module::FILES)
-            FileUtils::mkdir_p(path)
-            if name == "green"
-                file = File::join(path, "test.txt")
-                File::open(file, "w") { |f| f.print name }
-            end
-
-           Puppet::Module::find(name)
-        end
-
-        conffile = tempfile
-
-        File.open(conffile, "w") { |f| f.puts "# a test config file" }
-
-        # create a server with the file
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler::FileServer.new(
-                :Local => false ,
-                :Config => conffile
-            )
-        }
-
-        mods.each do |mod|
-            mount = "/#{mod.name}/"
-            list = nil
-            assert_nothing_raised {
-                list = server.list(mount, :manage, true, false)
-            }
-            list = list.split("\n")
-            if mod.name == "green"
-                assert_equal(2, list.size)
-                assert_equal("/\tdirectory", list[0])
-                assert_equal("/test.txt\tfile", list[1])
-            else
-                assert_equal(1, list.size)
-                assert_equal("/\tdirectory", list[0])
-            end
-
-            assert_nothing_raised("Host 'allow' denied #{mount}") {
-                server.list(mount, :manage, true, false,
-                            'allow.example.com', "192.168.0.1")
-            }
-        end
-    end
-
-    # Test that configuring deny/allow for modules works
-    def test_modules_config
-        moddir = tempfile
-        Dir.mkdir(moddir)
-        mounts = {}
-        Puppet[:modulepath] = moddir
-
-        path = File::join(moddir, "amod", Puppet::Module::FILES)
-        file = File::join(path, "test.txt")
-        FileUtils::mkdir_p(path)
-        File::open(file, "w") { |f| f.print "Howdy" }
-
-        mod = Puppet::Module::find("amod")
-
-        conffile = tempfile
-        @@tmpfiles << conffile
-
-        File.open(conffile, "w") { |f|
-            f.print "# a test config file
-[modules]
-    path #{basedir}/thing
-    allow 192.168.0.*
-"
-        }
-
-        # create a server with the file
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler::FileServer.new(
-                :Local => false,
-                :Config => conffile
-            )
-        }
-
-        list = nil
-        mount = "/#{mod.name}/"
-        assert_nothing_raised {
-            list = server.list(mount, :manage, true, false)
-        }
-
-        assert_nothing_raised {
-            list.split("\n").each { |line|
-                file, type = line.split("\t")
-                server.describe(mount + file)
-            }
-        }
-
-        assert_describe(mount, file, server)
-
-        # now let's check that things are being correctly forbidden
-        assert_raise(Puppet::AuthorizationError,
-                     "Host 'deny' allowed #{mount}") {
-            server.list(mount, :manage, true, false,
-                        'deny.example.com', "192.168.1.1")
-        }
-        assert_nothing_raised("Host 'allow' denied #{mount}") {
-            server.list(mount, :manage, true, false,
-                        'allow.example.com', "192.168.0.1")
-        }
-    end
-
-    # Make sure we successfully throw errors -- someone ran into this with
-    # 0.22.4.
-    def test_failures
-        # create a server with the file
-        server = nil
-
-        config = tempfile
-        [
-        "[this is invalid]\nallow one.two.com", # invalid name
-        "[valid]\nallow *.testing something.com", # invalid allow
-        "[valid]\nallow one.two.com\ndeny *.testing something.com", # invalid deny
-        ].each do |failer|
-            File.open(config, "w") { |f| f.puts failer }
-            assert_raise(Puppet::Network::Handler::FileServerError, "Did not fail on %s" % failer.inspect) {
-                server = Puppet::Network::Handler::FileServer.new(
-                    :Local => false,
-                    :Config => config
-                )
-            }
-        end
-    end
-
-    def test_can_start_without_configuration
-        Puppet[:fileserverconfig] = tempfile
-        assert_nothing_raised("Could not create fileserver when configuration is absent") do
-                server = Puppet::Network::Handler::FileServer.new(
-                    :Local => false
-                )
-        end
-    end
-
-    def test_creates_default_mounts_when_no_configuration_is_available
-        Puppet[:fileserverconfig] = tempfile
-        server = Puppet::Network::Handler::FileServer.new(:Local => false)
-
-        assert(server.mounted?("plugins"), "Did not create default plugins mount when missing configuration file")
-        assert(server.mounted?("modules"), "Did not create default modules mount when missing configuration file")
-    end
-end
-
-
diff --git a/test/network/handler/handler.rb b/test/network/handler/handler.rb
deleted file mode 100755
index f108ef9..0000000
--- a/test/network/handler/handler.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/handler'
-
-class TestHandler < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-
-    def test_load_handlers
-        # Make sure we don't get a failure but that we also get nothing back
-        assert_nothing_raised do
-            assert_nil(Puppet::Network::Handler.handler(:fake),
-                "Got something back from a missing handler")
-        end
-        # Make a fake handler
-        dir = tempfile()
-        libdir = File.join([dir, %w{puppet network handler}].flatten)
-        FileUtils.mkdir_p(libdir)
-
-        file = File.join(libdir, "fake.rb")
-        File.open(file, "w") do |f|
-            f.puts %{class Puppet::Network::Handler
-                class Fake < Handler
-                end
-            end
-            }
-        end
-
-        $: << dir
-        cleanup { $:.delete(dir) if $:.include?(dir) }
-
-        handler = nil
-        assert_nothing_raised do
-            handler = Puppet::Network::Handler.handler(:fake)
-        end
-        assert(handler, "did not load handler")
-
-        # Now make sure the handler behaves correctly
-        assert_equal(:Fake, handler.name, "name was not calculated correctly")
-
-        Puppet[:trace] = false
-        assert_raise(Puppet::DevError,
-            "did not throw an error on missing interface") do
-                handler.interface
-        end
-    end
-
-    def test_handlers_by_name
-        %w{ca filebucket fileserver master report resource runner status}.each do |name|
-            handler = nil
-            assert_nothing_raised do
-                handler = Puppet::Network::Handler.handler(name)
-            end
-            assert(handler, "did not get handler for %s" % name)
-            assert(handler.name, "did not get name for %s" % name)
-            assert(handler.interface, "did not get interface for %s" % name)
-            assert(handler.interface.prefix, "did not get interface prefix for %s" % name)
-        end
-    end
-end
-
diff --git a/test/network/handler/master.rb b/test/network/handler/master.rb
deleted file mode 100755
index 654404a..0000000
--- a/test/network/handler/master.rb
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/handler/master'
-
-class TestMaster < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-
-    def setup
-        super
-        @master = Puppet::Network::Handler.master.new(:Manifest => tempfile)
-
-        @catalog = stub 'catalog', :extract => ""
-        Puppet::Node::Catalog.stubs(:find).returns(@catalog)
-    end
-
-    def teardown
-        super
-        Puppet::Indirector::Indirection.clear_cache
-    end
-
-    def test_freshness_is_always_now
-        now1 = mock 'now1'
-        Time.expects(:now).returns(now1)
-
-        now1.expects(:to_i).returns 10
-
-        assert_equal(@master.freshness, 10, "Did not return current time as freshness")
-    end
-
-    def test_hostname_is_used_if_client_is_missing
-        @master.expects(:decode_facts).returns("hostname" => "yay")
-        Puppet::Node::Facts.expects(:new).with { |name, facts| name == "yay" }.returns(stub('facts', :save => nil))
-
-        @master.getconfig("facts")
-    end
-
-    def test_facts_are_saved
-        facts = mock('facts')
-        Puppet::Node::Facts.expects(:new).returns(facts)
-        facts.expects(:save)
-
-        @master.stubs(:decode_facts)
-
-        @master.getconfig("facts", "yaml", "foo.com")
-    end
-
-    def test_catalog_is_used_for_compiling
-        facts = stub('facts', :save => nil)
-        Puppet::Node::Facts.stubs(:new).returns(facts)
-
-        @master.stubs(:decode_facts)
-
-        Puppet::Node::Catalog.expects(:find).with("foo.com").returns(@catalog)
-
-        @master.getconfig("facts", "yaml", "foo.com")
-    end
-end
-
-class TestMasterFormats < Test::Unit::TestCase
-    def setup
-        @facts = stub('facts', :save => nil)
-        Puppet::Node::Facts.stubs(:new).returns(@facts)
-
-        @master = Puppet::Network::Handler.master.new(:Code => "")
-        @master.stubs(:decode_facts)
-
-        @catalog = stub 'catalog', :extract => ""
-        Puppet::Node::Catalog.stubs(:find).returns(@catalog)
-    end
-
-    def test_marshal_can_be_used
-        @catalog.expects(:extract).returns "myextract"
-
-        Marshal.expects(:dump).with("myextract").returns "eh"
-
-        @master.getconfig("facts", "marshal", "foo.com")
-    end
-
-    def test_yaml_can_be_used
-        extract = mock 'extract'
-        @catalog.expects(:extract).returns extract
-
-        extract.expects(:to_yaml).returns "myaml"
-
-        @master.getconfig("facts", "yaml", "foo.com")
-    end
-
-    def test_failure_when_non_yaml_or_marshal_is_used
-        assert_raise(RuntimeError) { @master.getconfig("facts", "blah", "foo.com") }
-    end
-end
diff --git a/test/network/handler/report.rb b/test/network/handler/report.rb
deleted file mode 100755
index 8719c68..0000000
--- a/test/network/handler/report.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/handler/report'
-require 'puppettest/reporttesting'
-
-class TestReportServer < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::Reporttesting
-
-    Report = Puppet::Network::Handler.report
-	Puppet::Util.logmethods(self)
-
-    def mkserver
-        server = nil
-        assert_nothing_raised {
-            server = Puppet::Network::Handler.report.new()
-        }
-        server
-    end
-
-    def mkclient(server = nil)
-        server ||= mkserver()
-        client = nil
-        assert_nothing_raised {
-            client = Puppet::Network::Client.report.new(:Report => server)
-        }
-
-        client
-    end
-
-    def test_process
-        server = Puppet::Network::Handler.report.new
-
-        # We have to run multiple reports to make sure there's no conflict
-        reports = []
-        $run = []
-        2.times do |i|
-            name = "processtest%s" % i
-            reports << name
-
-            Report.newreport(name) do
-                def process
-                    $run << self.report_name
-                end
-            end
-        end
-        Puppet[:reports] = reports.collect { |r| r.to_s }.join(",")
-
-        report = fakereport
-
-        retval = nil
-        assert_nothing_raised {
-            retval = server.send(:process, YAML.dump(report))
-        }
-
-        reports.each do |name|
-            assert($run.include?(name.intern), "Did not run %s" % name)
-        end
-
-        # Now make sure our server doesn't die on missing reports
-        Puppet[:reports] = "fakereport"
-        assert_nothing_raised {
-            retval = server.send(:process, YAML.dump(report))
-        }
-    end
-
-    def test_reports
-        Puppet[:reports] = "myreport"
-
-        # Create a server
-        server = Puppet::Network::Handler.report.new
-
-        {"myreport" => ["myreport"],
-            " fake, another, yay " => ["fake", "another", "yay"]
-        }.each do |str, ary|
-            Puppet[:reports] = str
-            assert_equal(ary, server.send(:reports))
-        end
-    end
-end
diff --git a/test/network/handler/resource.rb b/test/network/handler/resource.rb
deleted file mode 100755
index 00a88b5..0000000
--- a/test/network/handler/resource.rb
+++ /dev/null
@@ -1,296 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-require 'base64'
-require 'cgi'
-
-class TestResourceServer < Test::Unit::TestCase
-    include PuppetTest::Support::Utils
-    include PuppetTest::ServerTest
-
-    def verify_described(type, described)
-        described.each do |name, trans|
-            type.clear
-            obj = nil
-            assert_nothing_raised do
-                obj = trans.to_type
-            end
-
-            assert(obj, "Could not create object")
-            assert_nothing_raised do
-                obj.retrieve
-            end
-
-            if trans.type == :package
-                assert_equal(Puppet::Type.type(:package).defaultprovider.name, obj[:provider])
-            end
-        end
-        type.clear
-    end
-
-    def test_describe_file
-        # Make a file to describe
-        file = tempfile()
-        str = "yayness\n"
-
-        server = nil
-
-        assert_nothing_raised do
-            server = Puppet::Network::Handler.resource.new()
-        end
-
-        # The first run we create the file on the copy, the second run
-        # the file is already there so the object should be in sync
-        2.times do |i|
-            [   [nil],
-                [[:content, :mode], []],
-                [[], [:content]],
-                [[:content], [:mode]]
-            ].each do |ary|
-                retrieve = ary[0] || []
-                ignore = ary[1] || []
-
-                File.open(file, "w") { |f| f.print str }
-
-                result = nil
-                assert_nothing_raised do
-                    result = server.describe("file", file, *ary)
-                end
-
-                assert(result, "Could not retrieve file information")
-
-                assert_instance_of(Puppet::TransObject, result)
-
-                # Now we have to clear, so that the server's object gets removed
-                Puppet::Type.type(:file).clear
-
-                # And remove the file, so we can verify it gets recreated
-                if i == 0
-                    File.unlink(file)
-                end
-
-                object = nil
-                assert_nothing_raised do
-                    object = result.to_type
-                end
-
-                assert(object, "Could not create type")
-
-                retrieve.each do |property|
-                    assert(object.should(property), "Did not retrieve %s" % property)
-                end
-
-                ignore.each do |property|
-                    assert(! object.should(property), "Incorrectly retrieved %s" % property)
-                end
-
-                if i == 0
-                    assert_events([:file_created], object)
-                else
-                    assert_nothing_raised {
-                        assert(object.insync?(object.retrieve), "Object was not in sync")
-                    }
-                end
-
-                assert(FileTest.exists?(file), "File did not get recreated")
-
-                if i == 0
-                if object.should(:content)
-                    assert_equal(str, File.read(file), "File contents are not the same")
-                else
-                    assert_equal("", File.read(file), "File content was incorrectly made")
-                end
-                end
-                if FileTest.exists? file
-                    File.unlink(file)
-                end
-            end
-        end
-    end
-
-    def test_describe_directory
-        # Make a file to describe
-        file = tempfile()
-
-        server = nil
-
-        assert_nothing_raised do
-            server = Puppet::Network::Handler.resource.new()
-        end
-
-        [   [nil],
-            [[:ensure, :checksum, :mode], []],
-            [[], [:checksum]],
-            [[:ensure, :checksum], [:mode]]
-        ].each do |ary|
-            retrieve = ary[0] || []
-            ignore = ary[1] || []
-
-            Dir.mkdir(file)
-
-            result = nil
-            assert_nothing_raised do
-                result = server.describe("file", file, *ary)
-            end
-
-            assert(result, "Could not retrieve file information")
-
-            assert_instance_of(Puppet::TransObject, result)
-
-            # Now we have to clear, so that the server's object gets removed
-            Puppet::Type.type(:file).clear
-
-            # And remove the file, so we can verify it gets recreated
-            Dir.rmdir(file)
-
-            object = nil
-            assert_nothing_raised do
-                object = result.to_type
-            end
-
-            assert(object, "Could not create type")
-
-            retrieve.each do |property|
-                assert(object.should(property), "Did not retrieve %s" % property)
-            end
-
-            ignore.each do |property|
-                assert(! object.should(property), "Incorrectly retrieved %s" % property)
-            end
-
-            #assert_apply(object)
-            assert_events([:directory_created], object)
-            assert(FileTest.directory?(file), "Directory did not get recreated")
-            Dir.rmdir(file)
-        end
-    end
-
-    def test_describe_alltypes
-        # Systems get pretty retarded, so I'm going to set the path to some fake
-        # data for ports
-        #Puppet::Type::ParsedType::Port.path = File.join(basedir,
-        #    "test/data/types/ports/1")
-        #Puppet.err Puppet::Type::ParsedType::Port.path
-        server = nil
-        assert_nothing_raised do
-            server = Puppet::Network::Handler.resource.new()
-        end
-
-        require 'etc'
-
-        # Make the example schedules, for testing
-        Puppet::Type.type(:schedule).mkdefaultschedules
-
-        Puppet::Type.eachtype do |type|
-            unless type.respond_to? :instances
-                Puppet.warning "%s does not respond to :instances" % type.name
-                next
-            end
-            next unless type.name == :package
-            Puppet.info "Describing each %s" % type.name
-
-            # First do a listing from the server
-            bucket = nil
-            assert_nothing_raised {
-                bucket = server.list(type.name)
-            }
-
-            #type.clear
-
-            count = 0
-            described = {}
-            bucket.each do |obj|
-                assert_instance_of(Puppet::TransObject, obj)
-                break if count > 5
-                described[obj.name] = server.describe(obj.type, obj.name)
-                count += 1
-            end
-
-            verify_described(type, described)
-
-            count = 0
-            described = {}
-            Puppet.info "listing again"
-            type.instances.each do |obj|
-                assert_instance_of(type, obj)
-
-                break if count > 5
-                trans = nil
-                assert_nothing_raised do
-                    described[obj.name] = server.describe(type.name, obj.name)
-                end
-
-                count += 1
-            end
-
-            if described.empty?
-                Puppet.notice "Got no example objects for %s" % type.name
-            end
-
-            # We separate these, in case the list operation creates objects
-            verify_described(type, described)
-        end
-    end
-
-    def test_apply
-        server = nil
-        assert_nothing_raised do
-            server = Puppet::Network::Handler.resource.new(:Local => false)
-        end
-
-        file = tempfile()
-        str = "yayness\n"
-
-        File.open(file, "w") { |f| f.print str }
-
-        filetrans = nil
-        assert_nothing_raised {
-            filetrans = server.describe("file", file)
-        }
-
-        Puppet::Type.type(:file).clear
-
-        bucket = Puppet::TransBucket.new
-        bucket.type = "file"
-        bucket.name = "test"
-        bucket.push filetrans
-
-        oldbucket = bucket.dup
-        File.unlink(file)
-        assert_nothing_raised {
-            server.apply(bucket)
-        }
-
-        assert(FileTest.exists?(file), "File did not get recreated")
-
-        # Now try it as a "nonlocal" server
-        server.local = false
-        yaml = nil
-        assert_nothing_raised {
-            yaml = Base64.encode64(YAML::dump(bucket))
-        }
-
-        Puppet::Type.type(:file).clear
-        File.unlink(file)
-
-        if Base64.decode64(yaml) =~ /(.{20}Loglevel.{20})/
-            Puppet.warning "YAML is broken on this machine"
-            return
-        end
-        # puts Base64.decode64(yaml)
-        objects = nil
-        assert_nothing_raised("Could not reload yaml") {
-            YAML::load(Base64.decode64(yaml))
-        }
-
-        # The server is supposed to accept yaml and execute it.
-        assert_nothing_raised {
-            server.apply(yaml)
-        }
-        assert(FileTest.exists?(file), "File did not get recreated from YAML")
-    end
-end
-
diff --git a/test/network/handler/runner.rb b/test/network/handler/runner.rb
deleted file mode 100755
index 171458f..0000000
--- a/test/network/handler/runner.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-class TestHandlerRunner < Test::Unit::TestCase
-	include PuppetTest
-
-    def mkclient(code)
-        master = nil
-        client = nil
-        Puppet[:code] = code
-        # create our master
-        assert_nothing_raised() {
-            # this is the default server setup
-            master = Puppet::Network::Handler.master.new(
-                :Local => true
-            )
-        }
-
-        # and our client
-        assert_nothing_raised() {
-            client = Puppet::Network::Client.master.new(
-                :Master => master
-            )
-        }
-
-        client
-    end
-
-    def setup
-        super
-        FileUtils.mkdir_p(Puppet[:statedir])
-        Puppet[:ignoreschedules] = false
-        # Okay, make our manifest
-        file = tempfile()
-        created = tempfile()
-        # We specify the schedule here, because I was having problems with
-        # using default schedules.
-        @code = %{
-                class yayness {
-                    schedule { "yayness": period => weekly }
-                    file { "#{created}": ensure => file, schedule => yayness }
-                }
-
-                include yayness
-            }
-
-        @client = mkclient(@code)
-
-        @runner = Puppet::Network::Handler.runner.new
-    end
-
-    def test_runner_when_in_foreground
-        @client.expects(:run).with(:tags => "mytags", :ignoreschedules => true)
-
-        Process.expects(:newthread).never
-
-        @runner.run("mytags", true, true)
-    end
-
-    def test_runner_when_in_background
-        @client.expects(:run).with(:tags => "mytags", :ignoreschedules => true)
-
-        Puppet.expects(:newthread).yields
-
-        @runner.run("mytags", true, false)
-    end
-end
diff --git a/test/network/rights.rb b/test/network/rights.rb
deleted file mode 100755
index e1d9f8a..0000000
--- a/test/network/rights.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/rights'
-
-class TestRights < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @store = Puppet::Network::Rights.new
-    end
-
-
-    def test_rights
-        assert_raise(ArgumentError, "Did not fail on unknown right") {
-            @store.allowed?(:write, "host.madstop.com", "0.0.0.0")
-        }
-
-        assert_nothing_raised {
-            @store.newright(:write)
-        }
-
-        assert(! @store.allowed?(:write, "host.madstop.com", "0.0.0.0"),
-            "Defaulted to allowing access")
-
-        assert_nothing_raised {
-            @store[:write].info "This is a log message"
-        }
-
-        assert_logged(:info, /This is a log message/, "did not log from Rights")
-    end
-end
-
-
diff --git a/test/network/server/mongrel_test.rb b/test/network/server/mongrel_test.rb
deleted file mode 100755
index 80e9aa4..0000000
--- a/test/network/server/mongrel_test.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-
-class TestMongrelServer < PuppetTest::TestCase
-    confine "Missing mongrel" => Puppet.features.mongrel?
-
-    include PuppetTest::ServerTest
-
-    def mkserver(handlers = nil)
-        handlers ||= { :Status => nil }
-        mongrel = Puppet::Network::HTTPServer::Mongrel.new(handlers)
-    end
-
-    # Make sure client info is correctly extracted.
-    def test_client_info
-        obj = Object.new
-        obj.metaclass.send(:attr_accessor, :params)
-        params = {}
-        obj.params = params
-
-        mongrel = mkserver
-
-        ip = Facter.value(:ipaddress)
-        params["REMOTE_ADDR"] = ip
-        params[Puppet[:ssl_client_header]] = ""
-        params[Puppet[:ssl_client_verify_header]] = "failure"
-        info = nil
-        Resolv.expects(:getname).with(ip).returns("host.domain.com").times(3)
-        assert_nothing_raised("Could not call client_info") do
-            info = mongrel.send(:client_info, obj)
-        end
-        assert(! info.authenticated?, "Client info object was marked valid even though headers were missing")
-        assert_equal(ip, info.ip, "Did not copy over ip correctly")
-
-        assert_equal("host.domain.com", info.name, "Did not copy over hostname correctly")
-
-        # Now add a valid auth header.
-        params[Puppet[:ssl_client_header]] = "/CN=host.domain.com"
-        assert_nothing_raised("Could not call client_info") do
-            info = mongrel.send(:client_info, obj)
-        end
-        assert(! info.authenticated?, "Client info object was marked valid even though the verify header was fals")
-        assert_equal(ip, info.ip, "Did not copy over ip correctly")
-        assert_equal("host.domain.com", info.name, "Did not copy over hostname correctly")
-
-        # Now change the verify header to be true
-        params[Puppet[:ssl_client_verify_header]] = "SUCCESS"
-        assert_nothing_raised("Could not call client_info") do
-            info = mongrel.send(:client_info, obj)
-        end
-
-        assert(info.authenticated?, "Client info object was not marked valid even though all headers were correct")
-        assert_equal(ip, info.ip, "Did not copy over ip correctly")
-        assert_equal("host.domain.com", info.name, "Did not copy over hostname correctly")
-
-        # Now try it with a different header name
-        params.delete(Puppet[:ssl_client_header])
-        Puppet[:ssl_client_header] = "header_testing"
-        params["header_testing"] = "/CN=other.domain.com"
-        info = nil
-        assert_nothing_raised("Could not call client_info with other header") do
-            info = mongrel.send(:client_info, obj)
-        end
-
-        assert(info.authenticated?, "Client info object was not marked valid even though the header was present")
-        assert_equal(ip, info.ip, "Did not copy over ip correctly")
-        assert_equal("other.domain.com", info.name, "Did not copy over hostname correctly")
-
-        # Now make sure it's considered invalid without that header
-        params.delete("header_testing")
-        info = nil
-        assert_nothing_raised("Could not call client_info with no header") do
-            info = mongrel.send(:client_info, obj)
-        end
-
-        assert(! info.authenticated?, "Client info object was marked valid without header")
-        assert_equal(ip, info.ip, "Did not copy over ip correctly")
-        assert_equal(Resolv.getname(ip), info.name, "Did not look up hostname correctly")
-    end
-
-    def test_daemonize
-        mongrel = mkserver
-
-        assert(mongrel.respond_to?(:daemonize), "Mongrel server does not respond to daemonize")
-    end
-end
-
diff --git a/test/network/server/webrick.rb b/test/network/server/webrick.rb
deleted file mode 100755
index fe6d69a..0000000
--- a/test/network/server/webrick.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/http_server/webrick'
-require 'mocha'
-
-class TestWebrickServer < Test::Unit::TestCase
-    include PuppetTest::ServerTest
-
-    def setup
-        Puppet::Util::SUIDManager.stubs(:asuser).yields
-        super
-    end
-
-    def teardown
-        super
-        Puppet::Network::HttpPool.clear_http_instances
-    end
-
-    # Make sure we can create a server, and that it knows how to create its
-    # certs by default.
-    def test_basics
-        server = nil
-        assert_raise(Puppet::Error, "server succeeded with no cert") do
-            server = Puppet::Network::HTTPServer::WEBrick.new(
-                :Port => @@port,
-                :Handlers => {
-                    :Status => nil
-                }
-            )
-        end
-
-        assert_nothing_raised("Could not create simple server") do
-            server = Puppet::Network::HTTPServer::WEBrick.new(
-                :Port => @@port,
-                :Handlers => {
-                    :CA => {}, # so that certs autogenerate
-                    :Status => nil
-                }
-            )
-        end
-
-        assert(server, "did not create server")
-
-        assert(server.cert, "did not retrieve cert")
-    end
-
-    # test that we can connect to the server
-    # we have to use fork here, because we apparently can't use threads
-    # to talk to other threads
-    def test_connect_with_fork
-        Puppet[:autosign] = true
-        serverpid, server = mk_status_server
-
-        # create a status client, and verify it can talk
-        client = mk_status_client
-
-        assert(client.cert, "did not get cert for client")
-
-        retval = nil
-        assert_nothing_raised("Could not connect to server") {
-            retval = client.status
-        }
-        assert_equal(1, retval)
-    end
-
-    # Test that a client whose cert has been revoked really can't connect
-    def test_certificate_revocation
-        Puppet[:autosign] = true
-
-        serverpid, server = mk_status_server
-
-        client = mk_status_client
-
-        status = nil
-        assert_nothing_raised() {
-            status = client.status
-        }
-        assert_equal(1, status)
-        client.shutdown
-
-        # Revoke the client's cert
-        ca = Puppet::SSLCertificates::CA.new()
-        ca.revoke(ca.getclientcert(Puppet[:certname])[0].serial)
-
-        # Restart the server
-        @@port += 1
-        Puppet[:autosign] = false
-        kill_and_wait(serverpid, server.pidfile)
-        serverpid, server = mk_status_server
-
-        # This time the client should be denied.  With keep-alive,
-        # the client starts its connection immediately, thus throwing
-        # the error.
-        assert_raise(OpenSSL::SSL::SSLError) {
-            Puppet::Network::HttpPool.http_instance("localhost", @@port).start
-        }
-    end
-    
-    def mk_status_client
-        client = nil
-        # Otherwise, the client initalization will trip over itself
-        # since elements created in the last run are still around
-        Puppet::Type::allclear
-
-        assert_nothing_raised() {
-            client = Puppet::Network::Client.status.new(
-                :Server => "localhost",
-                :Port => @@port
-            )
-        }
-        client
-    end
-
-    def mk_status_server
-        server = nil
-        Puppet[:certdnsnames] = "localhost"
-        assert_nothing_raised() {
-            server = Puppet::Network::HTTPServer::WEBrick.new(
-                :Port => @@port,
-                :Handlers => {
-                    :CA => {}, # so that certs autogenerate
-                    :Status => nil
-                }
-            )
-
-        }
-
-        pid = fork {
-            Puppet[:name] = "puppetmasterd"
-            assert_nothing_raised() {
-                trap(:INT) { server.shutdown }
-                server.start
-            }
-        }
-        @@tmppids << pid
-        [pid, server]
-    end
-
-    def kill_and_wait(pid, file)
-        %x{kill -INT #{pid} 2>/dev/null}
-        count = 0
-        while count < 30 && File::exist?(file)
-            count += 1
-            sleep(1)
-        end
-        assert(count < 30, "Killing server #{pid} failed")
-    end
-end
-
diff --git a/test/network/xmlrpc/client.rb b/test/network/xmlrpc/client.rb
deleted file mode 100755
index 53be5ca..0000000
--- a/test/network/xmlrpc/client.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/xmlrpc/client'
-require 'mocha'
-
-class TestXMLRPCClient < Test::Unit::TestCase
-    include PuppetTest
-
-    def setup
-        Puppet::Util::SUIDManager.stubs(:asuser).yields
-        super
-    end
-
-    def test_set_backtrace
-        error = Puppet::Network::XMLRPCClientError.new("An error")
-        assert_nothing_raised do
-            error.set_backtrace ["caller"]
-        end
-        assert_equal(["caller"], error.backtrace)
-    end
-
-    # Make sure we correctly generate a netclient
-    def test_handler_class
-        # Create a test handler
-        klass = Puppet::Network::XMLRPCClient
-        yay = Class.new(Puppet::Network::Handler) do
-            @interface = XMLRPC::Service::Interface.new("yay") { |iface|
-                iface.add_method("array getcert(csr)")
-            }
-
-            @name = :Yay
-        end
-        Object.const_set("Yay", yay)
-
-        net = nil
-        assert_nothing_raised("Failed when retrieving client for handler") do
-            net = klass.handler_class(yay)
-        end
-
-        assert(net, "did not get net client")
-    end
-end
diff --git a/test/network/xmlrpc/processor.rb b/test/network/xmlrpc/processor.rb
deleted file mode 100755
index 079194e..0000000
--- a/test/network/xmlrpc/processor.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/xmlrpc/processor'
-require 'mocha'
-
-class TestXMLRPCProcessor < Test::Unit::TestCase
-    include PuppetTest
-    class BaseProcessor
-        def add_handler(interface, handler)
-            @handlers ||= {}
-            @handlers[interface] = handler
-        end
-    end
-
-    # We use a base class just so super() works with add_handler.
-    class Processor < BaseProcessor
-        include Puppet::Network::XMLRPCProcessor
-
-        def set_service_hook(&block)
-            meta_def(:service, &block)
-        end
-    end
-
-    def setup
-        super
-        Puppet::Util::SUIDManager.stubs(:asuser).yields
-        @processor = Processor.new
-    end
-
-    def test_handlers
-        ca = Puppet::Network::Handler.ca
-        @processor.send(:setup_processor)
-        assert(! @processor.handler_loaded?(:ca), "already have ca handler loaded")
-        assert_nothing_raised do
-            @processor.add_handler(ca.interface, ca.new())
-        end
-
-        assert(@processor.handler_loaded?(:puppetca), "ca handler not loaded by symbol")
-        assert(@processor.handler_loaded?("puppetca"), "ca handler not loaded by string")
-    end
-
-    def test_process
-        ca = Puppet::Network::Handler.ca
-        @processor.send(:setup_processor)
-        assert_nothing_raised do
-            @processor.add_handler(ca.interface, ca.new())
-        end
-
-        fakeparser = Class.new do
-            def parseMethodCall(data)
-                return data
-            end
-        end
-
-        request = Puppet::Network::ClientRequest.new("fake", "192.168.0.1", false)
-        request.handler = "myhandler"
-        request.method = "mymethod"
-
-        @processor.expects(:parser).returns(fakeparser.new)
-
-        request.expects(:handler=).with("myhandler")
-        request.expects(:method=).with("mymethod")
-
-        @processor.stubs(:verify)
-        @processor.expects(:handle).with(request.call,
-            "params", request.name, request.ip)
-
-        @processor.send(:process, ["myhandler.mymethod", ["params"]], request)
-    end
-
-    def test_setup_processor
-        @processor.expects(:set_service_hook)
-        @processor.send(:setup_processor)
-    end
-end
-
-
diff --git a/test/network/xmlrpc/server.rb b/test/network/xmlrpc/server.rb
deleted file mode 100755
index ae9f17d..0000000
--- a/test/network/xmlrpc/server.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/network/xmlrpc/server'
-require 'mocha'
-
-class TestXMLRPCServer < Test::Unit::TestCase
-    def setup
-        super
-        assert_nothing_raised do
-            @server = Puppet::Network::XMLRPCServer.new
-        end
-    end
-
-    def test_initialize
-        assert(@server.get_service_hook, "no service hook defined")
-
-        assert_nothing_raised("Did not init @loadedhandlers") do
-            assert(! @server.handler_loaded?(:puppetca),
-                "server thinks handlers are loaded")
-        end
-    end
-end
-
-
diff --git a/test/network/xmlrpc/webrick_servlet.rb b/test/network/xmlrpc/webrick_servlet.rb
deleted file mode 100755
index 74326f6..0000000
--- a/test/network/xmlrpc/webrick_servlet.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-require 'puppet/network/xmlrpc/webrick_servlet'
-require 'mocha'
-
-class TestXMLRPCWEBrickServlet < Test::Unit::TestCase
-    include PuppetTest
-    def test_basics
-	# Make sure we're doing things as our user info, rather than puppet/puppet
-	setme
-	set_mygroup
-	Puppet[:user] = @me
-	Puppet[:group] = @mygroup
-        servlet = nil
-        ca = Puppet::Network::Handler.ca.new
-
-        assert_nothing_raised("Could not create servlet") do
-            servlet = Puppet::Network::XMLRPC::WEBrickServlet.new([ca])
-        end
-
-        assert(servlet.get_service_hook, "service hook was not set up")
-
-        assert(servlet.handler_loaded?(:puppetca),
-            "Did not load handler")
-    end
-end
-
-
diff --git a/test/other/dsl.rb b/test/other/dsl.rb
deleted file mode 100755
index 45b5198..0000000
--- a/test/other/dsl.rb
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/dsl'
-require 'puppettest'
-
-class TestDSL < Test::Unit::TestCase
-	include PuppetTest
-	include Puppet::DSL
-
-    def teardown
-        super
-        Puppet::DSL::Aspect.clear
-    end
-
-    def test_aspect
-        a = nil
-        assert_nothing_raised do
-            a = aspect :yaytest do
-            end
-        end
-
-        assert_equal(a, Puppet::DSL::Aspect[:yaytest])
-
-        # Now make a child aspect
-        b = nil
-        assert_nothing_raised do
-            b = aspect :child, :inherits => :yaytest do
-            end
-        end
-
-        assert(b.child_of?(a), "Parentage not set up correctly")
-        assert(b.child_of?(:yaytest), "Parentage not set up for symbols")
-
-        # Now make another subclass
-        c = nil
-        assert_nothing_raised do
-            c = aspect :kid, :inherits => :child do
-            end
-        end
-
-        assert(c.child_of?(b), "Parentage not set up correctly")
-        assert(c.child_of?(a), "Parentage is not inherited")
-
-        # Lastly, make a separate aspect
-        x = nil
-        assert_nothing_raised do
-            x = aspect :other do
-            end
-        end
-
-        assert(! x.child_of?(a), "Parentage came from nowhere")
-        assert(! x.child_of?(b), "Parentage came from nowhere")
-        assert(! x.child_of?(c), "Parentage came from nowhere")
-
-        # Make sure we can specify the name or the aspect
-        y = nil
-        assert_nothing_raised do
-            x = aspect :naming, :inherits => a do
-            end
-        end
-        assert(x.child_of?(a), "Parentage not set up correctly")
-
-        # And make sure the parent must exist
-        z = nil
-        assert_raise(RuntimeError) do
-            z = aspect :noparent, :inherits => :nosuchaspect do
-            end
-        end
-        assert(x.child_of?(a), "Parentage not set up correctly")
-    end
-
-    def test_evaluate
-        parent = child = nil
-        parenteval = childeval = nil
-        
-        assert_nothing_raised do
-            parent = aspect :parent do
-                if parenteval
-                    raise "parent already evaluated"
-                end
-                parenteval = true
-            end
-
-            child = aspect :child, :inherits => parent do
-                if childeval
-                    raise "child already evaluated"
-                end
-                childeval = true
-            end
-        end
-
-        assert_nothing_raised do
-            parent.evaluate()
-        end
-
-        assert(parenteval, "Parent was not evaluated")
-        assert(parent.evaluated?, "parent was not considered evaluated")
-
-        # Make sure evaluating twice silently does nothing
-        assert_nothing_raised do
-            parent.evaluate()
-        end
-
-        # Now evaluate the child
-        assert_nothing_raised do
-            child.evaluate
-        end
-
-        assert(childeval, "child was not evaluated")
-        assert(child.evaluated?, "child was not considered evaluated")
-
-        # Now reset them both
-        parenteval = childeval = nil
-        parent.evaluated = false
-        child.evaluated = false
-
-        # evaluate the child
-        assert_nothing_raised do
-            child.evaluate
-        end
-
-        # and make sure both get evaluated
-        assert(parenteval, "Parent was not evaluated")
-        assert(parent.evaluated?, "parent was not considered evaluated")
-        assert(childeval, "child was not evaluated")
-        assert(child.evaluated?, "child was not considered evaluated")
-    end
-
-    def test_acquire
-        evalled = false
-        a = aspect :test do
-            evalled = true
-        end
-
-        assert_nothing_raised do
-            acquire :test
-        end
-
-        assert(evalled, "Did not evaluate aspect")
-
-        assert_nothing_raised do
-            acquire :test
-        end
-    end
-
-    def test_newresource
-        filetype = Puppet::Type.type(:file)
-        path = tempfile()
-
-        a = aspect :testing
-
-        resource = nil
-        assert_nothing_raised do
-            resource = a.newresource filetype, path, :content => "yay", :mode => "640"
-        end
-
-        assert_instance_of(Puppet::Parser::Resource, resource)
-
-        assert_equal("yay", resource[:content])
-        assert_equal("640", resource[:mode])
-        assert_equal(:testing, resource.source.name)
-
-        # Now try exporting our aspect
-        assert_nothing_raised do
-            a.evaluate
-        end
-
-        result = nil
-        assert_nothing_raised do
-            result = a.export
-        end
-
-        assert_equal([resource], result)
-
-        # Then try the DSL export
-        assert_nothing_raised do
-            result = export
-        end
-
-        assert_instance_of(Puppet::TransBucket, result)
-
-        # And just for kicks, test applying everything
-        assert_nothing_raised do
-            apply()
-        end
-
-        assert(FileTest.exists?(path), "File did not get created")
-        assert_equal("yay", File.read(path))
-    end
-
-    def test_typemethods
-        Puppet::Type.loadall
-        filetype = Puppet::Type.type(:file)
-        path = tempfile()
-
-        a = aspect :testing
-
-        Puppet::Type.eachtype do |type|
-            next if type.name.to_s =~ /test/
-            assert(a.respond_to?(type.name),
-                "Aspects do not have a %s method" % type.name)
-        end
-
-        file = nil
-        assert_nothing_raised do
-            file = a.file path,
-                :content => "yay", :mode => "640"
-        end
-
-        assert_instance_of(Puppet::Parser::Resource, file)
-    end
-end
diff --git a/test/other/events.rb b/test/other/events.rb
deleted file mode 100755
index 9d6bd2b..0000000
--- a/test/other/events.rb
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-
-
-class TestEvents < Test::Unit::TestCase
-	include PuppetTest
-
-    def test_simplesubscribe
-        name = tempfile()
-        file = Puppet.type(:file).create(
-            :name => name,
-            :ensure => "file"
-        )
-        exec = Puppet.type(:exec).create(
-            :name => "echo true",
-            :path => "/usr/bin:/bin",
-            :refreshonly => true,
-            :subscribe => [[file.class.name, file.name]] 
-        )
-
-        comp = mk_catalog("eventtesting", file, exec)
-
-        trans = assert_events([:file_created, :triggered], comp)
-
-        assert_equal(1, trans.triggered?(exec, :refresh))
-    end
-
-    def test_simplerequire
-        name = tempfile()
-        file = Puppet.type(:file).create(
-            :name => name,
-            :ensure => "file"
-        )
-        exec = Puppet.type(:exec).create(
-            :name => "echo true",
-            :path => "/usr/bin:/bin",
-            :refreshonly => true,
-            :require => [[file.class.name, file.name]] 
-        )
-
-
-        config = mk_catalog
-        config.add_resource file
-        config.add_resource exec
-        trans = config.apply
-
-        assert_equal(1, trans.events.length)
-
-        assert_equal(0, trans.triggered?(exec, :refresh))
-    end
-
-    def test_multiplerefreshes
-        files = []
-
-        4.times { |i|
-            files << Puppet.type(:file).create(
-                :name => tempfile(),
-                :ensure => "file"
-            )
-        }
-
-        fname = tempfile()
-        exec = Puppet.type(:exec).create(
-            :name => "touch %s" % fname,
-            :path => "/usr/bin:/bin",
-            :refreshonly => true
-        )
-
-        exec[:subscribe] = files.collect { |f|
-            ["file", f.name]
-        }
-
-        comp = mk_catalog(exec, *files)
-
-        assert_apply(comp)
-        assert(FileTest.exists?(fname), "Exec file did not get created")
-    end
-
-    # Make sure refreshing happens mid-transaction, rather than at the end.
-    def test_refreshordering
-        file = tempfile()
-
-        exec1 = Puppet.type(:exec).create(
-            :title => "one",
-            :name => "echo one >> %s" % file,
-            :path => "/usr/bin:/bin"
-        )
-
-        exec2 = Puppet.type(:exec).create(
-            :title => "two",
-            :name => "echo two >> %s" % file,
-            :path => "/usr/bin:/bin",
-            :refreshonly => true,
-            :subscribe => exec1
-        )
-
-        exec3 = Puppet.type(:exec).create(
-            :title => "three",
-            :name => "echo three >> %s" % file,
-            :path => "/usr/bin:/bin",
-            :require => exec2
-        )
-        execs = [exec1, exec2, exec3]
-
-        config = mk_catalog(exec1,exec2,exec3)
-        
-        trans = Puppet::Transaction.new(config)
-        execs.each do |e| assert(config.vertex?(e), "%s is not in graph" % e.title) end
-        trans.prepare
-        execs.each do |e| assert(config.vertex?(e), "%s is not in relgraph" % e.title) end
-        reverse = trans.relationship_graph.reversal
-        execs.each do |e| assert(reverse.vertex?(e), "%s is not in reversed graph" % e.title) end
-        
-        config.apply
-
-        assert(FileTest.exists?(file), "File does not exist")
-
-        assert_equal("one\ntwo\nthree\n", File.read(file))
-    end
-end
diff --git a/test/other/overrides.rb b/test/other/overrides.rb
deleted file mode 100755
index e0e3fdf..0000000
--- a/test/other/overrides.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-
-class TestOverrides < Test::Unit::TestCase
-	include PuppetTest
-    def mksubdirs(basedir, level)
-        @@tmpfiles << basedir
-        dir = basedir.dup
-
-        (level + 1).times { |index|
-            Dir.mkdir(dir)
-            path = File.join(dir, "file")
-            File.open(path, "w") { |f| f.puts "yayness" }
-            dir = File.join(dir, index.to_s)
-        }
-    end
-
-    def test_simpleoverride
-        basedir = File.join(tmpdir(), "overridetesting")
-        mksubdirs(basedir, 1)
-
-        baseobj = nil
-        basefile = File.join(basedir, "file")
-        assert_nothing_raised("Could not create base obj") {
-            baseobj = Puppet.type(:file).create(
-                :title => "base",
-                :path => basedir,
-                :recurse => true,
-                :mode => "755"
-            )
-        }
-
-        subobj = nil
-        subdir = File.join(basedir, "0")
-        subfile = File.join(subdir, "file")
-        assert_nothing_raised("Could not create sub obj") {
-            subobj = Puppet.type(:file).create(
-                :title => "sub",
-                :path => subdir,
-                :recurse => true,
-                :mode => "644"
-            )
-        }
-
-        assert_apply(baseobj, subobj)
-
-        assert(File.stat(basefile).mode & 007777 == 0755)
-        assert(File.stat(subfile).mode & 007777 == 0644)
-    end
-
-    def test_deepoverride
-        basedir = File.join(tmpdir(), "deepoverridetesting")
-        mksubdirs(basedir, 10)
-
-        baseobj = nil
-        assert_nothing_raised("Could not create base obj") {
-            baseobj = Puppet.type(:file).create(
-                :path => basedir,
-                :recurse => true,
-                :mode => "755"
-            )
-        }
-
-        children = []
-        files = {}
-        subdir = basedir.dup
-        mode = nil
-        10.times { |index|
-            next unless index % 3
-            subdir = File.join(subdir, index.to_s)
-            path = File.join(subdir, "file")
-            if index % 2
-                mode = "644"
-                files[path] = 0644
-            else
-                mode = "750"
-                files[path] = 0750
-            end
-
-            assert_nothing_raised("Could not create sub obj") {
-                children << Puppet.type(:file).create(
-                    :path => subdir,
-                    :recurse => true,
-                    :mode => mode
-                )
-            }
-        }
-
-        config = mk_catalog(baseobj, *children)
-
-        assert_nothing_raised("Could not eval component") {
-            config.apply
-        }
-
-        files.each { |path, mode|
-            assert(FileTest.exists?(path), "File %s does not exist" % path)
-            curmode = File.stat(path).mode & 007777
-            assert(curmode == mode,
-                "File %s was incorrect mode %o instead of %o" % [path, curmode, mode])
-        }
-    end
-end
-
diff --git a/test/other/provider.rb b/test/other/provider.rb
deleted file mode 100755
index b0860f6..0000000
--- a/test/other/provider.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/provider'
-require 'puppettest'
-
-class TestImpl < Test::Unit::TestCase
-    include PuppetTest
-
-    def setup
-        super
-        @type = newtype(@method_name.to_s + "type")
-
-        # But create a new provider for every method.
-        @provider = newprovider(@method_name.to_s + "provider")
-    end
-
-    def newtype(name)
-        # First create a fake type
-        return Puppet::Type.newtype(name) {
-            newparam(:name) { isnamevar }
-        }
-    end
-
-    def newprovider(name, type = nil)
-        type ||= @type
-        provider = nil
-        assert_nothing_raised("Could not create provider") do
-            provider = type.provide(name) {}
-        end
-        return provider
-    end
-
-    # Just a quick run-through to see if the basics work
-    def test_newprovider
-        assert_nothing_raised do
-            @provider.confine :operatingsystem => Facter["operatingsystem"].value
-            @provider.defaultfor :operatingsystem => Facter["operatingsystem"].value
-        end
-
-        assert(@provider.suitable?, "Implementation was not considered suitable")
-        assert(@provider.default?, "Implementation was not considered a default")
-
-        assert_equal(@provider, @type.defaultprovider,
-                     "Did not correctly find default provider")
-
-    end
-
-    def test_provider_default
-        nondef = nil
-        assert_nothing_raised {
-            nondef = newprovider(:nondefault)
-        }
-
-        assert_nothing_raised do
-            @provider.defaultfor :operatingsystem => Facter["operatingsystem"].value
-        end
-
-        assert_equal(@provider.name, @type.defaultprovider.name, "Did not get right provider")
-
-        @type.suitableprovider
-    end
-
-    def test_subclassconfines
-        parent = newprovider("parentprovider")
-
-        # Now make a bad confine on the parent
-        parent.confine :exists => "/this/file/definitely/does/not/exist"
-
-        child = nil
-        assert_nothing_raised {
-            child = @type.provide("child", :parent => parent.name) {}
-        }
-
-        assert(child.suitable?, "Parent ruled out child")
-    end
-
-    def test_commands
-        parent = newprovider("parentprovider")
-
-        child = nil
-        assert_nothing_raised {
-            child = @type.provide("child", :parent => parent.name) {}
-        }
-
-        assert_nothing_raised {
-            child.commands :which => "which"
-        }
-
-        assert(child.command(:which), "Did not find 'which' command")
-
-        assert(child.command(:which) =~ /^\//,
-                "Command did not become fully qualified")
-        assert(FileTest.exists?(child.command(:which)),
-                                "Did not find actual 'which' binary")
-
-        assert_raise(Puppet::DevError) do
-            child.command(:nosuchcommand)
-        end
-
-        # Now create a parent command
-        assert_nothing_raised {
-            parent.commands :sh => Puppet::Util.binary('sh')
-        }
-
-        assert(parent.command(:sh), "Did not find 'sh' command")
-
-        assert(child.command(:sh), "Did not find parent's 'sh' command")
-
-        assert(FileTest.exists?(child.command(:sh)),
-                                "Somehow broke path to sh")
-    end
-end
-
diff --git a/test/other/puppet.rb b/test/other/puppet.rb
deleted file mode 100755
index 6527bed..0000000
--- a/test/other/puppet.rb
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-
-# Test the different features of the main puppet module
-class TestPuppetModule < Test::Unit::TestCase
-	include PuppetTest
-    include SignalObserver
-    
-    def mkfakeclient
-        Class.new(Puppet::Network::Client) do
-            def initialize
-            end
-
-            def runnow
-                Puppet.info "fake client has run"
-            end
-        end
-    end
-
-    def mktestclass
-        Class.new do
-            def initialize(file)
-                @file = file
-            end
-
-            def started?
-                FileTest.exists?(@file)
-            end
-
-            def start
-                File.open(@file, "w") do |f| f.puts "" end
-            end
-
-            def shutdown
-                File.unlink(@file)
-            end
-        end
-    end
-
-    # Make sure that services get correctly started and stopped
-    def test_servicehandling
-        file = tempfile()
-        testclass = mktestclass()
-
-        obj = testclass.new(file)
-
-        assert_nothing_raised {
-            Puppet.newservice(obj)
-        }
-
-        assert_nothing_raised {
-            Puppet.start(false)
-        }
-
-        # Give it a sec or so
-        sleep 0.3
-
-        assert(obj.started?, "Object was not started")
-
-        assert_nothing_raised {
-            Puppet.shutdown(false)
-        }
-        # Give it a sec or so
-        sleep 0.3
-
-        assert(!obj.started?, "Object is still running")
-
-    end
-
-    def test_path
-        oldpath = ENV["PATH"]
-        cleanup do
-            ENV["PATH"] = oldpath
-        end
-        newpath = oldpath + ":" + "/something/else"
-        assert_nothing_raised do
-            Puppet[:path] = newpath
-        end
-
-        assert_equal(newpath, ENV["PATH"])
-    end
-
-    def test_libdir
-        oldlibs = $:.dup
-        cleanup do
-            $:.each do |dir|
-                unless oldlibs.include?(dir)
-                    $:.delete(dir)
-                end
-            end
-        end
-        one = tempfile()
-        two = tempfile()
-        Dir.mkdir(one)
-        Dir.mkdir(two)
-
-        # Make sure setting the libdir gets the dir added to $:
-        assert_nothing_raised do
-            Puppet[:libdir] = one
-        end
-
-        assert($:.include?(one), "libdir was not added")
-
-        # Now change it, make sure it gets added and the old one gets
-        # removed
-        assert_nothing_raised do
-            Puppet[:libdir] = two
-        end
-
-        assert($:.include?(two), "libdir was not added")
-        assert(! $:.include?(one), "old libdir was not removed")
-    end
-
-    def test_name
-        # Make sure it defaults to $0 without the rb
-        should = $0.gsub(/.+#{File::SEPARATOR}/,'').sub(/\.rb$/, '')
-
-        assert_equal(should, Puppet[:name], "default name was not right")
-
-        assert_nothing_raised("Could not reset name") do
-            Puppet[:name] = "puppetca"
-        end
-
-        assert_equal("puppetca", Puppet[:name], "name reset did not take")
-    end
-end
-
diff --git a/test/other/relationships.rb b/test/other/relationships.rb
deleted file mode 100755
index bf83caf..0000000
--- a/test/other/relationships.rb
+++ /dev/null
@@ -1,217 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-
-class TestRelationships < Test::Unit::TestCase
-	include PuppetTest
-	def setup
-	    super
-	    Puppet::Type.type(:exec)
-    end
-    
-    def newfile
-        assert_nothing_raised() {
-            return Puppet.type(:file).create(
-                :path => tempfile,
-                :check => [:mode, :owner, :group]
-            )
-        }
-    end
-    
-    def check_relationship(sources, targets, out, refresher)
-        if out
-            deps = sources.builddepends
-            sources = [sources]
-        else
-            deps = targets.builddepends
-            targets = [targets]
-        end
-        assert_instance_of(Array, deps)
-        assert(! deps.empty?, "Did not receive any relationships")
-        
-        deps.each do |edge|
-            assert_instance_of(Puppet::Relationship, edge)
-        end
-        
-        sources.each do |source|
-            targets.each do |target|
-                edge = deps.find { |e| e.source == source and e.target == target }
-                assert(edge, "Could not find edge for %s => %s" %
-                    [source.ref, target.ref])
-        
-                if refresher
-                    assert_equal(:ALL_EVENTS, edge.event)
-                    assert_equal(:refresh, edge.callback)
-                else
-                    assert_nil(edge.event)
-                    assert_nil(edge.callback, "Got a callback with no events")
-                end
-            end
-        end
-    end
-
-    # Make sure our various metaparams work correctly.  We're just checking
-    # here whether they correctly set up the callbacks and the direction of
-    # the relationship.
-    def test_relationship_metaparams
-        out = {:require => false, :subscribe => false,
-            :notify => true, :before => true}
-        refreshers = [:subscribe, :notify]
-        [:require, :subscribe, :notify, :before].each do |param|
-            # Create three files to generate our events and three
-            # execs to receive them
-            files = []
-            execs = []
-            3.times do |i|
-                files << Puppet::Type.newfile(
-                    :title => "file#{i}",
-                    :path => tempfile(),
-                    :ensure => :file
-                )
-
-                path = tempfile()
-                execs << Puppet::Type.newexec(
-                    :title => "notifytest#{i}",
-                    :path => "/usr/bin:/bin",
-                    :command => "touch #{path}",
-                    :refreshonly => true
-                )
-            end
-
-            # Add our first relationship
-            if out[param]
-                files[0][param] = execs[0]
-                sources = files[0]
-                targets = [execs[0]]
-            else
-                execs[0][param] = files[0]
-                sources = [files[0]]
-                targets = execs[0]
-            end
-            check_relationship(sources, targets, out[param], refreshers.include?(param))
-
-            # Now add another relationship
-            if out[param]
-                files[0][param] = execs[1]
-                targets << execs[1]
-                assert_equal(targets.collect { |t| [t.class.name, t.title]},
-                    files[0][param], "Incorrect target list")
-            else
-                execs[0][param] = files[1]
-                sources << files[1]
-                assert_equal(sources.collect { |t| [t.class.name, t.title]},
-                    execs[0][param], "Incorrect source list")
-            end
-            check_relationship(sources, targets, out[param], refreshers.include?(param))
-
-            Puppet::Type.allclear
-        end
-    end
-    
-    def test_munge_relationship
-        file = Puppet::Type.newfile :path => tempfile(), :mode => 0755
-        execs = []
-        3.times do |i|
-            execs << Puppet::Type.newexec(:title => "yay#{i}", :command => "/bin/echo yay")
-        end
-        
-        # First try it with one object, specified as a reference and an array
-        result = nil
-        [execs[0], [:exec, "yay0"], ["exec", "yay0"]].each do |target|
-            assert_nothing_raised do
-                result = file.send(:munge_relationship, :require, target)
-            end
-        
-            assert_equal([[:exec, "yay0"]], result)
-        end
-        
-        # Now try it with multiple objects
-        symbols = execs.collect { |e| [e.class.name, e.title] }
-        strings = execs.collect { |e| [e.class.name.to_s, e.title] }
-        [execs, symbols, strings].each do |target|
-            assert_nothing_raised do
-                result = file.send(:munge_relationship, :require, target)
-            end
-        
-            assert_equal(symbols, result)
-        end
-        
-        # Make sure we can mix it up, even though this shouldn't happen
-        assert_nothing_raised do
-            result = file.send(:munge_relationship, :require, [execs[0], [execs[1].class.name, execs[1].title]])
-        end
-        
-        assert_equal([[:exec, "yay0"], [:exec, "yay1"]], result)
-        
-        # Finally, make sure that new results get added to old.  The only way
-        # to get rid of relationships is to delete the parameter.
-        file[:require] = execs[0]
-        
-        assert_nothing_raised do
-            result = file.send(:munge_relationship, :require, [execs[1], execs[2]])
-        end
-        
-        assert_equal(symbols, result)
-    end
-    
-    def test_autorequire
-        # We know that execs autorequire their cwd, so we'll use that
-        path = tempfile()
-        
-        file = Puppet::Type.newfile(:title => "myfile", :path => path,
-            :ensure => :directory)
-        exec = Puppet::Type.newexec(:title => "myexec", :cwd => path,
-            :command => "/bin/echo")
-        
-        reqs = nil
-        assert_nothing_raised do
-            reqs = exec.autorequire
-        end
-        assert_instance_of(Puppet::Relationship, reqs[0], "Did not return a relationship edge")
-        assert_equal(file, reqs[0].source, "Did not set the autorequire source correctly")
-        assert_equal(exec, reqs[0].target, "Did not set the autorequire target correctly")
-        
-        # Now make sure that these relationships are added to the 
-        # relationship graph
-        config = mk_catalog(file, exec)
-        config.apply do |trans|
-            assert(config.relationship_graph.edge?(file, exec), "autorequire edge was not created")
-        end
-    end
-    
-    def test_requires?
-        # Test the first direction
-        file1 = Puppet::Type.newfile(:title => "one", :path => tempfile,
-            :ensure => :directory)
-        file2 = Puppet::Type.newfile(:title => "two", :path => tempfile,
-            :ensure => :directory)
-        
-        file1[:require] = file2
-        assert(file1.requires?(file2), "requires? failed to catch :require relationship")
-        file1.delete(:require)
-        assert(! file1.requires?(file2), "did not delete relationship")
-        file1[:subscribe] = file2
-        assert(file1.requires?(file2), "requires? failed to catch :subscribe relationship")
-        file1.delete(:subscribe)
-        assert(! file1.requires?(file2), "did not delete relationship")
-        file2[:before] = file1
-        assert(file1.requires?(file2), "requires? failed to catch :before relationship")
-        file2.delete(:before)
-        assert(! file1.requires?(file2), "did not delete relationship")
-        file2[:notify] = file1
-        assert(file1.requires?(file2), "requires? failed to catch :notify relationship")
-    end
-    
-    # Testing #411.  It was a problem with builddepends.
-    def test_missing_deps
-        file = Puppet::Type.newfile :path => tempfile, :require => ["file", "/no/such/file"]
-        
-        assert_raise(Puppet::Error) do
-            file.builddepends
-        end
-    end
-end
-
diff --git a/test/other/report.rb b/test/other/report.rb
deleted file mode 100755
index 9d0bb48..0000000
--- a/test/other/report.rb
+++ /dev/null
@@ -1,244 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/reports'
-require 'puppet/transaction/report'
-require 'puppettest'
-require 'puppettest/reporttesting'
-
-class TestReports < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::Reporttesting
-
-    def mkreport
-        # First do some work
-        objects = []
-        6.times do |i|
-            file = tempfile()
-
-            # Make every third file
-            File.open(file, "w") { |f| f.puts "" } if i % 3 == 0
-
-            objects << Puppet::Type.type(:file).create(
-                :path => file,
-                :ensure => "file"
-            )
-        end
-
-        config = mk_catalog(*objects)
-        # So the report works out.
-        config.retrieval_duration = 0.001
-        trans = config.apply
-
-        return trans.generate_report
-    end
-
-    # Make sure we can use reports as log destinations.
-    def test_reports_as_log_destinations
-        report = fakereport
-
-        assert_nothing_raised {
-            Puppet::Util::Log.newdestination(report)
-        }
-
-        # Now make a file for testing logging
-        file = Puppet::Type.type(:file).create(:path => tempfile(), :ensure => "file")
-        file.finish
-
-        log = nil
-        assert_nothing_raised {
-            log = file.log "This is a message, yo"
-        }
-
-        assert(report.logs.include?(log), "Report did not get log message")
-
-        log = Puppet.warning "This is a non-sourced message"
-
-        assert(! report.logs.include?(log), "Report got log message")
-
-        assert_nothing_raised {
-            Puppet::Util::Log.close(report)
-        }
-
-        log = file.log "This is another message, yo"
-
-        assert(! report.logs.include?(log), "Report got log message after close")
-    end
-
-    def test_newmetric
-        report = nil
-        assert_nothing_raised {
-            report = Puppet::Transaction::Report.new
-        }
-
-        assert_nothing_raised {
-            report.newmetric(:mymetric,
-                :total => 12,
-                :done => 6
-            )
-        }
-    end
-
-    def test_store_report
-        # Create a bunch of log messages in an array.
-        report = Puppet::Transaction::Report.new
-        
-        # We have to reuse reporting here because of something going on in the
-        # server/report.rb file
-        Puppet.settings.use(:main, :reporting)
-
-        3.times { |i|
-            log = Puppet.warning("Report test message %s" % i)
-
-            report.newlog(log)
-        }
-
-        assert_nothing_raised do
-            report.extend(Puppet::Reports.report(:store))
-        end
-
-        yaml = YAML.dump(report)
-
-        file = nil
-        assert_nothing_raised {
-            file = report.process
-        }
-
-        assert(FileTest.exists?(file), "report file did not get created")
-        assert_equal(yaml, File.read(file), "File did not get written")
-    end
-
-    if Puppet.features.rrd?
-    def test_rrdgraph_report
-        Puppet.settings.use(:main, :metrics)
-        report = mkreport
-
-        assert(! report.metrics.empty?, "Did not receive any metrics")
-
-        assert_nothing_raised do
-            report.extend(Puppet::Reports.report(:rrdgraph))
-        end
-
-        assert_nothing_raised {
-            report.process
-        }
-
-        hostdir = nil
-        assert_nothing_raised do
-            hostdir = report.hostdir
-        end
-
-        assert(hostdir, "Did not get hostdir back")
-
-        assert(FileTest.directory?(hostdir), "Host rrd dir did not get created")
-        index = File.join(hostdir, "index.html")
-        assert(FileTest.exists?(index), "index file was not created")
-
-        # Now make sure it creaets each of the rrd files
-        %w{changes resources time}.each do |type|
-            file = File.join(hostdir, "%s.rrd" % type)
-            assert(FileTest.exists?(file), "Did not create rrd file for %s" % type)
-
-            daily = file.sub ".rrd", "-daily.png"
-            assert(FileTest.exists?(daily),
-                "Did not make daily graph for %s" % type)
-        end
-
-    end
-    else
-    $stderr.puts "Install RRD for metric reporting tests"
-    end
-    
-    def test_tagmail_parsing
-        report = Object.new
-        report.extend(Puppet::Reports.report(:tagmail))
-        
-        passers = File.join(datadir, "reports", "tagmail_passers.conf")
-        assert(FileTest.exists?(passers), "no passers file %s" % passers)
-        
-        File.readlines(passers).each do |line|
-            assert_nothing_raised("Could not parse %s" % line.inspect) do
-                report.parse(line)
-            end
-        end
-        
-        # Now make sure the failers fail
-        failers = File.join(datadir, "reports", "tagmail_failers.conf")
-        assert(FileTest.exists?(failers), "no failers file %s" % failers)
-        
-        File.readlines(failers).each do |line|
-            assert_raise(ArgumentError, "Parsed %s" % line.inspect) do
-                report.parse(line)
-            end
-        end
-    end
-    
-    def test_tagmail_parsing_results
-        report = Object.new
-        report.extend(Puppet::Reports.report(:tagmail))
-        # Now test a few specific lines to make sure we get the results we want
-        {
-            "tag: abuse at domain.com" => [%w{abuse at domain.com}, %w{tag}, []],
-            "tag, other: abuse at domain.com" => [%w{abuse at domain.com}, %w{tag other}, []],
-            "tag-other: abuse at domain.com" => [%w{abuse at domain.com}, %w{tag-other}, []],
-            "tag, !other: abuse at domain.com" => [%w{abuse at domain.com}, %w{tag}, %w{other}],
-            "tag, !other, one, !two: abuse at domain.com" => [%w{abuse at domain.com}, %w{tag one}, %w{other two}],
-            "tag: abuse at domain.com, other at domain.com" => [%w{abuse at domain.com other at domain.com}, %w{tag}, []]
-            
-        }.each do |line, results|
-            assert_nothing_raised("Failed to parse %s" % line.inspect) do
-                assert_equal(results, report.parse(line).shift, "line %s returned incorrect results %s" % [line.inspect, results.inspect])
-            end
-        end
-    end
-    
-    def test_tagmail_matching
-        report = Puppet::Transaction::Report.new
-        Puppet::Util::Log.close
-        [%w{one}, %w{one two}, %w{one two three}, %w{one two three four}].each do |tags|
-            log = Puppet::Util::Log.new(:level => :notice, :message => tags.join(" "), :tags => tags)
-            
-            report << log
-        end
-        
-        list = report.logs.collect { |l| l.to_report }
-        
-        report.extend(Puppet::Reports.report(:tagmail))
-        
-        {
-            [%w{abuse at domain.com}, %w{all}, []] => list,
-            [%w{abuse at domain.com}, %w{all}, %w{three}] => list[0..1],
-            [%w{abuse at domain.com}, %w{one}, []] => list,
-            [%w{abuse at domain.com}, %w{two}, []] => list[1..3],
-            [%w{abuse at domain.com}, %w{two}, %w{three}] => list[1..1],
-            [%w{abuse at domain.com}, %w{}, %w{one}] => nil
-        }.each do |args, expected|
-            results = nil
-            assert_nothing_raised("Could not match with %s" % args.inspect) do
-                results = report.match([args])
-            end
-            
-            if expected
-                assert_equal([args[0], expected.join("\n")], results[0], "did get correct results for %s" % args.inspect)
-            else
-                assert_nil(results[0], "got a report for %s" % args.inspect)
-            end
-        end
-    end
-
-    def test_summary
-        report = mkreport
-
-        summary = nil
-        assert_nothing_raised("Could not create report summary") do
-            summary = report.summary
-        end
-
-        %w{Changes Total Resources}.each do |main|
-            assert(summary.include?(main), "Summary did not include info for %s" % main)
-        end
-    end
-end
-
diff --git a/test/other/transactions.rb b/test/other/transactions.rb
deleted file mode 100755
index b1dbaed..0000000
--- a/test/other/transactions.rb
+++ /dev/null
@@ -1,1149 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-require 'mocha'
-require 'puppettest/support/resources'
-require 'puppettest/support/utils'
-
-class TestTransactions < Test::Unit::TestCase
-    include PuppetTest::FileTesting
-    include PuppetTest::Support::Resources
-    include PuppetTest::Support::Utils
-    class Fakeprop <Puppet::Property
-        attr_accessor :path, :is, :should, :name
-        def should_to_s(value)
-            value.to_s
-        end
-        def insync?(foo)
-            true
-        end
-        def info(*args)
-            false
-        end
-    end
-    
-    
-    def mkgenerator(&block)
-        $finished = []
-        cleanup { $finished = nil }
-        
-        # Create a bogus type that generates new instances with shorter
-        type = Puppet::Type.newtype(:generator) do
-            newparam(:name, :namevar => true)
-            def finish
-                $finished << self.name
-            end
-        end
-        if block
-            type.class_eval(&block)
-        end
-        cleanup do
-            Puppet::Type.rmtype(:generator)
-        end
-        
-        return type
-    end
-    
-    # Create a new type that generates instances with shorter names.
-    def mkreducer(&block)
-        type = mkgenerator() do
-            def eval_generate
-                ret = []
-                if title.length > 1
-                    ret << self.class.create(:title => title[0..-2])
-                else
-                    return nil
-                end
-                ret
-            end
-        end
-        
-        if block
-            type.class_eval(&block)
-        end
-        
-        return type
-    end
-
-    def test_reports
-        path1 = tempfile()
-        path2 = tempfile()
-        objects = []
-        objects << Puppet::Type.type(:file).create(
-            :path => path1,
-            :content => "yayness"
-        )
-        objects << Puppet::Type.type(:file).create(
-            :path => path2,
-            :content => "booness"
-        )
-
-        trans = assert_events([:file_created, :file_created], *objects)
-
-        report = nil
-
-        assert_nothing_raised {
-            report = trans.generate_report
-        }
-
-        # First test the report logs
-        assert(report.logs.length > 0, "Did not get any report logs")
-
-        report.logs.each do |obj|
-            assert_instance_of(Puppet::Util::Log, obj)
-        end
-
-        # Then test the metrics
-        metrics = report.metrics
-
-        assert(metrics, "Did not get any metrics")
-        assert(metrics.length > 0, "Did not get any metrics")
-
-        assert(metrics.has_key?("resources"), "Did not get object metrics")
-        assert(metrics.has_key?("changes"), "Did not get change metrics")
-
-        metrics.each do |name, metric|
-            assert_instance_of(Puppet::Util::Metric, metric)
-        end
-    end
-
-    def test_prefetch
-        # Create a type just for testing prefetch
-        name = :prefetchtesting
-        $prefetched = false
-        type = Puppet::Type.newtype(name) do
-            newparam(:name) {}
-        end
-        
-        cleanup do
-            Puppet::Type.rmtype(name)
-        end
-
-        # Now create a provider
-        type.provide(:prefetch) do
-            def self.prefetch(resources)
-                $prefetched = resources
-            end
-        end
-
-        # Now create an instance
-        inst = type.create :name => "yay"
-        
-        # Create a transaction
-        trans = Puppet::Transaction.new(mk_catalog(inst))
-
-        # Make sure prefetch works
-        assert_nothing_raised do
-            trans.prefetch
-        end
-
-        assert_equal({inst.title => inst}, $prefetched, "type prefetch was not called")
-
-        # Now make sure it gets called from within evaluate()
-        $prefetched = false
-        assert_nothing_raised do
-            trans.evaluate
-        end
-
-        assert_equal({inst.title => inst}, $prefetched, "evaluate did not call prefetch")
-    end
-
-    def test_refreshes_generate_events
-        path = tempfile()
-        firstpath = tempfile()
-        secondpath = tempfile()
-        file = Puppet::Type.type(:file).create(:title => "file", :path => path, :content => "yayness")
-        first = Puppet::Type.newexec(:title => "first",
-                                     :command => "/bin/echo first > #{firstpath}",
-                                     :subscribe => [:file, path],
-                                     :refreshonly => true
-        )
-        second = Puppet::Type.newexec(:title => "second",
-                                     :command => "/bin/echo second > #{secondpath}",
-                                     :subscribe => [:exec, "first"],
-                                     :refreshonly => true
-        )
-
-        assert_apply(file, first, second)
-
-        assert(FileTest.exists?(secondpath), "Refresh did not generate an event")
-    end
-
-    unless %x{groups}.chomp.split(/ /).length > 1
-        $stderr.puts "You must be a member of more than one group to test transactions"
-    else
-    def ingroup(gid)
-        require 'etc'
-        begin
-            group = Etc.getgrgid(gid)
-        rescue => detail
-            puts "Could not retrieve info for group %s: %s" % [gid, detail]
-            return nil
-        end
-
-        return @groups.include?(group.name)
-    end
-
-    def setup
-        super
-        @groups = %x{groups}.chomp.split(/ /)
-        unless @groups.length > 1
-            p @groups
-            raise "You must be a member of more than one group to test this"
-        end
-    end
-
-    def newfile(hash = {})
-        tmpfile = tempfile()
-        File.open(tmpfile, "w") { |f| f.puts rand(100) }
-
-        # XXX now, because os x apparently somehow allows me to make a file
-        # owned by a group i'm not a member of, i have to verify that
-        # the file i just created is owned by one of my groups
-        # grrr
-        unless ingroup(File.stat(tmpfile).gid)
-            Puppet.info "Somehow created file in non-member group %s; fixing" %
-                File.stat(tmpfile).gid
-
-            require 'etc'
-            firstgr = @groups[0]
-            unless firstgr.is_a?(Integer)
-                str = Etc.getgrnam(firstgr)
-                firstgr = str.gid
-            end
-            File.chown(nil, firstgr, tmpfile)
-        end
-
-        hash[:name] = tmpfile
-        assert_nothing_raised() {
-            return Puppet.type(:file).create(hash)
-        }
-    end
-
-    def newexec(file)
-        assert_nothing_raised() {
-            return Puppet.type(:exec).create(
-                :name => "touch %s" % file,
-                :path => "/bin:/usr/bin:/sbin:/usr/sbin",
-                :returns => 0
-            )
-        }
-    end
-
-    # modify a file and then roll the modifications back
-    def test_filerollback
-        transaction = nil
-        file = newfile()
-
-        properties = {}
-        check = [:group,:mode]
-        file[:check] = check
-
-        assert_nothing_raised() {
-            file.retrieve
-        }
-
-        assert_nothing_raised() {
-            check.each { |property|
-                value = file.property(property).retrieve
-                assert(value)
-                properties[property] = value
-            }
-        }
-
-
-        component = mk_catalog("file",file)
-        require 'etc'
-        groupname = Etc.getgrgid(File.stat(file.name).gid).name
-        assert_nothing_raised() {
-            # Find a group that it's not set to
-            group = @groups.find { |group| group != groupname }
-            unless group
-                raise "Could not find suitable group"
-            end
-            file[:group] = group
-
-            file[:mode] = "755"
-        }
-        trans = assert_events([:file_changed, :file_changed], component)
-        file.retrieve
-
-        assert_rollback_events(trans, [:file_changed, :file_changed], "file")
-
-        assert_nothing_raised() {
-            file.retrieve
-        }
-        properties.each { |property,value|
-            assert_equal(
-                value, file.value(property), "File %s remained %s" % [property, file.value(property)]
-            )
-        }
-    end
-
-    # test that services are correctly restarted and that work is done
-    # in the right order
-    def test_refreshing
-        transaction = nil
-        file = newfile()
-        execfile = File.join(tmpdir(), "exectestingness")
-        exec = newexec(execfile)
-        properties = {}
-        check = [:group,:mode]
-        file[:check] = check
-        file[:group] = @groups[0]
-
-        config = mk_catalog(file)
-        config.apply
-
-        @@tmpfiles << execfile
-
-        # 'subscribe' expects an array of arrays
-        exec[:subscribe] = [[file.class.name,file.name]]
-        exec[:refreshonly] = true
-
-        assert_nothing_raised() {
-            file.retrieve
-            exec.retrieve
-        }
-
-        check.each { |property|
-            properties[property] = file.value(property)
-        }
-        assert_nothing_raised() {
-            file[:mode] = "755"
-        }
-
-        # Make a new catalog so the resource relationships get
-        # set up.
-        config = mk_catalog(file, exec)
-
-        trans = assert_events([:file_changed, :triggered], config)
-
-        assert(FileTest.exists?(execfile), "Execfile does not exist")
-        File.unlink(execfile)
-        assert_nothing_raised() {
-            file[:group] = @groups[1]
-        }
-
-        trans = assert_events([:file_changed, :triggered], config)
-        assert(FileTest.exists?(execfile), "Execfile does not exist")
-    end
-
-    # Verify that one component requiring another causes the contained
-    # resources in the requiring component to get refreshed.
-    def test_refresh_across_two_components
-        transaction = nil
-        file = newfile()
-        execfile = File.join(tmpdir(), "exectestingness2")
-        @@tmpfiles << execfile
-        exec = newexec(execfile)
-        properties = {}
-        check = [:group,:mode]
-        file[:check] = check
-        file[:group] = @groups[0]
-        assert_apply(file)
-
-        config = Puppet::Node::Catalog.new
-        fcomp = Puppet::Type.type(:component).create(:name => "file")
-        config.add_resource fcomp
-        config.add_resource file
-        config.add_edge(fcomp, file)
-
-        ecomp = Puppet::Type.type(:component).create(:name => "exec")
-        config.add_resource ecomp
-        config.add_resource exec
-        config.add_edge(ecomp, exec)
-
-        # 'subscribe' expects an array of arrays
-        #component[:require] = [[file.class.name,file.name]]
-        ecomp[:subscribe] = fcomp
-        exec[:refreshonly] = true
-
-        trans = assert_events([], config)
-
-        assert_nothing_raised() {
-            file[:group] = @groups[1]
-            file[:mode] = "755"
-        }
-
-        trans = assert_events([:file_changed, :file_changed, :triggered], config)
-    end
-
-    # Make sure that multiple subscriptions get triggered.
-    def test_multisubs
-        path = tempfile()
-        file1 = tempfile()
-        file2 = tempfile()
-        file = Puppet.type(:file).create(
-            :path => path,
-            :ensure => "file"
-        )
-        exec1 = Puppet.type(:exec).create(
-            :path => ENV["PATH"],
-            :command => "touch %s" % file1,
-            :refreshonly => true,
-            :subscribe => [:file, path]
-        )
-        exec2 = Puppet.type(:exec).create(
-            :path => ENV["PATH"],
-            :command => "touch %s" % file2,
-            :refreshonly => true,
-            :subscribe => [:file, path]
-        )
-
-        assert_apply(file, exec1, exec2)
-        assert(FileTest.exists?(file1), "File 1 did not get created")
-        assert(FileTest.exists?(file2), "File 2 did not get created")
-    end
-
-    # Make sure that a failed trigger doesn't result in other events not
-    # getting triggered.
-    def test_failedrefreshes
-        path = tempfile()
-        newfile = tempfile()
-        file = Puppet.type(:file).create(
-            :path => path,
-            :ensure => "file"
-        )
-        exec1 = Puppet.type(:exec).create(
-            :path => ENV["PATH"],
-            :command => "touch /this/cannot/possibly/exist",
-            :logoutput => true,
-            :refreshonly => true,
-            :subscribe => file,
-            :title => "one"
-        )
-        exec2 = Puppet.type(:exec).create(
-            :path => ENV["PATH"],
-            :command => "touch %s" % newfile,
-            :logoutput => true,
-            :refreshonly => true,
-            :subscribe => [file, exec1],
-            :title => "two"
-        )
-
-        assert_apply(file, exec1, exec2)
-        assert(FileTest.exists?(newfile), "Refresh file did not get created")
-    end
-
-    # Make sure that unscheduled and untagged objects still respond to events
-    def test_unscheduled_and_untagged_response
-        Puppet::Type.type(:schedule).mkdefaultschedules
-        Puppet[:ignoreschedules] = false
-        file = Puppet.type(:file).create(
-            :name => tempfile(),
-            :ensure => "file",
-            :backup => false
-        )
-
-        fname = tempfile()
-        exec = Puppet.type(:exec).create(
-            :name => "touch %s" % fname,
-            :path => "/usr/bin:/bin",
-            :schedule => "monthly",
-            :subscribe => ["file", file.name]
-        )
-
-        config = mk_catalog(file, exec)
-
-        # Run it once
-        assert_apply(config)
-        assert(FileTest.exists?(fname), "File did not get created")
-
-        assert(!exec.scheduled?, "Exec is somehow scheduled")
-
-        # Now remove it, so it can get created again
-        File.unlink(fname)
-
-        file[:content] = "some content"
-
-        assert_events([:file_changed, :triggered], config)
-
-        assert(FileTest.exists?(fname), "File did not get recreated")
-
-        # Now remove it, so it can get created again
-        File.unlink(fname)
-
-        # And tag our exec
-        exec.tag("testrun")
-
-        # And our file, so it runs
-        file.tag("norun")
-
-        Puppet[:tags] = "norun"
-
-        file[:content] = "totally different content"
-
-        assert(! file.insync?(file.retrieve), "Uh, file is in sync?")
-
-        assert_events([:file_changed, :triggered], config)
-        assert(FileTest.exists?(fname), "File did not get recreated")
-    end
-
-    def test_failed_reqs_mean_no_run
-        exec = Puppet::Type.type(:exec).create(
-            :command => "/bin/mkdir /this/path/cannot/possibly/exit",
-            :title => "mkdir"
-        )
-
-        file1 = Puppet::Type.type(:file).create(
-            :title => "file1",
-            :path => tempfile(),
-            :require => exec,
-            :ensure => :file
-        )
-
-        file2 = Puppet::Type.type(:file).create(
-            :title => "file2",
-            :path => tempfile(),
-            :require => file1,
-            :ensure => :file
-        )
-
-        config = mk_catalog(exec, file1, file2)
-
-        assert_apply(config)
-
-        assert(! FileTest.exists?(file1[:path]),
-            "File got created even tho its dependency failed")
-        assert(! FileTest.exists?(file2[:path]),
-            "File got created even tho its deep dependency failed")
-    end
-    end
-    
-    def test_relationship_graph
-        config = mktree
-
-        config.meta_def(:f) do |name|
-            self.resource("File[%s]" % name)
-        end
-        
-        {"one" => "two", "File[f]" => "File[c]", "File[h]" => "middle"}.each do |source_ref, target_ref|
-            source = config.resource(source_ref) or raise "Missing %s" % source_ref
-            target = config.resource(target_ref) or raise "Missing %s" % target_ref
-            target[:require] = source
-        end
-        
-        trans = Puppet::Transaction.new(config)
-        
-        graph = nil
-        assert_nothing_raised do
-            graph = trans.relationship_graph
-        end
-
-        assert_instance_of(Puppet::Node::Catalog, graph,
-            "Did not get relationship graph")
-        
-        # Make sure all of the components are gone
-        comps = graph.vertices.find_all { |v| v.is_a?(Puppet::Type::Component)}
-        assert(comps.empty?, "Deps graph still contains components %s" %
-            comps.collect { |c| c.ref }.join(","))
-        
-        assert_equal([], comps, "Deps graph still contains components")
-        
-        # It must be reversed because of how topsort works
-        sorted = graph.topsort.reverse
-        
-        # Now make sure the appropriate edges are there and are in the right order
-        assert(graph.dependents(config.f(:f)).include?(config.f(:c)),
-            "c not marked a dep of f")
-        assert(sorted.index(config.f(:c)) < sorted.index(config.f(:f)),
-            "c is not before f")
-            
-        config.resource("one").each do |o|
-            config.resource("two").each do |t|
-                assert(graph.dependents(o).include?(t),
-                    "%s not marked a dep of %s" % [t.ref, o.ref])
-                assert(sorted.index(t) < sorted.index(o),
-                    "%s is not before %s" % [t.ref, o.ref])
-            end
-        end
-        
-        trans.catalog.leaves(config.resource("middle")).each do |child|
-            assert(graph.dependents(config.f(:h)).include?(child),
-                "%s not marked a dep of h" % [child.ref])
-            assert(sorted.index(child) < sorted.index(config.f(:h)),
-                "%s is not before h" % child.ref)
-        end
-        
-        # Lastly, make sure our 'g' vertex made it into the relationship
-        # graph, since it's not involved in any relationships.
-        assert(graph.vertex?(config.f(:g)),
-            "Lost vertexes with no relations")
-
-        # Now make the reversal graph and make sure all of the vertices made it into that
-        reverse = graph.reversal
-        %w{a b c d e f g h}.each do |letter|
-            file = config.f(letter)
-            assert(reverse.vertex?(file), "%s did not make it into reversal" % letter)
-        end
-    end
-    
-    # Test pre-evaluation generation
-    def test_generate
-        mkgenerator() do
-            def generate
-                ret = []
-                if title.length > 1
-                    ret << self.class.create(:title => title[0..-2])
-                else
-                    return nil
-                end
-                ret
-            end
-        end
-        
-        yay = Puppet::Type.newgenerator :title => "yay"
-        rah = Puppet::Type.newgenerator :title => "rah"
-        config = mk_catalog(yay, rah)
-        trans = Puppet::Transaction.new(config)
-        
-        assert_nothing_raised do
-            trans.generate
-        end
-        
-        %w{ya ra y r}.each do |name|
-            assert(trans.catalog.vertex?(Puppet::Type.type(:generator)[name]),
-                "Generated %s was not a vertex" % name)
-            assert($finished.include?(name), "%s was not finished" % name)
-        end
-        
-        # Now make sure that cleanup gets rid of those generated types.
-        assert_nothing_raised do
-            trans.cleanup
-        end
-        
-        %w{ya ra y r}.each do |name|
-            assert(!trans.catalog.vertex?(Puppet::Type.type(:generator)[name]),
-                "Generated vertex %s was not removed from graph" % name)
-            assert_nil(Puppet::Type.type(:generator)[name],
-                "Generated vertex %s was not removed from class" % name)
-        end
-    end
-    
-    # Test mid-evaluation generation.
-    def test_eval_generate
-        $evaluated = []
-        cleanup { $evaluated = nil }
-        type = mkreducer() do
-            def evaluate
-                $evaluated << self.title
-                return []
-            end
-        end
-
-        yay = Puppet::Type.newgenerator :title => "yay"
-        rah = Puppet::Type.newgenerator :title => "rah", :subscribe => yay
-        config = mk_catalog(yay, rah)
-        trans = Puppet::Transaction.new(config)
-        
-        trans.prepare
-        
-        # Now apply the resources, and make sure they appropriately generate
-        # things.
-        assert_nothing_raised("failed to apply yay") do
-            trans.eval_resource(yay)
-        end
-        ya = type["ya"]
-        assert(ya, "Did not generate ya")
-        assert(trans.relationship_graph.vertex?(ya),
-            "Did not add ya to rel_graph")
-        
-        # Now make sure the appropriate relationships were added
-        assert(trans.relationship_graph.edge?(yay, ya),
-            "parent was not required by child")
-        assert(! trans.relationship_graph.edge?(ya, rah),
-            "generated child ya inherited depencency on rah")
-        
-        # Now make sure it in turn eval_generates appropriately
-        assert_nothing_raised("failed to apply yay") do
-            trans.eval_resource(type["ya"])
-        end
-
-        %w{y}.each do |name|
-            res = type[name]
-            assert(res, "Did not generate %s" % name)
-            assert(trans.relationship_graph.vertex?(res),
-                "Did not add %s to rel_graph" % name)
-            assert($finished.include?("y"), "y was not finished")
-        end
-        
-        assert_nothing_raised("failed to eval_generate with nil response") do
-            trans.eval_resource(type["y"])
-        end
-        assert(trans.relationship_graph.edge?(yay, ya), "no edge was created for ya => yay")
-        
-        assert_nothing_raised("failed to apply rah") do
-            trans.eval_resource(rah)
-        end
-
-        ra = type["ra"]
-        assert(ra, "Did not generate ra")
-        assert(trans.relationship_graph.vertex?(ra),
-            "Did not add ra to rel_graph" % name)
-        assert($finished.include?("ra"), "y was not finished")
-        
-        # Now make sure this generated resource has the same relationships as
-        # the generating resource
-        assert(! trans.relationship_graph.edge?(yay, ra),
-           "rah passed its dependencies on to its children")
-        assert(! trans.relationship_graph.edge?(ya, ra),
-            "children have a direct relationship")
-        
-        # Now make sure that cleanup gets rid of those generated types.
-        assert_nothing_raised do
-            trans.cleanup
-        end
-        
-        %w{ya ra y r}.each do |name|
-            assert(!trans.relationship_graph.vertex?(type[name]),
-                "Generated vertex %s was not removed from graph" % name)
-            assert_nil(type[name],
-                "Generated vertex %s was not removed from class" % name)
-        end
-        
-        # Now, start over and make sure that everything gets evaluated.
-        trans = Puppet::Transaction.new(config)
-        $evaluated.clear
-        assert_nothing_raised do
-            trans.evaluate
-        end
-        
-        assert_equal(%w{yay ya y rah ra r}, $evaluated,
-            "Not all resources were evaluated or not in the right order")
-    end
-
-    # We need to generate resources before we prefetch them, else generated
-    # resources that require prefetching don't work.
-    def test_generate_before_prefetch
-        config = mk_catalog()
-        trans = Puppet::Transaction.new(config)
-
-        generate = nil
-        prefetch = nil
-        trans.expects(:generate).with { |*args| generate = Time.now; true }
-        trans.expects(:prefetch).with { |*args| ! generate.nil? }
-        trans.prepare
-        return
-
-        resource = Puppet::Type.type(:file).create :ensure => :present, :path => tempfile()
-        other_resource = mock 'generated'
-        def resource.generate
-            [other_resource]
-        end
-
-
-        config = mk_catalog(yay, rah)
-        trans = Puppet::Transaction.new(config)
-        
-        assert_nothing_raised do
-            trans.generate
-        end
-        
-        %w{ya ra y r}.each do |name|
-            assert(trans.catalog.vertex?(Puppet::Type.type(:generator)[name]),
-                "Generated %s was not a vertex" % name)
-            assert($finished.include?(name), "%s was not finished" % name)
-        end
-        
-        # Now make sure that cleanup gets rid of those generated types.
-        assert_nothing_raised do
-            trans.cleanup
-        end
-    end
-
-    def test_ignore_tags?
-        config = Puppet::Node::Catalog.new
-        config.host_config = true
-        transaction = Puppet::Transaction.new(config)
-        assert(! transaction.ignore_tags?, "Ignoring tags when applying a host catalog")
-
-        config.host_config = false
-        transaction = Puppet::Transaction.new(config)
-        assert(transaction.ignore_tags?, "Not ignoring tags when applying a non-host catalog")
-    end
-    
-    def test_missing_tags?
-        resource = stub 'resource', :tagged? => true
-        config = Puppet::Node::Catalog.new
-
-        # Mark it as a host config so we don't care which test is first
-        config.host_config = true
-        transaction = Puppet::Transaction.new(config)
-        assert(! transaction.missing_tags?(resource), "Considered a resource to be missing tags when none are set")
-
-        # host catalogs pay attention to tags, no one else does.
-        Puppet[:tags] = "three,four"
-        config.host_config = false
-        transaction = Puppet::Transaction.new(config)
-        assert(! transaction.missing_tags?(resource), "Considered a resource to be missing tags when not running a host catalog")
-
-        # 
-        config.host_config = true
-        transaction = Puppet::Transaction.new(config)
-        assert(! transaction.missing_tags?(resource), "Considered a resource to be missing tags when running a host catalog and all tags are present")
-
-        transaction = Puppet::Transaction.new(config)
-        resource.stubs :tagged? => false
-        assert(transaction.missing_tags?(resource), "Considered a resource not to be missing tags when running a host catalog and tags are missing")
-    end
-    
-    # Make sure changes generated by eval_generated resources have proxies
-    # set to the top-level resource.
-    def test_proxy_resources
-        type = mkreducer do
-            def evaluate
-                return Puppet::Transaction::Change.new(Fakeprop.new(
-                    :path => :path, :is => :is, :should => :should, :name => self.name, :resource => "a parent"), :is)
-            end
-        end
-        
-        resource = type.create :name => "test"
-        config = mk_catalog(resource)
-        trans = Puppet::Transaction.new(config)
-        trans.prepare
-
-        assert_nothing_raised do
-            trans.eval_resource(resource)
-        end
-
-        changes = trans.instance_variable_get("@changes")
-        
-        assert(changes.length > 0, "did not get any changes")
-        
-        changes.each do |change|
-            assert_equal(resource, change.resource, "change did not get proxy set correctly")
-        end
-    end
-    
-    # Make sure changes in contained files still generate callback events.
-    def test_generated_callbacks
-        dir = tempfile()
-        maker = tempfile()
-        Dir.mkdir(dir)
-        file = File.join(dir, "file")
-        File.open(file, "w") { |f| f.puts "" }
-        File.chmod(0644, file)
-        File.chmod(0755, dir) # So only the child file causes a change
-        
-        dirobj = Puppet::Type.type(:file).create :mode => "755", :recurse => true, :path => dir
-        exec = Puppet::Type.type(:exec).create :title => "make",
-            :command => "touch #{maker}", :path => ENV['PATH'], :refreshonly => true,
-            :subscribe => dirobj
-        
-        assert_apply(dirobj, exec)
-        assert(FileTest.exists?(maker), "Did not make callback file")
-    end
-
-    # Yay, this out to be fun.
-    def test_trigger
-        $triggered = []
-        cleanup { $triggered = nil }
-        trigger = Class.new do
-            attr_accessor :name
-            include Puppet::Util::Logging
-            def initialize(name)
-                @name = name
-            end
-            def ref
-                self.name
-            end
-            def refresh
-                $triggered << self.name
-            end
-
-            def to_s
-                self.name
-            end
-        end
-
-        # Make a graph with some stuff in it.
-        graph = Puppet::Node::Catalog.new
-
-        # Add a non-triggering edge.
-        a = trigger.new(:a)
-        b = trigger.new(:b)
-        c = trigger.new(:c)
-        nope = Puppet::Relationship.new(a, b)
-        yep = Puppet::Relationship.new(a, c, {:callback => :refresh})
-        graph.add_edge(nope)
-
-        # And a triggering one.
-        graph.add_edge(yep)
-
-        # Create our transaction
-        trans = Puppet::Transaction.new(graph)
-
-        # Set the non-triggering on
-        assert_nothing_raised do
-            trans.set_trigger(nope)
-        end
-
-        assert(! trans.targeted?(b), "b is incorrectly targeted")
-
-        # Now set the other
-        assert_nothing_raised do
-            trans.set_trigger(yep)
-        end
-        assert(trans.targeted?(c), "c is not targeted")
-
-        # Now trigger our three resources
-        assert_nothing_raised do
-            assert_nil(trans.trigger(a), "a somehow triggered something")
-        end
-        assert_nothing_raised do
-            assert_nil(trans.trigger(b), "b somehow triggered something")
-        end
-        assert_equal([], $triggered,"got something in triggered")
-        result = nil
-        assert_nothing_raised do
-            result = trans.trigger(c)
-        end
-        assert(result, "c did not trigger anything")
-        assert_instance_of(Array, result)
-        event = result.shift
-        assert_instance_of(Puppet::Transaction::Event, event)
-        assert_equal(:triggered, event.name, "event was not set correctly")
-        assert_equal(c, event.source, "source was not set correctly")
-
-        assert(trans.triggered?(c, :refresh),
-            "Transaction did not store the trigger")
-    end
-    
-    def test_set_target
-        file = Puppet::Type.type(:file).create(:path => tempfile(), :content => "yay")
-        exec1 = Puppet::Type.type(:exec).create :command => "/bin/echo exec1"
-        exec2 = Puppet::Type.type(:exec).create :command => "/bin/echo exec2"
-        trans = Puppet::Transaction.new(mk_catalog(file, exec1, exec2))
-        
-        # First try it with an edge that has no callback
-        edge = Puppet::Relationship.new(file, exec1)
-        assert_nothing_raised { trans.set_trigger(edge) }
-        assert(! trans.targeted?(exec1), "edge with no callback resulted in a target")
-        
-        # Now with an edge that has an unsupported callback
-        edge = Puppet::Relationship.new(file, exec1, :callback => :nosuchmethod, :event => :ALL_EVENTS)
-        assert_nothing_raised { trans.set_trigger(edge) }
-        assert(! trans.targeted?(exec1), "edge with invalid callback resulted in a target")
-        
-        # Lastly, with an edge with a supported callback
-        edge = Puppet::Relationship.new(file, exec1, :callback => :refresh, :event => :ALL_EVENTS)
-        assert_nothing_raised { trans.set_trigger(edge) }
-        assert(trans.targeted?(exec1), "edge with valid callback did not result in a target")
-    end
-    
-    # Testing #401 -- transactions are calling refresh() on classes that don't support it.
-    def test_callback_availability
-        $called = []
-        klass = Puppet::Type.newtype(:norefresh) do
-            newparam(:name, :namevar => true) {}
-            def method_missing(method, *args)
-                $called << method
-            end
-        end
-        cleanup do
-            $called = nil
-            Puppet::Type.rmtype(:norefresh)
-        end
-
-        file = Puppet::Type.type(:file).create :path => tempfile(), :content => "yay"
-        one = klass.create :name => "one", :subscribe => file
-        
-        assert_apply(file, one)
-        
-        assert(! $called.include?(:refresh), "Called refresh when it wasn't set as a method")
-    end
-
-    # Testing #437 - cyclic graphs should throw failures.
-    def test_fail_on_cycle
-        one = Puppet::Type.type(:exec).create(:name => "/bin/echo one")
-        two = Puppet::Type.type(:exec).create(:name => "/bin/echo two")
-        one[:require] = two
-        two[:require] = one
-
-        config = mk_catalog(one, two)
-        trans = Puppet::Transaction.new(config)
-        assert_raise(Puppet::Error) do
-            trans.prepare
-        end
-    end
-
-    def test_errors_during_generation
-        type = Puppet::Type.newtype(:failer) do
-            newparam(:name) {}
-            def eval_generate
-                raise ArgumentError, "Invalid value"
-            end
-            def generate
-                raise ArgumentError, "Invalid value"
-            end
-        end
-        cleanup { Puppet::Type.rmtype(:failer) }
-
-        obj = type.create(:name => "testing")
-
-        assert_apply(obj)
-    end
-    
-    def test_self_refresh_causes_triggering
-        type = Puppet::Type.newtype(:refresher, :self_refresh => true) do
-            attr_accessor :refreshed, :testing
-            newparam(:name) {}
-            newproperty(:testing) do
-                def sync
-                    # noop
-                    :ran_testing
-                end
-            end
-            def refresh
-                @refreshed = true
-            end
-        end
-        cleanup { Puppet::Type.rmtype(:refresher)}
-        
-        obj = type.create(:name => "yay", :testing => "cool")
-        
-        assert(! obj.insync?(obj.retrieve), "fake object is already in sync")
-        
-        # Now make sure it gets refreshed when the change happens
-        assert_apply(obj)
-        assert(obj.refreshed, "object was not refreshed during transaction")
-    end
-    
-    # Testing #433
-    def test_explicit_dependencies_beat_automatic
-        # Create a couple of different resource sets that have automatic relationships and make sure the manual relationships win
-        rels = {}
-        # First users and groups
-        group = Puppet::Type.type(:group).create(:name => nonrootgroup.name, :ensure => :present)
-        user = Puppet::Type.type(:user).create(:name => nonrootuser.name, :ensure => :present, :gid => group.title)
-        
-        # Now add the explicit relationship
-        group[:require] = user
-        rels[group] = user
-        # Now files
-        d = tempfile()
-        f = File.join(d, "file")
-        file = Puppet::Type.type(:file).create(:path => f, :content => "yay")
-        dir = Puppet::Type.type(:file).create(:path => d, :ensure => :directory, :require => file)
-        
-        rels[dir] = file
-        rels.each do |after, before|
-            config = mk_catalog(before, after)
-            trans = Puppet::Transaction.new(config)
-            str = "from %s to %s" % [before, after]
-        
-            assert_nothing_raised("Failed to create graph %s" % str) do
-                trans.prepare
-            end
-        
-            graph = trans.relationship_graph
-            assert(graph.edge?(before, after), "did not create manual relationship %s" % str)
-            assert(! graph.edge?(after, before), "created automatic relationship %s" % str)
-        end
-    end
-
-    # #542 - make sure resources in noop mode still notify their resources,
-    # so that users know if a service will get restarted.
-    def test_noop_with_notify
-        path = tempfile
-        epath = tempfile
-        spath = tempfile
-        file = Puppet::Type.type(:file).create(:path => path, :ensure => :file,
-            :title => "file")
-        exec = Puppet::Type.type(:exec).create(:command => "touch %s" % epath,
-            :path => ENV["PATH"], :subscribe => file, :refreshonly => true,
-            :title => 'exec1')
-        exec2 = Puppet::Type.type(:exec).create(:command => "touch %s" % spath,
-            :path => ENV["PATH"], :subscribe => exec, :refreshonly => true,
-            :title => 'exec2')
-
-        Puppet[:noop] = true
-
-        assert(file.noop, "file not in noop")
-        assert(exec.noop, "exec not in noop")
-
-        @logs.clear
-        assert_apply(file, exec, exec2)
-
-        assert(! FileTest.exists?(path), "Created file in noop")
-        assert(! FileTest.exists?(epath), "Executed exec in noop")
-        assert(! FileTest.exists?(spath), "Executed second exec in noop")
-
-        assert(@logs.detect { |l|
-            l.message =~ /should be/  and l.source == file.property(:ensure).path},
-                "did not log file change")
-        assert(@logs.detect { |l|
-            l.message =~ /Would have/ and l.source == exec.path },
-                "did not log first exec trigger")
-        assert(@logs.detect { |l|
-            l.message =~ /Would have/ and l.source == exec2.path },
-                "did not log second exec trigger")
-    end
-
-    def test_only_stop_purging_with_relations
-        files = []
-        paths = []
-        3.times do |i|
-            path = tempfile
-            paths << path
-            file = Puppet::Type.type(:file).create(:path => path, :ensure => :absent,
-                :backup => false, :title => "file%s" % i)
-            File.open(path, "w") { |f| f.puts "" }
-            files << file
-        end
-
-        files[0][:ensure] = :file
-        files[0][:require] = files[1..2]
-
-        # Mark the second as purging
-        files[1].purging
-
-        assert_apply(*files)
-
-        assert(FileTest.exists?(paths[1]), "Deleted required purging file")
-        assert(! FileTest.exists?(paths[2]), "Did not delete non-purged file")
-    end
-
-    def test_flush
-        $state = "absent"
-        $flushed = 0
-        type = Puppet::Type.newtype(:flushtest) do
-            newparam(:name)
-            newproperty(:ensure) do
-                def retrieve
-                    $state
-                end
-                def set(value)
-                    $state = value
-                    :thing_changed
-                end
-            end
-
-            def flush
-                $flushed += 1
-            end
-        end
-
-        cleanup { Puppet::Type.rmtype(:flushtest) }
-
-        obj = type.create(:name => "test", :ensure => "present")
-
-        # first make sure it runs through and flushes
-        assert_apply(obj)
-
-        assert_equal("present", $state, "Object did not make a change")
-        assert_equal(1, $flushed, "object was not flushed")
-
-        # Now run a noop and make sure we don't flush
-        obj[:ensure] = "other"
-        obj[:noop] = true
-
-        assert_apply(obj)
-        assert_equal("present", $state, "Object made a change in noop")
-        assert_equal(1, $flushed, "object was flushed in noop")
-    end
-end
diff --git a/test/puppet/conffiles.rb b/test/puppet/conffiles.rb
deleted file mode 100755
index 750570d..0000000
--- a/test/puppet/conffiles.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-
-class TestConfFiles < Test::Unit::TestCase
-    include PuppetTest
-
-    @@gooddata = [
-        {
-            "fun" => {
-                "a" => "b",
-                "c" => "d",
-                "e" => "f"
-            },
-            "yay" => {
-                "aa" => "bk",
-                "ca" => "dk",
-                "ea" => "fk"
-            },
-            "boo" => {
-                "eb" => "fb"
-            },
-        },
-        {
-            "puppet" => {
-                "yay" => "rah"
-            },
-            "booh" => {
-                "okay" => "rah"
-            },
-            "back" => {
-                "yayness" => "rah"
-            },
-        }
-    ]
-
-    def data2config(data)
-        str = ""
-
-        if data.include?("puppet")
-            # because we're modifying it
-            data = data.dup
-            str += "[puppet]\n"
-            data["puppet"].each { |var, value|
-                str += "%s = %s\n" % [var, value]
-            }
-            data.delete("puppet")
-        end
-
-        data.each { |type, settings|
-            str += "[%s]\n" % type
-            settings.each { |var, value|
-                str += "%s = %s\n" % [var, value]
-            }
-        }
-
-        return str
-    end
-
-    def sampledata
-        if block_given?
-            @@gooddata.each { |hash| yield hash }
-        else
-            return @@gooddata[0]
-        end
-    end
-
-    def test_readconfig
-        path = tempfile()
-
-        sampledata { |data|
-            config = Puppet::Util::Settings.new
-            data.each { |section, hash|
-                hash.each { |param, value|
-                    config.setdefaults(section, param => [value, value])
-                }
-            }
-            # Write it out as a config file
-            File.open(path, "w") { |f| f.print data2config(data) }
-            assert_nothing_raised {
-                config.parse(path)
-            }
-
-            data.each { |section, hash|
-                hash.each { |var, value|
-                    assert_equal(
-                        data[section][var],
-                        config[var],
-                        "Got different values at %s/%s" % [section, var]
-                    )
-                }
-            }
-        }
-    end
-
-    # Make sure that basic config generation works; this also ensures
-    # that the default config is free of simple typos etc.
-    def test_genconfig
-        assert_nothing_raised {
-            Puppet::settings::to_config
-        }
-    end
-
-end
-
diff --git a/test/puppet/defaults.rb b/test/puppet/defaults.rb
deleted file mode 100755
index 7befb9f..0000000
--- a/test/puppet/defaults.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-
-
-class TestPuppetDefaults < Test::Unit::TestCase
-    include PuppetTest
-    @@dirs = %w{rrddir confdir vardir logdir statedir}
-    @@files = %w{statefile manifest masterlog}
-    @@normals = %w{puppetport masterport server}
-    @@booleans = %w{rrdgraph noop}
-
-    def testVersion
-        assert( Puppet.version =~ /^[0-9]+(\.[0-9]+)*/, "got invalid version number %s" % Puppet.version )
-    end
-
-    def testStringOrParam
-        [@@dirs,@@files,@@booleans].flatten.each { |param|
-            assert_nothing_raised { Puppet[param] }
-            assert_nothing_raised { Puppet[param.intern] }
-        }
-    end
-
-    def test_valuesForEach
-        [@@dirs,@@files,@@booleans].flatten.each { |param|
-            param = param.intern
-            assert_nothing_raised { Puppet[param] }
-        }
-    end
-
-    def testValuesForEach
-        [@@dirs,@@files,@@booleans].flatten.each { |param|
-            assert_nothing_raised { Puppet[param] }
-        }
-    end
-
-    # we don't want user defaults in /, or root defaults in ~
-    def testDefaultsInCorrectRoots
-        notval = nil
-        if Puppet::Util::SUIDManager.uid == 0
-            notval = Regexp.new(File.expand_path("~"))
-        else
-            notval = /^\/var|^\/etc/
-        end
-        [@@dirs,@@files].flatten.each { |param|
-            value = Puppet[param]
-
-            unless value !~ notval
-                assert_nothing_raised { raise "%s is incorrectly set to %s" %
-                    [param,value] }
-            end
-        }
-    end
-
-    def test_settingdefaults
-        testvals = {
-            :fakeparam => "$confdir/yaytest",
-            :anotherparam => "$vardir/goodtest",
-            :string => "a yay string",
-            :boolean => true
-        }
-
-        testvals.each { |param, default|
-            assert_nothing_raised {
-                Puppet.setdefaults("testing", param => [default, "a value"])
-            }
-        }
-    end
-end
diff --git a/test/puppet/errortest.rb b/test/puppet/errortest.rb
deleted file mode 100755
index d998438..0000000
--- a/test/puppet/errortest.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-
-class TestError < Test::Unit::TestCase
-    include PuppetTest
-
-    def test_errorisstring
-        error = nil
-        assert_nothing_raised {
-            error = Puppet::ParseError.new("This is an error")
-        }
-        assert_instance_of(String, error.to_s)
-    end
-end
-
diff --git a/test/puppet/tc_suidmanager.rb b/test/puppet/tc_suidmanager.rb
deleted file mode 100755
index 08d957c..0000000
--- a/test/puppet/tc_suidmanager.rb
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-require 'test/unit'
-require 'mocha'
-
-class TestSUIDManager < Test::Unit::TestCase
-    include PuppetTest
-
-    def setup
-        @user = nonrootuser
-        super
-    end
-
-    def test_metaprogramming_function_additions
-        # NOTE: the way that we are dynamically generating the methods in
-        # SUIDManager for the UID/GID calls was causing problems due to the
-        # modification of a closure. Should the bug rear itself again, this
-        # test will fail.
-        Process.expects(:uid).times(2)
-
-        assert_nothing_raised do
-            Puppet::Util::SUIDManager.uid
-            Puppet::Util::SUIDManager.uid
-        end
-    end
-
-    def test_id_set
-        Process.expects(:euid=).with(@user.uid)
-        Process.expects(:egid=).with(@user.gid)
-
-        assert_nothing_raised do
-            Puppet::Util::SUIDManager.egid = @user.gid
-            Puppet::Util::SUIDManager.euid = @user.uid
-        end
-    end
-
-    def test_utiluid
-        assert_not_equal(nil, Puppet::Util.uid(@user.name))
-    end
-
-    def test_asuser_as_root
-        Process.stubs(:uid).returns(0)
-        expects_id_set_and_revert @user.uid, @user.gid
-        Puppet::Util::SUIDManager.asuser @user.uid, @user.gid do end
-    end
-
-    def test_asuser_as_nonroot
-        Process.stubs(:uid).returns(1)
-        expects_no_id_set
-        Puppet::Util::SUIDManager.asuser @user.uid, @user.gid do end
-    end
-
-
-    def test_system_as_root
-        Process.stubs(:uid).returns(0)
-        set_exit_status!
-        expects_id_set_and_revert @user.uid, @user.gid
-        Kernel.expects(:system).with('blah')
-        Puppet::Util::SUIDManager.system('blah', @user.uid, @user.gid)
-    end
-
-    def test_system_as_nonroot
-        Process.stubs(:uid).returns(1)
-        set_exit_status!
-        expects_no_id_set
-        Kernel.expects(:system).with('blah')
-        Puppet::Util::SUIDManager.system('blah', @user.uid, @user.gid)
-    end
-
-    def test_run_and_capture
-        if (RUBY_VERSION <=> "1.8.4") < 0
-            warn "Cannot run this test on ruby < 1.8.4"
-        else
-            set_exit_status!
-
-            Puppet::Util.expects(:execute).with( 'yay',
-                                                 { :failonfail => false,
-                                                   :uid => @user.uid,
-                                                   :gid => @user.gid }
-                                               ).returns('output')
-
-
-            output = Puppet::Util::SUIDManager.run_and_capture 'yay', 
-                                                               @user.uid,
-                                                               @user.gid
-
-            assert_equal 'output', output.first
-            assert_kind_of Process::Status, output.last
-        end
-    end
-
-    private
-
-    def expects_id_set_and_revert(uid, gid)
-        Process.expects(:euid).returns(99997)
-        Process.expects(:egid).returns(99996)
-
-        Process.expects(:euid=).with(uid)
-        Process.expects(:egid=).with(gid)
-
-        Process.expects(:euid=).with(99997)
-        Process.expects(:egid=).with(99996)
-    end
-
-    def expects_no_id_set
-        Process.expects(:egid).never
-        Process.expects(:euid).never
-        Process.expects(:egid=).never
-        Process.expects(:euid=).never
-    end
-
-    def set_exit_status!
-      # We want to make sure $? is set, this is the only way I know how.
-      Kernel.system '' if $?.nil?
-    end
-end
-
diff --git a/test/rails/ast.rb b/test/rails/ast.rb
deleted file mode 100755
index 1deaec0..0000000
--- a/test/rails/ast.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/rails'
-require 'puppet/parser/parser'
-require 'puppettest/resourcetesting'
-require 'puppettest/parsertesting'
-require 'puppettest/railstesting'
-require 'puppettest/support/collection'
-
-class TestRailsAST < PuppetTest::TestCase
-    confine "Missing rails" => Puppet.features.rails?
-    include PuppetTest::RailsTesting
-    include PuppetTest::ParserTesting
-    include PuppetTest::ResourceTesting
-    include PuppetTest::Support::Collection
-
-    def test_exported_collexp
-        railsinit
-        Puppet[:storeconfigs] = true
-
-        @scope = mkscope
-
-        # make a rails resource
-        railsresource "file", "/tmp/testing", :owner => "root", :group => "bin",
-            :mode => "644" 
-
-        run_collection_queries(:exported) do |string, result, query|
-            code = nil
-            str = nil
-
-            # We don't support more than one search criteria at the moment.
-            retval = nil
-            bad = false
-            # Figure out if the search is for anything rails will ignore
-            if string =~ /\band\b|\bor\b/
-                bad = true
-            else
-                bad = false
-            end
-
-            # And if it is, make sure we throw an error.
-            if bad
-                assert_raise(Puppet::ParseError, "Evaluated '#{string}'") do
-                    str, code = query.evaluate @scope
-                end
-                next
-            else
-                assert_nothing_raised("Could not evaluate '#{string}'") do
-                    str, code = query.evaluate @scope
-                end
-            end
-            assert_nothing_raised("Could not find resource") do
-                retval = Puppet::Rails::Resource.find(:all,
-                    :include => {:param_values => :param_name},
-                    :conditions => str) 
-            end
-
-            if result
-                assert_equal(1, retval.length, "Did not find resource with '#{string}'")
-                res = retval.shift
-
-                assert_equal("File", res.restype)
-                assert_equal("/tmp/testing", res.title)
-            else
-                assert_equal(0, retval.length, "found a resource with '#{string}'")
-            end
-        end
-    end
-end
-
diff --git a/test/rails/configuration.rb b/test/rails/configuration.rb
deleted file mode 100755
index a878d13..0000000
--- a/test/rails/configuration.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/parser/parser'
-require 'puppet/network/client'
-require 'puppet/rails'
-require 'puppettest/resourcetesting'
-require 'puppettest/parsertesting'
-require 'puppettest/servertest'
-require 'puppettest/railstesting'
-
-
-class ConfigurationRailsTests < PuppetTest::TestCase
-	include PuppetTest
-    include PuppetTest::ServerTest
-    include PuppetTest::ParserTesting
-    include PuppetTest::ResourceTesting
-    include PuppetTest::RailsTesting
-    AST = Puppet::Parser::AST
-    confine "No rails support" => Puppet.features.rails?
-
-    # We need to make sure finished objects are stored in the db.
-    def test_finish_before_store
-        railsinit
-        compile = mkcompiler
-        parser = compile.parser
-
-        node = parser.newnode [compile.node.name], :code => AST::ASTArray.new(:children => [
-            resourcedef("file", "/tmp/yay", :group => "root"),
-            defaultobj("file", :owner => "root")
-        ])
-
-        # Now do the rails crap
-        Puppet[:storeconfigs] = true
-
-        Puppet::Rails::Host.expects(:store).with do |node, resources|
-            if res = resources.find { |r| r.type == "File" and r.title == "/tmp/yay" }
-                assert_equal("root", res["owner"], "Did not set default on resource")
-                true
-            else
-                raise "Resource was not passed to store()"
-            end
-        end
-        compile.compile
-    end
-
-    def test_hoststorage
-        assert_nothing_raised {
-            Puppet[:storeconfigs] = true
-        }
-
-        Puppet[:code] = "file { \"/etc\": owner => root }"
-
-        interp = Puppet::Parser::Interpreter.new
-
-        facts = {}
-        Facter.each { |fact, val| facts[fact] = val }
-        node = mknode(facts["hostname"])
-        node.parameters = facts
-
-        objects = nil
-        assert_nothing_raised {
-            objects = interp.compile(node)
-        }
-
-        obj = Puppet::Rails::Host.find_by_name(node.name)
-        assert(obj, "Could not find host object")
-    end
-end
diff --git a/test/rails/host.rb b/test/rails/host.rb
deleted file mode 100755
index 79f0ae3..0000000
--- a/test/rails/host.rb
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/rails'
-require 'puppet/parser/interpreter'
-require 'puppet/parser/parser'
-require 'puppet/network/client'
-require 'puppettest'
-require 'puppettest/parsertesting'
-require 'puppettest/resourcetesting'
-require 'puppettest/railstesting'
-
-class TestRailsHost < PuppetTest::TestCase
-    confine "Missing ActiveRecord" => Puppet.features.rails?
-    include PuppetTest::ParserTesting
-    include PuppetTest::ResourceTesting
-    include PuppetTest::RailsTesting
-
-    def setup
-        super
-        railsinit if Puppet.features.rails?
-    end
-
-    def teardown
-        railsteardown if Puppet.features.rails?
-        super
-    end
-
-    def test_includerails
-        assert_nothing_raised {
-            require 'puppet/rails'
-        }
-    end
-
-    def test_store
-        @scope = mkscope
-        # First make some objects
-        resources = []
-        4.times { |i|
-            # Make a file
-            resources << mkresource(:type => "file",
-                :title => "/tmp/file#{i.to_s}",
-                :params => {:owner => "user#{i}"})
-
-            # And an exec, so we're checking multiple types
-            resources << mkresource(:type => "exec",
-                :title => "/bin/echo file#{i.to_s}",
-                :params => {:user => "user#{i}"})
-        }
-
-        # Now collect our facts
-        facts = {"hostname" => "myhost", "test1" => "funtest", "ipaddress" => "192.168.0.1"}
-
-        # Now try storing our crap
-        host = nil
-        node = mknode(facts["hostname"])
-        node.parameters = facts
-        assert_nothing_raised {
-            host = Puppet::Rails::Host.store(node, resources)
-        }
-
-        assert(host, "Did not create host")
-
-        host = nil
-        assert_nothing_raised {
-            host = Puppet::Rails::Host.find_by_name(facts["hostname"])
-        }
-        assert(host, "Could not find host object")
-
-        assert(host.resources, "No objects on host")
-
-        facts.each do |fact, value|
-            assert_equal(value, host.fact(fact)[0].value, "fact %s is wrong" % fact)
-        end
-        assert_equal(facts["ipaddress"], host.ip, "IP did not get set")
-
-        count = 0
-        host.resources.each do |resource|
-            assert_equal(host, resource.host)
-            count += 1
-            i = nil
-            if resource[:title] =~ /file([0-9]+)/
-                i = $1
-            else
-                raise "Got weird resource %s" % resource.inspect
-            end
-            assert(resource[:restype] != "", "Did not get a type from the resource")
-            case resource["restype"]
-            when "File":
-                assert_equal("user#{i}", resource.parameter("owner"),
-                    "got no owner for %s" % resource.ref)
-            when "Exec":
-                assert_equal("user#{i}", resource.parameter("user"),
-                    "got no user for %s" % resource.ref)
-            else
-                raise "Unknown type %s" % resource[:restype].inspect
-            end
-        end
-
-        assert_equal(8, count, "Did not get enough resources")
-
-        # Now remove a couple of resources
-        resources.reject! { |r| r.title =~ /file3/ }
-
-        # Change a few resources
-        resources.find_all { |r| r.title =~ /file2/ }.each do |r|
-            r.send(:set_parameter, "loglevel", "notice")
-        end
-
-        # And add a new resource
-        resources << mkresource(:type => "file",
-            :title => "/tmp/file_added",
-            :params => {:owner => "user_added"})
-
-        # And change some facts
-        facts["test2"] = "yaytest"
-        facts["test3"] = "funtest"
-        facts["test1"] = "changedfact"
-        facts.delete("ipaddress")
-        node = mknode(facts["hostname"])
-        node.parameters = facts
-        newhost = nil
-        assert_nothing_raised {
-            newhost = Puppet::Rails::Host.store(node, resources)
-        }
-
-        assert_equal(host.id, newhost.id, "Created new host instance)")
-
-        # Make sure it sets the last_compile time
-        assert_nothing_raised do
-            assert_instance_of(Time, host.last_compile, "did not set last_compile")
-        end
-
-        assert_equal(0, host.fact('ipaddress').size, "removed fact was not deleted")
-        facts.each do |fact, value|
-            assert_equal(value, host.fact(fact)[0].value, "fact %s is wrong" % fact)
-        end
-
-        # And check the changes we made.
-        assert(! host.resources.find(:all).detect { |r| r.title =~ /file3/ },
-            "Removed resources are still present")
-
-        res = host.resources.find_by_title("/tmp/file_added")
-        assert(res, "New resource was not added")
-        assert_equal("user_added", res.parameter("owner"), "user info was not stored")
-
-        host.resources.find(:all, :conditions => [ "title like ?", "%file2%"]).each do |r|
-            assert_equal("notice", r.parameter("loglevel"),
-                "loglevel was not added")
-        end
-    end
-end
diff --git a/test/rails/rails.rb b/test/rails/rails.rb
deleted file mode 100755
index c3b48b9..0000000
--- a/test/rails/rails.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/rails'
-require 'puppet/parser/interpreter'
-require 'puppet/parser/parser'
-require 'puppet/network/client'
-require 'puppettest'
-require 'puppettest/parsertesting'
-require 'puppettest/resourcetesting'
-require 'puppettest/railstesting'
-
-class TestRails < Test::Unit::TestCase
-    include PuppetTest::ParserTesting
-    include PuppetTest::ResourceTesting
-    include PuppetTest::RailsTesting
-
-    def test_includerails
-        assert_nothing_raised {
-            require 'puppet/rails'
-        }
-    end
-end
-
diff --git a/test/rails/railsparameter.rb b/test/rails/railsparameter.rb
deleted file mode 100755
index 7c99ac3..0000000
--- a/test/rails/railsparameter.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/rails'
-require 'puppettest'
-require 'puppettest/railstesting'
-
-# Don't do any tests w/out this class
-if defined? ActiveRecord::Base
-class TestRailsParameter < Test::Unit::TestCase
-    include PuppetTest::RailsTesting
-    
-    def params
-        {"myname" => "myval", "multiple" => %w{one two three}}
-    end
-
-    # Create a resource param from a rails parameter
-    def test_to_resourceparam
-        railsinit
-
-        # Now create a source
-        parser = mkparser
-        source = parser.newclass "myclass"
-
-        host = Puppet::Rails::Host.new(:name => "myhost")
-
-        host.save
-        
-        resource = host.resources.create(
-            :title => "/tmp/to_resource", 
-            :restype => "file",
-            :exported => true)
-
-        # Use array and non-array values, to make sure we get things back in
-        # the same form.
-        params.each do |name, value|
-            param = Puppet::Rails::ParamName.find_or_create_by_name(name)
-            if value.is_a? Array
-                values = value
-            else
-                values = [value]
-            end
-            valueobjects = values.collect do |v|
-                resource.param_values.create(:value => v,
-                                             :param_name => param)
-            end
-
-            assert(param, "Did not create rails parameter")
-
-            # The id doesn't get assigned until we save
-        end
-
-        resource.save
-
-        # And try to convert our parameter
-        params.each do |name, value|
-            param = Puppet::Rails::ParamName.find_by_name(name)
-            pp = nil
-            assert_nothing_raised do
-                pp = param.to_resourceparam(resource, source)
-            end
-
-            assert_instance_of(Puppet::Parser::Resource::Param, pp)
-            assert_equal(name.to_sym, pp.name, "parameter name was not equal")
-            assert_equal(value,  pp.value, "value was not equal for %s" % value.inspect)
-        end
-    end
-end
-else
-    $stderr.puts "Install Rails for Rails and Caching tests"
-end
-
diff --git a/test/rails/railsresource.rb b/test/rails/railsresource.rb
deleted file mode 100755
index 3df5001..0000000
--- a/test/rails/railsresource.rb
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/rails'
-require 'puppettest'
-require 'puppettest/railstesting'
-require 'puppettest/resourcetesting'
-require 'puppettest/parsertesting'
-
-# Don't do any tests w/out this class
-if Puppet.features.rails?
-class TestRailsResource < Test::Unit::TestCase
-    include PuppetTest::RailsTesting
-    include PuppetTest::ResourceTesting
-    include PuppetTest::ParserTesting
-
-    def setup
-        super
-        railsinit
-    end
-
-    def teardown
-        railsteardown
-        super
-    end
-
-    def mktest_resource
-        # We need a host for resources
-        host = Puppet::Rails::Host.new(:name => "myhost")
-        host.save
-
-        # Now build a resource
-        resource = host.resources.create(
-            :title => "/tmp/to_resource", 
-            :restype => "file",
-            :exported => true)
-
-        # Now add some params
-        params.each do |param, value|
-            pn = Puppet::Rails::ParamName.find_or_create_by_name(param)
-            pv = resource.param_values.create(:value => value,
-                                              :param_name => pn)
-        end
-
-        host.save
-
-        return resource
-    end
-    
-    def params
-        {"owner" => "root", "mode" => "644"}
-    end
-
-    # Create a resource param from a rails parameter
-    def test_to_resource
-        resource = mktest_resource
-
-        # We need a scope
-        scope = mkscope
-
-        # Find the new resource and include all it's parameters.
-        resource = Puppet::Rails::Resource.find_by_id(resource.id)
-
-        # Now, try to convert our resource to a real resource
-        res = nil
-        assert_nothing_raised do
-            res = resource.to_resource(scope)
-        end
-        assert_instance_of(Puppet::Parser::Resource, res)
-        assert_equal("root", res[:owner])
-        assert_equal("644", res[:mode])
-        assert_equal("/tmp/to_resource", res.title)
-        assert_equal(scope.source, res.source)
-    end
-
-    def test_parameters
-        resource = mktest_resource
-        setparams = nil
-        assert_nothing_raised do
-            setparams = resource.parameters.inject({}) { |h, a|
-                h[a[0]] = a[1][0]
-                h
-            }
-        end
-        assert_equal(params, setparams,
-            "Did not get the right answer from #parameters")
-    end
-
-    # Make sure we can retrieve individual parameters by name.
-    def test_parameter
-        resource = mktest_resource
-
-        params.each do |p,v|
-            assert_equal(v, resource.parameter(p), "%s is not correct" % p)
-        end
-    end
-end
-else
-    $stderr.puts "Install Rails for Rails and Caching tests"
-end
-
-# A separate class for testing rails integration
-class TestExportedResources < PuppetTest::TestCase
-	include PuppetTest
-    include PuppetTest::ParserTesting
-    include PuppetTest::ResourceTesting
-    include PuppetTest::RailsTesting
-    Parser = Puppet::Parser
-    AST = Parser::AST
-    Reference = Puppet::Parser::Resource::Reference
-
-    def setup
-        super
-        Puppet[:trace] = false
-        @scope = mkscope
-    end
-
-    confine "Missing rails support" => Puppet.features.rails?
-
-    # Compare a parser resource to a rails resource.
-    def compare_resources(host, res, updating, options = {})
-        newobj = nil
-
-        # If the resource is in the db, then use modify_rails, else use to_rails
-        if newobj = Puppet::Rails::Resource.find_by_restype_and_title(res.type, res.title)
-            assert_nothing_raised("Call to modify_rails failed") do
-                res.modify_rails(newobj)
-            end
-        else
-            assert_nothing_raised("Call to to_rails failed") do
-                newobj = res.to_rails(host)
-            end
-        end
-
-        assert_instance_of(Puppet::Rails::Resource, newobj)
-        newobj.save
-
-        if updating
-            tail = "on update"
-        else
-            tail = ""
-        end
-
-        # Make sure we find our object and only our object
-        count = 0
-        obj = nil
-        Puppet::Rails::Resource.find(:all).each do |obj|
-            assert_equal(newobj.id, obj.id, "A new resource was created instead of modifying an existing resource")
-            count += 1
-            [:title, :restype, :line, :exported].each do |param|
-                if param == :restype
-                    method = :type
-                else
-                    method = param
-                end
-                assert_equal(res.send(method), obj[param], 
-                    "attribute %s was not set correctly in rails %s" % [param, tail])
-            end
-        end
-        assert_equal(1, count, "Got too many resources %s" % tail)
-        # Now make sure we can find it again
-        assert_nothing_raised do
-            obj = Puppet::Rails::Resource.find_by_restype_and_title(
-                res.type, res.title, :include => :param_names
-            )
-        end
-        assert_instance_of(Puppet::Rails::Resource, obj)
-
-        # Make sure we get the parameters back
-        params = options[:params] || [obj.param_names.collect { |p| p.name },
-            res.to_hash.keys].flatten.collect { |n| n.to_s }.uniq
-
-        params.each do |name|
-            param = obj.param_names.find_by_name(name)
-            if res[name]
-                assert(param, "resource did not keep %s %s" % [name, tail])
-            else
-                assert(! param, "resource did not delete %s %s" % [name, tail])
-            end
-            if param
-                values = param.param_values.collect { |pv| pv.value }
-                should = res[param.name]
-                should = [should] unless should.is_a?(Array)
-                assert_equal(should, values,
-                    "%s was different %s" % [param.name, tail])
-            end
-        end
-
-        return obj
-    end
-
-    def test_to_rails
-        railsteardown
-        railsinit
-        ref1 = Reference.new :type => "exec", :title => "one"
-        ref2 = Reference.new :type => "exec", :title => "two"
-        res = mkresource :type => "file", :title => "/tmp/testing",
-            :source => @source, :scope => @scope,
-            :params => {:owner => "root", :source => ["/tmp/A", "/tmp/B"],
-                :mode => "755", :require => [ref1, ref2], :subscribe => ref1}
-
-        res.line = 50
-
-        # We also need a Rails Host to store under
-        host = Puppet::Rails::Host.new(:name => Facter.hostname)
-
-        railsres = compare_resources(host, res, false, :params => %w{owner source mode})
-
-        # Now make sure our parameters did not change
-        assert_instance_of(Array, res[:require], "Parameter array changed")
-        res[:require].each do |ref|
-            assert_instance_of(Reference, ref, "Resource reference changed")
-        end
-        assert_instance_of(Reference, res[:subscribe], "Resource reference changed")
-
-        # And make sure that the rails resource actually has resource references
-        params = railsres.parameters
-        [params["subscribe"], params["require"]].flatten.each do |ref|
-            assert_instance_of(Reference, ref, "Resource reference is no longer a reference")
-        end
-
-        # Now make some changes to our resource.  We're removing the mode,
-        # changing the source, and adding 'check'.
-        res = mkresource :type => "file", :title => "/tmp/testing",
-            :source => @source, :scope => @scope,
-            :params => {:owner => "bin", :source => ["/tmp/A", "/tmp/C"],
-            :check => "checksum",  :require => [ref1, ref2], :subscribe => ref2}
-
-        res.line = 75
-        res.exported = true
-
-        railsres = compare_resources(host, res, true, :params => %w{owner source mode check})
-
-        # Again make sure our parameters did not change
-        assert_instance_of(Array, res[:require], "Parameter array changed")
-        res[:require].each do |ref|
-            assert_instance_of(Reference, ref, "Resource reference changed")
-        end
-
-        # Again with the serialization checks
-        params = railsres.parameters
-        [params["subscribe"], params["require"]].flatten.each do |ref|
-            assert_instance_of(Reference, ref, "Resource reference is no longer a reference")
-        end
-
-    end
-end
-
-
diff --git a/test/ral/manager/attributes.rb b/test/ral/manager/attributes.rb
deleted file mode 100755
index e2a61f4..0000000
--- a/test/ral/manager/attributes.rb
+++ /dev/null
@@ -1,351 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2007-02-05.
-#  Copyright (c) 2007. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-
-class TestTypeAttributes < Test::Unit::TestCase
-    include PuppetTest
-
-    def mktype
-        type = Puppet::Type.newtype(:faketype) {}
-        cleanup { Puppet::Type.rmtype(:faketype) }
-        type
-    end
-
-    def test_bracket_methods
-        type = mktype
-
-        # make a namevar
-        type.newparam(:name) {}
-
-        # make a property
-        type.newproperty(:property) {}
-
-        # and a param
-        type.newparam(:param)
-
-        inst = type.create(:name => "yay")
-
-        # Make sure we can set each of them, including a metaparam
-        [:param, :property, :noop].each do |param|
-            assert_nothing_raised("Failed to set symbol") do
-                inst[param] = true
-            end
-
-            assert_nothing_raised("Failed to set string") do
-                inst[param.to_s] = true
-            end
-
-            if param == :property
-                assert(inst.property(param), "did not get obj for %s" % param)
-                assert_equal(true, inst.should(param),
-                    "should value did not get set")
-            else
-                assert_equal(true, inst[param],
-                             "did not get correct value for %s from symbol" % param)
-                assert_equal(true, inst[param.to_s],
-                             "did not get correct value for %s from string" % param)
-            end
-        end
-    end
-
-    def test_properties
-        type = mktype
-
-        # make a namevar
-        type.newparam(:name) {}
-
-        # make a couple of properties
-        props = [:one, :two, :three]
-        props.each do |prop|
-            type.newproperty(prop) {}
-        end
-
-        inst = type.create(:name => "yay")
-
-        inst[:one] = "boo"
-        one = inst.property(:one)
-        assert(one, "did not get obj for one")
-        assert_equal([one], inst.send(:properties), "got wrong properties")
-
-        inst[:three] = "rah"
-        three = inst.property(:three)
-        assert(three, "did not get obj for three")
-        assert_equal([one, three], inst.send(:properties), "got wrong properties")
-
-        inst[:two] = "whee"
-        two = inst.property(:two)
-        assert(two, "did not get obj for two")
-        assert_equal([one, two, three], inst.send(:properties), "got wrong properties")
-    end
-
-    def attr_check(type)
-        @num ||= 0
-        @num += 1
-        name = "name%s" % @num
-        inst = type.create(:name => name)
-        [:meta, :param, :prop].each do |name|
-            klass = type.attrclass(name)
-            assert(klass, "did not get class for %s" % name)
-            obj = yield inst, klass
-            assert_instance_of(klass, obj, "did not get object back")
-            assert_equal("value", inst.value(klass.name),
-                "value was not correct from value method")
-            assert_equal("value", obj.value, "value was not correct")
-        end
-    end
-
-    def test_newattr
-        type = mktype
-        type.newparam(:name) {}
-
-        # Make one of each param type
-        {
-            :meta => :newmetaparam, :param => :newparam, :prop => :newproperty
-        }.each do |name, method|
-            assert_nothing_raised("Could not make %s of type %s" % [name, method]) do
-                type.send(method, name) {}
-            end
-        end
-
-        # Now set each of them
-        attr_check(type) do |inst, klass|
-            inst.newattr(klass.name, :value => "value")
-        end
-
-        # Now try it passing the class in
-        attr_check(type) do |inst, klass|
-            inst.newattr(klass, :value => "value")
-        end
-
-        # Lastly, make sure we can create and then set, separately
-        attr_check(type) do |inst, klass|
-            obj = inst.newattr(klass.name)
-            assert_nothing_raised("Could not set value after creation") do
-                obj.value = "value"
-            end
-
-            # Make sure we can't create a new param object
-            assert_raise(Puppet::Error,
-                "Did not throw an error when replacing attr") do
-                    inst.newattr(klass.name, :value => "yay")
-            end
-            obj
-        end
-    end
-
-    def test_setdefaults
-        type = mktype
-        type.newparam(:name) {}
-        
-        # Make one of each param type
-        {
-            :meta2 => :newmetaparam, :param2 => :newparam, :prop2 => :newproperty
-        }.each do |name, method|
-            assert_nothing_raised("Could not make %s of type %s" % [name, method]) do
-                type.send(method, name) do
-                    defaultto "testing"
-                end
-            end
-        end
-
-        inst = type.create(:name => 'yay')
-        assert_nothing_raised do
-            inst.setdefaults
-        end
-
-        [:meta2, :param2, :prop2].each do |name|
-            assert(inst.value(name), "did not get a value for %s" % name)
-        end
-
-        # Try a default of "false"
-        type.newparam(:falsetest) do
-            defaultto false
-        end
-
-        assert_nothing_raised do
-            inst.setdefaults
-        end
-        assert_equal(false, inst[:falsetest], "false default was not set")
-    end
-
-    def test_alias_parameter
-        type = mktype
-        type.newparam(:name) {}
-        type.newparam(:one) {}
-        type.newproperty(:two) {}
-        
-        aliases = {
-            :three => :one,
-            :four => :two
-        }
-        aliases.each do |new, old|
-            assert_nothing_raised("Could not create alias parameter %s" % new) do
-                type.set_attr_alias new => old
-            end
-        end
-
-        aliases.each do |new, old|
-            assert_equal(old, type.attr_alias(new), "did not return alias info for %s" %
-                new)
-        end
-
-        assert_nil(type.attr_alias(:name), "got invalid alias info for name")
-
-        inst = type.create(:name => "my name")
-        assert(inst, "could not create instance")
-
-        aliases.each do |new, old|
-            val = "value %s" % new
-            assert_nothing_raised do
-                inst[new] = val
-            end
-
-            case old
-            when :one: # param
-                assert_equal(val, inst[new],
-                    "Incorrect alias value for %s in []" % new)
-            else
-                assert_equal(val, inst.should(new),
-                    "Incorrect alias value for %s in should" % new)
-            end
-            assert_equal(val, inst.value(new), "Incorrect alias value for %s" % new)
-            assert_equal(val, inst.value(old), "Incorrect orig value for %s" % old)
-        end
-    end
-
-    # Make sure eachattr is called in the parameter order.
-    def test_eachattr
-        type = mktype
-        name = type.newparam(:name) {}
-        one = type.newparam(:one) {}
-        two = type.newproperty(:two) {}
-        type.provide(:testing) {}
-        provider = type.attrclass(:provider)
-        should = [[name, :param], [provider, :param], [two, :property], [one, :param]]
-        assert_nothing_raised do
-            result = nil
-            type.eachattr do |obj, name|
-                result = [obj, name]
-                shouldary = should.shift
-                assert_equal(shouldary, result, "Did not get correct parameter")
-                break if should.empty?
-            end
-        end
-        assert(should.empty?, "Did not get all of the parameters.")
-    end
-
-    # Make sure newattr handles required features correctly.
-    def test_newattr_and_required_features
-        # Make a type with some features
-        type = mktype
-        type.feature :fone, "Something"
-        type.feature :ftwo, "Something else"
-        type.newparam(:name) {}
-
-        # Make three properties: one with no requirements, one with one, and one with two
-        none = type.newproperty(:none) {}
-        one = type.newproperty(:one, :required_features => :fone) {}
-        two = type.newproperty(:two, :required_features => [:fone, :ftwo]) {}
-
-        # Now make similar providers
-        nope = type.provide(:nope) {}
-        maybe = type.provide(:maybe) { has_feature :fone}
-        yep = type.provide(:yep) { has_features :fone, :ftwo}
-
-        attrs = [:none, :one, :two]
-
-        # Now make sure that we get warnings and no properties in those cases where our providers do not support the features requested
-        [nope, maybe, yep].each_with_index do |prov, i|
-            resource = type.create(:provider => prov.name, :name => "test%s" % i, :none => "a", :one => "b", :two => "c")
-
-            case prov.name
-            when :nope:
-                yes = [:none]
-                no = [:one, :two]
-            when :maybe:
-                yes = [:none, :one]
-                no = [:two]
-            when :yep:
-                yes = [:none, :one, :two]
-                no = []
-            end
-            yes.each { |a| assert(resource.should(a), "Did not get value for %s in %s" % [a, prov.name]) }
-            no.each do |a|
-                assert_nil(resource.should(a), "Got value for unsupported %s in %s" % [a, prov.name])
-                if Puppet::Util::Log.sendlevel?(:info)
-                    assert(@logs.find { |l| l.message =~ /not managing attribute #{a}/ and l.level == :info }, "No warning about failed %s" % a)
-                end
-            end
-
-            @logs.clear
-        end
-    end
-
-    # Make sure the 'check' metaparam just ignores non-properties, rather than failing.
-    def test_check_allows_parameters
-        file = Puppet::Type.type(:file)
-        klass = file.attrclass(:check)
-
-        resource = file.create(:path => tempfile)
-        inst = klass.new(:resource => resource)
-
-        {:property => [:owner, :group], :parameter => [:ignore, :recurse], :metaparam => [:require, :subscribe]}.each do |attrtype, attrs|
-            assert_nothing_raised("Could not set check to a single %s value" % attrtype) do
-                inst.value = attrs[0]
-            end
-
-            if attrtype == :property
-                assert(resource.property(attrs[0]), "Check did not create property instance during single check")
-            end
-            assert_nothing_raised("Could not set check to multiple %s values" % attrtype) do
-                inst.value = attrs
-            end
-            if attrtype == :property
-                assert(resource.property(attrs[1]), "Check did not create property instance during multiple check")
-            end
-        end
-
-        # But make sure actually invalid attributes fail
-        assert_raise(Puppet::Error, ":check did not fail on invalid attribute") do
-            inst.value = :nosuchattr
-        end
-    end
-
-    def test_check_ignores_unsupported_params
-        type = Puppet::Type.newtype(:unsupported) do
-            feature :nosuchfeat, "testing"
-            newparam(:name) {}
-            newproperty(:yep) {}
-            newproperty(:nope,  :required_features => :nosuchfeat) {}
-        end
-        $yep = :absent
-        type.provide(:only) do
-            def self.supports_parameter?(param)
-                if param.name == :nope
-                    return false
-                else
-                    return true
-                end
-            end
-
-            def yep
-                $yep
-            end
-            def yep=(v)
-                $yep = v
-            end
-        end
-        cleanup { Puppet::Type.rmtype(:unsupported) }
-
-        obj = type.create(:name => "test", :check => :yep)
-        obj.expects(:newattr).with(:nope).never
-        obj[:check] = :all
-    end
-end
-
diff --git a/test/ral/manager/instances.rb b/test/ral/manager/instances.rb
deleted file mode 100755
index a50ecb2..0000000
--- a/test/ral/manager/instances.rb
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2007-06-10.
-#  Copyright (c) 2007. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-class TestTypeInstances < Test::Unit::TestCase
-    include PuppetTest
-
-    def setup
-        super
-        @type = Puppet::Type.newtype(:instance_test) do
-            newparam(:name) {}
-            ensurable
-        end
-        cleanup { Puppet::Type.rmtype(:instance_test) }
-    end
-
-    # Make sure the instances class method works as expected.
-    def test_instances
-        # First make sure it throws an error when there are no providers
-        assert_raise(Puppet::DevError, "Did not fail when no providers are present") do
-            @type.instances
-        end
-
-        # Now add a couple of providers
-
-        # The default
-        @type.provide(:default) do
-            defaultfor :operatingsystem => Facter.value(:operatingsystem)
-            mk_resource_methods
-            class << self
-                attr_accessor :names
-            end
-            def self.instance(name)
-                new(:name => name, :ensure => :present)
-            end
-            def self.instances
-                @instances ||= names.collect { |name| instance(name) }
-                @instances
-            end
-
-            @names = [:one, :five, :six]
-        end
-
-        # A provider with the same source
-        @type.provide(:sub, :source => :default, :parent => :default) do
-            @names = [:two, :seven, :eight]
-        end
-
-        # An unsuitable provider
-        @type.provide(:nope, :parent => :default) do
-            confine :exists => "/no/such/file"
-            @names = [:three, :nine, :ten]
-        end
-
-        # Another suitable, non-default provider
-        @type.provide(:yep, :parent => :default) do
-            @names = [:four, :seven, :ten]
-        end
-
-        # Now make a couple of instances, so we know we correctly match instead of always
-        # trying to create new ones.
-        one = @type.create(:name => :one, :ensure => :present)
-        three = @type.create(:name => :three, :ensure => :present, :provider => :sub)
-        five = @type.create(:name => :five, :ensure => :present, :provider => :yep)
-
-        result = nil
-        assert_nothing_raised("Could not get instance list") do
-            result = @type.instances
-        end
-
-        result.each do |resource|
-            assert_instance_of(@type, resource, "Returned non-resource")
-        end
-
-        assert_equal(:one, result[0].name, "Did not get default instances first")
-
-        resources = result.inject({}) { |hash, res| hash[res.name] = res; hash }
-        assert(resources.include?(:four), "Did not get resources from other suitable providers")
-        assert(! resources.include?(:three), "Got resources from unsuitable providers")
-
-        # Now make sure we didn't change the provider type for :five
-        assert_equal(:yep, five.provider.class.name, "Changed provider type when listing resources")
-
-        # Now make sure the resources have an 'ensure' property to go with the value in the provider
-        assert(resources[:one].send(:instance_variable_get, "@parameters").include?(:ensure), "Did not create ensure property")
-    end
-
-    # Make sure resources are entirely deleted.
-    def test_delete
-        aliases = %w{one}
-        catalog = mk_catalog
-        obj = @type.create(:name => "testing", :alias => "two", :catalog => catalog)
-        aliases << "two"
-
-        @type.alias("two", obj)
-
-        obj.remove
-        assert_nil(@type["testing"], "Object was not removed from objects hash")
-        assert_nil(@type["one"], "Object's alias was not removed")
-        assert_nil(@type["two"], "Object's second alias was not removed")
-
-    end
-end
-
diff --git a/test/ral/manager/manager.rb b/test/ral/manager/manager.rb
deleted file mode 100755
index 8f7e74d..0000000
--- a/test/ral/manager/manager.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2006-11-29.
-#  Copyright (c) 2006. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-class TestTypeManager < Test::Unit::TestCase
-    include PuppetTest
-    
-    class FakeManager
-        extend Puppet::MetaType::Manager
-        def self.clear
-            @types = {}
-        end
-    end
-    
-    def teardown
-        super
-        FakeManager.clear
-    end
-    
-    # Make sure we can remove defined types
-    def test_rmtype
-        assert_nothing_raised {
-            FakeManager.newtype :testing do
-                newparam(:name, :namevar => true)
-            end
-        }
-        assert(FakeManager.type(:testing), "Did not get fake type")
-        
-        assert_nothing_raised do
-            FakeManager.rmtype(:testing)
-        end
-        
-        assert_nil(FakeManager.type(:testing), "Type was not removed")
-        assert(! defined?(FakeManager::Testing), "Constant was not removed")
-    end
-    
-    def test_newtype
-        assert_nothing_raised do
-            FakeManager.newtype(:testing, :self_refresh => true) do
-                newparam(:name, :namevar => true)
-            end
-        end
-        
-        test = FakeManager.type(:testing)
-        assert(test, "did not get type")
-        assert(test.self_refresh, "did not set attribute")
-    end
-end
-
diff --git a/test/ral/manager/provider.rb b/test/ral/manager/provider.rb
deleted file mode 100755
index 89aa49b..0000000
--- a/test/ral/manager/provider.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-
-class TestTypeProviders < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @type = Puppet::Type.newtype(:provider_test) do
-            newparam(:name) {}
-            ensurable
-        end
-        cleanup { Puppet::Type.rmtype(:provider_test) }
-    end
-
-    # Make sure default providers behave correctly
-    def test_defaultproviders
-        basic = @type.provide(:basic) do
-            defaultfor :operatingsystem => :somethingelse,
-                :operatingsystemrelease => :yayness
-        end
-
-        assert_equal(basic, @type.defaultprovider)
-        @type.defaultprovider = nil
-
-        greater = @type.provide(:greater) do
-            defaultfor :operatingsystem => Facter.value("operatingsystem")
-        end
-
-        assert_equal(greater, @type.defaultprovider)
-    end
-
-    # Make sure the provider is always the first parameter created.
-    def test_provider_sorting
-        should = [:name, :ensure]
-        assert_equal(should, @type.allattrs.reject { |p| ! should.include?(p) },
-            "Got wrong order of parameters")
-
-        @type.provide(:yay) { }
-        should = [:name, :provider, :ensure]
-        assert_equal(should, @type.allattrs.reject { |p| ! should.include?(p) },
-            "Providify did not reorder parameters")
-    end
-
-    # Make sure that provider instances can be passed in directly.
-    def test_name_or_provider
-        provider = @type.provide(:testing) do
-        end
-
-        # first make sure we can pass the name in
-        resource = nil
-        assert_nothing_raised("Could not create provider instance by name") do
-            resource = @type.create :name => "yay", :provider => :testing
-        end
-
-        assert_instance_of(provider, resource.provider, "Did not create provider instance")
-
-        # Now make sure we can pass in an instance
-        provinst = provider.new(:name => "foo")
-        assert_nothing_raised("Could not pass in provider instance") do
-            resource = @type.create :name => "foo", :provider => provinst
-        end
-
-        assert_equal(provinst, resource.provider, "Did not retain provider instance")
-        assert_equal(provider.name, resource[:provider], "Provider value was set to the provider instead of its name")
-
-        # Now make sure unsuitable provider instances still throw errors
-        provider = @type.provide(:badprov) do
-            confine :exists => "/no/such/file"
-        end
-
-        # And make sure the provider must be a valid provider type for this resource
-        pkgprov = Puppet::Type.type(:package).create(:name => "yayness").provider
-        assert(provider, "did not get package provider")
-
-        assert_raise(Puppet::Error, "Did not fail on invalid provider instance") do
-            resource = @type.create :name => "bar", :provider => pkgprov
-        end
-
-    end
-
-    # #571 -- so we can cause a provider to become suitable within
-    # a run.
-    def test_unsuitable_providers_should_not_fail_at_initialization
-        Puppet::Type.type(:user).provider(:useradd).stubs(:suitable?).returns false
-
-        assert_nothing_raised("Unsuitable providers failed at initialization") do
-            Puppet::Type.type(:user).create :name => "luke", :ensure => :present, :provider => :useradd
-        end
-    end
-
-    # #571 -- so we can cause a provider to become suitable within
-    # a run.
-    def test_unsuitable_providers_should_fail_at_evaluation
-        Puppet::Type.type(:user).provider(:useradd).stubs(:suitable?).returns false
-
-        user = Puppet::Type.type(:user).create :name => "luke", :ensure => :present, :provider => :useradd
-        assert_raise(Puppet::Error, "Unsuitable provider did not fail at evaluation") do
-            user.evaluate
-        end
-    end
-end
-
diff --git a/test/ral/manager/type.rb b/test/ral/manager/type.rb
deleted file mode 100755
index c6efe4f..0000000
--- a/test/ral/manager/type.rb
+++ /dev/null
@@ -1,800 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-
-class TestType < Test::Unit::TestCase
-	include PuppetTest
-    def test_typemethods
-        Puppet::Type.eachtype { |type|
-            name = nil
-            assert_nothing_raised("Searching for name for %s caused failure" %
-                type.to_s) {
-                    name = type.name
-            }
-
-            assert(name, "Could not find name for %s" % type.to_s)
-
-            assert_equal(
-                type,
-                Puppet::Type.type(name),
-                "Failed to retrieve %s by name" % name
-            )
-
-            # Skip types with no parameters or valid properties
-            #unless ! type.parameters.empty? or ! type.validproperties.empty?
-            #    next
-            #end
-
-            assert_nothing_raised {
-                assert(
-                    type.namevar,
-                    "Failed to retrieve namevar for %s" % name
-                )
-
-                assert_not_nil(
-                    type.properties,
-                    "Properties for %s are nil" % name
-                )
-
-                assert_not_nil(
-                    type.validproperties,
-                    "Valid properties for %s are nil" % name
-                )
-            }
-        }
-    end
-
-    def test_stringvssymbols
-        file = nil
-        path = tempfile()
-        assert_nothing_raised() {
-            system("rm -f %s" % path)
-            file = Puppet.type(:file).create(
-                :path => path,
-                :ensure => "file",
-                :recurse => true,
-                :checksum => "md5"
-            )
-        }
-        assert_nothing_raised() {
-            file.retrieve
-        }
-        assert_nothing_raised() {
-            file.evaluate
-        }
-        Puppet.type(:file).clear
-        assert_nothing_raised() {
-            system("rm -f %s" % path)
-            file = Puppet.type(:file).create(
-                "path" => path,
-                "ensure" => "file",
-                "recurse" => true,
-                "checksum" => "md5"
-            )
-        }
-        assert_nothing_raised() {
-            file.retrieve
-        }
-        assert_nothing_raised() {
-            file[:path]
-        }
-        assert_nothing_raised() {
-            file["path"]
-        }
-        assert_nothing_raised() {
-            file[:recurse]
-        }
-        assert_nothing_raised() {
-            file["recurse"]
-        }
-        assert_nothing_raised() {
-            file.evaluate
-        }
-    end
-
-    # This was supposed to test objects whose name was a property, but that
-    # fundamentally doesn't make much sense, and we now don't have any such
-    # types.
-    def disabled_test_nameasproperty
-        # currently groups are the only objects with the namevar as a property
-        group = nil
-        assert_nothing_raised {
-            group = Puppet.type(:group).create(
-                :name => "testing"
-            )
-        }
-
-        assert_equal("testing", group.name, "Could not retrieve name")
-    end
-
-    # Verify that values get merged correctly
-    def test_mergepropertyvalues
-        file = tempfile()
-
-        # Create the first version
-        assert_nothing_raised {
-            Puppet.type(:file).create(
-                :path => file,
-                :owner => ["root", "bin"]
-            )
-        }
-
-        # Make sure no other statements are allowed
-        assert_raise(Puppet::Error) {
-            Puppet.type(:file).create(
-                :path => file,
-                :group => "root"
-            )
-        }
-    end
-
-    def test_aliases_to_self_are_not_failures
-        resource = Puppet.type(:file).create(
-            :name => "/path/to/some/missing/file",
-            :ensure => "file"
-        )
-        resource.stubs(:path).returns("")
-
-        catalog = stub 'catalog'
-        catalog.expects(:resource).with(:file, "/path/to/some/missing/file").returns(resource)
-        resource.catalog = catalog
-
-        # Verify our adding ourselves as an alias isn't an error.
-        assert_nothing_raised("Could not add alias") {
-            resource[:alias] = "/path/to/some/missing/file"
-        }
-
-        assert_equal(resource.object_id, Puppet.type(:file)["/path/to/some/missing/file"].object_id, "Could not retrieve alias to self")
-    end
-
-    def test_aliases_are_added_to_class_and_catalog
-        resource = Puppet.type(:file).create(
-            :name => "/path/to/some/missing/file",
-            :ensure => "file"
-        )
-        resource.stubs(:path).returns("")
-
-        catalog = stub 'catalog'
-        catalog.stubs(:resource).returns(nil)
-        catalog.expects(:alias).with(resource, "funtest")
-        resource.catalog = catalog
-
-        assert_nothing_raised("Could not add alias") {
-            resource[:alias] = "funtest"
-        }
-
-        assert_equal(resource.object_id, Puppet.type(:file)["funtest"].object_id, "Could not retrieve alias")
-    end
-
-    def test_aliasing_fails_without_a_catalog
-        resource = Puppet.type(:file).create(
-            :name => "/no/such/file",
-            :ensure => "file"
-        )
-
-        assert_raise(Puppet::Error, "Did not fail to alias when no catalog was available") {
-            resource[:alias] = "funtest"
-        }
-    end
-
-    def test_catalogs_are_set_during_initialization_if_present_on_the_transobject
-        trans = Puppet::TransObject.new("/path/to/some/file", :file)
-        trans.catalog = :my_config
-        resource = trans.to_type
-        assert_equal(resource.catalog, trans.catalog, "Did not set catalog on initialization")
-    end
-
-    # Verify that requirements don't depend on file order
-    def test_prereqorder
-        one = tempfile()
-        two = tempfile()
-
-        twoobj = nil
-        oneobj = nil
-        assert_nothing_raised("Could not create prereq that doesn't exist yet") {
-            twoobj = Puppet.type(:file).create(
-                :name => two,
-                :require => [:file, one]
-            )
-        }
-
-        assert_nothing_raised {
-            oneobj = Puppet.type(:file).create(
-                :name => one
-            )
-        }
-
-        comp = mk_catalog(twoobj, oneobj)
-
-        assert_nothing_raised {
-            comp.finalize
-        }
-
-
-        assert(twoobj.requires?(oneobj), "Requirement was not created")
-    end
-
-    # Verify that names are aliases, not equivalents
-    def test_nameasalias
-        file = nil
-        # Create the parent dir, so we make sure autorequiring the parent dir works
-        parentdir = tempfile()
-        dir = Puppet.type(:file).create(
-            :name => parentdir,
-            :ensure => "directory"
-        )
-        assert_apply(dir)
-        path = File.join(parentdir, "subdir")
-        name = "a test file"
-        transport = Puppet::TransObject.new(name, "file")
-        transport[:path] = path
-        transport[:ensure] = "file"
-        assert_nothing_raised {
-            file = transport.to_type
-        }
-
-        assert_equal(path, file[:path])
-        assert_equal(name, file.title)
-
-        assert_nothing_raised {
-            file.retrieve
-        }
-
-        assert_apply(file)
-
-        assert(Puppet.type(:file)[name], "Could not look up object by name")
-    end
-
-    def test_ensuredefault
-        user = nil
-        assert_nothing_raised {
-            user = Puppet.type(:user).create(
-                :name => "pptestAA",
-                :check => [:uid]
-            )
-        }
-
-        # make sure we don't get :ensure for unmanaged files
-        assert(! user.property(:ensure), "User got an ensure property")
-
-        assert_nothing_raised {
-            user = Puppet.type(:user).create(
-                :name => "pptestAB",
-                :comment => "Testingness"
-            )
-        }
-        # but make sure it gets added once we manage them
-        assert(user.property(:ensure), "User did not add ensure property")
-
-        assert_nothing_raised {
-            user = Puppet.type(:user).create(
-                :name => "pptestBC",
-                :comment => "A fake user"
-            )
-        }
-
-        # and make sure managed objects start with them
-        assert(user.property(:ensure), "User did not get an ensure property")
-    end
-    def test_newtype_methods
-        assert_nothing_raised {
-            Puppet::Type.newtype(:mytype) do
-                newparam(:wow) do isnamevar end
-            end
-        }
-
-        assert(Puppet::Type.respond_to?(:newmytype),
-            "new<type> method did not get created")
-
-        obj = nil
-        assert_nothing_raised {
-            obj = Puppet::Type.newmytype(:wow => "yay")
-        }
-
-        assert(obj.is_a?(Puppet::Type.type(:mytype)),
-            "Obj is not the correct type")
-
-        # Now make the type again, just to make sure it works on refreshing.
-        assert_nothing_raised {
-            Puppet::Type.newtype(:mytype) do
-                newparam(:yay) do isnamevar end
-            end
-        }
-
-        obj = nil
-        # Make sure the old class was thrown away and only the new one is sitting
-        # around.
-        assert_raise(Puppet::Error) {
-            obj = Puppet::Type.newmytype(:wow => "yay")
-        }
-        assert_nothing_raised {
-            obj = Puppet::Type.newmytype(:yay => "yay")
-        }
-
-        # Now make sure that we don't replace existing, non-type methods
-        parammethod = Puppet::Type.method(:newparam)
-
-        assert_nothing_raised {
-            Puppet::Type.newtype(:param) do
-                newparam(:rah) do isnamevar end
-            end
-        }
-        assert_equal(parammethod, Puppet::Type.method(:newparam),
-            "newparam method got replaced by newtype")
-    end
-
-    def test_newproperty_options
-        # Create a type with a fake provider
-        providerclass = Class.new do
-            def self.supports_parameter?(prop)
-                return true
-            end
-            def method_missing(method, *args)
-                return method
-            end
-        end
-        self.class.const_set("ProviderClass", providerclass)
-
-        type = Puppet::Type.newtype(:mytype) do
-            newparam(:name) do
-                isnamevar
-            end
-            def provider
-                @provider ||= ProviderClass.new
-
-                @provider
-            end
-        end
-
-        # Now make a property with no options.
-        property = nil
-        assert_nothing_raised do
-            property = type.newproperty(:noopts) do
-            end
-        end
-
-        # Now create an instance
-        obj = type.create(:name => :myobj)
-
-        inst = property.new(:resource => obj)
-
-        # And make sure it's correctly setting @is
-        ret = nil
-        assert_nothing_raised {
-            ret = inst.retrieve
-        }
-
-        assert_equal(:noopts, inst.retrieve)
-
-        # Now create a property with a different way of doing it
-        property = nil
-        assert_nothing_raised do
-            property = type.newproperty(:setretrieve, :retrieve => :yayness)
-        end
-
-        inst = property.new(:resource => obj)
-
-        # And make sure it's correctly setting @is
-        ret = nil
-        assert_nothing_raised {
-            ret = inst.retrieve
-        }
-
-        assert_equal(:yayness, ret)
-    end
-
-    def test_name_vs_title
-        path = tempfile()
-
-        trans = nil
-
-        assert_nothing_raised {
-            trans = Puppet::TransObject.new(path, :file)
-        }
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet::Type.newfile(trans)
-        }
-
-        assert(file.respond_to?(:title),
-            "No 'title' method")
-
-        assert(file.respond_to?(:name),
-            "No 'name' method")
-
-        assert_equal(file.title, file.name,
-            "Name and title were not marked equal")
-
-        assert_nothing_raised {
-            file.title = "My file"
-        }
-
-        assert_equal("My file", file.title)
-        assert_equal(path, file.name)
-    end
-
-    # Make sure the title is sufficiently differentiated from the namevar.
-    def test_title_at_creation_with_hash
-        file = nil
-        fileclass = Puppet::Type.type(:file) 
-
-        path = tempfile()
-        assert_nothing_raised do
-            file = fileclass.create(
-                :title => "Myfile",
-                :path => path
-            )
-        end
-
-        assert_equal("Myfile", file.title, "Did not get correct title")
-        assert_equal(path, file[:name], "Did not get correct name")
-
-        file = nil
-        Puppet::Type.type(:file).clear
-
-        # Now make sure we can specify both and still get the right answers
-        assert_nothing_raised do
-            file = fileclass.create(
-                :title => "Myfile",
-                :name => path
-            )
-        end
-
-        assert_instance_of(fileclass, file)
-
-        assert_equal("Myfile", file.title, "Did not get correct title")
-        assert_equal(path, file[:name], "Did not get correct name")
-    end
-
-    # Make sure the "create" class method behaves appropriately.
-    def test_class_create
-        title = "Myfile"
-        validate = proc do |element|
-            assert(element, "Did not create file")
-            assert_instance_of(Puppet::Type.type(:file), element)
-            assert_equal(title, element.title, "Title is not correct")
-        end
-        type = :file
-        args = {:path => tempfile(), :owner => "root"}
-
-        trans = Puppet::TransObject.new(title, type)
-        args.each do |name, val| trans[name] = val end
-
-        # First call it on the appropriate typeclass
-        obj = nil
-        assert_nothing_raised do
-            obj = Puppet::Type.type(:file).create(trans)
-        end
-
-        validate.call(obj)
-
-        # Now try it using the class method on Type
-        oldid = obj.object_id
-        obj = nil
-        Puppet::Type.type(:file).clear
-
-        assert_nothing_raised {
-            obj = Puppet::Type.create(trans)
-        }
-
-        validate.call(obj)
-        assert(oldid != obj.object_id, "Got same object back")
-
-        # Now try the same things with hashes instead of a transobject
-        oldid = obj.object_id
-        obj = nil
-        Puppet::Type.type(:file).clear
-        hash = {
-            :type => :file,
-            :title => "Myfile",
-            :path => tempfile(),
-            :owner => "root"
-        }
-
-        # First call it on the appropriate typeclass
-        obj = nil
-        assert_nothing_raised do
-            obj = Puppet::Type.type(:file).create(hash)
-        end
-
-        validate.call(obj)
-        assert_equal(:file, obj.should(:type),
-            "Type param did not pass through")
-
-        assert(oldid != obj.object_id, "Got same object back")
-
-        # Now try it using the class method on Type
-        oldid = obj.object_id
-        obj = nil
-        Puppet::Type.type(:file).clear
-
-        assert_nothing_raised {
-            obj = Puppet::Type.create(hash)
-        }
-
-        validate.call(obj)
-        assert(oldid != obj.object_id, "Got same object back")
-        assert_nil(obj.should(:type),
-            "Type param passed through")
-    end
-
-    def test_multiplenames
-        obj = nil
-        path = tempfile()
-        assert_raise ArgumentError do
-            obj = Puppet::Type.type(:file).create(
-                :name => path,
-                :path => path
-            )
-        end
-    end
-
-    def test_title_and_name
-        obj = nil
-        path = tempfile()
-        fileobj = Puppet::Type.type(:file)
-
-        assert_nothing_raised do
-            obj = fileobj.create(
-                :title => "myfile",
-                :path => path
-            )
-        end
-
-        assert_equal(obj, fileobj["myfile"],
-            "Could not retrieve obj by title")
-
-        assert_equal(obj, fileobj[path],
-            "Could not retrieve obj by name")
-    end
-
-    # Make sure default providers behave correctly
-    def test_defaultproviders
-        # Make a fake type
-        type = Puppet::Type.newtype(:defaultprovidertest) do
-            newparam(:name) do end
-        end
-
-        basic = type.provide(:basic) do
-            defaultfor :operatingsystem => :somethingelse,
-                :operatingsystemrelease => :yayness
-        end
-
-        assert_equal(basic, type.defaultprovider)
-        type.defaultprovider = nil
-
-        greater = type.provide(:greater) do
-            defaultfor :operatingsystem => Facter.value("operatingsystem")
-        end
-
-        assert_equal(greater, type.defaultprovider)
-    end
-
-    # Make sure that we can have multiple non-isomorphic objects with the same name,
-    # but not with isomorphic objects.
-    def test_isomorphic_names
-        # First do execs, since they're not isomorphic.
-        echo = Puppet::Util.binary "echo"
-        exec1 = exec2 = nil
-        assert_nothing_raised do
-            exec1 = Puppet::Type.type(:exec).create(
-                :title => "exec1",
-                :command => "#{echo} funtest"
-            )
-        end
-        assert_nothing_raised do
-            exec2 = Puppet::Type.type(:exec).create(
-                :title => "exec2",
-                :command => "#{echo} funtest"
-            )
-        end
-
-        assert_apply(exec1, exec2)
-
-        # Now do files, since they are. This should fail.
-        file1 = file2 = nil
-        path = tempfile()
-        assert_nothing_raised do
-            file1 = Puppet::Type.type(:file).create(
-                :title => "file1",
-                :path => path,
-                :content => "yayness"
-            )
-        end
-
-        # This will fail, but earlier systems will catch it.
-        assert_raise(Puppet::Error) do
-            file2 = Puppet::Type.type(:file).create(
-                :title => "file2",
-                :path => path,
-                :content => "rahness"
-            )
-        end
-
-        assert(file1, "Did not create first file")
-        assert_nil(file2, "Incorrectly created second file")
-    end
-
-    def test_tags
-        obj = Puppet::Type.type(:file).create(:path => tempfile())
-
-        tags = [:some, :test, :tags]
-
-        obj.tags = tags
-
-        assert_equal(tags + [:file], obj.tags)
-    end
-
-    def disabled_test_list
-        Puppet::Type.loadall
-
-        Puppet::Type.eachtype do |type|
-            next if type.name == :symlink
-            next if type.name == :component
-            next if type.name == :tidy
-            assert(type.respond_to?(:list), "%s does not respond to list" % type.name)
-        end
-    end
-
-    def test_to_hash
-        file = Puppet::Type.newfile :path => tempfile(), :owner => "luke",
-            :recurse => true, :loglevel => "warning"
-
-        hash = nil
-        assert_nothing_raised do
-            hash = file.to_hash
-        end
-
-        [:path, :owner, :recurse, :loglevel].each do |param|
-            assert(hash[param], "Hash did not include %s" % param)
-        end
-    end
-
-    # Make sure that classes behave like hashes.
-    def test_class_hash_behaviour
-        path = tempfile()
-
-        filetype = Puppet::Type.type(:file)
-        one = Puppet::Type.newfile :path => path
-
-        assert_equal(one, filetype[path], "Did not get file back")
-
-        assert_raise(Puppet::Error) do
-            filetype[path] = one
-        end
-    end
-
-    def test_ref
-        path = tempfile()
-        Puppet::Type.type(:exec) # uggh, the methods need to load the types
-        file = Puppet::Type.newfile(:path => path)
-        assert_equal("File[#{path}]", file.ref)
-
-        exec = Puppet::Type.newexec(:title => "yay", :command => "/bin/echo yay")
-        assert_equal("Exec[yay]", exec.ref)
-    end
-    
-    def test_path
-        config = mk_catalog
-
-        # Check that our paths are built correctly.  Just pick a random, "normal" type.
-        type = Puppet::Type.type(:exec)
-        mk = Proc.new do |i, hash|
-            hash[:title] = "exec%s" % i
-            hash[:command] = "/bin/echo"
-            if parent = hash[:parent]
-                hash.delete(:parent)
-            end
-            res = type.create(hash)
-            config.add_resource res
-            if parent
-                config.add_edge(parent, res)
-            end
-            res
-        end
-        
-        exec = mk.call(1, {})
-        
-        assert_equal("/Exec[exec1]", exec.path)
-        
-        comp = Puppet::Type.newcomponent :title => "My[component]", :type => "Yay"
-        config.add_resource comp
-        
-        exec = mk.call(2, :parent => comp)
-        
-        assert_equal("/My[component]/Exec[exec2]", exec.path)
-        
-        comp = Puppet::Type.newcomponent :name => "Other[thing]"
-        config.add_resource comp
-        exec = mk.call(3, :parent => comp)
-        assert_equal("/Other[thing]/Exec[exec3]", exec.path)
-        
-        comp = Puppet::Type.newcomponent :type => "server", :name => "server"
-        config.add_resource comp
-        exec = mk.call(4, :parent => comp)
-        assert_equal("/server/Exec[exec4]", exec.path)
-        
-        comp = Puppet::Type.newcomponent :type => "whatever", :name => "class[main]"
-        config.add_resource comp
-        exec = mk.call(5, :parent => comp)
-        assert_equal("//Exec[exec5]", exec.path)
-        
-        newcomp = Puppet::Type.newcomponent :type => "yay", :name => "Good[bad]"
-        config.add_resource newcomp
-        config.add_edge comp, newcomp
-        exec = mk.call(6, :parent => newcomp)
-        assert_equal("//Good[bad]/Exec[exec6]", exec.path)
-    end
-
-    def test_evaluate
-        faketype = Puppet::Type.newtype(:faketype) do
-            newparam(:name) {}
-        end
-        cleanup { Puppet::Type.rmtype(:faketype) }
-        faketype.provide(:fake) do
-            def prefetch
-            end
-        end
-
-        obj = faketype.create :name => "yayness", :provider => :fake
-        assert(obj, "did not create object")
-
-        obj.provider.expects(:prefetch)
-        obj.expects(:retrieve)
-        obj.expects(:propertychanges).returns([])
-        obj.expects(:cache)
-
-        obj.evaluate
-    end
-
-    # Partially test #704, but also cover the rest of the schedule management bases.
-    def test_schedule
-        Puppet::Type.type(:schedule).create(:name => "maint")
-
-        {"maint" => true, nil => false, :fail => :fail}.each do |name, should|
-            args = {:name => tempfile, :ensure => :file}
-            if name
-                args[:schedule] = name
-            end
-            resource = Puppet::Type.type(:file).create(args)
-
-            if should == :fail
-                assert_raise(Puppet::Error, "Did not fail on missing schedule") do
-                    resource.schedule
-                end
-            else
-                sched = nil
-                assert_nothing_raised("Failed when schedule was %s" % sched) do
-                    sched = resource.schedule
-                end
-
-                if should
-                    assert_equal(name, sched.name, "did not get correct schedule back")
-                end
-            end
-        end
-    end
-
-    # #801 -- resources only checked in noop should be rescheduled immediately.
-    def test_reschedule_when_noop
-        Puppet::Type.type(:schedule).mkdefaultschedules
-        file = Puppet::Type.type(:file).create(:path => "/tmp/whatever", :mode => "755", :noop => true, :schedule => :daily, :ensure => :file)
-
-        assert(file.noop?, "File not considered in noop")
-        assert(file.scheduled?, "File is not considered scheduled")
-
-        file.evaluate
-
-        assert_nil(file.cached(:checked), "Stored a checked time when running in noop mode when there were changes")
-        file.cache(:checked, nil)
-
-        file.stubs(:propertychanges).returns([])
-
-        file.evaluate
-        assert_instance_of(Time, file.cached(:checked), "Did not store a checked time when running in noop mode when there were no changes")
-    end
-end
diff --git a/test/ral/providers/cron/crontab.rb b/test/ral/providers/cron/crontab.rb
deleted file mode 100755
index d9f4602..0000000
--- a/test/ral/providers/cron/crontab.rb
+++ /dev/null
@@ -1,632 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-require 'puppettest/fileparsing'
-
-class TestCronParsedProvider < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::FileParsing
-
-
-    FIELDS = {
-        :crontab => %w{command minute hour month monthday weekday}.collect { |o| o.intern },
-        :freebsd_special => %w{special command}.collect { |o| o.intern },
-        :environment => [:line],
-        :blank => [:line],
-        :comment => [:line],
-    }
-
-    # These are potentially multi-line records; there's no one-to-one map, but they model
-    # a full cron job.  These tests assume individual record types will always be correctly
-    # parsed, so all they 
-    def sample_crons
-        unless defined? @sample_crons
-            @sample_crons = YAML.load(File.read(File.join(@crondir, "crontab_collections.yaml")))
-        end
-        @sample_crons
-    end
-
-    # These are simple lines that can appear in the files; there is a one to one
-    # mapping between records and lines.  We have plenty of redundancy here because
-    # we use these records to build up our complex, multi-line cron jobs below.
-    def sample_records
-        unless defined? @sample_records
-            @sample_records = YAML.load(File.read(File.join(@crondir, "crontab_sample_records.yaml")))
-        end
-        @sample_records
-    end
-
-    def setup
-        super
-        @type = Puppet::Type.type(:cron)
-        @provider = @type.provider(:crontab)
-        @provider.initvars
-        @crondir = datadir(File.join(%w{providers cron}))
-
-        @oldfiletype = @provider.filetype
-    end
-
-    def teardown
-        Puppet::Util::FileType.filetype(:ram).clear
-        @provider.clear
-        super
-    end
-
-    # Make sure a cron job matches up.  Any non-passed fields are considered absent.
-    def assert_cron_equal(msg, cron, options)
-        assert_instance_of(@provider, cron, "not an instance of provider in %s" % msg)
-        options.each do |param, value|
-            assert_equal(value, cron.send(param), "%s was not equal in %s" % [param, msg])
-        end
-        %w{command environment minute hour month monthday weekday}.each do |var|
-            unless options.include?(var.intern)
-                assert_equal(:absent, cron.send(var), "%s was not parsed absent in %s" % [var, msg])
-            end
-        end
-    end
-
-    # Make sure a cron record matches.  This only works for crontab records.
-    def assert_record_equal(msg, record, options)
-        unless options.include?(:record_type)
-            raise ArgumentError, "You must pass the required record type"
-        end
-        assert_instance_of(Hash, record, "not an instance of a hash in %s" % msg)
-        options.each do |param, value|
-            assert_equal(value, record[param], "%s was not equal in %s" % [param, msg])
-        end
-        FIELDS[record[:record_type]].each do |var|
-            unless options.include?(var)
-                assert_equal(:absent, record[var], "%s was not parsed absent in %s" % [var, msg])
-            end
-        end
-    end
-
-    def assert_header(file)
-        header = []
-        file.gsub! /^(# HEADER: .+$)\n/ do
-            header << $1
-            ''
-        end
-        assert_equal(4, header.length, "Did not get four header lines")
-    end
-
-    # This handles parsing every possible iteration of cron records.  Note that this is only
-    # single-line stuff and doesn't include multi-line values (e.g., with names and/or envs).
-    # Those have separate tests.
-    def test_parse_line
-        # First just do each sample record one by one
-        sample_records.each do |name, options|
-            result = nil
-            assert_nothing_raised("Could not parse %s: '%s'" % [name, options[:text]]) do
-                result = @provider.parse_line(options[:text])
-            end
-            assert_record_equal("record for %s" % name, result, options[:record])
-        end
-
-        # Then do them all at once.
-        records = []
-        text = ""
-        sample_records.each do |name, options|
-            records << options[:record]
-            text += options[:text] + "\n"
-        end
-
-        result = nil
-        assert_nothing_raised("Could not match all records in one file") do
-            result = @provider.parse(text)
-        end
-
-        records.zip(result).each do |should, record|
-            assert_record_equal("record for %s in full match" % should.inspect, record, should)
-        end
-    end
-
-    # Here we test that each record generates to the correct text.
-    def test_generate_line
-        # First just do each sample record one by one
-        sample_records.each do |name, options|
-            result = nil
-            assert_nothing_raised("Could not generate %s: '%s'" % [name, options[:record]]) do
-                result = @provider.to_line(options[:record])
-            end
-            assert_equal(options[:text], result, "Did not generate correct text for %s" % name)
-        end
-
-        # Then do them all at once.
-        records = []
-        text = ""
-        sample_records.each do |name, options|
-            records << options[:record]
-            text += options[:text] + "\n"
-        end
-
-        result = nil
-        assert_nothing_raised("Could not match all records in one file") do
-            result = @provider.to_file(records)
-        end
-
-        assert_header(result)
-
-        assert_equal(text, result, "Did not generate correct full crontab")
-    end
-
-    # Test cronjobs that are made up from multiple records.
-    def test_multi_line_cronjobs
-        fulltext = ""
-        all_records = []
-        sample_crons.each do |name, record_names|
-            records = record_names.collect do |record_name|
-                unless record = sample_records[record_name]
-                    raise "Could not find sample record %s" % record_name
-                end
-                record
-            end
-
-            text = records.collect { |r| r[:text] }.join("\n") + "\n"
-            record_list = records.collect { |r| r[:record] }
-
-            # Add it to our full collection
-            all_records += record_list
-            fulltext += text
-
-            # First make sure we generate each one correctly
-            result = nil
-            assert_nothing_raised("Could not generate multi-line cronjob %s" % [name]) do
-                result = @provider.to_file(record_list)
-            end
-            assert_header(result)
-            assert_equal(text, result, "Did not generate correct text for multi-line cronjob %s" % name)
-
-            # Now make sure we parse each one correctly
-            assert_nothing_raised("Could not parse multi-line cronjob %s" % [name]) do
-                result = @provider.parse(text)
-            end
-            record_list.zip(result).each do |should, record|
-                assert_record_equal("multiline cronjob %s" % name, record, should)
-            end
-        end
-
-        # Make sure we can generate it all correctly
-        result = nil
-        assert_nothing_raised("Could not generate all multi-line cronjobs") do
-            result = @provider.to_file(all_records)
-        end
-        assert_header(result)
-        assert_equal(fulltext, result, "Did not generate correct text for all multi-line cronjobs")
-
-        # Now make sure we parse them all correctly
-        assert_nothing_raised("Could not parse multi-line cronjobs") do
-            result = @provider.parse(fulltext)
-        end
-        all_records.zip(result).each do |should, record|
-            assert_record_equal("multiline cronjob %s", record, should)
-        end
-    end
-
-    # Take our sample files, and make sure we can entirely parse them,
-    # then that we can generate them again and we get the same data.
-    def test_parse_and_generate_sample_files
-        @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        crondir = datadir(File.join(%w{providers cron}))
-        files = Dir.glob("%s/crontab.*" % crondir)
-
-        setme
-        @provider.default_target = @me
-        target = @provider.target_object(@me)
-        files.each do |file|
-            str = args = nil
-            assert_nothing_raised("could not load %s" % file) do
-                str, args = YAML.load(File.read(file))
-            end
-            
-            # Stupid old yaml
-            args.each do |hash|
-                hash.each do |param, value|
-                    if param.is_a?(String) and param =~ /^:/
-                        hash.delete(param)
-                        param = param.sub(/^:/,'').intern
-                        hash[param] = value
-                    end
-
-                    if value.is_a?(String) and value =~ /^:/
-                        value = value.sub(/^:/,'').intern
-                        hash[param] = value
-                    end
-                end
-            end
-            target.write(str)
-            assert_nothing_raised("could not parse %s" % file) do
-                @provider.prefetch
-            end
-            records = @provider.send(:instance_variable_get, "@records")
-
-            args.zip(records) do |should, sis|
-                # Make the values a bit more equal.
-                should[:target] = @me
-                should[:ensure] = :present
-                #should[:environment] ||= []
-                should[:on_disk] = true
-                is = sis.dup
-                sis.dup.each do |p,v|
-                    is.delete(p) if v == :absent
-                end
-                assert_equal(should, is,
-                    "Did not parse %s correctly" % file)
-            end
-
-            assert_nothing_raised("could not generate %s" % file) do
-                @provider.flush_target(@me)
-            end
-
-            assert_equal(str, target.read, "%s changed" % file)
-            @provider.clear
-        end
-    end
-
-    # A simple test to see if we can load the cron from disk.
-    def test_load
-        setme()
-        records = nil
-        assert_nothing_raised {
-            records = @provider.retrieve(@me)
-        }
-        assert_instance_of(Array, records, "did not get correct response")
-    end
-
-    # Test that a cron job turns out as expected, by creating one and generating
-    # it directly
-    def test_simple_to_cron
-        # make the cron
-        setme()
-
-        name = "yaytest"
-        args = {:name => name,
-            :command => "date > /dev/null",
-            :minute => "30",
-            :user => @me,
-            :record_type => :crontab
-        }
-        # generate the text
-        str = nil
-        assert_nothing_raised {
-            str = @provider.to_line(args)
-        }
-
-        assert_equal("# Puppet Name: #{name}\n30 * * * * date > /dev/null", str,
-            "Cron did not generate correctly")
-    end
-    
-    # Test that comments are correctly retained
-    def test_retain_comments
-        str = "# this is a comment\n#and another comment\n"
-        user = "fakeuser"
-        records = nil
-        @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        target = @provider.target_object(user)
-        target.write(str)
-        assert_nothing_raised {
-            @provider.prefetch
-        }
-
-        assert_nothing_raised {
-            newstr = @provider.flush_target(user)
-            assert(target.read.include?(str), "Comments were lost")
-        }
-    end
-
-    def test_simpleparsing
-        @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        text = "5 1,2 * 1 0 /bin/echo funtest"
-
-        records = nil
-        assert_nothing_raised {
-            records = @provider.parse(text)
-        }
-
-        should = {
-            :minute => %w{5},
-            :hour => %w{1 2},
-            :monthday => :absent,
-            :month => %w{1},
-            :weekday => %w{0},
-            :command => "/bin/echo funtest"
-        }
-
-        is = records.shift
-        assert(is, "Did not get record")
-
-        should.each do |p, v|
-            assert_equal(v, is[p], "did not parse %s correctly" % p)
-        end
-    end
-
-    # Make sure we can create a cron in an empty tab.
-    # LAK:FIXME This actually modifies the user's crontab,
-    # which is pretty heinous.
-    def test_mkcron_if_empty
-        setme
-        @provider.filetype = @oldfiletype
-
-        records = @provider.retrieve(@me)
-
-        target = @provider.target_object(@me)
-
-        cleanup do
-            if records.length == 0
-                target.remove
-            else
-                target.write(@provider.to_file(records))
-            end
-        end
-
-        # Now get rid of it
-        assert_nothing_raised("Could not remove cron tab") do
-            target.remove
-        end
-
-        @provider.flush :target => @me, :command => "/do/something",
-            :record_type => :crontab
-        created = @provider.retrieve(@me)
-        assert(created.detect { |r| r[:command] == "/do/something" },
-            "Did not create cron tab")
-    end
-
-    # Make sure we correctly bidirectionally parse things.
-    def test_records_and_strings
-        @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        setme
-
-        target = @provider.target_object(@me)
-        
-        [
-            "* * * * * /some/command",
-            "0,30 * * * * /some/command",
-            "0-30 * * * * /some/command",
-            "# Puppet Name: name\n0-30 * * * * /some/command",
-            "# Puppet Name: name\nVAR=VALUE\n0-30 * * * * /some/command",
-            "# Puppet Name: name\nVAR=VALUE\nC=D\n0-30 * * * * /some/command",
-            "0 * * * * /some/command"
-        ].each do |str|
-            @provider.initvars
-            str += "\n"
-            target.write(str)
-            assert_equal(str, target.read,
-                "Did not write correctly")
-            assert_nothing_raised("Could not prefetch with %s" % str.inspect) do
-                @provider.prefetch
-            end
-            assert_nothing_raised("Could not flush with %s" % str.inspect) do
-                @provider.flush_target(@me)
-            end
-
-            assert_equal(str, target.read,
-                "Changed in read/write")
-
-            @provider.clear
-        end
-    end
-
-    # Test that a specified cron job will be matched against an existing job
-    # with no name, as long as all fields match
-    def test_matchcron
-        mecron = "0,30 * * * * date
-
-        * * * * * funtest
-        # a comment
-        0,30 * * 1 * date
-        "
-
-        youcron = "0,30 * * * * date
-
-        * * * * * yaytest
-        # a comment
-        0,30 * * 1 * fooness
-        "
-        setme
-        @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        you = "you"
-
-        # Write the same tab to multiple targets
-        @provider.target_object(@me).write(mecron.gsub(/^\s+/, ''))
-        @provider.target_object(you).write(youcron.gsub(/^\s+/, ''))
-
-        # Now make some crons that should match
-        matchers = [
-            @type.create(
-                :name => "yaycron",
-                :minute => [0, 30],
-                :command => "date",
-                :user => @me
-            ),
-            @type.create(
-                :name => "youtest",
-                :command => "yaytest",
-                :user => you
-            )
-        ]
-
-        nonmatchers = [
-            @type.create(
-                :name => "footest",
-                :minute => [0, 30],
-                :hour => 1,
-                :command => "fooness",
-                :user => @me # wrong target
-            ),
-            @type.create(
-                :name => "funtest2",
-                :command => "funtest",
-                :user => you # wrong target for this cron
-            )
-        ]
-
-        # Create another cron so we prefetch two of them
-        @type.create(:name => "testing", :minute => 30, :command => "whatever", :user => "you")
-
-        assert_nothing_raised("Could not prefetch cron") do
-            @provider.prefetch([matchers, nonmatchers].flatten.inject({}) { |crons, cron| crons[cron.name] = cron; crons })
-        end
-
-        matchers.each do |cron|
-            assert_equal(:present, cron.provider.ensure, "Cron %s was not matched" % cron.name)
-            if value = cron.value(:minute) and value == "*"
-                value = :absent
-            end
-            assert_equal(value, cron.provider.minute, "Minutes were not retrieved, so cron was not matched")
-            assert_equal(cron.value(:target), cron.provider.target, "Cron %s was matched from the wrong target" % cron.name)
-        end
-
-        nonmatchers.each do |cron|
-            assert_equal(:absent, cron.provider.ensure, "Cron %s was incorrectly matched" % cron.name)
-        end
-    end
-
-    def test_data
-        setme
-        @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        target = @provider.target_object(@me)
-        fakedata("data/providers/cron/examples").each do |file|
-            text = File.read(file)
-            target.write(text)
-
-            assert_nothing_raised("Could not parse %s" % file) do
-                @provider.prefetch
-            end
-            # mark the provider modified
-            @provider.modified(@me)
-
-            # and zero the text
-            target.write("")
-
-            result = nil
-            assert_nothing_raised("Could not generate %s" % file) do
-                @provider.flush_target(@me)
-            end
-
-            # Ignore whitespace differences, since those don't affect function.
-            modtext = text.gsub(/[ \t]+/, " ")
-            modtarget = target.read.gsub(/[ \t]+/, " ")
-            assert_equal(modtext, modtarget,
-                "File was not rewritten the same")
-
-            @provider.clear
-        end
-    end
-
-    # Match freebsd's annoying @daily stuff.
-    def test_match_freebsd_special
-        @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        setme
-
-        target = @provider.target_object(@me)
-        
-        [
-            "@daily /some/command",
-            "@daily /some/command more"
-        ].each do |str|
-            @provider.initvars
-            str += "\n"
-            target.write(str)
-            assert_nothing_raised("Could not prefetch with %s" % str.inspect) do
-                @provider.prefetch
-            end
-            records = @provider.send(:instance_variable_get, "@records")
-            records.each do |r|
-                assert_equal(:freebsd_special, r[:record_type],
-                    "Did not create lines as freebsd lines")
-            end
-            assert_nothing_raised("Could not flush with %s" % str.inspect) do
-                @provider.flush_target(@me)
-            end
-
-            assert_equal(str, target.read,
-                "Changed in read/write")
-
-            @provider.clear
-        end
-    end
-
-    # #707
-    def test_write_freebsd_special
-        assert_equal(@provider.to_line(:record_type => :crontab, :ensure => :present, :special => "reboot", :command => "/bin/echo something"), "@reboot /bin/echo something")
-    end
-
-    def test_prefetch
-        cron = @type.create :command => "/bin/echo yay", :name => "test", :hour => 4
-
-        assert_nothing_raised("Could not prefetch cron") do
-            cron.provider.class.prefetch("test" => cron)
-        end
-    end
-
-    # Testing #669.
-    def test_environment_settings
-        @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        setme
-
-        target = @provider.target_object(@me)
-
-        # First with no env settings
-        resource = @type.create :command => "/bin/echo yay", :name => "test", :hour => 4
-        cron = resource.provider
-
-        cron.ensure = :present
-        cron.command = "/bin/echo yay"
-        cron.hour = %w{4}
-        cron.flush
-
-        result = target.read
-        assert_equal("# Puppet Name: test\n* 4 * * * /bin/echo yay\n", result, "Did not write cron out correctly")
-
-        # Now set the env
-        cron.environment = "TEST=foo"
-        cron.flush
-
-        result = target.read
-        assert_equal("# Puppet Name: test\nTEST=foo\n* 4 * * * /bin/echo yay\n", result, "Did not write out environment setting")
-
-        # Modify it
-        cron.environment = ["TEST=foo", "BLAH=yay"]
-        cron.flush
-
-        result = target.read
-        assert_equal("# Puppet Name: test\nTEST=foo\nBLAH=yay\n* 4 * * * /bin/echo yay\n", result, "Did not write out environment setting")
-
-        # And remove it
-        cron.environment = :absent
-        cron.flush
-
-        result = target.read
-        assert_equal("# Puppet Name: test\n* 4 * * * /bin/echo yay\n", result, "Did not write out environment setting")
-    end
-
-    # Testing #1216
-    def test_strange_lines
-        @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        text = " 5 \t\t 1,2 * 1 0 /bin/echo funtest"
-
-        records = nil
-        assert_nothing_raised {
-            records = @provider.parse(text)
-        }
-
-        should = {
-            :minute => %w{5},
-            :hour => %w{1 2},
-            :monthday => :absent,
-            :month => %w{1},
-            :weekday => %w{0},
-            :command => "/bin/echo funtest"
-        }
-
-        is = records.shift
-        assert(is, "Did not get record")
-
-        should.each do |p, v|
-            assert_equal(v, is[p], "did not parse %s correctly" % p)
-        end
-    end
-end
diff --git a/test/ral/providers/group.rb b/test/ral/providers/group.rb
deleted file mode 100755
index 6479b4a..0000000
--- a/test/ral/providers/group.rb
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'etc'
-
-class TestGroupProvider < Test::Unit::TestCase
-	include PuppetTest
-    def setup
-        super
-        @@tmpgroups = []
-        @provider = nil
-        assert_nothing_raised {
-            @provider = Puppet::Type.type(:group).defaultprovider
-        }
-
-        assert(@provider, "Could not find default group provider")
-        assert(@provider.name != :fake, "Got a fake provider")
-    end
-
-    def teardown
-        super
-        Puppet.type(:group).clear
-        @@tmpgroups.each { |group|
-            unless missing?(group)
-                remove(group)
-            end
-        }
-    end
-
-    def mkgroup(name, hash = {})
-        fakeresource = stub 'group', :allowdupe? => false, :name => name
-        fakeresource.stubs(:[]).returns nil
-        fakeresource.stubs(:should).returns nil
-        fakeresource.stubs(:[]).with(:name).returns name
-        hash.each do |name, val|
-            fakeresource.stubs(:should).with(name).returns val
-            fakeresource.stubs(:[]).with(name).returns val
-        end
-        group = nil
-        assert_nothing_raised {
-            group = @provider.new(fakeresource)
-        }
-        assert(group, "Could not create provider group")
-
-        return group
-    end
-
-    case Facter["operatingsystem"].value
-    when "Darwin":
-        def missing?(group)
-            output = %x{nidump -r /groups/#{group} / 2>/dev/null}.chomp
-
-            if output == ""
-                return true
-            else
-                return false
-            end
-
-            assert_equal("", output, "Group %s is present:\n%s" % [group, output])
-        end
-
-        def gid(name)
-            %x{nireport / /groups name gid}.split("\n").each { |line|
-                group, id = line.chomp.split(/\s+/)
-                assert(id =~ /^-?\d+$/, "Group id %s for %s is not a number" %
-                    [id.inspect, group])
-                if group == name
-                    return Integer(id)
-                end
-            }
-
-            return nil
-        end
-
-        def remove(group)
-            system("niutil -destroy / /groups/%s" % group)
-        end
-    else
-        def missing?(group)
-            begin
-                obj = Etc.getgrnam(group)
-                return false
-            rescue ArgumentError
-                return true
-            end
-        end
-
-        def gid(name)
-            assert_nothing_raised {
-                obj = Etc.getgrnam(name)
-                return obj.gid
-            }
-
-            return nil
-        end
-
-        def remove(group)
-            system("groupdel %s" % group)
-        end
-    end
-
-    def groupnames
-        %x{groups}.chomp.split(/ /)
-    end
-
-    def groupids
-        Process.groups
-    end
-
-    def attrtest_ensure(group)
-        old = group.ensure
-        assert_nothing_raised {
-            group.delete
-        }
-
-        assert(!group.exists?, "Group was not deleted")
-
-        assert_nothing_raised {
-            group.create
-        }
-        assert(group.exists?, "Group was not created")
-
-        unless old == :present
-            assert_nothing_raised {
-                group.delete
-            }
-        end
-    end
-
-    def attrtest_gid(group)
-        old = gid(group.name)
-
-        newgid = old
-        while true
-            newgid += 1
-
-            if newgid - old > 1000
-                $stderr.puts "Could not find extra test UID"
-                return
-            end
-            begin
-                Etc.getgrgid(newgid)
-            rescue ArgumentError => detail
-                break
-            end
-        end
-
-        assert_nothing_raised("Failed to change group id") {
-            group.gid = newgid
-        }
-
-        curgid = nil
-        assert_nothing_raised {
-            curgid = gid(group.name)
-        }
-
-        assert_equal(newgid, curgid, "GID was not changed")
-        # Refresh
-        group.getinfo(true)
-        assert_equal(newgid, group.gid, "Object got wrong gid")
-
-        assert_nothing_raised("Failed to change group id") {
-            group.gid = old
-        }
-    end
-
-    # Iterate over each of our groups and try to grab the gid.
-    def test_ownprovidergroups
-        groupnames().each { |group|
-            gobj = nil
-            comp = nil
-            fakeresource = fakeresource(:group, group)
-            assert_nothing_raised {
-                gobj = @provider.new(fakeresource)
-            }
-
-            assert(gobj.gid, "Failed to retrieve gid")
-        }
-    end
-
-    if Puppet::Util::SUIDManager.uid == 0
-        def test_mkgroup
-            gobj = nil
-            comp = nil
-            name = "pptestgr"
-            assert(missing?(name), "Group %s is still present" % name)
-            group = mkgroup(name)
-
-            @@tmpgroups << name
-
-            assert(group.respond_to?(:addcmd), "no respondo?")
-            assert_nothing_raised {
-                group.create
-            }
-            assert(!missing?(name), "Group %s is missing" % name)
-
-            tests = Puppet.type(:group).validproperties
-
-            tests.each { |test|
-                if self.respond_to?("attrtest_%s" % test)
-                    self.send("attrtest_%s" % test, group)
-                else
-                    $stderr.puts "Not testing attr %s of group" % test
-                end
-            }
-
-            assert_nothing_raised {
-                group.delete
-            }
-        end
-
-        # groupadd -o is broken in FreeBSD.
-        unless Facter["operatingsystem"].value == "FreeBSD"
-        def test_duplicateIDs
-            group1 = mkgroup("group1", :gid => 125)
-
-            @@tmpgroups << "group1"
-            @@tmpgroups << "group2"
-            # Create the first group
-            assert_nothing_raised {
-                group1.create
-            }
-
-            # Not all OSes fail here, so we can't test that it doesn't work with
-            # it off, only that it does work with it on.
-            group2 = mkgroup("group2", :gid => 125)
-            group2.resource.stubs(:allowdupe?).returns true
-
-            # Now create the second group
-            assert_nothing_raised {
-                group2.create
-            }
-            assert_equal(:present, group2.ensure, "Group did not get created")
-        end
-        end
-    else
-        $stderr.puts "Not running as root; skipping group creation tests."
-    end
-    
-    def test_autogen
-        provider = nil
-        group = Puppet::Type.type(:group).create(:name => nonrootgroup.name)
-        provider = group.provider
-        assert(provider, "did not get provider")
-
-        # Everyone should be able to autogenerate a uid
-        assert_instance_of(Fixnum, provider.autogen(:gid))
-    end
-end
-
diff --git a/test/ral/providers/host/netinfo.rb b/test/ral/providers/host/netinfo.rb
deleted file mode 100755
index e513974..0000000
--- a/test/ral/providers/host/netinfo.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke Kanies on 2006-11-12.
-#  Copyright (c) 2006. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'puppettest'
-
-if Puppet::Type.type(:host).provider(:netinfo).suitable?
-class TestNetinfoHostProvider < Test::Unit::TestCase
-	include PuppetTest
-	
-	def setup
-	    super
-	    @host = Puppet::Type.type(:host)
-	    @provider = @host.provider(:netinfo)
-    end
-
-	def test_list
-	    list = nil
-	    assert_nothing_raised do
-	        list = @provider.instances
-        end
-        assert(list.length > 0)
-        list.each do |prov|
-            assert_instance_of(@provider, prov)
-            assert(prov.name, "objects do not have names")
-            assert(prov.ip, "Did not get value for device in %s" % prov.ip)
-        end
-
-        assert(list.detect { |provider| provider.name == "localhost"}, "Could not find localhost")
-    end
-    
-    if Process.uid == 0
-    def test_simple
-        localhost = nil
-        assert_nothing_raised do
-            localhost = @host.create :name => "localhost", :check => [:ip], :provider => :netinfo
-        end
-        
-        assert_nothing_raised do
-            localhost.retrieve
-        end
-        
-        prov = localhost.provider
-        
-        assert_nothing_raised do
-            assert(prov.ip, "Did not find value for ip")
-            assert(prov.ip != :absent, "Netinfo thinks the localhost is missing")
-        end
-    end
-end
-end
-end
-
diff --git a/test/ral/providers/host/parsed.rb b/test/ral/providers/host/parsed.rb
deleted file mode 100755
index 98c3acb..0000000
--- a/test/ral/providers/host/parsed.rb
+++ /dev/null
@@ -1,225 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'etc'
-require 'puppettest'
-require 'puppettest/fileparsing'
-require 'test/unit'
-
-class TestParsedHostProvider < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::FileParsing
-
-    def setup
-        super
-        @provider = Puppet.type(:host).provider(:parsed)
-
-        @oldfiletype = @provider.filetype
-    end
-
-    def teardown
-        Puppet::Util::FileType.filetype(:ram).clear
-        @provider.filetype = @oldfiletype
-        @provider.clear
-        super
-    end
-
-    def test_provider_existence
-        assert(@provider, "Could not retrieve provider")
-    end
-
-    # Here we just create a fake host type that answers to all of the methods
-    # but does not modify our actual system.
-    def mkfaketype
-        @provider.filetype = Puppet::Util::FileType.filetype(:ram)
-    end
-
-    def mkhosthash
-        if defined? @hcount
-            @hcount += 1
-        else
-            @hcount = 1
-        end
-
-        return {
-            :name => "fakehost%s" % @hcount,
-            :ip => "192.168.27.%s" % @hcount,
-            :alias => ["alias%s" % @hcount],
-            :ensure => :present
-        }
-    end
-
-    def mkhost
-        hash = mkhosthash()
-
-        fakeresource = fakeresource(:host, hash[:name])
-
-        host = @provider.new(fakeresource)
-
-        assert(host, "Could not create provider host")
-        hash.each do |name, val|
-            host.send(name.to_s + "=", val)
-        end
-
-        return host
-    end
-
-    # Make sure we convert both directlys correctly using a simple host.
-    def test_basic_isomorphism
-        hash = {:record_type => :parsed, :name => "myhost", :ip => "192.168.43.56", :alias => %w{another host}}
-
-        str = nil
-        assert_nothing_raised do
-            str = @provider.to_line(hash)
-        end
-
-        assert_equal("192.168.43.56\tmyhost\tanother\thost", str)
-
-        newhash = nil
-        assert_nothing_raised do
-            newhash = @provider.parse(str).shift
-        end
-
-        assert_equal(hash, newhash)
-    end
-
-    # Make sure parsing gets comments, blanks, and hosts
-    def test_blanks_and_comments
-        mkfaketype()
-        text = %{# comment one
-
-192.168.43.56\tmyhost\tanother\thost
-    
-# another comment
-192.168.43.57\tanotherhost
-}
-
-        instances = nil
-        assert_nothing_raised do
-            instances = @provider.parse(text)
-        end
-
-        assert_equal([
-            {:record_type => :comment, :line => "# comment one"},
-            {:record_type => :blank, :line => ""},
-            {:record_type => :parsed, :name => "myhost", :ip => "192.168.43.56", :alias => %w{another host}},
-            {:record_type => :blank, :line => "    "},
-            {:record_type => :comment, :line => "# another comment"},
-            {:record_type => :parsed, :name => "anotherhost", :ip => "192.168.43.57"}
-        ], instances)
-
-        newtext = nil
-        assert_nothing_raised do
-            newtext = @provider.to_file(instances).gsub(/^# HEADER.+\n/, '')
-        end
-
-        assert_equal(text, newtext)
-    end
-
-    def test_simplehost
-        mkfaketype
-        @provider.default_target = :yayness
-        file = @provider.target_object(:yayness)
-
-        # Start out with no content.
-        assert_nothing_raised {
-            assert_equal([], @provider.parse(file.read))
-        }
-
-        # Now create a provider
-        host = nil
-        assert_nothing_raised {
-            host = mkhost
-        }
-
-        # Make sure we're still empty
-        assert_nothing_raised {
-            assert_equal([], @provider.parse(file.read))
-        }
-
-        # Try storing it
-        assert_nothing_raised do
-            host.flush
-        end
-
-        # Make sure we get the host back
-        assert_nothing_raised {
-            assert(file.read.include?(host.name),
-                "Did not flush host to disk")
-        }
-
-        # Remove a single field and make sure it gets tossed
-        name = host.alias
-        host.alias = [:absent]
-
-        assert_nothing_raised {
-            host.flush
-            assert(! file.read.include?(name[0]),
-                "Did not remove alias from disk")
-        }
-
-        # Make sure it throws up if we remove a required field
-        host.ip = :absent
-
-        assert_raise(ArgumentError) {
-            host.flush
-        }
-
-        # Now remove the whole object
-        host.ensure = :absent
-        assert_nothing_raised {
-            host.flush
-            assert_equal([], @provider.parse(file.read))
-        }
-    end
-
-    # Parse our sample data and make sure we regenerate it correctly.
-    def test_hostsparse
-        fakedata("data/types/hosts").each do |file| fakedataparse(file) end
-    end
-
-    # Make sure we can modify the file elsewhere and those modifications will
-    # get taken into account.
-    def test_modifyingfile
-        hostfile = tempfile()
-        @provider.default_target = hostfile
-
-        file = @provider.target_object(hostfile)
-
-        hosts = []
-        3.times {
-            h = mkhost()
-            hosts << h
-        }
-
-        hosts.each do |host|
-            host.flush
-        end
-
-        newhost = mkhost()
-        hosts << newhost
-
-        # Now store our new host
-        newhost.flush()
-
-        # Verify we can retrieve that info
-        assert_nothing_raised("Could not retrieve after second write") {
-            @provider.prefetch
-        }
-
-        text = file.read
-
-        instances = @provider.parse(text)
-
-        # And verify that we have data for everything
-        hosts.each { |host|
-            name = host.resource[:name]
-            assert(text.include?(name), "Host %s is not in file" % name)
-            hash = host.property_hash
-            assert(! hash.empty?, "Could not find host %s" % name)
-            assert(hash[:ip], "Could not find ip for host %s" % name)
-        }
-    end
-end
-
diff --git a/test/ral/providers/mailalias/aliases.rb b/test/ral/providers/mailalias/aliases.rb
deleted file mode 100755
index ec8b846..0000000
--- a/test/ral/providers/mailalias/aliases.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/fileparsing'
-
-class TestMailaliasAliasesProvider < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::FileParsing
-
-    def setup
-        super
-        @provider = Puppet.type(:mailalias).provider(:aliases)
-
-        @oldfiletype = @provider.filetype
-
-        @alias = mkalias
-    end
-
-    def teardown
-        Puppet::Util::FileType.filetype(:ram).clear
-        @provider.filetype = @oldfiletype
-        @provider.clear
-        super
-    end
-    
-    def mkalias(name = "me")
-        if defined? @pcount
-            @pcount += 1
-        else
-            @pcount = 1
-        end
-        args = {
-            :name => name,
-            :recipient => %w{here there}
-        }
-
-        fakeresource = fakeresource(:mailalias, args[:name])
-
-        key = @provider.new(fakeresource)
-        args.each do |p,v|
-            key.send(p.to_s + "=", v)
-        end
-
-        return key
-    end
-
-    def test_data_parsing_and_generating
-        fakedata("data/types/mailalias").each { |file|
-            fakedataparse(file)
-        }
-    end
-end
-
diff --git a/test/ral/providers/mount/netinfo.rb b/test/ral/providers/mount/netinfo.rb
deleted file mode 100755
index 9a02bc4..0000000
--- a/test/ral/providers/mount/netinfo.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke Kanies on 2006-11-12.
-#  Copyright (c) 2006. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'puppettest'
-# 
-# if Puppet::Type.type(:mount).provider(:netinfo).suitable?
-# class TestNetinfoMountProvider < Test::Unit::TestCase
-# 	include PuppetTest
-# 	
-# 	def setup
-# 	    super
-# 	    @mount = Puppet::Type.type(:mount)
-#     end
-#     
-#     if Process.uid == 0 and Facter.value(:hostname) == "midden"
-#     def test_mount_nfs
-#         culain = nil
-#         assert_nothing_raised do
-#             culain = @mount.create :name => "/mnt", :device => "culain:/home/luke", :options => "-o -P", :ensure => :present,
-#                 :fstype => "nfs"
-#         end
-#         
-#         assert(culain, "Did not create fs")
-#         
-#         assert_apply(culain)
-# 
-#         assert_nothing_raised do
-#             culain.provider.mount
-#         end
-#         
-#         assert(culain.provider.mounted?, "fs is not considered mounted")
-#         assert_nothing_raised() { culain.provider.unmount }
-#         
-#         culain[:ensure] = :absent
-#         
-#         assert_apply(culain)
-#     end
-#     end
-#     
-#     def test_simple
-#         root = nil
-#         assert_nothing_raised do
-#             root = @mount.create :name => "/", :check => @mount.validproperties
-#         end
-#         
-#         assert_nothing_raised do
-#             root.retrieve
-#         end
-#         
-#         prov = root.provider
-#         
-#         assert_nothing_raised do
-#             assert(prov.device, "Did not value for device")
-#             assert(prov.device != :absent, "Netinfo thinks the root device is missing")
-#         end
-#     end
-# 	
-# 	def test_list
-# 	    list = nil
-# 	    assert_nothing_raised do
-# 	        list = @mount.list
-#         end
-#         assert(list.length > 0)
-#         list.each do |obj|
-#             assert_instance_of(@mount, obj)
-#             assert(obj[:name], "objects do not have names")
-#             p obj
-#             assert(obj.is(:device), "Did not get value for device in %s" % obj[:name])
-#         end
-#         
-#         assert(list.detect { |m| m[:name] == "/"}, "Could not find root fs")
-#     end
-# end
-# end
-
diff --git a/test/ral/providers/nameservice.rb b/test/ral/providers/nameservice.rb
deleted file mode 100755
index 7b37cc5..0000000
--- a/test/ral/providers/nameservice.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/provider/nameservice'
-require 'facter'
-
-class TestNameServiceProvider < Test::Unit::TestCase
-    include PuppetTest::FileTesting
-
-    def test_option
-        klass = Class.new(Puppet::Provider::NameService)
-        klass.resource_type = Puppet::Type.type(:user)
-
-        val = nil
-        assert_nothing_raised {
-            val = klass.option(:home, :flag)
-        }
-
-        assert_nil(val, "Got an option")
-
-        assert_nothing_raised {
-            klass.options :home, :flag => "-d"
-        }
-        assert_nothing_raised {
-            val = klass.option(:home, :flag)
-        }
-        assert_equal("-d", val, "Got incorrect option")
-    end
-end
-
diff --git a/test/ral/providers/package.rb b/test/ral/providers/package.rb
deleted file mode 100755
index 3b61c1a..0000000
--- a/test/ral/providers/package.rb
+++ /dev/null
@@ -1,248 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'etc'
-
-class TestPackageProvider < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        Puppet.info @method_name
-    end
-
-    # Load the testpackages hash.
-    def self.load_test_packages
-        require 'yaml'
-        file = File.join(PuppetTest.datadir(), "providers", "package", "testpackages.yaml")
-        unless FileTest.exists?(file)
-            raise "Could not find file %s" % file
-        end
-        array = YAML::load(File.read(file)).collect { |hash|
-            # Stupid ruby 1.8.1.  YAML is sometimes broken such that
-            # symbols end up being strings with the : in them.
-            hash.each do |name, value|
-                if name.is_a?(String) and name =~ /^:/
-                    hash.delete(name)
-                    name = name.sub(/^:/, '').intern
-                    hash[name] = value
-                end
-                if value.is_a?(String) and value =~ /^:/
-                    hash[name] = value.sub(/^:/, '').intern
-                end
-            end
-        }
-
-        return array
-    end
-
-    def self.suitable_test_packages
-        list = load_test_packages
-        providers = {}
-        Puppet::Type.type(:package).suitableprovider.each do |provider|
-            providers[provider.name] = provider
-        end
-        facts = {}
-        Facter.to_hash.each do |fact, value|
-            facts[fact.to_s.downcase.intern] = value.to_s.downcase.intern
-        end
-        list.find_all { |hash| # First find the matching providers
-            hash.include?(:provider) and providers.include?(hash[:provider])
-        }.reject { |hash| # Then find matching fact sets
-            facts.detect do |fact, value|
-                # We're detecting unmatched facts, but we also want to
-                # delete the facts so they don't show up later.
-                if fval = hash[fact]
-                    hash.delete(fact)
-                    fval = [fval] unless fval.is_a?(Array)
-                    fval = fval.collect { |v| v.downcase.intern }
-                    ! fval.include?(value)
-                end
-            end
-        }
-    end
-
-    def assert_absent(provider, msg = "package not absent")
-        result = nil
-        assert_nothing_raised("Could not query provider") do
-            result = provider.query
-        end
-        if result.nil?
-            assert_nil(result)
-        elsif result.is_a?(Hash)
-            assert (result[:ensure] == :absent or result[:ensure] == :purged), msg
-        else
-            raise "dunno how to handle %s" % result.inspect
-        end
-    end
-
-    def assert_not_absent(provider, msg = "package not installed")
-        result = nil
-        assert_nothing_raised("Could not query provider") do
-            result = provider.query
-        end
-        assert((result == :listed or result.is_a?(Hash)),
-            "query did not return hash or :listed")
-        if result == :listed
-            assert(provider.resource.is(:ensure) != :absent, msg)
-        else
-            assert(result[:ensure] != :absent, msg)
-        end
-    end
-
-    # Run a package through all of its paces.  FIXME This should use the
-    # provider, not the package, duh.
-    def run_package_installation_test(hash)
-        # Turn the hash into a package
-        if files = hash[:files]
-            hash.delete(:files)
-            if files.is_a?(Array)
-                hash[:source] = files.shift
-            else
-                hash[:source] = files
-                files = []
-            end
-        else
-            files = []
-        end
-
-        if versions = hash[:versions]
-            hash.delete(:versions)
-        else
-            versions = []
-        end
-
-        # Start out by just making sure it's installed
-        if versions.empty?
-            hash[:ensure] = :present
-        else
-            hash[:ensure] = versions.shift
-        end
-
-        if hash[:source]
-            unless FileTest.exists?(hash[:source])
-                $stderr.puts "Create a package at %s for testing" % hash[:source]
-                return
-            end
-        end
-        
-        if cleancmd = hash[:cleanup]
-            hash.delete(:cleanup)
-        end
-
-        pkg = nil
-        assert_nothing_raised(
-            "Could not turn %s into a package" % hash.inspect
-        ) do
-            pkg = Puppet::Type.newpackage(hash)
-        end
-
-        # Make any necessary modifications.
-        modpkg(pkg)
-
-        provider = pkg.provider
-
-        assert(provider, "Could not retrieve provider")
-
-        return if result = provider.query and ! [:absent, :purged].include?(result[:ensure])
-
-        assert_absent(provider)
-
-        if Process.uid != 0
-            Puppet.info "Run as root for full package tests"
-            return
-        end
-
-        cleanup do
-            if pkg.provider.respond_to?(:uninstall)
-                pkg.provider.flush
-                if pkg.provider.properties[:ensure] != :absent
-                    assert_nothing_raised("Could not clean up package") do
-                        pkg.provider.uninstall
-                    end
-                end
-            else
-                if cleancmd
-                    system(cleancmd)
-                end
-            end
-        end
-
-        # Now call 'latest' after the package is installed
-        if provider.respond_to?(:latest)
-            assert_nothing_raised("Could not call 'latest'") do
-                provider.latest
-            end
-        end
-
-        assert_nothing_raised("Could not install package") do
-            provider.install
-        end
-
-        assert_not_absent(provider, "package did not install")
-
-        # If there are any remaining files, then test upgrading from there
-        unless files.empty?
-            pkg[:source] = files.shift
-            current = provider.properties
-            assert_nothing_raised("Could not upgrade") do
-                provider.update
-            end
-            provider.flush
-            new = provider.properties
-            assert(current != new, "package was not upgraded: %s did not change" %
-                current.inspect)
-        end
-
-        unless versions.empty?
-            pkg[:ensure] = versions.shift
-            current = provider.properties
-            assert_nothing_raised("Could not upgrade") do
-                provider.update
-            end
-            provider.flush
-            new = provider.properties
-            assert(current != new, "package was not upgraded: %s did not change" %
-                current.inspect)
-        end
-
-        # Now call 'latest' after the package is installed
-        if provider.respond_to?(:latest)
-            assert_nothing_raised("Could not call 'latest'") do
-                provider.latest
-            end
-        end
-
-        # Now remove the package
-        if provider.respond_to?(:uninstall)
-            assert_nothing_raised do
-                provider.uninstall
-            end
-
-            assert_absent(provider)
-        end
-    end
-
-    # Now create a separate test method for each package
-    suitable_test_packages.each do |hash|
-        mname = ["test", hash[:name].to_s, hash[:provider].to_s].join("_").intern
-
-        if method_defined?(mname)
-            warn "Already a test method defined for %s" % mname
-        else
-            define_method(mname) do
-                run_package_installation_test(hash)
-            end
-        end
-    end
-
-    def modpkg(pkg)
-        case pkg[:provider]
-        when :sun:
-            pkg[:adminfile] = "/usr/local/pkg/admin_file"
-        end
-    end
-end
-
diff --git a/test/ral/providers/package/aptitude.rb b/test/ral/providers/package/aptitude.rb
deleted file mode 100755
index 881f540..0000000
--- a/test/ral/providers/package/aptitude.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'mocha'
-
-class AptitudePackageProviderTest < PuppetTest::TestCase
-    confine "Aptitude package provider missing" =>
-        Puppet::Type.type(:package).provider(:aptitude).suitable?
-
-	def setup
-        super
-		@type = Puppet::Type.type(:package)
-	end
-	
-	def test_install
-		pkg = @type.create :name => 'faff',
-		                   :provider => :aptitude,
-		                   :ensure => :present,
-		                   :source => "/tmp/faff.deb"
-
- 		pkg.provider.expects(
- 		                 :dpkgquery
- 					  ).with(
- 							  '-W',
- 							  '--showformat',
- 							  '${Status} ${Package} ${Version}\n',
- 							  'faff'
- 					  ).returns(
- 					        "deinstall ok config-files faff 1.2.3-1\n"
- 					  ).times(1)
-
-		pkg.provider.expects(
-		                 :aptitude
-		           ).with(
-		                 '-y',
-		                 '-o',
-		                 'DPkg::Options::=--force-confold',
-		                 :install,
-		                 'faff'
-					  ).returns(0)
-		
-		pkg.evaluate.each { |state| 
-                    state.forward 
-          }
-	end
-	
-	def test_purge
-		pkg = @type.create :name => 'faff', :provider => :aptitude, :ensure => :purged
-
-		pkg.provider.expects(
-		                 :dpkgquery
-					  ).with(
-					        '-W',
-					        '--showformat',
-					        '${Status} ${Package} ${Version}\n',
-					        'faff'
-					  ).returns(
-					        "install ok installed faff 1.2.3-1\n"
-					  ).times(1)
-		pkg.provider.expects(
-		                 :aptitude
-					  ).with(
-					        '-y',
-					        'purge',
-					        'faff'
-					  ).returns(0)
-		
-		pkg.evaluate.each { |state| state.forward }
-	end
-end
diff --git a/test/ral/providers/package/aptrpm.rb b/test/ral/providers/package/aptrpm.rb
deleted file mode 100755
index 32e0ea6..0000000
--- a/test/ral/providers/package/aptrpm.rb
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'mocha'
-
-class AptrpmPackageProviderTest < PuppetTest::TestCase
-    confine "Apt package provider missing" =>
-        Puppet::Type.type(:package).provider(:aptrpm).suitable?
-
-    def setup
-        super
-        @type = Puppet::Type.type(:package)
-    end
-    
-    def test_install
-        pkg = @type.create :name => 'faff',
-                           :provider => :aptrpm,
-                           :ensure => :present,
-                           :source => "/tmp/faff.rpm"
-
-        pkg.provider.expects(
-                            :rpm
-                      ).with(
-                            '-q',
-                            'faff',
-                            '--nosignature',
-                            '--nodigest',
-                            '--qf',
-                            "%{NAME}-%{VERSION}-%{RELEASE} %{VERSION}-%{RELEASE}\n"
-                      ).raises(Puppet::ExecutionFailure, "couldn't find rpm").times(1)
-
-        pkg.provider.expects(
-                         :aptget
-                    ).with(
-                         '-q',
-                         '-y',
-                         "install",
-                         'faff'
-                    ).returns(0)
-        
-        pkg.evaluate.each { |state| state.forward }
-    end
-    
-    def test_uninstall
-        pkg = @type.create :name => 'faff', :provider => :aptrpm, :ensure => :absent
-
-        pkg.provider.expects(
-                         :rpm
-                    ).with(
-                        '-q',
-                        'faff',
-                        '--nosignature',
-                        '--nodigest',
-                        '--qf',
-                        "%{NAME}-%{VERSION}-%{RELEASE} %{VERSION}-%{RELEASE}\n"
-                    ).returns(
-                        "faff-1.2.3-1 1.2.3-1\n"
-                    ).times(1)
-        pkg.provider.expects(
-                        :aptget
-                    ).with(
-                        '-y',
-                        '-q',
-                        'remove',
-                        'faff'
-                    ).returns(0)
-        
-        pkg.evaluate.each { |state| state.forward }
-    end
-
-    # LAK: I don't know where this test will ever return true..
-    def disabled_test_latest
-        pkg = @type.create :name => 'ssh', :provider => :aptrpm
-
-        assert(pkg, "did not create pkg")
-        status = pkg.provider.query
-        assert(status, "ssh is not installed")
-        assert(status[:ensure] != :absent, "ssh is not installed")
-
-        latest = nil
-        assert_nothing_raised("Could not call latest") do
-            latest = pkg.provider.latest
-        end
-        assert(latest, "Could not get latest value from apt")
-    end
-end
-
diff --git a/test/ral/providers/parsedfile.rb b/test/ral/providers/parsedfile.rb
deleted file mode 100755
index 18fe70f..0000000
--- a/test/ral/providers/parsedfile.rb
+++ /dev/null
@@ -1,698 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-require 'puppettest/fileparsing'
-require 'puppet/util/filetype'
-require 'puppet/provider/parsedfile'
-require 'facter'
-
-class TestParsedFile < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::FileParsing
-
-    Puppet::Type.newtype(:testparsedfiletype) do
-        ensurable
-        newproperty(:one) do
-            newvalue(:a)
-            newvalue(:b)
-        end
-        newproperty(:two) do
-            newvalue(:c)
-            newvalue(:d)
-        end
-
-        newparam(:name) do
-        end
-
-        # The target should always be a property, not a parameter.
-        newproperty(:target) do
-            defaultto { @resource.class.defaultprovider.default_target }
-        end
-    end
-
-    # A simple block to skip the complexity of a full transaction.
-    def apply(resource)
-        [:one, :two, :ensure, :target].each do |st|
-            Puppet.info "Setting %s: %s => %s" %
-                [resource[:name], st, resource.should(st)]
-            resource.provider.send(st.to_s + "=", resource.should(st))
-        end
-    end
-
-    def mkresource(name, options = {})
-        options[:one] ||= "a"
-        options[:two] ||= "c"
-        options[:name] ||= name
-
-        resource = @type.create(options)
-    end
-
-    def mkprovider(name = :parsed)
-        @provider = @type.provide(name, :parent => Puppet::Provider::ParsedFile,
-            :filetype => :ram, :default_target => "yayness") do
-            record_line name, :fields => %w{name one two}
-        end
-    end
-
-    def setup
-        super
-        @type = Puppet::Type.type(:testparsedfiletype)
-    end
-
-    def teardown
-        if defined? @provider
-            @type.unprovide(@provider.name)
-            @provider = nil
-        end
-        super
-    end
-
-    def test_create_provider
-        assert_nothing_raised do
-            mkprovider
-        end
-    end
-
-    def test_resource_attributes
-        prov = nil
-        assert_nothing_raised do
-            prov = mkprovider
-        end
-
-        [:one, :two, :name].each do |attr|
-            assert(prov.method_defined?(attr), "Did not define %s" % attr)
-        end
-
-        # Now make sure they stay around
-        fakeresource = fakeresource(:testparsedfiletype, "yay")
-
-        file = prov.new(fakeresource)
-        assert(file, "Could not make provider")
-
-        assert_nothing_raised("Could not set provider name") do
-            file.name = :yayness
-        end
-
-        # The provider converts to strings
-        assert_equal(:yayness, file.name)
-    end
-
-    def test_filetype
-        prov = mkprovider
-
-        flat = Puppet::Util::FileType.filetype(:flat)
-        ram = Puppet::Util::FileType.filetype(:ram)
-        assert_nothing_raised do
-            prov.filetype = :flat
-        end
-
-        assert_equal(flat, prov.filetype)
-
-        assert_nothing_raised do
-            prov.filetype = ram
-        end
-        assert_equal(ram, prov.filetype)
-    end
-
-    # Make sure we correctly create a new filetype object, but only when
-    # necessary.
-    def test_fileobject
-        prov = mkprovider
-
-        path = tempfile()
-        obj = nil
-        assert_nothing_raised do
-            obj = prov.target_object(path)
-        end
-
-        # The default filetype is 'ram'
-        assert_instance_of(Puppet::Util::FileType.filetype(:ram), obj)
-
-        newobj = nil
-        assert_nothing_raised do
-            newobj = prov.target_object(path)
-        end
-
-        assert_equal(obj, newobj, "did not reuse file object")
-
-        # now make sure clear does the right thing
-        assert_nothing_raised do
-            prov.clear
-        end
-        assert_nothing_raised do
-            newobj = prov.target_object(path)
-        end
-
-        assert(obj != newobj, "did not reuse file object")
-    end
-
-    def test_retrieve
-        prov = mkprovider
-
-        prov.filetype = :ram
-
-        # Override the parse method with our own
-        prov.meta_def(:parse) do |text|
-            return [text]
-        end
-
-        path = :yayness
-        file = prov.target_object(path)
-        text = "a test"
-        file.write(text)
-
-        ret = nil
-        assert_nothing_raised do
-            ret = prov.retrieve(path)
-        end
-
-        assert_equal([text], ret)
-
-        # Now set the text to nil and make sure we get an empty array
-        file.write(nil)
-        assert_nothing_raised do
-            ret = prov.retrieve(path)
-        end
-
-        assert_equal([], ret)
-
-        # And the empty string should return an empty array
-        file.write("")
-        assert_nothing_raised do
-            ret = prov.retrieve(path)
-        end
-
-        assert_equal([], ret)
-    end
-
-    # Verify that prefetch will parse the file, create any necessary instances,
-    # and set the 'is' values appropriately.
-    def test_prefetch
-        prov = mkprovider
-
-        prov.filetype = :ram
-        prov.default_target = :default
-
-        # Create a couple of demo files
-        prov.target_object(:file1).write "bill b c\njill b d"
-
-        prov.target_object(:default).write "will b d\n"
-
-        # Create some resources for some of those demo files
-        bill = mkresource "bill", :target => :file1, :one => "b", :two => "c"
-        will = mkresource "will", :target => :default, :one => "b", :two => "d"
-
-        resources = {"bill" => bill, "will" => will}
-        prov_ids = {"bill" => bill.provider.object_id, "will" => will.provider.object_id}
-
-        assert_nothing_raised do
-            prov.prefetch(resources)
-        end
-
-        assert(bill.provider.object_id != prov_ids["bill"], "provider was not replaced in resource")
-        assert(will.provider.object_id != prov_ids["will"], "provider was not replaced in resource")
-
-        # Make sure we prefetched our resources.
-        assert_equal("b", bill.provider.one, "did not prefetch resource from file1")
-        assert_equal("c", bill.provider.two, "did not prefetch resource from file1")
-        assert_equal("b", will.provider.one, "did not prefetch resource from default")
-        assert_equal("d", will.provider.two, "did not prefetch resource from default")
-
-        # Now modify our resources and write them out, making sure that prefetching
-        # hasn't somehow destroyed this ability
-        bill[:one] = "a"
-        will[:one] = "a"
-
-        assert_apply(bill)
-        assert_apply(will)
-
-        prov.prefetch(resources)
-        assert_equal("a", bill.provider.one, "did not prefetch resource from file1")
-        assert_equal("a", will.provider.one, "did not prefetch resource from default")
-
-        assert_equal("bill a c\njill b d\n", prov.target_object(:file1).read,
-            "Did not write changed resource correctly")
-        assert_equal("will a d\n", prov.target_object(:default).read,
-            "Did not write changed default resource correctly")
-    end
-
-    # Make sure we can correctly prefetch on a target.
-    def test_prefetch_target
-        prov = mkprovider
-
-        prov.filetype = :ram
-        target = :yayness
-        prov.target_object(target).write "yay b d"
-
-        records = nil
-        assert_nothing_raised do
-            records = prov.prefetch_target(:yayness)
-        end
-
-        # Now make sure we correctly got the hash
-        record = records.find { |r| r[:name] == "yay" }
-        assert(record, "Did not get record in prefetch_target")
-        assert_equal("b", record[:one])
-        assert_equal("d", record[:two])
-    end
-
-    def test_prefetch_match
-        prov = mkprovider
-
-        prov.meta_def(:match) do |record, resources|
-            # Look for matches on :one
-            if res = resources.find { |name, resource| resource.should(:one).to_s == record[:one].to_s }
-                res[1]
-            else
-                nil
-            end
-        end
-
-        prov.filetype = :ram
-        target = :yayness
-        prov.target_object(target).write "foo b d"
-
-        resource = mkresource "yay", :target => :yayness, :one => "b"
-
-        assert_nothing_raised do
-            prov.prefetch("yay" => resource)
-        end
-
-        # Now make sure we correctly got the hash
-        mprov = resource.provider
-        assert_equal("yay", resource[:name])
-        assert_equal("b", mprov.one)
-        assert_equal("d", mprov.two)
-    end
-
-    # We need to test that we're retrieving files from all three locations:
-    # from any existing target_objects, from the default file location, and
-    # from any existing resource instances.
-    def test_targets
-        prov = mkprovider
-
-        files = {}
-
-        # Set the default target
-        default = tempfile()
-        files[:default] = default
-        prov.default_target = default
-
-        # Create a file object
-        inmem = tempfile()
-        files[:inmemory] = inmem
-        prov.target_object(inmem).write("inmem yay ness")
-
-        # Lastly, create a resource with separate is and should values
-        mtarget = tempfile()
-        files[:resources] = mtarget
-        resource = mkresource "yay", :target => mtarget
-
-        assert(resource.should(:target), "Did not get a value for target")
-
-        list = nil
-
-        # First run it without the resource
-        assert_nothing_raised do
-            list = prov.targets
-        end
-
-        # Make sure it got the first two, but not the resources file
-        files.each do |name, file|
-            if name == :resources
-                assert(! list.include?(file), "Provider somehow found resource target when no resource was passed")
-            else
-                assert(list.include?(file), "Provider did not find %s file" % name)
-            end
-        end
-
-        # Now list with the resource passed
-        assert_nothing_raised do
-            list = prov.targets("yay" => resource)
-        end
-
-        # And make sure we get all three files
-        files.each do |name, file|
-            assert(list.include?(file), "Provider did not find %s file when resource was passed" % name)
-        end
-    end
-
-    # Make sure that flushing behaves correctly.  This is what actually writes
-    # the data out to disk.
-    def test_flush
-        prov = mkprovider
-
-        prov.filetype = :ram
-        prov.default_target = :yayness
-
-        # Create some resources.
-        one = mkresource "one", :one => "a", :two => "c", :target => :yayness
-        two = mkresource "two", :one => "b", :two => "d", :target => :yayness
-        resources = {"one" => one, "two" => two}
-
-        # Write out a file with different data.
-        prov.target_object(:yayness).write "one b d\ntwo a c"
-
-        prov.prefetch(resources)
-
-        # Apply and flush the first resource.
-        assert_nothing_raised do
-            apply(one)
-        end
-        assert_nothing_raised { one.flush }
-
-        # Make sure it didn't clear out our property hash
-        assert_equal(:a, one.provider.one)
-        assert_equal(:c, one.provider.two)
-
-        # And make sure it's right on disk
-        assert(prov.target_object(:yayness).read.include?("one a c"),
-            "Did not write out correct data")
-
-        # Make sure the second resource has not been modified
-        assert_equal("a", two.provider.one, "Two was flushed early")
-        assert_equal("c", two.provider.two, "Two was flushed early")
-
-        # And on disk
-        assert(prov.target_object(:yayness).read.include?("two a c"),
-            "Wrote out other resource")
-
-        # Now fetch the data again and make sure we're still right
-        assert_nothing_raised { prov.prefetch(resources) }
-        assert_equal("a", one.provider.one)
-        assert_equal("a", two.provider.one)
-
-        # Now flush the second resource and make sure it goes well
-        assert_nothing_raised { apply(two) }
-        assert_nothing_raised { two.flush }
-
-        # And make sure it didn't clear our hash
-        assert_equal(:b, two.provider.one)
-    end
-
-    # Make sure it works even if the file does not currently exist
-    def test_creating_file
-        prov = mkprovider
-        prov.clear
-
-        prov.default_target = :basic
-
-        resource = mkresource "yay", :target => :basic, :one => "a", :two => "c"
-
-        assert_equal(:present, resource.should(:ensure))
-
-        apply(resource)
-
-        assert_nothing_raised do
-            resource.flush
-        end
-
-        assert_equal("yay a c\n", prov.target_object(:basic).read,
-            "Did not create file")
-
-        # Make a change
-        resource.provider.one = "b"
-
-        # Flush it
-        assert_nothing_raised do
-            resource.flush
-        end
-
-        # And make sure our resource doesn't appear twice in the file.
-        assert_equal("yay b c\n", prov.target_object(:basic).read,
-            "Wrote record to file twice")
-    end
-
-    # Make sure a record can switch targets.
-    def test_switching_targets
-        prov = mkprovider
-
-        prov.filetype = :ram
-        prov.default_target = :first
-
-        # Make three resources, one for each target and one to switch
-        first = mkresource "first", :target => :first
-        second = mkresource "second", :target => :second
-        mover = mkresource "mover", :target => :first
-
-        [first, second, mover].each do |m|
-            assert_nothing_raised("Could not apply %s" % m[:name]) do
-                apply(m)
-            end
-        end
-
-        # Flush.
-        [first, second, mover].each do |m|
-            assert_nothing_raised do
-                m.flush
-            end
-        end
-
-        check = proc do |target, name|
-            assert(prov.target_object(target).read.include?("%s a c" % name),
-                "Did not sync %s" % name)
-        end
-        # Make sure the data is there
-        check.call(:first, :first)
-        check.call(:second, :second)
-        check.call(:first, :mover)
-
-        # Now change the target for the mover
-        mover[:target] = :second
-
-        # Apply it
-        assert_nothing_raised do
-            apply(mover)
-        end
-
-        # Flush
-        assert_nothing_raised do
-            mover.flush
-        end
-
-        # Make sure the data is there
-        check.call(:first, :first)
-        check.call(:second, :second)
-        check.call(:second, :mover)
-
-        # And make sure the mover is no longer in the first file
-        assert(prov.target_object(:first) !~ /mover/,
-            "Mover was not removed from first file")
-    end
-
-    # Make sure that 'ensure' correctly calls 'sync' on all properties.
-    def test_ensure
-        prov = mkprovider
-
-        prov.filetype = :ram
-        prov.default_target = :first
-
-        # Make two resources, one that starts on disk and one that doesn't
-        ondisk = mkresource "ondisk", :target => :first
-        notdisk = mkresource "notdisk", :target => :first
-
-        prov.target_object(:first).write "ondisk a c\n"
-        prov.prefetch("ondisk" => ondisk, "notdisk" => notdisk)
-
-        assert_equal(:present, notdisk.should(:ensure),
-            "Did not get default ensure value")
-
-        # Try creating the object
-        assert_nothing_raised { notdisk.provider.create() }
-
-        # Now make sure all of the data is copied over correctly.
-        notdisk.class.validproperties.each do |property|
-            assert_equal(notdisk.should(property), notdisk.provider.property_hash[property],
-                "%s was not copied over during creation" % property)
-        end
-
-        # Flush it to disk and make sure it got copied down
-        assert_nothing_raised do
-            notdisk.flush
-        end
-
-        assert(prov.target_object(:first).read =~ /^notdisk/,
-            "Did not write out object to disk")
-        assert(prov.target_object(:first).read =~ /^ondisk/,
-            "Lost object on disk")
-
-        # Make sure our on-disk resource behaves appropriately.
-        assert_equal(:present, ondisk.provider.ensure)
-
-        # Now destroy the object
-        assert_nothing_raised { notdisk.provider.destroy() }
-
-        assert_nothing_raised { notdisk.flush }
-
-        # And make sure it's no longer present
-        assert(prov.target_object(:first).read !~ /^notdisk/,
-            "Did not remove thing from disk")
-        assert(prov.target_object(:first).read =~ /^ondisk/,
-            "Lost object on disk")
-        assert_equal(:present, ondisk.provider.ensure)
-    end
-
-    def test_absent_fields
-        prov = @type.provide(:record, :parent => Puppet::Provider::ParsedFile) do
-            record_line :record, :fields => %w{name one two},
-                :separator => "\s"
-        end
-        cleanup { @type.unprovide(:record) }
-
-        line = prov.parse_line("a  d")
-
-        assert_equal("a", line[:name], "field name was not set")
-        assert_equal(:absent, line[:one], "field one was not set to absent")
-
-        # Now use a different provider with a non-blank "absent"
-        prov = @type.provide(:cronstyle, :parent => Puppet::Provider::ParsedFile) do
-            record_line :cronstyle, :fields => %w{name one two},
-                :separator => "\s", :absent => "*"
-        end
-        cleanup { @type.unprovide(:cronstyle) }
-        line = prov.parse_line("a * d")
-
-        assert_equal("a", line[:name], "field name was not set")
-        assert_equal(:absent, line[:one], "field one was not set to absent")
-    end
-
-    # This test is because in x2puppet I was having problems where multiple
-    # retrievals somehow destroyed the 'is' values.
-    def test_value_retrieval
-        prov = mkprovider
-        prov.default_target = :yayness
-
-        prov.target_object(:yayness).write "bill a c\njill b d"
-
-        list = @type.instances
-
-        bill = list.find { |r| r[:name] == "bill" }
-        jill = list.find { |r| r[:name] == "jill" }
-        assert(bill, "Could not find bill")
-        assert(jill, "Could not find jill")
-
-        prov = bill.provider
-
-        4.times do |i|
-            assert(prov.one, "Did not get a value for 'one' on try %s" % (i + 1))
-        end
-
-        # First make sure we can retrieve values multiple times from the
-        # provider
-        bills_values = nil
-        assert_nothing_raised do
-            bills_values = bill.retrieve
-        end
-
-        assert(bills_values[bill.property(:one)], 
-               "Bill does not have a value for 'one'")
-        assert(bills_values[bill.property(:one)], 
-               "Bill does not have a value for 'one' on second try")
-        assert_nothing_raised do
-            bill.retrieve
-        end
-        assert(bills_values[bill.property(:one)], 
-               "bill's value for 'one' disappeared")
-    end
-
-    # Make sure that creating a new resource finds existing records in memory
-    def test_initialize_finds_records
-        prov = mkprovider
-        prov.default_target = :yayness
-
-        prov.target_object(:yayness).write "bill a c\njill b d"
-
-        prov.prefetch
-
-        # Now make a resource
-        bill = nil
-        assert_nothing_raised do
-            bill = @type.create :name => "bill"
-        end
-
-        assert_equal("a", bill.provider.one,
-            "Record was not found in memory")
-    end
-
-    # Make sure invalid fields always show up as insync
-    def test_invalid_fields
-        prov = @type.provide(:test, :parent => Puppet::Provider::ParsedFile,
-            :filetype => :ram, :default_target => :yayness) do
-            record_line :test, :fields => %w{name two}
-        end
-        cleanup do @type.unprovide(:test) end
-
-        bill = nil
-        assert_nothing_raised do
-            bill = @type.create :name => "bill",
-                :one => "a", :two => "c"
-        end
-
-        assert_apply(bill)
-
-        prov.prefetch
-        current_value = nil
-        assert_nothing_raised do
-            current_value = bill.retrieve
-        end
-
-        assert(bill.insync?(current_value),
-            "An invalid field marked the record out of sync")
-    end
-
-    # Make sure we call the prefetch hook at the right place.
-    def test_prefetch_hook
-        prov = @type.provide(:test, :parent => Puppet::Provider::ParsedFile,
-            :filetype => :ram, :default_target => :yayness) do
-
-            def self.prefetch_hook(records)
-                records
-            end
-
-            record_line :test, :fields => %w{name two}
-        end
-        cleanup do @type.unprovide(:test) end
-
-        target = "target"
-
-        records = [{:target => "nope"}]
-        targeted = {:target => "target"}
-        prov.send(:instance_variable_set, "@records", records)
-        prov.expects(:retrieve).with(target).returns([targeted])
-
-        prov.expects(:prefetch_hook).with([targeted]).returns([targeted])
-
-        prov.prefetch_target(target)
-    end
-
-    # #529
-    def test_keep_content_with_target
-        mkprovider
-        @provider.filetype = :flat
-        dpath = tempfile
-        opath = tempfile
-        @provider.default_target = dpath
-
-        dtarget = @provider.target_object(dpath)
-        otarget = @provider.target_object(opath)
-
-        dtarget.write("dname a c\n")
-        otarget.write("oname b d\n")
-
-        # Now make a resource that targets elsewhat.
-        res = @type.create(:name => "test", :one => "a", :two => "c",
-            :target => opath)
-
-        assert(res.property(:target), "Target is a parameter, not a property")
-
-        assert_apply(res)
-
-        assert_equal("oname b d\ntest a c\n", otarget.read,
-            "did not get correct results in specified target")
-    end
-end
-
-
diff --git a/test/ral/providers/port/parsed.rb b/test/ral/providers/port/parsed.rb
deleted file mode 100755
index 01ccd3d..0000000
--- a/test/ral/providers/port/parsed.rb
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'puppettest'
-#require 'puppettest/fileparsing'
-#require 'puppet/type/port'
-#require 'test/unit'
-#require 'facter'
-#
-#class TestParsedPort < Test::Unit::TestCase
-#	include PuppetTest
-#	include PuppetTest::FileParsing
-#
-#    def setup
-#        super
-#        @provider = Puppet.type(:port).provider(:parsed)
-#        @oldfiletype = @provider.filetype
-#    end
-#
-#    def teardown
-#        Puppet::Util::FileType.filetype(:ram).clear
-#        @provider.filetype = @oldfiletype
-#        @provider.clear
-#        super
-#    end
-#    
-#    # Generate a line from a hash.  The line might include '\n'.
-#    def genline(hash)
-#        line = [hash[:name], "#{hash[:number]}/%s"].join("\t\t")
-#        if hash[:alias]
-#            line += "\t\t" + hash[:alias].join(" ")
-#        end
-#        if hash[:description]
-#            line += "\t# " + hash[:description]
-#        end
-#
-#        return hash[:protocols].collect { |p| line % p }.join("\n")
-#    end
-#
-#    # Parse our sample data and make sure we regenerate it correctly.
-#    def test_portsparse
-#        files = fakedata("data/types/port")
-#        files.each do |file|
-#            oldtarget = @provider.default_target
-#            cleanup do
-#                @provider.default_target = oldtarget
-#            end
-#            @provider.default_target = file
-#
-#            assert_nothing_raised("failed to fetch %s" % file) {
-#                @provider.prefetch
-#            }
-#
-#            hashes = @provider.target_records(file).find_all { |i| i.is_a? Hash }
-#            assert(hashes.length > 0, "Did not create any hashes")
-#            dns = hashes.find { |i| i[:name] == "domain" }
-#
-#            assert(dns, "Did not retrieve dns record")
-#            assert_equal("53", dns[:number], "dns number is wrong")
-#
-#            text = nil
-#            assert_nothing_raised("failed to generate %s" % file) do 
-#                text = @provider.to_file(@provider.target_records(file))
-#            end
-#
-#            oldlines = File.readlines(file)
-#            newlines = text.chomp.split "\n"
-#            regex = /^(\S+)\s+(\d+)\/(\w+)/
-#            oldlines.zip(newlines).each do |old, new|
-#                if omatch = regex.match(old) 
-#                    assert(newmatch = regex.match(new),
-#                        "Lines were not equivalent: %s vs %s" %
-#                        [old.inspect, new.inspect]
-#                    )
-#                    oldfields = omatch.captures and
-#                    newfields = newmatch.captures
-#
-#                    assert_equal(oldfields, newfields,
-#                        "Lines were not equivalent: %s vs %s" %
-#                        [old.inspect, new.inspect]
-#                    )
-#                end
-#            #    assert_equal(old.chomp.gsub(/\s+/, ''),
-#            #        new.gsub(/\s+/, ''),
-#            #        "Lines are not equal in %s" % file)
-#            end
-#        end
-#    end
-#
-#    # Try parsing the different forms of lines
-#    def test_parsing
-#        # Each of the different possible values for each field.
-#        options = {
-#            :name => "service",
-#            :number => "1",
-#            :alias => [nil, ["null"], %w{null sink}, %w{null sink other}],
-#            :description => [nil, "my description"],
-#            :protocols => [%w{tcp}, %w{udp}, %w{tcp udp}]
-#        }
-#
-#        # Now go through all of the different iterations and make sure we
-#        # parse them correctly.
-#        keys = options.keys
-#
-#        name = options[:name]
-#        number = options[:number]
-#        options[:alias].each do |al|
-#            options[:description].each do |desc|
-#                options[:protocols].each do |proto|
-#                    hash = {:name => name, :number => number, :alias => al,
-#                        :description => desc, :protocols => proto}
-#                    line = genline(hash)
-#
-#                    # Try parsing it
-#                    record = nil
-#                    assert_nothing_raised do
-#                        record = @provider.parse_line(line)
-#                    end
-#                    assert(record, "Did not get record returned")
-#                    hash.each do |param, value|
-#                        if value
-#                            assert_equal(value, record[param],
-#                                "did not get %s out of '%s'" % [param, line])
-#                        end
-#                    end
-#
-#                    # Now make sure it generates correctly
-#                    assert_equal(line, @provider.to_line(record),
-#                        "Did not generate %s correctly" % line)
-#                end
-#            end
-#        end
-#    end
-#
-#    # Make sure we correctly join lines by name, so that they're considered
-#    # a single record.
-#    def test_lines
-#        result = nil
-#        assert_nothing_raised do
-#            result = @provider.lines(
-#"smtp        25/tcp      mail
-#time        37/tcp      timserver
-#time        37/udp      timserver
-#rlp     39/udp      resource    # resource location
-#tacacs      49/tcp              # Login Host Protocol (TACACS)
-#nameserver  42/tcp      name        # IEN 116
-#whois       43/tcp      nicname
-#tacacs      49/udp
-#re-mail-ck  50/tcp              # Remote Mail Checking Protocol
-#domain      53/tcp      nameserver  # name-domain server
-#re-mail-ck  50/udp
-#domain      53/udp      nameserver"
-#            )
-#        end
-#
-#        assert_equal([
-#"smtp        25/tcp      mail",
-#"time        37/tcp      timserver
-#time        37/udp      timserver",
-#"rlp     39/udp      resource    # resource location",
-#"tacacs      49/tcp              # Login Host Protocol (TACACS)
-#tacacs      49/udp",
-#"nameserver  42/tcp      name        # IEN 116",
-#"whois       43/tcp      nicname",
-#"re-mail-ck  50/tcp              # Remote Mail Checking Protocol
-#re-mail-ck  50/udp",
-#"domain      53/tcp      nameserver  # name-domain server
-#domain      53/udp      nameserver"
-#], result)
-#
-#    end
-#
-#    # Make sure we correctly handle port merging.
-#    def test_port_merge
-#        fields = [:name, :number, :protocols, :alias, :description]
-#        base = %w{a 1}
-#
-#        z = proc { |ary| h = {}; fields.zip(ary) { |p,v| h[p] = v if v }; h }
-#
-#        # Make sure our zipper is working
-#        assert_equal({:name => "a", :number => "1", :protocols => %w{tcp udp}},
-#            z.call(["a", "1", %w{tcp udp}])
-#        )
-#
-#        # Here we go through the different options, just testing each key
-#        # separately.
-#        {
-#            # The degenerate case - just two protocols
-#            [%w{tcp udp}] => [[%w{tcp}], [%w{udp}]],
-#
-#            # one alias
-#            [%w{tcp udp}, %w{A}] => [[%w{tcp}, %w{A}], [%w{udp}]],
-#
-#            # Other side
-#            [%w{tcp udp}, %w{A}] => [[%w{tcp}], [%w{udp}], %w{A}],
-#
-#            # Both
-#            [%w{tcp udp}, %w{A}] => [[%w{tcp}, %w{A}], [%w{udp}], %w{A}],
-#
-#            # Adding aliases
-#            [%w{tcp udp}, %w{A B}] => [[%w{tcp}, %w{A}], [%w{udp}], %w{B}],
-#
-#            # Merging aliases
-#            [%w{tcp udp}, %w{A B}] => [[%w{tcp}, %w{A B}], [%w{udp}], %w{B}],
-#
-#            # One description
-#            [%w{tcp udp}, nil, "desc"] => [[%w{tcp}, nil, "desc"], [%w{udp}] ],
-#
-#            # other side
-#            [%w{tcp udp}, nil, "desc"] => [[%w{tcp}], [%w{udp}, nil, "desc"] ],
-#
-#            # Conflicting -- first hash wins
-#            [%w{tcp udp}, nil, "first"] =>
-#                [[%w{tcp}, nil, "first"], [%w{udp}, nil, "desc"] ],
-#        }.each do |result, hashes|
-#            assert_equal(
-#                z.call(base + result),
-#                @provider.port_merge(
-#                    z.call(base + hashes[0]),
-#                    z.call(base + hashes[1])
-#                ),
-#                "Did not get %s out of %s + %s" % [
-#                    result.inspect,
-#                    hashes[0].inspect,
-#                    hashes[1].inspect
-#                ]
-#            )
-#        end
-#    end
-#end
-
diff --git a/test/ral/providers/provider.rb b/test/ral/providers/provider.rb
deleted file mode 100755
index 70f606a..0000000
--- a/test/ral/providers/provider.rb
+++ /dev/null
@@ -1,529 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'facter'
-
-class TestProvider < Test::Unit::TestCase
-	include PuppetTest
-
-    def echo
-        echo = Puppet::Util.binary("echo")
-
-        unless echo
-            raise "Could not find 'echo' binary; cannot complete test"
-        end
-
-        return echo
-    end
-
-    def newprovider
-        # Create our provider
-        provider = Class.new(Puppet::Provider) do
-            @name = :fakeprovider
-        end
-        provider.initvars
-
-        return provider
-    end
-
-    def setup
-        super
-        @type = Puppet::Type.newtype(:provider_test) do
-            newparam(:name) {}
-            ensurable
-        end
-        cleanup { Puppet::Type.rmtype(:provider_test) }
-    end
-
-    def test_confine_defaults_to_suitable
-
-        provider = newprovider
-        assert(provider.suitable?, "Marked unsuitable with no confines")
-    end
-
-    def test_confine_results
-        {
-            {:true => true} => true,
-            {:true => false} => false,
-            {:false => false} => true,
-            {:false => true} => false,
-            {:operatingsystem => Facter.value(:operatingsystem)} => true,
-            {:operatingsystem => :yayness} => false,
-            {:nothing => :yayness} => false,
-            {:exists => echo} => true,
-            {:exists => "/this/file/does/not/exist"} => false,
-        }.each do |hash, result|
-            provider = newprovider
-
-            # First test :true
-            hash.each do |test, val|
-                assert_nothing_raised do
-                    provider.confine test => val
-                end
-            end
-
-            assert_equal(result, provider.suitable?, "Failed for %s" % [hash.inspect])
-
-            provider.initvars
-        end
-    end
-
-    def test_multiple_confines_do_not_override
-        provider = newprovider
-
-        # Make sure multiple confines don't overwrite each other
-        provider.confine :true => false
-        assert(! provider.suitable?)
-        provider.confine :true => true
-        assert(! provider.suitable?)
-    end
-
-    def test_one_failed_confine_is_sufficient
-
-        provider = newprovider
-
-        # Make sure we test multiple of them, and that a single false wins
-        provider.confine :true => true, :false => false
-        assert(provider.suitable?)
-        provider.confine :true => false
-        assert(! provider.suitable?)
-    end
-
-    # #1197 - the binary should not be
-    def test_command_checks_for_binaries_each_time
-        provider = newprovider
-
-        provider.commands :testing => "/no/such/path"
-
-        provider.stubs(:binary).returns "/no/such/path"
-
-        provider.command(:testing)
-        assert_equal("/no/such/path", provider.command(:testing), "Did not return correct binary path")
-    end
-
-    def test_command
-        {:echo => "echo", :echo_with_path => echo, :missing => "nosuchcommand", :missing_qualified => "/path/to/nosuchcommand"}.each do |name, command|
-            provider = newprovider
-            assert_nothing_raised("Could not define command %s with argument %s for provider" % [name, command]) do
-                provider.commands(name => command)
-            end
-
-            if name.to_s =~ /missing/
-                assert_nil(provider.command(name), "Somehow got a response for missing commands")
-                assert(! provider.suitable?, "Provider was considered suitable with missing command")
-                next # skip, since we don't do any validity checking here.
-            end
-
-            assert_equal(echo, provider.command(name), "Did not get correct path for echo")
-            assert(provider.suitable?, "Provider was not considered suitable with 'echo'")
-
-            # Now make sure they both work
-            inst = provider.new(nil)
-            [provider, inst].each do |thing|
-                assert_nothing_raised("Could not call %s on %s" % [command, thing]) do
-                    out = thing.send(name, "some", "text")
-                    assert_equal("some text\n", out)
-                end
-            end
-
-            assert(provider.suitable?, "Provider considered unsuitable")
-
-            # Now add an invalid command
-            assert_nothing_raised do
-                provider.commands :fake => "nosuchcommanddefinitely"
-            end
-            assert(! provider.suitable?, "Provider considered suitable")
-
-            assert_nil(provider.command(:fake), "Got a value for missing command")
-            assert_raise(Puppet::Error) do
-                provider.fake
-            end
-
-            Puppet[:trace] = false
-            assert_raise(Puppet::DevError) do
-                provider.command(:nosuchcmd)
-            end
-
-            # Lastly, verify that we can find our superclass commands
-            newprov = Class.new(provider)
-            newprov.initvars
-
-            assert_equal(echo, newprov.command(name))
-        end
-    end
-
-    def test_default?
-        provider = newprovider
-
-        assert(! provider.default?, "Was considered default with no settings")
-
-        assert_nothing_raised do
-            provider.defaultfor :operatingsystem => Facter.value(:operatingsystem)
-        end
-
-        assert(provider.default?, "Was not considered default")
-
-        # Make sure any true value is sufficient.
-        assert_nothing_raised do
-            provider.defaultfor :operatingsystem => [
-                :yayness, :rahness,
-                Facter.value(:operatingsystem)
-            ]
-        end
-
-        assert(provider.default?, "Was not considered default")
-
-        # Now make sure that a random setting returns false.
-        assert_nothing_raised do
-            provider.defaultfor :operatingsystem => :yayness
-        end
-
-        assert(! provider.default?, "Was considered default")
-    end
-
-    # Make sure that failed commands get their output in the error.
-    def test_outputonfailure
-        provider = newprovider
-
-        dir = tstdir()
-        file = File.join(dir, "mycmd")
-        sh = Puppet::Util.binary("sh")
-        File.open(file, "w") { |f|
-            f.puts %{#!#{sh}
-            echo A Failure >&2
-            exit 2
-            }
-        }
-        File.chmod(0755, file)
-
-        provider.commands :cmd => file
-
-        inst = provider.new(nil)
-
-        assert_raise(Puppet::ExecutionFailure) do
-            inst.cmd "some", "arguments"
-        end
-
-        out = nil
-        begin
-            inst.cmd "some", "arguments"
-        rescue Puppet::ExecutionFailure => detail
-            out = detail.to_s
-        end
-
-        assert(out =~ /A Failure/,
-               "Did not receive command output on failure")
-
-        assert(out =~ /Execution of/,
-               "Did not receive info wrapper on failure")
-    end
-
-    def test_mk_resource_methods
-        prov = newprovider
-        resourcetype = Struct.new(:validproperties, :parameters)
-        m = resourcetype.new([:prop1, :prop2], [:param1, :param2])
-        prov.resource_type = m
-
-        assert_nothing_raised("could not call mk_resource_methods") do
-            prov.mk_resource_methods
-        end
-
-        obj = prov.new(nil)
-
-        %w{prop1 prop2 param1 param2}.each do |param|
-            assert(prov.public_method_defined?(param), "no getter for %s" % param)
-            assert(prov.public_method_defined?(param + "="), "no setter for %s" % param)
-
-            assert_equal(:absent, obj.send(param),
-                "%s did not default to :absent")
-            val = "testing %s" % param
-            assert_nothing_raised("Could not call setter for %s" % param) do
-                obj.send(param + "=", val)
-            end
-            assert_equal(val, obj.send(param),
-                "did not get correct value for %s" % param)
-        end
-    end
-
-    # Make sure optional commands get looked up but don't affect suitability.
-    def test_optional_commands
-        type = Puppet::Type.newtype(:optional_commands) {}
-
-        cleanup { Puppet::Type.rmtype(:optional_commands) }
-
-        # Define a provider with mandatory commands
-        required = type.provide(:required) {
-            commands :missing => "/no/such/binary/definitely"
-        }
-
-        # And another with optional commands
-        optional = type.provide(:optional) {
-            optional_commands :missing => "/no/such/binary/definitely"
-        }
-
-        assert(! required.suitable?, "Provider with missing commands considered suitable")
-        assert_nil(required.command(:missing), "Provider returned non-nil from missing command")
-
-        assert(optional.suitable?, "Provider with optional commands considered unsuitable")
-        assert_nil(optional.command(:missing), "Provider returned non-nil from missing command")
-
-        assert_raise(Puppet::Error, "Provider did not fail when missing command was called") do
-            optional.missing
-        end
-    end
-
-    # Disabling, since I might not keep this interface
-    def disabled_test_read_and_each
-        # Create a new provider
-        provider = @type.provide(:testing)
-
-        assert_raise(Puppet::DevError, "Did not fail when :read was not overridden") do
-            provider.read
-        end
-
-        children = [:one, :two]
-        provider.meta_def(:read) do
-            children
-        end
-
-        result = []
-        assert_nothing_raised("could not call 'each' on provider class") do
-            provider.each { |i| result << i }
-        end
-
-        assert_equal(children, result, "did not get correct list from each")
-
-        assert_equal(children, provider.collect { |i| i }, "provider does not include enumerable")
-    end
-
-    def test_source
-        base = @type.provide(:base)
-
-        assert_equal(:base, base.source, "source did not default correctly")
-        assert_equal(:base, base.source, "source did not default correctly")
-
-        sub = @type.provide(:sub, :parent => :base)
-
-        assert_equal(:sub, sub.source, "source did not default correctly for sub class")
-        assert_equal(:sub, sub.source, "source did not default correctly for sub class")
-
-        other = @type.provide(:other, :parent => :base, :source => :base)
-
-        assert_equal(:base, other.source, "source did not override")
-        assert_equal(:base, other.source, "source did not override")
-    end
-
-    # Make sure we can initialize with either a resource or a hash, or none at all.
-    def test_initialize
-        test = @type.provide(:test)
-
-        inst = @type.create :name => "boo"
-        prov = nil
-        assert_nothing_raised("Could not init with a resource") do
-            prov = test.new(inst)
-        end
-        assert_equal(prov.resource, inst, "did not set resource correctly")
-        assert_equal(inst.name, prov.name, "did not get resource name")
-
-        params = {:name => :one, :ensure => :present}
-        assert_nothing_raised("Could not init with a hash") do
-            prov = test.new(params)
-        end
-        assert_equal(params, prov.send(:instance_variable_get, "@property_hash"), "did not set resource correctly")
-        assert_equal(:one, prov.name, "did not get name from hash")
-
-        assert_nothing_raised("Could not init with no argument") do
-            prov = test.new()
-        end
-
-        assert_raise(Puppet::DevError, "did not fail when no name is present") do
-            prov.name
-        end
-    end
-end
-
-class TestProviderFeatures < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @type = Puppet::Type.newtype(:feature_test) do
-            newparam(:name) {}
-            ensurable
-        end
-        cleanup { Puppet::Type.rmtype(:feature_test) }
-
-        @features = {:numeric => [:one, :two], :alpha => [:a, :b]}
-
-        @features.each do |name, methods|
-            assert_nothing_raised("Could not define features") do
-                @type.feature(name, "boo", :methods => methods)
-            end
-        end
-    end
-
-    # Give them the basic run-through.
-    def test_method_features
-        @providers = {:numbers => @features[:numeric], :letters => @features[:alpha]}
-        @providers[:both] = @features[:numeric] + @features[:alpha]
-        @providers[:mixed] = [:one, :b]
-        @providers[:neither] = [:something, :else]
-
-        @providers.each do |name, methods|
-            assert_nothing_raised("Could not create provider %s" % name) do
-                @type.provide(name) do
-                    methods.each do |name|
-                        define_method(name) {}
-                    end
-                end
-            end
-        end
-
-        resource = @type.create(:name => "foo")
-        {:numbers => [:numeric], :letters => [:alpha], :both => [:numeric, :alpha],
-            :mixed => [], :neither => []}.each do |name, should|
-                should.sort! { |a,b| a.to_s <=> b.to_s }
-                provider = @type.provider(name)
-                assert(provider, "Could not find provider %s" % name)
-                assert_equal(should, provider.features,
-                    "Provider %s has incorrect features" % name)
-
-                inst = provider.new(resource)
-                # Make sure the boolean methods work on both the provider and
-                # instance.
-                @features.keys.each do |feature|
-                    method = feature.to_s + "?"
-                    assert(inst.respond_to?(method),
-                        "No boolean instance method for %s on %s" %
-                        [name, feature])
-                    assert(provider.respond_to?(method),
-                        "No boolean class method for %s on %s" % [name, feature])
-
-                    if should.include?(feature)
-                        assert(provider.feature?(feature),
-                            "class missing feature? %s" % feature)
-                        assert(inst.feature?(feature),
-                            "instance missing feature? %s" % feature)
-                        assert(provider.send(method),
-                            "class missing feature %s" % feature)
-                        assert(inst.send(method),
-                            "instance missing feature %s" % feature)
-                        assert(inst.satisfies?(feature),
-                            "instance.satisfy %s returned false" % feature)
-                    else
-                        assert(! provider.feature?(feature),
-                            "class has feature? %s" % feature)
-                        assert(! inst.feature?(feature),
-                            "instance has feature? %s" % feature)
-                        assert(! provider.send(method),
-                            "class has feature %s" % feature)
-                        assert(! inst.send(method),
-                            "instance has feature %s" % feature)
-                        assert(! inst.satisfies?(feature),
-                            "instance.satisfy %s returned true" % feature)
-                    end
-                end
-
-            end
-
-        Puppet[:trace] = true
-        Puppet::Type.loadall
-        Puppet::Type.eachtype do |type|
-            assert(type.respond_to?(:feature),
-                "No features method defined for %s" % type.name)
-        end
-    end
-
-    def test_has_feature
-        # Define a new feature that has no methods
-        @type.feature(:nomeths, "desc")
-
-        # Define a provider with nothing
-        provider = @type.provide(:nothing) {}
-
-        assert(provider.respond_to?(:has_features),
-            "Provider did not get 'has_features' method added")
-        assert(provider.respond_to?(:has_feature),
-            "Provider did not get the 'has_feature' alias method")
-
-        # One with the numeric methods and nothing else
-        @type.provide(:numbers) do
-            define_method(:one) {}
-            define_method(:two) {}
-        end
-        
-        # Another with the numbers and a declaration
-        @type.provide(:both) do
-            define_method(:one) {}
-            define_method(:two) {}
-
-            has_feature :alpha
-        end
-        
-        # And just the declaration
-        @type.provide(:letters) do
-            has_feature :alpha
-        end
-
-        # And a provider that declares it has our methodless feature.
-        @type.provide(:none) do
-            has_feature :nomeths
-        end
-
-        should = {:nothing => [], :both => [:numeric, :alpha],
-            :letters => [:alpha], :numbers => [:numeric],
-            :none => [:nomeths]}
-
-        should.each do |name, features|
-            provider_class = @type.provider(name)
-            provider = provider_class.new({})
-
-            assert(provider, "did not get provider named %s" % name)
-            features.sort! { |a,b| a.to_s <=> b.to_s }
-            assert_equal(features, provider.features, "Got incorrect feature list for provider instance %s" % name)
-            assert_equal(features, provider_class.features, "Got incorrect feature list for provider class %s" % name)
-            features.each do |feat| 
-                assert(provider.feature?(feat), "Provider instance %s did not have feature %s" % [name, feat])
-                assert(provider_class.feature?(feat), "Provider class %s did not have feature %s" % [name, feat])
-            end
-        end
-    end
-
-    def test_supports_parameter?
-        # Make some parameters for each setting
-        @type.newparam(:neither) {}
-        @type.newparam(:some, :required_features => :alpha)
-        @type.newparam(:both, :required_features => [:alpha, :numeric])
-
-        # and appropriate providers
-        nope = @type.provide(:nope) {}
-        maybe = @type.provide(:maybe) { has_feature(:alpha) }
-        yep = @type.provide(:yep) { has_features(:alpha, :numeric) }
-
-        # Now make sure our providers answer correctly.
-        [nope, maybe, yep].each do |prov|
-            assert(prov.respond_to?(:supports_parameter?), "%s does not respond to :supports_parameter?" % prov.name)
-            case prov.name
-            when :nope:
-                supported = [:neither]
-                un = [:some, :both]
-            when :maybe:
-                supported = [:neither, :some]
-                un = [:both]
-            when :yep:
-                supported = [:neither, :some, :both]
-                un = []
-            end
-
-            supported.each do |param|
-                assert(prov.supports_parameter?(param), "%s was not supported by %s" % [param, prov.name])
-            end
-            un.each do |param|
-                assert(! prov.supports_parameter?(param), "%s was incorrectly supported by %s" % [param, prov.name])
-            end
-        end
-    end
-end
-
diff --git a/test/ral/providers/service/base.rb b/test/ral/providers/service/base.rb
deleted file mode 100755
index 934127a..0000000
--- a/test/ral/providers/service/base.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke A. Kanies on 2007-01-28.
-#  Copyright (c) 2007. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'puppettest'
-
-class TestBaseServiceProvider < Test::Unit::TestCase
-	include PuppetTest
-
-	def test_base
-	    running = tempfile()
-	    
-	    commands = {}
-	    %w{touch rm test}.each do |c|
-    	    path = %x{which #{c}}.chomp
-    	    if path == ""
-    	        $stderr.puts "Cannot find '#{c}'; cannot test base service provider"
-    	        return
-            end
-            commands[c.to_sym] = path
-        end
-	    service = Puppet::Type.type(:service).create(
-	        :name => "yaytest", :provider => :base,
-	        :start => "%s %s" % [commands[:touch], running],
-	        :status => "%s -f %s" % [commands[:test], running],
-	        :stop => "%s %s" % [commands[:rm], running]
-	    )
-	    
-	    provider = service.provider
-	    assert(provider, "did not get base provider")
-	    
-	    assert_nothing_raised do
-	        provider.start
-        end
-        assert(FileTest.exists?(running), "start was not called correctly")
-        assert_nothing_raised do
-            assert_equal(:running, provider.status, "status was not returned correctly")
-        end
-        assert_nothing_raised do
-            provider.stop
-        end
-        assert(! FileTest.exists?(running), "stop was not called correctly")
-        assert_nothing_raised do
-            assert_equal(:stopped, provider.status, "status was not returned correctly")
-        end
-    end
-    
-    # Testing #454
-    def test_that_failures_propagate
-        nope = "/no/such/command"
-	    service = Puppet::Type.type(:service).create(
-	        :name => "yaytest", :provider => :base,
-	        :start => nope,
-	        :status => nope,
-	        :stop => nope,
-	        :restart => nope
-	    )
-
-	    provider = service.provider
-	    assert(provider, "did not get base provider")
-
-        # We can't fail well when status is messed up, because we depend on the return code
-        # of the command for data.
-        %w{start stop restart}.each do |command|
-            assert_raise(Puppet::Error, "did not throw error when %s failed" % command) do
-                provider.send(command)
-            end
-        end
-    end
-end
-
diff --git a/test/ral/providers/service/debian.rb b/test/ral/providers/service/debian.rb
deleted file mode 100755
index f6c0004..0000000
--- a/test/ral/providers/service/debian.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by David Schmitt on 2007-09-13
-#  Copyright (c) 2007. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'puppettest'
-
-class TestDebianServiceProvider < Test::Unit::TestCase
-    include PuppetTest
-    include Puppet::Util
-
-    def prepare_provider(servicename, output)
-        @resource = mock 'resource'
-        @resource.stubs(:[]).with(:name).returns("myresource")
-        provider = Puppet::Type.type(:service).provider(:debian).new(@resource)
-
-        provider.stubs(:update).returns(output)
-
-        provider
-    end
-
-    def assert_enabled( servicename, output)
-        provider = prepare_provider( servicename, output )
-        assert_equal(:true, provider.enabled?,
-                     "Service provider=debian thinks service is disabled, when it isn't")
-    end
-
-    def assert_disabled( servicename, output )
-        provider = prepare_provider( servicename, output )
-        assert_equal(:false, provider.enabled?,
-                     "Service provider=debian thinks service is enabled, when it isn't")
-    end
-
-    # Testing #822
-    def test_file_rc
-        # These messages are from file-rc's
-        # update-rc.d -n -f $service remove
-        assert_enabled("test1", "/etc/runlevel.tmp not installed as /etc/runlevel.conf\n")
-        assert_disabled("test2", "Nothing to do.\n")
-    end
-
-    def test_sysv_rc
-        # These messages are from file-rc's
-        # update-rc.d -n -f $service remove
-        assert_enabled("test3", """ Removing any system startup links for /etc/init.d/test3 ...
-    /etc/rc0.d/K11test3
-    /etc/rc1.d/K11test3
-    /etc/rc2.d/S89test3
-    /etc/rc3.d/S89test3
-    /etc/rc4.d/S89test3
-    /etc/rc5.d/S89test3
-    /etc/rc6.d/K11test3
-""")
-        assert_disabled("test4", " Removing any system startup links for /etc/init.d/test4 ...\n")
-    end
-end
diff --git a/test/ral/providers/sshkey/parsed.rb b/test/ral/providers/sshkey/parsed.rb
deleted file mode 100755
index 4f18e64..0000000
--- a/test/ral/providers/sshkey/parsed.rb
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/fileparsing'
-
-class TestParsedSSHKey < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::FileParsing
-
-    def setup
-        super
-        @provider = Puppet.type(:sshkey).provider(:parsed)
-
-        @oldfiletype = @provider.filetype
-    end
-
-    def teardown
-        Puppet::Util::FileType.filetype(:ram).clear
-        @provider.filetype = @oldfiletype
-        @provider.clear
-        super
-    end
-    
-    def mkkey(name = "host.domain.com")
-        if defined? @pcount
-            @pcount += 1
-        else
-            @pcount = 1
-        end
-        args = {
-            :name => name || "/fspuppet%s" % @pcount,
-            :key => "thisismykey%s" % @pcount,
-            :alias => ["host1.domain.com","192.168.0.1"],
-            :type => "dss",
-            :ensure => :present
-        }
-
-        fakeresource = fakeresource(:sshkey, args[:name])
-
-        key = @provider.new(fakeresource)
-        args.each do |p,v|
-            key.send(p.to_s + "=", v)
-        end
-
-        return key
-    end
-
-    def test_keysparse
-        fakedata("data/types/sshkey").each { |file|
-            fakedataparse(file)
-        }
-    end
-    
-    def test_simplekey
-        @provider.filetype = :ram
-        file = @provider.default_target
-        
-        key = nil
-        assert_nothing_raised do
-            key = mkkey
-        end
-        
-        assert(key, "did not create key")
-        
-        assert_nothing_raised do
-            key.flush
-        end
-        
-        assert(key.alias, "No alias set for key")
-        
-        hash = key.property_hash.dup
-        text = @provider.target_object(file).read
-        names = [key.name, key.alias].flatten.join(",")
-        
-        assert_equal("#{names} #{key.type} #{key.key}\n", text)
-        
-        assert_nothing_raised do
-            @provider.prefetch
-        end
-        
-        hash.each do |p, v|
-            next unless key.respond_to?(p)
-            assert_equal(v, key.send(p), "%s did not match" % p)
-        end
-        
-        assert(key.name !~ /,/, "Aliases were not split out during parsing")
-    end
-
-    def test_hooks
-        result = nil
-        assert_nothing_raised("Could not call post hook") do
-            result = @provider.parse_line("one,two type key")
-        end
-        assert_equal("one", result[:name], "Did not call post hook")
-        assert_equal(%w{two}, result[:alias], "Did not call post hook")
-
-        assert_equal("one,two type key",
-            @provider.to_line(:record_type => :parsed,
-            :name => "one",
-            :alias => %w{two},
-            :type => "type",
-            :key => "key"),
-            "Did not use pre-hook when generating line"
-        )
-    end
-end
-
diff --git a/test/ral/providers/user.rb b/test/ral/providers/user.rb
deleted file mode 100755
index 4df8958..0000000
--- a/test/ral/providers/user.rb
+++ /dev/null
@@ -1,567 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-
-class TestUserProvider < Test::Unit::TestCase
-    include PuppetTest::Support::Utils
-    include PuppetTest::FileTesting
-
-    def setup
-        super
-        setme()
-        @@tmpusers = []
-        @provider = nil
-        assert_nothing_raised {
-            @provider = Puppet::Type.type(:user).defaultprovider
-        }
-
-        assert(@provider, "Could not find default user provider")
-
-    end
-
-    def teardown
-        @@tmpusers.each { |user|
-            unless missing?(user)
-                remove(user)
-            end
-        }
-        super
-    end
-
-    case Facter["operatingsystem"].value
-    when "Darwin":
-        def missing?(user)
-            output = %x{nidump -r /users/#{user} / 2>/dev/null}.chomp
-
-            if output == ""
-                return true
-            else
-                return false
-            end
-
-            assert_equal("", output, "User %s is present:\n%s" % [user, output])
-        end
-
-        def current?(param, user)
-            property = Puppet.type(:user).properties.find { |st|
-                st.name == param
-            }
-
-            prov = Puppet::Type.type(:user).defaultprovider
-            output = prov.report(param)
-            # output = %x{nireport / /users name #{prov.netinfokey(param)}}
-            output.each { |hash|
-                if hash[:name] == user.name
-                    val = hash[param]
-                    if val =~ /^[-0-9]+$/
-                        return Integer(val)
-                    else
-                        return val
-                    end
-                end
-            }
-
-            return nil
-        end
-
-        def remove(user)
-            system("niutil -destroy / /users/%s" % user)
-        end
-    else
-        def missing?(user)
-            begin
-                obj = Etc.getpwnam(user)
-                return false
-            rescue ArgumentError
-                return true
-            end
-        end
-
-        def current?(param, user)
-            property = Puppet.type(:user).properties.find { |st|
-                st.name == param
-            }
-
-            assert_nothing_raised {
-                obj = Etc.getpwnam(user.name)
-                return obj.send(user.posixmethod(param))
-            }
-
-            return nil
-        end
-
-        def remove(user)
-            system("userdel %s" % user)
-        end
-    end
-
-
-    def eachproperty
-        Puppet::Type.type(:user).validproperties.each do |property|
-            yield property
-        end
-    end
-
-    def findshell(old = nil)
-        %w{/bin/sh /bin/bash /sbin/sh /bin/ksh /bin/zsh /bin/csh /bin/tcsh
-            /usr/bin/sh /usr/bin/bash /usr/bin/ksh /usr/bin/zsh /usr/bin/csh
-            /usr/bin/tcsh}.find { |shell|
-                if old
-                    FileTest.exists?(shell) and shell != old
-                else
-                    FileTest.exists?(shell)
-                end
-        }
-    end
-
-    def fakedata(name, param)
-        case param
-        when :name: name
-        when :ensure: :present
-        when :comment: "Puppet's Testing User %s" % name # use a single quote a la #375
-        when :gid: nonrootgroup.gid
-        when :shell: findshell()
-        when :home: "/home/%s" % name
-        else
-            return nil
-        end
-    end
-
-    def fakeresource(*args)
-        resource = super
-
-        # Set boolean methods as necessary.
-        class << resource
-            def allowdupe?
-                self[:allowdupe]
-            end
-            def managehome?
-                self[:managehome]
-            end
-        end
-        resource
-    end
-
-    def mkuser(name)
-        fakeresource = fakeresource(:user, name)
-        user = nil
-        assert_nothing_raised {
-            user = @provider.new(fakeresource)
-        }
-        assert(user, "Could not create provider user")
-
-        return user
-    end
-
-    def test_list
-        names = nil
-        assert_nothing_raised {
-            names = @provider.listbyname
-        }
-
-        assert(names.length > 0, "Listed no users")
-
-        # Now try it by object
-        assert_nothing_raised {
-            names = @provider.instances
-        }
-        assert(names.length > 0, "Listed no users as objects")
-
-        names.each do |obj|
-            assert_instance_of(@provider, obj)
-        end
-    end
-
-    def test_infocollection
-        fakeresource = fakeresource(:user, @me)
-
-        user = nil
-        assert_nothing_raised {
-            user = @provider.new(fakeresource)
-        }
-        assert(user, "Could not create user provider")
-
-        Puppet::Type.type(:user).validproperties.each do |property|
-            next if property == :ensure
-            # This is mostly in place for the 'password' stuff.
-            next unless user.class.supports_parameter?(property) and Puppet.features.root?
-            val = nil
-            assert_nothing_raised {
-                val = user.send(property)
-            }
-
-            assert(val != :absent,
-                   "Property %s is missing" % property)
-
-            assert(val, "Did not get value for %s" % property)
-        end
-    end
-
-    def test_exists
-        user = mkuser("nosuchuserok")
-
-        assert(! user.exists?,
-               "Fake user exists?")
-
-        user = mkuser(@me)
-        assert(user.exists?,
-               "I don't exist?")
-    end
-
-    def attrtest_ensure(user)
-        old = user.ensure
-        assert_nothing_raised {
-            user.delete
-        }
-
-        assert(missing?(user.name), "User is still present")
-        assert_nothing_raised {
-            user.create
-        }
-        assert(!missing?(user.name), "User is absent")
-        assert_nothing_raised {
-            user.delete
-        }
-
-        unless old == :absent
-            user.create
-        end
-    end
-
-    def attrtest_comment(user)
-        old = user.comment
-
-        newname = "Billy O'Neal" # use a single quote, a la #372
-        assert_nothing_raised {
-            user.comment = newname
-        }
-
-        assert_equal(newname, current?(:comment, user),
-            "Comment was not changed")
-
-        assert_nothing_raised {
-            user.comment = old
-        }
-
-        assert_equal(old, current?(:comment, user),
-            "Comment was not reverted")
-    end
-
-    def attrtest_home(user)
-        old = current?(:home, user)
-
-        assert_nothing_raised {
-            user.home = "/tmp"
-        }
-
-        assert_equal("/tmp", current?(:home, user), "Home was not changed")
-        assert_nothing_raised {
-            user.home = old
-        }
-
-        assert_equal(old, current?(:home, user), "Home was not reverted")
-    end
-
-    def attrtest_shell(user)
-        old = current?(:shell, user)
-
-        newshell = findshell(old)
-
-        unless newshell
-            $stderr.puts "Cannot find alternate shell; skipping shell test"
-            return
-        end
-
-        assert_nothing_raised {
-            user.shell = newshell
-        }
-
-        assert_equal(newshell, current?(:shell, user),
-            "Shell was not changed")
-
-        assert_nothing_raised {
-            user.shell = old
-        }
-
-        assert_equal(old, current?(:shell, user), "Shell was not reverted")
-    end
-
-    def attrtest_gid(user)
-        old = current?(:gid, user)
-
-        newgroup = %w{nogroup nobody staff users daemon}.find { |gid|
-                begin
-                    group = Etc.getgrnam(gid)
-                rescue ArgumentError => detail
-                    next
-                end
-                old != group.gid
-        }
-        group = Etc.getgrnam(newgroup)
-
-        unless newgroup
-            $stderr.puts "Cannot find alternate group; skipping gid test"
-            return
-        end
-
-        # Stupid netinfo
-        if Facter.value(:operatingsystem) == "Darwin"
-            assert_raise(ArgumentError, "gid allowed a non-integer value") do
-                user.gid = group.name
-            end
-        end
-
-        assert_nothing_raised("Failed to specify group by id") {
-            user.gid = group.gid
-        }
-
-        assert_equal(group.gid, current?(:gid,user), "GID was not changed")
-
-        assert_nothing_raised("Failed to change back to old gid") {
-            user.gid = old
-        }
-    end
-
-    def attrtest_uid(user)
-        old = current?(:uid, user)
-
-        newuid = old
-        while true
-            newuid += 1
-
-            if newuid - old > 1000
-                $stderr.puts "Could not find extra test UID"
-                return
-            end
-            begin
-                newuser = Etc.getpwuid(newuid)
-            rescue ArgumentError => detail
-                break
-            end
-        end
-
-        assert_nothing_raised("Failed to change user id") {
-            user.uid = newuid
-        }
-
-        assert_equal(newuid, current?(:uid, user), "UID was not changed")
-
-        assert_nothing_raised("Failed to change user id") {
-            user.uid = old
-        }
-        assert_equal(old, current?(:uid, user), "UID was not changed back")
-    end
-
-    def attrtest_groups(user)
-        Etc.setgrent
-        max = 0
-        while group = Etc.getgrent
-            if group.gid > max and group.gid < 5000
-                max = group.gid
-            end
-        end
-
-        groups = []
-        main = []
-        extra = []
-        5.times do |i|
-            i += 1
-            name = "pptstgr%s" % i
-            tmpgroup = Puppet.type(:group).create(
-                :name => name,
-                :gid => max + i
-            )
-
-            groups << tmpgroup
-
-            cleanup do
-                tmpgroup.provider.delete if tmpgroup.provider.exists?
-            end
-
-            if i < 3
-                main << name
-            else
-                extra << name
-            end
-        end
-
-        # Create our test groups
-        assert_apply(*groups)
-
-        # Now add some of them to our user
-        assert_nothing_raised {
-            user.resource[:groups] = extra.join(",")
-        }
-
-        # Some tests to verify that groups work correctly startig from nothing
-        # Remove our user
-        user.delete
-
-        # And add it again
-        user.create
-
-        # Make sure that the group list is added at creation time.
-        # This is necessary because we don't have default fakedata for groups.
-        assert(user.groups, "Did not retrieve group list")
-
-        list = user.groups.split(",")
-        assert_equal(extra.sort, list.sort, "Group list was not set at creation time")
-
-        # Now set to our main list of groups
-        assert_nothing_raised {
-            user.groups = main.join(",")
-        }
-
-        list = user.groups.split(",")
-        assert_equal(main.sort, list.sort, "Group list is not equal")
-    end
-
-    if Puppet::Util::SUIDManager.uid == 0
-        def test_simpleuser
-            name = "pptest"
-
-            assert(missing?(name), "User %s is present" % name)
-
-            user = mkuser(name)
-
-            eachproperty do |property|
-                if val = fakedata(user.name, property)
-                    user.resource[property] = val
-                end
-            end
-
-            @@tmpusers << name
-
-            assert_nothing_raised {
-                user.create
-            }
-
-            assert_equal("Puppet's Testing User pptest",
-                 user.comment,
-                "Comment was not set")
-
-            assert_nothing_raised {
-                user.delete
-            }
-
-            assert(missing?(user.name), "User was not deleted")
-        end
-
-        def test_alluserproperties
-            user = nil
-            name = "pptest"
-
-            assert(missing?(name), "User %s is present" % name)
-
-            user = mkuser(name)
-
-            eachproperty do |property|
-                if val = fakedata(user.name, property)
-                    user.resource[property] = val
-                end
-            end
-
-            @@tmpusers << name
-
-            assert_nothing_raised {
-                user.create
-            }
-            assert_equal("Puppet's Testing User pptest", user.comment,
-                "Comment was not set")
-
-            tests = Puppet::Type.type(:user).validproperties
-
-            just = nil
-            tests.each { |test|
-                if self.respond_to?("attrtest_%s" % test)
-                    self.send("attrtest_%s" % test, user)
-                else
-                    Puppet.err "Not testing attr %s of user" % test
-                end
-            }
-
-            assert_nothing_raised {
-                user.delete
-            }
-        end
-
-        # This is a weird method that shows how annoying the interface between
-        # types and providers is.  Grr.
-        def test_duplicateIDs
-            user1 = mkuser("user1")
-            user1.create
-            user1.uid = 125
-            user2 = mkuser("user2")
-            user2.resource[:uid] = 125
-
-            cleanup do
-                user1.delete
-                user2.delete
-            end
-
-            # Not all OSes fail here, so we can't test that it doesn't work with
-            # it off, only that it does work with it on.
-            assert_nothing_raised {
-                user2.resource[:allowdupe] = :true
-            }
-            assert_nothing_raised { user2.create }
-            assert_equal(:present, user2.ensure,
-                         "User did not get created")
-        end
-    else
-        $stderr.puts "Not root; skipping user creation/modification tests"
-    end
-
-    # Here is where we test individual providers
-    def test_useradd_flags
-        useradd = nil
-        assert_nothing_raised {
-            useradd = Puppet::Type.type(:user).provider(:useradd)
-        }
-        assert(useradd, "Did not retrieve useradd provider")
-
-        user = nil
-        assert_nothing_raised {
-            fakeresource = fakeresource(:user, @me)
-            user = useradd.new(fakeresource)
-        }
-
-        assert_equal("-d", user.send(:flag, :home),
-                    "Incorrect home flag")
-
-        assert_equal("-s", user.send(:flag, :shell),
-                    "Incorrect shell flag")
-    end
-    
-    def test_autogen
-        provider = nil
-        user = Puppet::Type.type(:user).create(:name => nonrootuser.name)
-        provider = user.provider
-        assert(provider, "did not get provider")
-        
-        # Everyone should be able to autogenerate a uid
-        assert_instance_of(Fixnum, provider.autogen(:uid))
-        
-        # If we're Darwin, then we should get results, but everyone else should
-        # get nil
-        darwin = (Facter.value(:operatingsystem) == "Darwin")
-
-        should = {
-            :comment => user[:name].capitalize,
-            :home => "/var/empty",
-            :shell => "/usr/bin/false"
-        }
-        
-        should.each do |param, value|
-            if darwin
-                assert_equal(value, provider.autogen(param), "did not autogen %s for darwin correctly" % param)
-            else
-                assert_nil(provider.autogen(param), "autogenned %s for non-darwin os" % param)
-            end
-        end
-    end
-end
-
diff --git a/test/ral/providers/user/useradd.rb b/test/ral/providers/user/useradd.rb
deleted file mode 100755
index 28692be..0000000
--- a/test/ral/providers/user/useradd.rb
+++ /dev/null
@@ -1,245 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'mocha'
-
-class UserAddProviderTest < PuppetTest::TestCase
-    confine "useradd user provider missing" =>
-        Puppet::Type.type(:user).provider(:useradd).suitable?
-
-	def setup
-        super
-		@type = Puppet::Type.type(:user)
-		@provider = Puppet::Type.type(:user).provider(:useradd)
-        @home = tempfile
-		@vals = {:name => 'faff',
-            :provider => :useradd,
-            :ensure => :present,
-            :uid => 5000,
-            :gid => 5000,
-            :home => @home,
-            :comment => "yayness",
-            :groups => %w{one two}
-        }
-	end
-
-    def setup_user
-		@user = @type.create(@vals)
-
-        @vals.each do |name, val|
-            next unless @user.class.validproperty?(name)
-        end
-        @user
-    end
-
-    def test_features
-        [:manages_homedir].each do |feature|
-            assert(@provider.feature?(feature),
-                "useradd provider is missing %s" % feature)
-        end
-    end
-	
-	def test_create
-		user = setup_user
-
-        @vals.each do |name, val|
-            next unless user.class.validproperty?(name)
-        end
-
-        user.expects(:allowdupe?).returns(false)
-        user.expects(:managehome?).returns(false)
-
-		user.provider.expects(:execute).with do |params|
-            command = params.shift
-            assert_equal(@provider.command(:add), command,
-                "Got incorrect command")
-
-            if %w{Fedora RedHat}.include?(Facter.value(:operatingsystem))
-                assert(params.include?("-M"),
-                    "Did not disable homedir creation on red hat")
-                params.delete("-M")
-            end
-
-            options = {}
-            while params.length > 0
-                options[params.shift] = params.shift
-            end
-
-            @vals[:groups] = @vals[:groups].join(",")
-
-            flags = {:home => "-d", :groups => "-G", :gid => "-g",
-                :uid => "-u", :comment => "-c"}
-
-            flags.each do |param, flag|
-                assert_equal(@vals[param], options[flag],
-                    "Got incorrect value for %s" % param)
-            end
-
-            true
-        end
-		
-        user.provider.create
-	end
-
-    # Make sure we add the right flags when managing home
-    def test_managehome
-        @vals[:managehome] = true
-        setup_user
-
-        assert(@user.provider.respond_to?(:manages_homedir?),
-            "provider did not get managehome test set")
-
-        assert(@user.managehome?, "provider did not get managehome")
-
-        # First run
-        @user.expects(:managehome?).returns(true)
-
-		@user.provider.expects(:execute).with do |params|
-            assert_equal(params[0], @provider.command(:add),
-                "useradd was not called")
-            assert(params.include?("-m"),
-                "Did not add -m when managehome was in affect")
-            assert(! params.include?("-M"),
-                "Added -M when managehome was in affect")
-
-            true
-        end
-
-        @user.provider.create
-        @user.class.clear
-
-        # Start again, this time with manages_home off
-        @vals[:managehome] = false
-        setup_user
-
-        # First run
-        @user.expects(:managehome?).returns(false)
-
-		@user.provider.expects(:execute).with do |params|
-            assert_equal(params[0], @provider.command(:add),
-                "useradd was not called")
-            if %w{Fedora RedHat}.include?(Facter.value(:operatingsystem))
-                assert(params.include?("-M"),
-                    "Did not add -M on Red Hat")
-            end
-            assert(! params.include?("-m"),
-                "Added -m when managehome was disabled")
-
-            true
-        end
-
-        @user.provider.create
-    end
-
-    def test_allowdupe
-        @vals[:allowdupe] = true
-        setup_user
-
-        assert(@user.provider.respond_to?(:allows_duplicates?),
-            "provider did not get allowdupe test set")
-
-        assert(@user.allowdupe?, "provider did not get allowdupe")
-
-        # First run
-        @user.expects(:allowdupe?).returns(true)
-
-		@user.provider.expects(:execute).with do |params|
-            assert_equal(params[0], @provider.command(:add),
-                "useradd was not called")
-            assert(params.include?("-o"),
-                "Did not add -o when allowdupe was in affect")
-
-            true
-        end
-
-        @user.provider.create
-        @user.class.clear
-
-        # Start again, this time with manages_home off
-        @vals[:allowdupe] = false
-        setup_user
-
-        # First run
-        @user.expects(:allowdupe?).returns(false)
-
-		@user.provider.expects(:execute).with do |params|
-            assert_equal(params[0], @provider.command(:add),
-                "useradd was not called")
-            assert(! params.include?("-o"),
-                "Added -o when allowdupe was disabled")
-
-            true
-        end
-
-        @user.provider.create
-    end
-
-    def test_manages_password
-        unless @provider.feature?(:manages_passwords)
-            return
-        end
-        @vals[:password] = "somethingorother"
-        setup_user
-
-		@user.provider.expects(:execute).with do |params|
-            assert_equal(params[0], @provider.command(:add),
-                "useradd was not called")
-            params.shift
-            options = {}
-            params.each_with_index do |p, i|
-                if p =~ /^-/ and p != "-M"
-                    options[p] = params[i + 1]
-                end
-            end
-            assert_equal(options["-p"], @vals[:password],
-                "Did not set password in useradd call")
-            true
-        end
-
-        @user.provider.create
-        @user.class.clear
-
-        # Now mark the user made, and make sure the right command is called
-        setup_user
-        @vals[:password] = "somethingelse"
-
-		@user.provider.expects(:execute).with do |params|
-            assert_equal(params[0], @provider.command(:modify),
-                "usermod was not called")
-
-            options = {}
-            params.each_with_index do |p, i|
-                if p =~ /^-/ and p != "-M"
-                    options[p] = params[i + 1]
-                end
-            end
-            assert_equal(options["-p"], @vals[:password],
-                "Did not set password in useradd call")
-            true
-        end
-
-        @user.provider.password = @vals[:password]
-    end
-
-end
-
-class UserRootAddProviderTest < PuppetTest::TestCase
-    confine "useradd user provider missing" => Puppet::Type.type(:user).provider(:useradd).suitable?
-    confine "useradd does not manage passwords" => Puppet::Type.type(:user).provider(:useradd).manages_passwords?
-    confine "not running as root" => (Process.uid == 0)
-
-    def test_password
-        user = Puppet::Type.type(:user).create(:name => "root", :check => [:password], :provider => :useradd)
-
-        provider = user.provider
-
-        assert_nothing_raised("Could not check password") do
-            pass = provider.password
-            assert(pass, "Did not get password for root")
-            assert(pass!= "x", "Password was retrieved from /etc/passwd instead of /etc/shadow")
-        end
-    end
-end
-
-
diff --git a/test/ral/type/basic.rb b/test/ral/type/basic.rb
deleted file mode 100755
index 3c5faee..0000000
--- a/test/ral/type/basic.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-class TestBasic < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @component = nil
-        @configfile = nil
-        @command = nil
-
-        assert_nothing_raised() {
-            @component = Puppet.type(:component).create(
-                :name => "yaytest",
-                :type => "testing"
-            )
-        }
-
-        assert_nothing_raised() {
-            @filepath = tempfile()
-            @configfile = Puppet.type(:file).create(
-                :path => @filepath,
-                :ensure => "file",
-                :checksum => "md5"
-            )
-        }
-        assert_nothing_raised() {
-            @command = Puppet.type(:exec).create(
-                :title => "echo",
-                :command => "echo yay",
-                :path => ENV["PATH"]
-            )
-        }
-        @config = mk_catalog(@component, @configfile, @command)
-        @config.add_edge @component, @configfile
-        @config.add_edge @component, @command
-    end
-
-    def teardown
-        super
-        stopservices
-    end
-
-    def test_values
-        [:ensure, :checksum].each do |param|
-            prop = @configfile.property(param)
-            assert(prop, "got no property for %s" % param)
-            assert(prop.value, "got no value for %s" % param)
-        end
-    end
-
-    def test_name_calls
-        [@command, @configfile].each { |obj|
-            Puppet.debug "obj is %s" % obj
-            assert_nothing_raised(){
-                obj.name
-            }
-        }
-    end
-
-    def test_name_equality
-        assert_equal(@filepath, @configfile.title)
-
-        assert_equal("echo", @command.title)
-    end
-
-    def test_object_retrieval
-        [@command, @configfile].each { |obj|
-            assert_equal(obj.class[obj.name].object_id, obj.object_id,
-                "%s did not match class version" % obj.ref)
-        }
-    end
-
-    def test_paths
-        [@configfile, @command, @component].each { |obj|
-            assert_nothing_raised {
-                assert_instance_of(String, obj.path)
-            }
-        }
-    end
-end
diff --git a/test/ral/type/cron.rb b/test/ral/type/cron.rb
deleted file mode 100755
index 73e9418..0000000
--- a/test/ral/type/cron.rb
+++ /dev/null
@@ -1,499 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-# Test cron job creation, modification, and destruction
-
-class TestCron < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-
-        setme()
-
-        @crontype = Puppet::Type.type(:cron)
-        @provider = @crontype.defaultprovider
-        if @provider.respond_to?(:filetype=)
-            @provider.stubs(:filetype).returns(Puppet::Util::FileType.filetype(:ram))
-        end
-        @crontype = Puppet::Type.type(:cron)
-    end
-
-    def teardown
-        super
-        @crontype.defaultprovider = nil
-        Puppet::Util::FileType.filetype(:ram).clear
-    end
-
-    def eachprovider
-        @crontype.suitableprovider.each do |provider|
-            yield provider
-        end
-    end
-
-    # Back up the user's existing cron tab if they have one.
-    def cronback
-        tab = nil
-        assert_nothing_raised {
-            tab = Puppet.type(:cron).filetype.read(@me)
-        }
-
-        if $? == 0
-            @currenttab = tab
-        else
-            @currenttab = nil
-        end
-    end
-
-    # Restore the cron tab to its original form.
-    def cronrestore
-        assert_nothing_raised {
-            if @currenttab
-                @crontype.filetype.new(@me).write(@currenttab)
-            else
-                @crontype.filetype.new(@me).remove
-            end
-        }
-    end
-
-    # Create a cron job with all fields filled in.
-    def mkcron(name, addargs = true)
-        cron = nil
-        command = "date > %s/crontest%s" % [tmpdir(), name]
-        args = nil
-        if addargs
-            args = {
-                :command => command,
-                :name => name,
-                :user => @me,
-                :minute => rand(59),
-                :month => "1",
-                :monthday => "1",
-                :hour => "1"
-            }
-        else
-            args = {:command => command, :name => name}
-        end
-        assert_nothing_raised {
-            cron = @crontype.create(args)
-        }
-
-        return cron
-    end
-
-    # Run the cron through its paces -- install it then remove it.
-    def cyclecron(cron)
-        obj = Puppet::Type::Cron.cronobj(@me)
-
-        text = obj.read
-        name = cron.name
-        comp = mk_catalog(name, cron)
-
-        assert_events([:cron_created], comp)
-        cron.provider.class.prefetch
-        currentvalue = cron.retrieve
-
-        assert(cron.insync?(currentvalue), "Cron is not in sync")
-
-        assert_events([], comp)
-
-        curtext = obj.read
-        text.split("\n").each do |line|
-            assert(curtext.include?(line), "Missing '%s'" % line)
-        end
-        obj = Puppet::Type::Cron.cronobj(@me)
-
-        cron[:ensure] = :absent
-
-        assert_events([:cron_removed], comp)
-
-        cron.provider.class.prefetch
-        currentvalue = cron.retrieve
-
-        assert(cron.insync?(currentvalue), "Cron is not in sync")
-        assert_events([], comp)
-    end
-
-    # Test that a cron job with spaces at the end doesn't get rewritten
-    def test_trailingspaces
-        eachprovider do |provider|
-            cron = nil
-            # make the cron
-            name = "yaytest"
-            command = "date > /dev/null "
-            assert_nothing_raised {
-                cron = @crontype.create(
-                    :name => name,
-                    :command => "date > /dev/null ",
-                    :month => "May",
-                    :user => @me
-                )
-            }
-            property = cron.send(:property, :command)
-            cron.provider.command = command
-            cron.provider.ensure = :present
-            cron.provider.user = @me
-            cron.provider.month = ["4"]
-            cron.provider.class.prefetch
-            currentvalue = cron.retrieve
-
-            currentvalue.each do |prop, value|
-                # We're only interested in comparing the command.
-                next unless prop.name.to_s == "command"
-                assert(prop.insync?(value), "Property %s is not considered in sync with value %s" % [prop.name, value.inspect])
-            end
-
-            @crontype.clear
-        end
-    end
-
-    def test_makeandretrievecron
-        %w{storeandretrieve a-name another-name more_naming SomeName}.each do |name|
-            cron = mkcron(name)
-            comp = mk_catalog(name, cron)
-            trans = assert_events([:cron_created], comp, name)
-            
-            cron.provider.class.prefetch
-            cron = nil
-
-            assert(cron = Puppet.type(:cron)[name], "Could not retrieve named cron")
-            assert_instance_of(Puppet.type(:cron), cron)
-        end
-    end
-
-    # Do input validation testing on all of the parameters.
-    def test_arguments
-        values = {
-            :monthday => {
-                :valid => [ 1, 13, "1" ],
-                :invalid => [ -1, 0, 32 ]
-            },
-            :weekday => {
-                :valid => [ 0, 3, 6, "1", "tue", "wed",
-                    "Wed", "MOnday", "SaTurday" ],
-                :invalid => [ -1, 7, "13", "tues", "teusday", "thurs" ]
-            },
-            :hour => {
-                :valid => [ 0, 21, 23 ],
-                :invalid => [ -1, 24 ]
-            },
-            :minute => {
-                :valid => [ 0, 34, 59 ],
-                :invalid => [ -1, 60 ]
-            },
-            :month => {
-                :valid => [ 1, 11, 12, "mar", "March", "apr", "October", "DeCeMbEr" ],
-                :invalid => [ -1, 0, 13, "marc", "sept" ]
-            }
-        }
-
-        cron = mkcron("valtesting")
-        values.each { |param, hash|
-            # We have to test the valid ones first, because otherwise the
-            # property will fail to create at all.
-            [:valid, :invalid].each { |type|
-                hash[type].each { |value|
-                    case type
-                    when :valid:
-                        assert_nothing_raised {
-                            cron[param] = value
-                        }
-
-                        if value.is_a?(Integer)
-                            assert_equal([value.to_s], cron.should(param),
-                                "Cron value was not set correctly")
-                        end
-                    when :invalid:
-                        assert_raise(Puppet::Error, "%s is incorrectly a valid %s" %
-                            [value, param]) {
-                            cron[param] = value
-                        }
-                    end
-
-                    if value.is_a?(Integer)
-                        value = value.to_s
-                        redo
-                    end
-                }
-            }
-        }
-    end
-
-    # Verify that comma-separated numbers are not resulting in rewrites
-    def test_comma_separated_vals_work
-        eachprovider do |provider|
-            cron = nil
-            assert_nothing_raised {
-                cron = @crontype.create(
-                    :command => "/bin/date > /dev/null",
-                    :minute => [0, 30],
-                    :name => "crontest",
-                    :provider => provider.name
-                )
-            }
-
-
-            cron.provider.ensure = :present
-            cron.provider.command = '/bin/date > /dev/null'
-            cron.provider.minute = %w{0 30}
-            cron.provider.class.prefetch
-            currentvalue = cron.retrieve
-
-            currentvalue.each do |prop, value|
-                # We're only interested in comparing minutes.
-                next unless prop.name.to_s == "minute"
-                assert(prop.insync?(value), "Property %s is not considered in sync with value %s" % [prop.name, value.inspect])
-            end
-            @crontype.clear
-        end
-    end
-
-    def test_fieldremoval
-        cron = nil
-        assert_nothing_raised {
-            cron = @crontype.create(
-                :command => "/bin/date > /dev/null",
-                :minute => [0, 30],
-                :name => "crontest",
-                :provider => :crontab
-            )
-        }
-
-        assert_events([:cron_created], cron)
-        cron.provider.class.prefetch
-
-        cron[:minute] = :absent
-        assert_events([:cron_changed], cron)
-
-        current_values = nil
-        assert_nothing_raised {
-            cron.provider.class.prefetch
-            current_values = cron.retrieve
-        }
-        assert_equal(:absent, current_values[cron.property(:minute)])
-    end
-
-    def test_listing
-        # Make a crontab cron for testing
-        provider = @crontype.provider(:crontab)
-        return unless provider.suitable?
-
-        ft = provider.filetype
-        provider.filetype = :ram
-        cleanup { provider.filetype = ft }
-
-        setme
-        cron = @crontype.create(:name => "testing",
-            :minute => [0, 30],
-            :command => "/bin/testing",
-            :user => @me
-        )
-        # Write it to our file
-        assert_apply(cron)
-
-        @crontype.clear
-
-        crons = []
-        assert_nothing_raised {
-            @crontype.instances.each do |cron|
-                crons << cron
-            end
-        }
-
-        crons.each do |cron|
-            assert_instance_of(@crontype, cron, "Did not receive a real cron object")
-            assert_instance_of(String, cron.value(:user),
-                "Cron user is not a string")
-        end
-    end
-
-    def verify_failonnouser
-        assert_raise(Puppet::Error) do
-            @crontype.retrieve("nosuchuser")
-        end
-    end
-
-    def test_divisionnumbers
-        cron = mkcron("divtest")
-        cron[:minute] = "*/5"
-
-        assert_apply(cron)
-
-        cron.provider.class.prefetch
-        currentvalue = cron.retrieve
-
-        assert_equal(["*/5"], currentvalue[cron.property(:minute)])
-    end
-
-    def test_ranges
-        cron = mkcron("rangetest")
-        cron[:minute] = "2-4"
-
-        assert_apply(cron)
-
-        current_values = nil
-        assert_nothing_raised {
-            cron.provider.class.prefetch
-            current_values = cron.retrieve
-        }
-
-        assert_equal(["2-4"], current_values[cron.property(:minute)])
-    end
-
-
-    def provider_set(cron, param, value)
-      unless param =~ /=$/
-        param = "%s=" % param
-      end
-    
-      cron.provider.send(param, value)
-    end
-
-    def test_value
-        cron = mkcron("valuetesting", false)
-
-        # First, test the normal properties
-        [:minute, :hour, :month].each do |param|
-            cron.newattr(param)
-            property = cron.property(param)
-
-            assert(property, "Did not get %s property" % param)
-
-            assert_nothing_raised {
-#                property.is = :absent
-                 provider_set(cron, param, :absent)
-            }
-
-            val = "*"
-            assert_equal(val, cron.value(param))
-
-            # Make sure arrays work, too
-            provider_set(cron, param, ["1"])
-            assert_equal(%w{1}, cron.value(param))
-
-            # Make sure values get comma-joined
-            provider_set(cron, param, %w{2 3})
-            assert_equal(%w{2 3}, cron.value(param))
-
-            # Make sure "should" values work, too
-            cron[param] = "4"
-            assert_equal(%w{4}, cron.value(param))
-
-            cron[param] = ["4"]
-            assert_equal(%w{4}, cron.value(param))
-
-            cron[param] = ["4", "5"]
-            assert_equal(%w{4 5}, cron.value(param))
-
-            provider_set(cron, param, :absent)
-            assert_equal(%w{4 5}, cron.value(param))
-        end
-
-        Puppet[:trace] = false
-
-        # Now make sure that :command works correctly
-        cron.delete(:command)
-        cron.newattr(:command)
-        property = cron.property(:command)
-
-        assert_nothing_raised {
-            provider_set(cron, :command, :absent)
-        }
-
-        param = :command
-        # Make sure arrays work, too
-        provider_set(cron, param, ["/bin/echo"])
-        assert_equal("/bin/echo", cron.value(param))
-
-        # Make sure values are not comma-joined
-        provider_set(cron, param, %w{/bin/echo /bin/test})
-        assert_equal("/bin/echo", cron.value(param))
-
-        # Make sure "should" values work, too
-        cron[param] = "/bin/echo"
-        assert_equal("/bin/echo", cron.value(param))
-
-        cron[param] = ["/bin/echo"]
-        assert_equal("/bin/echo", cron.value(param))
-
-        cron[param] = %w{/bin/echo /bin/test}
-        assert_equal("/bin/echo", cron.value(param))
-
-        provider_set(cron, param, :absent)
-        assert_equal("/bin/echo", cron.value(param))
-    end
-
-    def test_multiple_users
-        crons = []
-        users = ["root", nonrootuser.name]
-        users.each do |user|
-            cron = Puppet::Type.type(:cron).create(
-                :name => "testcron-#{user}",
-                :user => user,
-                :command => "/bin/echo",
-                :minute => [0,30]
-            )
-            crons << cron
-
-            assert_equal(cron.should(:user), cron.should(:target),
-                "Target was not set correctly for %s" % user)
-        end
-        provider = crons[0].provider.class
-
-        assert_apply(*crons)
-
-        users.each do |user|
-            users.each do |other|
-                next if user == other
-                text = provider.target_object(other).read
-
-                assert(text !~ /testcron-#{user}/,
-                       "%s's cron job is in %s's tab" %
-                       [user, other])
-            end
-        end
-    end
-
-    # Make sure the user stuff defaults correctly.
-    def test_default_user
-        crontab = @crontype.provider(:crontab)
-        if crontab.suitable?
-            inst = @crontype.create(
-                :name => "something", :command => "/some/thing",
-                :provider => :crontab)
-            assert_equal(Etc.getpwuid(Process.uid).name, inst.should(:user),
-                "user did not default to current user with crontab")
-            assert_equal(Etc.getpwuid(Process.uid).name, inst.should(:target),
-                "target did not default to current user with crontab")
-
-            # Now make a new cron with a user, and make sure it gets copied
-            # over
-            inst = @crontype.create(:name => "yay", :command => "/some/thing",
-                :user => "bin", :provider => :crontab)
-            assert_equal("bin", inst.should(:target),
-                "target did not default to user with crontab")
-        end
-    end
-
-    # #705 - make sure extra spaces don't screw things up
-    def test_spaces_in_command
-        string = "echo   multiple  spaces"
-        cron = @crontype.create(:name => "space testing", :command => string)
-        assert_apply(cron)
-
-        cron.class.clear
-        cron = @crontype.create(:name => "space testing", :command => string)
-
-        # Now make sure that it's correctly in sync
-        cron.provider.class.prefetch("testing" => cron)
-        properties = cron.retrieve
-        command, result = properties.find { |prop, value| prop.name == :command }
-        assert_equal(string, result, "Cron did not pick up extra spaces in command")
-        assert(command.insync?(string), "Command changed with multiple spaces")
-    end
-end
-
-
diff --git a/test/ral/type/exec.rb b/test/ral/type/exec.rb
deleted file mode 100755
index e2a3dd9..0000000
--- a/test/ral/type/exec.rb
+++ /dev/null
@@ -1,770 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-class TestExec < Test::Unit::TestCase
-	include PuppetTest
-    def test_execution
-        command = nil
-        output = nil
-        assert_nothing_raised {
-            command = Puppet.type(:exec).create(
-                :command => "/bin/echo"
-            )
-        }
-        assert_nothing_raised {
-            command.evaluate
-        }
-        assert_events([:executed_command], command)
-    end
-
-    def test_numvsstring
-        [0, "0"].each { |val|
-            Puppet.type(:exec).clear
-            Puppet.type(:component).clear
-            command = nil
-            output = nil
-            assert_nothing_raised {
-                command = Puppet.type(:exec).create(
-                    :command => "/bin/echo",
-                    :returns => val
-                )
-            }
-            assert_events([:executed_command], command)
-        }
-    end
-
-    def test_path_or_qualified
-        command = nil
-        output = nil
-        assert_raise(Puppet::Error) {
-            command = Puppet.type(:exec).create(
-                :command => "echo"
-            )
-        }
-        assert_nothing_raised {
-            command = Puppet.type(:exec).create(
-                :command => "echo",
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin"
-            )
-        }
-        Puppet.type(:exec).clear
-        assert_nothing_raised {
-            command = Puppet.type(:exec).create(
-                :command => "/bin/echo"
-            )
-        }
-        Puppet.type(:exec).clear
-        assert_nothing_raised {
-            command = Puppet.type(:exec).create(
-                :command => "/bin/echo",
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin"
-            )
-        }
-    end
-
-    def test_nonzero_returns
-        assert_nothing_raised {
-            command = Puppet.type(:exec).create(
-                :command => "mkdir /this/directory/does/not/exist",
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin",
-                :returns => 1
-            )
-        }
-        assert_nothing_raised {
-            command = Puppet.type(:exec).create(
-                :command => "touch /etc",
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin",
-                :returns => 1
-            )
-        }
-        assert_nothing_raised {
-            command = Puppet.type(:exec).create(
-                :command => "thiscommanddoesnotexist",
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin",
-                :returns => 127
-            )
-        }
-    end
-
-    def test_cwdsettings
-        command = nil
-        dir = "/tmp"
-        wd = Dir.chdir(dir) {
-            Dir.getwd
-        }
-        assert_nothing_raised {
-            command = Puppet.type(:exec).create(
-                :command => "pwd",
-                :cwd => dir,
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin",
-                :returns => 0
-            )
-        }
-        assert_events([:executed_command], command)
-        assert_equal(wd,command.output.chomp)
-    end
-
-    def test_refreshonly_functional
-        file = nil
-        cmd = nil
-        tmpfile = tempfile()
-        @@tmpfiles.push tmpfile
-        trans = nil
-        file = Puppet.type(:file).create(
-            :path => tmpfile,
-            :content => "yay"
-        )
-        # Get the file in sync
-        assert_apply(file)
-
-        # Now make an exec
-        maker = tempfile()
-        assert_nothing_raised {
-            cmd = Puppet.type(:exec).create(
-                :command => "touch %s" % maker,
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin",
-                :subscribe => file,
-                :refreshonly => true
-            )
-        }
-
-        assert(cmd, "did not make exec")
-
-        assert_nothing_raised do
-            assert(! cmd.check, "Check passed when refreshonly is set")
-        end
-
-        assert_events([], file, cmd)
-        assert(! FileTest.exists?(maker), "made file without refreshing")
-
-        # Now change our content, so we throw a refresh
-        file[:content] = "yayness"
-        assert_events([:file_changed, :triggered], file, cmd)
-        assert(FileTest.exists?(maker), "file was not made in refresh")
-    end
-
-    def test_refreshonly
-        cmd = true
-        assert_nothing_raised {
-            cmd = Puppet.type(:exec).create(
-                :command => "pwd",
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin",
-                :refreshonly => true
-            )
-        }
-
-        # Checks should always fail when refreshonly is enabled
-        assert(!cmd.check, "Check passed with refreshonly true")
-
-        # Now make sure it passes if we pass in "true"
-        assert(cmd.check(true), "Check failed with refreshonly true while refreshing")
-
-        # Now set it to false
-        cmd[:refreshonly] = false
-        assert(cmd.check, "Check failed with refreshonly false")
-    end
-
-    def test_creates
-        file = tempfile()
-        exec = nil
-        assert(! FileTest.exists?(file), "File already exists")
-        assert_nothing_raised {
-            exec = Puppet.type(:exec).create(
-                :command => "touch %s" % file,
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin",
-                :creates => file
-            )
-        }
-
-        comp = mk_catalog("createstest", exec)
-        assert_events([:executed_command], comp, "creates")
-        assert_events([], comp, "creates")
-    end
-
-    # Verify that we can download the file that we're going to execute.
-    def test_retrievethenmkexe
-        exe = tempfile()
-        oexe = tempfile()
-        sh = %x{which sh}
-        File.open(exe, "w") { |f| f.puts "#!#{sh}\necho yup" }
-
-        file = Puppet.type(:file).create(
-            :path => oexe,
-            :source => exe,
-            :mode => 0755
-        )
-
-        exec = Puppet.type(:exec).create(
-            :command => oexe,
-            :require => [:file, oexe]
-        )
-
-        comp = mk_catalog("Testing", file, exec)
-
-        assert_events([:file_created, :executed_command], comp)
-    end
-
-    # Verify that we auto-require any managed scripts.
-    def test_autorequire_files
-        exe = tempfile()
-        oexe = tempfile()
-        sh = %x{which sh}
-        File.open(exe, "w") { |f| f.puts "#!#{sh}\necho yup" }
-
-        file = Puppet.type(:file).create(
-            :path => oexe,
-            :source => exe,
-            :mode => 755
-        )
-
-        basedir = File.dirname(oexe)
-        baseobj = Puppet.type(:file).create(
-            :path => basedir,
-            :source => exe,
-            :mode => 755
-        )
-
-        ofile = Puppet.type(:file).create(
-            :path => exe,
-            :mode => 755
-        )
-
-        exec = Puppet.type(:exec).create(
-            :command => oexe,
-            :path => ENV["PATH"],
-            :cwd => basedir
-        )
-
-        cat = Puppet.type(:exec).create(
-            :command => "cat %s %s" % [exe, oexe],
-            :path => ENV["PATH"]
-        )
-        
-        rels = nil
-        assert_nothing_raised do
-            rels = exec.autorequire
-        end
-
-        # Verify we get the script itself
-        assert(rels.detect { |r| r.source == file }, "Exec did not autorequire its command")
-
-        # Verify we catch the cwd
-        assert(rels.detect { |r| r.source == baseobj }, "Exec did not autorequire its cwd")
-
-        # Verify we don't require ourselves
-        assert(! rels.detect { |r| r.source == ofile }, "Exec incorrectly required mentioned file")
-        assert(!exec.requires?(ofile), "Exec incorrectly required file")
-
-        # We not longer autorequire inline files
-        assert_nothing_raised do
-            rels = cat.autorequire
-        end
-        assert(! rels.detect { |r| r.source == ofile }, "Exec required second inline file")
-        assert(! rels.detect { |r| r.source == file }, "Exec required inline file")
-    end
-
-    def test_ifonly
-        afile = tempfile()
-        bfile = tempfile()
-
-        exec = nil
-        assert_nothing_raised {
-            exec = Puppet.type(:exec).create(
-                :command => "touch %s" % bfile,
-                :onlyif => "test -f %s" % afile,
-                :path => ENV['PATH']
-            )
-        }
-
-        assert_events([], exec)
-        system("touch %s" % afile)
-        assert_events([:executed_command], exec)
-        assert_events([:executed_command], exec)
-        system("rm %s" % afile)
-        assert_events([], exec)
-    end
-
-    def test_unless
-        afile = tempfile()
-        bfile = tempfile()
-
-        exec = nil
-        assert_nothing_raised {
-            exec = Puppet.type(:exec).create(
-                :command => "touch %s" % bfile,
-                :unless => "test -f %s" % afile,
-                :path => ENV['PATH']
-            )
-        }
-        comp = mk_catalog(exec)
-
-        assert_events([:executed_command], comp)
-        assert_events([:executed_command], comp)
-        system("touch %s" % afile)
-        assert_events([], comp)
-        assert_events([], comp)
-        system("rm %s" % afile)
-        assert_events([:executed_command], comp)
-        assert_events([:executed_command], comp)
-    end
-
-    if Puppet::Util::SUIDManager.uid == 0
-        # Verify that we can execute commands as a special user
-        def mknverify(file, user, group = nil, id = true)
-            File.umask(0022)
-                
-            args = {
-                :command => "touch %s" % file,
-                :path => "/usr/bin:/bin:/usr/sbin:/sbin",
-            }
-
-            if user
-                #Puppet.warning "Using user %s" % user.name
-                if id
-                    # convert to a string, because that's what the object expects
-                    args[:user] = user.uid.to_s
-                else
-                    args[:user] = user.name
-                end
-            end
-
-            if group
-                #Puppet.warning "Using group %s" % group.name
-                if id
-                    args[:group] = group.gid.to_s
-                else
-                    args[:group] = group.name
-                end
-            end
-            exec = nil
-            assert_nothing_raised {
-                exec = Puppet.type(:exec).create(args)
-            }
-
-            comp = mk_catalog("usertest", exec)
-            assert_events([:executed_command], comp, "usertest")
-
-            assert(FileTest.exists?(file), "File does not exist")
-            if user
-                assert_equal(user.uid, File.stat(file).uid, "File UIDs do not match")
-            end
-
-            # We can't actually test group ownership, unfortunately, because
-            # behaviour changes wildlly based on platform.
-            Puppet::Type.allclear
-        end
-
-        def test_userngroup
-            file = tempfile()
-            [
-                [nonrootuser()], # just user, by name
-                [nonrootuser(), nil, true], # user, by uid
-                [nil, nonrootgroup()], # just group
-                [nil, nonrootgroup(), true], # just group, by id
-                [nonrootuser(), nonrootgroup()], # user and group, by name
-                [nonrootuser(), nonrootgroup(), true], # user and group, by id
-            ].each { |ary|
-                mknverify(file, *ary) {
-                }
-            }
-        end
-    end
-
-    def test_logoutput
-        exec = nil
-        assert_nothing_raised {
-            exec = Puppet.type(:exec).create(
-                :title => "logoutputesting",
-                :path => "/usr/bin:/bin",
-                :command => "echo logoutput is false",
-                :logoutput => false
-            )
-        }
-
-        assert_apply(exec)
-
-        assert_nothing_raised {
-            exec[:command] = "echo logoutput is true"
-            exec[:logoutput] = true
-        }
-
-        assert_apply(exec)
-
-        assert_nothing_raised {
-            exec[:command] = "echo logoutput is on_failure"
-            exec[:logoutput] = "on_failure"
-        }
-
-        assert_apply(exec)
-    end
-
-    def test_execthenfile
-        exec = nil
-        file = nil
-        basedir = tempfile()
-        path = File.join(basedir, "subfile")
-        assert_nothing_raised {
-            exec = Puppet.type(:exec).create(
-                :title => "mkdir",
-                :path => "/usr/bin:/bin",
-                :creates => basedir,
-                :command => "mkdir %s; touch %s" % [basedir, path]
-
-            )
-        }
-
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :path => basedir,
-                :recurse => true,
-                :mode => "755",
-                :require => ["exec", "mkdir"]
-            )
-        }
-
-        comp = mk_catalog(file, exec)
-        comp.finalize
-        assert_events([:executed_command, :file_changed], comp)
-
-        assert(FileTest.exists?(path), "Exec ran first")
-        assert(File.stat(path).mode & 007777 == 0755)
-    end
-
-    # Make sure all checks need to be fully qualified.
-    def test_falsevals
-        exec = nil
-        assert_nothing_raised do
-            exec = Puppet.type(:exec).create(
-                :command => "/bin/touch yayness"
-            )
-        end
-
-        Puppet.type(:exec).checks.each do |check|
-            klass = Puppet.type(:exec).paramclass(check)
-            next if klass.values.include? :false
-            assert_raise(Puppet::Error, "Check '%s' did not fail on false" % check) do
-                exec[check] = false
-            end
-        end
-    end
-
-    def test_createcwdandexe
-        exec1 = exec2 = nil
-        dir = tempfile()
-        file = tempfile()
-
-        assert_nothing_raised {
-            exec1 = Puppet.type(:exec).create(
-                :title => "one",
-                :path => ENV["PATH"],
-                :command => "mkdir #{dir}"
-            )
-        }
-
-        assert_nothing_raised("Could not create exec w/out existing cwd") {
-            exec2 = Puppet.type(:exec).create(
-                :title => "two",
-                :path => ENV["PATH"],
-                :command => "touch #{file}",
-                :cwd => dir
-            )
-        }
-
-        # Throw a check in there with our cwd and make sure it works
-        assert_nothing_raised("Could not check with a missing cwd") do
-            exec2[:unless] = "test -f /this/file/does/not/exist"
-            exec2.retrieve
-        end
-
-        assert_raise(Puppet::Error) do
-            exec2.property(:returns).sync
-        end
-
-        assert_nothing_raised do
-            exec2[:require] = exec1
-        end
-
-        assert_apply(exec1, exec2)
-
-        assert(FileTest.exists?(file))
-    end
-
-    def test_checkarrays
-        exec = nil
-        file = tempfile()
-
-        test = "test -f #{file}"
-
-        assert_nothing_raised {
-            exec = Puppet.type(:exec).create(
-                :path => ENV["PATH"],
-                :command => "touch #{file}"
-            )
-        }
-
-        assert_nothing_raised {
-            exec[:unless] = test
-        }
-
-        assert_nothing_raised {
-            assert(exec.check, "Check did not pass")
-        }
-
-        assert_nothing_raised {
-            exec[:unless] = [test, test]
-        }
-
-
-        assert_nothing_raised {
-            exec.finish
-        }
-
-        assert_nothing_raised {
-            assert(exec.check, "Check did not pass")
-        }
-
-        assert_apply(exec)
-
-        assert_nothing_raised {
-            assert(! exec.check, "Check passed")
-        }
-    end
-
-    def test_missing_checks_cause_failures
-        # Solaris's sh exits with 1 here instead of 127
-        return if Facter.value(:operatingsystem) == "Solaris"
-        exec = Puppet::Type.type(:exec).create(
-                                    :command => "echo true",
-                                    :path => ENV["PATH"],
-                                    :onlyif => "/bin/nosuchthingexists"
-                                   )
-
-        assert_raise(ArgumentError, "Missing command did not raise error") {
-            exec.run("/bin/nosuchthingexists")
-        } 
-    end
-
-    def test_envparam
-        exec = Puppet::Type.newexec(
-            :command => "echo $envtest",
-            :path => ENV["PATH"],
-            :env => "envtest=yayness"
-        )
-
-        assert(exec, "Could not make exec")
-
-        output = status = nil
-        assert_nothing_raised {
-            output, status = exec.run("echo $envtest")
-        }
-
-        assert_equal("yayness\n", output)
-
-        # Now check whether we can do multiline settings
-        assert_nothing_raised do
-            exec[:env] = "envtest=a list of things
-and stuff"
-        end
-
-        output = status = nil
-        assert_nothing_raised {
-            output, status = exec.run('echo "$envtest"')
-        }
-        assert_equal("a list of things\nand stuff\n", output)
-
-        # Now test arrays
-        assert_nothing_raised do
-            exec[:env] = ["funtest=A", "yaytest=B"]
-        end
-
-        output = status = nil
-        assert_nothing_raised {
-            output, status = exec.run('echo "$funtest" "$yaytest"')
-        }
-        assert_equal("A B\n", output)
-    end
-    
-    def test_environmentparam
-        exec = Puppet::Type.newexec(
-            :command => "echo $environmenttest",
-            :path => ENV["PATH"],
-            :environment => "environmenttest=yayness"
-        )
-
-        assert(exec, "Could not make exec")
-
-        output = status = nil
-        assert_nothing_raised {
-            output, status = exec.run("echo $environmenttest")
-        }
-
-        assert_equal("yayness\n", output)
-
-        # Now check whether we can do multiline settings
-        assert_nothing_raised do
-            exec[:environment] = "environmenttest=a list of things
-and stuff"
-        end
-
-        output = status = nil
-        assert_nothing_raised {
-            output, status = exec.run('echo "$environmenttest"')
-        }
-        assert_equal("a list of things\nand stuff\n", output)
-
-        # Now test arrays
-        assert_nothing_raised do
-            exec[:environment] = ["funtest=A", "yaytest=B"]
-        end
-
-        output = status = nil
-        assert_nothing_raised {
-            output, status = exec.run('echo "$funtest" "$yaytest"')
-        }
-        assert_equal("A B\n", output)
-    end
-
-    def test_timeout
-        exec = Puppet::Type.type(:exec).create(:command => "sleep 1", :path => ENV["PATH"], :timeout => "0.2")
-        time = Time.now
-        
-        assert_raise(Timeout::Error) {
-            exec.run("sleep 1")
-        }
-        Puppet.info "%s seconds, vs a timeout of %s" % [Time.now.to_f - time.to_f, exec[:timeout]]
-        
-        
-        assert_apply(exec)
-    end
-
-    # Testing #470
-    def test_run_as_created_user
-        exec = nil
-        if Process.uid == 0
-            user = "nosuchuser"
-            assert_nothing_raised("Could not create exec with non-existent user") do
-                exec = Puppet::Type.type(:exec).create(
-                    :command => "/bin/echo yay",
-                    :user => user
-                )
-            end
-        end
-
-        # Now try the group
-        group = "nosuchgroup"
-        assert_nothing_raised("Could not create exec with non-existent user") do
-            exec = Puppet::Type.type(:exec).create(
-                :command => "/bin/echo yay",
-                :group => group
-            )
-        end
-    end
-
-    # make sure paths work both as arrays and strings
-    def test_paths_as_arrays
-        path = %w{/usr/bin /usr/sbin /sbin}
-        exec = nil
-        assert_nothing_raised("Could not use an array for the path") do
-            exec = Puppet::Type.type(:exec).create(:command => "echo yay",
-                :path => path)
-        end
-        assert_equal(path, exec[:path], "array-based path did not match")
-        assert_nothing_raised("Could not use a string for the path") do
-            exec = Puppet::Type.type(:exec).create(:command => "echo yay",
-                :path => path.join(":"))
-        end
-        assert_equal(path, exec[:path], "string-based path did not match")
-        assert_nothing_raised("Could not use a colon-separated strings in an array for the path") do
-            exec = Puppet::Type.type(:exec).create(:command => "echo yay",
-                :path => ["/usr/bin", "/usr/sbin:/sbin"])
-        end
-        assert_equal(path, exec[:path], "colon-separated array path did not match")
-    end
-
-    def test_checks_apply_to_refresh
-        file = tempfile()
-        maker = tempfile()
-        exec = Puppet::Type.type(:exec).create(
-            :title => "maker",
-            :command => "touch #{maker}",
-            :path => ENV["PATH"]
-        )
-
-        # Make sure it runs normally
-        assert_apply(exec)
-        assert(FileTest.exists?(maker), "exec did not run")
-        File.unlink(maker)
-
-        # Now make sure it refreshes
-        assert_nothing_raised("Failed to refresh exec") do
-            exec.refresh
-        end
-        assert(FileTest.exists?(maker), "exec did not run refresh")
-        File.unlink(maker)
-
-        # Now add the checks
-        exec[:creates] = file
-
-        # Make sure it runs when the file doesn't exist
-        assert_nothing_raised("Failed to refresh exec") do
-            exec.refresh
-        end
-        assert(FileTest.exists?(maker), "exec did not refresh when checks passed")
-        File.unlink(maker)
-
-        # Now create the file and make sure it doesn't refresh
-        File.open(file, "w") { |f| f.puts "" }
-        assert_nothing_raised("Failed to refresh exec") do
-            exec.refresh
-        end
-        assert(! FileTest.exists?(maker), "exec refreshed with failing checks")
-    end
-
-    def test_explicit_refresh
-        refresher = tempfile()
-        maker = tempfile()
-        exec = Puppet::Type.type(:exec).create(
-            :title => "maker",
-            :command => "touch #{maker}",
-            :path => ENV["PATH"]
-        )
-
-        # Call refresh normally
-        assert_nothing_raised do
-            exec.refresh
-        end
-
-        # Make sure it created the normal file
-        assert(FileTest.exists?(maker), "normal refresh did not work")
-        File.unlink(maker)
-
-        # Now reset refresh, and make sure it wins
-        assert_nothing_raised("Could not set refresh parameter") do
-            exec[:refresh] = "touch #{refresher}"
-        end
-        assert_nothing_raised do
-            exec.refresh
-        end
-
-        # Make sure it created the normal file
-        assert(FileTest.exists?(refresher), "refresh param was ignored")
-        assert(! FileTest.exists?(maker), "refresh param also ran command")
-    end
-
-    if Puppet.features.root?
-        def test_autorequire_user
-            user = Puppet::Type.type(:user).create(:name => "yay")
-            exec = Puppet::Type.type(:exec).create(:command => "/bin/echo fun", :user => "yay")
-
-            rels = nil
-            assert_nothing_raised("Could not evaluate autorequire") do
-                rels = exec.autorequire
-            end
-            assert(rels.find { |r| r.source == user and r.target == exec }, "Exec did not autorequire user")
-        end
-    end
-end
-
diff --git a/test/ral/type/file.rb b/test/ral/type/file.rb
deleted file mode 100755
index 5cf989a..0000000
--- a/test/ral/type/file.rb
+++ /dev/null
@@ -1,1776 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-require 'fileutils'
-
-class TestFile < Test::Unit::TestCase
-    include PuppetTest::Support::Utils
-    include PuppetTest::FileTesting
-
-    def mkfile(hash)
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(hash)
-        }
-        return file
-    end
-
-    def mktestfile
-        tmpfile = tempfile()
-        File.open(tmpfile, "w") { |f| f.puts rand(100) }
-        @@tmpfiles.push tmpfile
-        mkfile(:name => tmpfile)
-    end
-
-    def setup
-        super
-        @file = Puppet::Type.type(:file)
-        $method = @method_name
-        Puppet[:filetimeout] = -1
-    end
-
-    def teardown
-        Puppet::Util::Storage.clear
-        system("rm -rf %s" % Puppet[:statefile])
-        super
-    end
-
-    def initstorage
-        Puppet::Util::Storage.init
-        Puppet::Util::Storage.load
-    end
-
-    def clearstorage
-        Puppet::Util::Storage.store
-        Puppet::Util::Storage.clear
-    end
-
-    def test_owner
-        file = mktestfile()
-
-        users = {}
-        count = 0
-
-        # collect five users
-        Etc.passwd { |passwd|
-            if count > 5
-                break
-            else
-                count += 1
-            end
-            users[passwd.uid] = passwd.name
-        }
-
-        fake = {}
-        # find a fake user
-        while true
-            a = rand(1000)
-            begin
-                Etc.getpwuid(a)
-            rescue
-                fake[a] = "fakeuser"
-                break
-            end
-        end
-
-        uid, name = users.shift
-        us = {}
-        us[uid] = name
-        users.each { |uid, name|
-            assert_apply(file)
-            assert_nothing_raised() {
-                file[:owner] = name
-            }
-            assert_nothing_raised() {
-                file.retrieve
-            }
-            assert_apply(file)
-        }
-    end
-
-    def test_group
-        file = mktestfile()
-        [%x{groups}.chomp.split(/ /), Process.groups].flatten.each { |group|
-            assert_nothing_raised() {
-                file[:group] = group
-            }
-            assert(file.property(:group))
-            assert(file.property(:group).should)
-        }
-    end
-
-    def test_groups_fails_when_invalid
-        assert_raise(Puppet::Error, "did not fail when the group was empty") do
-            Puppet::Type.type(:file).create :path => "/some/file", :group => ""
-        end
-    end
-
-    if Puppet::Util::SUIDManager.uid == 0
-        def test_createasuser
-            dir = tmpdir()
-
-            user = nonrootuser()
-            path = File.join(tmpdir, "createusertesting")
-            @@tmpfiles << path
-
-            file = nil
-            assert_nothing_raised {
-                file = Puppet.type(:file).create(
-                    :path => path,
-                    :owner => user.name,
-                    :ensure => "file",
-                    :mode => "755"
-                )
-            }
-
-            comp = mk_catalog("createusertest", file)
-
-            assert_events([:file_created], comp)
-        end
-
-        def test_nofollowlinks
-            basedir = tempfile()
-            Dir.mkdir(basedir)
-            file = File.join(basedir, "file")
-            link = File.join(basedir, "link")
-
-            File.open(file, "w", 0644) { |f| f.puts "yayness"; f.flush }
-            File.symlink(file, link)
-
-            # First test 'user'
-            user = nonrootuser()
-
-            inituser = File.lstat(link).uid
-            File.lchown(inituser, nil, link)
-
-            obj = nil
-            assert_nothing_raised {
-                obj = Puppet.type(:file).create(
-                    :title => link,
-                    :owner => user.name
-                )
-            }
-            obj.retrieve
-
-            # Make sure it defaults to managing the link
-            assert_events([:file_changed], obj)
-            assert_equal(user.uid, File.lstat(link).uid)
-            assert_equal(inituser, File.stat(file).uid)
-            File.chown(inituser, nil, file)
-            File.lchown(inituser, nil, link)
-
-            # Try following
-            obj[:links] = :follow
-            assert_events([:file_changed], obj)
-            assert_equal(user.uid, File.stat(file).uid)
-            assert_equal(inituser, File.lstat(link).uid)
-
-            # And then explicitly managing
-            File.chown(inituser, nil, file)
-            File.lchown(inituser, nil, link)
-            obj[:links] = :manage
-            assert_events([:file_changed], obj)
-            assert_equal(user.uid, File.lstat(link).uid)
-            assert_equal(inituser, File.stat(file).uid)
-
-            obj.delete(:owner)
-            obj[:links] = :follow
-
-            # And then test 'group'
-            group = nonrootgroup
-
-            initgroup = File.stat(file).gid
-            obj[:group] = group.name
-
-            obj[:links] = :follow
-            assert_events([:file_changed], obj)
-            assert_equal(group.gid, File.stat(file).gid)
-            File.chown(nil, initgroup, file)
-            File.lchown(nil, initgroup, link)
-
-            obj[:links] = :manage
-            assert_events([:file_changed], obj)
-            assert_equal(group.gid, File.lstat(link).gid)
-            assert_equal(initgroup, File.stat(file).gid)
-        end
-
-        def test_ownerasroot
-            file = mktestfile()
-
-            users = {}
-            count = 0
-
-            # collect five users
-            Etc.passwd { |passwd|
-                if count > 5
-                    break
-                else
-                    count += 1
-                end
-                next if passwd.uid < 0
-                users[passwd.uid] = passwd.name
-            }
-
-            fake = {}
-            # find a fake user
-            while true
-                a = rand(1000)
-                begin
-                    Etc.getpwuid(a)
-                rescue
-                    fake[a] = "fakeuser"
-                    break
-                end
-            end
-
-            users.each { |uid, name|
-                assert_nothing_raised() {
-                    file[:owner] = name
-                }
-                changes = []
-                assert_nothing_raised() {
-                    changes << file.evaluate
-                }
-                assert(changes.length > 0)
-                assert_apply(file)
-                currentvalue = file.retrieve
-                assert(file.insync?(currentvalue))
-                assert_nothing_raised() {
-                    file[:owner] = uid
-                }
-                assert_apply(file)
-                currentvalue = file.retrieve
-                # make sure changing to number doesn't cause a sync
-                assert(file.insync?(currentvalue))
-            }
-
-            # We no longer raise an error here, because we check at run time
-            #fake.each { |uid, name|
-            #    assert_raise(Puppet::Error) {
-            #        file[:owner] = name
-            #    }
-            #    assert_raise(Puppet::Error) {
-            #        file[:owner] = uid
-            #    }
-            #}
-        end
-
-        def test_groupasroot
-            file = mktestfile()
-            [%x{groups}.chomp.split(/ /), Process.groups].flatten.each { |group|
-                next unless Puppet::Util.gid(group) # grr.
-                assert_nothing_raised() {
-                    file[:group] = group
-                }
-                assert(file.property(:group))
-                assert(file.property(:group).should)
-                assert_apply(file)
-                currentvalue = file.retrieve
-                assert(file.insync?(currentvalue))
-                assert_nothing_raised() {
-                    file.delete(:group)
-                }
-            }
-        end
-
-        if Facter.value(:operatingsystem) == "Darwin"
-            def test_sillyowner
-                file = tempfile()
-                File.open(file, "w") { |f| f.puts "" }
-                File.chown(-2, nil, file)
-
-                assert(File.stat(file).uid > 120000, "eh?")
-                user = nonrootuser
-                obj = Puppet::Type.newfile(
-                    :path => file,
-                    :owner => user.name
-                )
-
-                assert_apply(obj)
-
-                assert_equal(user.uid, File.stat(file).uid)
-            end
-        end
-    else
-        $stderr.puts "Run as root for complete owner and group testing"
-    end
-
-    def test_create
-        %w{a b c d}.collect { |name| tempfile() + name.to_s }.each { |path|
-            file =nil
-            assert_nothing_raised() {
-                file = Puppet.type(:file).create(
-                    :name => path,
-                    :ensure => "file"
-                )
-            }
-            assert_events([:file_created], file)
-            assert_events([], file)
-            assert(FileTest.file?(path), "File does not exist")
-            assert(file.insync?(file.retrieve))
-            @@tmpfiles.push path
-        }
-    end
-
-    def test_create_dir
-        basedir = tempfile()
-        Dir.mkdir(basedir)
-        %w{a b c d}.collect { |name| "#{basedir}/%s" % name }.each { |path|
-            file = nil
-            assert_nothing_raised() {
-                file = Puppet.type(:file).create(
-                    :name => path,
-                    :ensure => "directory"
-                )
-            }
-            assert(! FileTest.directory?(path), "Directory %s already exists" %
-                [path])
-            assert_events([:directory_created], file)
-            assert_events([], file)
-            assert(file.insync?(file.retrieve))
-            assert(FileTest.directory?(path))
-            @@tmpfiles.push path
-        }
-    end
-
-    def test_modes
-        file = mktestfile
-        # Set it to something else initially
-        File.chmod(0775, file.title)
-        [0644,0755,0777,0641].each { |mode|
-            assert_nothing_raised() {
-                file[:mode] = mode
-            }
-            assert_events([:file_changed], file)
-            assert_events([], file)
-
-            assert(file.insync?(file.retrieve))
-
-            assert_nothing_raised() {
-                file.delete(:mode)
-            }
-        }
-    end
-
-    def test_checksums
-        types = %w{md5 md5lite timestamp time}
-        exists = "/tmp/sumtest-exists"
-        nonexists = "/tmp/sumtest-nonexists"
-
-        @@tmpfiles << exists
-        @@tmpfiles << nonexists
-
-        # try it both with files that exist and ones that don't
-        files = [exists, nonexists]
-        initstorage
-        File.open(exists,File::CREAT|File::TRUNC|File::WRONLY) { |of|
-            of.puts "initial text"
-        }
-        types.each { |type|
-            files.each { |path|
-                if Puppet[:debug]
-                    Puppet.warning "Testing %s on %s" % [type,path]
-                end
-                file = nil
-                events = nil
-                # okay, we now know that we have a file...
-                assert_nothing_raised() {
-                    file = Puppet.type(:file).create(
-                        :name => path,
-                        :ensure => "file",
-                        :checksum => type
-                    )
-                }
-                trans = nil
-
-                currentvalues = file.retrieve
-
-                if file.title !~ /nonexists/
-                    sum = file.property(:checksum)
-                    assert(sum.insync?(currentvalues[sum]), "file is not in sync")
-                end
-
-                events = assert_apply(file)
-
-                assert(events)
-
-                assert(! events.include?(:file_changed), "File incorrectly changed")
-                assert_events([], file)
-
-                # We have to sleep because the time resolution of the time-based
-                # mechanisms is greater than one second
-                sleep 1 if type =~ /time/
-
-                assert_nothing_raised() {
-                    File.open(path,File::CREAT|File::TRUNC|File::WRONLY) { |of|
-                        of.puts "some more text, yo"
-                    }
-                }
-                Puppet.type(:file).clear
-
-                # now recreate the file
-                assert_nothing_raised() {
-                    file = Puppet.type(:file).create(
-                        :name => path,
-                        :checksum => type
-                    )
-                }
-                trans = nil
-
-                assert_events([:file_changed], file)
-
-                # Run it a few times to make sure we aren't getting
-                # spurious changes.
-                sum = nil
-                assert_nothing_raised do
-                    sum = file.property(:checksum).retrieve
-                end
-                assert(file.property(:checksum).insync?(sum),
-                    "checksum is not in sync")
-
-                sleep 1.1 if type =~ /time/
-                assert_nothing_raised() {
-                    File.unlink(path)
-                    File.open(path,File::CREAT|File::TRUNC|File::WRONLY) { |of|
-                        # We have to put a certain amount of text in here or
-                        # the md5-lite test fails
-                        2.times {
-                            of.puts rand(100)
-                        }
-                        of.flush
-                    }
-                }
-                assert_events([:file_changed], file)
-
-                # verify that we're actually getting notified when a file changes
-                assert_nothing_raised() {
-                    Puppet.type(:file).clear
-                }
-
-                if path =~ /nonexists/
-                    File.unlink(path)
-                end
-            }
-        }
-    end
-
-    def cyclefile(path)
-        # i had problems with using :name instead of :path
-        [:name,:path].each { |param|
-            file = nil
-            changes = nil
-            comp = nil
-            trans = nil
-
-            initstorage
-            assert_nothing_raised {
-                file = Puppet.type(:file).create(
-                    param => path,
-                    :recurse => true,
-                    :checksum => "md5"
-                )
-            }
-            comp = Puppet.type(:component).create(
-                :name => "component"
-            )
-            comp.push file
-            assert_nothing_raised {
-                trans = comp.evaluate
-            }
-            assert_nothing_raised {
-                trans.evaluate
-            }
-            clearstorage
-            Puppet::Type.allclear
-        }
-    end
-    
-    def test_localrecurse
-        # Create a test directory
-        path = tempfile()
-        dir = @file.create :path => path, :mode => 0755, :recurse => true
-        config = mk_catalog(dir)
-        
-        Dir.mkdir(path)
-        
-        # Make sure we return nothing when there are no children
-        ret = nil
-        assert_nothing_raised() { ret = dir.localrecurse(true) }
-        assert_equal([], ret, "empty dir returned children")
-        
-        # Now make a file and make sure we get it
-        test = File.join(path, "file")
-        File.open(test, "w") { |f| f.puts "yay" }
-        assert_nothing_raised() { ret = dir.localrecurse(true) }
-        fileobj = @file[test]
-        assert(fileobj, "child object was not created")
-        assert_equal([fileobj], ret, "child object was not returned")
-        
-        # And that it inherited our recurse setting
-        assert_equal(true, fileobj[:recurse], "file did not inherit recurse")
-        
-        # Make sure it's not returned again
-        assert_nothing_raised() { ret = dir.localrecurse(true) }
-        assert_equal([], ret, "child object was returned twice")
-        
-        # Now just for completion, make sure we will return many files
-        files = []
-        10.times do |i|
-            f = File.join(path, i.to_s)
-            files << f
-            File.open(f, "w") do |o| o.puts "" end
-        end
-        assert_nothing_raised() { ret = dir.localrecurse(true) }
-        assert_equal(files.sort, ret.collect { |f| f.title }.sort,
-            "child object was returned twice")
-        
-        # Clean everything up and start over
-        files << test
-        files.each do |f| File.unlink(f) end
-        
-        # Now make sure we correctly ignore things
-        dir[:ignore] = "*.out"
-        bad = File.join(path, "test.out")
-        good = File.join(path, "yayness")
-        [good, bad].each do |f|
-            File.open(f, "w") { |o| o.puts "" }
-        end
-        
-        assert_nothing_raised() { ret = dir.localrecurse(true) }
-        assert_equal([good], ret.collect { |f| f.title }, "ignore failed")
-        
-        # Now make sure purging works
-        dir[:purge] = true
-        dir[:ignore] = "svn"
-        
-        assert_nothing_raised() { ret = dir.localrecurse(true) }
-        assert_equal([bad], ret.collect { |f| f.title }, "purge failed")
-        
-        badobj = @file[bad]
-        assert(badobj, "did not create bad object")
-    end
-    
-    def test_recurse
-        basedir = tempfile()
-        FileUtils.mkdir_p(basedir)
-        
-        # Create our file
-        dir = nil
-        assert_nothing_raised {
-            dir = Puppet.type(:file).create(
-                :path => basedir,
-                :check => %w{owner mode group}
-            )
-        }
-        
-        return_nil = false
-        
-        # and monkey-patch it
-        [:localrecurse, :linkrecurse].each do |m|
-            dir.meta_def(m) do |recurse|
-                if return_nil # for testing nil return, of course
-                    return nil
-                else
-                    return [recurse]
-                end
-            end
-        end
-
-        # We have to special-case this, because it returns a list of
-        # found files.
-        dir.meta_def(:sourcerecurse) do |recurse|
-            if return_nil # for testing nil return, of course
-                return nil
-            else
-                return [recurse], []
-            end
-        end
-        
-        # First try it with recurse set to false
-        dir[:recurse] = false
-        assert_nothing_raised do
-            assert_nil(dir.recurse)
-        end
-        
-        # Now try it with the different valid positive values
-        [true, "true", "inf", 50].each do |value|
-            assert_nothing_raised { dir[:recurse] = value}
-            
-            # Now make sure the methods are called appropriately
-            ret = nil
-            assert_nothing_raised do
-                ret = dir.recurse
-            end
-            
-            # We should only call the localrecurse method, so make sure
-            # that's the case
-            if value == 50
-                # Make sure our counter got decremented
-                assert_equal([49], ret, "did not call localrecurse")
-            else
-                assert_equal([true], ret, "did not call localrecurse")
-            end
-        end
-        
-        # Make sure it doesn't recurse when we've set recurse to false
-        [false, "false"].each do |value|
-            assert_nothing_raised { dir[:recurse] = value }
-            
-            ret = nil
-            assert_nothing_raised() { ret = dir.recurse }
-            assert_nil(ret)
-        end
-        dir[:recurse] = true
-        
-        # Now add a target, so we do the linking thing
-        dir[:target] = tempfile()
-        ret = nil
-        assert_nothing_raised { ret = dir.recurse }
-        assert_equal([true, true], ret, "did not call linkrecurse")
-        
-        # And add a source, and make sure we call that
-        dir[:source] = tempfile()
-        assert_nothing_raised { ret = dir.recurse }
-        assert_equal([true, true, true], ret, "did not call linkrecurse")
-        
-        # Lastly, make sure we correctly handle returning nil
-        return_nil = true
-        assert_nothing_raised { ret = dir.recurse }
-    end
-    
-    def test_recurse?
-        file = Puppet::Type.type(:file).create :path => tempfile
-        
-        # Make sure we default to false
-        assert(! file.recurse?, "Recurse defaulted to true")
-        
-        [true, "true", 10, "inf"].each do |value|
-            file[:recurse] = value
-            assert(file.recurse?, "%s did not cause recursion" % value)
-        end
-        
-        [false, "false", 0].each do |value|
-            file[:recurse] = value
-            assert(! file.recurse?, "%s caused recursion" % value)
-        end
-    end
-    
-    def test_recursion
-        basedir = tempfile()
-        subdir = File.join(basedir, "subdir")
-        tmpfile = File.join(basedir,"testing")
-        FileUtils.mkdir_p(subdir)
-
-        dir = nil
-        [true, "true", "inf", 50].each do |value|
-            assert_nothing_raised {
-                dir = Puppet.type(:file).create(
-                    :path => basedir,
-                    :recurse => value,
-                    :check => %w{owner mode group}
-                )
-            }
-            config = mk_catalog dir
-            
-            children = nil
-
-            assert_nothing_raised {
-                children = dir.eval_generate
-            }
-            
-            assert_equal([subdir], children.collect {|c| c.title },
-                "Incorrect generated children")
-            
-            # Remove our subdir resource, 
-            subdir_resource = config.resource(:file, subdir)
-            config.remove_resource(subdir_resource)
-
-            # Create the test file
-            File.open(tmpfile, "w") { |f| f.puts "yayness" }
-            
-            assert_nothing_raised {
-                children = dir.eval_generate
-            }
-
-            # And make sure we get both resources back.
-            assert_equal([subdir, tmpfile].sort, children.collect {|c| c.title }.sort,
-                "Incorrect generated children when recurse == %s" % value.inspect)
-            
-            File.unlink(tmpfile)
-            Puppet.type(:file).clear
-        end
-    end
-
-    def test_filetype_retrieval
-        file = nil
-
-        # Verify it retrieves files of type directory
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => tmpdir(),
-                :check => :type
-            )
-        }
-
-        assert_nothing_raised {
-            file.evaluate
-        }
-
-        assert_equal("directory", file.property(:type).retrieve)
-
-        # And then check files
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => tempfile(),
-                :ensure => "file"
-            )
-        }
-
-        assert_apply(file)
-        file[:check] = "type"
-        assert_apply(file)
-
-        assert_equal("file", file.property(:type).retrieve)
-
-        file[:type] = "directory"
-
-        currentvalues = {}
-        assert_nothing_raised { currentvalues = file.retrieve }
-
-        # The 'retrieve' method sets @should to @is, so they're never
-        # out of sync.  It's a read-only class.
-        assert(file.insync?(currentvalues))
-    end
-
-    def test_remove
-        basedir = tempfile()
-        subdir = File.join(basedir, "this")
-        FileUtils.mkdir_p(subdir)
-
-        dir = nil
-        assert_nothing_raised {
-            dir = Puppet.type(:file).create(
-                :path => basedir,
-                :recurse => true,
-                :check => %w{owner mode group}
-            )
-        }
-        mk_catalog dir
-
-        assert_nothing_raised {
-            dir.eval_generate
-        }
-
-        obj = nil
-        assert_nothing_raised {
-            obj = Puppet.type(:file)[subdir]
-        }
-
-        assert(obj, "Could not retrieve subdir object")
-
-        assert_nothing_raised {
-            obj.remove(true)
-        }
-
-        assert_nothing_raised {
-            obj = Puppet.type(:file)[subdir]
-        }
-
-        assert_nil(obj, "Retrieved removed object")
-    end
-
-    def test_path
-        dir = tempfile()
-
-        path = File.join(dir, "subdir")
-
-        assert_nothing_raised("Could not make file") {
-            FileUtils.mkdir_p(File.dirname(path))
-            File.open(path, "w") { |f| f.puts "yayness" }
-        }
-
-        file = nil
-        dirobj = nil
-        assert_nothing_raised("Could not make file object") {
-            dirobj = Puppet.type(:file).create(
-                :path => dir,
-                :recurse => true,
-                :check => %w{mode owner group}
-            )
-        }
-        mk_catalog dirobj
-
-        assert_nothing_raised {
-            dirobj.eval_generate
-        }
-
-        assert_nothing_raised {
-            file = dirobj.class[path]
-        }
-
-        assert(file, "Could not retrieve file object")
-
-        assert_equal("/%s" % file.ref, file.path)
-    end
-
-    def test_autorequire
-        basedir = tempfile()
-        subfile = File.join(basedir, "subfile")
-
-        baseobj = Puppet.type(:file).create(
-            :name => basedir,
-            :ensure => "directory"
-        )
-
-        subobj = Puppet.type(:file).create(
-            :name => subfile,
-            :ensure => "file"
-        )
-        edge = nil
-        assert_nothing_raised do
-            edge = subobj.autorequire.shift
-        end
-        assert_equal(baseobj, edge.source, "file did not require its parent dir")
-        assert_equal(subobj, edge.target, "file did not require its parent dir")
-    end
-
-    def test_content
-        file = tempfile()
-        str = "This is some content"
-
-        obj = nil
-        assert_nothing_raised {
-            obj = Puppet.type(:file).create(
-                :name => file,
-                :content => str
-            )
-        }
-
-        assert(!obj.insync?(obj.retrieve), "Object is incorrectly in sync")
-
-        assert_events([:file_created], obj)
-
-        currentvalues = obj.retrieve
-
-        assert(obj.insync?(currentvalues), "Object is not in sync")
-
-        text = File.read(file)
-
-        assert_equal(str, text, "Content did not copy correctly")
-
-        newstr = "Another string, yo"
-
-        obj[:content] = newstr
-
-        assert(!obj.insync?(obj.retrieve), "Object is incorrectly in sync")
-
-        assert_events([:file_changed], obj)
-
-        text = File.read(file)
-
-        assert_equal(newstr, text, "Content did not copy correctly")
-
-        currentvalues = obj.retrieve
-        assert(obj.insync?(currentvalues), "Object is not in sync")
-    end
-
-    # Unfortunately, I know this fails
-    def disabled_test_recursivemkdir
-        path = tempfile()
-        subpath = File.join(path, "this", "is", "a", "dir")
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => subpath,
-                :ensure => "directory",
-                :recurse => true
-            )
-        }
-
-        comp = mk_catalog("yay", file)
-        comp.finalize
-        assert_apply(comp)
-        #assert_events([:directory_created], comp)
-
-        assert(FileTest.directory?(subpath), "Did not create directory")
-    end
-
-    # Make sure that content updates the checksum on the same run
-    def test_checksumchange_for_content
-        dest = tempfile()
-        File.open(dest, "w") { |f| f.puts "yayness" }
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => dest,
-                :checksum => "md5",
-                :content => "This is some content"
-            )
-        }
-
-        file.retrieve
-
-        assert_events([:file_changed], file)
-        file.retrieve
-        assert_events([], file)
-    end
-
-    # Make sure that content updates the checksum on the same run
-    def test_checksumchange_for_ensure
-        dest = tempfile()
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => dest,
-                :checksum => "md5",
-                :ensure => "file"
-            )
-        }
-
-        file.retrieve
-
-        assert_events([:file_created], file)
-        file.retrieve
-        assert_events([], file)
-    end
-
-    # Make sure that content gets used before ensure
-    def test_contentbeatsensure
-        dest = tempfile()
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => dest,
-                :ensure => "file",
-                :content => "this is some content, yo"
-            )
-        }
-
-        currentvalues = file.retrieve
-
-        assert_events([:file_created], file)
-        file.retrieve
-        assert_events([], file)
-        assert_events([], file)
-    end
-
-    # Make sure that content gets used before ensure
-    def test_deletion_beats_source
-        dest = tempfile()
-        source = tempfile()
-        File.open(source, "w") { |f| f.puts "yay" }
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => dest,
-                :ensure => :absent,
-                :source => source
-            )
-        }
-
-        file.retrieve
-
-        assert_events([], file)
-        assert(! FileTest.exists?(dest), "file was copied during deletion")
-
-        # Now create the dest, and make sure it gets deleted
-        File.open(dest, "w") { |f| f.puts "boo" }
-        assert_events([:file_removed], file)
-        assert(! FileTest.exists?(dest), "file was not deleted during deletion")
-    end
-
-    def test_nameandpath
-        path = tempfile()
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :title => "fileness",
-                :path => path,
-                :content => "this is some content"
-            )
-        }
-
-        assert_apply(file)
-
-        assert(FileTest.exists?(path))
-    end
-
-    # Make sure that a missing group isn't fatal at object instantiation time.
-    def test_missinggroup
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :path => tempfile(),
-                :group => "fakegroup"
-            )
-        }
-
-        assert(file.property(:group), "Group property failed")
-    end
-
-    def test_modecreation
-        path = tempfile()
-        file = Puppet.type(:file).create(
-            :path => path,
-            :ensure => "file",
-            :mode => "0777"
-        )
-        assert_equal(0777, file.should(:mode),
-            "Mode did not get set correctly")
-        assert_apply(file)
-        assert_equal(0777, File.stat(path).mode & 007777,
-            "file mode is incorrect")
-        File.unlink(path)
-        file[:ensure] = "directory"
-        assert_apply(file)
-        assert_equal(0777, File.stat(path).mode & 007777,
-            "directory mode is incorrect")
-    end
-
-    # If both 'ensure' and 'content' are used, make sure that all of the other
-    # properties are handled correctly.
-    def test_contentwithmode
-        path = tempfile()
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :path => path,
-                :ensure => "file",
-                :content => "some text\n",
-                :mode => 0755
-            )
-        }
-
-        assert_apply(file)
-        assert_equal("%o" % 0755, "%o" % (File.stat(path).mode & 007777))
-    end
-
-    def test_backupmodes
-        File.umask(0022)
-        
-        file = tempfile()
-        newfile = tempfile()
-
-        File.open(file, "w", 0411) { |f| f.puts "yayness" }
-
-        obj = nil
-        assert_nothing_raised {
-            obj = Puppet::Type.type(:file).create(
-                :path => file, :content => "rahness\n", :backup => ".puppet-bak"
-            )
-        }
-
-        assert_apply(obj)
-
-        backupfile = file + obj[:backup]
-        @@tmpfiles << backupfile
-        assert(FileTest.exists?(backupfile),
-            "Backup file %s does not exist" % backupfile)
-
-        assert_equal(0411, filemode(backupfile),
-            "File mode is wrong for backupfile")
-
-        bucket = "bucket"
-        bpath = tempfile()
-        Dir.mkdir(bpath)
-        Puppet::Type.type(:filebucket).create(
-            :title => bucket, :path => bpath
-        )
-
-        obj[:backup] = bucket
-        obj[:content] = "New content"
-        assert_apply(obj)
-
-        md5 = "18cc17fa3047fcc691fdf49c0a7f539a"
-        dir, file, pathfile = Puppet::Network::Handler.filebucket.paths(bpath, md5)
-
-        assert_equal(0440, filemode(file))
-    end
-
-    def test_largefilechanges
-        source = tempfile()
-        dest = tempfile()
-
-        # Now make a large file
-        File.open(source, "w") { |f|
-            500.times { |i| f.puts "line %s" % i }
-        }
-
-        obj = Puppet::Type.type(:file).create(
-            :title => dest, :source => source
-        )
-
-        assert_events([:file_created], obj)
-
-        File.open(source, File::APPEND|File::WRONLY) { |f| f.puts "another line" }
-
-        assert_events([:file_changed], obj)
-
-        # Now modify the dest file
-        File.open(dest, File::APPEND|File::WRONLY) { |f| f.puts "one more line" }
-
-        assert_events([:file_changed, :file_changed], obj)
-
-    end
-
-    def test_replacefilewithlink
-        path = tempfile()
-        link = tempfile()
-
-        File.open(path, "w") { |f| f.puts "yay" }
-        File.open(link, "w") { |f| f.puts "a file" }
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :ensure => path,
-                :path => link
-            )
-        }
-
-        assert_events([:link_created], file)
-
-        assert(FileTest.symlink?(link), "Link was not created")
-
-        assert_equal(path, File.readlink(link), "Link was created incorrectly")
-    end
-
-    def test_file_with_spaces
-        dir = tempfile()
-        Dir.mkdir(dir)
-        source = File.join(dir, "file spaces")
-        dest = File.join(dir, "another space")
-
-        File.open(source, "w") { |f| f.puts :yay }
-        obj = Puppet::Type.type(:file).create(
-            :path => dest,
-            :source => source
-        )
-        assert(obj, "Did not create file")
-
-        assert_apply(obj)
-
-        assert(FileTest.exists?(dest), "File did not get created")
-    end
-
-    def test_present_matches_anything
-        path = tempfile()
-
-        file = Puppet::Type.newfile(:path => path, :ensure => :present)
-
-        currentvalues = file.retrieve
-        assert(! file.insync?(currentvalues), "File incorrectly in sync")
-
-        # Now make a file
-        File.open(path, "w") { |f| f.puts "yay" }
-
-        currentvalues = file.retrieve
-        assert(file.insync?(currentvalues), "File not in sync")
-
-        # Now make a directory
-        File.unlink(path)
-        Dir.mkdir(path)
-
-        currentvalues = file.retrieve
-        assert(file.insync?(currentvalues), "Directory not considered 'present'")
-
-        Dir.rmdir(path)
-
-        # Now make a link
-        file[:links] = :manage
-
-        otherfile = tempfile()
-        File.symlink(otherfile, path)
-
-        currentvalues = file.retrieve
-        assert(file.insync?(currentvalues), "Symlink not considered 'present'")
-        File.unlink(path)
-
-        # Now set some content, and make sure it works
-        file[:content] = "yayness"
-
-        assert_apply(file)
-
-        assert_equal("yayness", File.read(path), "Content did not get set correctly")
-    end
-
-    # Make sure unmanaged files are purged.
-    def test_purge
-        sourcedir = tempfile()
-        destdir = tempfile()
-        Dir.mkdir(sourcedir)
-        Dir.mkdir(destdir)
-        sourcefile = File.join(sourcedir, "sourcefile")
-        dsourcefile = File.join(destdir, "sourcefile")
-        localfile = File.join(destdir, "localfile")
-        purgee = File.join(destdir, "to_be_purged")
-        File.open(sourcefile, "w") { |f| f.puts "funtest" }
-        # this file should get removed
-        File.open(purgee, "w") { |f| f.puts "footest" }
-
-        lfobj = Puppet::Type.newfile(
-            :title => "localfile",
-            :path => localfile,
-            :content => "rahtest",
-            :ensure => :file,
-            :backup => false
-        )
-
-        destobj = Puppet::Type.newfile(:title => "destdir", :path => destdir,
-                                    :source => sourcedir,
-                                    :backup => false,
-                                    :recurse => true)
-
-        config = mk_catalog(lfobj, destobj)
-        config.apply
-
-        assert(FileTest.exists?(dsourcefile), "File did not get copied")
-        assert(FileTest.exists?(localfile), "Local file did not get created")
-        assert(FileTest.exists?(purgee), "Purge target got prematurely purged")
-
-        assert_nothing_raised { destobj[:purge] = true }
-        config.apply
-
-        assert(FileTest.exists?(localfile), "Local file got purged")
-        assert(FileTest.exists?(dsourcefile), "Source file got purged")
-        assert(! FileTest.exists?(purgee), "File did not get purged")
-    end
-
-    # Testing #274.  Make sure target can be used without 'ensure'.
-    def test_target_without_ensure
-        source = tempfile()
-        dest = tempfile()
-        File.open(source, "w") { |f| f.puts "funtest" }
-
-        obj = nil
-        assert_nothing_raised {
-            obj = Puppet::Type.newfile(:path => dest, :target => source)
-        }
-
-        assert_apply(obj)
-    end
-
-    def test_autorequire_owner_and_group
-        file = tempfile()
-        comp = nil
-        user = nil
-        group =nil
-        home = nil
-        ogroup = nil
-        assert_nothing_raised {
-            user = Puppet.type(:user).create(
-                :name => "pptestu",
-                :home => file,
-                :gid => "pptestg"
-            )
-            home = Puppet.type(:file).create(
-                :path => file,
-                :owner => "pptestu",
-                :group => "pptestg",
-                :ensure => "directory"
-            )
-            group = Puppet.type(:group).create(
-                :name => "pptestg"
-            )
-            comp = mk_catalog(user, group, home)
-        }
-        
-        # Now make sure we get a relationship for each of these
-        rels = nil
-        assert_nothing_raised { rels = home.autorequire }
-        assert(rels.detect { |e| e.source == user }, "owner was not autorequired")
-        assert(rels.detect { |e| e.source == group }, "group was not autorequired")
-    end
-
-    # Testing #309 -- //my/file => /my/file
-    def test_slash_deduplication
-        ["/my/////file/for//testing", "//my/file/for/testing///",
-            "/my/file/for/testing"].each do |path|
-            file = nil
-            assert_nothing_raised do
-                file = Puppet::Type.newfile(:path => path)
-            end
-
-            assert_equal("/my/file/for/testing", file.title)
-            assert_equal(file, Puppet::Type.type(:file)["/my/file/for/testing"])
-            Puppet::Type.type(:file).clear
-        end
-    end
-
-    # Testing #304
-    def test_links_to_directories
-        link = tempfile()
-        file = tempfile()
-        dir = tempfile()
-        Dir.mkdir(dir)
-
-        bucket = Puppet::Type.newfilebucket :name => "main"
-        File.symlink(dir, link)
-        File.open(file, "w") { |f| f.puts "" }
-        assert_equal(dir, File.readlink(link))
-        obj = Puppet::Type.newfile :path => link, :ensure => :link, :target => file, :recurse => false, :backup => "main"
-
-        assert_apply(obj)
-
-        assert_equal(file, File.readlink(link))
-    end
-
-    # Testing #303
-    def test_nobackups_with_links
-        link = tempfile()
-        new = tempfile()
-
-        File.open(link, "w") { |f| f.puts "old" }
-        File.open(new, "w") { |f| f.puts "new" }
-        obj = Puppet::Type.newfile :path => link, :ensure => :link,
-            :target => new, :recurse => true, :backup => false
-
-        assert_nothing_raised do
-            obj.handlebackup
-        end
-
-        bfile = [link, "puppet-bak"].join(".")
-
-        assert(! FileTest.exists?(bfile), "Backed up when told not to")
-
-        assert_apply(obj)
-
-        assert(! FileTest.exists?(bfile), "Backed up when told not to")
-    end
-
-    # Make sure we consistently handle backups for all cases.
-    def test_ensure_with_backups
-        # We've got three file types, so make sure we can replace any type
-        # with the other type and that backups are done correctly.
-        types = [:file, :directory, :link]
-
-        dir = tempfile()
-        path = File.join(dir, "test")
-        linkdest = tempfile()
-        creators = {
-            :file => proc { File.open(path, "w") { |f| f.puts "initial" } },
-            :directory => proc { Dir.mkdir(path) },
-            :link => proc { File.symlink(linkdest, path) }
-        }
-
-        bucket = Puppet::Type.newfilebucket :name => "main", :path => tempfile()
-
-        obj = Puppet::Type.newfile :path => path, :force => true,
-            :links => :manage
-
-        Puppet[:trace] = true
-        ["main", false].each do |backup|
-            obj[:backup] = backup
-            obj.finish
-            types.each do |should|
-                types.each do |is|
-                    # It makes no sense to replace a directory with a directory
-                    # next if should == :directory and is == :directory
-
-                    Dir.mkdir(dir)
-
-                    # Make the thing
-                    creators[is].call
-
-                    obj[:ensure] = should
-
-                    if should == :link
-                        obj[:target] = linkdest
-                    else
-                        if obj.property(:target)
-                            obj.delete(:target)
-                        end
-                    end
-
-                    # First try just removing the initial data
-                    assert_nothing_raised do
-                        obj.remove_existing(should)
-                    end
-
-                    unless is == should
-                        # Make sure the original is gone
-                        assert(! FileTest.exists?(obj[:path]),
-                            "remove_existing did not work: " +
-                            "did not remove %s with %s" % [is, should])
-                    end
-                    FileUtils.rmtree(obj[:path])
-
-                    # Now make it again
-                    creators[is].call
-
-                    property = obj.property(:ensure)
-
-                    currentvalue = property.retrieve
-                    unless property.insync?(currentvalue)
-                        assert_nothing_raised do
-                            property.sync
-                        end
-                    end
-                    FileUtils.rmtree(dir)
-                end
-            end
-        end
-    end
-    
-    if Process.uid == 0
-    # Testing #364.
-    def test_writing_in_directories_with_no_write_access
-        # Make a directory that our user does not have access to
-        dir = tempfile()
-        Dir.mkdir(dir)
-        
-        # Get a fake user
-        user = nonrootuser
-        # and group
-        group = nonrootgroup
-        
-        # First try putting a file in there
-        path = File.join(dir, "file")
-        file = Puppet::Type.newfile :path => path, :owner => user.name, :group => group.name, :content => "testing"
-        
-        # Make sure we can create it
-        assert_apply(file)
-        assert(FileTest.exists?(path), "File did not get created")
-        # And that it's owned correctly
-        assert_equal(user.uid, File.stat(path).uid, "File has the wrong owner")
-        assert_equal(group.gid, File.stat(path).gid, "File has the wrong group")
-
-        assert_equal("testing", File.read(path), "file has the wrong content")
-        
-        # Now make a dir
-        subpath = File.join(dir, "subdir")
-        subdir = Puppet::Type.newfile :path => subpath, :owner => user.name, :group => group.name, :ensure => :directory
-        # Make sure we can create it
-        assert_apply(subdir)
-        assert(FileTest.directory?(subpath), "File did not get created")
-        # And that it's owned correctly
-        assert_equal(user.uid, File.stat(subpath).uid, "File has the wrong owner")
-        assert_equal(group.gid, File.stat(subpath).gid, "File has the wrong group")
-
-        assert_equal("testing", File.read(path), "file has the wrong content")
-    end
-    end
-    
-    # #366
-    def test_replace_aliases
-        file = Puppet::Type.newfile :path => tempfile()
-        file[:replace] = :yes
-        assert_equal(:true, file[:replace], ":replace did not alias :true to :yes")
-        file[:replace] = :no
-        assert_equal(:false, file[:replace], ":replace did not alias :false to :no")
-    end
-    
-    # #365 -- make sure generated files also use filebuckets.
-    def test_recursive_filebuckets
-        source = tempfile()
-        dest = tempfile()
-        s1 = File.join(source, "1")
-        sdir = File.join(source, "dir")
-        s2 = File.join(sdir, "2")
-        Dir.mkdir(source)
-        Dir.mkdir(sdir)
-        [s1, s2].each { |file| File.open(file, "w") { |f| f.puts "yay: %s" % File.basename(file) } }
-        
-        sums = {}
-        [s1, s2].each do |f|
-            sums[File.basename(f)] = Digest::MD5.hexdigest(File.read(f))
-        end
-        
-        dfiles = [File.join(dest, "1"), File.join(dest, "dir", "2")]
-        
-        bpath = tempfile
-        bucket = Puppet::Type.type(:filebucket).create :name => "rtest", :path => bpath
-        dipper = bucket.bucket
-        dipper = Puppet::Network::Handler.filebucket.new(
-            :Path => bpath
-        )
-        assert(dipper, "did not receive bucket client")
-        file = Puppet::Type.newfile :path => dest, :source => source, :recurse => true, :backup => "rtest"
-        
-        assert_apply(file)
-        dfiles.each do |f|
-            assert(FileTest.exists?(f), "destfile %s was not created" % f)
-        end
-        
-        # Now modify the source files to make sure things get backed up correctly
-        [s1, s2].each { |sf| File.open(sf, "w") { |f|
-            f.puts "boo: %s" % File.basename(sf)
-        } }
-        
-        assert_apply(file)
-        dfiles.each do |f|
-            assert_equal("boo: %s\n" % File.basename(f), File.read(f),
-                "file was not copied correctly")
-        end
-        
-        # Make sure we didn't just copy the files over to backup locations
-        dfiles.each do |f|
-            assert(! FileTest.exists?(f + "rtest"),
-            "file %s was copied for backup instead of bucketed" % File.basename(f))
-        end
-        
-        # Now make sure we can get the source sums from the bucket
-        sums.each do |f, sum|
-            result = nil
-            assert_nothing_raised do
-                result = dipper.getfile(sum)
-            end
-            assert(result, "file %s was not backed to filebucket" % f)
-            assert_equal("yay: %s\n" % f, result, "file backup was not correct")
-        end
-    end
-    
-    def test_backup
-        path = tempfile()
-        file = Puppet::Type.newfile :path => path, :content => "yay"
-        
-        [false, :false, "false"].each do |val|
-            assert_nothing_raised do
-                file[:backup] = val
-            end
-            assert_equal(false, file[:backup], "%s did not translate" % val.inspect)
-        end
-        [true, :true, "true", ".puppet-bak"].each do |val|
-            assert_nothing_raised do
-                file[:backup] = val
-            end
-            assert_equal(".puppet-bak", file[:backup], "%s did not translate" % val.inspect)
-        end
-        
-        # Now try a non-bucket string
-        assert_nothing_raised do
-            file[:backup] = ".bak"
-        end
-        assert_equal(".bak", file[:backup], ".bak did not translate")
-        
-        # Now try a non-existent bucket
-        assert_nothing_raised do
-            file[:backup] = "main"
-        end
-        assert_equal("main", file[:backup], "bucket name was not retained")
-        assert_equal("main", file.bucket, "file's bucket was not set")
-        
-        # And then an existing bucket
-        obj = Puppet::Type.type(:filebucket).create :name => "testing"
-        bucket = obj.bucket
-        
-        assert_nothing_raised do
-            file[:backup] = "testing"
-        end
-        assert_equal("testing", file[:backup], "backup value was reset")
-        assert_equal(obj.bucket, file.bucket, "file's bucket was not set")
-    end
-    
-    def test_pathbuilder
-        dir = tempfile()
-        Dir.mkdir(dir)
-        file = File.join(dir, "file")
-        File.open(file, "w") { |f| f.puts "" }
-        obj = Puppet::Type.newfile :path => dir, :recurse => true, :mode => 0755
-        mk_catalog obj
-        
-        assert_equal("/%s" % obj.ref, obj.path)
-        
-        list = obj.eval_generate
-        fileobj = obj.class[file]
-        assert(fileobj, "did not generate file object")
-        assert_equal("/%s" % fileobj.ref, fileobj.path, "did not generate correct subfile path")
-    end
-    
-    # Testing #403
-    def test_removal_with_content_set
-        path = tempfile()
-        File.open(path, "w") { |f| f.puts "yay" }
-        file = Puppet::Type.newfile(:name => path, :ensure => :absent, :content => "foo")
-        
-        assert_apply(file)
-        assert(! FileTest.exists?(path), "File was not removed")
-    end
-    
-    # Testing #434
-    def test_stripping_extra_slashes_during_lookup
-        file = Puppet::Type.newfile(:path => "/one/two")
-        %w{/one/two/ /one/two /one//two //one//two//}.each do |path|
-            assert(Puppet::Type.type(:file)[path], "could not look up file via path %s" % path)
-        end
-    end
-    
-    # Testing #438
-    def test_creating_properties_conflict
-        file = tempfile()
-        first = tempfile()
-        second = tempfile()
-        params = [:content, :source, :target]
-        params.each do |param|
-            assert_nothing_raised("%s conflicted with ensure" % [param]) do
-                Puppet::Type.newfile(:path => file, param => first, :ensure => :file)
-            end
-            Puppet::Type.type(:file).clear
-            params.each do |other|
-                next if other == param
-                assert_raise(Puppet::Error, "%s and %s did not conflict" % [param, other]) do
-                    Puppet::Type.newfile(:path => file, other => first, param => second)
-                end
-            end
-        end
-    end
-
-    # Testing #508
-    if Process.uid == 0
-    def test_files_replace_with_right_attrs
-        source = tempfile()
-        File.open(source, "w") { |f|
-            f.puts "some text"
-        }
-        File.chmod(0755, source)
-        user = nonrootuser
-        group = nonrootgroup
-        path = tempfile()
-        good = {:uid => user.uid, :gid => group.gid, :mode => 0640}
-
-        run = Proc.new do |obj, msg|
-            assert_apply(obj)
-            stat = File.stat(obj[:path])
-            good.each do |should, sval|
-                if should == :mode
-                    current = filemode(obj[:path])
-                else
-                    current = stat.send(should)
-                end
-                assert_equal(sval, current,
-                    "Attr %s was not correct %s" % [should, msg])
-            end
-        end
-
-        file = Puppet::Type.newfile(:path => path, :owner => user.name,
-            :group => group.name, :mode => 0640, :backup => false)
-        {:source => source, :content => "some content"}.each do |attr, value|
-            file[attr] = value
-            # First create the file
-            run.call(file, "upon creation with %s" % attr)
-
-            # Now change something so that we replace the file
-            case attr
-            when :source:
-                    File.open(source, "w") { |f| f.puts "some different text" }
-            when :content: file[:content] = "something completely different"
-            else
-                raise "invalid attr %s" % attr
-            end
-            
-            # Run it again
-            run.call(file, "after modification with %s" % attr)
-
-            # Now remove the file and the attr
-            file.delete(attr)
-            File.unlink(path)
-        end
-    end
-    end
-
-    # #505
-    def test_numeric_recurse
-        dir = tempfile()
-        subdir = File.join(dir, "subdir")
-        other = File.join(subdir, "deeper")
-        file = File.join(other, "file")
-        [dir, subdir, other].each { |d| Dir.mkdir(d) }
-        File.open(file, "w") { |f| f.puts "yay" }
-        File.chmod(0644, file)
-        obj = Puppet::Type.newfile(:path => dir, :mode => 0750, :recurse => "2")
-        config = mk_catalog(obj)
-
-        children = nil
-        assert_nothing_raised("Failure when recursing") do
-            children = obj.eval_generate
-        end
-        assert(obj.class[subdir], "did not create subdir object")
-        children.each do |c|
-            assert_nothing_raised("Failure when recursing on %s" % c) do
-                c.catalog = config
-                others = c.eval_generate
-            end
-        end
-        oobj = obj.class[other]
-        assert(oobj, "did not create other object")
-
-        assert_nothing_raised do
-            assert_nil(oobj.eval_generate, "recursed too far")
-        end
-    end
-
-    # Make sure we default to the "puppet" filebucket, rather than a string
-    def test_backup_defaults_to_bucket
-        path = tempfile
-        file = Puppet::Type.newfile(:path => path, :content => 'some content')
-        file.finish
-
-        assert_instance_of(Puppet::Network::Client::Dipper, file.bucket,
-            "did not default to a filebucket for backups")
-    end
-
-    # #515 - make sure 'ensure' other than "link" is deleted during recursion
-    def test_ensure_deleted_during_recursion
-        dir = tempfile()
-        Dir.mkdir(dir)
-        file = File.join(dir, "file")
-        File.open(file, "w") { |f| f.puts "asdfasdf" }
-
-        obj = Puppet::Type.newfile(:path => dir, :ensure => :directory,
-            :recurse => true)
-
-        config = mk_catalog(obj)
-        children = nil
-        assert_nothing_raised do
-            children = obj.eval_generate
-        end
-        fobj = obj.class[file]
-        assert(fobj, "did not create file object")
-        assert(fobj.should(:ensure) != :directory, "ensure was passed to child")
-    end
-
-    # #567
-    def test_missing_files_are_in_sync
-        file = tempfile
-        obj = Puppet::Type.newfile(:path => file, :mode => 0755)
-
-        changes = obj.evaluate
-        assert(changes.empty?, "Missing file with no ensure resulted in changes")
-    end
-
-    def test_root_dir_is_named_correctly
-        obj = Puppet::Type.newfile(:path => '/', :mode => 0755)
-        assert_equal("/", obj.title, "/ directory was changed to empty string")
-    end
-
-    # #1010 and #1037 -- write should fail if the written checksum does not
-    # match the file we thought we were writing.
-    def test_write_validates_checksum
-        file = tempfile
-        inst = Puppet::Type.newfile(:path => file, :content => "something")
-
-        tmpfile = file + ".puppettmp"
-
-        wh = mock 'writehandle', :print => nil
-        rh = mock 'readhandle'
-        rh.expects(:read).with(512).times(2).returns("other").then.returns(nil)
-        File.expects(:open).with { |*args| args[0] == tmpfile and args[1] != "r" }.yields(wh)
-        File.expects(:open).with { |*args| args[0] == tmpfile and args[1] == "r" }.yields(rh)
-
-        File.stubs(:rename)
-        FileTest.stubs(:exist?).returns(true)
-        FileTest.stubs(:file?).returns(true)
-
-        inst.expects(:fail)
-        inst.write("something", :whatever)
-    end
-end
diff --git a/test/ral/type/file/target.rb b/test/ral/type/file/target.rb
deleted file mode 100755
index 035ea90..0000000
--- a/test/ral/type/file/target.rb
+++ /dev/null
@@ -1,364 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-require 'fileutils'
-
-class TestFileTarget < Test::Unit::TestCase
-    include PuppetTest::Support::Utils
-    include PuppetTest::FileTesting
-
-    def setup
-        super
-        @file = Puppet::Type.type(:file)
-    end
-
-    # Make sure we can create symlinks
-    def test_symlinks
-        path = tempfile()
-        link = tempfile()
-
-        File.open(path, "w") { |f| f.puts "yay" }
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :title => "somethingelse",
-                :ensure => path,
-                :path => link
-            )
-        }
-
-        assert_events([:link_created], file)
-
-        assert(FileTest.symlink?(link), "Link was not created")
-
-        assert_equal(path, File.readlink(link), "Link was created incorrectly")
-
-        # Make sure running it again works
-        assert_events([], file)
-        assert_events([], file)
-        assert_events([], file)
-    end
-    
-    def test_linkrecurse
-        dest = tempfile()
-        link = @file.create :path => tempfile(), :recurse => true, :ensure => dest
-        mk_catalog link
-        
-        ret = nil
-        
-        # Start with nothing, just to make sure we get nothing back
-        assert_nothing_raised { ret = link.linkrecurse(true) }
-        assert_nil(ret, "got a return when the dest doesn't exist")
-        
-        # then with a directory with only one file
-        Dir.mkdir(dest)
-        one = File.join(dest, "one")
-        File.open(one, "w") { |f| f.puts "" }
-        link[:ensure] = dest
-        assert_nothing_raised { ret = link.linkrecurse(true) }
-        
-        assert_equal(:directory, link.should(:ensure), "ensure was not set to directory")
-        assert_equal([File.join(link.title, "one")], ret.collect { |f| f.title },
-            "Did not get linked file")
-        oneobj = @file[File.join(link.title, "one")]
-        assert_equal(one, oneobj.should(:target), "target was not set correctly")
-        
-        oneobj.remove
-        File.unlink(one)
-        
-        # Then make sure we get multiple files
-        returns = []
-        5.times do |i|
-            path = File.join(dest, i.to_s)
-            returns << File.join(link.title, i.to_s)
-            File.open(path, "w") { |f| f.puts "" }
-        end
-        assert_nothing_raised { ret = link.linkrecurse(true) }
-
-        assert_equal(returns.sort, ret.collect { |f| f.title }.sort,
-            "Did not get links back")
-        
-        returns.each do |path|
-            obj = @file[path]
-            assert(path, "did not get obj for %s" % path)
-            sdest = File.join(dest, File.basename(path))
-            assert_equal(sdest, obj.should(:target),
-                "target was not set correctly for %s" % path)
-        end
-    end
-
-    def test_simplerecursivelinking
-        source = tempfile()
-        path = tempfile()
-        subdir = File.join(source, "subdir")
-        file = File.join(subdir, "file")
-
-        system("mkdir -p %s" % subdir)
-        system("touch %s" % file)
-
-        link = nil
-        assert_nothing_raised {
-            link = Puppet.type(:file).create(
-                :ensure => source,
-                :path => path,
-                :recurse => true
-            )
-        }
-
-        assert_apply(link)
-
-        sublink = File.join(path, "subdir")
-        linkpath = File.join(sublink, "file")
-        assert(File.directory?(path), "dest is not a dir")
-        assert(File.directory?(sublink), "subdest is not a dir")
-        assert(File.symlink?(linkpath), "path is not a link")
-        assert_equal(file, File.readlink(linkpath))
-
-        assert_nil(@file[sublink], "objects were not removed")
-        assert_equal([], link.evaluate, "Link is not in sync")
-    end
-
-    def test_recursivelinking
-        source = tempfile()
-        dest = tempfile()
-
-        files = []
-        dirs = []
-
-        # Make a bunch of files and dirs
-        Dir.mkdir(source)
-        Dir.chdir(source) do
-            system("mkdir -p %s" % "some/path/of/dirs")
-            system("mkdir -p %s" % "other/path/of/dirs")
-            system("touch %s" % "file")
-            system("touch %s" % "other/file")
-            system("touch %s" % "some/path/of/file")
-            system("touch %s" % "some/path/of/dirs/file")
-            system("touch %s" % "other/path/of/file")
-
-            files = %x{find . -type f}.chomp.split(/\n/)
-            dirs = %x{find . -type d}.chomp.split(/\n/).reject{|d| d =~ /^\.+$/ }
-        end
-
-        link = nil
-        assert_nothing_raised {
-            link = Puppet.type(:file).create(
-                :ensure => source,
-                :path => dest,
-                :recurse => true
-            )
-        }
-
-        assert_apply(link)
-
-        files.each do |f|
-            f.sub!(/^\.#{File::SEPARATOR}/, '')
-            path = File.join(dest, f)
-            assert(FileTest.exists?(path), "Link %s was not created" % path)
-            assert(FileTest.symlink?(path), "%s is not a link" % f)
-            target = File.readlink(path)
-            assert_equal(File.join(source, f), target)
-        end
-
-        dirs.each do |d|
-            d.sub!(/^\.#{File::SEPARATOR}/, '')
-            path = File.join(dest, d)
-            assert(FileTest.exists?(path), "Dir %s was not created" % path)
-            assert(FileTest.directory?(path), "%s is not a directory" % d)
-        end
-    end
-
-    def test_localrelativelinks
-        dir = tempfile()
-        Dir.mkdir(dir)
-        source = File.join(dir, "source")
-        File.open(source, "w") { |f| f.puts "yay" }
-        dest = File.join(dir, "link")
-
-        link = nil
-        assert_nothing_raised {
-            link = Puppet.type(:file).create(
-                :path => dest,
-                :ensure => "source"
-            )
-        }
-
-        assert_events([:link_created], link)
-        assert(FileTest.symlink?(dest), "Did not create link")
-        assert_equal("source", File.readlink(dest))
-        assert_equal("yay\n", File.read(dest))
-    end
-
-    def test_recursivelinkingmissingtarget
-        source = tempfile()
-        dest = tempfile()
-
-        objects = []
-        objects << Puppet.type(:exec).create(
-            :command => "mkdir %s; touch %s/file" % [source, source],
-            :title => "yay",
-            :path => ENV["PATH"]
-        )
-        objects << Puppet.type(:file).create(
-            :ensure => source,
-            :path => dest,
-            :recurse => true,
-            :require => objects[0]
-        )
-
-        assert_apply(*objects)
-
-        link = File.join(dest, "file")
-        assert(FileTest.symlink?(link), "Did not make link")
-        assert_equal(File.join(source, "file"), File.readlink(link))
-    end
-
-    def test_insync?
-        source = tempfile()
-        dest = tempfile()
-
-        obj = @file.create(:path => source, :target => dest)
-
-        prop = obj.send(:property, :target)
-        prop.send(:instance_variable_set, "@should", [:nochange])
-        assert(prop.insync?(prop.retrieve),
-            "Property not in sync with should == :nochange")
-
-        prop = obj.send(:property, :target)
-        prop.send(:instance_variable_set, "@should", [:notlink])
-        assert(prop.insync?(prop.retrieve),
-            "Property not in sync with should == :nochange")
-
-        # Lastly, make sure that we don't try to do anything when we're
-        # recursing, since 'ensure' does the work.
-        obj[:recurse] = true
-        prop.should = dest
-        assert(prop.insync?(prop.retrieve),
-            "Still out of sync during recursion")
-    end
-
-    def test_replacedirwithlink
-        Puppet[:trace] = false
-        path = tempfile()
-        link = tempfile()
-
-        File.open(path, "w") { |f| f.puts "yay" }
-        Dir.mkdir(link)
-        File.open(File.join(link, "yay"), "w") do |f| f.puts "boo" end
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :ensure => path,
-                :path => link,
-                :backup => false
-            )
-        }
-
-        # First run through without :force
-        assert_events([], file)
-
-        assert(FileTest.directory?(link), "Link replaced dir without force")
-
-        assert_nothing_raised { file[:force] = true }
-
-        assert_events([:link_created], file)
-
-        assert(FileTest.symlink?(link), "Link was not created")
-
-        assert_equal(path, File.readlink(link), "Link was created incorrectly")
-    end
-
-    def test_replace_links_with_files
-        base = tempfile()
-
-        Dir.mkdir(base)
-
-        file = File.join(base, "file")
-        link = File.join(base, "link")
-        File.open(file, "w") { |f| f.puts "yayness" }
-        File.symlink(file, link)
-
-        obj = Puppet::Type.type(:file).create(
-            :path => link,
-            :ensure => "file"
-        )
-
-        assert_apply(obj)
-
-        assert_equal("yayness\n", File.read(file),
-            "Original file got changed")
-        assert_equal("file", File.lstat(link).ftype, "File is still a link")
-    end
-
-    def test_no_erase_linkedto_files
-        base = tempfile()
-
-        Dir.mkdir(base)
-
-        dirs = {}
-        %w{other source target}.each do |d|
-            dirs[d] = File.join(base, d)
-            Dir.mkdir(dirs[d])
-        end
-
-        file = File.join(dirs["other"], "file")
-        sourcefile = File.join(dirs["source"], "sourcefile")
-        link = File.join(dirs["target"], "sourcefile")
-
-        File.open(file, "w") { |f| f.puts "other" }
-        File.open(sourcefile, "w") { |f| f.puts "source" }
-        File.symlink(file, link)
-
-        obj = Puppet::Type.type(:file).create(
-            :path => dirs["target"],
-            :ensure => :file,
-            :source => dirs["source"],
-            :recurse => true
-        )
-        config = mk_catalog obj
-        config.apply
-
-        newfile = File.join(dirs["target"], "sourcefile")
-
-        assert(File.directory?(dirs["target"]), "Dir did not get created")
-        assert(File.file?(newfile), "File did not get copied")
-
-        assert_equal(File.read(sourcefile), File.read(newfile),
-            "File did not get copied correctly.")
-
-        assert_equal("other\n", File.read(file),
-            "Original file got changed")
-        assert_equal("file", File.lstat(link).ftype, "File is still a link")
-    end
-
-    def test_replace_links
-        dest = tempfile()
-        otherdest = tempfile()
-        link = tempfile()
-
-        File.open(dest, "w") { |f| f.puts "boo" }
-        File.open(otherdest, "w") { |f| f.puts "yay" }
-
-        obj = Puppet::Type.type(:file).create(
-            :path => link,
-            :ensure => otherdest
-        )
-
-
-        assert_apply(obj)
-
-        assert_equal(otherdest, File.readlink(link), "Link did not get created")
-
-        obj[:ensure] = dest
-
-        assert_apply(obj)
-
-        assert_equal(dest, File.readlink(link), "Link did not get changed")
-    end
-end
-
diff --git a/test/ral/type/filebucket.rb b/test/ral/type/filebucket.rb
deleted file mode 100755
index f970666..0000000
--- a/test/ral/type/filebucket.rb
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-require 'fileutils'
-
-class TestFileBucket < Test::Unit::TestCase
-    include PuppetTest::Support::Utils
-    include PuppetTest::FileTesting
-    # hmmm
-    # this is complicated, because we store references to the created
-    # objects in a central store
-    def mkfile(hash)
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(hash)
-        }
-        return file
-    end
-
-    def mkbucket(name,path)
-        bucket = nil
-        assert_nothing_raised {
-            bucket = Puppet.type(:filebucket).create(
-                :name => name,
-                :path => path
-            )
-        }
-
-        @@tmpfiles.push path
-
-        return bucket
-    end
-
-    def mktestfile
-        # because luke's home directory is on nfs, it can't be used for testing
-        # as root
-        tmpfile = tempfile()
-        File.open(tmpfile, "w") { |f| f.puts rand(100) }
-        @@tmpfiles.push tmpfile
-        mkfile(:name => tmpfile)
-    end
-
-    def setup
-        super
-        begin
-            initstorage
-        rescue
-            system("rm -rf %s" % Puppet[:statefile])
-        end
-    end
-
-    def initstorage
-        Puppet::Util::Storage.init
-        Puppet::Util::Storage.load
-    end
-
-    def clearstorage
-        Puppet::Util::Storage.store
-        Puppet::Util::Storage.clear
-    end
-
-    def test_simplebucket
-        name = "yayness"
-        bucketpath = tempfile()
-        mkbucket(name, bucketpath)
-
-        bucket = nil
-        assert_nothing_raised {
-            bucket = Puppet.type(:filebucket).bucket(name)
-        }
-
-        assert_instance_of(Puppet::Network::Client.dipper, bucket)
-
-        md5 = nil
-        newpath = tempfile()
-        @@tmpfiles << newpath
-        system("cp /etc/passwd %s" % newpath)
-        assert_nothing_raised {
-            md5 = bucket.backup(newpath)
-        }
-
-        assert(md5)
-
-        dir, file, pathfile = Puppet::Network::Handler.filebucket.paths(bucketpath, md5)
-
-        assert(FileTest.directory?(dir),
-            "MD5 directory does not exist")
-
-        newmd5 = nil
-
-        # Just in case the file isn't writable
-        File.chmod(0644, newpath)
-        File.open(newpath, "w") { |f| f.puts ";lkjasdf;lkjasdflkjwerlkj134lkj" }
-
-        assert_nothing_raised {
-            newmd5 = bucket.backup(newpath)
-        }
-
-        assert(md5 != newmd5)
-
-        assert_nothing_raised {
-            bucket.restore(newpath, md5)
-        }
-
-        File.open(newpath) { |f| newmd5 = Digest::MD5.hexdigest(f.read) }
-
-        assert_equal(md5, newmd5)
-    end
-
-    def test_fileswithbuckets
-        name = "yayness"
-        mkbucket(name, tempfile())
-
-        bucket = nil
-        assert_nothing_raised {
-            bucket = Puppet.type(:filebucket).bucket(name)
-        }
-
-        file = mktestfile()
-        assert_nothing_raised {
-            file[:backup] = name
-        }
-
-        opath = tempfile()
-        @@tmpfiles << opath
-        File.open(opath, "w") { |f| f.puts "yaytest" }
-
-        origmd5 = File.open(file.name) { |f| newmd5 = Digest::MD5.hexdigest(f.read) }
-
-        file[:source] = opath
-        #assert_nothing_raised {
-        #    file[:backup] = true
-        #}
-
-        assert_apply(file)
-
-        # so, we've now replaced the file with the opath file
-        assert_equal(
-            File.open(opath) { |f| newmd5 = Digest::MD5.hexdigest(f.read) },
-            File.open(file.name) { |f| newmd5 = Digest::MD5.hexdigest(f.read) }
-        )
-
-        #File.chmod(0644, file.name)
-        assert_nothing_raised {
-            bucket.restore(file.name, origmd5)
-        }
-
-        assert_equal(
-            origmd5,
-            File.open(file.name) { |f| newmd5 = Digest::MD5.hexdigest(f.read) }
-        )
-    end
-end
-
diff --git a/test/ral/type/fileignoresource.rb b/test/ral/type/fileignoresource.rb
deleted file mode 100755
index ff867c8..0000000
--- a/test/ral/type/fileignoresource.rb
+++ /dev/null
@@ -1,245 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-require 'cgi'
-require 'fileutils'
-
-class TestFileIgnoreSources < Test::Unit::TestCase
-    include PuppetTest::Support::Utils
-    include PuppetTest::FileTesting
-   
-    def setup
-        super
-        begin
-            initstorage
-        rescue
-            system("rm -rf %s" % Puppet[:statefile])
-        end
-    end
-
-#This is not needed unless using md5 (correct me if I'm wrong)
-    def initstorage
-        Puppet::Util::Storage.init
-        Puppet::Util::Storage.load
-    end
-
-    def clearstorage
-        Puppet::Util::Storage.store
-        Puppet::Util::Storage.clear
-    end
-
-    def test_ignore_simple_source
-
-        #Temp directory to run tests in
-        path = tempfile()
-        @@tmpfiles.push path
-
-        #source directory
-        sourcedir = "sourcedir"
-        sourcefile1 = "sourcefile1"
-        sourcefile2 = "sourcefile2"
-
-        frompath = File.join(path,sourcedir)
-        FileUtils.mkdir_p frompath
-
-        topath = File.join(path,"destdir")
-        FileUtils.mkdir topath
-
-        #initialize variables before block
-        tofile = nil
-        trans = nil
-
-        #create source files
-
-        File.open(File.join(frompath,sourcefile1), 
-          File::WRONLY|File::CREAT|File::APPEND) { |of|
-            of.puts "yayness"
-        }
-      
-        File.open(File.join(frompath,sourcefile2), 
-          File::WRONLY|File::CREAT|File::APPEND) { |of|
-            of.puts "even yayer"
-        }
-      
-
-        #makes Puppet file Object
-        assert_nothing_raised {
-            tofile = Puppet.type(:file).create(
-                :name => topath,
-                :source => frompath,
-                :recurse => true,                             
-                :ignore => "sourcefile2"                            
-            )
-        }
-
-        config = mk_catalog(tofile)
-        config.apply
-  
-      
-        #topath should exist as a directory with sourcedir as a directory
-       
-        #This file should exist
-        assert(FileTest.exists?(File.join(topath,sourcefile1)))
-
-        #This file should not
-        assert(!(FileTest.exists?(File.join(topath,sourcefile2))))
-     
-        Puppet::Type.allclear
-    end
-
-    def test_ignore_with_wildcard
-        #Temp directory to run tests in
-        path = tempfile()
-        @@tmpfiles.push path
-
-        #source directory
-        sourcedir = "sourcedir"
-        subdir = "subdir"
-        subdir2 = "subdir2"
-        sourcefile1 = "sourcefile1"
-        sourcefile2 = "sourcefile2"
-
-        frompath = File.join(path,sourcedir)
-        FileUtils.mkdir_p frompath
-        
-        FileUtils.mkdir_p(File.join(frompath, subdir))
-        FileUtils.mkdir_p(File.join(frompath, subdir2))
-        dir =  Dir.glob(File.join(path,"**/*"))
-
-        topath = File.join(path,"destdir")
-        FileUtils.mkdir topath
-
-        #initialize variables before block
-        tofile = nil
-        trans = nil
-
-        #create source files
-               
-        dir.each { |dir|       
-            File.open(File.join(dir,sourcefile1), 
-             File::WRONLY|File::CREAT|File::APPEND) { |of|
-                of.puts "yayness"
-            }
-      
-            File.open(File.join(dir,sourcefile2), 
-             File::WRONLY|File::CREAT|File::APPEND) { |of|
-              of.puts "even yayer"
-            }
-      
-        }
-
-        #makes Puppet file Object
-        assert_nothing_raised {
-            tofile = Puppet.type(:file).create(
-                :name => topath,
-                :source => frompath,
-                :recurse => true,                             
-                :ignore => "*2"                            
-            )
-        }
-
-        config = mk_catalog(tofile)
-        config.apply
-              
-        #topath should exist as a directory with sourcedir as a directory
-       
-        #This file should exist
-        assert(FileTest.exists?(File.join(topath,sourcefile1)))
-        assert(FileTest.exists?(File.join(topath,subdir)))
-        assert(FileTest.exists?(File.join(File.join(topath,subdir),sourcefile1)))
-
-        #This file should not
-        assert(!(FileTest.exists?(File.join(topath,sourcefile2))))
-        assert(!(FileTest.exists?(File.join(topath,subdir2))))
-        assert(!(FileTest.exists?(File.join(File.join(topath,subdir),sourcefile2))))
-        Puppet::Type.allclear
-
-    end
-
-    def test_ignore_array
-        #Temp directory to run tests in
-        path = tempfile()
-        @@tmpfiles.push path
-
-        #source directory
-        sourcedir = "sourcedir"
-        subdir = "subdir"
-        subdir2 = "subdir2"
-        subdir3 = "anotherdir"
-        sourcefile1 = "sourcefile1"
-        sourcefile2 = "sourcefile2"
-
-        frompath = File.join(path,sourcedir)
-        FileUtils.mkdir_p frompath
-        
-        FileUtils.mkdir_p(File.join(frompath, subdir))
-        FileUtils.mkdir_p(File.join(frompath, subdir2))
-        FileUtils.mkdir_p(File.join(frompath, subdir3))
-        sourcedir =  Dir.glob(File.join(path,"**/*"))
-
-        topath = File.join(path,"destdir")
-        FileUtils.mkdir topath
-
-        #initialize variables before block
-        tofile = nil
-        trans = nil
-
-        #create source files
-       
-
-    
-        sourcedir.each { |dir|       
-            File.open(File.join(dir,sourcefile1), 
-             File::WRONLY|File::CREAT|File::APPEND) { |of|
-                of.puts "yayness"
-            }
-      
-            File.open(File.join(dir,sourcefile2), 
-             File::WRONLY|File::CREAT|File::APPEND) { |of|
-              of.puts "even yayer"
-            }
-      
-        }
-
-
-        #makes Puppet file Object
-        assert_nothing_raised {
-            tofile = Puppet.type(:file).create(
-                :name => topath,
-                :source => frompath,
-                :recurse => true,
-                :ignore => ["*2", "an*"]                            
-               # :ignore => ["*2", "an*", "nomatch"]                            
-            )
-        }
-
-        config = mk_catalog(tofile)
-        config.apply
-
-        #topath should exist as a directory with sourcedir as a directory
-
-        # This file should exist
-        # proper files in destination
-        assert(FileTest.exists?(File.join(topath,sourcefile1)), "file1 not in destdir")
-        assert(FileTest.exists?(File.join(topath,subdir)), "subdir1 not in destdir")
-        assert(FileTest.exists?(File.join(File.join(topath,subdir),sourcefile1)), "file1 not in subdir")
-        # proper files in source 
-        assert(FileTest.exists?(File.join(frompath,subdir)), "subdir not in source")
-        assert(FileTest.exists?(File.join(frompath,subdir2)), "subdir2 not in source")
-        assert(FileTest.exists?(File.join(frompath,subdir3)), "subdir3 not in source")
-
-        # This file should not
-        assert(!(FileTest.exists?(File.join(topath,sourcefile2))), "file2 in dest")
-        assert(!(FileTest.exists?(File.join(topath,subdir2))), "subdir2 in dest")
-        assert(!(FileTest.exists?(File.join(topath,subdir3))), "anotherdir in dest")
-        assert(!(FileTest.exists?(File.join(File.join(topath,subdir),sourcefile2))), "file2 in dest/sub")
-        
-
-        Puppet::Type.allclear
-
-    end
-
-end
diff --git a/test/ral/type/filesources.rb b/test/ral/type/filesources.rb
deleted file mode 100755
index 24bc0b9..0000000
--- a/test/ral/type/filesources.rb
+++ /dev/null
@@ -1,979 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-require 'cgi'
-require 'fileutils'
-require 'mocha'
-
-class TestFileSources < Test::Unit::TestCase
-    include PuppetTest::Support::Utils
-    include PuppetTest::FileTesting
-    def setup
-        super
-        if defined? @port
-            @port += 1
-        else
-            @port = 12345
-        end
-        @file = Puppet::Type.type(:file)
-        Puppet[:filetimeout] = -1
-        Puppet::Util::SUIDManager.stubs(:asuser).yields 
-    end
-
-    def teardown
-        super
-        Puppet::Network::HttpPool.clear_http_instances
-    end
-    
-    def use_storage
-        begin
-            initstorage
-        rescue
-            system("rm -rf %s" % Puppet[:statefile])
-        end
-    end
-
-    def initstorage
-        Puppet::Util::Storage.init
-        Puppet::Util::Storage.load
-    end
-    
-    # Make a simple recursive tree.
-    def mk_sourcetree
-        source = tempfile()
-        sourcefile = File.join(source, "file")
-        Dir.mkdir source
-        File.open(sourcefile, "w") { |f| f.puts "yay" }
-        
-        dest = tempfile()
-        destfile = File.join(dest, "file")
-        return source, dest, sourcefile, destfile
-    end
-
-    def test_newchild
-        path = tempfile()
-        @@tmpfiles.push path
-
-        FileUtils.mkdir_p path
-        File.open(File.join(path,"childtest"), "w") { |of|
-            of.puts "yayness"
-        }
-        file = nil
-        comp = nil
-        trans = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => path
-            )
-        }
-        config = mk_catalog(file)
-        child = nil
-        assert_nothing_raised {
-            child = file.newchild("childtest", true)
-        }
-        assert(child)
-        assert_raise(Puppet::DevError) {
-            file.newchild(File.join(path,"childtest"), true)
-        }
-    end
-    
-    def test_describe
-        source = tempfile()
-        dest = tempfile()
-        
-        file = Puppet::Type.newfile :path => dest, :source => source, :title => "copier"
-        
-        property = file.property(:source)
-        
-        # First try describing with a normal source
-        result = nil
-        assert_nothing_raised do
-            result = property.describe(source)
-        end
-        assert_nil(result, "Got a result back when source is missing")
-        
-        # Now make a remote directory
-        Dir.mkdir(source)
-        assert_nothing_raised do
-            result = property.describe(source)
-        end
-        assert_equal("directory", result[:type])
-        
-        # And as a file
-        Dir.rmdir(source)
-        File.open(source, "w") { |f| f.puts "yay" }
-        assert_nothing_raised do
-            result = property.describe(source)
-        end
-        assert_equal("file", result[:type])
-        assert(result[:checksum], "did not get value for checksum")
-        if Puppet::Util::SUIDManager.uid == 0
-            assert(result.has_key?(:owner), "Lost owner in describe")
-        else
-            assert(! result.has_key?(:owner),
-                "Kept owner in describe even tho not root")
-        end
-        
-        # Now let's do the various link things
-        File.unlink(source)
-        target = tempfile()
-        File.open(target, "w") { |f| f.puts "yay" }
-        File.symlink(target, source)
-        
-        file[:links] = :manage
-        assert_equal("link", property.describe(source)[:type])
-        
-        # And then make sure links get followed
-        file[:links] = :follow
-        assert_equal("file", property.describe(source)[:type])
-    end
-    
-    def test_source_retrieve
-        source = tempfile()
-        dest = tempfile()
-        
-        file = Puppet::Type.newfile :path => dest, :source => source,
-            :title => "copier"
-        
-        assert(file.property(:checksum), "source property did not create checksum property")
-        property = file.property(:source)
-        assert(property, "did not get source property")
-        
-        # Make sure the munge didn't actually change the source
-        assert_equal([source], property.should, "munging changed the source")
-        
-        currentvalue = nil
-        # Now make the dest a directory, and make sure the object sets :ensure
-        # up to create a directory
-        Dir.mkdir(source)
-        assert_nothing_raised do
-            currentvalue = property.retrieve
-        end
-        assert_equal(:directory, file.should(:ensure),
-            "Did not set to create directory")
-        
-        # And make sure the source property won't try to do anything with a
-        # remote dir
-        assert(property.insync?(currentvalue), "Source was out of sync even tho remote is dir")
-        
-        # Now remove the source, and make sure :ensure was not modified
-        Dir.rmdir(source)
-        assert_equal(:directory, file.should(:ensure),
-            "Did not keep :ensure setting")
-        
-        # Now have a remote file and make sure things work correctly
-        File.open(source, "w") { |f| f.puts "yay" }
-        File.chmod(0755, source)
-        
-        assert_nothing_raised do
-            property.retrieve
-        end
-        assert_equal(:file, file.should(:ensure),
-            "Did not make correct :ensure setting")
-        assert_equal(0755, file.should(:mode),
-            "Mode was not copied over")
-        
-        # Now let's make sure that we get the first found source
-        fake = tempfile()
-        property.should = [fake, source]
-        assert_nothing_raised do
-            property.retrieve
-        end
-        assert_equal(Digest::MD5.hexdigest(File.read(source)), property.checksum.sub(/^\{\w+\}/, ''), 
-            "Did not catch later source")
-    end
-    
-    def test_insync
-        source = tempfile()
-        dest = tempfile()
-        
-        file = Puppet::Type.newfile :path => dest, :source => source,
-            :title => "copier"
-        
-        property = file.property(:source)
-        assert(property, "did not get source property")
-        
-        # with a directory
-        Dir.mkdir(source)
-        currentvalues = file.retrieve
-        assert(property.insync?(currentvalues[property]), "source property not in sync with directory as source")
-        Dir.rmdir(source)
-        
-        # with a file
-        File.open(source, "w") { |f| f.puts "yay" }
-        currentvalues = file.retrieve
-        assert(!property.insync?(currentvalues[property]), "source property was in sync when file was missing")
-        
-        # With a different file
-        File.open(dest, "w") { |f| f.puts "foo" }
-        currentvalues = file.retrieve
-        assert(!property.insync?(currentvalues[property]), "source property was in sync with different file")
-        
-        # with matching files
-        File.open(dest, "w") { |f| f.puts "yay" }
-        currentvalues = file.retrieve
-        assert(property.insync?(currentvalues[property]), "source property was not in sync with matching file")
-    end
-    
-    def test_source_sync
-        source = tempfile()
-        dest = tempfile()
-
-        file = Puppet::Type.newfile :path => dest, :source => source,
-            :title => "copier"
-        property = file.property(:source)
-        
-        File.open(source, "w") { |f| f.puts "yay" }
-        
-        currentvalues = file.retrieve
-        assert(! property.insync?(currentvalues[property]), "source thinks it's in sync")
-        
-        event = nil
-        assert_nothing_raised do
-            event = property.sync
-        end
-        assert_equal(:file_created, event)
-        assert_equal(File.read(source), File.read(dest),
-            "File was not copied correctly")
-        
-        # Now write something different
-        File.open(source, "w") { |f| f.puts "rah" }
-        currentvalues = file.retrieve
-        assert(! property.insync?(currentvalues[property]), "source should be out of sync")
-        assert_nothing_raised do
-            event = property.sync
-        end
-        assert_equal(:file_changed, event)
-        assert_equal(File.read(source), File.read(dest),
-            "File was not copied correctly")
-    end
-    
-    # XXX This test doesn't cover everything.  Specifically,
-    # it doesn't handle 'ignore' and 'links'.
-    def test_sourcerecurse
-        source, dest, sourcefile, destfile = mk_sourcetree
-        
-        # The sourcerecurse method will only ever get called when we're
-        # recursing, so we go ahead and set it.
-        obj = Puppet::Type.newfile :source => source, :path => dest, :recurse => true
-        config = mk_catalog(obj)
-
-        result = nil
-        sourced = nil
-        assert_nothing_raised do
-            result, sourced = obj.sourcerecurse(true)
-        end
-
-        assert_equal([destfile], sourced, "Did not get correct list of sourced objects")
-        dfileobj = @file[destfile]
-        assert(dfileobj, "Did not create destfile object")
-        assert_equal([dfileobj], result)
-        
-        # Clean this up so it can be recreated
-        config.remove_resource(dfileobj)
-        
-        # Make sure we correctly iterate over the sources
-        nosource = tempfile()
-        obj[:source] = [nosource, source]
-
-        result = nil
-        assert_nothing_raised do
-            result, sourced = obj.sourcerecurse(true)
-        end
-        assert_equal([destfile], sourced, "Did not get correct list of sourced objects")
-        dfileobj = @file[destfile]
-        assert(dfileobj, "Did not create destfile object with a missing source")
-        assert_equal([dfileobj], result)
-        dfileobj.remove
-        
-        # Lastly, make sure we return an empty array when no sources are there
-        obj[:source] = [nosource, tempfile()]
-        
-        assert_raise(Puppet::Error) do
-            result, sourced = obj.sourcerecurse(true)
-        end
-    end
-
-    def test_simplelocalsource
-        path = tempfile()
-        FileUtils.mkdir_p path
-        frompath = File.join(path,"source")
-        topath = File.join(path,"dest")
-        fromfile = nil
-        tofile = nil
-        trans = nil
-
-        File.open(frompath, File::WRONLY|File::CREAT|File::APPEND) { |of|
-            of.puts "yayness"
-        }
-        assert_nothing_raised {
-            tofile = Puppet.type(:file).create(
-                :name => topath,
-                :source => frompath
-            )
-        }
-
-        assert_apply(tofile)
-
-        assert(FileTest.exists?(topath), "File #{topath} is missing")
-        from = File.open(frompath) { |o| o.read }
-        to = File.open(topath) { |o| o.read }
-        assert_equal(from,to)
-    end
-    
-    # Make sure a simple recursive copy works
-    def test_simple_recursive_source
-        source, dest, sourcefile, destfile = mk_sourcetree
-        
-        file = Puppet::Type.newfile :path => dest, :source => source, :recurse => true
-        
-        assert_events([:directory_created, :file_created], file)
-        
-        assert(FileTest.directory?(dest), "Dest dir was not created")
-        assert(FileTest.file?(destfile), "dest file was not created")
-        assert_equal("yay\n", File.read(destfile), "dest file was not copied correctly")
-    end
-
-    def recursive_source_test(fromdir, todir)
-        Puppet::Type.allclear
-        initstorage
-        tofile = nil
-        trans = nil
-
-        assert_nothing_raised {
-            tofile = Puppet.type(:file).create(
-                :path => todir,
-                :recurse => true,
-                :backup => false,
-                :source => fromdir
-            )
-        }
-        assert_apply(tofile)
-
-        assert(FileTest.exists?(todir), "Created dir %s does not exist" % todir)
-        Puppet::Type.allclear
-    end
-
-    def run_complex_sources(networked = false)
-        path = tempfile()
-
-        # first create the source directory
-        FileUtils.mkdir_p path
-
-        # okay, let's create a directory structure
-        fromdir = File.join(path,"fromdir")
-        Dir.mkdir(fromdir)
-        FileUtils.cd(fromdir) {
-            File.open("one", "w") { |f| f.puts "onefile"}
-            File.open("two", "w") { |f| f.puts "twofile"}
-        }
-
-        todir = File.join(path, "todir")
-        source = fromdir
-        if networked
-            source = "puppet://localhost/%s%s" % [networked, fromdir]
-        end
-        recursive_source_test(source, todir)
-
-        return [fromdir,todir, File.join(todir, "one"), File.join(todir, "two")]
-    end
-
-    def test_complex_sources_twice
-        fromdir, todir, one, two = run_complex_sources
-        assert_trees_equal(fromdir,todir)
-        recursive_source_test(fromdir, todir)
-        assert_trees_equal(fromdir,todir)
-        # Now remove the whole tree and try it again.
-        [one, two].each do |f| File.unlink(f) end
-        Dir.rmdir(todir)
-        recursive_source_test(fromdir, todir)
-        assert_trees_equal(fromdir,todir)
-    end
-
-    def test_sources_with_deleted_destfiles
-        fromdir, todir, one, two = run_complex_sources
-        assert(FileTest.exists?(todir))
-        
-        # We shouldn't have a 'two' file object in memory
-        assert_nil(@file[two], "object for 'two' is still in memory")
-
-        # then delete a file
-        File.unlink(two)
-
-        # and run
-        recursive_source_test(fromdir, todir)
-
-        assert(FileTest.exists?(two), "Deleted file was not recopied")
-
-        # and make sure they're still equal
-        assert_trees_equal(fromdir,todir)
-    end
-
-    def test_sources_with_readonly_destfiles
-        fromdir, todir, one, two = run_complex_sources
-        assert(FileTest.exists?(todir))
-        File.chmod(0600, one)
-        recursive_source_test(fromdir, todir)
-
-        # and make sure they're still equal
-        assert_trees_equal(fromdir,todir)
-        
-        # Now try it with the directory being read-only
-        File.chmod(0111, todir)
-        recursive_source_test(fromdir, todir)
-
-        # and make sure they're still equal
-        assert_trees_equal(fromdir,todir)
-    end
-
-    def test_sources_with_modified_dest_files
-        fromdir, todir, one, two = run_complex_sources
-
-        assert(FileTest.exists?(todir))
-        
-        # Modify a dest file
-        File.open(two, "w") { |f| f.puts "something else" }
-
-        recursive_source_test(fromdir, todir)
-
-        # and make sure they're still equal
-        assert_trees_equal(fromdir,todir)
-    end
-
-    def test_sources_with_added_destfiles
-        fromdir, todir = run_complex_sources
-        assert(FileTest.exists?(todir))
-        # and finally, add some new files
-        add_random_files(todir)
-
-        recursive_source_test(fromdir, todir)
-
-        fromtree = file_list(fromdir)
-        totree = file_list(todir)
-
-        assert(fromtree != totree, "Trees are incorrectly equal")
-
-        # then remove our new files
-        FileUtils.cd(todir) {
-            %x{find . 2>/dev/null}.chomp.split(/\n/).each { |file|
-                if file =~ /file[0-9]+/
-                    File.unlink(file)
-                end
-            }
-        }
-
-        # and make sure they're still equal
-        assert_trees_equal(fromdir,todir)
-    end
-
-    # Make sure added files get correctly caught during recursion
-    def test_RecursionWithAddedFiles
-        basedir = tempfile()
-        Dir.mkdir(basedir)
-        @@tmpfiles << basedir
-        file1 = File.join(basedir, "file1")
-        file2 = File.join(basedir, "file2")
-        subdir1 = File.join(basedir, "subdir1")
-        file3 = File.join(subdir1, "file")
-        File.open(file1, "w") { |f| f.puts "yay" }
-        rootobj = nil
-        assert_nothing_raised {
-            rootobj = Puppet.type(:file).create(
-                :name => basedir,
-                :recurse => true,
-                :check => %w{type owner},
-                :mode => 0755
-            )
-        }
-        
-        assert_apply(rootobj)
-        assert_equal(0755, filemode(file1))
-
-        File.open(file2, "w") { |f| f.puts "rah" }
-        assert_apply(rootobj)
-        assert_equal(0755, filemode(file2))
-
-        Dir.mkdir(subdir1)
-        File.open(file3, "w") { |f| f.puts "foo" }
-        assert_apply(rootobj)
-        assert_equal(0755, filemode(file3))
-    end
-
-    def mkfileserverconf(mounts)
-        file = tempfile()
-        File.open(file, "w") { |f|
-            mounts.each { |path, name|
-                f.puts "[#{name}]\n\tpath #{path}\n\tallow *\n"
-            }
-        }
-
-        @@tmpfiles << file
-        return file
-    end
-
-    def test_NetworkSources
-        server = nil
-        mounts = {
-            "/" => "root"
-        }
-
-        fileserverconf = mkfileserverconf(mounts)
-
-        Puppet[:autosign] = true
-
-        Puppet[:masterport] = 8762
-        Puppet[:name] = "puppetmasterd"
-        Puppet[:certdnsnames] = "localhost"
-
-        serverpid = nil
-        assert_nothing_raised() {
-            server = Puppet::Network::HTTPServer::WEBrick.new(
-                :Handlers => {
-                    :CA => {}, # so that certs autogenerate
-                    :FileServer => {
-                        :Config => fileserverconf
-                    }
-                }
-            )
-
-        }
-        serverpid = fork {
-            assert_nothing_raised() {
-                #trap(:INT) { server.shutdown; Kernel.exit! }
-                trap(:INT) { server.shutdown }
-                server.start
-            }
-        }
-        @@tmppids << serverpid
-
-        sleep(1)
-
-        fromdir, todir = run_complex_sources("root")
-        assert_trees_equal(fromdir,todir)
-        recursive_source_test(fromdir, todir)
-        assert_trees_equal(fromdir,todir)
-
-        assert_nothing_raised {
-            system("kill -INT %s" % serverpid)
-        }
-    end
-
-    def test_unmountedNetworkSources
-        server = nil
-        mounts = {
-            "/" => "root",
-            "/noexistokay" => "noexist"
-        }
-
-        fileserverconf = mkfileserverconf(mounts)
-
-        Puppet[:autosign] = true
-        Puppet[:masterport] = @port
-        Puppet[:certdnsnames] = "localhost"
-
-        serverpid = nil
-        assert_nothing_raised("Could not start on port %s" % @port) {
-            server = Puppet::Network::HTTPServer::WEBrick.new(
-                :Port => @port,
-                :Handlers => {
-                    :CA => {}, # so that certs autogenerate
-                    :FileServer => {
-                        :Config => fileserverconf
-                    }
-                }
-            )
-
-        }
-
-        serverpid = fork {
-            assert_nothing_raised() {
-                #trap(:INT) { server.shutdown; Kernel.exit! }
-                trap(:INT) { server.shutdown }
-                server.start
-            }
-        }
-        @@tmppids << serverpid
-
-        sleep(1)
-
-        name = File.join(tmpdir(), "nosourcefile")
-        file = Puppet.type(:file).create(
-            :source => "puppet://localhost/noexist/file",
-            :name => name
-        )
-
-        assert_raise Puppet::Error do 
-            file.retrieve
-        end 
-
-        comp = mk_catalog(file)
-        comp.apply
-
-        assert(!FileTest.exists?(name), "File with no source exists anyway")
-    end
-
-    def test_alwayschecksum
-        from = tempfile()
-        to = tempfile()
-
-        File.open(from, "w") { |f| f.puts "yayness" }
-        File.open(to, "w") { |f| f.puts "yayness" }
-
-        file = nil
-
-        # Now the files should be exactly the same, so we should not see attempts
-        # at copying
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :path => to,
-                :source => from
-            )
-        }
-
-        currentvalue = file.retrieve
-
-        assert(currentvalue[file.property(:checksum)], 
-               "File does not have a checksum property")
-
-        assert_equal(0, file.evaluate.length, "File produced changes")
-    end
-
-    def test_sourcepaths
-        files = []
-        3.times { 
-            files << tempfile()
-        }
-
-        to = tempfile()
-
-        File.open(files[-1], "w") { |f| f.puts "yee-haw" }
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => to,
-                :source => files
-            )
-        }
-
-        comp = mk_catalog(file)
-        assert_events([:file_created], comp)
-
-        assert(File.exists?(to), "File does not exist")
-
-        txt = nil
-        File.open(to) { |f| txt = f.read.chomp }
-
-        assert_equal("yee-haw", txt, "Contents do not match")
-    end
-
-    # Make sure that source-copying updates the checksum on the same run
-    def test_checksumchange
-        source = tempfile()
-        dest = tempfile()
-        File.open(dest, "w") { |f| f.puts "boo" }
-        File.open(source, "w") { |f| f.puts "yay" }
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => dest,
-                :source => source
-            )
-        }
-
-        file.retrieve
-
-        assert_events([:file_changed], file)
-        file.retrieve
-        assert_events([], file)
-    end
-
-    # Make sure that source-copying updates the checksum on the same run
-    def test_sourcebeatsensure
-        source = tempfile()
-        dest = tempfile()
-        File.open(source, "w") { |f| f.puts "yay" }
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => dest,
-                :ensure => "file",
-                :source => source
-            )
-        }
-
-        file.retrieve
-
-        assert_events([:file_created], file)
-        file.retrieve
-        assert_events([], file)
-        assert_events([], file)
-    end
-
-    def test_sourcewithlinks
-        source = tempfile()
-        link = tempfile()
-        dest = tempfile()
-
-        File.open(source, "w") { |f| f.puts "yay" }
-        File.symlink(source, link)
-
-        file = nil
-        assert_nothing_raised {
-            file = Puppet.type(:file).create(
-                :name => dest,
-                :source => link,
-                :links => :follow
-            )
-        }
-
-        assert_events([:file_created], file)
-        assert(FileTest.file?(dest), "Destination is not a file")
-
-        # Now copy the links
-        file[:links] = :manage
-        assert_events([:link_created], file)
-        assert(FileTest.symlink?(dest), "Destination is not a link")
-    end
-
-    def test_changes
-        source = tempfile()
-        dest = tempfile()
-
-        File.open(source, "w") { |f| f.puts "yay" }
-
-        obj = nil
-        assert_nothing_raised {
-            obj = Puppet.type(:file).create(
-                :name => dest,
-                :source => source
-            )
-        }
-
-        assert_events([:file_created], obj)
-        assert_equal(File.read(source), File.read(dest), "Files are not equal")
-        assert_events([], obj)
-
-        File.open(source, "w") { |f| f.puts "boo" }
-
-        assert_events([:file_changed], obj)
-        assert_equal(File.read(source), File.read(dest), "Files are not equal")
-        assert_events([], obj)
-
-        File.open(dest, "w") { |f| f.puts "kaboom" }
-
-        # There are two changes, because first the checksum is noticed, and
-        # then the source causes a change
-        assert_events([:file_changed, :file_changed], obj)
-        assert_equal(File.read(source), File.read(dest), "Files are not equal")
-        assert_events([], obj)
-    end
-
-    def test_file_source_with_space
-        dir = tempfile()
-        source = File.join(dir, "file with spaces")
-        Dir.mkdir(dir)
-        File.open(source, "w") { |f| f.puts "yayness" }
-
-        newdir = tempfile()
-        newpath = File.join(newdir, "file with spaces")
-
-        file = Puppet::Type.newfile(
-            :path => newdir,
-            :source => dir,
-            :recurse => true
-        )
-
-
-        assert_apply(file)
-
-        assert(FileTest.exists?(newpath), "Did not create file")
-        assert_equal("yayness\n", File.read(newpath))
-    end
-
-    # Make sure files aren't replaced when replace is false, but otherwise
-    # are.
-    def test_replace
-        source = tempfile()
-        File.open(source, "w") { |f| f.puts "yayness" }
-
-        dest = tempfile()
-        file = Puppet::Type.newfile(
-            :path => dest,
-            :source => source,
-            :recurse => true
-        )
-
-
-        assert_apply(file)
-
-        assert(FileTest.exists?(dest), "Did not create file")
-        assert_equal("yayness\n", File.read(dest))
-
-        # Now set :replace
-        assert_nothing_raised {
-            file[:replace] = false
-        }
-
-        File.open(source, "w") { |f| f.puts "funtest" }
-        assert_apply(file)
-
-        # Make sure it doesn't change.
-        assert_equal("yayness\n", File.read(dest),
-            "File got replaced when :replace was false")
-
-        # Now set it to true and make sure it does change.
-        assert_nothing_raised {
-            file[:replace] = true
-        }
-        assert_apply(file)
-
-        # Make sure it doesn't change.
-        assert_equal("funtest\n", File.read(dest),
-            "File was not replaced when :replace was true")
-    end
-
-    # Testing #285.  This just makes sure that URI parsing works correctly.
-    def test_fileswithpoundsigns
-        dir = tstdir()
-        subdir = File.join(dir, "#dir")
-        Dir.mkdir(subdir)
-        file = File.join(subdir, "file")
-        File.open(file, "w") { |f| f.puts "yayness" }
-
-        dest = tempfile()
-        source = "file://localhost#{dir}"
-        obj = Puppet::Type.newfile(
-            :path => dest,
-            :source => source,
-            :recurse => true
-        )
-
-        newfile = File.join(dest, "#dir", "file")
-
-        poundsource = "file://localhost#{subdir}"
-
-        sourceobj = path = nil
-        assert_nothing_raised {
-            sourceobj, path = obj.uri2obj(poundsource)
-        }
-
-        assert_equal("/localhost" + URI.escape(subdir), path)
-
-        assert_apply(obj)
-
-        assert(FileTest.exists?(newfile), "File did not get created")
-        assert_equal("yayness\n", File.read(newfile))
-    end
-
-    def test_sourceselect
-        dest = tempfile()
-        sources = []
-        2.times { |i|
-            i = i + 1
-            source = tempfile()
-            sources << source
-            file = File.join(source, "file%s" % i)
-            Dir.mkdir(source)
-            File.open(file, "w") { |f| f.print "yay" }
-        }
-        file1 = File.join(dest, "file1")
-        file2 = File.join(dest, "file2")
-        file3 = File.join(dest, "file3")
-
-        # Now make different files with the same name in each source dir
-        sources.each_with_index do |source, i|
-            File.open(File.join(source, "file3"), "w") { |f|
-                f.print i.to_s
-            }
-        end
-
-        obj = Puppet::Type.newfile(:path => dest, :recurse => true,
-            :source => sources)
-
-        assert_equal(:first, obj[:sourceselect], "sourceselect has the wrong default")
-        # First, make sure we default to just copying file1
-        assert_apply(obj)
-
-        assert(FileTest.exists?(file1), "File from source 1 was not copied")
-        assert(! FileTest.exists?(file2), "File from source 2 was copied")
-        assert(FileTest.exists?(file3), "File from source 1 was not copied")
-        assert_equal("0", File.read(file3), "file3 got wrong contents")
-
-        # Now reset sourceselect
-        assert_nothing_raised do
-            obj[:sourceselect] = :all
-        end
-        File.unlink(file1)
-        File.unlink(file3)
-        Puppet.err :yay
-        assert_apply(obj)
-
-        assert(FileTest.exists?(file1), "File from source 1 was not copied")
-        assert(FileTest.exists?(file2), "File from source 2 was copied")
-        assert(FileTest.exists?(file3), "File from source 1 was not copied")
-        assert_equal("0", File.read(file3), "file3 got wrong contents")
-    end
-    
-    def test_recursive_sourceselect
-        dest = tempfile()
-        source1 = tempfile()
-        source2 = tempfile()
-        files = []
-        [source1, source2, File.join(source1, "subdir"), File.join(source2, "subdir")].each_with_index do |dir, i|
-            Dir.mkdir(dir)
-            # Make a single file in each directory
-            file = File.join(dir, "file%s" % i)
-            File.open(file, "w") { |f| f.puts "yay%s" % i}
-
-            # Now make a second one in each directory
-            file = File.join(dir, "second-file%s" % i)
-            File.open(file, "w") { |f| f.puts "yaysecond-%s" % i}
-            files << file
-        end
-        
-        obj = Puppet::Type.newfile(:path => dest, :source => [source1, source2], :sourceselect => :all, :recurse => true)
-        
-        assert_apply(obj)
-        
-        ["file0", "file1", "second-file0", "second-file1", "subdir/file2", "subdir/second-file2", "subdir/file3", "subdir/second-file3"].each do |file|
-            path = File.join(dest, file)
-            assert(FileTest.exists?(path), "did not create %s" % file)
-            
-            assert_equal("yay%s\n" % File.basename(file).sub("file", ''), File.read(path), "file was not copied correctly")
-        end
-    end
-
-    # #594
-    def test_purging_missing_remote_files
-        source = tempfile()
-        dest = tempfile()
-        s1 = File.join(source, "file1")
-        s2 = File.join(source, "file2")
-        d1 = File.join(dest, "file1")
-        d2 = File.join(dest, "file2")
-        Dir.mkdir(source)
-        [s1, s2].each { |name| File.open(name, "w") { |file| file.puts "something" } }
-
-        # We have to add a second parameter, because that's the only way to expose the "bug".
-        file = Puppet::Type.newfile(:path => dest, :source => source, :recurse => true, :purge => true, :mode => "755")
-
-        assert_apply(file)
-
-        assert(FileTest.exists?(d1), "File1 was not copied")
-        assert(FileTest.exists?(d2), "File2 was not copied")
-
-        File.unlink(s2)
-
-        assert_apply(file)
-
-        assert(FileTest.exists?(d1), "File1 was not kept")
-        assert(! FileTest.exists?(d2), "File2 was not purged")
-    end
-end
-
diff --git a/test/ral/type/group.rb b/test/ral/type/group.rb
deleted file mode 100755
index d28c8ee..0000000
--- a/test/ral/type/group.rb
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'etc'
-
-class TestGroup < Test::Unit::TestCase
-	include PuppetTest
-
-    p = Puppet::Type.type(:group).provide :fake, :parent => PuppetTest::FakeProvider do
-        @name = :fake
-        apimethods :ensure, :gid
-
-        def create
-            @ensure = :present
-        end
-
-        def delete
-            @ensure = :absent
-        end
-
-        def exists?
-            if defined? @ensure and @ensure == :present
-                true
-            else
-                false
-            end
-        end
-    end
-
-    FakeGroupProvider = p
-
-    @@fakeproviders[:group] = p
-
-    def setup
-        super
-        Puppet::Type.type(:group).defaultprovider = FakeGroupProvider
-    end
-
-    def teardown
-        Puppet.type(:group).clear
-        Puppet::Type.type(:group).defaultprovider = nil
-        super
-    end
-
-    def mkgroup(name, hash = {})
-        group = nil
-        hash[:name] = name
-        assert_nothing_raised {
-            group = Puppet.type(:group).create(hash)
-        }
-
-        return group
-    end
-
-    def groupnames
-        %x{groups}.chomp.split(/ /)
-    end
-
-    def groupids
-        Process.groups
-    end
-
-    def attrtest_ensure(group)
-        group[:ensure] = :absent
-
-        comp = mk_catalog("ensuretest", group)
-        assert_apply(comp)
-        assert_equal(:absent, group.provider.ensure,  "Group is still present")
-        group[:ensure] = :present
-        assert_events([:group_created], comp)
-        assert_equal(:present, group.provider.ensure,  "Group is absent")
-        group[:ensure] = :absent
-        trans = assert_events([:group_removed], comp)
-        assert_equal(:absent, group.provider.ensure,  "Group is present")
-
-        assert_rollback_events(trans, [:group_created], "group")
-        assert_equal(:present, group.provider.ensure,  "Group is absent")
-    end
-
-    # This is a bit odd, since we're not actually doing anything on the machine.
-    # Just make sure we can set the gid and that it will work correctly.
-    def attrtest_gid(group)
-
-        # Check the validation.
-        assert_nothing_raised {
-            group[:gid] = "15"
-        }
-
-        assert_equal(15, group.should(:gid),
-                     "Did not convert gid to number")
-
-        comp = mk_catalog(group)
-        trans = assert_events([:group_modified], comp, "group")
-        assert_equal(15, group.provider.gid, "GID was not changed")
-
-        assert_nothing_raised {
-            group[:gid] = 16
-        }
-
-        assert_equal(16, group.should(:gid),
-                     "Did not keep gid as number")
-
-        # Now switch to 16
-        trans = assert_events([:group_modified], comp, "group")
-        assert_equal(16, group.provider.gid, "GID was not changed")
-
-        # And then rollback
-        assert_rollback_events(trans, [:group_modified], "group")
-        assert_equal(15, group.provider.gid, "GID was not changed")
-    end
-
-    def test_owngroups
-        groupnames().each { |group|
-            gobj = nil
-            comp = nil
-            assert_nothing_raised {
-                gobj = Puppet.type(:group).create(
-                    :name => group,
-                    :check => [:gid]
-                )
-            }
-
-            # Set a fake gid
-            gobj.provider.gid = rand(100)
-
-            current_values = nil
-            assert_nothing_raised {
-                current_values = gobj.retrieve
-            }
-
-            assert(current_values[gobj.property(:gid)], 
-                   "Failed to retrieve gid")
-        }
-    end
-
-    def test_mkgroup
-        gobj = nil
-        name = "pptestgr"
-
-        assert_nothing_raised {
-            gobj = Puppet.type(:group).create(
-                :name => name,
-                :gid => 123
-            )
-        }
-        gobj.finish
-
-        trans = assert_events([:group_created], gobj, "group")
-
-        assert(gobj.provider.exists?,
-                "Did not create group")
-
-        tests = Puppet.type(:group).validproperties
-
-        gobj.retrieve
-        tests.each { |test|
-            if self.respond_to?("attrtest_%s" % test)
-                self.send("attrtest_%s" % test, gobj)
-            else
-                #$stderr.puts "Not testing attr %s of group" % test
-            end
-        }
-
-        assert_rollback_events(trans, [:group_removed], "group")
-
-        assert(! gobj.provider.exists?,
-                "Did not delete group")
-    end
-end
diff --git a/test/ral/type/host.rb b/test/ral/type/host.rb
deleted file mode 100755
index 9b744ee..0000000
--- a/test/ral/type/host.rb
+++ /dev/null
@@ -1,225 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'test/unit'
-require 'facter'
-
-class TestHost < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @hosttype = Puppet::Type.type(:host)
-
-        @provider = @hosttype.defaultprovider
-
-        # Make sure they aren't using something funky like netinfo
-        unless @provider.name == :parsed
-            @hosttype.defaultprovider = @hosttype.provider(:parsed)
-        end
-
-        cleanup do @hosttype.defaultprovider = nil end
-
-        if @provider.respond_to?(:default_target=)
-            @default_file = @provider.default_target
-            cleanup do
-                @provider.default_target = @default_file
-            end
-            @target = tempfile()
-            @provider.default_target = @target
-        end
-    end
-
-    def mkhost
-        if defined? @hcount
-            @hcount += 1
-        else
-            @hcount = 1
-        end
-
-        @catalog ||= mk_catalog
-
-        host = nil
-        assert_nothing_raised {
-            host = Puppet.type(:host).create(
-                :name => "fakehost%s" % @hcount,
-                :ip => "192.168.27.%s" % @hcount,
-                :alias => "alias%s" % @hcount,
-                :catalog => @catalog
-            )
-        }
-
-        return host
-    end
-
-    def test_list
-        assert_nothing_raised do
-            @hosttype.defaultprovider.prefetch
-        end
-
-        count = 0
-        @hosttype.each do |h|
-            count += 1
-        end
-
-        assert_equal(0, count, "Found hosts in empty file somehow")
-    end
-
-    # Darwin will actually write to netinfo here.
-    if Facter.value(:operatingsystem) != "Darwin" or Process.uid == 0
-    def test_simplehost
-        host = nil
-        # We want to actually use the netinfo provider on darwin
-        if Facter.value(:operatingsystem) == "Darwin"
-            Puppet::Type.type(:host).defaultprovider = nil
-        end
-
-        assert_nothing_raised {
-            host = Puppet.type(:host).create(
-                :name => "culain",
-                :ip => "192.168.0.3"
-            )
-        }
-
-        current_values = nil
-        assert_nothing_raised { current_values = host.retrieve }
-        assert_events([:host_created], host)
-
-        assert_nothing_raised { current_values = host.retrieve }
-
-        assert_equal(:present, current_values[host.property(:ensure)])
-
-        host[:ensure] = :absent
-
-        assert_events([:host_removed], host)
-
-        assert_nothing_raised { current_values = host.retrieve }
-
-        assert_equal(:absent, current_values[host.property(:ensure)])
-    end
-
-    def test_moddinghost
-        # We want to actually use the netinfo provider on darwin
-        if Facter.value(:operatingsystem) == "Darwin"
-            Puppet::Type.type(:host).defaultprovider = nil
-        end
-        host = mkhost()
-        if Facter.value(:operatingsystem) == "Darwin"
-            assert_equal(:netinfo, host[:provider], "Got incorrect provider")
-        end
-        cleanup do
-            host[:ensure] = :absent
-            assert_apply(host)
-        end
-
-        assert_events([:host_created], host)
-
-        current_values = nil 
-        assert_nothing_raised {
-            current_values = host.retrieve
-        }
-
-        # This was a hard bug to track down.
-        assert_instance_of(String, current_values[host.property(:ip)])
-
-        host[:alias] = %w{madstop kirby yayness}
-
-        assert_events([:host_changed], host)
-
-        assert_nothing_raised {
-            current_values = host.retrieve
-        }
-
-        assert_equal(%w{madstop kirby yayness}, 
-                     current_values[host.property(:alias)])
-        
-        host[:ensure] = :absent
-        assert_events([:host_removed], host)
-    end
- 
-    def test_invalid_ipaddress
-        host = mkhost()
-
-        assert_raise(Puppet::Error) {
-            host[:ip] = "abc.def.ghi.jkl"
-        }
-    end
-
-    def test_invalid_hostname
-        host = mkhost()
-
-        assert_raise(Puppet::Error) {
-            host[:name] = "!invalid.hostname.$$$"
-        }
-
-        assert_raise(Puppet::Error) {
-            host[:name] = "-boo"
-        }
-
-        assert_raise(Puppet::Error) {
-            host[:name] = "boo-.ness"
-        }
-
-        assert_raise(Puppet::Error) {
-            host[:name] = "boo..ness"
-        }
-    end
-
-    def test_valid_hostname
-        host = mkhost()
-
-        assert_nothing_raised {
-            host[:name] = "yayness"
-        }
-
-        assert_nothing_raised {
-            host[:name] = "yay-ness"
-        }
-
-        assert_nothing_raised {
-            host[:name] = "yay.ness"
-        }
-
-        assert_nothing_raised {
-            host[:name] = "yay.ne-ss"
-        }
-
-        assert_nothing_raised {
-            host[:name] = "y.ay-ne-ss.com"
-        }
-
-        assert_nothing_raised {
-            host[:name] = "y4y.n3-ss"
-        }
-
-        assert_nothing_raised {
-            host[:name] = "y"
-        }
-    end
-
-    end  
-    def test_aliasisproperty
-        assert_equal(:property, @hosttype.attrtype(:alias))
-    end
-
-    def test_multivalues
-        host = mkhost
-        assert_raise(Puppet::Error) {
-            host[:alias] = "puppetmasterd yayness"
-        }
-    end
-
-    def test_puppetalias
-        host = mkhost()
-
-        assert_nothing_raised {
-            host[:alias] = "testing"
-        }
-
-        same = host.class["testing"]
-        assert(same, "Could not retrieve by alias")
-    end
-end
-
diff --git a/test/ral/type/mailalias.rb b/test/ral/type/mailalias.rb
deleted file mode 100755
index 6370223..0000000
--- a/test/ral/type/mailalias.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-
-class TestMailAlias < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @type = Puppet::Type.type(:mailalias)
-
-        @provider = @type.defaultprovider
-
-        # Make sure they aren't using something funky like netinfo
-        unless @provider.name == :aliases
-            @type.defaultprovider = @type.provider(:aliases)
-        end
-
-        cleanup do @type.defaultprovider = nil end
-
-        if @provider.respond_to?(:default_target=)
-            @default_file = @provider.default_target
-            cleanup do
-                @provider.default_target = @default_file
-            end
-            @target = tempfile()
-            @provider.default_target = @target
-        end
-    end
-
-    # This isn't much of a test, but then, it's not much of a type.
-    def test_recipient_arrays
-        resource = @type.create(:name => "luke", :recipient => "yay", :target => tempfile)
-        values = nil
-        assert_nothing_raised("Could not retrieve mailalias") do
-            values = resource.retrieve.inject({}) { |hash, a| hash[a[0].name] = a[1]; hash }
-        end
-        assert_equal(:absent, values[:recipient])
-        resource.property(:recipient).expects(:set).with(%w{yay})
-        assert_nothing_raised("Could not sync mailalias") do
-            resource.property(:recipient).sync
-        end
-    end
-end
-
diff --git a/test/ral/type/parameter.rb b/test/ral/type/parameter.rb
deleted file mode 100755
index e1b8e00..0000000
--- a/test/ral/type/parameter.rb
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-class TestParameter < Test::Unit::TestCase
-	include PuppetTest
-    
-    def newparam(name = :fakeparam)
-        assert_nothing_raised {
-            param = Class.new(Puppet::Parameter) do
-                @name = :fakeparam
-            end
-            param.initvars
-
-            return param
-        }
-    end
-
-    def newinst(param)
-        assert_nothing_raised {
-            return param.new(:resource => "yay")
-        }
-    end
-
-    # Test the basic newvalue stuff.
-    def test_newvalue
-        param = newparam()
-
-        # Try it with both symbols and strings.
-        assert_nothing_raised {
-            param.newvalues(:one, "two")
-        }
-
-        inst = newinst(param)
-
-        assert_nothing_raised {
-            inst.value = "one"
-        }
-
-        assert_equal(:one, inst.value)
-
-        assert_nothing_raised {
-            inst.value = :two
-        }
-        assert_equal(:two, inst.value)
-
-        assert_raise(ArgumentError) {
-            inst.value = :three
-        }
-        assert_equal(:two, inst.value)
-    end
-
-    # Test using regexes.
-    def test_regexvalues
-        param = newparam
-
-        assert_nothing_raised {
-            param.newvalues(/^\d+$/)
-        }
-        assert(param.match?("14"))
-        assert(param.match?(14))
-
-        inst = newinst(param)
-
-        assert_nothing_raised {
-            inst.value = 14
-        }
-
-        assert_nothing_raised {
-            inst.value = "14"
-        }
-
-        assert_raise(ArgumentError) {
-            inst.value = "a14"
-        }
-    end
-
-    # Test using both.  Equality should beat matching.
-    def test_regexesandnormals
-        param = newparam
-
-        assert_nothing_raised {
-            param.newvalues(:one, /^\w+$/)
-        }
-
-        inst = newinst(param)
-
-        assert_nothing_raised {
-            inst.value = "one"
-        }
-
-        assert_equal(:one, inst.value, "Value used regex instead of equality")
-
-        assert_nothing_raised {
-            inst.value = "two"
-        }
-        assert_equal("two", inst.value, "Matched value didn't take")
-    end
-
-    def test_shadowing
-        type = Puppet::Type.newtype(:faketype) { newparam(:name) {} }
-
-        cleanup { Puppet::Type.rmtype(:faketype) }
-
-        param = nil
-        assert_nothing_raised do
-            param = type.newproperty(:alias)
-        end
-
-        assert(param, "did not create param")
-
-        inst = type.create(:name => "test")
-
-        config = mk_catalog
-        inst.catalog = config
-
-        assert_nothing_raised("Could not create shadowed param") {
-            inst[:alias] = "foo"
-        }
-
-        # Get the parameter hash from the instance so we can check the shadow
-        params = inst.instance_variable_get("@parameters")
-        obj = params[:alias]
-        assert(obj, "did not get alias parameter")
-        assert(obj.shadow, "shadow was not created for alias param")
-
-        assert(obj.is_a?(Puppet::Property),
-            "alias instance is not a property")
-        assert_instance_of(param, obj, "alias is an instance of the wrong class")
-
-        # Make sure the alias got created
-        assert(type["foo"], "Did not retrieve object by its alias")
-        
-        # Now try it during initialization
-        other = nil
-        assert_nothing_raised("Could not create instance with shadow") do
-            other = type.create(:name => "rah", :alias => "one", :catalog => config)
-        end
-        params = other.instance_variable_get("@parameters")
-        obj = params[:alias]
-        assert(obj, "did not get alias parameter")
-        assert(obj.shadow, "shadow was not created for alias param")
-
-        assert_instance_of(param, obj, "alias is an instance of the wrong class")
-        assert(obj.is_a?(Puppet::Property),
-            "alias instance is not a property")
-
-        # Now change the alias and make sure it works out well
-        assert_nothing_raised("Could not modify shadowed alias") do
-            other[:alias] = "two"
-        end
-
-        obj = params[:alias]
-        assert(obj, "did not get alias parameter")
-        assert_instance_of(param, obj, "alias is now an instance of the wrong class")
-        assert(obj.is_a?(Puppet::Property),
-            "alias instance is now not a property")
-    end
-
-    # Make sure properties can correctly require features and behave appropriately when
-    # those features are missing.
-    def test_requires_features
-        param = newparam(:feature_tests)
-
-        assert_nothing_raised("could not add feature requirements to property") do
-            param.required_features = "testing"
-        end
-
-        assert_equal([:testing], param.required_features, "required features value was not arrayfied and interned")
-    end
-end
-
diff --git a/test/ral/type/port.rb b/test/ral/type/port.rb
deleted file mode 100755
index e28904d..0000000
--- a/test/ral/type/port.rb
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-#require 'facter'
-#
-#class TestPort < Test::Unit::TestCase
-#	include PuppetTest
-#
-#    def setup
-#        super
-#        @porttype = Puppet.type(:port)
-#
-#        @provider = @porttype.defaultprovider
-#
-#        # Make sure they aren't using something funky like netinfo
-#        unless @provider.name == :parsed
-#            @porttype.defaultprovider = @porttype.provider(:parsed)
-#        end
-#
-#        cleanup do @porttype.defaultprovider = nil end
-#
-#        if @provider.respond_to?(:default_target)
-#            oldpath = @provider.default_target
-#            cleanup do
-#                @provider.default_target = oldpath
-#            end
-#            @provider.default_target = tempfile()
-#        end
-#    end
-#
-#    def mkport
-#        port = nil
-#
-#        if defined? @pcount
-#            @pcount += 1
-#        else
-#            @pcount = 1
-#        end
-#        assert_nothing_raised {
-#            port = Puppet.type(:port).create(
-#                :name => "puppet%s" % @pcount,
-#                :number => "813%s" % @pcount,
-#                :protocols => "tcp",
-#                :description => "The port that Puppet runs on",
-#                :alias => "coolness%s" % @pcount
-#            )
-#        }
-#
-#        return port
-#    end
-#
-#    def test_list
-#        assert_nothing_raised {
-#            Puppet.type(:port).list
-#        }
-#
-#        count = 0
-#        @porttype.each do |h|
-#            count += 1
-#        end
-#
-#        assert_equal(0, count, "Found hosts in empty file somehow")
-#
-#        dns = @porttype["domain"]
-#        assert(dns, "Did not retrieve dns service")
-#    end
-#
-#    def test_simpleport
-#        host = nil
-#
-#        port = mkport
-#
-#        assert_apply(port)
-#        assert_nothing_raised {
-#            port.retrieve
-#        }
-#
-#        assert(port.provider.exists?, "Port did not get created")
-#    end
-#
-#    def test_moddingport
-#        port = nil
-#        port = mkport
-#
-#        assert_events([:port_created], port)
-#
-#        port.retrieve
-#
-#        port[:protocols] = %w{tcp udp}
-#
-#        assert_events([:port_changed], port)
-#    end
-#
-#    def test_multivalues
-#        port = mkport
-#        assert_raise(Puppet::Error) {
-#            port[:protocols] = "udp tcp"
-#        }
-#        assert_raise(Puppet::Error) {
-#            port[:alias] = "puppetmasterd yayness"
-#        }
-#    end
-#
-#    def test_removal
-#        port = mkport()
-#        assert_nothing_raised {
-#            port[:ensure] = :present
-#        }
-#        assert_events([:port_created], port)
-#        assert_events([], port)
-#
-#        assert(port.provider.exists?, "port was not created")
-#        assert_nothing_raised {
-#            port[:ensure] = :absent
-#        }
-#
-#        assert_events([:port_removed], port)
-#        assert(! port.provider.exists?, "port was not removed")
-#        assert_events([], port)
-#    end
-#
-#    def test_addingproperties
-#        port = mkport()
-#        assert_events([:port_created], port)
-#
-#        port.delete(:alias)
-#        assert(! port.property(:alias))
-#        assert_events([:port_changed], port)
-#
-#        assert_nothing_raised {
-#            port.retrieve
-#        }
-#
-#        assert_equal(:present, port.is(:ensure))
-#
-#        assert_equal(:absent, port.is(:alias))
-#
-#        port[:alias] = "yaytest"
-#        assert_events([:port_changed], port)
-#        port.retrieve
-#        assert(port.property(:alias).is == ["yaytest"])
-#    end
-#end
-
diff --git a/test/ral/type/property.rb b/test/ral/type/property.rb
deleted file mode 100755
index 6a3370c..0000000
--- a/test/ral/type/property.rb
+++ /dev/null
@@ -1,388 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-class TestProperty < Test::Unit::TestCase
-	include PuppetTest
-
-    def newinst(property, resource = nil)
-        inst = nil
-        unless resource
-            resource = "fakeresource"
-            resource.meta_def(:pathbuilder) do [self.to_s] end
-            resource.meta_def(:provider) do nil end
-            resource.meta_def(:fakeproperty) do '' end
-        end
-        assert_nothing_raised {
-            newinst = property.new(:resource => resource)
-            def newinst.retrieve(); return @fakeprovidervalue; end;
-            return newinst
-        }
-    end
-    
-    def newproperty(name = :fakeproperty)
-        property = Class.new(Puppet::Property) do
-            @name = name
-        end
-        Object.const_set("FakeProperty", property)
-        property.initvars
-        cleanup do
-            Object.send(:remove_const, "FakeProperty")
-        end
-
-        return property
-    end
-
-    def newmodel(name)
-        # Create an object that responds to myproperty as an attr
-        provklass = Class.new { attr_accessor name
-            def pathbuilder
-                ["provklass"]
-            end
-        }
-        prov = provklass.new
-
-        klass = Class.new { attr_accessor :provider, :path
-            def pathbuilder
-                ["instklass"]
-            end
-        }
-        klassinst = klass.new
-        klassinst.path = "instpath"
-        klassinst.provider = prov
-
-        return prov, klassinst
-    end
-
-    # Make sure we correctly look up names.
-    def test_value_name
-        property = newproperty()
-
-        property.newvalue(:one)
-        property.newvalue(/\d+/)
-
-        name = nil
-        ["one", :one].each do |value|
-            assert_nothing_raised do
-                name = property.value_name(value)
-            end
-            assert_equal(:one, name)
-        end
-        ["42"].each do |value|
-            assert_nothing_raised do
-                name = property.value_name(value)
-            end
-            assert_equal(/\d+/, name)
-        end
-        # these values should not have a name
-        ["two", :three, ''].each do |value|
-            assert_nothing_raised do
-                name = property.value_name(value)
-            end
-            assert_nil(name)
-        end
-    end
-
-    # Test that we correctly look up options for values.
-    def test_value_option
-        property = newproperty()
-
-        options = {
-            :one => {:event => :yay, :call => :before},
-            /\d+/ => {:event => :fun, :call => :instead}
-        }
-        property.newvalue(:one, options[:one])
-        property.newvalue(/\d+/, options[/\d+/])
-
-        options.each do |name, opts|
-            opts.each do |param, value|
-                assert_equal(value, property.value_option(name, param))
-            end
-        end
-    end
-
-    def test_newvalue
-        property = newproperty()
-
-        # These are bogus because they don't define events. :/
-        assert_nothing_raised {
-            property.newvalue(:one) do
-                @fakeprovidervalue = 1
-            end
-        }
-
-        assert_nothing_raised {
-            property.newvalue("two") do
-                @fakeprovidervalue = 2
-            end
-        }
-
-        # Make sure we default to using the block instead
-        assert_equal(:instead, property.value_option(:one, :call),
-            ":call was not set to :instead when a block was provided")
-
-        inst = newinst(property)
-
-        assert_nothing_raised {
-            inst.should = "one"
-        }
-
-        assert_equal(:one, inst.should)
-        ret = nil
-        assert_nothing_raised { inst.set_one }
-        assert_equal(1, inst.retrieve)
-
-        assert_nothing_raised {
-            inst.should = :two
-        }
-
-        assert_equal(:two, inst.should)
-        assert_nothing_raised { inst.set_two }
-        assert_equal(2, inst.retrieve)
-    end
-
-    def test_newpropertyvaluewithregexes
-        property = newproperty()
-
-        assert_nothing_raised {
-            property.newvalue(/^\w+$/) do
-                return :regex_matched
-            end
-        }
-
-        inst = newinst(property)
-
-        assert_nothing_raised {
-            inst.should = "yayness"
-        }
-
-        assert_equal("yayness", inst.should)
-
-        assert_nothing_raised {
-            inst.sync
-        }
-
-        assert_equal("yayness".upcase, inst.retrieve)
-    end
-
-    def test_newvalue_event_option
-        property = newproperty()
-
-        assert_nothing_raised do
-            property.newvalue(:myvalue, :event => :fake_valued) do
-            end
-            property.newvalue(:other, :event => "fake_other") do
-            end
-        end
-        inst = newinst(property)
-
-        assert_nothing_raised {
-            inst.should = :myvalue
-        }
-
-        ret = nil
-        assert_nothing_raised {
-            ret = inst.sync
-        }
-
-        assert_equal(:fake_valued, ret,
-                     "Event did not get returned correctly")
-
-        assert_nothing_raised {
-            inst.should = :other
-        }
-
-        assert_nothing_raised {
-            ret = inst.sync
-        }
-
-        assert_equal(:fake_other, ret,
-                     "Event did not get returned correctly")
-    end
-
-    # We want to support values with no blocks, either regexes or strings.
-    # If there's no block provided, then we should call the provider mechanism
-    # like we would normally.
-    def test_newvalue_with_no_block
-        property = newproperty(:myproperty)
-
-        assert_nothing_raised {
-            property.newvalue(:value, :event => :matched_value)
-        }
-        assert_nothing_raised {
-            property.newvalue(/^\d+$/, :event => :matched_number)
-        }
-
-        assert_equal(:none, property.value_option(:value, :call),
-            ":call was not set to none when no block is provided")
-
-        prov, klassinst = newmodel(:myproperty)
-
-        inst = newinst(property, klassinst)
-
-        # Now make sure we can set the values, they get validated as normal,
-        # and they set the values on the resource rather than trying to call
-        # a method
-        {:value => :matched_value, "27" => :matched_number}.each do |value, event|
-            assert_nothing_raised do
-                inst.should = value
-            end
-            ret = nil
-            assert_nothing_raised do
-                ret = inst.sync
-            end
-            assert_equal(event, ret, "Did not return correct event for %s" % value)
-            assert_equal(value, prov.myproperty, "%s was not set right" % value)
-        end
-
-        # And make sure we still fail validations
-        assert_raise(ArgumentError) do
-            inst.should = "invalid"
-        end
-    end
-
-    def test_tags
-        obj = "yay"
-        metaobj = class << obj; self; end
-
-        metaobj.send(:attr_accessor, :tags)
-
-        tags = [:some, :tags, :for, :testing]
-        obj.tags = tags
-
-        propertyklass = newproperty
- 
-        inst = nil
-        assert_nothing_raised do
-            inst = propertyklass.new(:resource => obj)
-        end
-
-        assert_nothing_raised do
-            assert_equal(tags + [inst.name], inst.tags)
-        end
-    end
-
-    def test_failure
-        s = Struct.new(:line, :file, :path, :pathbuilder, :name)
-        p = s.new(1, "yay", "rah", "struct", "name")
-
-        myprovider = Class.new(Puppet::Provider)
-  
-        def p.provider; nil; end;
-        myproperty = Class.new(Puppet::Property) do 
-            @name = 'name'
-        end
-        myproperty.initvars
-
-        myproperty.newvalue :mkfailure do
-            raise "It's all broken"
-        end
-        property = myproperty.new(:resource => p)
-
-        assert_raise(Puppet::Error) do
-            property.set(:mkfailure)
-        end
-    end
-
-    # Make sure 'set' behaves correctly WRT to call order.  This tests that the
-    # :call value is handled correctly in all cases.
-    def test_set
-        property = newproperty(:myproperty)
-
-        $setting = []
-
-        newval = proc do |name, call|
-            options = {}
-            if call
-                options[:call] = name
-                block = proc { $setting << name }
-            end
-            assert_nothing_raised("Could not create %s value" % name) {
-                if block
-                    property.newvalue(name, options, &block)
-                else
-                    property.newvalue(name, options)
-                end
-            }
-        end
-
-        newval.call(:none, false)
-
-        # Create a value with no block; it should default to :none
-        newval.call(:before, true)
-
-        # One with a block but after
-        newval.call(:after, true)
-
-        # One with an explicit instead
-        newval.call(:instead, true)
-
-        # And one with an implicit instead
-        assert_nothing_raised do
-            property.newvalue(:implicit) do
-                $setting << :implicit
-            end
-        end
-
-        # Now create a provider
-        prov, model = newmodel(:myproperty)
-        inst = newinst(property, model)
-
-        # Mark when we're called
-        prov.meta_def(:myproperty=) do |value| $setting << :provider end
-
-        # Now run through the list and make sure everything is correct
-        {:before => [:before, :provider],
-            :after => [:provider, :after],
-            :instead => [:instead],
-            :none => [:provider],
-            :implicit => [:implicit]
-        }.each do |name, result|
-            inst.set(name)
-
-            assert_equal(result, $setting, "%s was not handled right" % name)
-            $setting.clear
-        end
-    end
-
-    # Make sure we can specify that we want to use the whole array, rather
-    # than just individual values.
-    def test_array_handling
-        property = newproperty(:arraytests)
-
-        prov, model = newmodel(:array_testing)
-        inst = newinst(property, model)
-
-        # Make sure it defaults to first
-        assert_equal(:first, property.array_matching, "Property did not default to matching first value in an array")
-        assert(! inst.match_all?, "match_all? returned true when array_matching is :first")
-
-        vals = %w{one two three}
-        inst.should = vals
-
-        # Make sure we only get the first value back
-        assert_equal("one", inst.should, "Returned wrong value when array_matching == first")
-
-        # And make sure any of these values is considered in sync
-        vals.each do |value|
-            assert(inst.insync?(value), "#{value} was not considered in sync when array_matching == first")
-        end
-
-        # Now change it to all
-        property.array_matching = :all
-        assert_equal(:all, property.array_matching, "Property did not change value of array_matching")
-        assert(inst.match_all?, "match_all? returned false when array_matching is :all")
-
-        # Make sure we only get the first value back
-        assert_equal(vals, inst.should, "Returned wrong value when array_matching == all")
-
-        # And make sure any of these values is considered in sync
-        %w{one two three}.each do |value|
-            assert(! inst.insync?(value), "individual value #{value} was considered in sync when array_matching == all")
-        end
-        assert(inst.insync?(vals), "value array was not considered in sync when array_matching == all")
-    end
-end
-
diff --git a/test/ral/type/resources.rb b/test/ral/type/resources.rb
deleted file mode 100755
index 0663fe7..0000000
--- a/test/ral/type/resources.rb
+++ /dev/null
@@ -1,208 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke Kanies on 2006-12-12.
-#  Copyright (c) 2006. All rights reserved.
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-
-class TestResources < Test::Unit::TestCase
-	include PuppetTest
-	
-	def add_purge_lister
-        # Now define the list method
-        class << @purgetype
-            def instances
-                $purgemembers.values
-            end
-        end
-    end
-    
-    def mk_purger(managed = false)
-        @purgenum ||= 0
-        @purgenum += 1
-        obj = @purgetype.create :name => "purger%s" % @purgenum
-        $purgemembers[obj[:name]] = obj
-        if managed
-            obj[:fake] = "testing"
-        end
-        obj
-    end
-	
-	def mkpurgertype
-        # Create a purgeable type
-        $purgemembers = {}
-        @purgetype = Puppet::Type.newtype(:purgetest) do
-            newparam(:name, :namevar => true) {}
-            newproperty(:ensure) do
-                newvalue(:absent) do
-                    $purgemembers[@parent[:name]] = @parent
-                end
-                newvalue(:present) do
-                    $purgemembers.delete(@parent[:name])
-                end
-            end
-            newproperty(:fake) do
-                def sync
-                    :faked
-                end
-            end
-        end
-        cleanup do
-            Puppet::Type.rmtype(:purgetest)
-        end
-    end
-	
-	def setup
-	    super
-	    @type = Puppet::Type.type(:resources)
-    end
-	
-	def test_initialize
-	    assert(@type, "Could not retrieve resources type")
-	    # Make sure we can't create them for types that don't exist
-	    assert_raise(Puppet::Error) do
-	        @type.create :name => "thereisnotypewiththisname"
-        end
-        
-        # Now make sure it works for a normal type
-        usertype = nil
-        assert_nothing_raised do
-            usertype = @type.create :name => "user"
-        end
-        assert(usertype, "did not create user resource type")
-        assert_equal(Puppet::Type.type(:user), usertype.resource_type,
-            "resource_type was not set correctly")
-    end
-    
-    def test_purge
-        # Create a purgeable type
-        mkpurgertype
-        
-        purger = nil
-        assert_nothing_raised do
-            purger = @type.create :name => "purgetest", :noop => true, :loglevel => :warning
-        end
-        assert(purger, "did not get purger manager")
-        add_purge_lister()
-        
-        assert_equal($purgemembers.values.sort, @purgetype.instances.sort)
-        
-        # and it should now succeed
-        assert_nothing_raised do
-            purger[:purge] = true
-        end
-        assert(purger.purge?, "purge boolean was not enabled")
-        
-        # Okay, now let's try doing some purging, yo
-        managed = []
-        unmanned = []
-        3.times { managed << mk_purger(true) } # 3 managed
-        3.times { unmanned << mk_purger(false) } # 3 unmanaged
-        
-        managed.each do |m|
-            assert(m.managed?, "managed resource was not considered managed")
-        end
-        unmanned.each do |u|
-            assert(! u.managed?, "unmanaged resource was considered managed")
-        end
-        
-        # First make sure we get nothing back when purge is false
-        genned = nil
-        purger[:purge] = false
-        assert_nothing_raised do
-            genned = purger.generate
-        end
-        assert_equal([], genned, "Purged even when purge is false")
-        
-        # Now make sure we can purge
-        purger[:purge] = true
-        assert_nothing_raised do
-            genned = purger.generate
-        end
-        assert(genned, "Did not get any generated resources")
-
-        genned.each do |res|
-            assert(res.purging, "did not mark resource for purging")
-        end
-        assert(! genned.empty?, "generated resource list was empty")
-        
-        # Now make sure the generate method only finds the unmanaged resources
-        assert_equal(unmanned.collect { |r| r.title }.sort, genned.collect { |r| r.title },
-            "Did not return correct purge list")
-        
-        # Now make sure our metaparams carried over
-        genned.each do |res|
-            [:noop, :loglevel].each do |param|
-                assert_equal(purger[param], res[param], "metaparam %s did not carry over" % param)
-            end
-        end
-    end
-    
-    # Part of #408.
-    def test_check
-        # First check a non-user
-        res = Puppet::Type.type(:resources).create :name => :package
-        assert_nil(res[:unless_system_user], "got bad default for package")
-        
-        
-        assert_nothing_raised {
-            assert(res.check("A String"), "String failed check")
-            assert(res.check(Puppet::Type.newfile(:path => tempfile())), "File failed check")
-            assert(res.check(Puppet::Type.type(:user).create(:name => "yayness")), "User failed check in package")
-        }
-        
-        # Now create a user manager
-        res = Puppet::Type.type(:resources).create :name => :user
-        
-        # Make sure the default is 500
-        assert_equal(500, res[:unless_system_user], "got bad default")
-        
-        # Now make sure root fails the test
-        @user = Puppet::Type.type(:user)
-        assert_nothing_raised {
-            assert(! res.check(@user.create(:name => "root")), "root passed check")
-            assert(! res.check(@user.create(:name => "nobody")), "nobody passed check")
-        }
-        
-        # Now find a user between 0 and the limit
-        low = high = nil
-        Etc.passwd { |entry|
-            if ! low and (entry.uid > 10 and entry.uid < 500)
-                low = entry.name
-            else
-                # We'll reset the limit, since we can't really guarantee that
-                # there are any users with uid > 500
-                if ! high and entry.uid > 100 and ! res.system_users.include?(entry.name)
-                    high = entry.name
-                    break
-                end
-            end
-        }
-        
-        if low
-            assert(! res.check(@user.create(:name => low)), "low user %s passed check" % low)
-        end
-        if high
-            res[:unless_system_user] = 50
-            assert(res.check(@user.create(:name => high)), "high user %s failed check" % high)
-        end
-    end
-    
-    # The other half of #408.
-    def test_check_is_called
-        res = Puppet::Type.type(:resources).create :name => :user, :purge => true
-        
-        list = nil
-        assert_nothing_raised { list = res.generate }
-        
-        assert(! list.empty?, "did not get any users")
-        
-        bad = list.find_all { |u|
-                %w{root bin nobody}.include?(u[:name]) or (cv = u.retrieve and cv[u.property(:uid)] < 500)
-            }
-        assert(bad.empty?, "incorrectly passed users %s" % bad.collect { |u| u[:name]}.join(", "))
-    end
-end
-
diff --git a/test/ral/type/service.rb b/test/ral/type/service.rb
deleted file mode 100755
index 01533c6..0000000
--- a/test/ral/type/service.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-
-class TestServiceType < Test::Unit::TestCase
-	include PuppetTest
-
-    # #199
-    def test_no_refresh_when_starting
-        service = Puppet::Type.type(:service).create :name => "hopefully_this_isnt_in_the_process_table",
-            :ensure => :running, :provider => :base
-
-        assert_equal :running, service.instance_eval('@parameters[:ensure]').should
-        assert_not_equal :running, service.instance_eval('@parameters[:ensure]').retrieve, "You have something called #{service.name} in your process table"
-
-        # First make sure it does not refresh
-        service.provider.expects(:restart).never
-
-        assert_nothing_raised do
-            service.refresh
-        end
-    end
-
-    def test_refresh_normally
-        service = Puppet::Type.type(:service).create :name => "testing",
-            :ensure => :running, :provider => :base, :status => "cat /dev/null"
-
-        service.provider.expects(:restart)
-
-        assert_nothing_raised do
-            service.refresh
-        end
-    end
-end
-
diff --git a/test/ral/type/sshkey.rb b/test/ral/type/sshkey.rb
deleted file mode 100755
index 1656b5d..0000000
--- a/test/ral/type/sshkey.rb
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'facter'
-
-class TestSSHKey < Test::Unit::TestCase
-	include PuppetTest
-    def setup
-        super
-        # god i'm lazy
-        @sshkeytype = Puppet.type(:sshkey)
-
-        @provider = @sshkeytype.defaultprovider
-
-        # Make sure they aren't using something funky like netinfo
-        unless @provider.name == :parsed
-            @sshkeytype.defaultprovider = @sshkeytype.provider(:parsed)
-        end
-
-        cleanup do @sshkeytype.defaultprovider = nil end
-
-        if @provider.respond_to?(:default_target)
-            oldpath = @provider.default_target
-            cleanup do
-                @provider.default_target = oldpath
-            end
-            @provider.default_target = tempfile()
-        end
-    end
-
-    def teardown
-        super
-        if @provider.respond_to?(:clear)
-            @provider.clear
-        end
-    end
-
-    def mkkey
-        key = nil
-
-        if defined? @kcount
-            @kcount += 1
-        else
-            @kcount = 1
-        end
-
-        @catalog ||= mk_catalog
-
-        assert_nothing_raised {
-            key = @sshkeytype.create(
-                :name => "host%s.madstop.com" % @kcount,
-                :key => "%sAAAAB3NzaC1kc3MAAACBAMnhSiku76y3EGkNCDsUlvpO8tRgS9wL4Eh54WZfQ2lkxqfd2uT/RTT9igJYDtm/+UHuBRdNGpJYW1Nw2i2JUQgQEEuitx4QKALJrBotejGOAWxxVk6xsh9xA0OW8Q3ZfuX2DDitfeC8ZTCl4xodUMD8feLtP+zEf8hxaNamLlt/AAAAFQDYJyf3vMCWRLjTWnlxLtOyj/bFpwAAAIEAmRxxXb4jjbbui9GYlZAHK00689DZuX0EabHNTl2yGO5KKxGC6Esm7AtjBd+onfu4Rduxut3jdI8GyQCIW8WypwpJofCIyDbTUY4ql0AQUr3JpyVytpnMijlEyr41FfIb4tnDqnRWEsh2H7N7peW+8DWZHDFnYopYZJ9Yu4/jHRYAAACAERG50e6aRRb43biDr7Ab9NUCgM9bC0SQscI/xdlFjac0B/kSWJYTGVARWBDWug705hTnlitY9cLC5Ey/t/OYOjylTavTEfd/bh/8FkAYO+pWdW3hx6p97TBffK0b6nrc6OORT2uKySbbKOn0681nNQh4a6ueR3JRppNkRPnTk5c=" % @kcount,
-                :type => "ssh-dss",
-                :alias => ["192.168.0.%s" % @kcount],
-                :catalog => @catalog
-            )
-        }
-
-        return key
-    end
-
-    def test_instances
-        assert_nothing_raised {
-            Puppet.type(:sshkey).instances
-        }
-
-        count = 0
-        @sshkeytype.each do |h|
-            count += 1
-        end
-
-        assert_equal(0, count, "Found sshkeys in empty file somehow")
-    end
-
-    def test_simplekey
-        key = mkkey
-        file = tempfile()
-        key[:target] = file
-        key[:provider] = :parsed
-
-        assert_apply(key)
-        
-        assert_events([], key, "created events on in-sync key")
-        
-        assert(key.provider.exists?, "Key did not get created")
-        
-        # Now create a new key object
-        name = key.name
-        key = nil
-        @sshkeytype.clear
-        
-        key = @sshkeytype.create :name => name, :target => file, :provider => :parsed
-        key.retrieve
-        
-        assert(key.provider.exists?, "key thinks it does not exist")
-        
-    end
-
-    def test_moddingkey
-        key = mkkey()
-
-        assert_events([:sshkey_created], key)
-
-        key.retrieve
-
-        aliases = %w{madstop kirby yayness}
-        key[:alias] = aliases
-
-        params = key.instance_variable_get("@parameters")
-        assert_events([:sshkey_changed], key)
-
-        aliases.each do |name|
-            assert_equal(key, key.class[name],
-                "alias was not set")
-        end
-    end
-
-    def test_aliasisproperty
-        assert_equal(:property, @sshkeytype.attrtype(:alias))
-    end
-
-    def test_multivalues
-        key = mkkey
-        assert_raise(Puppet::Error) {
-            key[:alias] = "puppetmasterd yayness"
-        }
-    end
-
-    def test_puppetalias
-        key = mkkey()
-
-        assert_nothing_raised {
-            key[:alias] = "testing"
-        }
-
-        same = key.class["testing"]
-        assert(same, "Could not retrieve by alias")
-    end
-
-    def test_removal
-        sshkey = mkkey()
-        assert_nothing_raised {
-            sshkey[:ensure] = :present
-        }
-        assert_events([:sshkey_created], sshkey)
-
-        assert(sshkey.provider.exists?, "key was not created")
-        assert_nothing_raised {
-            sshkey[:ensure] = :absent
-        }
-
-        assert_events([:sshkey_removed], sshkey)
-        assert(! sshkey.provider.exists?, "Key was not deleted")
-        assert_events([], sshkey)
-    end
-
-    # Make sure changes actually modify the file.
-    def test_modifyingfile
-        keys = []
-        names = []
-        3.times {
-            k = mkkey()
-            #h[:ensure] = :present
-            #h.retrieve
-            keys << k
-            names << k.name
-        }
-        assert_apply(*keys)
-        keys.clear
-        Puppet.type(:sshkey).clear
-        newkey = mkkey()
-        #newkey[:ensure] = :present
-        names << newkey.name
-        assert_apply(newkey)
-
-        # Verify we can retrieve that info
-        assert_nothing_raised("Could not retrieve after second write") {
-            newkey.provider.class.prefetch
-            newkey.retrieve
-        }
-
-        # And verify that we have data for everything
-        names.each { |name|
-            key = Puppet.type(:sshkey)[name] ||
-                Puppet.type(:sshkey).create(:name => name)
-            assert(key, "Could not retrieve key for %s" % name)
-            assert(key.provider.exists?, "key %s is missing" % name)
-        }
-    end
-end
-
diff --git a/test/ral/type/tidy.rb b/test/ral/type/tidy.rb
deleted file mode 100755
index 657ca6e..0000000
--- a/test/ral/type/tidy.rb
+++ /dev/null
@@ -1,291 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/support/utils'
-
-class TestTidy < Test::Unit::TestCase
-    include PuppetTest::Support::Utils
-    include PuppetTest::FileTesting
-    def mktmpfile
-        # because luke's home directory is on nfs, it can't be used for testing
-        # as root
-        tmpfile = tempfile()
-        File.open(tmpfile, "w") { |f| f.puts rand(100) }
-        @@tmpfiles.push tmpfile
-        return tmpfile
-    end
-
-    def mktmpdir
-        dir = File.join(tmpdir(), "puppetlinkdir")
-        unless FileTest.exists?(dir)
-            Dir.mkdir(dir)
-        end
-        @@tmpfiles.push dir
-        return dir
-    end
-
-    def test_tidydirs
-        dir = mktmpdir
-        file = File.join(dir, "file")
-        File.open(file, "w") { |f|
-            f.puts "some stuff"
-        }
-
-        tidy = Puppet.type(:tidy).create(
-            :name => dir,
-            :size => "1b",
-            :rmdirs => true,
-            :recurse => true
-        )
-
-        assert_events([:file_tidied, :file_tidied], tidy)
-
-        assert(!FileTest.exists?(file), "Tidied %s still exists" % file)
-        assert(!FileTest.exists?(dir), "Tidied %s still exists" % dir)
-
-    end
-
-    def disabled_test_recursion
-        source = mktmpdir()
-        FileUtils.cd(source) {
-            mkranddirsandfiles()
-        }
-
-        link = nil
-        assert_nothing_raised {
-            link = newlink(:target => source, :recurse => true)
-        }
-        comp = mk_catalog("linktest",link)
-        cycle(comp)
-
-        path = link.name
-        list = file_list(path)
-        FileUtils.cd(path) {
-            list.each { |file|
-                unless FileTest.directory?(file)
-                    assert(FileTest.symlink?(file))
-                    target = File.readlink(file)
-                    assert_equal(target,File.join(source,file.sub(/^\.\//,'')))
-                end
-            }
-        }
-    end
-
-    # Test the different age iterations.
-    def test_age_conversions
-        tidy = Puppet::Type.type(:tidy).create :path => tempfile(), :age => "1m"
-
-        convertors = {
-            :second => 1,
-            :minute => 60
-        }
-
-        convertors[:hour] = convertors[:minute] * 60
-        convertors[:day] = convertors[:hour] * 24
-        convertors[:week] = convertors[:day] * 7
-
-        # First make sure we default to days
-        assert_nothing_raised do
-            tidy[:age] = "2"
-        end
-
-        assert_equal(2 * convertors[:day], tidy.should(:age),
-            "Converted 2 wrong")
-
-        convertors.each do |name, number|
-            init = name.to_s[0..0] # The first letter
-            [0, 1, 5].each do |multi|
-                [init, init.upcase].each do |letter|
-                    age = multi.to_s + letter.to_s
-                    assert_nothing_raised do
-                        tidy[:age] = age
-                    end
-
-                    assert_equal(multi * convertors[name], tidy.should(:age),
-                        "Converted %s wrong" % age)
-                end
-            end
-        end
-    end
-
-    def test_size_conversions
-        convertors = {
-            :b => 0,
-            :kb => 1,
-            :mb => 2,
-            :gb => 3
-        }
-
-        tidy = Puppet::Type.type(:tidy).create :path => tempfile(), :age => "1m"
-
-        # First make sure we default to kb
-        assert_nothing_raised do
-            tidy[:size] = "2"
-        end
-
-        assert_equal(2048, tidy.should(:size),
-            "Converted 2 wrong")
-
-        convertors.each do |name, number|
-            init = name.to_s[0..0] # The first letter
-            [0, 1, 5].each do |multi|
-                [init, init.upcase].each do |letter|
-                    size = multi.to_s + letter.to_s
-                    assert_nothing_raised do
-                        tidy[:size] = size
-                    end
-
-                    total = multi
-                    number.times do total *= 1024 end
-
-                    assert_equal(total, tidy.should(:size),
-                        "Converted %s wrong" % size)
-                end
-            end
-        end
-    end
-
-    def test_agetest
-        tidy = Puppet::Type.type(:tidy).create :path => tempfile(), :age => "1m"
-
-        age = tidy.property(:age)
-
-        # Set it to something that should be fine
-        assert(age.insync?(Time.now.to_i - 5), "Tried to tidy a low age")
-
-        # Now to something that should fail
-        assert(! age.insync?(Time.now.to_i - 120), "Incorrectly skipped tidy")
-    end
-
-    def test_sizetest
-        tidy = Puppet::Type.type(:tidy).create :path => tempfile(), :size => "1k"
-
-        size = tidy.property(:size)
-
-        # Set it to something that should be fine
-        assert(size.insync?(50), "Tried to tidy a low size")
-
-        # Now to something that should fail
-        assert(! size.insync?(2048), "Incorrectly skipped tidy")
-    end
-
-    # Make sure we can remove different types of files
-    def test_tidytypes
-        path = tempfile()
-        tidy = Puppet::Type.type(:tidy).create :path => path, :size => "1b", :age => "1s"
-
-        # Start with a file
-        File.open(path, "w") { |f| f.puts "this is a test" }
-        assert_events([:file_tidied], tidy)
-        assert(! FileTest.exists?(path), "File was not removed")
-
-        # Then a link
-        dest = tempfile
-        File.open(dest, "w") { |f| f.puts "this is a test" }
-        File.symlink(dest, path)
-        assert_events([:file_tidied], tidy)
-        assert(! FileTest.exists?(path), "Link was not removed")
-        assert(FileTest.exists?(dest), "Destination was removed")
-
-        # And a directory
-        Dir.mkdir(path)
-        tidy[:rmdirs] = true
-        assert_events([:file_tidied], tidy)
-        assert(! FileTest.exists?(path), "File was not removed")
-    end
-    
-    # Make sure we can specify either attribute and get appropriate behaviour.
-    # I found that the original implementation of this did not work unless both
-    # size and age were specified.
-    def test_one_attribute
-        path = tempfile()
-        File.open(path, "w") { |f| 10.times { f.puts "yayness " } }
-        tidy = Puppet::Type.type(:tidy).create :path => path, :size => "1b"
-        
-        assert_apply(tidy)
-        assert(! FileTest.exists?(path), "file did not get tidied")
-        
-        tidy.class.clear
-
-        # Now try one with just an age attribute.
-        time = Time.now - 10
-        stat = stub 'stat', :mtime => time, :atime => time, :ftype => "file"
-        File.stubs(:lstat)
-        File.stubs(:lstat).with(path).returns(stat)
-
-        File.open(path, "w") { |f| 10.times { f.puts "yayness " } }
-        tidy = Puppet::Type.type(:tidy).create :path => path, :age => "5s"
-        
-
-        assert_apply(tidy)
-        assert(! FileTest.exists?(path), "file did not get tidied")
-    end
-    
-    # Testing #355.
-    def test_remove_dead_links
-        dir = tempfile()
-        link = File.join(dir, "link")
-        target = tempfile()
-        Dir.mkdir(dir)
-        File.symlink(target, link)
-        
-        tidy = Puppet::Type.type(:tidy).create :path => dir, :size => "1b", :recurse => true
-        assert_apply(tidy)
-        assert(! FileTest.symlink?(link), "link was not tidied")
-    end
-
-    def test_glob_matches_single
-        dir = mktmpdir
-        files = {
-          :remove => File.join(dir, "01-foo"),
-          :keep   => File.join(dir, "default")
-        }
-        files.each do |tag, file|
-          File.open(file, "w") { |f|
-              f.puts "some stuff"
-          }
-        end
-
-        tidy = Puppet.type(:tidy).create(
-            :name => dir,
-            :size => "1b",
-            :rmdirs => true,
-            :recurse => true,
-            :matches => "01-*"
-        )
-        assert_apply(tidy)
-
-        assert(FileTest.exists?(files[:keep]), "%s was tidied" % files[:keep])
-        assert(!FileTest.exists?(files[:remove]), "Tidied %s still exists" % files[:remove])
-    end
-
-    def test_glob_matches_multiple
-        dir = mktmpdir
-        files = {
-          :remove1 => File.join(dir, "01-foo"),
-          :remove2 => File.join(dir, "02-bar"),
-          :keep1   => File.join(dir, "default")
-        }
-        files.each do |tag, file|
-          File.open(file, "w") { |f|
-              f.puts "some stuff"
-          }
-        end
-
-        tidy = Puppet.type(:tidy).create(
-            :name => dir,
-            :size => "1b",
-            :rmdirs => true,
-            :recurse => true,
-            :matches => ["01-*", "02-*"]
-        )
-        assert_apply(tidy)
-
-        assert(FileTest.exists?(files[:keep1]), "%s was tidied" % files[:keep1])
-        assert(!FileTest.exists?(files[:remove1]), "Tidied %s still exists" % files[:remove1])
-        assert(!FileTest.exists?(files[:remove2]), "Tidied %s still exists" % files[:remove2])
-    end
-end
-
diff --git a/test/ral/type/user.rb b/test/ral/type/user.rb
deleted file mode 100755
index 4c8a9f9..0000000
--- a/test/ral/type/user.rb
+++ /dev/null
@@ -1,448 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'etc'
-
-class TestUser < Test::Unit::TestCase
-	include PuppetTest
-
-    p = Puppet::Type.type(:user).provide :fake, :parent => PuppetTest::FakeProvider do
-        @name = :fake
-        apimethods
-        def create
-            @ensure = :present
-            @resource.send(:properties).each do |property|
-                next if property.name == :ensure
-                property.sync
-            end
-        end
-
-        def delete
-            @ensure = :absent
-            @resource.send(:properties).each do |property|
-                send(property.name.to_s + "=", :absent)
-            end
-        end
-
-        def exists?
-            if defined? @ensure and @ensure == :present
-                true
-            else
-                false
-            end
-        end
-    end
-
-    FakeUserProvider = p
-
-    @@fakeproviders[:group] = p
-
-    def findshell(old = nil)
-        %w{/bin/sh /bin/bash /sbin/sh /bin/ksh /bin/zsh /bin/csh /bin/tcsh
-            /usr/bin/sh /usr/bin/bash /usr/bin/ksh /usr/bin/zsh /usr/bin/csh
-            /usr/bin/tcsh}.find { |shell|
-                if old
-                    FileTest.exists?(shell) and shell != old
-                else
-                    FileTest.exists?(shell)
-                end
-        }
-    end
-
-    def setup
-        super
-        Puppet::Type.type(:user).defaultprovider = FakeUserProvider
-    end
-
-    def teardown
-        Puppet::Type.type(:user).defaultprovider = nil
-        super
-    end
-
-    def mkuser(name)
-        user = nil
-        assert_nothing_raised {
-            user = Puppet.type(:user).create(
-                :name => name,
-                :comment => "Puppet Testing User",
-                :gid => Puppet::Util::SUIDManager.gid,
-                :shell => findshell(),
-                :home => "/home/%s" % name
-            )
-        }
-
-        assert(user, "Did not create user")
-
-        return user
-    end
-
-    def attrtest_ensure(user)
-        old = user.provider.ensure
-        user[:ensure] = :absent
-
-        comp = mk_catalog("ensuretest", user)
-        assert_apply(user)
-        assert(!user.provider.exists?, "User is still present")
-        user[:ensure] = :present
-        assert_events([:user_created], comp)
-        assert(user.provider.exists?, "User is absent")
-        user[:ensure] = :absent
-        trans = assert_events([:user_removed], comp)
-
-        assert_rollback_events(trans, [:user_created], "user")
-
-        user[:ensure] = old
-        assert_apply(user)
-    end
-
-    def attrtest_comment(user)
-        user.retrieve
-        old = user.provider.comment
-        user[:comment] = "A different comment"
-
-        comp = mk_catalog("commenttest", user)
-
-        trans = assert_events([:user_changed], comp, "user")
-
-        assert_equal("A different comment", user.provider.comment,
-            "Comment was not changed")
-
-        assert_rollback_events(trans, [:user_changed], "user")
-
-        assert_equal(old, user.provider.comment,
-            "Comment was not reverted")
-    end
-
-    def attrtest_home(user)
-        obj = nil
-        comp = mk_catalog("hometest", user)
-
-        old = user.provider.home
-        user[:home] = old
-
-        trans = assert_events([], comp, "user")
-
-        user[:home] = "/tmp"
-
-        trans = assert_events([:user_changed], comp, "user")
-
-        assert_equal("/tmp", user.provider.home, "Home was not changed")
-
-        assert_rollback_events(trans, [:user_changed], "user")
-
-        assert_equal(old, user.provider.home, "Home was not reverted")
-    end
-
-    def attrtest_shell(user)
-        old = user.provider.shell
-        comp = mk_catalog("shelltest", user)
-
-        user[:shell] = old
-
-        trans = assert_events([], comp, "user")
-
-        newshell = findshell(old)
-
-        unless newshell
-            $stderr.puts "Cannot find alternate shell; skipping shell test"
-            return
-        end
-
-        user[:shell] = newshell
-
-        trans = assert_events([:user_changed], comp, "user")
-
-        user.retrieve
-        assert_equal(newshell, user.provider.shell,
-            "Shell was not changed")
-
-        assert_rollback_events(trans, [:user_changed], "user")
-        user.retrieve
-
-        assert_equal(old, user.provider.shell, "Shell was not reverted")
-    end
-
-    def attrtest_uid(user)
-        obj = nil
-        comp = mk_catalog("uidtest", user)
-
-        user.provider.uid = 1
-
-        old = 1
-        newuid = 1
-        while true
-            newuid += 1
-
-            if newuid - old > 1000
-                $stderr.puts "Could not find extra test UID"
-                return
-            end
-            begin
-                newuser = Etc.getpwuid(newuid)
-            rescue ArgumentError => detail
-                break
-            end
-        end
-
-        assert_nothing_raised("Failed to change user id") {
-            user[:uid] = newuid
-        }
-
-        trans = assert_events([:user_changed], comp, "user")
-
-        assert_equal(newuid, user.provider.uid, "UID was not changed")
-
-        assert_rollback_events(trans, [:user_changed], "user")
-
-        assert_equal(old, user.provider.uid, "UID was not reverted")
-    end
-
-    def attrtest_groups(user)
-        Etc.setgrent
-        max = 0
-        while group = Etc.getgrent
-            if group.gid > max and group.gid < 5000
-                max = group.gid
-            end
-        end
-
-        groups = []
-        main = []
-        extra = []
-        5.times do |i|
-            i += 1
-            name = "pptstgr%s" % i
-            groups << name
-            if i < 3
-                main << name
-            else
-                extra << name
-            end
-        end
-
-        assert(user[:membership] == :minimum, "Membership did not default correctly")
-
-        assert_nothing_raised {
-            user.retrieve
-        }
-
-        # Now add some of them to our user
-        assert_nothing_raised {
-            user[:groups] = extra
-        }
-        assert_nothing_raised {
-            user.retrieve
-        }
-
-        assert_instance_of(String, user.property(:groups).should)
-
-        # Some tests to verify that groups work correctly startig from nothing
-        # Remove our user
-        user[:ensure] = :absent
-        assert_apply(user)
-
-        assert_nothing_raised do
-            user.retrieve
-        end
-
-        # And add it again
-        user[:ensure] = :present
-        assert_apply(user)
-
-        # Make sure that the groups are a string, not an array
-        assert(user.provider.groups.is_a?(String),
-            "Incorrectly passed an array to groups")
-
-        currentvalue = user.retrieve
-
-        assert(currentvalue[user.property(:groups)], "Did not retrieve group list")
-
-        list = currentvalue[user.property(:groups)]
-        assert_equal(extra.sort, list.sort, "Group list is not equal")
-
-        # Now set to our main list of groups
-        assert_nothing_raised {
-            user[:groups] = main
-        }
-
-        assert_equal((main + extra).sort, user.property(:groups).should.split(",").sort)
-
-        currentvalue = nil
-        assert_nothing_raised {
-            currentvalue = user.retrieve
-        }
-
-        assert(!user.insync?(currentvalue), "User is incorrectly in sync")
-
-        assert_apply(user)
-
-        assert_nothing_raised {
-            currentvalue = user.retrieve
-        }
-
-        # We're not managing inclusively, so it should keep the old group
-        # memberships and add the new ones
-        list = currentvalue[user.property(:groups)]
-        assert_equal((main + extra).sort, list.sort, "Group list is not equal")
-
-        assert_nothing_raised {
-            user[:membership] = :inclusive
-        }
-        assert_nothing_raised {
-            currentvalue = user.retrieve
-        }
-
-        assert(!user.insync?(currentvalue), "User is incorrectly in sync")
-
-        assert_events([:user_changed], user)
-        assert_nothing_raised {
-            currentvalue = user.retrieve
-        }
-
-        list = currentvalue[user.property(:groups)]
-        assert_equal(main.sort, list.sort, "Group list is not equal")
-
-        # Set the values a bit differently.
-        user.property(:groups).should = list.sort { |a,b| b <=> a }
-
-        assert(user.property(:groups).insync?(list.sort), "Groups property did not sort groups")
-
-        user.delete(:groups)
-    end
-
-    def test_groups_list_must_not_contain_commas
-        assert_raise(Puppet::Error) do
-            Puppet::Type.type(:user).create :name => "luke", :groups => "root,adm"
-        end
-    end
-
-    def test_autorequire
-        file = tempfile()
-        comp = nil
-        user = nil
-        group =nil
-        home = nil
-        ogroup = nil
-        assert_nothing_raised {
-            user = Puppet.type(:user).create(
-                :name => "pptestu",
-                :home => file,
-                :gid => "pptestg",
-                :groups => "yayness"
-            )
-            home = Puppet.type(:file).create(
-                :path => file,
-                :owner => "pptestu",
-                :ensure => "directory"
-            )
-            group = Puppet.type(:group).create(
-                :name => "pptestg"
-            )
-            ogroup = Puppet.type(:group).create(
-                :name => "yayness"
-            )
-            comp = mk_catalog(user, group, home, ogroup)
-        }
-        
-        rels = nil
-        assert_nothing_raised() { rels = user.autorequire }
-
-        assert(rels.detect { |r| r.source == group }, "User did not require group")
-        assert(rels.detect { |r| r.source == ogroup }, "User did not require other groups")
-        assert_nothing_raised() { rels = home.autorequire }
-        assert(rels.detect { |r| r.source == user }, "Homedir did not require user")
-    end
-
-    def test_simpleuser
-        name = "pptest"
-
-        user = mkuser(name)
-
-        comp = mk_catalog("usercomp", user)
-
-        trans = assert_events([:user_created], comp, "user")
-
-        assert_equal(user.should(:comment), user.provider.comment,
-            "Comment was not set correctly")
-
-        assert_rollback_events(trans, [:user_removed], "user")
-
-        assert(! user.provider.exists?, "User did not get deleted")
-    end
-
-    def test_allusermodelproperties
-        user = nil
-        name = "pptest"
-
-        user = mkuser(name)
-
-        assert(! user.provider.exists?, "User %s is present" % name)
-
-        comp = mk_catalog("usercomp", user)
-
-        trans = assert_events([:user_created], comp, "user")
-
-        user.retrieve
-        assert_equal("Puppet Testing User", user.provider.comment,
-            "Comment was not set")
-
-        tests = Puppet.type(:user).validproperties
-
-        tests.each { |test|
-            if self.respond_to?("attrtest_%s" % test)
-                self.send("attrtest_%s" % test, user)
-            else
-                Puppet.err "Not testing attr %s of user" % test
-            end
-        }
-
-        user[:ensure] = :absent
-        assert_apply(user)
-    end
-    
-    # Testing #455
-    def test_autorequire_with_no_group_should
-        user = Puppet::Type.type(:user).create(:name => "yaytest", :check => :all)
-        
-        assert_nothing_raised do
-            user.autorequire
-        end
-
-        user[:ensure] = :absent
-
-        assert_nothing_raised do
-            user.evaluate
-        end
-
-        assert(user.send(:property, :groups).insync?(nil),
-            "Groups state considered out of sync with no :should value")
-    end
-
-    # Make sure the 'managehome' param can only be set when the provider
-    # has that feature.  Uses a patch from #432.
-    def test_managehome
-        user = Puppet::Type.type(:user).create(:name => "yaytest", :check => :all)
-
-        prov = user.provider
-
-        home = false
-        prov.class.meta_def(:manages_homedir?) { home }
-
-        assert_nothing_raised("failed on false managehome") do
-            user[:managehome] = false
-        end
-
-        assert_raise(ArgumentError, "did not fail when managehome? is false") do
-            user[:managehome] = true
-        end
-
-        home = true
-        assert(prov.class.manages_homedir?, "provider did not enable homedir")
-        assert_nothing_raised("failed when managehome is true") do
-            user[:managehome] = true
-        end
-    end
-end
-
diff --git a/test/ral/type/yumrepo.rb b/test/ral/type/yumrepo.rb
deleted file mode 100755
index 21865e6..0000000
--- a/test/ral/type/yumrepo.rb
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'fileutils'
-
-class TestYumRepo < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @yumdir = tempfile()
-        Dir.mkdir(@yumdir)
-        @yumconf = File.join(@yumdir, "yum.conf")
-        File.open(@yumconf, "w") do |f|
-            f.print "[main]\nreposdir=#{@yumdir} /no/such/dir\n"
-        end
-        Puppet.type(:yumrepo).yumconf = @yumconf
-    end
-
-    # Modify one existing section
-    def test_modify
-        copy_datafiles
-        devel = make_repo("development", { :descr => "New description" })
-        current_values = devel.retrieve
-        assert_equal("development", devel[:name])
-        assert_equal('Fedora Core $releasever - Development Tree', 
-                     current_values[devel.property(:descr)])
-        assert_equal('New description', 
-                     devel.property(:descr).should)
-        assert_apply(devel)
-        inifile = Puppet.type(:yumrepo).read()
-        assert_equal('New description', inifile['development']['name'])
-        assert_equal('Fedora Core $releasever - $basearch - Base',
-                     inifile['base']['name'])
-        assert_equal("foo\n  bar\n  baz", inifile['base']['exclude'])
-        assert_equal(['base', 'development', 'main'],
-                     all_sections(inifile))
-    end
-
-    # Create a new section
-    def test_create
-        values = {
-            :descr => "Fedora Core $releasever - $basearch - Base",
-            :baseurl => "http://example.com/yum/$releasever/$basearch/os/",
-            :enabled => "1",
-            :gpgcheck => "1",
-            :includepkgs => "absent",
-            :gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora",
-            :proxy => "http://proxy.example.com:80/",
-            :proxy_username => "username",
-            :proxy_password => "password"
-        }
-        repo = make_repo("base", values)
-
-        assert_apply(repo)
-        inifile = Puppet.type(:yumrepo).read()
-        sections = all_sections(inifile)
-        assert_equal(['base', 'main'], sections)
-        text = inifile["base"].format
-        assert_equal(CREATE_EXP, text)
-    end
-
-    # Delete mirrorlist by setting it to :absent and enable baseurl
-    def test_absent
-        copy_datafiles
-        baseurl = 'http://example.com/'
-        devel = make_repo("development", 
-                          { :mirrorlist => 'absent',
-                            :baseurl => baseurl })
-        devel.retrieve
-        assert_apply(devel)
-        inifile = Puppet.type(:yumrepo).read()
-        sec = inifile["development"]
-        assert_nil(sec["mirrorlist"])
-        assert_equal(baseurl, sec["baseurl"])
-    end
-
-    def make_repo(name, hash={})
-        hash[:name] = name
-        Puppet.type(:yumrepo).create(hash)
-    end
-
-    def all_sections(inifile)
-        sections = []
-        inifile.each_section { |section| sections << section.name }
-        return sections.sort
-    end
-
-    def copy_datafiles
-        fakedata("data/types/yumrepos").select { |file|
-            file =~ /\.repo$/
-        }.each { |src|
-            dst = File::join(@yumdir, File::basename(src))
-            FileUtils::copy(src, dst)
-        }
-    end
-    
-    CREATE_EXP = <<'EOF'
-[base]
-name=Fedora Core $releasever - $basearch - Base
-baseurl=http://example.com/yum/$releasever/$basearch/os/
-enabled=1
-gpgcheck=1
-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
-proxy=http://proxy.example.com:80/
-proxy_username=username
-proxy_password=password
-EOF
-
-end        
diff --git a/test/ral/type/zone.rb b/test/ral/type/zone.rb
deleted file mode 100755
index eb485b9..0000000
--- a/test/ral/type/zone.rb
+++ /dev/null
@@ -1,420 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/type/zone'
-
-class TestZone < PuppetTest::TestCase
-    confine "Zones are only functional on Solaris" => (Facter["operatingsystem"].value == "Solaris")
-
-    def setup
-        super
-        @@zones = []
-    end
-
-    def mkzone(name)
-        zone = nil
-
-        base = tempfile()
-        Dir.mkdir(base)
-        File.chmod(0700, base)
-        root = File.join(base, "zonebase")
-        assert_nothing_raised {
-            zone = Puppet::Type.type(:zone).create(
-                :name => name,
-                :path => root,
-                :ensure => "configured" # don't want to install zones automatically
-            )
-        }
-
-        @@zones << name
-
-        return zone
-    end
-
-    def test_instances
-        list = nil
-        assert_nothing_raised {
-            list = Puppet::Type.type(:zone).instances
-        }
-
-        assert(! list.empty?, "Got no zones back")
-
-        assert(list.find { |z| z[:name] == "global" }, "Could not find global zone")
-    end
-
-    def test_state_sequence
-        zone = mkzone("slicetest")
-
-        property = zone.property(:ensure)
-
-        slice = nil
-        assert_nothing_raised {
-            slice = property.class.state_sequence(:absent, :installed).collect do |o|
-                o[:name]
-            end
-        }
-
-
-        assert_equal([:configured, :installed], slice)
-
-        assert_nothing_raised {
-            slice = property.class.state_sequence(:running, :installed).collect do |o|
-                o[:name]
-            end
-        }
-
-
-        assert_equal(slice, [:installed])
-
-    end
-
-    # Make sure the ensure stuff behaves as we expect
-    def test_zoneensure
-        zone = mkzone("ensurezone")
-
-        property = zone.property(:ensure)
-
-        assert(property, "Did not get ensure property")
-
-        values = nil
-        assert_nothing_raised {
-            values = zone.retrieve
-        }
-
-        assert(! property.insync?(values[property]), "Property is somehow in sync")
-
-        assert(property.up?, "Property incorrectly thinks it is not moving up")
-
-        zone[:ensure] = :installed
-        assert(property.up?, "Property incorrectly thinks it is not moving up")
-        zone[:ensure] = :absent
-        assert(! property.up?, "Property incorrectly thinks it is moving up")
-    end
-
-    # Make sure all mentioned methods actually exist.
-    def test_zonemethods_exist
-        methods = []
-        zone = mkzone("methodtest")
-
-        property = zone.property(:ensure)
-        assert_nothing_raised {
-            property.class.state_sequence(:absent, :running).each do |st|
-                [:up, :down].each do |m|
-                    if st[m]
-                        methods << st[m]
-                    end
-                end
-            end
-        }
-
-        methods.each do |m|
-            Puppet::Type.type(:zone).suitableprovider.each do |prov|
-                assert(prov.method_defined?(m),
-                    "Zone provider %s does not define method %s" %
-                    [prov.name, m])
-            end
-        end
-
-    end
-
-    # Make sure our property generates the correct text.
-    def test_inherit_property
-        zone = mkzone("configtesting")
-        zone[:ensure] = :configured
-
-        assert_nothing_raised {
-            zone[:inherit] = "/usr"
-        }
-        property = zone.property(:inherit)
-        assert(zone, "Did not get 'inherit' property")
-
-        assert_equal("add inherit-pkg-dir\nset dir=/usr\nend", property.configtext,
-            "Got incorrect config text")
-
-        zone.provider.inherit = "/usr"
-
-        assert_equal("", property.configtext,
-            "Got incorrect config text")
-
-        # Now we want multiple directories
-        property.should = %w{/usr /sbin /lib}
-
-        # The statements are sorted
-        text = "add inherit-pkg-dir
-set dir=/lib
-end
-add inherit-pkg-dir
-set dir=/sbin
-end"
-
-        assert_equal(text, property.configtext,
-            "Got incorrect config text")
-
-        zone.provider.inherit = %w{/usr /sbin /lib}
-        property.should = %w{/usr /sbin}
-
-        text = "remove inherit-pkg-dir dir=/lib"
-
-        assert_equal(text, property.configtext,
-            "Got incorrect config text")
-    end
-end
-
-class TestZoneAsRoot < TestZone
-    confine "Not running Zone creation tests" => Puppet.features.root?
-    confine "Zones are only functional on Solaris" => (Facter["operatingsystem"].value == "Solaris")
-
-    def teardown
-        current = %x{zoneadm list -cp}.split("\n").inject({}) { |h, line|
-            ary = line.split(":")
-            h[ary[1]] = ary[2]
-            h
-        }
-
-        Puppet::Type.type(:zone).clear
-
-        # Get rid of any lingering zones
-        @@zones.each do |zone|
-            next unless current.include? zone
-
-            obj = Puppet::Type.type(:zone).create(:name => zone)
-            obj[:ensure] = :absent
-            assert_apply(obj)
-        end
-
-        # We can't delete the temp files until the zones are stopped and removed.
-        super
-    end
-    # Make sure our ensure process actually works.
-    def test_ensure_sync
-        zone = mkzone("ensuretesting")
-
-        zone[:ensure] = :configured
-
-        assert_apply(zone)
-
-        assert(zone.insync?(zone.retrieve), "Zone is not insync")
-    end
-
-    def test_getconfig
-        zone = mkzone("configtesting")
-
-        base = tempfile()
-        zone[:path] = base
-
-        ip = "192.168.0.1"
-        interface = "bge0"
-        zone[:ip] = "#{interface}:#{ip}"
-
-        IO.popen("zonecfg -z configtesting -f -", "w") do |f|
-            f.puts %{create -b
-set zonepath=#{tempfile()}
-set autoboot=true
-add inherit-pkg-dir
-set dir=/lib
-end
-add inherit-pkg-dir
-set dir=/platform
-end
-add inherit-pkg-dir
-set dir=/sbin
-end
-add inherit-pkg-dir
-set dir=/opt/csw
-end
-add inherit-pkg-dir
-set dir=/usr
-end
-add net
-set address=#{ip}
-set physical=bge0
-end
-}
-        end
-
-        assert_equal(0, $?, "Did not successfully create zone")
-
-        hash = nil
-        assert_nothing_raised {
-            hash = zone.provider.send(:getconfig)
-        }
-
-        zone[:check] = [:inherit, :autoboot]
-
-        values = nil
-        assert_nothing_raised("Could not retrieve zone values") do
-            values = zone.retrieve.inject({}) { |result, newvals| result[newvals[0].name] = newvals[1]; result }
-        end
-
-        # And make sure it gets set correctly.
-        assert_equal(%w{/sbin /usr /opt/csw /lib /platform}.sort,
-            values[:inherit].sort, "Inherited dirs did not get collected correctly."
-        )
-
-        assert_equal(["#{interface}:#{ip}"], values[:ip],
-            "IP addresses did not get collected correctly.")
-
-        assert_equal(:true, values[:autoboot],
-            "Autoboot did not get collected correctly.")
-    end
-
-    # Make sure we can do all the various and sundry configuring things.
-    def test_configuring_zones
-        zone = mkzone("configtesting")
-
-        assert_nothing_raised {
-            zone[:inherit] = "/usr"
-        }
-
-        zone[:ensure] = :configured
-
-        assert_apply(zone)
-
-        assert(zone.insync?(zone.retrieve), "Zone is not insync")
-
-        # Now add a new directory to inherit
-        assert_nothing_raised {
-            zone[:inherit] = ["/sbin", "/usr"]
-        }
-        assert_apply(zone)
-
-        assert(zone.insync?(zone.retrieve), "Zone is not insync")
-
-        assert(%x{/usr/sbin/zonecfg -z #{zone[:name]} info} =~ /dir: \/sbin/,
-            "sbin was not added")
-
-        # And then remove it.
-        assert_nothing_raised {
-            zone[:inherit] = "/usr"
-        }
-        assert_apply(zone)
-
-        assert(zone.insync?(zone.retrieve), "Zone is not insync")
-
-        assert(%x{/usr/sbin/zonecfg -z #{zone[:name]} info} !~ /dir: \/sbin/,
-            "sbin was not removed")
-
-        # Now add an ip adddress.  Fortunately (or not), zonecfg doesn't verify
-        # that the interface exists.
-        zone[:ip] = "hme0:192.168.0.1"
-
-        assert(! zone.insync?(zone.retrieve), "Zone is marked as in sync")
-
-        assert_apply(zone)
-        assert(zone.insync?(zone.retrieve), "Zone is not in sync")
-        assert(%x{/usr/sbin/zonecfg -z #{zone[:name]} info} =~ /192.168.0.1/,
-            "ip was not added")
-        zone[:ip] = ["hme1:192.168.0.2", "hme0:192.168.0.1"]
-        assert_apply(zone)
-        assert(zone.insync?(zone.retrieve), "Zone is not in sync")
-        assert(%x{/usr/sbin/zonecfg -z #{zone[:name]} info} =~ /192.168.0.2/,
-            "ip was not added")
-        zone[:ip] = ["hme1:192.168.0.2"]
-        assert_apply(zone)
-        zone.retrieve
-        assert(%x{/usr/sbin/zonecfg -z #{zone[:name]} info} !~ /192.168.0.1/,
-            "ip was not removed")
-    end
-
-    # Test creating and removing a zone, but only up to the configured property,
-    # so it's faster.
-    def test_smallcreate
-        zone = mkzone("smallcreate")
-        # Include a bunch of stuff so the zone isn't as large
-        dirs = %w{/usr /sbin /lib /platform}
-
-        %w{/opt/csw}.each do |dir|
-            dirs << dir if FileTest.exists? dir
-        end
-        zone[:inherit] = dirs
-
-        assert(zone, "Did not make zone")
-
-        zone[:ensure] = :configured
-
-        assert(! zone.insync?(zone.retrieve), "Zone is incorrectly in sync")
-
-        assert_apply(zone)
-
-        assert(zone.insync?(zone.retrieve), "Zone is incorrectly out of sync")
-
-        zone[:ensure] = :absent
-
-        assert_apply(zone)
-
-        currentvalues = zone.retrieve
-
-        assert_equal(:absent, currentvalues[zone.property(:ensure)], 
-                     "Zone is not absent")
-    end
-
-    # Just go through each method linearly and make sure it works.
-    def test_each_method
-        zone = mkzone("methodtesting")
-        dirs = %w{/usr /sbin /lib /platform}
-
-        %w{/opt/csw}.each do |dir|
-            dirs << dir if FileTest.exists? dir
-        end
-        zone[:inherit] = dirs
-
-        [[:configure, :configured],
-            [:install, :installed],
-            [:start, :running],
-            [:stop, :installed],
-            [:uninstall, :configured],
-            [:unconfigure, :absent]
-        ].each do |method, property|
-            Puppet.info "Testing %s" % method
-            current_values = nil
-            assert_nothing_raised {
-                current_values = zone.retrieve
-            }
-            assert_nothing_raised {
-                zone.provider.send(method)
-            }
-            current_values = nil
-            assert_nothing_raised {
-                current_values = zone.retrieve
-            }
-            assert_equal(property, current_values[zone.property(:ensure)],
-                "Method %s did not correctly set property %s" %
-                    [method, property])
-        end
-    end
-
-    def test_mkzone
-        zone = mkzone("testmaking")
-        # Include a bunch of stuff so the zone isn't as large
-        dirs = %w{/usr /sbin /lib /platform}
-
-        %w{/opt/csw}.each do |dir|
-            dirs << dir if FileTest.exists? dir
-        end
-        zone[:inherit] = dirs
-
-        assert(zone, "Did not make zone")
-
-
-        [:configured, :installed, :running, :installed, :absent].each do |value|
-            assert_nothing_raised {
-                zone[:ensure] = value
-            }
-            assert(! zone.insync?(zone.retrieve), "Zone is incorrectly in sync")
-
-            assert_apply(zone)
-
-            assert_nothing_raised {
-                assert(zone.insync?(zone.retrieve), "Zone is incorrectly out of sync")
-            }
-        end
-
-        currentvalues = zone.retrieve
-
-        assert_equal(:absent, currentvalues[zone.property(:ensure)], 
-                     "Zone is not absent")
-    end
-end
-
diff --git a/test/test b/test/test
deleted file mode 100755
index a8efd50..0000000
--- a/test/test
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/env ruby
-
-#
-# = Synopsis
-#
-# Run unit tests, usually with the goal of resolving some conflict
-# between tests.
-#
-# = Usage
-#
-#   test [-d|--debug] [-f|--files] [-h|--help] [-n method] [-v|--verbose] <file> [file] ...
-#
-# = Description
-#
-# This script is useful for running a specific subset of unit tests, especially
-# when attempting to find a conflict between tests.  By default, it will take
-# the first argument you pass it and run that test or test directory with each
-# test directory in turn, looking for a failure.  If any tests fail, then
-# the script will drill into that test directory, looking for the specific conflict.
-#
-# In this way, when you have deduced you have two conflicting unit tests (tests which
-# pass in isolation but fail when run together), you can tell this script where
-# the failure is and leave it alone to find the conflict.
-#
-# This script is different from the Rakefile because it will run all tests in
-# a single process, whereas if you ask the Rakefile to run multiple tests, it will
-# run them in separate processes thus making it impossible to find conflicts.
-#
-# = Examples
-#
-# Attempt to resolve a conflict between a single test suite that could be anywhere:
-#
-#   ./test ral/providers/user.rb
-#
-# Determine whether two individual files conflict:
-#
-#   ./test --files language/functions.rb ral/providers/provider.rb
-#
-# Run the same test, but only run a specific unit test:
-#
-#   ./test -d -n test_search --files language/functions.rb ral/providers/provider.rb
-#
-# = Options
-#
-# debug::
-#   Enable full debugging.
-#
-# files::
-#   Specify exactly which files to test.
-#
-# help::
-#   Print this help message
-#
-# n::
-#   Specify a single unit test to run.  You can still specify as many files
-#   as you want.
-#
-# verbose::
-#   Print extra information.
-#
-# = Example
-#
-#   puppet -l /tmp/script.log script.pp
-#
-# = Author
-#
-# Luke Kanies
-#
-# = Copyright
-#
-# Copyright (c) 2005 Reductive Labs, LLC
-# Licensed under the GNU Public License
-
-require 'find'
-require 'getoptlong'
-include Find
-
-result = GetoptLong.new(
-    [ "--debug",	"-d",			GetoptLong::NO_ARGUMENT ],
-    [ "--verbose",	"-v",			GetoptLong::NO_ARGUMENT ],
-    [ "-n",			                GetoptLong::REQUIRED_ARGUMENT ],
-    [ "--files",    "-f",           GetoptLong::NO_ARGUMENT ],
-    [ "--help",		"-h",			GetoptLong::NO_ARGUMENT ]
-)
-
-usage = "USAGE: %s [--help] suite" % $0
-
-$options = {}
-keep = []
-
-result.each { |opt,arg|
-    case opt
-    when "--verbose"
-        $options[:verbose] = true
-    when "--files"
-        $options[:files] = true
-    when "--debug"
-        $options[:debug] = true
-        $options[:verbose] = true
-    when "--help"
-        puts usage
-        exit
-    else
-        keep << opt
-        keep << arg if arg
-    end
-}
-
-def dirs
-    Dir.glob("*").find_all { |d| FileTest.directory?(d) }.reject { |d|
-        ["lib", "data"].include?(d)
-    }
-end
-
-def rake(*args)
-    print "trying %s..." % args.join(" ")
-    output = %x{rake %s} % args.join(" ")
-
-    if $?.exitstatus == 0
-        puts "succeeded"
-        return true
-    else
-        puts "failed"
-        return false
-    end
-end
-
-def resolve(dir)
-    dirs = dirs()
-
-    # If the passed dir is a subdir or file, put the basedir last
-    if dir.include?(File::SEPARATOR)
-        basedir = dir.split(File::SEPARATOR)[0]
-        if dirs.include?(basedir)
-            dirs.delete(basedir) 
-            dirs << basedir
-        end
-    end
-
-    failed = nil
-    dirs.each do |d|
-        next if d == dir
-        unless run([d, dir])
-            failed = d
-            break
-        end
-    end
-    puts "%s failed" % failed
-
-    files = ruby_files(failed)
-
-    files.each do |file|
-        unless run([file, dir])
-            puts file
-            exit(0)
-        end
-    end
-
-    exit(1)
-end
-
-def ruby_files(dir)
-    files = []
-    # First collect the entire file list.
-    begin
-        find(dir) { |f| files << f if f =~ /\.rb$/ }
-    rescue => detail
-        puts "could not find on %s: %s" % [dir.inspect, detail]
-    end
-    files
-end
-
-def run(files, flags = nil)
-    args = %w{ruby}
-    args << "-Ilib:../lib"
-    args << "lib/rake/puppet_test_loader.rb"
-    if flags
-        args += flags
-    end
-    args += ARGV
-
-    print files.join(" ") + "... "
-    $stdout.flush
-
-    files.each do |file|
-        case File.stat(file).ftype
-        when "file": args << file
-        when "directory": args += ruby_files(file)
-        else
-            $stderr.puts "Skipping %s; can't handle %s" %
-                [file, File.stat(file).ftype]
-        end
-    end
-    args = args.join(" ")
-    if $options[:verbose]
-        p args
-    end
-    output = %x{#{args} 2>&1}
-    if $options[:debug]
-        print output
-    end
-
-    if $?.exitstatus == 0
-        puts "succeeded"
-        return true
-    else
-        puts "failed"
-        puts output
-        return false
-    end
-end
-
-if $options[:files]
-    run(ARGV, keep)
-else
-    dir = ARGV.shift
-
-    unless dir
-        $stderr.puts usage
-        exit(1)
-    end
-    resolve(dir)
-end
-#
-#
-#files = []
-#
-#args.each do |test|
-#    if FileTest.directory?(test)
-#        files += ruby_files(test)
-#    end
-#end
-
-## Now load all of our files.
-#files.each do |file|
-#    load file unless file =~ /^-/
-#end
-#
-#runner = Test::Unit::AutoRunner.new(false) 
-#runner.process_args
-#runner.run
diff --git a/test/util/autoload.rb b/test/util/autoload.rb
deleted file mode 100755
index de503ab..0000000
--- a/test/util/autoload.rb
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/util/autoload'
-require 'puppettest'
-
-class TestAutoload < Test::Unit::TestCase
-	include PuppetTest
-    @things = []
-    def self.newthing(name)
-        @things << name
-    end
-
-    def self.thing?(name)
-        @things.include? name
-    end
-
-    def self.clear
-        @things.clear
-    end
-
-    def mkfile(name, path)
-        # Now create a file to load
-        File.open(path, "w") do |f|
-            f.puts %{
-TestAutoload.newthing(:#{name.to_s})
-            }
-        end
-    end
-
-    def mk_loader(name)
-        dir = tempfile()
-        $: << dir
-        cleanup do
-            $:.delete(dir)
-        end
-
-        Dir.mkdir(dir)
-
-        rbdir = File.join(dir, name.to_s)
-
-        Dir.mkdir(rbdir)
-
-        loader = nil
-        assert_nothing_raised {
-            loader = Puppet::Util::Autoload.new(self.class, name)
-        }
-        return rbdir, loader
-    end
-
-    def test_load
-        dir, loader = mk_loader(:yayness)
-
-        assert_equal(loader.object_id, Puppet::Util::Autoload[self.class].object_id,
-                    "Did not retrieve loader object by class")
-
-        # Make sure we don't fail on missing files
-        assert_nothing_raised {
-            assert_equal(false, loader.load(:mything),
-                        "got incorrect return on failed load")
-        }
-
-        # Now create a couple of files for testing
-        path = File.join(dir, "mything.rb")
-        mkfile(:mything, path)
-        opath = File.join(dir, "othing.rb")
-        mkfile(:othing, opath)
-
-        # Now try to actually load it.
-        assert_nothing_raised {
-            assert_equal(true, loader.load(:mything),
-                        "got incorrect return on load")
-        }
-
-        assert(loader.loaded?(:mything), "Not considered loaded")
-
-        assert(self.class.thing?(:mything),
-                "Did not get loaded thing")
-
-        self.class.clear
-
-        [:mything, :othing].each do |thing|
-            loader.load(thing)
-            assert(loader.loaded?(thing), "#{thing.to_s} not considered loaded")
-            assert(loader.loaded?("%s.rb" % thing), "#{thing.to_s} not considered loaded with .rb")
-            assert(Puppet::Util::Autoload.loaded?("yayness/%s" % thing), "%s not considered loaded by the main class" % thing)
-            assert(Puppet::Util::Autoload.loaded?("yayness/%s.rb" % thing), "%s not considered loaded by the main class with .rb" % thing)
-
-            assert(self.class.thing?(thing),
-                    "Did not get loaded #{thing.to_s}")
-        end
-    end
-
-    # Make sure that autoload dynamically modifies $: with the libdir as
-    # appropriate.
-    def test_searchpath
-        dir = Puppet[:libdir]
-
-        loader = Puppet::Util::Autoload.new(self, "testing")
-
-        assert(loader.send(:searchpath).include?(dir), "searchpath does not include the libdir")
-    end
-
-    # This tests #1027, which was caused by using the unqualified
-    # path for requires, which was initially done so that the kernel
-    # would keep track of which files got loaded.
-    def test_require_uses_full_path
-        loadname = "testing"
-        loader = Puppet::Util::Autoload.new(self.class, loadname)
-
-        basedir = "/some/dir"
-        dir = File.join(basedir, loadname)
-        loader.expects(:eachdir).yields(dir)
-
-        subname = "instance"
-
-        file = File.join(dir, subname) + ".rb"
-
-        Dir.expects(:glob).with("#{dir}/*.rb").returns(file)
-
-        Kernel.expects(:require).with(file)
-        loader.loadall
-    end
-
-    def test_searchpath_includes_plugin_dirs
-        moddir = "/what/ever"
-        libdir = "/other/dir"
-        Puppet.settings.stubs(:value).with(:modulepath).returns(moddir)
-        Puppet.settings.stubs(:value).with(:libdir).returns(libdir)
-
-        loadname = "testing"
-        loader = Puppet::Util::Autoload.new(self.class, loadname)
-
-        # Currently, include both plugins and libs.
-        paths = %w{plugins lib}.inject({}) { |hash, d| hash[d] = File.join(moddir, "testing", d); FileTest.stubs(:directory?).with(hash[d]).returns(true); hash  }
-        Dir.expects(:glob).with("#{moddir}/*/{plugins,lib}").returns(paths.values)
-
-        searchpath = loader.searchpath
-        paths.each do |dir, path|
-            assert(searchpath.include?(path), "search path did not include path for %s" % dir)
-        end
-    end
-end
diff --git a/test/util/classgen.rb b/test/util/classgen.rb
deleted file mode 100755
index 2490806..0000000
--- a/test/util/classgen.rb
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-
-class TestPuppetUtilClassGen < Test::Unit::TestCase
-    include PuppetTest
-
-    class FakeBase
-        class << self
-            attr_accessor :name
-        end
-    end
-
-    class GenTest
-        class << self
-            include Puppet::Util::ClassGen
-        end
-    end
-
-    def testclasses(name)
-        sub = Class.new(GenTest) do @name = "base#{name.to_s}" end
-        self.class.const_set("Base#{name.to_s}", sub)
-
-        klass = Class.new(FakeBase) do @name = "gen#{name.to_s}"end
-
-        return sub, klass
-    end
-
-    def test_handleclassconst
-        sub, klass = testclasses("const")
-        const = nil
-        assert_nothing_raised do
-            const = sub.send(:handleclassconst, klass, klass.name, {})
-        end
-
-        # make sure the constant is set
-        assert(defined?(Baseconst::Genconst), "const was not defined")
-        assert_equal(Baseconst::Genconst.object_id, klass.object_id)
-
-        # Now make sure don't replace by default
-        newklass = Class.new(FakeBase) do @name = klass.name end
-        assert_raise(Puppet::ConstantAlreadyDefined) do
-            const = sub.send(:handleclassconst, newklass, klass.name, {})
-        end
-        assert_equal(Baseconst::Genconst.object_id, klass.object_id)
-
-        # Now make sure we can replace it
-        assert_nothing_raised do
-            const = sub.send(:handleclassconst, newklass, klass.name, :overwrite => true)
-        end
-        assert_equal(Baseconst::Genconst.object_id, newklass.object_id)
-
-        # Now make sure we can choose our own constant
-        assert_nothing_raised do
-            const = sub.send(:handleclassconst, newklass, klass.name,
-                :constant => "Fooness")
-        end
-        assert(defined?(Baseconst::Fooness), "Specified constant was not defined")
-
-        # And make sure prefixes work
-        assert_nothing_raised do
-            const = sub.send(:handleclassconst, newklass, klass.name,
-                :prefix => "Test")
-        end
-        assert(defined?(Baseconst::TestGenconst), "prefix was not used")
-    end
-
-    def test_initclass_preinit
-        sub, klass = testclasses("preinit")
-
-        class << klass
-            attr_accessor :set
-            def preinit
-                @set = true
-            end
-        end
-
-        assert(!klass.set, "Class was already initialized")
-
-        assert_nothing_raised do sub.send(:initclass, klass, {}) end
-
-        assert(klass.set, "Class was not initialized")
-    end
-
-    def test_initclass_initvars
-        sub, klass = testclasses("initvars")
-
-        class << klass
-            attr_accessor :set
-            def initvars
-                @set = true
-            end
-        end
-
-        assert(!klass.set, "Class was already initialized")
-
-        assert_nothing_raised do sub.send(:initclass, klass, {}) end
-
-        assert(klass.set, "Class was not initialized")
-    end
-
-    def test_initclass_attributes
-        sub, klass = testclasses("attributes")
-
-        class << klass
-            attr_accessor :one, :two, :three
-        end
-
-        assert(!klass.one, "'one' was already set")
-
-        assert_nothing_raised do sub.send(:initclass, klass,
-            :attributes => {:one => :a, :two => :b}) end
-
-        assert_equal(:a, klass.one, "Class was initialized incorrectly")
-        assert_equal(:b, klass.two, "Class was initialized incorrectly")
-        assert_nil(klass.three, "Class was initialized incorrectly")
-    end
-
-    def test_initclass_include_and_extend
-        sub, klass = testclasses("include_and_extend")
-
-        incl = Module.new do
-            attr_accessor :included
-        end
-        self.class.const_set("Incl", incl)
-
-        ext = Module.new do
-            attr_accessor :extended
-        end
-        self.class.const_set("Ext", ext)
-
-        assert(! klass.respond_to?(:extended), "Class already responds to extended")
-        assert(! klass.new.respond_to?(:included), "Class already responds to included")
-
-        assert_nothing_raised do sub.send(:initclass, klass,
-            :include => incl, :extend => ext)
-        end
-
-        assert(klass.respond_to?(:extended), "Class did not get extended")
-        assert(klass.new.respond_to?(:included), "Class did not include")
-    end
-
-    def test_genclass
-        hash = {}
-        array = []
-
-        name = "yayness"
-        klass = nil
-        assert_nothing_raised {
-            klass = GenTest.genclass(name, :array => array,
-                :hash => hash, :parent => FakeBase) do
-                    class << self
-                        attr_accessor :name
-                    end
-            end
-        }
-
-        assert(klass.respond_to?(:name=), "Class did not execute block")
-
-        assert(hash.include?(klass.name),
-            "Class did not get added to hash")
-        assert(array.include?(klass),
-            "Class did not get added to array")
-        assert_equal(klass.superclass, FakeBase, "Parent class was wrong")
-    end
-
-    # Make sure we call a preinithook, if there is one.
-    def test_inithooks
-        newclass = Class.new(FakeBase) do
-            class << self
-                attr_accessor :preinited, :postinited
-            end
-            def self.preinit
-                self.preinited = true
-            end
-            def self.postinit
-                self.postinited = true
-            end
-        end
-
-        klass = nil
-        assert_nothing_raised {
-            klass = GenTest.genclass(:funtest, :parent => newclass)
-        }
-
-        assert(klass.preinited, "prehook did not get called")
-        assert(klass.postinited, "posthook did not get called")
-    end
-
-    def test_modulegen
-        hash = {}
-        array = []
-
-        name = "modness"
-        mod = nil
-        assert_nothing_raised {
-            mod = GenTest.genmodule(name, :array => array, :hash => hash) do
-                class << self
-                    attr_accessor :yaytest
-                end
-
-                @yaytest = true
-            end
-        }
-
-        assert(mod.respond_to?(:yaytest), "Class did not execute block")
-
-        assert_instance_of(Module, mod)
-        assert(hash.include?(mod.name),
-            "Class did not get added to hash")
-        assert(array.include?(mod),
-            "Class did not get added to array")
-    end
-
-    def test_genconst_string
-        const = nil
-        assert_nothing_raised do
-            const = GenTest.send(:genconst_string, :testing, :prefix => "Yayness")
-        end
-        assert_equal("YaynessTesting", const)
-    end
-end
-
diff --git a/test/util/execution.rb b/test/util/execution.rb
deleted file mode 100755
index be85d65..0000000
--- a/test/util/execution.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-
-class TestPuppetUtilExecution < Test::Unit::TestCase
-    include PuppetTest
-
-    def test_withenv
-        ENV["testing"] = "yay"
-
-        assert_nothing_raised do
-            Puppet::Util::Execution.withenv :testing => "foo" do
-                $ran = ENV["testing"]
-            end
-        end
-
-        assert_equal("yay", ENV["testing"])
-        assert_equal("foo", $ran)
-
-        ENV["rah"] = "yay"
-        assert_raise(ArgumentError) do
-            Puppet::Util::Execution.withenv :testing => "foo" do
-                raise ArgumentError, "yay"
-            end
-        end
-
-        assert_equal("yay", ENV["rah"])
-    end
-end
-
diff --git a/test/util/features.rb b/test/util/features.rb
deleted file mode 100755
index e20c73c..0000000
--- a/test/util/features.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Luke Kanies on 2006-11-07.
-#  Copyright (c) 2006. All rights reserved.
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/util/feature'
-
-class TestFeatures < Test::Unit::TestCase
-	include PuppetTest
-	
-	def setup
-	    super
-	    @libdir = tempfile()
-        Puppet[:libdir] = @libdir
-        @path = File.join(@libdir, "features")
-	    @features = Puppet::Util::Feature.new("features")
-    end
-	
-	def test_new
-        redirect
-	    assert_nothing_raised do
-	        @features.add(:failer) do
-	            raise ArgumentError, "nopes"
-            end
-        end
-        
-        assert(@features.respond_to?(:failer?), "Feature method did not get added")
-        assert_nothing_raised("failure propagated outside of feature") do
-            assert(! @features.failer?, "failure was considered true")
-        end
-        
-        # Now make one that succeeds
-        $succeeds = nil
-        assert_nothing_raised("Failed to add normal feature") do
-            @features.add(:succeeds) do
-                $succeeds = true
-            end
-        end
-        assert($succeeds, "Block was not called on initialization")
-        
-        assert(@features.respond_to?(:succeeds?), "Did not add succeeding feature")
-        assert_nothing_raised("Failed to call succeeds") { assert(@features.succeeds?, "Feature was not true") }
-    end
-    
-    def test_libs
-        assert_nothing_raised do
-            @features.add(:puppet, :libs => %w{puppet})
-        end
-        
-        assert(@features.puppet?)
-        
-        assert_nothing_raised do
-            @features.add(:missing, :libs => %w{puppet no/such/library/okay})
-        end
-        
-        assert(! @features.missing?, "Missing lib was considered true")
-    end
-
-    def test_dynamic_loading
-        # Make sure it defaults to false
-        assert_nothing_raised("Undefined features throw an exception") do
-            assert(! @features.nosuchfeature?, "missing feature returned true")
-        end
-
-        $features = @features
-        cleanup { $features = nil }
-        # Now create a feature and make sure it loads.
-        FileUtils.mkdir_p(@path)
-        nope = File.join(@path, "nope.rb")
-        File.open(nope, "w") { |f|
-            f.puts "$features.add(:nope, :libs => %w{nosuchlib})"
-        }
-        assert_nothing_raised("Failed to autoload features") do
-            assert(! @features.nope?, "'nope' returned true")
-        end
-
-        # First make sure "yep?" returns false
-        assert_nothing_raised("Missing feature threw an exception") do
-            assert(! @features.yep?, "'yep' returned true before definition")
-        end
-
-        yep = File.join(@path, "yep.rb")
-        File.open(yep, "w") { |f|
-            f.puts "$features.add(:yep, :libs => %w{puppet})"
-        }
-
-        # Now make sure the value is not cached or anything.
-        assert_nothing_raised("Failed to autoload features") do
-            assert(@features.yep?, "'yep' returned false")
-        end
-    end
-end
diff --git a/test/util/fileparsing.rb b/test/util/fileparsing.rb
deleted file mode 100755
index adccfab..0000000
--- a/test/util/fileparsing.rb
+++ /dev/null
@@ -1,685 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppettest/fileparsing'
-require 'puppet'
-require 'puppet/util/fileparsing'
-
-class TestUtilFileParsing < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::FileParsing
-
-    class FParser
-        include Puppet::Util::FileParsing
-    end
-
-    def setup
-        super
-        @parser = FParser.new
-    end
-
-    def test_lines
-        assert_equal("\n", @parser.line_separator,
-            "Default separator was incorrect")
-
-        {"\n" => ["one two\nthree four", "one two\nthree four\n"],
-         "\t" => ["one two\tthree four", "one two\tthree four\t"],
-        }.each do |sep, tests|
-            assert_nothing_raised do
-                @parser.line_separator = sep
-            end
-            assert_equal(sep, @parser.line_separator,
-                "Did not set separator")
-
-            tests.each do |test|
-                assert_equal(["one two", "three four"], @parser.lines(test),
-                    "Incorrectly parsed %s" % test.inspect)
-            end
-        end
-    end
-
-    # Make sure parse calls the appropriate methods or errors out
-    def test_parse
-        @parser.meta_def(:parse_line) do |line|
-            line.split(/\s+/)
-        end
-
-        text = "one line\ntwo line"
-        should = [%w{one line}, %w{two line}]
-        ret = nil
-        assert_nothing_raised do
-            ret = @parser.parse(text)
-        end
-
-        assert_equal(should, ret)
-    end
-
-    # Make sure we correctly handle different kinds of text lines.
-    def test_text_line
-        comment = "# this is a comment"
-
-        # Make sure it fails if no regex is passed
-        assert_raise(ArgumentError) do
-            @parser.text_line :comment
-        end
-
-        # define a text matching comment record
-        assert_nothing_raised do
-            @parser.text_line :comment, :match => /^#/
-        end
-
-        # Make sure it matches
-        assert_nothing_raised do
-            assert_equal({:record_type => :comment, :line => comment}, 
-                 @parser.parse_line(comment))
-        end
-
-        # But not something else
-        assert_nothing_raised do
-            assert_nil(@parser.parse_line("some other text"))
-        end
-
-        # Now define another type and make sure we get the right one back
-        assert_nothing_raised do
-            @parser.text_line :blank, :match => /^\s*$/
-        end
-
-        # The comment should still match
-        assert_nothing_raised do
-            assert_equal({:record_type => :comment, :line => comment}, 
-                 @parser.parse_line(comment))
-        end
-
-        # As should our new line type
-        assert_nothing_raised do
-            assert_equal({:record_type => :blank, :line => ""}, 
-                 @parser.parse_line(""))
-        end
-
-    end
-
-    def test_parse_line
-        Puppet[:trace] = false
-
-        comment = "# this is a comment"
-
-        # Make sure it fails if we don't have any record types defined
-        assert_raise(Puppet::DevError) do
-            @parser.parse_line(comment)
-        end
-
-        # Now define a text matching comment record
-        assert_nothing_raised do
-            @parser.text_line :comment, :match => /^#/
-        end
-
-        # And make sure we can't define another one with the same name
-        assert_raise(ArgumentError) do
-            @parser.text_line :comment, :match => /^"/
-        end
-
-        result = nil
-        assert_nothing_raised("Did not parse text line") do
-            result = @parser.parse_line comment
-        end
-
-        assert_equal({:record_type => :comment, :line => comment}, result)
-
-        # Make sure we just return nil on unmatched lines.
-        assert_nothing_raised("Did not parse text line") do
-            result = @parser.parse_line "No match for this"
-        end
-
-        assert_nil(result, "Somehow matched an empty line")
-
-        # Now define another type of comment, and make sure both types get
-        # correctly returned as comments
-        assert_nothing_raised do
-            @parser.text_line :comment2, :match => /^"/
-        end
-
-        assert_nothing_raised("Did not parse old comment") do
-            assert_equal({:record_type => :comment, :line => comment}, 
-                 @parser.parse_line(comment))
-        end
-        comment = '" another type of comment'
-        assert_nothing_raised("Did not parse new comment") do
-            assert_equal({:record_type => :comment2, :line => comment}, 
-                 @parser.parse_line(comment))
-        end
-
-        # Now define two overlapping record types and make sure we keep the
-        # correct order.  We do first match, not longest match.
-        assert_nothing_raised do
-            @parser.text_line :one, :match => /^y/
-            @parser.text_line :two, :match => /^yay/
-        end
-
-        assert_nothing_raised do
-            assert_equal({:record_type => :one, :line => "yayness"},
-                @parser.parse_line("yayness"))
-        end
-
-    end
-
-    def test_record_line
-        tabrecord = "tab	separated	content"
-        spacerecord = "space separated content"
-
-        # Make sure we always require an appropriate set of options
-        [{:separator => "\t"}, {}, {:fields => %w{record_type}}].each do |opts|
-            assert_raise(ArgumentError, "Accepted %s" % opts.inspect) do
-                @parser.record_line :record, opts
-            end
-        end
-
-        # Verify that our default separator is tabs
-        tabs = nil
-        assert_nothing_raised do
-            tabs = @parser.record_line :tabs, :fields => [:name, :first, :second]
-        end
-
-        # Make sure out tab line gets matched
-        tabshould = {:record_type => :tabs, :name => "tab", :first => "separated",
-                            :second => "content"}
-        assert_nothing_raised do
-            assert_equal(tabshould, @parser.handle_record_line(tabrecord, tabs))
-        end
-
-        # Now add our space-separated record type
-        spaces = nil
-        assert_nothing_raised do
-            spaces = @parser.record_line :spaces, :fields => [:name, :first, :second]
-        end
-
-        # Now make sure both lines parse correctly
-        spaceshould = {:record_type => :spaces, :name => "space",
-            :first => "separated", :second => "content"}
-
-        assert_nothing_raised do
-            assert_equal(tabshould, @parser.handle_record_line(tabrecord, tabs))
-            assert_equal(spaceshould, @parser.handle_record_line(spacerecord, spaces))
-        end
-    end
-
-    def test_to_line
-        @parser.text_line :comment, :match => /^#/
-        @parser.text_line :blank, :match => /^\s*$/
-        @parser.record_line :record, :fields => %w{name one two}, :joiner => "\t"
-
-        johnny = {:record_type => :record, :name => "johnny", :one => "home",
-            :two => "yay"}
-        bill = {:record_type => :record, :name => "bill", :one => "work",
-            :two => "boo"}
-
-        records = {
-            :comment => {:record_type => :comment, :line => "# This is a file"},
-            :blank => {:record_type => :blank, :line => ""},
-            :johnny => johnny,
-            :bill => bill
-        }
-
-        lines = {
-            :comment => "# This is a file",
-            :blank => "",
-            :johnny => "johnny	home	yay",
-            :bill => "bill	work	boo"
-        }
-
-        records.each do |name, details|
-            result = nil
-            assert_nothing_raised do
-                result = @parser.to_line(details)
-            end
-
-            assert_equal(lines[name], result)
-        end
-        order = [:comment, :blank, :johnny, :bill]
-
-        file = order.collect { |name| lines[name] }.join("\n")
-
-        ordered_records = order.collect { |name| records[name] }
-
-        # Make sure we default to a trailing separator
-        assert_equal(true, @parser.trailing_separator,
-            "Did not default to a trailing separtor")
-
-        # Start without a trailing separator
-        @parser.trailing_separator = false
-        assert_nothing_raised do
-            assert_equal(file, @parser.to_file(ordered_records))
-        end
-
-        # Now with a trailing separator
-        file += "\n"
-        @parser.trailing_separator = true
-        assert_nothing_raised do
-            assert_equal(file, @parser.to_file(ordered_records))
-        end
-
-        # Now try it with a different separator, so we're not just catching
-        # defaults
-        file.gsub!("\n", "\t")
-        @parser.line_separator = "\t"
-        assert_nothing_raised do
-            assert_equal(file, @parser.to_file(ordered_records))
-        end
-    end
-
-    # Make sure fields that are marked absent get replaced with the appropriate
-    # string.
-    def test_absent_fields
-        record = nil
-        assert_nothing_raised do
-            record = @parser.record_line :record, :fields => %w{one two three},
-                :optional => %w{two three}
-        end
-        assert_equal("", record.absent, "Did not set a default absent string")
-
-        result = nil
-        assert_nothing_raised do
-            result = @parser.to_line(:record_type => :record,
-                :one => "a", :two => :absent, :three => "b")
-        end
-
-        assert_equal("a  b", result, "Absent was not correctly replaced")
-
-        # Now try using a different replacement character
-        record.absent = "*" # Because cron is a pain in my ass
-        assert_nothing_raised do
-            result = @parser.to_line(:record_type => :record,
-                :one => "a", :two => :absent, :three => "b")
-        end
-
-        assert_equal("a * b", result, "Absent was not correctly replaced")
-
-        # Make sure we deal correctly with the string 'absent'
-        assert_nothing_raised do
-            result = @parser.to_line(:record_type => :record,
-                :one => "a", :two => "b", :three => 'absent')
-        end
-
-        assert_equal("a b absent", result, "Replaced string 'absent'")
-
-        # And, of course, make sure we can swap things around.
-        assert_nothing_raised do
-            result = @parser.to_line(:record_type => :record,
-                :one => "a", :two => "b", :three => :absent)
-        end
-
-        assert_equal("a b *", result, "Absent was not correctly replaced")
-    end
-
-    # Make sure we can specify a different join character than split character
-    def test_split_join_record_line
-        check = proc do |start, record, final|
-            # Check parsing first
-            result = @parser.parse_line(start)
-            [:one, :two].each do |param|
-                assert_equal(record[param], result[param], 
-                    "Did not correctly parse %s" % start.inspect)
-            end
-
-            # And generating
-            assert_equal(final, @parser.to_line(result),
-                "Did not correctly generate %s from %s" %
-                [final.inspect, record.inspect])
-        end
-
-        # First try it with symmetric characters
-        @parser.record_line :symmetric, :fields => %w{one two},
-            :separator => " "
-
-        check.call "a b", {:one => "a", :two => "b"}, "a b"
-        @parser.clear_records
-
-        # Now assymetric but both strings
-        @parser.record_line :asymmetric, :fields => %w{one two},
-            :separator => "\t", :joiner => " "
-
-        check.call "a\tb", {:one => "a", :two => "b"}, "a b"
-        @parser.clear_records
-
-        # And assymmetric with a regex
-        @parser.record_line :asymmetric2, :fields => %w{one two},
-            :separator => /\s+/, :joiner => " "
-
-        check.call "a\tb", {:one => "a", :two => "b"}, "a b"
-        check.call "a b", {:one => "a", :two => "b"}, "a b"
-    end
-
-    # Make sure we correctly regenerate files.
-    def test_to_file
-        @parser.text_line :comment, :match => /^#/
-        @parser.text_line :blank, :match => /^\s*$/
-        @parser.record_line :record, :fields => %w{name one two}
-
-        text = "# This is a comment
-
-johnny one two
-billy three four\n"
-
-        # Just parse and generate, to make sure it's isomorphic.
-        assert_nothing_raised do
-            assert_equal(text, @parser.to_file(@parser.parse(text)),
-                "parsing was not isomorphic")
-        end
-    end
-
-    def test_valid_attrs
-        @parser.record_line :record, :fields => %w{one two three}
-
-        assert(@parser.valid_attr?(:record, :one),
-            "one was considered invalid")
-
-        assert(@parser.valid_attr?(:record, :ensure),
-            "ensure was considered invalid")
-
-        assert(! @parser.valid_attr?(:record, :four),
-            "four was considered valid")
-    end
-
-    def test_record_blocks
-        options = nil
-        assert_nothing_raised do
-            # Just do a simple test
-            options = @parser.record_line :record,
-                :fields => %w{name alias info} do |line|
-                line = line.dup
-                ret = {}
-                if line.sub!(/(\w+)\s*/, '')
-                    ret[:name] = $1
-                else
-                    return nil
-                end
-
-                if line.sub!(/(#.+)/, '')
-                    desc = $1.sub(/^#\s*/, '')
-                    ret[:description] = desc unless desc == ""
-                end
-
-                if line != ""
-                    ret[:alias] = line.split(/\s+/)
-                end
-
-                return ret
-            end
-        end
-
-        values = {
-            :name => "tcpmux",
-            :description => "TCP port service multiplexer",
-            :alias => ["sink"]
-        }
-
-        {
-
-            "tcpmux      " => [:name],
-            "tcpmux" => [:name],
-            "tcpmux      sink" => [:name, :port, :protocols, :alias],
-            "tcpmux      # TCP port service multiplexer" =>
-                [:name, :description, :port, :protocols],
-            "tcpmux      sink         # TCP port service multiplexer" =>
-                [:name, :description, :port, :alias, :protocols],
-            "tcpmux      sink null    # TCP port service multiplexer" =>
-                [:name, :description, :port, :alias, :protocols],
-        }.each do |line, should|
-            result = nil
-            assert_nothing_raised do
-                result = @parser.handle_record_line(line, options)
-            end
-            assert(result, "Did not get a result back for '%s'" % line)
-            should.each do |field|
-                if field == :alias and line =~ /null/
-                    assert_equal(%w{sink null}, result[field],
-                        "Field %s was not right in '%s'" % [field, line])
-                else
-                    assert_equal(values[field], result[field],
-                        "Field %s was not right in '%s'" % [field, line])
-                end
-            end
-        end
-
-
-    end
-
-    # Make sure we correctly handle optional fields.  We'll skip this
-    # functionality until we really know we need it.
-    def test_optional_fields
-        assert_nothing_raised do
-            @parser.record_line :record,
-                :fields => %w{one two three four},
-                :optional => %w{three four},
-                :absent => "*",
-                :separator => " " # A single space
-        end
-
-        { "a b c d" => [],
-          "a b * d" => [:three],
-          "a b * *" => [:three, :four],
-          "a b c *" => [:four]
-        }.each do |line, absentees|
-            record = nil
-            assert_nothing_raised do
-                record = @parser.parse_line(line)
-            end
-
-            # Absent field is :absent, not "*" inside the record
-            absentees.each do |absentee|
-                assert_equal(:absent, record[absentee])
-            end
-
-            # Now regenerate the line
-            newline = nil
-            assert_nothing_raised do
-                newline = @parser.to_line(record)
-            end
-
-            # And make sure they're equal
-            assert_equal(line, newline)
-        end
-
-        # Now make sure it pukes if we don't provide the required fields
-        assert_raise(ArgumentError) do
-            @parser.to_line(:record_type => :record, :one => "yay")
-        end
-    end
-
-    def test_record_rts
-        # Start with the default
-        assert_nothing_raised do
-            @parser.record_line :record,
-                :fields => %w{one two three four},
-                :optional => %w{three four}
-        end
-
-        assert_equal("a b  ",
-            @parser.to_line(:record_type => :record, :one => "a", :two => "b")
-        )
-
-        # Now say yes to removing
-        @parser.clear_records
-        assert_nothing_raised do
-            @parser.record_line :record,
-                :fields => %w{one two three four},
-                :optional => %w{three four},
-                :rts => true
-        end
-
-        assert_equal("a b",
-            @parser.to_line(:record_type => :record, :one => "a", :two => "b")
-        )
-
-        # Lastly, try a regex
-        @parser.clear_records
-        assert_nothing_raised do
-            @parser.record_line :record,
-                :fields => %w{one two three four},
-                :optional => %w{three four},
-                :absent => "*",
-                :rts => /[ *]+$/
-        end
-
-        assert_equal("a b",
-            @parser.to_line(:record_type => :record, :one => "a", :two => "b")
-        )
-    end
-
-    # Make sure the last field can contain the separator, as crontabs do, and
-    # that we roll them all up by default.
-    def test_field_rollups
-        @parser.record_line :yes, :fields => %w{name one two}
-
-        result = nil
-        assert_nothing_raised do
-            result = @parser.send(:parse_line, "Name One Two Three")
-        end
-        assert_equal("Two Three", result[:two],
-            "Did not roll up last fields by default")
-
-        @parser = FParser.new
-        assert_nothing_raised("Could not create record that rolls up fields") do
-            @parser.record_line :no, :fields => %w{name one two}, :rollup => false
-        end
-
-        result = nil
-        assert_nothing_raised do
-            result = @parser.send(:parse_line, "Name One Two Three")
-        end
-        assert_equal("Two", result[:two],
-            "Rolled up last fields when rollup => false")
-    end
-
-    def test_text_blocks
-        record = nil
-        assert_nothing_raised do
-            record = @parser.text_line :name, :match => %r{^#} do |line|
-                {:line => line.upcase}
-            end
-        end
-
-        assert(record.respond_to?(:process),
-            "Block was not used with text line")
-
-        assert_equal("YAYNESS", record.process("yayness")[:line],
-            "Did not call process method")
-    end
-
-    def test_hooks
-        record = nil
-        # First try it with a normal record
-        assert_nothing_raised("Could not set hooks") do
-            record = @parser.record_line :yay, :fields => %w{one two},
-                :post_parse => proc { |hash| hash[:posted] = true },
-                :pre_gen => proc { |hash| hash[:one] = hash[:one].upcase },
-                :to_line => proc { |hash| "# Line\n" + join(hash) }
-        end
-
-        assert(record.respond_to?(:post_parse), "did not create method for post-hook")
-        assert(record.respond_to?(:pre_gen), "did not create method for pre-hook")
-
-        result = nil
-        assert_nothing_raised("Could not process line with hooks") do
-            result = @parser.parse_line("one two")
-        end
-
-        assert(result[:posted], "Did not run post-hook")
-        old_result = result
-
-        # Now make sure our pre-gen hook is called
-        assert_nothing_raised("Could not generate line with hooks") do
-            result = @parser.to_line(result)
-        end
-        assert_equal("# Line\nONE two", result, "did not call pre-gen hook")
-        assert_equal("one", old_result[:one], "passed original hash to pre hook")
-    end
-end
-
-class TestUtilFileRecord < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::FileParsing
-
-    Record = Puppet::Util::FileParsing::FileRecord
-    def test_new_filerecord
-        [   [:fake, {}],
-            [nil, ]
-        ].each do |args|
-            assert_raise(ArgumentError, "Did not fail on %s" % args.inspect) do
-                Record.new(*args)
-            end
-        end
-
-        # Make sure the fields get turned into symbols
-        record = nil
-        assert_nothing_raised do
-            record = Record.new(:record, :fields => %w{one two})
-        end
-        assert_equal([:one, :two], record.fields,
-            "Did not symbolize fields")
-
-        # Make sure we fail on invalid fields
-        [:record_type, :target, :on_disk].each do |field|
-            assert_raise(ArgumentError, "Did not fail on invalid field %s" % field) {
-                Record.new(:record, :fields => [field])
-            }
-        end
-    end
-
-    def test_defaults
-        record = Record.new(:text, :match => %r{^#})
-        [:absent, :separator, :joiner, :optional].each do |field|
-            assert_nil(record.send(field), "%s was not nil" % field)
-        end
-
-        record = Record.new(:record, :fields => %w{fields})
-        {:absent => "", :separator => /\s+/, :joiner => " ",
-            :optional => []}.each do |field, default|
-                assert_equal(default, record.send(field), "%s was not default" % field)
-        end
-    end
-
-    def test_block
-        record = nil
-        assert_nothing_raised("Could not pass a block when creating record") do
-            record = Record.new(:record, :fields => %w{one}) do |line|
-                return line.upcase
-            end
-        end
-
-        line = "This is a line"
-
-        assert(record.respond_to?(:process),
-            "Record did not define :process method")
-
-        assert_equal(line.upcase, record.process(line),
-            "Record did not process line correctly")
-    end
-
-    # Make sure we can declare that we want the block to be instance-eval'ed instead of
-    # defining the 'process' method.
-    def test_instance_block
-        record = nil
-        assert_nothing_raised("Could not pass a block when creating record") do
-            record = Record.new(:record, :block_eval => :instance, :fields => %w{one}) do
-                def process(line)
-                    line.upcase
-                end
-
-                def to_line(details)
-                    details.upcase
-                end
-            end
-        end
-
-        assert(record.respond_to?(:process), "Block was not instance-eval'ed and process was not defined")
-        assert(record.respond_to?(:to_line), "Block was not instance-eval'ed and to_line was not defined")
-
-        line = "some text"
-        assert_equal(line.upcase, record.process(line), "Instance-eval'ed record did not call :process correctly")
-        assert_equal(line.upcase, record.to_line(line), "Instance-eval'ed record did not call :to_line correctly")
-    end
-end
-
-
diff --git a/test/util/filetype.rb b/test/util/filetype.rb
deleted file mode 100755
index 6c7ede0..0000000
--- a/test/util/filetype.rb
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/util/filetype'
-require 'mocha'
-
-class TestFileType < Test::Unit::TestCase
-	include PuppetTest
-
-    def test_flat
-        obj = nil
-        path = tempfile()
-        type = nil
-
-        assert_nothing_raised {
-            type = Puppet::Util::FileType.filetype(:flat)
-        }
-
-        assert(type, "Could not retrieve flat filetype")
-
-        assert_nothing_raised {
-            obj = type.new(path)
-        }
-
-        text = "This is some text\n"
-
-        newtext = nil
-        assert_nothing_raised {
-            newtext = obj.read
-        }
-
-        # The base class doesn't allow a return of nil
-        assert_equal("", newtext, "Somehow got some text")
-
-        assert_nothing_raised {
-            obj.write(text)
-        }
-        assert_nothing_raised {
-            newtext = obj.read
-        }
-
-        assert_equal(text, newtext, "Text was changed somehow")
-
-        File.open(path, "w") { |f| f.puts "someyayness" }
-
-        text = File.read(path)
-        assert_nothing_raised {
-            newtext = obj.read
-        }
-
-        assert_equal(text, newtext, "Text was changed somehow")
-    end
-
-    # Make sure that modified files are backed up before they're changed.
-    def test_backup_is_called
-        path = tempfile
-        File.open(path, "w") { |f| f.print 'yay' }
-
-        obj = Puppet::Util::FileType.filetype(:flat).new(path)
-
-        obj.expects(:backup)
-
-        obj.write("something")
-
-        assert_equal("something", File.read(path), "File did not get changed")
-    end
-
-    def test_backup
-        path = tempfile
-        type = Puppet::Type.type(:filebucket)
-
-        obj = Puppet::Util::FileType.filetype(:flat).new(path)
-
-        # First try it when the file does not yet exist.
-        assert_nothing_raised("Could not call backup when file does not exist") do
-            obj.backup
-        end
-
-        # Then create the file
-        File.open(path, "w") { |f| f.print 'one' }
-
-        # Then try it with no filebucket objects
-        assert_nothing_raised("Could not call backup with no buckets") do
-            obj.backup
-        end
-        puppet = type["puppet"]
-        assert(puppet, "Did not create default filebucket")
-
-        assert_equal("one", puppet.bucket.getfile(Digest::MD5.hexdigest(File.read(path))), "Could not get file from backup")
-
-        # Try it again when the default already exists
-        File.open(path, "w") { |f| f.print 'two' }
-        assert_nothing_raised("Could not call backup with no buckets") do
-            obj.backup
-        end
-
-        assert_equal("two", puppet.bucket.getfile(Digest::MD5.hexdigest(File.read(path))), "Could not get file from backup")
-    end
-
-    if Facter["operatingsystem"].value == "Darwin"
-    def test_ninfotoarray
-        obj = nil
-        type = nil
-
-        assert_nothing_raised {
-            type = Puppet::Util::FileType.filetype(:netinfo)
-        }
-
-        assert(type, "Could not retrieve netinfo filetype")
-        %w{users groups aliases}.each do |map|
-            assert_nothing_raised {
-                obj = type.new(map)
-            }
-
-            assert_nothing_raised("could not read map %s" % map) {
-                obj.read
-            }
-
-            array = nil
-
-            assert_nothing_raised("Failed to parse %s map" % map) {
-                array = obj.to_array
-            }
-
-            assert_instance_of(Array, array)
-
-            array.each do |record|
-                assert_instance_of(Hash, record)
-                assert(record.length != 0)
-            end
-        end
-    end
-    end
-end
-
diff --git a/test/util/inifile.rb b/test/util/inifile.rb
deleted file mode 100755
index 498816b..0000000
--- a/test/util/inifile.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/util/inifile'
-require 'puppettest'
-
-class TestFileType < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @file = Puppet::Util::IniConfig::File.new
-    end
-    
-    def teardown
-        @file = nil
-        super
-    end
-
-    def test_simple
-        fname = mkfile("[main]\nkey1=value1\n# Comment\nkey2=value=2")
-        assert_nothing_raised {
-            @file.read(fname)
-        }
-        s = get_section('main')
-        assert_entries(s, { 'key1' => 'value1', 'key2' => 'value=2' })
-        @file['main']['key2'] = 'newvalue2'
-        @file['main']['key3'] = 'newvalue3'
-        text = s.format
-        assert_equal("[main]\nkey1=value1\n# Comment\nkey2=newvalue2\nkey3=newvalue3\n",
-                     s.format)
-    end
-
-    def test_multi
-        fmain = mkfile("[main]\nkey1=main.value1\n# Comment\nkey2=main.value2")
-        fsub = mkfile("[sub1]\nkey1=sub1 value1\n\n" +
-                        "[sub2]\nkey1=sub2.value1")
-        main_mtime = File::stat(fmain).mtime
-        assert_nothing_raised {
-            @file.read(fmain)
-            @file.read(fsub)
-        }
-        main = get_section('main')
-        assert_entries(main, 
-                       { 'key1' => 'main.value1', 'key2' => 'main.value2' })
-        sub1 = get_section('sub1')
-        assert_entries(sub1, { 'key1' => 'sub1 value1' })
-        sub2 = get_section('sub2')
-        assert_entries(sub2, { 'key1' => 'sub2.value1' })
-        [main, sub1, sub2].each { |s| assert( !s.dirty? ) }
-        sub1['key1'] = 'sub1 newvalue1'
-        sub2['key2'] = 'sub2 newvalue2'
-        assert(! main.dirty?)
-        [sub1, sub2].each { |s| assert( s.dirty? ) }
-        @file.store
-        [main, sub1, sub2].each { |s| assert( !s.dirty? ) }
-        assert( File.exists?(fmain) )
-        assert( File.exists?(fsub) )
-        assert_equal(main_mtime, File::stat(fmain).mtime)
-        subtext = File.read(fsub)
-        assert_equal("[sub1]\nkey1=sub1 newvalue1\n\n" +
-                     "[sub2]\nkey1=sub2.value1\nkey2=sub2 newvalue2\n",
-                     subtext)
-    end
-
-    def test_format_nil
-        fname = mkfile("[main]\nkey1=value1\n# Comment\nkey2=value2\n" +
-                       "# Comment2\n")
-        assert_nothing_raised {
-            @file.read(fname)
-        }
-        s = get_section('main')
-        s['key2'] = nil
-        s['key3'] = nil
-        text = s.format
-        assert_equal("[main]\nkey1=value1\n# Comment\n# Comment2\n",
-                     s.format)
-    end
-
-    def test_whitespace
-        # FIXME: Should we really accept keys preceded by whitespace ?
-        fname = mkfile("[main]\n  key1=v1\nkey2  =v2\n")
-        assert_nothing_raised {
-            @file.read(fname)
-        }
-        s = get_section('main')
-        assert_equal('v1', s['key1'])
-        assert_equal('v2', s['key2'])
-        # FIXME: We are losing whitespace around keys
-        assert_equal("[main]\nkey1=v1\nkey2=v2\n", s.format)
-    end
-
-    def test_continuation
-        cont = "[main]\nkey1=v1\nkey2=v2a\n v2b\nkey3=\n\tv3a\n v3b\n"
-        fname = mkfile(cont)
-        assert_nothing_raised {
-            @file.read(fname)
-        }
-        s = get_section('main')
-        assert_equal('v1', s['key1'])
-        assert_equal("v2a\n v2b", s['key2'])
-        assert_equal("\n\tv3a\n v3b", s['key3'])
-        assert_equal(cont, s.format)
-    end
-
-    def assert_entries(section, hash)
-        hash.each do |k, v| 
-            assert_equal(v, section[k], 
-                        "Expected <#{v}> for #{section.name}[#{k}] " + 
-                         "but got <#{section[k]}>")
-        end
-    end
-
-    def get_section(name)
-        result = @file[name]
-        assert_not_nil(result)
-        return result
-    end
-
-    def mkfile(content)
-        file = tempfile()
-        File.open(file, "w") { |f| f.print(content) }
-        return file
-    end
-end
diff --git a/test/util/instance_loader.rb b/test/util/instance_loader.rb
deleted file mode 100755
index 708d3f8..0000000
--- a/test/util/instance_loader.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/util/instance_loader'
-require 'puppettest'
-
-class TestInstanceloader < Test::Unit::TestCase
-	include PuppetTest
-
-    def setup
-        super
-        @loader = Class.new do
-            extend Puppet::Util::InstanceLoader
-
-            def self.newstuff(name, value)
-                instance_hash(:stuff)[name] = value
-            end
-        end
-
-        assert_nothing_raised("Could not create instance loader") do
-            @loader.instance_load(:stuff, "puppet/stuff")
-        end
-    end
-
-    # Make sure we correctly create our autoload instance.  This covers the basics.
-    def test_autoload
-        # Make sure we can retrieve the loader
-        assert_instance_of(Puppet::Util::Autoload, @loader.instance_loader(:stuff), "Could not get instance loader")
-
-        # Make sure we can get the instance hash
-        assert(@loader.instance_hash(:stuff), "Could not get instance hash")
-
-        # Make sure it defines the instance retrieval method
-        assert(@loader.respond_to?(:stuff), "Did not define instance retrieval method")
-    end
-
-    def test_loaded_instances
-        assert_equal([], @loader.loaded_instances(:stuff), "Incorrect loaded instances")
-
-        @loader.newstuff(:testing, "a value")
-
-        assert_equal([:testing], @loader.loaded_instances(:stuff), "Incorrect loaded instances")
-
-        assert_equal("a value", @loader.loaded_instance(:stuff, :testing), "Got incorrect loaded instance")
-    end
-
-    def test_instance_loading
-    end
-end
-
diff --git a/test/util/log.rb b/test/util/log.rb
deleted file mode 100755
index 8c7703c..0000000
--- a/test/util/log.rb
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/util/log'
-require 'puppettest'
-
-class TestLog < Test::Unit::TestCase
-    include PuppetTest
-
-    def setup
-        super
-        @oldloglevel = Puppet::Util::Log.level
-        Puppet::Util::Log.close
-    end
-
-    def teardown
-        super
-        Puppet::Util::Log.close
-        Puppet::Util::Log.level = @oldloglevel
-        Puppet::Util::Log.newdestination(:console)
-    end
-
-    def getlevels
-        levels = nil
-        assert_nothing_raised() {
-            levels = []
-            Puppet::Util::Log.eachlevel { |level| levels << level }
-        }
-        # Don't test the top levels; too annoying
-        return levels.reject { |level| level == :emerg or level == :crit }
-    end
-
-    def mkmsgs(levels)
-        levels.collect { |level|
-            next if level == :alert
-            assert_nothing_raised() {
-                Puppet::Util::Log.new(
-                    :level => level,
-                    :source => "Test",
-                    :message => "Unit test for %s" % level
-                )
-            }
-        }
-    end
-
-    def test_logfile
-        fact = nil
-        levels = nil
-        Puppet::Util::Log.level = :debug
-        levels = getlevels
-        logfile = tempfile()
-        fact = nil
-        assert_nothing_raised() {
-            Puppet::Util::Log.newdestination(logfile)
-        }
-        msgs = mkmsgs(levels)
-        assert(msgs.length == levels.length)
-        Puppet::Util::Log.close
-        count = 0
-
-        assert(FileTest.exists?(logfile), "Did not create logfile")
-
-        assert_nothing_raised() {
-            File.open(logfile) { |of|
-                count = of.readlines.length
-            }
-        }
-        assert(count == levels.length - 1) # skip alert
-    end
-
-    def test_syslog
-        levels = nil
-        assert_nothing_raised() {
-            levels = getlevels.reject { |level|
-                level == :emerg || level == :crit
-            }
-        }
-        assert_nothing_raised() {
-            Puppet::Util::Log.newdestination("syslog")
-        }
-        # there's really no way to verify that we got syslog messages...
-        msgs = mkmsgs(levels)
-        assert(msgs.length == levels.length)
-    end
-
-    def test_levelmethods
-        assert_nothing_raised() {
-            Puppet::Util::Log.newdestination("/dev/null")
-        }
-        getlevels.each { |level|
-            assert_nothing_raised() {
-                Puppet.send(level,"Testing for %s" % level)
-            }
-        }
-    end
-
-    def test_output
-        Puppet::Util::Log.level = :notice
-        assert(Puppet.err("This is an error").is_a?(Puppet::Util::Log))
-        assert(Puppet.debug("This is debugging").nil?)
-        Puppet::Util::Log.level = :debug
-        assert(Puppet.err("This is an error").is_a?(Puppet::Util::Log))
-        assert(Puppet.debug("This is debugging").is_a?(Puppet::Util::Log))
-    end
-
-    def test_creatingdirs
-        dir = tempfile()
-        file = File.join(dir, "logfile")
-        Puppet::Util::Log.newdestination file
-        Puppet.info "testing logs"
-        assert(FileTest.directory?(dir))
-        assert(FileTest.file?(file))
-    end
-
-    # Verify that we can pass strings that match printf args
-    def test_percentlogs
-        Puppet::Util::Log.newdestination :syslog
-
-        assert_nothing_raised {
-            Puppet::Util::Log.new(
-                :level => :info,
-                :message => "A message with %s in it"
-            )
-        }
-    end
-
-    # Verify that the error and source are always strings
-    def test_argsAreStrings
-        msg = nil
-        file = Puppet.type(:file).create(
-            :path => tempfile(),
-            :check => %w{owner group}
-        )
-        assert_nothing_raised {
-            msg = Puppet::Util::Log.new(:level => :info, :message => "This is a message")
-        }
-        assert_nothing_raised {
-            msg.source = file
-        }
-
-        assert_instance_of(String, msg.to_s)
-        assert_instance_of(String, msg.source)
-    end
-
-    def test_destination_matching
-        dest = nil
-        assert_nothing_raised {
-            dest = Puppet::Util::Log.newdesttype("Destine") do
-                def handle(msg)
-                    puts msg
-                end
-            end
-        }
-
-        [:destine, "Destine", "destine"].each do |name|
-            assert(dest.match?(name), "Did not match %s" % name.inspect)
-        end
-
-        assert_nothing_raised {
-            dest.match(:yayness)
-        }
-        assert(dest.match("Yayness"), "Did not match yayness")
-        Puppet::Util::Log.close(dest)
-    end
-
-    def test_autoflush
-        file = tempfile
-        Puppet::Util::Log.close(:console)
-        Puppet::Util::Log.newdestination(file)
-        Puppet.warning "A test"
-        assert(File.read(file) !~ /A test/,
-            "File defualted to autoflush")
-        Puppet::Util::Log.flush
-        assert(File.read(file) =~ /A test/,
-            "File did not flush")
-        Puppet::Util::Log.close(file)
-
-        # Now try one with autoflush enabled
-        Puppet[:autoflush] = true
-        file = tempfile
-        Puppet::Util::Log.newdestination(file)
-        Puppet.warning "A test"
-        assert(File.read(file) =~ /A test/,
-            "File did not autoflush")
-        Puppet::Util::Log.close(file)
-    end
-
-    def test_reopen
-        Puppet[:autoflush] = true
-        file = tempfile
-        Puppet::Util::Log.close(:console)
-        Puppet::Util::Log.newdestination(file)
-        Puppet.warning "A test"
-        assert(File.read(file) =~ /A test/,
-            "File did not flush")
-        # Rename the file 
-        newfile = file + ".old"
-        File.rename(file, newfile)
-
-        # Send another log
-        Puppet.warning "Another test"
-        assert(File.read(newfile) =~ /Another test/,
-            "File did not rename")
-
-        # Now reopen the log
-        Puppet::Util::Log.reopen
-        Puppet.warning "Reopen test"
-        assert(File.read(file) =~ /Reopen test/,
-            "File did not reopen")
-        Puppet::Util::Log.close(file)
-    end
-end
-
diff --git a/test/util/metrics.rb b/test/util/metrics.rb
deleted file mode 100755
index b0ac1e2..0000000
--- a/test/util/metrics.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/util/metric'
-require 'puppettest'
-require 'puppet/type'
-
-class TestMetric < PuppetTest::TestCase
-    confine "Missing RRDtool library" =>  Puppet.features.rrd?
-    include PuppetTest
-
-    def gendata
-        totalmax = 1000
-        changemax = 1000
-        eventmax = 10
-        maxdiff = 10
-
-        types = [Puppet.type(:file), Puppet.type(:package), Puppet.type(:package)]
-        data = [:total, :managed, :outofsync, :changed, :totalchanges]
-        events = [:file_changed, :package_installed, :service_started]
-
-        # if this is the first set of data points...
-        typedata = Hash.new { |typehash,type|
-            typehash[type] = Hash.new(0)
-        }
-        eventdata = Hash.new(0)
-        typedata = {}
-        typedata[:total] = rand(totalmax)
-        typedata[:managed] = rand(typedata[:total])
-        typedata[:outofsync] = rand(typedata[:managed])
-        typedata[:changed] = rand(typedata[:outofsync])
-        typedata[:totalchanges] = rand(changemax)
-
-        events.each { |event|
-            eventdata[event] = rand(eventmax)
-        }
-
-        return {:typedata => typedata, :eventdata => eventdata}
-    end
-
-    def rundata(report, time)
-        assert_nothing_raised {
-            gendata.each do |name, data|
-                report.newmetric(name, data)
-            end
-            report.metrics.each { |n, m| m.store(time) }
-        }
-    end
-
-    def setup
-        super
-        Puppet[:rrdgraph] = true
-    end
-
-    def test_fakedata
-        report = Puppet::Transaction::Report.new
-        time = Time.now.to_i
-        start = time
-        10.times {
-            rundata(report, time)
-            time += 300
-        }
-        rundata(report, time)
-
-        report.metrics.each do |n, m| m.graph end
-
-        File.open(File.join(Puppet[:rrddir],"index.html"),"w") { |of|
-            of.puts "<html><body>"
-            report.metrics.each { |name, metric|
-                of.puts "<img src=%s.png><br>" % metric.name
-            }
-        }
-    end
-end
-
diff --git a/test/util/package.rb b/test/util/package.rb
deleted file mode 100755
index 8d4fbc8..0000000
--- a/test/util/package.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppet/util/package'
-require 'puppettest'
-
-class TestPuppetUtilPackage < Test::Unit::TestCase
-    include PuppetTest
-    include Puppet::Util::Package
-
-    def test_versioncmp
-        ary = %w{ 1.1.6 2.3 1.1a 3.0 1.5 1 2.4 1.1-4 
-            2.3.1 1.2 2.3.0 1.1-3 2.4b 2.4 2.40.2 2.3a.1 3.1 0002 1.1-5 1.1.a 1.06}
-
-        newary = nil
-        assert_nothing_raised do
-            newary = ary.sort { |a, b|
-                versioncmp(a,b)
-            }
-        end
-        assert_equal(["0002", "1", "1.06", "1.1-3", "1.1-4", "1.1-5", "1.1.6", "1.1.a", "1.1a", "1.2", "1.5", "2.3", "2.3.0", "2.3.1", "2.3a.1", "2.4", "2.4", "2.4b", "2.40.2", "3.0", "3.1"], newary)
-    end
-end
-
diff --git a/test/util/pidlock.rb b/test/util/pidlock.rb
deleted file mode 100755
index 671668d..0000000
--- a/test/util/pidlock.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet/util/pidlock'
-require 'fileutils'
-
-# This is *fucked* *up*
-Puppet.debug = false
-
-class TestPuppetUtilPidlock < Test::Unit::TestCase
-	include PuppetTest
-	
-	def setup
-		super
-		@workdir = tstdir
-	end
-	
-	def teardown
-		super
-		FileUtils.rm_rf(@workdir)
-	end
-	
-	def test_00_basic_create
-		l = nil
-		assert_nothing_raised { l = Puppet::Util::Pidlock.new(@workdir + '/nothingmuch') }
-		
-		assert_equal Puppet::Util::Pidlock, l.class
-		
-		assert_equal @workdir + '/nothingmuch', l.lockfile
-	end
-
-	def test_10_uncontended_lock
-		l = Puppet::Util::Pidlock.new(@workdir + '/test_lock')
-		
-		assert !l.locked?
-		assert !l.mine?
-		assert l.lock
-		assert l.locked?
-		assert l.mine?
-		assert !l.anonymous?
-		# It's OK to call lock multiple times
-		assert l.lock
-		assert l.unlock
-		assert !l.locked?
-		assert !l.mine?
-	end
-
-	def test_20_someone_elses_lock
-		childpid = nil
-		l = Puppet::Util::Pidlock.new(@workdir + '/someone_elses_lock')
-		
-		# First, we need a PID that's guaranteed to be (a) used, (b) someone
-		# else's, and (c) around for the life of this test.
-		childpid = fork { loop do; sleep 10; end }
-		
-		File.open(l.lockfile, 'w') { |fd| fd.write(childpid) }
-		
-		assert l.locked?
-		assert !l.mine?
-		assert !l.lock
-		assert l.locked?
-		assert !l.mine?
-		assert !l.unlock
-		assert l.locked?
-		assert !l.mine?
-	ensure
-		Process.kill("KILL", childpid) unless childpid.nil?
-	end
-	
-	def test_30_stale_lock
-		# This is a bit hard to guarantee, but we need a PID that is definitely
-		# unused, and will stay so for the the life of this test.  Our best
-		# bet is to create a process, get it's PID, let it die, and *then*
-		# lock on it.
-		childpid = fork { exit }
-		
-		# Now we can't continue until we're sure that the PID is dead
-		Process.wait(childpid)
-		
-		l = Puppet::Util::Pidlock.new(@workdir + '/stale_lock')
-		
-		# locked? should clear the lockfile
-		File.open(l.lockfile, 'w') { |fd| fd.write(childpid) }
-		assert File.exists?(l.lockfile)
-		assert !l.locked?
-		assert !File.exists?(l.lockfile)
-		
-		# lock should replace the lockfile with our own
-		File.open(l.lockfile, 'w') { |fd| fd.write(childpid) }
-		assert File.exists?(l.lockfile)
-		assert l.lock
-		assert l.locked?
-		assert l.mine?
-		
-		# unlock should fail, and should *not* molest the existing lockfile,
-		# despite it being stale
-		File.open(l.lockfile, 'w') { |fd| fd.write(childpid) }
-		assert File.exists?(l.lockfile)
-		assert !l.unlock
-		assert File.exists?(l.lockfile)
-	end
-
-	def test_40_not_locked_at_all
-		l = Puppet::Util::Pidlock.new(@workdir + '/not_locked')
-		
-		assert !l.locked?
-		# We can't unlock if we don't hold the lock
-		assert !l.unlock
-	end
-	
-	def test_50_anonymous_lock
-		l = Puppet::Util::Pidlock.new(@workdir + '/anonymous_lock')
-		
-		assert !l.locked?
-		assert l.lock(:anonymous => true)
-		assert l.locked?
-		assert l.anonymous?
-		assert !l.mine?
-		assert "", File.read(l.lockfile)
-		assert !l.unlock
-		assert l.locked?
-		assert l.anonymous?
-		assert l.unlock(:anonymous => true)
-		assert !File.exists?(l.lockfile)
-	end
-end
-		
diff --git a/test/util/settings.rb b/test/util/settings.rb
deleted file mode 100755
index cf5dca7..0000000
--- a/test/util/settings.rb
+++ /dev/null
@@ -1,1106 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'mocha'
-require 'puppettest'
-require 'puppet/util/settings'
-require 'puppettest/parsertesting'
-
-class TestSettings < Test::Unit::TestCase
-	include PuppetTest
-	include PuppetTest::ParserTesting
-    CElement = Puppet::Util::Settings::CElement
-    CBoolean = Puppet::Util::Settings::CBoolean
-
-    def setup
-        super
-        @config = mkconfig
-    end
-
-    def set_configs(config = nil)
-        config ||= @config
-        config.setdefaults("main",
-            :one => ["a", "one"],
-            :two => ["a", "two"],
-            :yay => ["/default/path", "boo"],
-            :mkusers => [true, "uh, yeah"],
-            :name => ["testing", "a"]
-        )
-
-        config.setdefaults("section1",
-            :attr => ["a", "one"],
-            :attrdir => ["/another/dir", "two"],
-            :attr3 => ["$attrdir/maybe", "boo"]
-        )
-    end
-
-    def check_for_users
-        count = Puppet::Type.type(:user).inject(0) { |c,o|
-            c + 1
-        }
-        assert(count > 0, "Found no users")
-    end
-
-    def test_to_transportable
-        set_configs
-        trans = nil
-        assert_nothing_raised("Could not convert to a transportable") {
-            trans = @config.to_transportable
-        }
-
-        comp = nil
-        assert_nothing_raised("Could not convert transportable to component") {
-            comp = trans.to_type
-        }
-
-        assert_nothing_raised("Could not retrieve transported config") {
-            comp.retrieve
-        }
-    end
-
-    def test_to_config
-        set_configs
-
-        newc = mkconfig
-        set_configs(newc)
-
-        # Reset all of the values, so we know they're changing.
-        newc.each do |name, obj|
-            next if name == :name
-            newc[name] = true
-        end
-
-        newfile = tempfile()
-        File.open(newfile, "w") { |f|
-            @config.to_config.split("\n").each do |line|
-                # Uncomment the settings, so they actually take.
-                if line =~ / = /
-                    f.puts line.sub(/^\s*#/, '')
-                else
-                    f.puts line
-                end
-            end
-        }
-
-        assert_nothing_raised("Could not parse generated configuration") {
-            newc.parse(newfile)
-        }
-
-        @config.each do |name, object|
-            assert_equal(@config[name], newc[name], "Parameter %s is not the same" % name)
-        end
-    end
-
-    def mkconfig
-        c = nil
-        assert_nothing_raised {
-            c = Puppet::Util::Settings.new
-        }
-        return c
-    end
-
-    def test_addbools
-        assert_nothing_raised {
-            @config.setdefaults(:testing, :booltest => [true, "testing"])
-        }
-
-        assert(@config[:booltest])
-        @config = mkconfig
-
-        assert_nothing_raised {
-            @config.setdefaults(:testing, :booltest => ["true", "testing"])
-        }
-
-        assert(@config[:booltest])
-
-        assert_nothing_raised {
-            @config[:booltest] = false
-        }
-
-        assert(! @config[:booltest], "Booltest is not false")
-
-        assert_nothing_raised {
-            @config[:booltest] = "false"
-        }
-
-        assert(! @config[:booltest], "Booltest is not false")
-
-        assert_raise(ArgumentError) {
-            @config[:booltest] = "yayness"
-        }
-
-        assert_raise(ArgumentError) {
-            @config[:booltest] = "/some/file"
-        }
-    end
-
-    def test_strings
-        val = "this is a string"
-        assert_nothing_raised {
-            @config.setdefaults(:testing, :strtest => [val, "testing"])
-        }
-
-        assert_equal(val, @config[:strtest])
-
-        # Verify that variables are interpolated
-        assert_nothing_raised {
-            @config.setdefaults(:testing, :another => ["another $strtest", "testing"])
-        }
-
-        assert_equal("another #{val}", @config[:another])
-    end
-
-    def test_files
-        c = mkconfig
-
-        parent = "/puppet"
-        assert_nothing_raised {
-            @config.setdefaults(:testing, :parentdir => [parent, "booh"])
-        }
-
-        assert_nothing_raised {
-            @config.setdefaults(:testing, :child => ["$parent/child", "rah"])
-        }
-
-        assert_equal(parent, @config[:parentdir])
-        assert_equal("/puppet/child", File.join(@config[:parentdir], "child"))
-    end
-
-    def test_getset
-        initial = "an initial value"
-        assert_raise(ArgumentError) {
-            @config[:yayness] = initial
-        }
-
-        default = "this is a default"
-        assert_nothing_raised {
-            @config.setdefaults(:testing, :yayness => [default, "rah"])
-        }
-
-        assert_equal(default, @config[:yayness])
-
-        assert_nothing_raised {
-            @config[:yayness] = initial
-        }
-
-        assert_equal(initial, @config[:yayness])
-
-        assert_nothing_raised {
-            @config.clear
-        }
-
-        assert_equal(default, @config[:yayness], "'clear' did not remove old values")
-
-        assert_nothing_raised {
-            @config[:yayness] = "not default"
-        }
-        assert_equal("not default", @config[:yayness])
-    end
-
-    def test_parse_file
-        text = %{
-one = this is a test
-two = another test
-owner = root
-group = root
-yay = /a/path
-
-[main]
-    four = five
-    six = seven
-
-[section1]
-    attr = value
-    owner = puppet
-    group = puppet
-    attrdir = /some/dir
-    attr3 = $attrdir/other
-        }
-
-        file = tempfile()
-        File.open(file, "w") { |f| f.puts text }
-
-        @config.expects(:settimer)
-        
-        result = nil
-        assert_nothing_raised {
-            result = @config.send(:parse_file, file)
-        }
-
-        main = result[:main]
-        assert(main, "Did not get section for main")
-        {
-            :one => "this is a test",
-            :two => "another test",
-            :owner => "root",
-            :group => "root",
-            :yay => "/a/path",
-            :four => "five",
-            :six => "seven"
-        }.each do |param, value|
-            assert_equal(value, main[param], "Param %s was not set correctly in main" % param)
-        end
-
-        section1 = result[:section1]
-        assert(section1, "Did not get section1")
-
-        {
-            :attr => "value",
-            :owner => "puppet",
-            :group => "puppet",
-            :attrdir => "/some/dir",
-            :attr3 => "$attrdir/other"
-        }.each do |param, value|
-            assert_equal(value, section1[param], "Param %s was not set correctly in section1" % param)
-        end
-    end
-
-    def test_old_parse
-        text = %{
-one = this is a test
-two = another test
-owner = root
-group = root
-yay = /a/path
-
-[section1]
-    attr = value
-    owner = puppet
-    group = puppet
-    attrdir = /some/dir
-    attr3 = $attrdir/other
-        }
-
-        file = tempfile()
-        File.open(file, "w") { |f| f.puts text }
-
-        assert_nothing_raised {
-            @config.setdefaults("puppet",
-                :one => ["a", "one"],
-                :two => ["a", "two"],
-                :yay => ["/default/path", "boo"],
-                :mkusers => [true, "uh, yeah"]
-            )
-        }
-
-        assert_nothing_raised {
-            @config.setdefaults("section1",
-                :attr => ["a", "one"],
-                :attrdir => ["/another/dir", "two"],
-                :attr3 => ["$attrdir/maybe", "boo"]
-            )
-        }
-        
-        assert_nothing_raised {
-            @config.old_parse(file)
-        }
-
-        assert_equal("value", @config[:attr])
-        assert_equal("/some/dir", @config[:attrdir])
-        assert_equal(:directory, @config.element(:attrdir).type)
-        assert_equal("/some/dir/other", @config[:attr3])
-
-        elem = nil
-        assert_nothing_raised {
-            elem = @config.element(:attr3)
-        }
-
-        assert(elem)
-        assert_equal("puppet", elem.owner)
-
-        config = nil
-        assert_nothing_raised {
-            config = @config.to_config
-        }
-
-        assert_nothing_raised("Could not create transportable config") {
-            @config.to_transportable
-        }
-    end
-
-    def test_parse
-        result = {
-            :main => {:main => "main", :bad => "invalid", :cliparam => "reset"},
-            :puppet => {:other => "puppet", :cliparam => "reset"},
-            :puppetd => {:other => "puppetd", :cliparam => "reset"}
-        }
-        # Set our defaults, so they're valid. Don't define 'bad', since we want to test for failures.
-        @config.setdefaults(:main,
-            :main => ["whatever", "a"],
-            :cliparam => ["default", "y"],
-            :other => ["a", "b"],
-            :name => ["puppet", "b"] # our default name
-        )
-        @config.setdefaults(:other,
-            :one => ["whatever", "a"],
-            :two => ["default", "y"],
-            :apple => ["a", "b"],
-            :shoe => ["puppet", "b"] # our default name
-        )
-        @config.handlearg("--cliparam", "changed")
-        @config.stubs(:parse_file).returns(result)
-
-        # First do it with our name being 'puppet'
-        assert_nothing_raised("Could not handle parse results") do
-            @config.parse(tempfile)
-        end
-
-        assert_equal(:puppet, @config.name, "Did not get correct name")
-        assert_equal("main", @config[:main], "Did not get main value")
-        assert_equal("puppet", @config[:other], "Did not get name value")
-        assert_equal("changed", @config[:cliparam], "CLI values were overridden by config")
-
-        # Now switch names and make sure the parsing switches, too.
-        @config.clear(true)
-        assert_nothing_raised("Could not handle parse results") do
-            @config.parse(tempfile)
-        end
-        @config[:name] = :puppetd
-
-        assert_equal(:puppetd, @config.name, "Did not get correct name")
-        assert_equal("main", @config[:main], "Did not get main value")
-        assert_equal("puppetd", @config[:other], "Did not get name value")
-        assert_equal("changed", @config[:cliparam], "CLI values were overridden by config")
-    end
-
-    # Make sure we can extract file options correctly.
-    def test_parsing_file_options
-        @config.setdefaults(:whev,
-            :file => {
-                :desc => "whev",
-                :default => "/default",
-                :owner => "me",
-                :group => "me",
-                :mode => "755"
-            }
-        )
-
-        file = tempfile
-        count = 0
-
-        {
-            :pass => {
-                " {owner = you}" => {:owner => "you"},
-                " {owner = you, group = you}" => {:owner => "you", :group => "you"},
-                " {owner = you, group = you, mode = 755}" => {:owner => "you", :group => "you", :mode => "755"},
-                " { owner = you, group = you } " => {:owner => "you", :group => "you"},
-                "{owner=you,group=you} " => {:owner => "you", :group => "you"},
-                "{owner=you,} " => {:owner => "you"}
-            },
-            :fail => [
-                %{{owner = you group = you}},
-                %{{owner => you, group => you}},
-                %{{user => you}},
-                %{{random => you}},
-                %{{mode => you}}, # make sure modes are numbers
-                %{{owner => you}}
-            ]
-        }.each do |type, list|
-            count += 1
-            list.each do |value|
-                if type == :pass
-                    value, should = value[0], value[1]
-                end
-                path = "/other%s" % count
-                # Write our file out
-                File.open(file, "w") do |f|
-                    f.puts %{[main]\nfile = #{path}#{value}}
-                end
-
-                if type == :fail
-                    assert_raise(ArgumentError, "Did not fail on %s" % value.inspect) do
-                        @config.send(:parse_file, file)
-                    end
-                else
-                    result = nil
-                    assert_nothing_raised("Failed to parse %s" % value.inspect) do
-                        result = @config.send(:parse_file, file)
-                    end
-                    assert_equal(should, result[:main][:_meta][:file], "Got incorrect return for %s" % value.inspect)
-                    assert_equal(path, result[:main][:file], "Got incorrect value for %s" % value.inspect)
-                end
-            end
-        end
-    end
-
-    # Make sure file options returned from parse_file are handled correctly.
-    def test_parsed_file_options
-        @config.setdefaults(:whev,
-            :file => {
-                :desc => "whev",
-                :default => "/default",
-                :owner => "me",
-                :group => "me",
-                :mode => "755"
-            }
-        )
-
-        result = {
-            :main => {
-                :file => "/other",
-                :_meta => {
-                    :file => {
-                        :owner => "you",
-                        :group => "you",
-                        :mode => "644"
-                    }
-                }
-            }
-        }
-
-        @config.expects(:parse_file).returns(result)
-
-        assert_nothing_raised("Could not handle file options") do
-            @config.parse("/whatever")
-        end
-
-        # Get the actual object, so we can verify metadata
-        file = @config.element(:file)
-
-        assert_equal("/other", @config[:file], "Did not get correct value")
-        assert_equal("you", file.owner, "Did not pass on user")
-        assert_equal("you", file.group, "Did not pass on group")
-        assert_equal("644", file.mode, "Did not pass on mode")
-    end
-
-    def test_arghandling
-        c = mkconfig
-
-        assert_nothing_raised {
-            @config.setdefaults("testing",
-                :onboolean => [true, "An on bool"],
-                :offboolean => [false, "An off bool"],
-                :string => ["a string", "A string arg"],
-                :file => ["/path/to/file", "A file arg"]
-            )
-        }
-
-        data = {
-            :onboolean => [true, false],
-            :offboolean => [true, false],
-            :string => ["one string", "another string"],
-            :file => %w{/a/file /another/file}
-        }
-        data.each { |param, values|
-            values.each { |val|
-                opt = nil
-                arg = nil
-                if @config.boolean?(param)
-                    if val
-                        opt = "--%s" % param
-                    else
-                        opt = "--no-%s" % param
-                    end
-                else
-                    opt = "--%s" % param
-                    arg = val
-                end
-
-                assert_nothing_raised("Could not handle arg %s with value %s" %
-                    [opt, val]) {
-
-                    @config.handlearg(opt, arg)
-                }
-            }
-        }
-    end
-
-    def test_addargs
-        @config.setdefaults("testing",
-                            :onboolean => [true, "An on bool"],
-                            :offboolean => [false, "An off bool"],
-                            :string => ["a string", "A string arg"],
-                            :file => ["/path/to/file", "A file arg"]
-                            )
-
-        should = []
-        @config.each { |name, element|
-            element.expects(:getopt_args).returns([name])
-            should << name
-        }
-        result = []
-        assert_nothing_raised("Add args failed") do
-            @config.addargs(result)
-        end
-        assert_equal(should, result, "Did not call addargs correctly.")
-
-    end
-
-    def test_addargs_functional
-        @config.setdefaults("testing",
-                            :onboolean => [true, "An on bool"],
-                            :string => ["a string", "A string arg"]
-                            )
-        result = []
-        should = []
-        assert_nothing_raised("Add args failed") do
-            @config.addargs(result)
-        end
-        @config.each do |name, element|
-            if name == :onboolean
-                should << ["--onboolean", GetoptLong::NO_ARGUMENT]
-                should << ["--no-onboolean", GetoptLong::NO_ARGUMENT]
-            elsif name == :string
-                should << ["--string", GetoptLong::REQUIRED_ARGUMENT]
-            end
-        end
-        assert_equal(should, result, "Add args functional test failed")
-    end
-
-    def test_usesection
-        # We want to make sure that config processes do not result in graphing.
-        Puppet[:graphdir] = tempfile()
-        Puppet[:graph] = true
-        Dir.mkdir(Puppet[:graphdir])
-        c = mkconfig
-
-        dir = tempfile()
-        file = "$mydir/myfile"
-        realfile = File.join(dir, "myfile")
-        otherfile = File.join(dir, "otherfile")
-        section = "testing"
-        assert_nothing_raised {
-            @config.setdefaults(section,
-                :mydir => [dir, "A dir arg"],
-                :otherfile => {
-                    :default => "$mydir/otherfile",
-                    :create => true,
-                    :desc => "A file arg"
-                },
-                :myfile => [file, "A file arg"]
-            )
-        }
-
-        assert_nothing_raised("Could not use a section") {
-            @config.use(section)
-        }
-
-        assert_nothing_raised("Could not reuse a section") {
-            @config.use(section)
-        }
-        
-        # Make sure it didn't graph anything, which is the only real way
-        # to test that the transaction was marked as a configurator.
-        assert(Dir.entries(Puppet[:graphdir]).reject { |f| f =~ /^\.\.?$/ }.empty?, "Graphed config process")
-
-        assert(FileTest.directory?(dir), "Did not create directory")
-        assert(FileTest.exists?(otherfile), "Did not create file")
-        assert(!FileTest.exists?(realfile), "Created file")
-    end
-
-    def test_setdefaultsarray
-        c = mkconfig
-
-        assert_nothing_raised {
-            @config.setdefaults("yay",
-                :a => [false, "some value"],
-                :b => ["/my/file", "a file"]
-            )
-        }
-
-        assert_equal(false, @config[:a], "Values are not equal")
-        assert_equal("/my/file", @config[:b], "Values are not equal")
-    end
-
-    def test_setdefaultshash
-        c = mkconfig
-
-        assert_nothing_raised {
-            @config.setdefaults("yay",
-                :a => {:default => false, :desc => "some value"},
-                :b => {:default => "/my/file", :desc => "a file"}
-            )
-        }
-
-        assert_equal(false, @config[:a], "Values are not equal")
-        assert_equal("/my/file", @config[:b], "Values are not equal")
-    end
-
-    def test_notmanagingdev
-        c = mkconfig
-        path = "/dev/testing"
-        @config.setdefaults(:test,
-            :file => {
-                :default => path,
-                :mode => 0640,
-                :desc => 'yay'
-            }
-        )
-
-        config = @config.to_configuration
-
-        assert(! config.resource(:file, "/dev/testing"), "Created dev file")
-    end
-
-    def test_groupsetting
-        cfile = tempfile()
-
-        group = "yayness"
-
-        File.open(cfile, "w") do |f|
-            f.puts "[main]
-            group = #{group}
-            "
-        end
-
-        config = mkconfig
-        config.setdefaults(Puppet[:name], :group => ["puppet", "a group"])
-
-        assert_nothing_raised {
-            config.parse(cfile)
-        }
-
-        assert_equal(group, config[:group], "Group did not take")
-    end
-
-    # provide a method to modify and create files w/out specifying the info
-    # already stored in a config
-    def test_writingfiles
-        File.umask(0022)
-      
-        path = tempfile()
-        mode = 0644
-
-        config = mkconfig
-
-        args = { :default => path, :mode => mode, :desc => "yay" }
-
-        user = nonrootuser()
-        group = nonrootgroup()
-
-        if Puppet::Util::SUIDManager.uid == 0
-            args[:owner] = user.name
-            args[:group] = group.name
-        end
-
-        config.setdefaults(:testing, :myfile => args)
-
-        assert_nothing_raised {
-            config.write(:myfile) do |file|
-                file.puts "yay"
-            end
-        }
-
-        assert_equal(mode, filemode(path), "Modes are not equal")
-
-        # OS X is broken in how it chgrps files 
-        if Puppet::Util::SUIDManager.uid == 0
-            assert_equal(user.uid, File.stat(path).uid, "UIDS are not equal")
-
-            case Facter["operatingsystem"].value
-            when /BSD/, "Darwin": # nothing
-            else
-                assert_equal(group.gid, File.stat(path).gid, "GIDS are not equal")
-            end
-        end
-    end
-
-    def test_mkdir
-        File.umask(0022)
-        
-        path = tempfile()
-        mode = 0755
-
-        config = mkconfig
-
-        args = { :default => path, :mode => mode, :desc => "a file" }
-
-        user = nonrootuser()
-        group = nonrootgroup()
-
-        if Puppet::Util::SUIDManager.uid == 0
-            args[:owner] = user.name
-            args[:group] = group.name
-        end
-
-        config.setdefaults(:testing, :mydir => args)
-
-        assert_nothing_raised {
-            config.mkdir(:mydir)
-        }
-
-        assert_equal(mode, filemode(path), "Modes are not equal")
-
-
-        # OS X and *BSD is broken in how it chgrps files 
-        if Puppet::Util::SUIDManager.uid == 0
-            assert_equal(user.uid, File.stat(path).uid, "UIDS are not equal")
-
-            case Facter["operatingsystem"].value
-            when /BSD/, "Darwin": # nothing
-            else
-                assert_equal(group.gid, File.stat(path).gid, "GIDS are not equal")
-            end
-        end
-    end
-
-    # Make sure that tags are ignored when configuring
-    def test_configs_ignore_tags
-        config = mkconfig
-        file = tempfile()
-
-        config.setdefaults(:mysection,
-            :mydir => [file, "a file"]
-        )
-
-        Puppet[:tags] = "yayness"
-
-        assert_nothing_raised {
-            config.use(:mysection)
-        }
-
-        assert(FileTest.directory?(file), "Directory did not get created")
-
-        assert_equal("yayness", Puppet[:tags],
-            "Tags got changed during config")
-    end
-
-    def test_configs_replace_in_url
-        config = mkconfig
-        
-        config.setdefaults(:mysection, :name => ["yayness", "yay"])
-        config.setdefaults(:mysection, :url => ["http://$name/rahness", "yay"])
-
-        val = nil
-        assert_nothing_raised {
-            val = config[:url]
-        }
-
-        assert_equal("http://yayness/rahness", val,
-            "Settings got messed up")
-    end
-
-    def test_correct_type_assumptions
-        config = mkconfig
-
-        file = Puppet::Util::Settings::CFile
-        element = Puppet::Util::Settings::CElement
-        bool = Puppet::Util::Settings::CBoolean
-
-        # We have to keep these ordered, unfortunately.
-        [
-            ["/this/is/a/file", file],
-            ["true", bool],
-            [true, bool],
-            ["false", bool],
-            ["server", element],
-            ["http://$server/yay", element],
-            ["$server/yayness", file],
-            ["$server/yayness.conf", file]
-        ].each do |ary|
-            value, type = ary
-            assert_nothing_raised {
-                config.setdefaults(:yayness, value => { :default => value, :desc => name.to_s})
-            }
-            elem = config.element(value)
-
-            assert_instance_of(type, elem,
-                "%s got created as wrong type" % value.inspect)
-        end
-    end
-
-    # Make sure we correctly reparse our config files but don't lose CLI values.
-    def test_reparse
-        Puppet[:filetimeout] = 0
-
-        config = mkconfig()
-        config.setdefaults(:mysection, :default => ["default", "yay"])
-        config.setdefaults(:mysection, :clichange => ["clichange", "yay"])
-        config.setdefaults(:mysection, :filechange => ["filechange", "yay"])
-
-        config.stubs(:read_file).returns(%{[main]\nfilechange = filevalue\n})
-        file = mock 'file'
-        file.stubs(:changed?).returns(true)
-
-        assert_nothing_raised {
-            config.parse(file)
-        }
-
-        # Set another "from the cli"
-        assert_nothing_raised {
-            config.handlearg("clichange", "clivalue")
-        }
-
-        # And leave the other unset
-        assert_equal("default", config[:default])
-        assert_equal("filevalue", config[:filechange], "Did not get value from file")
-        assert_equal("clivalue", config[:clichange])
-
-        # Now reparse
-        config.stubs(:read_file).returns(%{[main]\nfilechange = newvalue\n})
-        file = mock 'file'
-        file.stubs(:changed?).returns(true)
-        config.parse(file)
-
-        # And check all of the values
-        assert_equal("default", config[:default])
-        assert_equal("clivalue", config[:clichange])
-        assert_equal("newvalue", config[:filechange])
-    end
-
-    def test_parse_removes_quotes
-        config = mkconfig()
-        config.setdefaults(:mysection, :singleq => ["single", "yay"])
-        config.setdefaults(:mysection, :doubleq => ["double", "yay"])
-        config.setdefaults(:mysection, :none => ["noquote", "yay"])
-        config.setdefaults(:mysection, :middle => ["midquote", "yay"])
-
-        file = tempfile()
-        # Set one parameter in the file
-        File.open(file, "w") { |f|
-            f.puts %{[main]\n
-    singleq = 'one'
-    doubleq = "one"
-    none = one
-    middle = mid"quote
-}
-        }
-
-        assert_nothing_raised {
-            config.parse(file)
-        }
-
-        %w{singleq doubleq none}.each do |p|
-            assert_equal("one", config[p], "%s did not match" % p)
-        end
-        assert_equal('mid"quote', config["middle"], "middle did not match")
-    end
-
-    def test_timer
-        Puppet[:filetimeout] = 0.1
-        origpath = tempfile()
-        config = mkconfig()
-        config.setdefaults(:mysection, :paramdir => [tempfile(), "yay"])
-
-        file = tempfile()
-        # Set one parameter in the file
-        File.open(file, "w") { |f|
-            f.puts %{[main]\n
-    paramdir = #{origpath}
-}
-        }
-
-        assert_nothing_raised {
-            config.parse(file)
-            config.use(:mysection)
-        }
-
-        assert(FileTest.directory?(origpath), "dir did not get created")
-
-        # Now start the timer
-        assert_nothing_raised {
-            EventLoop.current.monitor_timer config.timer
-        }
-
-        newpath = tempfile()
-
-        File.open(file, "w") { |f|
-            f.puts %{[main]\n
-    paramdir = #{newpath}
-}
-        }
-        config.file.send("tstamp=".intern, Time.now - 50)
-        sleep 1
-
-        assert_equal(newpath, config["paramdir"],
-                    "File did not get reparsed from timer")
-        assert(FileTest.directory?(newpath), "new dir did not get created")
-
-
-    end
-
-    # Test that config parameters correctly call passed-in blocks when the value
-    # is set.
-    def test_paramblocks
-        config = mkconfig()
-
-        testing = nil
-        assert_nothing_raised do
-            config.setdefaults :test, :blocktest => {:default => "yay", :desc => "boo", :hook => proc { |value| testing = value }}
-        end
-        elem = config.element(:blocktest)
-
-        assert_nothing_raised do
-            assert_equal("yay", elem.value)
-        end
-
-        assert_nothing_raised do
-            config[:blocktest] = "yaytest"
-        end
-
-        assert_nothing_raised do
-            assert_equal("yaytest", elem.value)
-        end
-        assert_equal("yaytest", testing)
-
-        assert_nothing_raised do
-            config[:blocktest] = "another"
-        end
-
-        assert_nothing_raised do
-            assert_equal("another", elem.value)
-        end
-        assert_equal("another", testing)
-
-        # Now verify it works from setdefault
-        assert_nothing_raised do
-            config.setdefaults :test,
-                :blocktest2 => {
-                    :default => "yay",
-                    :desc => "yay",
-                    :hook => proc { |v| testing = v }
-                }
-        end
-
-        assert_equal("yay", config[:blocktest2])
-
-        assert_nothing_raised do
-            config[:blocktest2] = "footest"
-        end
-        assert_equal("footest", config[:blocktest2])
-        assert_equal("footest", testing)
-    end
-
-    def test_no_modify_root
-        config = mkconfig
-        config.setdefaults(:yay,
-            :mydir => {:default => tempfile(),
-                :mode => 0644,
-                :owner => "root",
-                :group => "root",
-                :desc => "yay"
-            },
-            :mkusers => [false, "yay"]
-        )
-
-        assert_nothing_raised do
-            config.use(:yay)
-        end
-
-        # Now enable it so they'll be added
-        config[:mkusers] = true
-
-        comp = config.to_configuration
-
-        comp.vertices.find_all { |r| r.class.name == :user }.each do |u|
-            assert(u.name != "root", "Tried to manage root user")
-        end
-        comp.vertices.find_all { |r| r.class.name == :group }.each do |u|
-            assert(u.name != "root", "Tried to manage root group")
-            assert(u.name != "wheel", "Tried to manage wheel group")
-        end
-
-#        assert(yay, "Did not find yay component")
-#        yay.each do |c|
-#            puts @config.ref
-#        end
-#        assert(! yay.find { |o| o.class.name == :user and o.name == "root" },
-#            "Found root user")
-#        assert(! yay.find { |o| o.class.name == :group and o.name == "root" },
-#            "Found root group")
-    end
-    
-    # #415
-    def test_remove_trailing_spaces
-        config = mkconfig()
-        config.setdefaults(:yay, :rah => ["testing", "a desc"])
-        
-        file = tempfile()
-        File.open(file, "w") { |f| f.puts "rah = something " }
-        
-        assert_nothing_raised { config.parse(file) }
-        assert_equal("something", config[:rah], "did not remove trailing whitespace in parsing")
-    end
-
-    # #484
-    def test_parsing_unknown_variables
-        logstore()
-        config = mkconfig()
-        config.setdefaults(:mysection, :one => ["yay", "yay"])
-        file = tempfile()
-        File.open(file, "w") { |f|
-            f.puts %{[main]\n
-                one = one
-                two = yay
-            }
-        }
-
-        assert_nothing_raised("Unknown parameter threw an exception") do
-            config.parse(file)
-        end
-    end
-
-    def test_multiple_interpolations
-        @config.setdefaults(:section,
-            :one => ["oneval", "yay"],
-            :two => ["twoval", "yay"],
-            :three => ["$one/$two", "yay"]
-        )
-
-        assert_equal("oneval/twoval", @config[:three],
-            "Did not interpolate multiple variables")
-    end
-
-    # Make sure we can replace ${style} var names
-    def test_curly_replacements
-        @config.setdefaults(:section,
-            :one => ["oneval", "yay"],
-            :two => ["twoval", "yay"],
-            :three => ["$one/${two}/${one}/$two", "yay"]
-        )
-
-        assert_equal("oneval/twoval/oneval/twoval", @config[:three],
-            "Did not interpolate curlied variables")
-    end
-
-    # Test to make sure that we can set and get a short name
-    def test_celement_short_name
-        element = nil
-        assert_nothing_raised("Could not create celement") do
-            element = CElement.new :short => "n", :desc => "anything"
-        end
-        assert_equal("n", element.short, "Short value is not retained")
-
-        assert_raise(ArgumentError,"Allowed multicharactered short names.") do
-            element = CElement.new :short => "no", :desc => "anything"
-        end
-    end
-
-    # Test to make sure that no two celements have the same short name
-    def test_celement_short_name_not_duplicated
-        config = mkconfig
-        assert_nothing_raised("Could not create celement with short name.") do
-            config.setdefaults(:main,
-                               :one => { :default => "blah", :desc => "anything", :short => "o" })
-        end
-        assert_nothing_raised("Could not create second celement with short name.") do
-            config.setdefaults(:main,
-                               :two => { :default => "blah", :desc => "anything", :short => "i" })
-        end
-        assert_raise(ArgumentError, "Could create second celement with duplicate short name.") do
-            config.setdefaults(:main,
-                               :three => { :default => "blah", :desc => "anything", :short => "i" })
-        end
-        # make sure that when the above raises an expection that the config is not included
-        assert(!config.include?(:three), "Invalid configuration item was retained")
-    end
-
-    # Tell getopt which arguments are valid
-    def test_get_getopt_args
-        element = CElement.new :name => "foo", :desc => "anything"
-        assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args")
-        
-        element.short = "n"
-        assert_equal([["--foo", "-n", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args")
-
-        element = CBoolean.new :name => "foo", :desc => "anything"
-        assert_equal([["--foo", GetoptLong::NO_ARGUMENT], ["--no-foo", GetoptLong::NO_ARGUMENT]],
-                     element.getopt_args, "Did not produce appropriate getopt args")
-
-        element.short = "n"
-        assert_equal([["--foo", "-n", GetoptLong::NO_ARGUMENT],["--no-foo", GetoptLong::NO_ARGUMENT]],
-                      element.getopt_args, "Did not produce appropriate getopt args")
-    end
-end
-
diff --git a/test/util/storage.rb b/test/util/storage.rb
deleted file mode 100755
index 5634a94..0000000
--- a/test/util/storage.rb
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppet'
-require 'puppettest'
-
-class TestStorage < Test::Unit::TestCase
-	include PuppetTest
-
-    def mkfile
-        path = tempfile()
-        File.open(path, "w") { |f| f.puts :yayness }
-
-        f = Puppet.type(:file).create(
-            :name => path,
-            :check => %w{checksum type}
-        )
-
-        return f
-    end
-
-    def test_storeandretrieve
-        path = tempfile()
-
-        f = mkfile()
-
-        # Load first, since that's what we do in the code base; this creates
-        # all of the necessary directories.
-        assert_nothing_raised {
-            Puppet::Util::Storage.load
-        }
-
-        hash = {:a => :b, :c => :d}
-
-        state = nil
-        assert_nothing_raised {
-            state = Puppet::Util::Storage.cache(f)
-        }
-
-        assert(!state.include?("name"))
-
-        assert_nothing_raised {
-            state["name"] = hash
-        }
-
-        assert_nothing_raised {
-            Puppet::Util::Storage.store
-        }
-        assert_nothing_raised {
-            Puppet::Util::Storage.clear
-        }
-        assert_nothing_raised {
-            Puppet::Util::Storage.load
-        }
-
-        # Reset it
-        state = nil
-        assert_nothing_raised {
-            state = Puppet::Util::Storage.cache(f)
-        }
-
-        assert_equal(state["name"], hash)
-    end
-
-    # we're getting corrupt files, probably because multiple processes
-    # are reading or writing the file at once
-    # so we need to test that
-    def test_multiwrite
-        f = mkfile()
-
-        value = {:a => :b}
-        threads = []
-        9.times { |a|
-            threads << Thread.new {
-                9.times { |b|
-                    assert_nothing_raised {
-                        Puppet::Util::Storage.load
-                        state = Puppet::Util::Storage.cache(f)
-                        value.each { |k,v| state[k] = v }
-                        state[:e] = rand(100)
-                        Puppet::Util::Storage.store
-                    }
-                }
-            }
-        }
-        threads.each { |th| th.join }
-    end
-
-    def test_emptyrestore
-        Puppet::Util::Storage.load
-        Puppet::Util::Storage.store
-        Puppet::Util::Storage.clear
-        Puppet::Util::Storage.load
-
-        f = mkfile()
-        state = Puppet::Util::Storage.cache(f)
-        assert_same Hash, state.class
-        assert_equal 0, state.size
-    end
-    
-    def test_caching
-        hash = nil
-        one = Puppet::Type.type(:exec).create :title => "/bin/echo one"
-        [one, :yayness].each do |object|
-            assert_nothing_raised do
-                hash = Puppet::Util::Storage.cache(object)
-            end
-            assert_equal({}, hash, "Did not get empty hash back for %s" % object)
-        
-            hash[:testing] = true
-            assert_nothing_raised do
-                hash = Puppet::Util::Storage.cache(object)
-            end
-            assert_equal({:testing => true}, hash, "Did not get hash back for %s" % object)
-        end
-        assert_raise(ArgumentError, "was able to cache from string") do
-            Puppet::Util::Storage.cache("somethingelse")
-        end
-    end
-end
-
diff --git a/test/util/subclass_loader.rb b/test/util/subclass_loader.rb
deleted file mode 100755
index 34b8803..0000000
--- a/test/util/subclass_loader.rb
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'puppet/util/subclass_loader'
-
-class TestPuppetUtilSubclassLoader < Test::Unit::TestCase
-    include PuppetTest
-
-    class LoadTest
-        extend Puppet::Util::SubclassLoader
-        handle_subclasses :faker, "puppet/fakeloaders"
-    end
-
-    def mk_subclass(name, path, parent)
-        # Make a fake client
-        unless defined? @basedir
-            @basedir ||= tempfile()
-            $: << @basedir
-            cleanup { $:.delete(@basedir) if $:.include?(@basedir) }
-        end
-
-        libdir = File.join([@basedir, path.split(File::SEPARATOR)].flatten)
-        FileUtils.mkdir_p(libdir)
-
-        file = File.join(libdir, "#{name}.rb")
-        File.open(file, "w") do |f|
-            f.puts %{class #{parent}::#{name.to_s.capitalize} < #{parent}; end}
-        end
-    end
-
-    def test_subclass_loading
-        # Make sure we don't get a failure but that we also get nothing back
-        assert_nothing_raised do
-            assert_nil(LoadTest.faker(:fake),
-                "Got something back from a missing subclass")
-            assert_nil(LoadTest.fake,
-                "Got something back from missing subclass method")
-        end
-        # Make a fake client
-        mk_subclass("fake", "puppet/fakeloaders", "TestPuppetUtilSubclassLoader::LoadTest")
-
-
-        fake = nil
-        assert_nothing_raised do
-            fake = LoadTest.faker(:fake)
-        end
-        assert_nothing_raised do
-            assert_equal(fake, LoadTest.fake,
-                "Did not get subclass back from main method")
-        end
-        assert(fake, "did not load subclass")
-
-        # Now make sure the subclass behaves correctly
-        assert_equal(:Fake, fake.name, "name was not calculated correctly")
-    end
-
-    def test_multiple_subclasses
-        sub1 = Class.new(LoadTest)
-        Object.const_set("Sub1", sub1)
-        sub2 = Class.new(sub1)
-        Object.const_set("Sub2", sub2)
-        assert_equal(sub2, LoadTest.sub2, "did not get subclass of subclass")
-    end
-
-    # I started out using a class variable to mark the loader,
-    # but it's shared among all classes that include this module,
-    # so it didn't work.  This is testing whether I get the behaviour
-    # that I want.
-    def test_multiple_classes_using_module
-        other = Class.new do
-            extend Puppet::Util::SubclassLoader
-            handle_subclasses :other, "puppet/other"
-        end
-        Object.const_set("OtherLoader", other)
-
-        mk_subclass("multipletest", "puppet/other", "OtherLoader")
-        mk_subclass("multipletest", "puppet/fakeloaders", "TestPuppetUtilSubclassLoader::LoadTest")
-        #system("find %s" % @basedir)
-        #puts File.read(File.join(@basedir, "puppet/fakeloaders/multipletest.rb"))
-        #puts File.read(File.join(@basedir, "puppet/other/multipletest.rb"))
-
-        othersub = mainsub = nil
-        assert_nothing_raised("Could not look up other sub") do
-            othersub = OtherLoader.other(:multipletest)
-        end
-        assert_nothing_raised("Could not look up main sub") do
-            mainsub = LoadTest.faker(:multipletest)
-        end
-        assert(othersub, "did not get other sub")
-        assert(mainsub, "did not get main sub")
-        assert(othersub.ancestors.include?(OtherLoader),
-            "othersub is not a subclass of otherloader")
-        assert(mainsub.ancestors.include?(LoadTest),
-            "mainsub is not a subclass of loadtest")
-    end
-end
-
diff --git a/test/util/utiltest.rb b/test/util/utiltest.rb
deleted file mode 100755
index 35e1446..0000000
--- a/test/util/utiltest.rb
+++ /dev/null
@@ -1,287 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../lib/puppettest'
-
-require 'puppettest'
-require 'mocha'
-
-class TestPuppetUtil < Test::Unit::TestCase
-    include PuppetTest
-
-    # we're getting corrupt files, probably because multiple processes
-    # are reading or writing the file at once
-    # so we need to test that
-    def test_multiwrite
-        file = tempfile()
-        File.open(file, "w") { |f| f.puts "starting" }
-
-        value = {:a => :b}
-        threads = []
-        sync = Sync.new
-        9.times { |a|
-            threads << Thread.new {
-                9.times { |b|
-                    assert_nothing_raised {
-                        sync.synchronize(Sync::SH) {
-                            Puppet::Util.readlock(file) { |f|
-                                f.read
-                            }
-                        }
-                        sleep 0.01
-                        sync.synchronize(Sync::EX) {
-                            Puppet::Util.writelock(file) { |f|
-                                f.puts "%s %s" % [a, b]
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        threads.each { |th| th.join }
-    end
-
-
-    def test_withumask
-        oldmask = File.umask
-
-        path = tempfile()
-
-        # FIXME this fails on FreeBSD with a mode of 01777
-        Puppet::Util.withumask(000) do
-            Dir.mkdir(path, 0777)
-        end
-
-        assert(File.stat(path).mode & 007777 == 0777, "File has the incorrect mode")
-        assert_equal(oldmask, File.umask, "Umask was not reset")
-    end
-
-    def test_benchmark
-        path = tempfile()
-        str = "yayness"
-        File.open(path, "w") do |f| f.print "yayness" end
-
-        # First test it with the normal args
-        assert_nothing_raised do
-            val = nil
-            result = Puppet::Util.benchmark(:notice, "Read file") do
-                val = File.read(path)
-            end
-
-            assert_equal(str, val)
-
-            assert_instance_of(Float, result)
-
-        end
-
-        # Now test it with a passed object
-        assert_nothing_raised do
-            val = nil
-            Puppet::Util.benchmark(Puppet, :notice, "Read file") do
-                val = File.read(path)
-            end
-
-            assert_equal(str, val)
-        end
-    end
-
-    def test_proxy
-        klass = Class.new do
-            attr_accessor :hash
-            class << self
-                attr_accessor :ohash
-            end
-        end
-        klass.send(:include, Puppet::Util)
-
-        klass.ohash = {}
-
-        inst = klass.new
-        inst.hash = {}
-        assert_nothing_raised do
-            Puppet::Util.proxy klass, :hash, "[]", "[]=", :clear, :delete
-        end
-
-        assert_nothing_raised do
-            Puppet::Util.classproxy klass, :ohash, "[]", "[]=", :clear, :delete
-        end
-
-        assert_nothing_raised do
-            inst[:yay] = "boo"
-            inst["cool"] = :yayness
-        end
-
-        [:yay, "cool"].each do |var|
-            assert_equal(inst.hash[var], inst[var],
-                        "Var %s did not take" % var)
-        end
-
-        assert_nothing_raised do
-            klass[:Yay] = "boo"
-            klass["Cool"] = :yayness
-        end
-
-        [:Yay, "Cool"].each do |var|
-            assert_equal(inst.hash[var], inst[var],
-                        "Var %s did not take" % var)
-        end
-    end
-
-    def test_symbolize
-        ret = nil
-        assert_nothing_raised {
-            ret = Puppet::Util.symbolize("yayness")
-        }
-
-        assert_equal(:yayness, ret)
-
-        assert_nothing_raised {
-            ret = Puppet::Util.symbolize(:yayness)
-        }
-
-        assert_equal(:yayness, ret)
-
-        assert_nothing_raised {
-            ret = Puppet::Util.symbolize(43)
-        }
-
-        assert_equal(43, ret)
-
-        assert_nothing_raised {
-            ret = Puppet::Util.symbolize(nil)
-        }
-
-        assert_equal(nil, ret)
-    end
-    
-    def test_execute
-        command = tempfile()
-        File.open(command, "w") { |f|
-            f.puts %{#!/bin/sh\n/bin/echo "$1">&1; echo "$2">&2}
-        }
-        File.chmod(0755, command)
-        output = nil
-        assert_nothing_raised do
-            output = Puppet::Util.execute([command, "yaytest", "funtest"])
-        end
-        assert_equal("yaytest\nfuntest\n", output)
-        
-        # Now try it with a single quote
-        assert_nothing_raised do
-            output = Puppet::Util.execute([command, "yay'test", "funtest"])
-        end
-        assert_equal("yay'test\nfuntest\n", output)
-        
-        # Now make sure we can squelch output (#565)
-        assert_nothing_raised do
-            output = Puppet::Util.execute([command, "yay'test", "funtest"], :squelch => true)
-        end
-        assert_equal(nil, output)
-
-        # Now test that we correctly fail if the command returns non-zero
-        assert_raise(Puppet::ExecutionFailure) do
-            out = Puppet::Util.execute(["touch", "/no/such/file/could/exist"])
-        end
-        
-        # And that we can tell it not to fail
-        assert_nothing_raised() do
-            out = Puppet::Util.execute(["touch", "/no/such/file/could/exist"], :failonfail => false)
-        end
-        
-        if Process.uid == 0
-            # Make sure we correctly set our uid and gid
-            user = nonrootuser
-            group = nonrootgroup
-            file = tempfile()
-            assert_nothing_raised do
-                Puppet::Util.execute(["touch", file], :uid => user.name, :gid => group.name)
-            end
-            assert(FileTest.exists?(file), "file was not created")
-            assert_equal(user.uid, File.stat(file).uid, "uid was not set correctly")
-            
-            # We can't really check the gid, because it just behaves too
-            # inconsistently everywhere.
-            # assert_equal(group.gid, File.stat(file).gid,
-            #    "gid was not set correctly")
-        end
-        
-        # (#565) Test the case of patricide.
-        patricidecommand = tempfile()
-        File.open(patricidecommand, "w") { |f|
-            f.puts %{#!/bin/bash\n/bin/bash -c 'kill -TERM \$PPID' &;\n while [ 1 ]; do echo -n ''; done;\n}
-        }
-        File.chmod(0755, patricidecommand)
-        assert_nothing_raised do
-            output = Puppet::Util.execute([patricidecommand], :squelch => true)
-        end
-        assert_equal(nil, output)
-        # See what happens if we try and read the pipe to the command...
-        assert_raise(Puppet::ExecutionFailure) do
-            output = Puppet::Util.execute([patricidecommand])
-        end
-        assert_nothing_raised do
-            output = Puppet::Util.execute([patricidecommand], :failonfail => false)
-        end
-    end
-
-    def test_lang_environ_in_execute
-      orig_lang = ENV["LANG"]
-      orig_lc_all = ENV["LC_ALL"]
-      orig_lc_messages = ENV["LC_MESSAGES"]
-      orig_language = ENV["LANGUAGE"]
-
-      cleanup do
-          ENV["LANG"] = orig_lang
-          ENV["LC_ALL"] = orig_lc_all
-          ENV["LC_MESSAGES"] = orig_lc_messages
-          ENV["LANGUAGE"] = orig_lc_messages
-      end
-      
-      # Mmm, we love gettext(3)
-      ENV["LANG"] = "en_US"
-      ENV["LC_ALL"] = "en_US"
-      ENV["LC_MESSAGES"] = "en_US"
-      ENV["LANGUAGE"] = "en_US"
-
-      %w{LANG LC_ALL LC_MESSAGES LANGUAGE}.each do |env|
-        assert_equal('C',
-                     Puppet::Util.execute(['ruby', '-e', "print ENV['#{env}']"]),
-                     "Environment var #{env} wasn't set to 'C'")
-        
-        assert_equal 'en_US', ENV[env], "Environment var #{env} not set back correctly"
-      end
-
-    end
-    
-    # Check whether execute() accepts strings in addition to arrays.
-    def test_string_exec
-        cmd = "/bin/echo howdy"
-        output = nil
-        assert_raise(ArgumentError) {
-            output = Puppet::Util.execute(cmd)
-        }
-        #assert_equal("howdy\n", output)
-        #assert_raise(RuntimeError) {
-        #    Puppet::Util.execute(cmd, 0, 0)
-        #}
-    end
-
-    # This is mostly to test #380.
-    def test_get_provider_value
-        group = Puppet::Type.type(:group).create :name => "yayness", :ensure => :present
-        
-        root = Puppet::Type.type(:user).create :name => "root", :ensure => :present
-        
-        val = nil
-        assert_nothing_raised do
-            val = Puppet::Util.get_provider_value(:group, :gid, "yayness")
-        end
-        assert_nil(val, "returned a value on a missing group")
-        
-        # Now make sure we get a value for one we know exists
-        assert_nothing_raised do
-            val = Puppet::Util.get_provider_value(:user, :uid, "root")
-        end
-        assert_equal(0, val, "got invalid uid for root")
-    end
-end
-

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list