Class LDAP::Schema2
In: lib/activeldap/schema2.rb
Parent: Schema
LDAP::Error PrettyError Schema Schema2 Conn lib/activeldap/schema2.rb lib/activeldap/ldap.rb LDAP Module: LDAP

Methods

Public Instance methods

attr

This is just like LDAP::Schema#attr except that it allows look up in any of the given keys. e.g.

 attr('attributeTypes', 'cn', 'DESC')
 attr('ldapSyntaxes', '1.3.6.1.4.1.1466.115.121.1.5', 'DESC')

[Source]

    # File lib/activeldap/schema2.rb, line 16
16:     def attr(sub, type, at)
17:       return [] if sub.empty?
18:       return [] if type.empty?
19:       return [] if at.empty?
20: 
21:       type = type.downcase # We're going case insensitive.
22: 
23:       # Check already parsed options first
24:       if @@attr_cache.has_key? sub \
25:         and @@attr_cache[sub].has_key? type \
26:         and @@attr_cache[sub][type].has_key? at
27:           return @@attr_cache[sub][type][at].dup
28:       end
29: 
30:       # Initialize anything that is required
31:       unless @@attr_cache.has_key? sub
32:         @@attr_cache[sub] = {}
33:       end
34:       
35:       unless @@attr_cache[sub].has_key? type
36:         @@attr_cache[sub][type] = {}
37:       end
38: 
39:       at = at.upcase
40:       self[sub].each do |s|
41:         line = '' 
42:         if type[0..0] =~ /[0-9]/
43:           if s =~ /\(\s+(?i:#{type})\s+(?:[A-Z]|\))/
44:             line = s
45:           end
46:         else
47:           if s =~ /NAME\s+\(?.*'(?i:#{type})'.*\)?\s+(?:[A-Z]|\))/
48:             line = s
49:           end
50:         end
51: 
52:         # I need to check, but I think some of these matchs
53:         # overlap. I'll need to check these when I'm less sleepy.
54:         multi = ''
55:         case line
56:           when /#{at}\s+[\)A-Z]/
57:             @@attr_cache[sub][type][at] = ['TRUE']
58:             return ['TRUE']
59:           when /#{at}\s+'(.+?)'/
60:             @@attr_cache[sub][type][at] = [$1]
61:             return [$1]
62:           when /#{at}\s+\((.+?)\)/
63:             multi = $1
64:           when /#{at}\s+\(([\w\d\s\.]+)\)/
65:             multi = $1
66:           when /#{at}\s+([\w\d\.]+)/
67:             @@attr_cache[sub][type][at] = [$1]
68:             return [$1]
69:         end
70:         # Split up multiple matches
71:         # if oc then it is sep'd by $
72:         # if attr then bu spaces
73:         if multi.match(/\$/)
74:           @@attr_cache[sub][type][at] = multi.split("$").collect{|attr| attr.strip}
75:           return @@attr_cache[sub][type][at].dup
76:         elsif not multi.empty?
77:           @@attr_cache[sub][type][at] = multi.gsub(/'/, '').split(' ').collect{|attr| attr.strip}
78:           return @@attr_cache[sub][type][at].dup
79:         end
80:       end
81:       @@attr_cache[sub][type][at] = []
82:       return []
83:     end

attribute_aliases

Returns all names from the LDAP schema for the attribute given.

[Source]

    # File lib/activeldap/schema2.rb, line 89
89:     def attribute_aliases(attr)
90:       attr('attributeTypes', attr, 'NAME')
91:     end

binary?

Returns true if the given attribute’s syntax is X-NOT-HUMAN-READABLE or X-BINARY-TRANSFER-REQUIRED

[Source]

     # File lib/activeldap/schema2.rb, line 118
118:     def binary?(attr)
119:       # Get syntax OID
120:       syntax = attr('attributeTypes', attr, 'SYNTAX')
121:       return false if syntax.empty?
122: 
123:       # This seems to indicate binary
124:       result = attr('ldapSyntaxes', syntax[0], 'X-NOT-HUMAN-READABLE')
125:       return true if result[0] == "TRUE"
126: 
127:       # Get if binary transfer is required (non-binary types)
128:       # Usually these have the above tag
129:       result = attr('ldapSyntaxes', syntax[0], 'X-BINARY-TRANSFER-REQUIRED')
130:       return true if result[0] == "TRUE"
131: 
132:       return false
133:     end

binary_required?

Returns true if the value MUST be transferred in binary

[Source]

     # File lib/activeldap/schema2.rb, line 138
138:     def binary_required?(attr)
139:       # Get syntax OID
140:       syntax = attr('attributeTypes', attr, 'SYNTAX')
141:       return false if syntax.empty?
142: 
143:       # Get if binary transfer is required (non-binary types)
144:       # Usually these have the above tag
145:       result = attr('ldapSyntaxes', syntax[0], 'X-BINARY-TRANSFER-REQUIRED')
146:       return true if result[0] == "TRUE"
147: 
148:       return false
149:     end

class_attributes

Returns an Array of all the valid attributes (but not with full aliases) for the given objectClass

[Source]

     # File lib/activeldap/schema2.rb, line 155
155:     def class_attributes(objc)
156:       if @@class_cache.has_key? objc
157:         return @@class_cache[objc]
158:       end
159: 
160:       # Setup the cache
161:       @@class_cache[objc] = {}
162: 
163:       # First get all the current level attributes
164:       @@class_cache[objc] = {:must => attr('objectClasses', objc, 'MUST'), 
165:         :may => attr('objectClasses', objc, 'MAY')}
166: 
167:       # Now add all attributes from the parent object (SUPerclasses)
168:       # Hopefully an iterative approach will be pretty speedy
169:       # 1. build complete list of SUPs
170:       # 2. Add attributes from each
171:       sups = attr('objectClasses', objc, 'SUP')
172:       loop do 
173:         start_size = sups.size
174:         new_sups = []
175:         sups.each do |sup|
176:           new_sups += attr('objectClasses', sup, 'SUP')
177:         end
178: 
179:         sups += new_sups
180:         sups.uniq!
181:         break if sups.size == start_size
182:       end
183:       sups.each do |sup|
184:         @@class_cache[objc][:must] += attr('objectClasses', sup, 'MUST')
185:         @@class_cache[objc][:may] += attr('objectClasses', sup, 'MAY')
186:       end
187: 
188:       # Clean out the dupes.
189:       @@class_cache[objc][:must].uniq!
190:       @@class_cache[objc][:may].uniq!
191: 
192:       # Return the cached value
193:       return @@class_cache[objc].dup
194:     end

read_only?

Returns true if an attribute is read-only NO-USER-MODIFICATION

[Source]

     # File lib/activeldap/schema2.rb, line 97
 97:     def read_only?(attr)
 98:       result = attr('attributeTypes', attr, 'NO-USER-MODIFICATION')
 99:       return true if result[0] == 'TRUE'
100:       return false 
101:     end

single_value?

Returns true if an attribute can only have one value defined SINGLE-VALUE

[Source]

     # File lib/activeldap/schema2.rb, line 108
108:     def single_value?(attr)
109:       result = attr('attributeTypes', attr, 'SINGLE-VALUE')
110:       return true if result[0] == 'TRUE'
111:       return false 
112:     end

[Validate]