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: Group, User, UserProfile

Constant Summary collapse

MAX_COMPUTERNAME_LENGTH =

taken from winbase.h

31

Class Method Summary collapse

Methods included from FFI::Library

attach_function_private

Class Method Details

.computer_nameObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/puppet/util/windows/adsi.rb', line 34

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.new("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



51
52
53
# File 'lib/puppet/util/windows/adsi.rb', line 51

def computer_uri(host = '.')
  "WinNT://#{host}"
end

.connect(uri) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/puppet/util/windows/adsi.rb', line 15

def connect(uri)
  begin
    WIN32OLE.connect(uri)
  rescue Exception => e
    raise Puppet::Error.new( "ADSI connection error: #{e}", e )
  end
end

.connectable?(uri) ⇒ Boolean

Returns:

  • (Boolean)


7
8
9
10
11
12
13
# File 'lib/puppet/util/windows/adsi.rb', line 7

def connectable?(uri)
  begin
    !! connect(uri)
  rescue
    false
  end
end

.create(name, resource_type) ⇒ Object



23
24
25
# File 'lib/puppet/util/windows/adsi.rb', line 23

def create(name, resource_type)
  Puppet::Util::Windows::ADSI.connect(computer_uri).Create(resource_type, name)
end

.delete(name, resource_type) ⇒ Object



27
28
29
# File 'lib/puppet/util/windows/adsi.rb', line 27

def delete(name, resource_type)
  Puppet::Util::Windows::ADSI.connect(computer_uri).Delete(resource_type, name)
end

.execquery(query) ⇒ Object



84
85
86
# File 'lib/puppet/util/windows/adsi.rb', line 84

def execquery(query)
  wmi_connection.execquery(query)
end

.sid_for_account(name) ⇒ Object



88
89
90
91
92
# File 'lib/puppet/util/windows/adsi.rb', line 88

def (name)
  Puppet.deprecation_warning "Puppet::Util::Windows::ADSI.sid_for_account is deprecated and will be removed in 3.0, use Puppet::Util::Windows::SID.name_to_sid instead."

  Puppet::Util::Windows::SID.name_to_sid(name)
end

.sid_uri(sid) ⇒ Object

Raises:



71
72
73
74
# File 'lib/puppet/util/windows/adsi.rb', line 71

def sid_uri(sid)
  raise Puppet::Error.new( "Must use a valid SID object" ) if !sid.kind_of?(Win32::Security::SID)
  "WinNT://#{sid.to_s}"
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.



60
61
62
63
64
65
66
67
68
69
# File 'lib/puppet/util/windows/adsi.rb', line 60

def sid_uri_safe(sid)
  return sid_uri(sid) if sid.kind_of?(Win32::Security::SID)

  begin
    sid = Win32::Security::SID.new(Win32::Security::SID.string_to_sid(sid))
    sid_uri(sid)
  rescue SystemCallError
    nil
  end
end

.uri(resource_name, resource_type, host = '.') ⇒ Object



76
77
78
# File 'lib/puppet/util/windows/adsi.rb', line 76

def uri(resource_name, resource_type, host = '.')
  "#{computer_uri(host)}/#{resource_name},#{resource_type}"
end

.wmi_connectionObject



80
81
82
# File 'lib/puppet/util/windows/adsi.rb', line 80

def wmi_connection
  connect(wmi_resource_uri)
end

.wmi_resource_uri(host = '.') ⇒ Object



55
56
57
# File 'lib/puppet/util/windows/adsi.rb', line 55

def wmi_resource_uri( host = '.' )
  "winmgmts:{impersonationLevel=impersonate}!//#{host}/root/cimv2"
end