(PUP-1069) Implement feature :upgradeable for OpenBSD package provider.
(PUP-2399) Add mailalias acceptance tests

Add basic acceptance tests for mailalias type. This adds acceptance
tests for create, query, modify, and destroy.

The tests assume that the mailalias type manages the default
/etc/aliases text file as well as updating the binary database
that the aliases file is the source for.
(PUP-2399) Remove testing of newaliases

As per PUP-1143, the mailalias type does not manage the state of
the aliases.db file via 'newaliases', 'sendmail -bi', or any other
mechanism due to compatibility issues. Since this is the case,
all testing of the aliases.db file have been removed from the
mailaliases tests in this commit.
(PUP-121) Make include, require, and contain enforce non relative names

This makes include, require, and contain functions transform
relative names to absolute names before doing any lookup.

The transformation is controlled by a metho on scope that is
always called, and that performs the transformation when Puppet[:parser]
== future. This design was selected to ensure that there is one place to
later change (other flags, or in Puppet 4 when the future will
be something else).
(maint) Change dev-puppet-master script not to log debug and trace

It is more useful to set this yourself when calling the script,
depending on whether you want --verbose or --debug and/or --trace.
So just:

$ util/dev-puppet-master foo --debug --trace

Also fixed copying of auth.conf (from basic case running script from
repository root).
(PUP-121) Add more tests, doc, and correct behavior

This generalizes the "make names absolute" to a transformation
of given arguments to class names strings suitable for lookup, and
also applying the transformation to Class and Resource reference types.
(PUP-121) Make examples for relative/absolute shared

This makes the examples that test include, require, contain
share the same tests.

This also adds one missing error condition.
(PUP-121) Improve documentation of include, require and contain
(PUP-2622) Use non-zero exit codes for unknown subcommands.

Previously, if users execute 'puppet foo', an error message is displayed
about unknown subcommand 'foo', but puppet still exits with a zero exit
code indicating success.

Additionally, if users execute 'puppet --option <valid_subcommand>',
puppet silently ignores the option, prints a message, and exits with a
zero exit code.  As a result, a user accidentally transposed a valid
option for a subcommand with the subcommand itself in an automated context
and puppet did not report a failure.

This commit fixes both conditions by exiting with 1 from the nil and unknown
subcommands where appropriate.  It also prints error messages using the same
colorized output we use for usual puppet errors.
(PUP-2569) Revoke all certificate matching a given name

puppet cert revoke <name> was revoking only the first certificate
when the certificate file wasn't present on the system.
This patch makes sure all issued certificate matching a given name
are now revoked.

Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
(maint) Reduce redundancy in Puppet::Util::Posix

Before this commit `Puppet::Util::Posix` had duplicate error
handling code for retrieving the actual ID, either of a group or
user. This commit refactors those two methods to abstract away
the location of the source of truth, either the `group` file
or the `passwd` file, and the logic for handling whether or not
a numeric ID or a name was passed in.
(PUP-121) Fix typo
(PUP-121) Make Puppet::Resource work in transform_and_assert_classname

The type system types are transformed to 3x API Puppet::Resource
long before the functions call back to transform_and_assert_classname
and this functions also needs to handle Puppet::Resource.
(PUP-121) Ensure classes are absolute when transforming to Resource

When the 3x to 4x calls take place, resource references in the form
of a PCatalogEntryType are transformed to Puppet::Resource.
Depending on where these (reference) Puppet::Resource instances are
used they need to either be absolute, or not (yes, 3x is inconsistent).

Since future parser in 3.7 (and later 4.0) will not support dynamic
name scoping, the PCatalogEntryType's should in general be absolute.

This commit changes the transformation to make the created
Puppet::Resource (references) absolute (when it is possible).

This also adds more tests
(PUP-121) Change transformation of CatalogEntryType to not be absolute

The attempt to make all catalogEntryTypes absolute did not
work out so great as the lower level APIs in 3x expect non :: prefixed
names to be absolute.

This changes the transformation made in the evaluator to always use
"relative" names.
(PUP-121) Remove unused ability to enforce absolute type refs

This removes the unused ability in the evaluators transformation
to 3x for resources to also make the reference absolute.
Merge pull request #2738 from gchronis/maint/master/remove_duplication_from_posix_util

(maint) Reduce redundancy in Puppet::Util::Posix
Merge pull request #2558 from jasperla/openbsd/upgradeable

(PUP-1069) Implement feature :upgradeable for OpenBSD package provider.
(maint) Untangle fetching of serial numbers

The previous code contained a large number of assignments in passing
inside the conditional expressions. This caused it to need to use the
"and" operator, which should be reserved for control flow, to be used as
a boolean expression in order to avoid having the list of serial numbers
be a boolean as a result of precedence. This also resulted in the name
"serial" being used, when in fact it is now a collection of 0 or more
serial numbers. It also had the structure where the final array could
have been an array of arrays and so flatten needed to be used.

This straightens all of that out by ensuring that serials is always an
array and performing common error checking and handling of that.
Merge branch 'pr/2704'

* pr/2704:
  (maint) Untangle fetching of serial numbers
  (PUP-2569) Revoke all certificate matching a given name