mbailey-chef 0.9.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +201 -0
- data/README.rdoc +172 -0
- data/bin/chef-client +26 -0
- data/bin/chef-solo +25 -0
- data/bin/knife +26 -0
- data/bin/shef +34 -0
- data/distro/README +2 -0
- data/distro/common/man/man1/chef-indexer.1 +42 -0
- data/distro/common/man/man1/chef-server-webui.1 +106 -0
- data/distro/common/man/man1/chef-server.1 +107 -0
- data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
- data/distro/common/man/man1/chef-solr.1 +55 -0
- data/distro/common/man/man8/chef-client.8 +63 -0
- data/distro/common/man/man8/chef-solo.8 +57 -0
- data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
- data/distro/common/man/man8/knife.8 +1349 -0
- data/distro/common/man/man8/shef.8 +45 -0
- data/distro/common/markdown/README +3 -0
- data/distro/common/markdown/knife.mkd +832 -0
- data/distro/debian/etc/default/chef-client +4 -0
- data/distro/debian/etc/default/chef-server +9 -0
- data/distro/debian/etc/default/chef-server-webui +9 -0
- data/distro/debian/etc/default/chef-solr +7 -0
- data/distro/debian/etc/default/chef-solr-indexer +7 -0
- data/distro/debian/etc/init/chef-client.conf +17 -0
- data/distro/debian/etc/init/chef-server-webui.conf +17 -0
- data/distro/debian/etc/init/chef-server.conf +17 -0
- data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
- data/distro/debian/etc/init/chef-solr.conf +17 -0
- data/distro/debian/etc/init.d/chef-client +175 -0
- data/distro/debian/etc/init.d/chef-server +122 -0
- data/distro/debian/etc/init.d/chef-server-webui +123 -0
- data/distro/debian/etc/init.d/chef-solr +177 -0
- data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
- data/distro/redhat/etc/init.d/chef-client +106 -0
- data/distro/redhat/etc/init.d/chef-server +112 -0
- data/distro/redhat/etc/init.d/chef-server-webui +112 -0
- data/distro/redhat/etc/init.d/chef-solr +104 -0
- data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
- data/distro/redhat/etc/logrotate.d/chef-client +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
- data/distro/redhat/etc/sysconfig/chef-client +15 -0
- data/distro/redhat/etc/sysconfig/chef-server +14 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
- data/distro/redhat/etc/sysconfig/chef-solr +8 -0
- data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
- data/lib/chef/api_client.rb +264 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +246 -0
- data/lib/chef/application/knife.rb +171 -0
- data/lib/chef/application/solo.rb +215 -0
- data/lib/chef/application.rb +127 -0
- data/lib/chef/applications.rb +4 -0
- data/lib/chef/certificate.rb +194 -0
- data/lib/chef/checksum.rb +182 -0
- data/lib/chef/checksum_cache.rb +173 -0
- data/lib/chef/client.rb +304 -0
- data/lib/chef/config.rb +240 -0
- data/lib/chef/cookbook/cookbook_collection.rb +44 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +54 -0
- data/lib/chef/cookbook/file_vendor.rb +48 -0
- data/lib/chef/cookbook/metadata/version.rb +87 -0
- data/lib/chef/cookbook/metadata.rb +500 -0
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
- data/lib/chef/cookbook/syntax_check.rb +136 -0
- data/lib/chef/cookbook_loader.rb +227 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +103 -0
- data/lib/chef/cookbook_version.rb +930 -0
- data/lib/chef/couchdb.rb +239 -0
- data/lib/chef/daemon.rb +172 -0
- data/lib/chef/data_bag.rb +215 -0
- data/lib/chef/data_bag_item.rb +228 -0
- data/lib/chef/exceptions.rb +66 -0
- data/lib/chef/file_access_control.rb +140 -0
- data/lib/chef/file_cache.rb +218 -0
- data/lib/chef/handler/json_file.rb +58 -0
- data/lib/chef/handler.rb +206 -0
- data/lib/chef/index_queue/amqp_client.rb +113 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +76 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +44 -0
- data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
- data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +43 -0
- data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
- data/lib/chef/knife/bootstrap.rb +181 -0
- data/lib/chef/knife/client_bulk_delete.rb +40 -0
- data/lib/chef/knife/client_create.rb +70 -0
- data/lib/chef/knife/client_delete.rb +45 -0
- data/lib/chef/knife/client_edit.rb +45 -0
- data/lib/chef/knife/client_list.rb +40 -0
- data/lib/chef/knife/client_reregister.rb +56 -0
- data/lib/chef/knife/client_show.rb +50 -0
- data/lib/chef/knife/configure.rb +140 -0
- data/lib/chef/knife/configure_client.rb +52 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +58 -0
- data/lib/chef/knife/cookbook_create.rb +209 -0
- data/lib/chef/knife/cookbook_delete.rb +143 -0
- data/lib/chef/knife/cookbook_download.rb +130 -0
- data/lib/chef/knife/cookbook_list.rb +41 -0
- data/lib/chef/knife/cookbook_metadata.rb +82 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +40 -0
- data/lib/chef/knife/cookbook_show.rb +98 -0
- data/lib/chef/knife/cookbook_site_download.rb +58 -0
- data/lib/chef/knife/cookbook_site_list.rb +56 -0
- data/lib/chef/knife/cookbook_site_search.rb +51 -0
- data/lib/chef/knife/cookbook_site_share.rb +109 -0
- data/lib/chef/knife/cookbook_site_show.rb +57 -0
- data/lib/chef/knife/cookbook_site_unshare.rb +52 -0
- data/lib/chef/knife/cookbook_site_vendor.rb +133 -0
- data/lib/chef/knife/cookbook_test.rb +82 -0
- data/lib/chef/knife/cookbook_upload.rb +95 -0
- data/lib/chef/knife/data_bag_create.rb +59 -0
- data/lib/chef/knife/data_bag_delete.rb +48 -0
- data/lib/chef/knife/data_bag_edit.rb +50 -0
- data/lib/chef/knife/data_bag_from_file.rb +44 -0
- data/lib/chef/knife/data_bag_list.rb +43 -0
- data/lib/chef/knife/data_bag_show.rb +41 -0
- data/lib/chef/knife/ec2_instance_data.rb +46 -0
- data/lib/chef/knife/ec2_server_create.rb +216 -0
- data/lib/chef/knife/ec2_server_delete.rb +90 -0
- data/lib/chef/knife/ec2_server_list.rb +88 -0
- data/lib/chef/knife/exec.rb +52 -0
- data/lib/chef/knife/index_rebuild.rb +51 -0
- data/lib/chef/knife/node_bulk_delete.rb +43 -0
- data/lib/chef/knife/node_create.rb +47 -0
- data/lib/chef/knife/node_delete.rb +44 -0
- data/lib/chef/knife/node_edit.rb +44 -0
- data/lib/chef/knife/node_from_file.rb +42 -0
- data/lib/chef/knife/node_list.rb +41 -0
- data/lib/chef/knife/node_run_list_add.rb +64 -0
- data/lib/chef/knife/node_run_list_remove.rb +45 -0
- data/lib/chef/knife/node_show.rb +54 -0
- data/lib/chef/knife/rackspace_server_create.rb +156 -0
- data/lib/chef/knife/rackspace_server_delete.rb +57 -0
- data/lib/chef/knife/rackspace_server_list.rb +59 -0
- data/lib/chef/knife/recipe_list.rb +32 -0
- data/lib/chef/knife/role_bulk_delete.rb +44 -0
- data/lib/chef/knife/role_create.rb +52 -0
- data/lib/chef/knife/role_delete.rb +44 -0
- data/lib/chef/knife/role_edit.rb +45 -0
- data/lib/chef/knife/role_from_file.rb +46 -0
- data/lib/chef/knife/role_list.rb +40 -0
- data/lib/chef/knife/role_show.rb +51 -0
- data/lib/chef/knife/search.rb +94 -0
- data/lib/chef/knife/slicehost_images_list.rb +53 -0
- data/lib/chef/knife/slicehost_server_create.rb +103 -0
- data/lib/chef/knife/slicehost_server_delete.rb +61 -0
- data/lib/chef/knife/slicehost_server_list.rb +64 -0
- data/lib/chef/knife/ssh.rb +328 -0
- data/lib/chef/knife/status.rb +87 -0
- data/lib/chef/knife/terremark_server_create.rb +152 -0
- data/lib/chef/knife/terremark_server_delete.rb +87 -0
- data/lib/chef/knife/terremark_server_list.rb +77 -0
- data/lib/chef/knife/windows_bootstrap.rb +154 -0
- data/lib/chef/knife.rb +522 -0
- data/lib/chef/log.rb +61 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command/unix.rb +215 -0
- data/lib/chef/mixin/command/windows.rb +72 -0
- data/lib/chef/mixin/command.rb +220 -0
- data/lib/chef/mixin/convert_to_class_name.rb +63 -0
- data/lib/chef/mixin/create_path.rb +56 -0
- data/lib/chef/mixin/deep_merge.rb +225 -0
- data/lib/chef/mixin/deprecation.rb +65 -0
- data/lib/chef/mixin/find_preferred_file.rb +92 -0
- data/lib/chef/mixin/from_file.rb +50 -0
- data/lib/chef/mixin/language.rb +156 -0
- data/lib/chef/mixin/language_include_attribute.rb +61 -0
- data/lib/chef/mixin/language_include_recipe.rb +52 -0
- data/lib/chef/mixin/params_validate.rb +225 -0
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
- data/lib/chef/mixin/shell_out.rb +38 -0
- data/lib/chef/mixin/template.rb +95 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +16 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/string.rb +28 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/node/attribute.rb +465 -0
- data/lib/chef/node.rb +601 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +371 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +100 -0
- data/lib/chef/provider/cron/solaris.rb +195 -0
- data/lib/chef/provider/cron.rb +186 -0
- data/lib/chef/provider/deploy/revision.rb +73 -0
- data/lib/chef/provider/deploy/timestamped.rb +33 -0
- data/lib/chef/provider/deploy.rb +319 -0
- data/lib/chef/provider/directory.rb +72 -0
- data/lib/chef/provider/env/windows.rb +75 -0
- data/lib/chef/provider/env.rb +152 -0
- data/lib/chef/provider/erl_call.rb +72 -0
- data/lib/chef/provider/execute.rb +58 -0
- data/lib/chef/provider/file.rb +213 -0
- data/lib/chef/provider/git.rb +211 -0
- data/lib/chef/provider/group/dscl.rb +121 -0
- data/lib/chef/provider/group/gpasswd.rb +53 -0
- data/lib/chef/provider/group/groupadd.rb +78 -0
- data/lib/chef/provider/group/pw.rb +84 -0
- data/lib/chef/provider/group/usermod.rb +57 -0
- data/lib/chef/provider/group/windows.rb +79 -0
- data/lib/chef/provider/group.rb +133 -0
- data/lib/chef/provider/http_request.rb +122 -0
- data/lib/chef/provider/ifconfig.rb +132 -0
- data/lib/chef/provider/link.rb +161 -0
- data/lib/chef/provider/log.rb +54 -0
- data/lib/chef/provider/mdadm.rb +91 -0
- data/lib/chef/provider/mount/mount.rb +232 -0
- data/lib/chef/provider/mount/windows.rb +80 -0
- data/lib/chef/provider/mount.rb +117 -0
- data/lib/chef/provider/ohai.rb +41 -0
- data/lib/chef/provider/package/apt.rb +110 -0
- data/lib/chef/provider/package/dpkg.rb +112 -0
- data/lib/chef/provider/package/easy_install.rb +114 -0
- data/lib/chef/provider/package/freebsd.rb +123 -0
- data/lib/chef/provider/package/macports.rb +105 -0
- data/lib/chef/provider/package/pacman.rb +101 -0
- data/lib/chef/provider/package/portage.rb +124 -0
- data/lib/chef/provider/package/rpm.rb +101 -0
- data/lib/chef/provider/package/rubygems.rb +462 -0
- data/lib/chef/provider/package/solaris.rb +127 -0
- data/lib/chef/provider/package/yum-dump.py +128 -0
- data/lib/chef/provider/package/yum.rb +222 -0
- data/lib/chef/provider/package/zypper.rb +133 -0
- data/lib/chef/provider/package.rb +160 -0
- data/lib/chef/provider/remote_directory.rb +140 -0
- data/lib/chef/provider/remote_file.rb +120 -0
- data/lib/chef/provider/route.rb +195 -0
- data/lib/chef/provider/ruby_block.rb +33 -0
- data/lib/chef/provider/script.rb +55 -0
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/debian.rb +105 -0
- data/lib/chef/provider/service/freebsd.rb +156 -0
- data/lib/chef/provider/service/gentoo.rb +54 -0
- data/lib/chef/provider/service/init.rb +71 -0
- data/lib/chef/provider/service/redhat.rb +60 -0
- data/lib/chef/provider/service/simple.rb +118 -0
- data/lib/chef/provider/service/solaris.rb +85 -0
- data/lib/chef/provider/service/upstart.rb +192 -0
- data/lib/chef/provider/service/windows.rb +129 -0
- data/lib/chef/provider/service.rb +128 -0
- data/lib/chef/provider/subversion.rb +159 -0
- data/lib/chef/provider/template.rb +105 -0
- data/lib/chef/provider/user/dscl.rb +280 -0
- data/lib/chef/provider/user/pw.rb +113 -0
- data/lib/chef/provider/user/useradd.rb +137 -0
- data/lib/chef/provider/user/windows.rb +124 -0
- data/lib/chef/provider/user.rb +187 -0
- data/lib/chef/provider.rb +124 -0
- data/lib/chef/providers.rb +91 -0
- data/lib/chef/recipe.rb +130 -0
- data/lib/chef/resource/apt_package.rb +34 -0
- data/lib/chef/resource/bash.rb +33 -0
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/cookbook_file.rb +45 -0
- data/lib/chef/resource/cron.rb +188 -0
- data/lib/chef/resource/csh.rb +33 -0
- data/lib/chef/resource/deploy.rb +371 -0
- data/lib/chef/resource/deploy_revision.rb +35 -0
- data/lib/chef/resource/directory.rb +76 -0
- data/lib/chef/resource/dpkg_package.rb +34 -0
- data/lib/chef/resource/easy_install_package.rb +41 -0
- data/lib/chef/resource/env.rb +58 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/execute.rb +127 -0
- data/lib/chef/resource/file.rb +92 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/gem_package.rb +49 -0
- data/lib/chef/resource/git.rb +36 -0
- data/lib/chef/resource/group.rb +70 -0
- data/lib/chef/resource/http_request.rb +61 -0
- data/lib/chef/resource/ifconfig.rb +134 -0
- data/lib/chef/resource/link.rb +78 -0
- data/lib/chef/resource/log.rb +62 -0
- data/lib/chef/resource/macports_package.rb +29 -0
- data/lib/chef/resource/mdadm.rb +82 -0
- data/lib/chef/resource/mount.rb +135 -0
- data/lib/chef/resource/ohai.rb +40 -0
- data/lib/chef/resource/package.rb +80 -0
- data/lib/chef/resource/pacman_package.rb +33 -0
- data/lib/chef/resource/perl.rb +33 -0
- data/lib/chef/resource/portage_package.rb +33 -0
- data/lib/chef/resource/python.rb +33 -0
- data/lib/chef/resource/remote_directory.rb +109 -0
- data/lib/chef/resource/remote_file.rb +83 -0
- data/lib/chef/resource/route.rb +135 -0
- data/lib/chef/resource/rpm_package.rb +34 -0
- data/lib/chef/resource/ruby.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +40 -0
- data/lib/chef/resource/scm.rb +146 -0
- data/lib/chef/resource/script.rb +60 -0
- data/lib/chef/resource/service.rb +160 -0
- data/lib/chef/resource/solaris_package.rb +36 -0
- data/lib/chef/resource/subversion.rb +36 -0
- data/lib/chef/resource/template.rb +69 -0
- data/lib/chef/resource/timestamped_deploy.rb +31 -0
- data/lib/chef/resource/user.rb +130 -0
- data/lib/chef/resource/yum_package.rb +43 -0
- data/lib/chef/resource.rb +523 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/resource_collection.rb +217 -0
- data/lib/chef/resource_definition.rb +67 -0
- data/lib/chef/resource_definition_list.rb +38 -0
- data/lib/chef/resources.rb +64 -0
- data/lib/chef/rest/auth_credentials.rb +78 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +188 -0
- data/lib/chef/rest.rb +394 -0
- data/lib/chef/role.rb +287 -0
- data/lib/chef/run_context.rb +110 -0
- data/lib/chef/run_list/run_list_expansion.rb +172 -0
- data/lib/chef/run_list/run_list_item.rb +78 -0
- data/lib/chef/run_list.rb +150 -0
- data/lib/chef/run_status.rb +121 -0
- data/lib/chef/runner.rb +107 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/search/query.rb +60 -0
- data/lib/chef/shef/ext.rb +568 -0
- data/lib/chef/shef/model_wrapper.rb +120 -0
- data/lib/chef/shef/shef_rest.rb +28 -0
- data/lib/chef/shef/shef_session.rb +271 -0
- data/lib/chef/shef.rb +325 -0
- data/lib/chef/shell_out.rb +413 -0
- data/lib/chef/streaming_cookbook_uploader.rb +201 -0
- data/lib/chef/tasks/chef_repo.rake +256 -0
- data/lib/chef/util/file_edit.rb +122 -0
- data/lib/chef/util/windows/net_group.rb +101 -0
- data/lib/chef/util/windows/net_use.rb +121 -0
- data/lib/chef/util/windows/net_user.rb +198 -0
- data/lib/chef/util/windows/volume.rb +59 -0
- data/lib/chef/util/windows.rb +56 -0
- data/lib/chef/version.rb +21 -0
- data/lib/chef/webui_user.rb +231 -0
- data/lib/chef.rb +39 -0
- metadata +533 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Doug MacEachern (<dougm@vmware.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 VMware, 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
|
+
#the Win32 Volume APIs do not support mapping network drives. not supported by WMI either.
|
|
20
|
+
#see also: WNetAddConnection2 and WNetAddConnection3
|
|
21
|
+
#see also cmd.exe: net use /?
|
|
22
|
+
|
|
23
|
+
require 'chef/util/windows'
|
|
24
|
+
|
|
25
|
+
class Chef::Util::Windows::NetUse < Chef::Util::Windows
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
USE_NOFORCE = 0
|
|
30
|
+
USE_FORCE = 1
|
|
31
|
+
USE_LOTS_OF_FORCE = 2 #every windows API should support this flag
|
|
32
|
+
|
|
33
|
+
USE_INFO_2 = [
|
|
34
|
+
[:local, nil],
|
|
35
|
+
[:remote, nil],
|
|
36
|
+
[:password, nil],
|
|
37
|
+
[:status, 0],
|
|
38
|
+
[:asg_type, 0],
|
|
39
|
+
[:refcount, 0],
|
|
40
|
+
[:usecount, 0],
|
|
41
|
+
[:username, nil],
|
|
42
|
+
[:domainname, nil]
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
USE_INFO_2_TEMPLATE =
|
|
46
|
+
USE_INFO_2.collect { |field| field[1].class == Fixnum ? 'i' : 'L' }.join
|
|
47
|
+
|
|
48
|
+
SIZEOF_USE_INFO_2 = #sizeof(USE_INFO_2)
|
|
49
|
+
USE_INFO_2.inject(0){|sum,item|
|
|
50
|
+
sum + (item[1].class == Fixnum ? 4 : PTR_SIZE)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
def use_info_2(args)
|
|
54
|
+
USE_INFO_2.collect { |field|
|
|
55
|
+
args.include?(field[0]) ? args[field[0]] : field[1]
|
|
56
|
+
}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def use_info_2_pack(use)
|
|
60
|
+
use.collect { |v|
|
|
61
|
+
v.class == Fixnum ? v : str_to_ptr(multi_to_wide(v))
|
|
62
|
+
}.pack(USE_INFO_2_TEMPLATE)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def use_info_2_unpack(buffer)
|
|
66
|
+
use = Hash.new
|
|
67
|
+
USE_INFO_2.each_with_index do |field,offset|
|
|
68
|
+
use[field[0]] = field[1].class == Fixnum ?
|
|
69
|
+
dword_to_i(buffer, offset) : lpwstr_to_s(buffer, offset)
|
|
70
|
+
end
|
|
71
|
+
use
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
public
|
|
75
|
+
|
|
76
|
+
def initialize(localname)
|
|
77
|
+
@localname = localname
|
|
78
|
+
@name = multi_to_wide(localname)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def add(args)
|
|
82
|
+
if args.class == String
|
|
83
|
+
remote = args
|
|
84
|
+
args = Hash.new
|
|
85
|
+
args[:remote] = remote
|
|
86
|
+
end
|
|
87
|
+
args[:local] ||= @localname
|
|
88
|
+
use = use_info_2(args)
|
|
89
|
+
buffer = use_info_2_pack(use)
|
|
90
|
+
rc = NetUseAdd.call(nil, 2, buffer, nil)
|
|
91
|
+
if rc != NERR_Success
|
|
92
|
+
raise ArgumentError, get_last_error(rc)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def get_info
|
|
97
|
+
ptr = 0.chr * PTR_SIZE
|
|
98
|
+
rc = NetUseGetInfo.call(nil, @name, 2, ptr)
|
|
99
|
+
|
|
100
|
+
if rc != NERR_Success
|
|
101
|
+
raise ArgumentError, get_last_error(rc)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
ptr = ptr.unpack('L')[0]
|
|
105
|
+
buffer = 0.chr * SIZEOF_USE_INFO_2
|
|
106
|
+
memcpy(buffer, ptr, buffer.size)
|
|
107
|
+
NetApiBufferFree(ptr)
|
|
108
|
+
use_info_2_unpack(buffer)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def device
|
|
112
|
+
get_info()[:remote]
|
|
113
|
+
end
|
|
114
|
+
#XXX should we use some FORCE here?
|
|
115
|
+
def delete
|
|
116
|
+
rc = NetUseDel.call(nil, @name, USE_NOFORCE)
|
|
117
|
+
if rc != NERR_Success
|
|
118
|
+
raise ArgumentError, get_last_error(rc)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Doug MacEachern (<dougm@vmware.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 VMware, 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/util/windows'
|
|
20
|
+
|
|
21
|
+
#wrapper around a subset of the NetUser* APIs.
|
|
22
|
+
#nothing Chef specific, but not complete enough to be its own gem, so util for now.
|
|
23
|
+
class Chef::Util::Windows::NetUser < Chef::Util::Windows
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
LogonUser = Windows::API.new('LogonUser', 'SSSLLP', 'I', 'advapi32')
|
|
28
|
+
|
|
29
|
+
DOMAIN_GROUP_RID_USERS = 0x00000201
|
|
30
|
+
|
|
31
|
+
UF_SCRIPT = 0x000001
|
|
32
|
+
UF_ACCOUNTDISABLE = 0x000002
|
|
33
|
+
UF_PASSWD_CANT_CHANGE = 0x000040
|
|
34
|
+
UF_NORMAL_ACCOUNT = 0x000200
|
|
35
|
+
UF_DONT_EXPIRE_PASSWD = 0x010000
|
|
36
|
+
|
|
37
|
+
#[:symbol_name, default_val]
|
|
38
|
+
#default_val duals as field type
|
|
39
|
+
#array index duals as structure offset
|
|
40
|
+
USER_INFO_3 = [
|
|
41
|
+
[:name, nil],
|
|
42
|
+
[:password, nil],
|
|
43
|
+
[:password_age, 0],
|
|
44
|
+
[:priv, 0], #"The NetUserAdd and NetUserSetInfo functions ignore this member"
|
|
45
|
+
[:home_dir, nil],
|
|
46
|
+
[:comment, nil],
|
|
47
|
+
[:flags, UF_SCRIPT|UF_DONT_EXPIRE_PASSWD|UF_NORMAL_ACCOUNT],
|
|
48
|
+
[:script_path, nil],
|
|
49
|
+
[:auth_flags, 0],
|
|
50
|
+
[:full_name, nil],
|
|
51
|
+
[:user_comment, nil],
|
|
52
|
+
[:parms, nil],
|
|
53
|
+
[:workstations, nil],
|
|
54
|
+
[:last_logon, 0],
|
|
55
|
+
[:last_logoff, 0],
|
|
56
|
+
[:acct_expires, -1],
|
|
57
|
+
[:max_storage, -1],
|
|
58
|
+
[:units_per_week, 0],
|
|
59
|
+
[:logon_hours, nil],
|
|
60
|
+
[:bad_pw_count, 0],
|
|
61
|
+
[:num_logons, 0],
|
|
62
|
+
[:logon_server, nil],
|
|
63
|
+
[:country_code, 0],
|
|
64
|
+
[:code_page, 0],
|
|
65
|
+
[:user_id, 0],
|
|
66
|
+
[:primary_group_id, DOMAIN_GROUP_RID_USERS],
|
|
67
|
+
[:profile, nil],
|
|
68
|
+
[:home_dir_drive, nil],
|
|
69
|
+
[:password_expired, 0]
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
USER_INFO_3_TEMPLATE =
|
|
73
|
+
USER_INFO_3.collect { |field| field[1].class == Fixnum ? 'i' : 'L' }.join
|
|
74
|
+
|
|
75
|
+
SIZEOF_USER_INFO_3 = #sizeof(USER_INFO_3)
|
|
76
|
+
USER_INFO_3.inject(0){|sum,item|
|
|
77
|
+
sum + (item[1].class == Fixnum ? 4 : PTR_SIZE)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
def user_info_3(args)
|
|
81
|
+
USER_INFO_3.collect { |field|
|
|
82
|
+
args.include?(field[0]) ? args[field[0]] : field[1]
|
|
83
|
+
}
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def user_info_3_pack(user)
|
|
87
|
+
user.collect { |v|
|
|
88
|
+
v.class == Fixnum ? v : str_to_ptr(multi_to_wide(v))
|
|
89
|
+
}.pack(USER_INFO_3_TEMPLATE)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def user_info_3_unpack(buffer)
|
|
93
|
+
user = Hash.new
|
|
94
|
+
USER_INFO_3.each_with_index do |field,offset|
|
|
95
|
+
user[field[0]] = field[1].class == Fixnum ?
|
|
96
|
+
dword_to_i(buffer, offset) : lpwstr_to_s(buffer, offset)
|
|
97
|
+
end
|
|
98
|
+
user
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def set_info(args)
|
|
102
|
+
user = user_info_3(args)
|
|
103
|
+
buffer = user_info_3_pack(user)
|
|
104
|
+
rc = NetUserSetInfo.call(nil, @name, 3, buffer, nil)
|
|
105
|
+
if rc != NERR_Success
|
|
106
|
+
raise ArgumentError, get_last_error(rc)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
public
|
|
111
|
+
|
|
112
|
+
def initialize(username)
|
|
113
|
+
@username = username
|
|
114
|
+
@name = multi_to_wide(username)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
LOGON32_PROVIDER_DEFAULT = 0
|
|
118
|
+
LOGON32_LOGON_NETWORK = 3
|
|
119
|
+
#XXX for an extra painful alternative, see: http://support.microsoft.com/kb/180548
|
|
120
|
+
def validate_credentials(passwd)
|
|
121
|
+
token = 0.chr * PTR_SIZE
|
|
122
|
+
res = LogonUser.call(@username, nil, passwd,
|
|
123
|
+
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, token)
|
|
124
|
+
if res == 0
|
|
125
|
+
return false
|
|
126
|
+
end
|
|
127
|
+
::Windows::Handle::CloseHandle.call(token.unpack('L')[0])
|
|
128
|
+
return true
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def get_info
|
|
132
|
+
ptr = 0.chr * PTR_SIZE
|
|
133
|
+
rc = NetUserGetInfo.call(nil, @name, 3, ptr)
|
|
134
|
+
|
|
135
|
+
if rc != NERR_Success
|
|
136
|
+
raise ArgumentError, get_last_error(rc)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
ptr = ptr.unpack('L')[0]
|
|
140
|
+
buffer = 0.chr * SIZEOF_USER_INFO_3
|
|
141
|
+
memcpy(buffer, ptr, buffer.size)
|
|
142
|
+
NetApiBufferFree(ptr)
|
|
143
|
+
user_info_3_unpack(buffer)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def add(args)
|
|
147
|
+
user = user_info_3(args)
|
|
148
|
+
buffer = user_info_3_pack(user)
|
|
149
|
+
|
|
150
|
+
rc = NetUserAdd.call(nil, 3, buffer, rc)
|
|
151
|
+
if rc != NERR_Success
|
|
152
|
+
raise ArgumentError, get_last_error(rc)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
#usri3_primary_group_id:
|
|
156
|
+
#"When you call the NetUserAdd function, this member must be DOMAIN_GROUP_RID_USERS"
|
|
157
|
+
NetLocalGroupAddMembers(nil, multi_to_wide("Users"), 3, buffer[0,PTR_SIZE], 1)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def user_modify(&proc)
|
|
161
|
+
user = get_info
|
|
162
|
+
user[:last_logon] = user[:units_per_week] = 0 #ignored as per USER_INFO_3 doc
|
|
163
|
+
user[:logon_hours] = nil #PBYTE field; \0 == no changes
|
|
164
|
+
proc.call(user)
|
|
165
|
+
set_info(user)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def update(args)
|
|
169
|
+
user_modify do |user|
|
|
170
|
+
args.each do |key,val|
|
|
171
|
+
user[key] = val
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def delete
|
|
177
|
+
rc = NetUserDel.call(nil, @name)
|
|
178
|
+
if rc != NERR_Success
|
|
179
|
+
raise ArgumentError, get_last_error(rc)
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def disable_account
|
|
184
|
+
user_modify do |user|
|
|
185
|
+
user[:flags] |= UF_ACCOUNTDISABLE
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def enable_account
|
|
190
|
+
user_modify do |user|
|
|
191
|
+
user[:flags] &= ~UF_ACCOUNTDISABLE
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def check_enabled
|
|
196
|
+
(get_info()[:flags] & UF_ACCOUNTDISABLE) != 0
|
|
197
|
+
end
|
|
198
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Doug MacEachern (<dougm@vmware.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 VMware, 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
|
+
#simple wrapper around Volume APIs. might be possible with WMI, but possibly more complex.
|
|
20
|
+
|
|
21
|
+
require 'chef/util/windows'
|
|
22
|
+
require 'windows/volume'
|
|
23
|
+
|
|
24
|
+
class Chef::Util::Windows::Volume < Chef::Util::Windows
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
include Windows::Volume
|
|
28
|
+
#XXX not defined in the current windows-pr release
|
|
29
|
+
DeleteVolumeMountPoint =
|
|
30
|
+
Windows::API.new('DeleteVolumeMountPoint', 'S', 'B') unless defined? DeleteVolumeMountPoint
|
|
31
|
+
|
|
32
|
+
public
|
|
33
|
+
|
|
34
|
+
def initialize(name)
|
|
35
|
+
name += "\\" unless name =~ /\\$/ #trailing slash required
|
|
36
|
+
@name = name
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def device
|
|
40
|
+
buffer = 0.chr * 256
|
|
41
|
+
if GetVolumeNameForVolumeMountPoint(@name, buffer, buffer.size)
|
|
42
|
+
return buffer[0,buffer.size].unpack("Z*")[0]
|
|
43
|
+
else
|
|
44
|
+
raise ArgumentError, get_last_error
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def delete
|
|
49
|
+
unless DeleteVolumeMountPoint.call(@name)
|
|
50
|
+
raise ArgumentError, get_last_error
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def add(device)
|
|
55
|
+
unless SetVolumeMountPoint(@name, device)
|
|
56
|
+
raise ArgumentError, get_last_error
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Doug MacEachern (<dougm@vmware.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 VMware, 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
|
+
#requires: gem install windows-pr
|
|
19
|
+
require 'windows/api'
|
|
20
|
+
require 'windows/error'
|
|
21
|
+
require 'windows/handle'
|
|
22
|
+
require 'windows/unicode'
|
|
23
|
+
require 'windows/msvcrt/buffer'
|
|
24
|
+
require 'windows/msvcrt/string'
|
|
25
|
+
require 'windows/network/management'
|
|
26
|
+
|
|
27
|
+
class Chef
|
|
28
|
+
class Util
|
|
29
|
+
class Windows
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
include ::Windows::Error
|
|
33
|
+
include ::Windows::Unicode
|
|
34
|
+
include ::Windows::MSVCRT::Buffer
|
|
35
|
+
include ::Windows::MSVCRT::String
|
|
36
|
+
include ::Windows::Network::Management
|
|
37
|
+
|
|
38
|
+
PTR_SIZE = 4 #XXX 64-bit
|
|
39
|
+
|
|
40
|
+
def lpwstr_to_s(buffer, offset)
|
|
41
|
+
str = 0.chr * (256 * 2) #XXX unhardcode this length (*2 for WCHAR)
|
|
42
|
+
wcscpy str, buffer[offset*PTR_SIZE,PTR_SIZE].unpack('L')[0]
|
|
43
|
+
wide_to_multi str
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def dword_to_i(buffer, offset)
|
|
47
|
+
buffer[offset*PTR_SIZE,PTR_SIZE].unpack('i')[0] || 0
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
#return pointer for use with pack('L')
|
|
51
|
+
def str_to_ptr(v)
|
|
52
|
+
[v].pack('p*').unpack('L')[0]
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
data/lib/chef/version.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 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
|
+
class Chef
|
|
19
|
+
CHEF_ROOT = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
|
20
|
+
VERSION = '0.9.12.1'
|
|
21
|
+
end
|