Make envpuppet run under sh
Revert "Revert "Merge branch 'stschulte-ticket/master/fixup_expiry'""

This reverts commit 1ddcb5e511e131645cfa89305784f66427374287.

Conflicts:
    spec/unit/provider/user/useradd_spec.rb

The original commit "Merge branch
'stschulte-ticket/master/fixup_expiry'" was reverted because it caused
failures on ruby 1.8 because Date.next_day and Date.prev_day are not
public in ruby 1.8 (will the methods are publicly available in ruby 1.9)

Revert the revert and reinstall the original commit to be able to fix
the issues.
Fix user expiry failures on ruby 1.8

Date.next_day is private on ruby 1.8 while it is public on ruby 1.9

Convert the expiry to a date in a different way that works both on ruby
1.8.7 and ruby 1.9
Fix user expiry on Solaris

The useradd provider can manage the expiry of a user account. To remove
an expiry you can use `usermod -e '' alice` and on Solaris the man page
states that providing `' '` would cause usermod to remove the expiry.
This happens to be not true at least on Solaris 10 so treat Linux and
Solaris the same.

However setting the expiry date to a real date is different on Solaris.
While Linux only accepts the date in the format YYYY-MM-DD, Solaris
accepts multiple different formats but %Y-%m-%d is not one of them. So
use the format %m/%d%/%Y when on Solaris which is also used in the useradd
manpage (and did work on test box)
Merge branch 'stschulte-ticket/master/user_expiry_solaris'd closes #1424

* stschulte-ticket/master/user_expiry_solaris:
  Fix user expiry on Solaris
  Fix user expiry failures on ruby 1.8
  Revert "Revert "Merge branch 'stschulte-ticket/master/fixup_expiry'""
(#1424) Make Struct::Passwd more platform agnostic

The nameservice_spec was failing with `ArgumentError: struct size
differs` on Windows, because the initialize method for Struct::Passwd
takes different sets of arguments depending on flags set when ruby was
compiled, e.g. HAVE_ST_PW_GECOS, HAVE_ST_PW_CHANGE, etc.

This commit modifies the test to create a Struct::Passwd object using
the 4 mandatory fields: name, password, uid, gid. Since the other
optional fields weren't used in the test, this seems like the safest
approach.

This commit also excludes the test that relies on Struct::Group, because
that class only exists if HAVE_GETGRENT is defined at compile time. This
commit skips the test when run on windows.
Merge remote-tracking branch 'upstream/master'