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 =

taken from winbase.h

31

Class Method Summary collapse

Class Method Details

.computer_nameObject

 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 # NULL terminated  FFI::MemoryPointer.new(max_length * 2) do |buffer| # wide string  FFI::MemoryPointer.new(:dword, 1) do |buffer_size| buffer_size.write_dword(max_length) # length in TCHARs  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

Returns:

  • (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_roleObject

 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

Raises:

 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

 81 82 83 84 85 86 87 88 89 90
# File 'lib/puppet/util/windows/adsi.rb', line 81 def sid_uri_safe(sid) return sid_uri(sid) if sid.is_a?(Puppet::Util::Windows::SID::Principal) begin sid = Puppet::Util::Windows::SID.name_to_principal(sid) sid_uri(sid) rescue Puppet::Util::Windows::Error, Puppet::Error nil end end

.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_connectionObject

 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