From 435139e42ac6e93c314a31451e27beb3b6ff5c78 Mon Sep 17 00:00:00 2001
From: Dean Wilson <dean.wilson@gmail.com>
Date: Thu, 26 Aug 2010 15:53:51 +0100
Subject: [PATCH] Add user expiry handling to useradd provider

---
 lib/puppet/provider/user/useradd.rb |   11 ++++++++++-
 lib/puppet/type/user.rb             |   14 ++++++++++++++
 2 files changed, 24 insertions(+), 1 deletions(-)

diff --git a/lib/puppet/provider/user/useradd.rb b/lib/puppet/provider/user/useradd.rb
index 15b3b13..2e97512 100644
--- a/lib/puppet/provider/user/useradd.rb
+++ b/lib/puppet/provider/user/useradd.rb
@@ -17,7 +17,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
         value !~ /\s/
     end
 
-    has_features :manages_homedir, :allows_duplicates
+    has_features :manages_homedir, :allows_duplicates, :manages_expiry
 
     if Puppet.features.libshadow?
         has_feature :manages_passwords
@@ -37,6 +37,14 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
         cmd
     end
 
+    def check_manage_expiry
+        cmd = []
+        if @resource[:expiry]
+           cmd << "-e #{@resource[:expiry]}"
+        end
+        cmd
+    end
+
     def add_properties
         cmd = []
         Puppet::Type.type(:user).validproperties.each do |property|
@@ -55,6 +63,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
         cmd += add_properties
         cmd += check_allow_dup
         cmd += check_manage_home
+        cmd += check_manage_expiry
         cmd << @resource[:name]
     end
 
diff --git a/lib/puppet/type/user.rb b/lib/puppet/type/user.rb
index 2b082ee..ae4a57d 100755
--- a/lib/puppet/type/user.rb
+++ b/lib/puppet/type/user.rb
@@ -27,6 +27,9 @@ module Puppet
         feature :manages_solaris_rbac,
             "The provider can manage roles and normal users"
 
+        feature :manages_expiry,
+            "The provider can manage the expiry date for a user."
+
         newproperty(:ensure, :parent => Puppet::Property::Ensure) do
             newvalue(:present, :event => :user_created) do
                 provider.create
@@ -198,6 +201,17 @@ module Puppet
             defaultto false
         end
 
+        newparam(:expiry) do
+            desc "The expiry date for this user. Must be provided in
+                  a zero padded YYYY-MM-DD format - e.g 2010-02-19."
+
+            validate do |value|
+                if value !~ /^\d{4}-\d{2}-\d{2}$/
+                    raise ArgumentError, "Expiry dates must be YYYY-MM-DD"
+                end
+            end
+        end
+
         newparam(:managehome, :boolean => true) do
             desc "Whether to manage the home directory when managing the user."
 
-- 
1.5.5.6

