summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorNick Lewis <nick@puppetlabs.com>2011-08-09 13:04:25 -0700
committerJacob Helwig <jacob@puppetlabs.com>2011-08-19 13:52:59 -0700
commit4f7170a0fd7d77d7d9941001cdb7dbcb0662d6b4 (patch)
tree7040d63c6c64078bd3daaa4eaafc4795a3f23d6b /lib
parentf19a0ea8c12c06bb01ddfe53e47e3a02ae87bdbb (diff)
downloadpuppet-4f7170a0fd7d77d7d9941001cdb7dbcb0662d6b4.tar.gz
puppet-4f7170a0fd7d77d7d9941001cdb7dbcb0662d6b4.tar.xz
puppet-4f7170a0fd7d77d7d9941001cdb7dbcb0662d6b4.zip
(#8408) Add a default user provider for Windows
This provider, windows_adsi, uses the Puppet::Util::ADSI module to manage users. It can currently only manage group memberships, comments, and home directories, which are the only fields that can be managed via ADSI. Based on work by: Joel Rosario <joel.r@.internal.directi.com> Based on work by: Cameron Thomas <cameron@puppetlabs.com> Reviewed-By: Matt Robinson <matt@puppetlabs.com> (cherry picked from commit ac00e9e289f8fdc81f060e7dd289e1a8e0f133c0)
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/provider/user/windows_adsi.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/puppet/provider/user/windows_adsi.rb b/lib/puppet/provider/user/windows_adsi.rb
new file mode 100644
index 000000000..9250def59
--- /dev/null
+++ b/lib/puppet/provider/user/windows_adsi.rb
@@ -0,0 +1,71 @@
+require 'puppet/util/adsi'
+
+Puppet::Type.type(:user).provide :windows_adsi do
+ desc "User management for Windows"
+
+ defaultfor :operatingsystem => :windows
+ confine :operatingsystem => :windows
+ confine :feature => :microsoft_windows
+
+ has_features :manages_homedir
+
+ def user
+ @user ||= Puppet::Util::ADSI::User.new(@resource[:name])
+ end
+
+ def groups
+ user.groups.join(',')
+ end
+
+ def groups=(groups)
+ user.set_groups(groups, @resource[:membership] == :minimum)
+ end
+
+ def create
+ @user = Puppet::Util::ADSI::User.create(@resource[:name])
+ [:comment, :home, :groups].each do |prop|
+ send("#{prop}=", @resource[prop]) if @resource[prop]
+ end
+ end
+
+ def exists?
+ Puppet::Util::ADSI::User.exists?(@resource[:name])
+ end
+
+ def delete
+ Puppet::Util::ADSI::User.delete(@resource[:name])
+ end
+
+ # Only flush if we created or modified a user, not deleted
+ def flush
+ @user.commit if @user
+ end
+
+ def comment
+ user['Description']
+ end
+
+ def comment=(value)
+ user['Description'] = value
+ end
+
+ def home
+ user['HomeDirectory']
+ end
+
+ def home=(value)
+ user['HomeDirectory'] = value
+ end
+
+ [:uid, :gid, :shell].each do |prop|
+ define_method(prop) { nil }
+
+ define_method("#{prop}=") do |v|
+ warning "No support for managing property #{prop} of user #{@resource[:name]} on Windows"
+ end
+ end
+
+ def self.instances
+ Puppet::Util::ADSI::User.map { |u| new(:ensure => :present, :name => u.name) }
+ end
+end