ruby-activeldap 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,25 @@
1
+
2
+ module ActiveLDAP
3
+ # Configuration
4
+ #
5
+ # Configuration provides the default settings required for
6
+ # ActiveLDAP to work with your LDAP server. All of these
7
+ # settings can be passed in at initialization time.
8
+ module Configuration
9
+ @@host = "localhost"
10
+ @@port = 389
11
+ @@bind_format = "uid=%s,ou=People,dc=example,dc=com"
12
+
13
+ # Make the return value the string that is your LDAP base
14
+ def Base.base
15
+ 'dc=example,dc=com'
16
+ end
17
+
18
+ # This is optionally set to the array of objectClass names
19
+ # that are minimally required for EVERY object on your LDAP server.
20
+ # If you don't want one, set this to [].
21
+ def Base.required_classes
22
+ ['top']
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,141 @@
1
+ require 'ldap'
2
+ require 'ldap/schema'
3
+
4
+ module LDAP
5
+ class Schema2 < Schema
6
+
7
+ # attr
8
+ #
9
+ # This is just like LDAP::Schema#attr except that it allows
10
+ # look up in any of the given keys.
11
+ # e.g.
12
+ # attr('attributeTypes', 'cn', 'DESC')
13
+ # attr('ldapSyntaxes', '1.3.6.1.4.1.1466.115.121.1.5', 'DESC')
14
+ def attr(sub, type, at)
15
+ return '' if sub.empty?
16
+ return '' if type.empty?
17
+ return '' if at.empty?
18
+
19
+ at = at.upcase
20
+ self[sub].each do |s|
21
+ line = ''
22
+ if type[0..0] =~ /[0-9]/
23
+ line = s if s =~ /\(\s+#{type}\s+([A-Z]|\))/
24
+ else
25
+ line = s if s =~ /NAME\s+\(?.*'#{type}'.*\)?\s+([A-Z]|\))/
26
+ end
27
+
28
+ # I need to check, but I think some of these matchs
29
+ # overlap. I'll need to check these when I'm less sleepy.
30
+ multi = ''
31
+ case line
32
+ when /#{at}\s+[\)A-Z]/
33
+ return ['TRUE']
34
+ when /#{at}\s+'(.+?)'/
35
+ return [$1]
36
+ when /#{at}\s+\((.+?)\)/
37
+ multi = $1
38
+ when /#{at}\s+\(([\w\d\s\.]+)\)/
39
+ multi = $1
40
+ when /#{at}\s+([\w\d\.]+)/
41
+ return [$1]
42
+ end
43
+ # Split up multiple matches
44
+ # if oc then it is sep'd by $
45
+ # if attr then bu spaces
46
+ if multi.match(/\$/)
47
+ return multi.split("$").collect{|attr| attr.strip}
48
+ elsif not multi.empty?
49
+ return multi.gsub(/'/, '').split(' ').collect{|attr| attr.strip}
50
+ end
51
+ end
52
+ return []
53
+ end
54
+
55
+ # attribute_aliases
56
+ #
57
+ # Returns all names from the LDAP schema for the
58
+ # attribute given.
59
+ def attribute_aliases(attr)
60
+ attr('attributeTypes', attr, 'NAME')
61
+ end # attribute aliases
62
+
63
+ # read_only?
64
+ #
65
+ # Returns true if an attribute is read-only
66
+ # NO-USER-MODIFICATION
67
+ def read_only?(attr)
68
+ result = attr('attributeTypes', attr, 'NO-USER-MODIFICATION')
69
+ return true if result[0] == 'TRUE'
70
+ return false
71
+ end
72
+
73
+ # single_value?
74
+ #
75
+ # Returns true if an attribute can only have one
76
+ # value defined
77
+ # SINGLE-VALUE
78
+ def single_value?(attr)
79
+ result = attr('attributeTypes', attr, 'SINGLE-VALUE')
80
+ return true if result[0] == 'TRUE'
81
+ return false
82
+ end
83
+
84
+ # binary?
85
+ #
86
+ # Returns true if the given attribute's syntax
87
+ # is X-NOT-HUMAN-READABLE or X-BINARY-TRANSFER-REQUIRED
88
+ def binary?(attr)
89
+ # Get syntax OID
90
+ syntax = attr('attributeTypes', attr, 'SYNTAX')
91
+ return false if syntax.empty?
92
+
93
+ # This seems to indicate binary
94
+ result = attr('ldapSyntaxes', syntax[0], 'X-NOT-HUMAN-READABLE')
95
+ return true if result[0] == "TRUE"
96
+
97
+ # Get if binary transfer is required (non-binary types)
98
+ # Usually these have the above tag
99
+ result = attr('ldapSyntaxes', syntax[0], 'X-BINARY-TRANSFER-REQUIRED')
100
+ return true if result[0] == "TRUE"
101
+
102
+ return false
103
+ end # binary?
104
+
105
+ # binary_required?
106
+ #
107
+ # Returns true if the value MUST be transferred in binary
108
+ def binary_required?(attr)
109
+ # Get syntax OID
110
+ syntax = attr('attributeTypes', attr, 'SYNTAX')
111
+ return false if syntax.empty?
112
+
113
+ # Get if binary transfer is required (non-binary types)
114
+ # Usually these have the above tag
115
+ result = attr('ldapSyntaxes', syntax[0], 'X-BINARY-TRANSFER-REQUIRED')
116
+ return true if result[0] == "TRUE"
117
+
118
+ return false
119
+ end # binary_required?
120
+ end # Schema2
121
+
122
+ class Conn
123
+ def schema(base = nil, attrs = nil, sec = 0, usec = 0)
124
+ attrs ||= [
125
+ 'objectClasses',
126
+ 'attributeTypes',
127
+ 'matchingRules',
128
+ 'matchingRuleUse',
129
+ 'dITStructureRules',
130
+ 'dITContentRules',
131
+ 'nameForms',
132
+ 'ldapSyntaxes',
133
+ ]
134
+ base ||= root_dse(['subschemaSubentry'], sec, usec)[0]['subschemaSubentry'][0]
135
+ base ||= 'cn=schema'
136
+ ent = search2(base, LDAP_SCOPE_BASE, '(objectClass=subschema)',
137
+ attrs, false, sec, usec)
138
+ return Schema2.new(ent[0])
139
+ end
140
+ end
141
+ end # end LDAP