microwave 0.1004.4 → 0.1004.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. data/README.rdoc +0 -3
  2. data/lib/chef/client.rb +2 -11
  3. data/lib/chef/platform.rb +1 -192
  4. data/lib/chef/providers.rb +0 -68
  5. data/lib/chef/resources.rb +0 -36
  6. data/lib/chef/version.rb +1 -1
  7. metadata +123 -239
  8. data/lib/chef/provider/breakpoint.rb +0 -31
  9. data/lib/chef/provider/cron.rb +0 -186
  10. data/lib/chef/provider/cron/solaris.rb +0 -195
  11. data/lib/chef/provider/deploy.rb +0 -343
  12. data/lib/chef/provider/deploy/revision.rb +0 -80
  13. data/lib/chef/provider/deploy/timestamped.rb +0 -33
  14. data/lib/chef/provider/env.rb +0 -152
  15. data/lib/chef/provider/env/windows.rb +0 -75
  16. data/lib/chef/provider/erl_call.rb +0 -101
  17. data/lib/chef/provider/git.rb +0 -243
  18. data/lib/chef/provider/group.rb +0 -133
  19. data/lib/chef/provider/group/aix.rb +0 -70
  20. data/lib/chef/provider/group/dscl.rb +0 -121
  21. data/lib/chef/provider/group/gpasswd.rb +0 -53
  22. data/lib/chef/provider/group/groupadd.rb +0 -81
  23. data/lib/chef/provider/group/pw.rb +0 -84
  24. data/lib/chef/provider/group/suse.rb +0 -53
  25. data/lib/chef/provider/group/usermod.rb +0 -57
  26. data/lib/chef/provider/group/windows.rb +0 -79
  27. data/lib/chef/provider/ifconfig.rb +0 -134
  28. data/lib/chef/provider/log.rb +0 -54
  29. data/lib/chef/provider/mdadm.rb +0 -91
  30. data/lib/chef/provider/mount.rb +0 -114
  31. data/lib/chef/provider/mount/mount.rb +0 -240
  32. data/lib/chef/provider/mount/windows.rb +0 -81
  33. data/lib/chef/provider/ohai.rb +0 -42
  34. data/lib/chef/provider/package.rb +0 -163
  35. data/lib/chef/provider/package/apt.rb +0 -135
  36. data/lib/chef/provider/package/dpkg.rb +0 -115
  37. data/lib/chef/provider/package/easy_install.rb +0 -136
  38. data/lib/chef/provider/package/freebsd.rb +0 -125
  39. data/lib/chef/provider/package/macports.rb +0 -105
  40. data/lib/chef/provider/package/pacman.rb +0 -101
  41. data/lib/chef/provider/package/portage.rb +0 -135
  42. data/lib/chef/provider/package/rpm.rb +0 -104
  43. data/lib/chef/provider/package/rubygems.rb +0 -465
  44. data/lib/chef/provider/package/solaris.rb +0 -130
  45. data/lib/chef/provider/package/yum.rb +0 -1128
  46. data/lib/chef/provider/package/zypper.rb +0 -144
  47. data/lib/chef/provider/route.rb +0 -193
  48. data/lib/chef/provider/ruby_block.rb +0 -34
  49. data/lib/chef/provider/script.rb +0 -55
  50. data/lib/chef/provider/service.rb +0 -122
  51. data/lib/chef/provider/service/arch.rb +0 -116
  52. data/lib/chef/provider/service/debian.rb +0 -130
  53. data/lib/chef/provider/service/freebsd.rb +0 -154
  54. data/lib/chef/provider/service/gentoo.rb +0 -53
  55. data/lib/chef/provider/service/init.rb +0 -71
  56. data/lib/chef/provider/service/insserv.rb +0 -52
  57. data/lib/chef/provider/service/redhat.rb +0 -60
  58. data/lib/chef/provider/service/simple.rb +0 -120
  59. data/lib/chef/provider/service/solaris.rb +0 -85
  60. data/lib/chef/provider/service/systemd.rb +0 -102
  61. data/lib/chef/provider/service/upstart.rb +0 -198
  62. data/lib/chef/provider/service/windows.rb +0 -146
  63. data/lib/chef/provider/subversion.rb +0 -197
  64. data/lib/chef/provider/user.rb +0 -186
  65. data/lib/chef/provider/user/dscl.rb +0 -280
  66. data/lib/chef/provider/user/pw.rb +0 -113
  67. data/lib/chef/provider/user/useradd.rb +0 -137
  68. data/lib/chef/provider/user/windows.rb +0 -124
  69. data/lib/chef/resource/apt_package.rb +0 -34
  70. data/lib/chef/resource/bash.rb +0 -33
  71. data/lib/chef/resource/breakpoint.rb +0 -35
  72. data/lib/chef/resource/cron.rb +0 -188
  73. data/lib/chef/resource/csh.rb +0 -33
  74. data/lib/chef/resource/deploy.rb +0 -380
  75. data/lib/chef/resource/deploy_revision.rb +0 -40
  76. data/lib/chef/resource/dpkg_package.rb +0 -34
  77. data/lib/chef/resource/easy_install_package.rb +0 -57
  78. data/lib/chef/resource/erl_call.rb +0 -83
  79. data/lib/chef/resource/freebsd_package.rb +0 -35
  80. data/lib/chef/resource/gem_package.rb +0 -53
  81. data/lib/chef/resource/git.rb +0 -46
  82. data/lib/chef/resource/group.rb +0 -70
  83. data/lib/chef/resource/ifconfig.rb +0 -134
  84. data/lib/chef/resource/log.rb +0 -62
  85. data/lib/chef/resource/macports_package.rb +0 -29
  86. data/lib/chef/resource/mdadm.rb +0 -82
  87. data/lib/chef/resource/mount.rb +0 -134
  88. data/lib/chef/resource/ohai.rb +0 -40
  89. data/lib/chef/resource/package.rb +0 -80
  90. data/lib/chef/resource/pacman_package.rb +0 -33
  91. data/lib/chef/resource/perl.rb +0 -33
  92. data/lib/chef/resource/portage_package.rb +0 -33
  93. data/lib/chef/resource/python.rb +0 -33
  94. data/lib/chef/resource/route.rb +0 -135
  95. data/lib/chef/resource/rpm_package.rb +0 -34
  96. data/lib/chef/resource/ruby.rb +0 -33
  97. data/lib/chef/resource/ruby_block.rb +0 -40
  98. data/lib/chef/resource/scm.rb +0 -147
  99. data/lib/chef/resource/script.rb +0 -60
  100. data/lib/chef/resource/service.rb +0 -160
  101. data/lib/chef/resource/solaris_package.rb +0 -36
  102. data/lib/chef/resource/subversion.rb +0 -36
  103. data/lib/chef/resource/timestamped_deploy.rb +0 -31
  104. data/lib/chef/resource/user.rb +0 -130
  105. data/lib/chef/resource/yum_package.rb +0 -63
@@ -1,186 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'chef/provider'
20
- require 'chef/mixin/command'
21
- require 'chef/resource/user'
22
- require 'etc'
23
-
24
- class Chef
25
- class Provider
26
- class User < Chef::Provider
27
-
28
- include Chef::Mixin::Command
29
-
30
- attr_accessor :user_exists, :locked
31
-
32
- def initialize(new_resource, run_context)
33
- super
34
- @user_exists = true
35
- @locked = nil
36
- end
37
-
38
- def convert_group_name
39
- if @new_resource.gid.is_a? String
40
- @new_resource.gid(Etc.getgrnam(@new_resource.gid).gid)
41
- end
42
- rescue ArgumentError => e
43
- raise Chef::Exceptions::User, "Couldn't lookup integer GID for group name #{@new_resource.gid}"
44
- end
45
-
46
- def load_current_resource
47
- @current_resource = Chef::Resource::User.new(@new_resource.name)
48
- @current_resource.username(@new_resource.username)
49
-
50
- begin
51
- user_info = Etc.getpwnam(@new_resource.username)
52
- rescue ArgumentError => e
53
- @user_exists = false
54
- Chef::Log.debug("#{@new_resource} user does not exist")
55
- user_info = nil
56
- end
57
-
58
- if user_info
59
- @current_resource.uid(user_info.uid)
60
- @current_resource.gid(user_info.gid)
61
- @current_resource.comment(user_info.gecos)
62
- @current_resource.home(user_info.dir)
63
- @current_resource.shell(user_info.shell)
64
- @current_resource.password(user_info.passwd)
65
-
66
- if @new_resource.password && @current_resource.password == 'x'
67
- begin
68
- require 'shadow'
69
- rescue LoadError
70
- raise Chef::Exceptions::MissingLibrary, "You must have ruby-shadow installed for password support!"
71
- else
72
- shadow_info = Shadow::Passwd.getspnam(@new_resource.username)
73
- @current_resource.password(shadow_info.sp_pwdp)
74
- end
75
- end
76
-
77
- if @new_resource.gid
78
- convert_group_name
79
- end
80
- end
81
-
82
- @current_resource
83
- end
84
-
85
- # Check to see if the user needs any changes
86
- #
87
- # === Returns
88
- # <true>:: If a change is required
89
- # <false>:: If the users are identical
90
- def compare_user
91
- [ :uid, :gid, :comment, :home, :shell, :password ].any? do |user_attrib|
92
- !@new_resource.send(user_attrib).nil? && @new_resource.send(user_attrib) != @current_resource.send(user_attrib)
93
- end
94
- end
95
-
96
- def action_create
97
- if !@user_exists
98
- $testrun || create_user
99
- Chef::Log.info("#{@new_resource} created")
100
- @new_resource.updated_by_last_action(true)
101
- elsif compare_user
102
- $testrun || manage_user
103
- Chef::Log.info("#{@new_resource} altered")
104
- @new_resource.updated_by_last_action(true)
105
- end
106
- end
107
-
108
- def action_remove
109
- if @user_exists
110
- $testrun || remove_user
111
- @new_resource.updated_by_last_action(true)
112
- Chef::Log.info("#{@new_resource} removed")
113
- end
114
- end
115
-
116
- def remove_user
117
- raise NotImplementedError
118
- end
119
-
120
- def action_manage
121
- if @user_exists && compare_user
122
- $testrun || manage_user
123
- @new_resource.updated_by_last_action(true)
124
- Chef::Log.info("#{@new_resource} managed")
125
- end
126
- end
127
-
128
- def manage_user
129
- raise NotImplementedError
130
- end
131
-
132
- def action_modify
133
- if @user_exists
134
- if compare_user
135
- $testrun || manage_user
136
- @new_resource.updated_by_last_action(true)
137
- Chef::Log.info("#{@new_resource} modified")
138
- end
139
- else
140
- raise Chef::Exceptions::User, "Cannot modify user - does not exist!"
141
- end
142
- end
143
-
144
- def action_lock
145
- if @user_exists
146
- if check_lock() == false
147
- $testrun || lock_user
148
- @new_resource.updated_by_last_action(true)
149
- Chef::Log.info("#{@new_resource} locked")
150
- else
151
- Chef::Log.debug("#{@new_resource} already locked - nothing to do")
152
- end
153
- else
154
- raise Chef::Exceptions::User, "Cannot lock user - does not exist!"
155
- end
156
- end
157
-
158
- def check_lock
159
- raise NotImplementedError
160
- end
161
-
162
- def lock_user
163
- raise NotImplementedError
164
- end
165
-
166
- def action_unlock
167
- if @user_exists
168
- if check_lock() == true
169
- $testrun || unlock_user
170
- @new_resource.updated_by_last_action(true)
171
- Chef::Log.info("#{@new_resource} unlocked")
172
- else
173
- Chef::Log.debug("#{@new_resource} already unlocked - nothing to do")
174
- end
175
- else
176
- raise Chef::Exceptions::User, "Cannot unlock user - does not exist!"
177
- end
178
- end
179
-
180
- def unlock_user
181
- raise NotImplementedError
182
- end
183
-
184
- end
185
- end
186
- end
@@ -1,280 +0,0 @@
1
- #
2
- # Author:: Dreamcat4 (<dreamcat4@gmail.com>)
3
- # Copyright:: Copyright (c) 2009 OpsCode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'chef/mixin/shell_out'
20
- require 'chef/provider/user'
21
- require 'openssl'
22
-
23
- class Chef
24
- class Provider
25
- class User
26
- class Dscl < Chef::Provider::User
27
- include Chef::Mixin::ShellOut
28
-
29
- NFS_HOME_DIRECTORY = %r{^NFSHomeDirectory: (.*)$}
30
- AUTHENTICATION_AUTHORITY = %r{^AuthenticationAuthority: (.*)$}
31
-
32
- def dscl(*args)
33
- shell_out("dscl . -#{args.join(' ')}")
34
- end
35
-
36
- def safe_dscl(*args)
37
- result = dscl(*args)
38
- return "" if ( args.first =~ /^delete/ ) && ( result.exitstatus != 0 )
39
- raise(Chef::Exceptions::DsclCommandFailed,"dscl error: #{result.inspect}") unless result.exitstatus == 0
40
- raise(Chef::Exceptions::DsclCommandFailed,"dscl error: #{result.inspect}") if result.stdout =~ /No such key: /
41
- return result.stdout
42
- end
43
-
44
- # This is handled in providers/group.rb by Etc.getgrnam()
45
- # def user_exists?(user)
46
- # users = safe_dscl("list /Users")
47
- # !! ( users =~ Regexp.new("\n#{user}\n") )
48
- # end
49
-
50
- # get a free UID greater than 200
51
- def get_free_uid(search_limit=1000)
52
- uid = nil; next_uid_guess = 200
53
- users_uids = safe_dscl("list /Users uid")
54
- while(next_uid_guess < search_limit + 200)
55
- if users_uids =~ Regexp.new("#{Regexp.escape(next_uid_guess.to_s)}\n")
56
- next_uid_guess += 1
57
- else
58
- uid = next_uid_guess
59
- break
60
- end
61
- end
62
- return uid || raise("uid not found. Exhausted. Searched #{search_limit} times")
63
- end
64
-
65
- def uid_used?(uid)
66
- return false unless uid
67
- users_uids = safe_dscl("list /Users uid")
68
- !! ( users_uids =~ Regexp.new("#{Regexp.escape(uid.to_s)}\n") )
69
- end
70
-
71
- def set_uid
72
- @new_resource.uid(get_free_uid) if (@new_resource.uid.nil? || @new_resource.uid == '')
73
- if uid_used?(@new_resource.uid)
74
- raise(Chef::Exceptions::RequestedUIDUnavailable, "uid #{@new_resource.uid} is already in use")
75
- end
76
- safe_dscl("create /Users/#{@new_resource.username} UniqueID #{@new_resource.uid}")
77
- end
78
-
79
- def modify_home
80
- return safe_dscl("delete /Users/#{@new_resource.username} NFSHomeDirectory") if (@new_resource.home.nil? || @new_resource.home.empty?)
81
- if @new_resource.supports[:manage_home]
82
- validate_home_dir_specification!
83
-
84
- if (@current_resource.home == @new_resource.home) && !new_home_exists?
85
- ditto_home
86
- elsif !current_home_exists? && !new_home_exists?
87
- ditto_home
88
- elsif current_home_exists?
89
- move_home
90
- end
91
- end
92
- safe_dscl("create /Users/#{@new_resource.username} NFSHomeDirectory '#{@new_resource.home}'")
93
- end
94
-
95
- def osx_shadow_hash?(string)
96
- return !! ( string =~ /^[[:xdigit:]]{1240}$/ )
97
- end
98
-
99
- def osx_salted_sha1?(string)
100
- return !! ( string =~ /^[[:xdigit:]]{48}$/ )
101
- end
102
-
103
- def guid
104
- safe_dscl("read /Users/#{@new_resource.username} GeneratedUID").gsub(/GeneratedUID: /,"").strip
105
- end
106
-
107
- def shadow_hash_set?
108
- user_data = safe_dscl("read /Users/#{@new_resource.username}")
109
- if user_data =~ /AuthenticationAuthority: / && user_data =~ /ShadowHash/
110
- true
111
- else
112
- false
113
- end
114
- end
115
-
116
- def modify_password
117
- if @new_resource.password
118
- shadow_hash = nil
119
-
120
- Chef::Log.debug("#{new_resource} updating password")
121
- if osx_shadow_hash?(@new_resource.password)
122
- shadow_hash = @new_resource.password.upcase
123
- else
124
- if osx_salted_sha1?(@new_resource.password)
125
- salted_sha1 = @new_resource.password.upcase
126
- else
127
- hex_salt = ""
128
- OpenSSL::Random.random_bytes(10).each_byte { |b| hex_salt << b.to_i.to_s(16) }
129
- hex_salt = hex_salt.slice(0...8)
130
- salt = [hex_salt].pack("H*")
131
- sha1 = ::OpenSSL::Digest::SHA1.hexdigest(salt+@new_resource.password)
132
- salted_sha1 = (hex_salt+sha1).upcase
133
- end
134
- shadow_hash = String.new("00000000"*155)
135
- shadow_hash[168] = salted_sha1
136
- end
137
-
138
- ::File.open("/var/db/shadow/hash/#{guid}",'w',0600) do |output|
139
- output.puts shadow_hash
140
- end
141
-
142
- unless shadow_hash_set?
143
- safe_dscl("append /Users/#{@new_resource.username} AuthenticationAuthority ';ShadowHash;'")
144
- end
145
- end
146
- end
147
-
148
- def load_current_resource
149
- super
150
- raise Chef::Exceptions::User, "Could not find binary /usr/bin/dscl for #{@new_resource}" unless ::File.exists?("/usr/bin/dscl")
151
- end
152
-
153
- def create_user
154
- dscl_create_user
155
- dscl_create_comment
156
- set_uid
157
- dscl_set_gid
158
- modify_home
159
- dscl_set_shell
160
- modify_password
161
- end
162
-
163
- def manage_user
164
- dscl_create_user if diverged?(:username)
165
- dscl_create_comment if diverged?(:comment)
166
- set_uid if diverged?(:uid)
167
- dscl_set_gid if diverged?(:uid)
168
- modify_home if diverged?(:home)
169
- dscl_set_shell if diverged?(:shell)
170
- modify_password if diverged?(:password)
171
- end
172
-
173
- def dscl_create_user
174
- safe_dscl("create /Users/#{@new_resource.username}")
175
- end
176
-
177
- def dscl_create_comment
178
- safe_dscl("create /Users/#{@new_resource.username} RealName '#{@new_resource.comment}'")
179
- end
180
-
181
- def dscl_set_gid
182
- safe_dscl("create /Users/#{@new_resource.username} PrimaryGroupID '#{@new_resource.gid}'")
183
- end
184
-
185
- def dscl_set_shell
186
- if @new_resource.password || ::File.exists?("#{@new_resource.shell}")
187
- safe_dscl("create /Users/#{@new_resource.username} UserShell '#{@new_resource.shell}'")
188
- else
189
- safe_dscl("create /Users/#{@new_resource.username} UserShell '/usr/bin/false'")
190
- end
191
- end
192
-
193
- def remove_user
194
- if @new_resource.supports[:manage_home]
195
- user_info = safe_dscl("read /Users/#{@new_resource.username}")
196
- if nfs_home_match = user_info.match(NFS_HOME_DIRECTORY)
197
- #nfs_home = safe_dscl("read /Users/#{@new_resource.username} NFSHomeDirectory")
198
- #nfs_home.gsub!(/NFSHomeDirectory: /,"").gsub!(/\n$/,"")
199
- nfs_home = nfs_home_match[1]
200
- FileUtils.rm_rf(nfs_home)
201
- end
202
- end
203
- # remove the user from its groups
204
- groups = []
205
- Etc.group do |group|
206
- groups << group.name if group.mem.include?(@new_resource.username)
207
- end
208
- groups.each do |group_name|
209
- safe_dscl("delete /Groups/#{group_name} GroupMembership '#{@new_resource.username}'")
210
- end
211
- # remove user account
212
- safe_dscl("delete /Users/#{@new_resource.username}")
213
- end
214
-
215
- def locked?
216
- user_info = safe_dscl("read /Users/#{@new_resource.username}")
217
- if auth_authority_md = AUTHENTICATION_AUTHORITY.match(user_info)
218
- !!(auth_authority_md[1] =~ /DisabledUser/ )
219
- else
220
- false
221
- end
222
- end
223
-
224
- def check_lock
225
- return @locked = locked?
226
- end
227
-
228
- def lock_user
229
- safe_dscl("append /Users/#{@new_resource.username} AuthenticationAuthority ';DisabledUser;'")
230
- end
231
-
232
- def unlock_user
233
- auth_info = safe_dscl("read /Users/#{@new_resource.username} AuthenticationAuthority")
234
- auth_string = auth_info.gsub(/AuthenticationAuthority: /,"").gsub(/;DisabledUser;/,"").strip#.gsub!(/[; ]*$/,"")
235
- safe_dscl("create /Users/#{@new_resource.username} AuthenticationAuthority '#{auth_string}'")
236
- end
237
-
238
- def validate_home_dir_specification!
239
- unless @new_resource.home =~ /^\//
240
- raise(Chef::Exceptions::InvalidHomeDirectory,"invalid path spec for User: '#{@new_resource.username}', home directory: '#{@new_resource.home}'")
241
- end
242
- end
243
-
244
- def current_home_exists?
245
- ::File.exist?("#{@current_resource.home}")
246
- end
247
-
248
- def new_home_exists?
249
- ::File.exist?("#{@new_resource.home}")
250
- end
251
-
252
- def ditto_home
253
- skel = "/System/Library/User Template/English.lproj"
254
- raise(Chef::Exceptions::User,"can't find skel at: #{skel}") unless ::File.exists?(skel)
255
- shell_out! "ditto '#{skel}' '#{@new_resource.home}'"
256
- ::FileUtils.chown_R(@new_resource.username,@new_resource.gid.to_s,@new_resource.home)
257
- end
258
-
259
- def move_home
260
- Chef::Log.debug("#{@new_resource} moving #{self} home from #{@current_resource.home} to #{@new_resource.home}")
261
-
262
- src = @current_resource.home
263
- FileUtils.mkdir_p(@new_resource.home)
264
- files = ::Dir.glob("#{src}/*", ::File::FNM_DOTMATCH) - ["#{src}/.","#{src}/.."]
265
- ::FileUtils.mv(files,@new_resource.home, :force => true)
266
- ::FileUtils.rmdir(src)
267
- ::FileUtils.chown_R(@new_resource.username,@new_resource.gid.to_s,@new_resource.home)
268
- end
269
-
270
- def diverged?(parameter)
271
- parameter_updated?(parameter) && (not @new_resource.send(parameter).nil?)
272
- end
273
-
274
- def parameter_updated?(parameter)
275
- not (@new_resource.send(parameter) == @current_resource.send(parameter))
276
- end
277
- end
278
- end
279
- end
280
- end