Module: Puppet::Util::Windows::ADSI
- Extended by:
- FFI::Library
- Defined in:
- lib/puppet/util/windows.rb,
lib/puppet/util/windows/adsi.rb
Defined Under Namespace
Classes: ADSIObject, Group, User, UserProfile
Constant Summary collapse
- STANDALONE_WORKSTATION =
0
- MEMBER_WORKSTATION =
1
- STANDALONE_SERVER =
2
- MEMBER_SERVER =
3
- BACKUP_DOMAIN_CONTROLLER =
4
- PRIMARY_DOMAIN_CONTROLLER =
5
- DOMAIN_ROLES =
{ STANDALONE_WORKSTATION => :STANDALONE_WORKSTATION, MEMBER_WORKSTATION => :MEMBER_WORKSTATION, STANDALONE_SERVER => :STANDALONE_SERVER, MEMBER_SERVER => :MEMBER_SERVER, BACKUP_DOMAIN_CONTROLLER => :BACKUP_DOMAIN_CONTROLLER, PRIMARY_DOMAIN_CONTROLLER => :PRIMARY_DOMAIN_CONTROLLER, } - MAX_COMPUTERNAME_LENGTH =
31
Class Method Summary collapse
Class Method Details
.computer_name ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | # File 'lib/puppet/util/windows/adsi.rb', line 49 def computer_name unless @computer_name max_length = MAX_COMPUTERNAME_LENGTH + 1 FFI::MemoryPointer.new(max_length * 2) do |buffer| FFI::MemoryPointer.new(:dword, 1) do |buffer_size| buffer_size.write_dword(max_length) if GetComputerNameW(buffer, buffer_size) == FFI::WIN32_FALSE raise Puppet::Util::Windows::Error, _("Failed to get computer name") end @computer_name = buffer.read_wide_string(buffer_size.read_dword) end end end @computer_name end |
.computer_uri(host = '.') ⇒ Object
67 68 69 | # File 'lib/puppet/util/windows/adsi.rb', line 67 def computer_uri(host = '.') "WinNT://#{host}" end |
.connect(uri) ⇒ Object
32 33 34 35 36 | # File 'lib/puppet/util/windows/adsi.rb', line 32 def connect(uri) WIN32OLE.connect(uri) rescue WIN32OLERuntimeError => e raise Puppet::Error.new(_("ADSI connection error: %{e}") % { e: e }, e) end |
.connectable?(uri) ⇒ Boolean
26 27 28 29 30 | # File 'lib/puppet/util/windows/adsi.rb', line 26 def connectable?(uri) !!connect(uri) rescue false end |
.create(name, resource_type) ⇒ Object
38 39 40 | # File 'lib/puppet/util/windows/adsi.rb', line 38 def create(name, resource_type) Puppet::Util::Windows::ADSI.connect(computer_uri).Create(resource_type, name) end |
.delete(name, resource_type) ⇒ Object
42 43 44 | # File 'lib/puppet/util/windows/adsi.rb', line 42 def delete(name, resource_type) Puppet::Util::Windows::ADSI.connect(computer_uri).Delete(resource_type, name) end |
.domain_role ⇒ Object
113 114 115 116 117 118 119 | # File 'lib/puppet/util/windows/adsi.rb', line 113 def domain_role unless @domain_role query_result = Puppet::Util::Windows::ADSI.execquery('select DomainRole from Win32_ComputerSystem').to_enum.first @domain_role = DOMAIN_ROLES[query_result.DomainRole] if query_result end @domain_role end |
.execquery(query) ⇒ Object
109 110 111 | # File 'lib/puppet/util/windows/adsi.rb', line 109 def execquery(query) wmi_connection.execquery(query) end |
.sid_uri(sid) ⇒ Object
This method should only be used to generate WinNT://<SID> style monikers used for IAdsGroup::Add / IAdsGroup::Remove. These URIs are not useable to resolve an account with WIN32OLE.connect
95 96 97 98 99 | # File 'lib/puppet/util/windows/adsi.rb', line 95 def sid_uri(sid) raise Puppet::Error, _("Must use a valid SID::Principal") unless sid.is_a?(Puppet::Util::Windows::SID::Principal) "WinNT://#{sid.sid}" end |
.sid_uri_safe(sid) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method should only be used to generate WinNT://<SID> style monikers used for IAdsGroup::Add / IAdsGroup::Remove. These URIs are not usable to resolve an account with WIN32OLE.connect Valid input is a SID::Principal, S-X-X style SID string or any valid account name with or without domain prefix
.uri(resource_name, resource_type, host = '.') ⇒ Object
101 102 103 | # File 'lib/puppet/util/windows/adsi.rb', line 101 def uri(resource_name, resource_type, host = '.') "#{computer_uri(host)}/#{resource_name},#{resource_type}" end |
.wmi_connection ⇒ Object
105 106 107 | # File 'lib/puppet/util/windows/adsi.rb', line 105 def wmi_connection connect(wmi_resource_uri) end |
.wmi_resource_uri(host = '.') ⇒ Object
71 72 73 | # File 'lib/puppet/util/windows/adsi.rb', line 71 def wmi_resource_uri(host = '.') "winmgmts:{impersonationLevel=impersonate}!//#{host}/root/cimv2" end |