summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-07-21 19:05:30 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-07-21 19:05:30 +0000
commit039abd6d792dd99bf5c1ad272c4f841f80ea5642 (patch)
treece8d374a9c1d948bee74d747ee24e7f918f7c8ae
parent2091eddc4e53cb2e16646081b3bb64e1342858f8 (diff)
downloadpuppet-039abd6d792dd99bf5c1ad272c4f841f80ea5642.tar.gz
puppet-039abd6d792dd99bf5c1ad272c4f841f80ea5642.tar.xz
puppet-039abd6d792dd99bf5c1ad272c4f841f80ea5642.zip
Fixing #176. You can now do duplicate UIDs (or GIDs on most platforms) with :allowdupe.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1416 980ebf18-57e1-0310-9a29-db15c13687c0
-rwxr-xr-xlib/puppet/type/group.rb8
-rw-r--r--lib/puppet/type/nameservice/objectadd.rb33
-rw-r--r--lib/puppet/type/nameservice/pw.rb19
-rwxr-xr-xlib/puppet/type/user.rb8
-rwxr-xr-xtest/types/group.rb30
-rwxr-xr-xtest/types/user.rb25
6 files changed, 110 insertions, 13 deletions
diff --git a/lib/puppet/type/group.rb b/lib/puppet/type/group.rb
index 008645f5c..b2c5161cf 100755
--- a/lib/puppet/type/group.rb
+++ b/lib/puppet/type/group.rb
@@ -171,6 +171,14 @@ module Puppet
isnamevar
end
+ newparam(:allowdupe) do
+ desc "Whether to allow duplicate GIDs."
+
+ newvalues(:true, :false)
+
+ defaultto false
+ end
+
# List all groups
def self.listbyname
groups = []
diff --git a/lib/puppet/type/nameservice/objectadd.rb b/lib/puppet/type/nameservice/objectadd.rb
index f9f782e40..f9b05f4a2 100644
--- a/lib/puppet/type/nameservice/objectadd.rb
+++ b/lib/puppet/type/nameservice/objectadd.rb
@@ -65,6 +65,9 @@ module Puppet
cmd << @parent.state(:gid).class.objectaddflag << gid
end
end
+ if @parent[:allowdupe] == :true
+ cmd << "-o"
+ end
cmd << @parent[:name]
return cmd.join(" ")
@@ -75,12 +78,15 @@ module Puppet
end
def modifycmd
- [
- "groupmod",
+ cmd = ["groupmod",
self.class.objectaddflag,
- "'%s'" % self.should,
- @parent[:name]
- ].join(" ")
+ "'%s'" % self.should]
+ if @parent[:allowdupe] == :true
+ cmd << "-o"
+ end
+ cmd << @parent[:name]
+
+ return cmd.join(" ")
end
end
@@ -110,6 +116,10 @@ module Puppet
cmd << "-M"
else
end
+ if @parent[:allowdupe] == :true
+ cmd << "-o"
+ end
+
cmd << @parent[:name]
cmd.join(" ")
@@ -120,12 +130,15 @@ module Puppet
end
def modifycmd
- cmd = [
- "usermod",
+ cmd = ["usermod",
self.class.objectaddflag,
- "'%s'" % self.should,
- @parent[:name]
- ].join(" ")
+ "'%s'" % self.should]
+ if @parent[:allowdupe] == :true
+ cmd << "-o"
+ end
+ cmd << @parent[:name]
+
+ return cmd.join(" ")
end
end
end
diff --git a/lib/puppet/type/nameservice/pw.rb b/lib/puppet/type/nameservice/pw.rb
index 4f2a1c7b2..63d5e2e50 100644
--- a/lib/puppet/type/nameservice/pw.rb
+++ b/lib/puppet/type/nameservice/pw.rb
@@ -37,6 +37,12 @@ module Puppet
end
end
+ # Apparently, contrary to the man page, groupadd does
+ # not accept -o.
+ #if @parent[:allowdupe] == :true
+ # cmd << "-o"
+ #end
+
return cmd.join(" ")
end
@@ -45,13 +51,14 @@ module Puppet
end
def modifycmd
- [
+ cmd = [
"pw",
"groupmod",
@parent[:name],
self.class.objectaddflag,
"'%s'" % self.should
- ].join(" ")
+ ]
+ return cmd.join(" ")
end
end
@@ -71,6 +78,10 @@ module Puppet
cmd << "-M"
end
+ if @parent[:allowdupe] == :true
+ cmd << "-o"
+ end
+
cmd.join(" ")
end
@@ -86,7 +97,9 @@ module Puppet
"-w", "no",
self.class.objectaddflag,
"'%s'" % self.should
- ].join(" ")
+ ]
+
+ return cmd.join(" ")
end
end
end
diff --git a/lib/puppet/type/user.rb b/lib/puppet/type/user.rb
index 1e902db47..4aec9efc3 100755
--- a/lib/puppet/type/user.rb
+++ b/lib/puppet/type/user.rb
@@ -331,6 +331,14 @@ module Puppet
defaultto :minimum
end
+ newparam(:allowdupe) do
+ desc "Whether to allow duplicate UIDs."
+
+ newvalues(:true, :false)
+
+ defaultto false
+ end
+
@doc = "Manage users. Currently can create and modify users, but
cannot delete them. Theoretically all of the parameters are
optional, but if no parameters are specified the comment will
diff --git a/test/types/group.rb b/test/types/group.rb
index 61edeb771..cb9b988ed 100755
--- a/test/types/group.rb
+++ b/test/types/group.rb
@@ -28,6 +28,16 @@ class TestGroup < Test::Unit::TestCase
super
end
+ def mkgroup(name, hash = {})
+ group = nil
+ hash[:name] = name
+ assert_nothing_raised {
+ group = Puppet.type(:group).create(hash)
+ }
+
+ return group
+ end
+
case Facter["operatingsystem"].value
when "Darwin":
def missing?(group)
@@ -287,6 +297,26 @@ class TestGroup < Test::Unit::TestCase
assert(missing?(name), "Group %s is still present" % name)
end
+
+ # groupadd -o is broken in FreeBSD.
+ unless Facter["operatingsystem"].value == "FreeBSD"
+ def test_duplicateIDs
+ group1 = mkgroup("group1", :gid => 125)
+ group2 = mkgroup("group2", :gid => 125)
+
+ assert_apply(group1)
+
+ # 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 {
+ group2[:allowdupe] = true
+ }
+ assert_apply(group2)
+ group2.retrieve
+ assert_equal(:present, group2.state(:ensure).is,
+ "Group did not get created")
+ end
+ end
else
$stderr.puts "Not running as root; skipping group creation tests."
end
diff --git a/test/types/user.rb b/test/types/user.rb
index 6f34da76f..84a5b577b 100755
--- a/test/types/user.rb
+++ b/test/types/user.rb
@@ -531,6 +531,31 @@ class TestUser < Test::Unit::TestCase
user[:ensure] = :absent
assert_apply(user)
end
+
+ def test_duplicateIDs
+ user1 = mkuser("user1")
+ user1[:uid] = 125
+ user2 = mkuser("user2")
+ user2[:uid] = 125
+
+ cleanup do
+ user1[:ensure] = :absent
+ user2[:ensure] = :absent
+ assert_apply(user1, user2)
+ end
+
+ assert_apply(user1)
+
+ # 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[:allowdupe] = true
+ }
+ assert_apply(user2)
+ user2.retrieve
+ assert_equal(:present, user2.state(:ensure).is,
+ "User did not get created")
+ end
else
$stderr.puts "Not root; skipping user creation/modification tests"
end