Class: Jamf::LdapServer

Inherits:
APIObject show all
Defined in:
lib/jamf/api/classic/api_objects/ldap_server.rb

Overview

An LDAP server in the JSS.

This class doesn’t curretly provide creation or updaing of LDAP server definitions in the JSS. Please use the JSS web UI.

However, it does provide methods for querying users and usergroups from LDAP servers, and checking group membership.

The class methods LdapServer.user_in_ldap? and LdapServer.group_in_ldap? can be used to check all defined LDAP servers for a user or group. They are used by Scopable::Scope when adding user and groups to scope limitations and exceptions.

Within an LdapServer instance, the methods #find_user and #find_group will return all matches in the server for a given search term.

See Also:

Constant Summary collapse

RSRC_BASE =

The base for REST resources of this class

'ldapservers'.freeze
RSRC_LIST_KEY =

the hash key used for the JSON list output of all objects in the JSS

:ldap_servers
RSRC_OBJECT_KEY =

The hash key used for the JSON object output. It’s also used in various error messages

:ldap_server
DEFAULT_PORT =

the default LDAP port

389
SEARCH_SCOPES =

possible values for search scope

['All Subtrees', 'First Level Only'].freeze
AUTH_TYPES =

possible authentication types

{ 'none' => :anonymous, 'simple' => :simple, 'CRAM-MD5' => :cram_md5, 'DIGEST-MD5' => :digest_md5 }.freeze
REFERRAL_RESPONSES =

possible referral responses

['', nil, 'follow', 'ignore'].freeze
OBJECT_CLASS_MAPPING_OPTIONS =

possible objectclass mapping options

%w[any all].freeze
OBJECT_HISTORY_OBJECT_TYPE =

the object type for this object in the object history table. See APIObject#add_object_history_entry

80

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**args) ⇒ LdapServer

See Jamf::APIObject#initialize



280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 280

def initialize(**args)
  super

  @hostname = @init_data[:connection][:hostname]
  @port = @init_data[:connection][:port]
  @use_ssl = @init_data[:connection][:use_ssl]
  @authentication_type = AUTH_TYPES[@init_data[:connection][:authentication_type]]
  @open_close_timeout = @init_data[:connection][:open_close_timeout]
  @search_timeout = @init_data[:connection][:search_timeout]
  @referral_response = @init_data[:connection][:referral_response]
  @use_wildcards = @init_data[:connection][:use_wildcards]

  @lookup_dn = @init_data[:connection][:account][:distinguished_username]
  @lookup_pw_sha256 = @init_data[:connection][:account][:password_sha256]

  @user_mappings = @init_data[:mappings_for_users][:user_mappings]
  @user_group_mappings = @init_data[:mappings_for_users][:user_group_mappings]
  @user_group_membership_mappings = @init_data[:mappings_for_users][:user_group_membership_mappings]

  @connection = nil
  @connected = false
end

Instance Attribute Details

#authentication_typeString (readonly)



195
196
197
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 195

def authentication_type
  @authentication_type
end

#hostanmeString (readonly)



186
187
188
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 186

def hostanme
  @hostanme
end

#lookup_dnString (readonly)



198
199
200
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 198

def lookup_dn
  @lookup_dn
end

#lookup_pw_sha256String (readonly)



201
202
203
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 201

def lookup_pw_sha256
  @lookup_pw_sha256
end

#open_close_timeoutInteger (readonly)



204
205
206
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 204

def open_close_timeout
  @open_close_timeout
end

#portInteger (readonly)



189
190
191
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 189

def port
  @port
end

#referral_responseString (readonly)



210
211
212
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 210

def referral_response
  @referral_response
end

#search_timeoutInteger (readonly)



207
208
209
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 207

def search_timeout
  @search_timeout
end

#use_sslBoolean (readonly)



192
193
194
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 192

def use_ssl
  @use_ssl
end

#use_wildcardsBoolean (readonly)



213
214
215
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 213

def use_wildcards
  @use_wildcards
end

#user_group_mappingsHash<Symbol=>String> (readonly)

The LDAP attributes mapped to various user group data

The hash keys are:

  • :search_base =>

  • :search_scope =>

  • :object_classes =>

  • :map_object_class_to_any_or_all =>

  • :map_group_id =>

  • :map_group_name =>

  • :map_group_uuid =>



251
252
253
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 251

def user_group_mappings
  @user_group_mappings
end

#user_group_membership_mappingsHash<Symbol=>String> (readonly)

The LDAP attributes used to identify a user as a member of a group

The hash keys are:

  • :user_group_membership_stored_in =>

  • :map_user_membership_use_dn =>

  • :map_group_membership_to_user_field =>

  • :group_id =>

  • :map_object_class_to_any_or_all =>

  • :append_to_username =>

  • :username =>

  • :object_classes =>

  • :use_dn =>

  • :search_base =>

  • :recursive_lookups =>

  • :search_scope =>

  • :map_user_membership_to_group_field =>



272
273
274
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 272

def user_group_membership_mappings
  @user_group_membership_mappings
end

#user_mappingsHash<Symbol=>String> (readonly)

The LDAP attributes mapped to various user data

The hash keys are:

  • :search_base =>

  • :search_scope =>

  • :object_classes =>

  • :map_object_class_to_any_or_all =>

  • :map_username =>

  • :map_user_id =>

  • :map_department =>

  • :map_building =>

  • :map_room =>

  • :map_realname =>

  • :map_phone =>

  • :map_email_address =>

  • :map_position =>

  • :map_user_uuid =>

  • :append_to_email_results =>



236
237
238
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 236

def user_mappings
  @user_mappings
end

Class Method Details

.check_membership(ldap_server, user, group, api: nil, cnx: Jamf.cnx) ⇒ Boolean

On a given server, does a given group contain a given user?

This class method allows the check to happen without instanting the LdapServer.



167
168
169
170
171
172
173
174
175
176
177
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 167

def self.check_membership(ldap_server, user, group, api: nil, cnx: Jamf.cnx)
  cnx = api if api

  ldap_server_id = valid_id ldap_server
  raise Jamf::NoSuchItemError, "No LdapServer matching #{ldap_server}" unless ldap_server_id

  rsrc = "#{RSRC_BASE}/id/#{ldap_server_id}/group/#{CGI.escape group.to_s}/user/#{CGI.escape user.to_s}"
  member_check = cnx.c_get rsrc

  !member_check[:ldap_users].empty?
end

.group_in_ldap?(group, api: nil, cnx: Jamf.cnx) ⇒ Boolean

For Backward Compatibility,



146
147
148
149
150
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 146

def self.group_in_ldap?(group, api: nil, cnx: Jamf.cnx)
  cnx = api if api

  server_for_group(group, cnx: cnx) ? true : false
end

.server_for_group(group, api: nil, cnx: Jamf.cnx) ⇒ Integer?

Does a group exist in any ldap server?



128
129
130
131
132
133
134
135
136
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 128

def self.server_for_group(group, api: nil, cnx: Jamf.cnx)
  cnx = api if api

  all_objects(:refresh, cnx: cnx).each do |ldap|
    next if ldap.find_group(group, :exact).empty?
    return ldap.id
  end
  nil
end

.server_for_user(user, api: nil, cnx: Jamf.cnx) ⇒ Integer?



95
96
97
98
99
100
101
102
103
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 95

def self.server_for_user(user, api: nil, cnx: Jamf.cnx)
  cnx = api if api

  all_objects(:refresh, cnx: cnx).each do |ldap|
    next if ldap.find_user(user, :exact).empty?
    return ldap.id
  end
  nil
end

.user_in_ldap?(user, api: nil, cnx: Jamf.cnx) ⇒ Boolean

For Backward Compatibility,



113
114
115
116
117
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 113

def self.user_in_ldap?(user, api: nil, cnx: Jamf.cnx)
  cnx = api if api

  server_for_user(user, cnx: cnx) ? true : false
end

Instance Method Details

#check_membership(user, group) ⇒ Boolean?

Returns is the user a member? Nil if unable to check.



338
339
340
341
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 338

def check_membership(user, group)
  raise Jamf::NoSuchItemError, 'LdapServer not yet saved in the JSS' unless @in_jss
  self.class.check_membership @id, user, group, cnx: @cnx
end

#find_group(group, exact = false) ⇒ Array<Hash>

Returns The groupname and uid for all groups matching the query.



326
327
328
329
330
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 326

def find_group(group, exact = false)
  raise Jamf::NoSuchItemError, 'LdapServer not yet saved in the JSS' unless @in_jss
  raw = cnx.c_get("#{RSRC_BASE}/id/#{@id}/group/#{CGI.escape group.to_s}")[:ldap_groups]
  exact ? raw.select { |u| u[:groupname] == group } : raw
end

#find_user(user, exact = false) ⇒ Array<Hash>

Search for a user in this ldap server



314
315
316
317
318
# File 'lib/jamf/api/classic/api_objects/ldap_server.rb', line 314

def find_user(user, exact = false)
  raise Jamf::NoSuchItemError, 'LdapServer not yet saved in the JSS' unless @in_jss
  raw = cnx.c_get("#{RSRC_BASE}/id/#{@id}/user/#{CGI.escape user.to_s}")[:ldap_users]
  exact ? raw.select { |u| u[:username] == user } : raw
end