I refactored the password/min_age/max_age methods into a common base method,
and added a test for it. My patch for that follows.
---
lib/puppet/provider/user/user_role_add.rb | 23
+++++++++--------------
spec/unit/provider/user/user_role_add_spec.rb | 7 +++++++
2 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/lib/puppet/provider/user/user_role_add.rb
b/lib/puppet/provider/user/user_role_add.rb
index dd91de3..7e7ad78 100644
--- a/lib/puppet/provider/user/user_role_add.rb
+++ b/lib/puppet/provider/user/user_role_add.rb
@@ -143,28 +143,23 @@ Puppet::Type.type(:user).provide :user_role_add,
:parent => :useradd, :source =>
run([command(:modify)] + build_keys_cmd(keys_hash) << @resource[:name],
"modify attribute key pairs")
end
- #Read in /etc/shadow, find the line for this user (skipping comments,
because who knows) and return the hashed pw (the second entry)
+ #Read in /etc/shadow, find the line for this user (skipping comments,
because who knows) and return it
#No abstraction, all esoteric knowledge of file formats, yay
+ def shadow_entry
+ return @shadow_entry if defined? @shadow_entry
+ @shadow_entry = File.readlines("/etc/shadow").reject { |r| r =~
/^[^\w]/ }.collect { |l| l.chomp.split(':') }.find { |user, _| user ==
@resource[:name] }
+ end
+
def password
- #got perl?
- if ary = File.readlines("/etc/shadow").reject { |r| r =~
/^[^\w]/}.collect { |l| l.split(':')[0..1] }.find { |user, passwd| user ==
@resource[:name] }
- pass = ary[1]
- end
- pass
+ shadow_entry[1] if shadow_entry
end
def min_age
- if ary = File.readlines("/etc/shadow").reject { |r| r =~
/^[^\w]/}.collect { |l| l.split(':')[0..3] }.find { |user, _, _, minage|
user == @resource[:name] }
- minage = ary[3]
- end
- :absent
+ shadow_entry ? shadow_entry[3] : :absent
end
def max_age
- if ary = File.readlines("/etc/shadow").reject { |r| r =~
/^[^\w]/}.collect { |l| l.split(':')[0..3] }.find { |user, _, _, _, maxage|
user == @resource[:name] }
- maxage = ary[4]
- end
- :absent
+ shadow_entry ? shadow_entry[4] : :absent
end
#Read in /etc/shadow, find the line for our used and rewrite it with the
new pw
diff --git a/spec/unit/provider/user/user_role_add_spec.rb
b/spec/unit/provider/user/user_role_add_spec.rb
index 298ac22..82c06a5 100644
--- a/spec/unit/provider/user/user_role_add_spec.rb
+++ b/spec/unit/provider/user/user_role_add_spec.rb
@@ -256,4 +256,11 @@ describe provider_class do
@provider.password=("hashedpassword")
end
end
+
+ describe "#shadow_entry" do
+ it "should return the line for the right user" do
+ File.stubs(:readlines).returns(["someuser:!:10:5:20:7:1::\n",
"fakeval:*:20:10:30:7:2::\n", "testuser:*:30:15:40:7:3::\n"])
+ @provider.shadow_entry.should == ["fakeval", "*", "20", "10", "30",
"7", "2"]
+ end
+ end
end
--
1.7.2.1
--
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en.