ad-framework 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/Gemfile +12 -0
- data/README.markdown +36 -0
- data/Rakefile +19 -0
- data/ad-framework.gemspec +25 -0
- data/doc/open_ldap_server.markdown +17 -0
- data/extras/adtest.schema +304 -0
- data/extras/slapd.conf +10 -0
- data/lib/ad-framework.rb +53 -0
- data/lib/ad-framework/attribute.rb +35 -0
- data/lib/ad-framework/attribute_type.rb +133 -0
- data/lib/ad-framework/auxiliary_class.rb +24 -0
- data/lib/ad-framework/config.rb +72 -0
- data/lib/ad-framework/config/attribute_definition.rb +18 -0
- data/lib/ad-framework/config/mapping.rb +26 -0
- data/lib/ad-framework/exceptions.rb +17 -0
- data/lib/ad-framework/fields.rb +44 -0
- data/lib/ad-framework/patterns/callbacks.rb +47 -0
- data/lib/ad-framework/patterns/has_schema.rb +127 -0
- data/lib/ad-framework/patterns/persistence.rb +67 -0
- data/lib/ad-framework/patterns/searchable.rb +117 -0
- data/lib/ad-framework/patterns/validations.rb +50 -0
- data/lib/ad-framework/schema.rb +118 -0
- data/lib/ad-framework/structural_class.rb +61 -0
- data/lib/ad-framework/utilities/entry_builder.rb +77 -0
- data/lib/ad-framework/utilities/transaction.rb +32 -0
- data/lib/ad-framework/utilities/validator.rb +26 -0
- data/lib/ad-framework/version.rb +5 -0
- data/test/helper.rb +71 -0
- data/test/integration/defined_array_test.rb +49 -0
- data/test/integration/defined_integer_test.rb +48 -0
- data/test/integration/defined_string_test.rb +48 -0
- data/test/integration/defined_top_test.rb +101 -0
- data/test/integration/defined_user_test.rb +140 -0
- data/test/irb.rb +2 -0
- data/test/support/factory.rb +67 -0
- data/test/support/ldap.yml +6 -0
- data/test/support/schema/attribute_types.rb +67 -0
- data/test/support/schema/attributes.rb +10 -0
- data/test/support/schema/auxiliary_classes.rb +12 -0
- data/test/support/schema/structural_classes.rb +46 -0
- data/test/support/seed.rb +28 -0
- data/test/support/state.rb +29 -0
- data/test/unit/ad-framework/attribute_test.rb +84 -0
- data/test/unit/ad-framework/attribute_type/class_methods_test.rb +146 -0
- data/test/unit/ad-framework/attribute_type_test.rb +114 -0
- data/test/unit/ad-framework/auxiliary_class_test.rb +39 -0
- data/test/unit/ad-framework/config/attribute_definition_test.rb +26 -0
- data/test/unit/ad-framework/config/mapping_test.rb +41 -0
- data/test/unit/ad-framework/config_test.rb +121 -0
- data/test/unit/ad-framework/fields_test.rb +44 -0
- data/test/unit/ad-framework/patterns/callbacks_test.rb +90 -0
- data/test/unit/ad-framework/patterns/has_schema/class_methods_test.rb +214 -0
- data/test/unit/ad-framework/patterns/has_schema_test.rb +96 -0
- data/test/unit/ad-framework/patterns/persistence_test.rb +126 -0
- data/test/unit/ad-framework/patterns/searchable_test.rb +201 -0
- data/test/unit/ad-framework/patterns/validations_test.rb +113 -0
- data/test/unit/ad-framework/schema_test.rb +268 -0
- data/test/unit/ad-framework/structural_class_test.rb +64 -0
- data/test/unit/ad-framework/utilities/entry_builder_test.rb +107 -0
- data/test/unit/ad-framework/utilities/transaction_test.rb +50 -0
- data/test/unit/ad-framework/utilities/validator_test.rb +46 -0
- data/test/unit/ad-framework_test.rb +116 -0
- metadata +225 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# AD::Framework
|
2
|
+
|
3
|
+
A framework for defining an ActiveDirectory schema in ruby.
|
4
|
+
|
5
|
+
## Description
|
6
|
+
|
7
|
+
AD::Framework is a basis for defining an Active Directory schema in ruby. It provides all the building blocks needed to access and modify Active Directory data.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
gem install ad-framework
|
12
|
+
|
13
|
+
## License
|
14
|
+
|
15
|
+
Copyright (c) 2011 Collin Redding and Team Insight
|
16
|
+
|
17
|
+
Permission is hereby granted, free of charge, to any person
|
18
|
+
obtaining a copy of this software and associated documentation
|
19
|
+
files (the "Software"), to deal in the Software without
|
20
|
+
restriction, including without limitation the rights to use,
|
21
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
22
|
+
copies of the Software, and to permit persons to whom the
|
23
|
+
Software is furnished to do so, subject to the following
|
24
|
+
conditions:
|
25
|
+
|
26
|
+
The above copyright notice and this permission notice shall be
|
27
|
+
included in all copies or substantial portions of the Software.
|
28
|
+
|
29
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
30
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
31
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
32
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
33
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
34
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
35
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
36
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'assert/rake_tasks'
|
2
|
+
include Assert::RakeTasks
|
3
|
+
|
4
|
+
require 'bundler'
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
if RUBY_VERSION =~ /^1.8/
|
8
|
+
require 'rcov/rcovtask'
|
9
|
+
Rcov::RcovTask.new('coverage') do |t|
|
10
|
+
t.test_files = FileList['test/**/*_test.rb']
|
11
|
+
t.rcov_opts << "--no-html"
|
12
|
+
t.verbose = true
|
13
|
+
end
|
14
|
+
else
|
15
|
+
task :coverage do
|
16
|
+
ENV['COVERAGE'] = "true"
|
17
|
+
Rake::Task['test'].execute
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "ad-framework/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "ad-framework"
|
7
|
+
s.version = Ad::Framework::VERSION
|
8
|
+
s.authors = ["Collin Redding", "Matt McPherson"]
|
9
|
+
s.homepage = "http://github.com/teaminsight/ad-framework"
|
10
|
+
s.summary = %q{A framework for defining an ActiveDirectory schema in ruby.}
|
11
|
+
s.description = %q{A framework for defining an ActiveDirectory schema in ruby.}
|
12
|
+
|
13
|
+
s.rubyforge_project = "ad-framework"
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_runtime_dependency "ad-ldap", "~>0.1.1"
|
21
|
+
|
22
|
+
s.add_development_dependency "assert", "~>0.3.0"
|
23
|
+
s.add_development_dependency "log4r", "~>1.1.9"
|
24
|
+
s.add_development_dependency "mocha", "~>0.9.12"
|
25
|
+
end
|
@@ -0,0 +1,304 @@
|
|
1
|
+
# Attribute Types #############################################################
|
2
|
+
|
3
|
+
attributetype ( 1.2.840.113556.1.4.159
|
4
|
+
NAME 'accountExpires'
|
5
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
6
|
+
SINGLE-VALUE )
|
7
|
+
|
8
|
+
attributetype ( 1.2.840.113556.1.4.1307
|
9
|
+
NAME 'accountNameHistory'
|
10
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
|
11
|
+
|
12
|
+
attributetype ( 1.2.840.113556.1.4.150
|
13
|
+
NAME 'adminCount'
|
14
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
15
|
+
SINGLE-VALUE )
|
16
|
+
|
17
|
+
attributetype ( 1.2.840.113556.1.2.226
|
18
|
+
NAME 'adminDescription'
|
19
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
20
|
+
SINGLE-VALUE )
|
21
|
+
|
22
|
+
attributetype ( 1.2.840.113556.1.2.194
|
23
|
+
NAME 'adminDisplayName'
|
24
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
25
|
+
SINGLE-VALUE )
|
26
|
+
|
27
|
+
attributetype ( 1.2.840.113556.1.4.652
|
28
|
+
NAME 'assistant'
|
29
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.12'
|
30
|
+
SINGLE-VALUE )
|
31
|
+
|
32
|
+
attributetype ( 1.2.840.113556.1.4.49
|
33
|
+
NAME 'badPasswordTime'
|
34
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
35
|
+
SINGLE-VALUE )
|
36
|
+
|
37
|
+
attributetype ( 1.2.840.113556.1.4.12
|
38
|
+
NAME 'badPwdCount'
|
39
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
40
|
+
SINGLE-VALUE )
|
41
|
+
|
42
|
+
attributetype ( 1.2.840.113556.1.4.916
|
43
|
+
NAME 'canonicalName'
|
44
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
|
45
|
+
|
46
|
+
attributetype ( 1.2.840.113556.1.4.156
|
47
|
+
NAME 'comment'
|
48
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
49
|
+
SINGLE-VALUE )
|
50
|
+
|
51
|
+
attributetype ( 1.2.840.113556.1.2.146
|
52
|
+
NAME 'company'
|
53
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
54
|
+
SINGLE-VALUE )
|
55
|
+
|
56
|
+
attributetype ( 1.2.840.113556.1.4.25
|
57
|
+
NAME 'countryCode'
|
58
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
59
|
+
SINGLE-VALUE )
|
60
|
+
|
61
|
+
attributetype ( 1.2.840.113556.1.2.141
|
62
|
+
NAME 'department'
|
63
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
64
|
+
SINGLE-VALUE )
|
65
|
+
|
66
|
+
attributetype ( 1.2.840.113556.1.4.261
|
67
|
+
NAME 'division'
|
68
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
69
|
+
SINGLE-VALUE )
|
70
|
+
|
71
|
+
attributetype ( 1.2.840.113556.1.4.35
|
72
|
+
NAME 'employeeID'
|
73
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
74
|
+
SINGLE-VALUE )
|
75
|
+
|
76
|
+
attributetype ( 1.2.840.113556.1.4.44
|
77
|
+
NAME 'homeDirectory'
|
78
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
79
|
+
SINGLE-VALUE )
|
80
|
+
|
81
|
+
attributetype ( 1.2.840.113556.1.4.45
|
82
|
+
NAME 'homeDrive'
|
83
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
84
|
+
SINGLE-VALUE )
|
85
|
+
|
86
|
+
attributetype ( 1.2.840.113556.1.4.721
|
87
|
+
NAME 'ipPhone'
|
88
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
89
|
+
SINGLE-VALUE )
|
90
|
+
|
91
|
+
attributetype ( 1.2.840.113556.1.4.52
|
92
|
+
NAME 'lastLogon'
|
93
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
94
|
+
SINGLE-VALUE )
|
95
|
+
|
96
|
+
attributetype ( 1.2.840.113556.1.4.662
|
97
|
+
NAME 'lockoutTime'
|
98
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
99
|
+
SINGLE-VALUE )
|
100
|
+
|
101
|
+
attributetype ( 1.2.840.113556.1.4.169
|
102
|
+
NAME 'logonCount'
|
103
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
104
|
+
SINGLE-VALUE )
|
105
|
+
|
106
|
+
attributetype ( 1.2.840.113556.1.4.76
|
107
|
+
NAME 'maxStorage'
|
108
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
109
|
+
SINGLE-VALUE )
|
110
|
+
|
111
|
+
attributetype ( 634.2.1
|
112
|
+
NAME 'middleName'
|
113
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
114
|
+
SINGLE-VALUE )
|
115
|
+
|
116
|
+
attributetype ( 1.2.840.113556.1.4.146
|
117
|
+
NAME 'objectSid'
|
118
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.40'
|
119
|
+
SINGLE-VALUE )
|
120
|
+
|
121
|
+
attributetype ( 1.2.840.113556.1.4.144
|
122
|
+
NAME 'operatorCount'
|
123
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
124
|
+
SINGLE-VALUE )
|
125
|
+
|
126
|
+
attributetype ( 1.2.840.113556.1.2.277
|
127
|
+
NAME 'otherHomePhone'
|
128
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
|
129
|
+
|
130
|
+
attributetype ( 1.2.840.113556.1.4.722
|
131
|
+
NAME 'otherIpPhone'
|
132
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
|
133
|
+
|
134
|
+
attributetype ( 1.2.840.113556.1.4.647
|
135
|
+
NAME 'otherMobile'
|
136
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
|
137
|
+
|
138
|
+
attributetype ( 1.2.840.113556.1.2.18
|
139
|
+
NAME 'otherTelephone'
|
140
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
|
141
|
+
|
142
|
+
attributetype ( 1.2.840.113556.1.2.118
|
143
|
+
NAME 'otherPager'
|
144
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
|
145
|
+
|
146
|
+
attributetype ( 1.2.840.113556.1.4.139
|
147
|
+
NAME 'profilePath'
|
148
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
149
|
+
SINGLE-VALUE )
|
150
|
+
|
151
|
+
attributetype ( 1.2.840.113556.1.2.210
|
152
|
+
NAME 'proxyAddresses'
|
153
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
|
154
|
+
|
155
|
+
attributetype ( 1.2.840.113556.1.4.96
|
156
|
+
NAME 'pwdLastSet'
|
157
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
158
|
+
SINGLE-VALUE )
|
159
|
+
|
160
|
+
attributetype ( 1.2.840.113556.1.4.153
|
161
|
+
NAME 'rid'
|
162
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
163
|
+
SINGLE-VALUE )
|
164
|
+
|
165
|
+
attributetype ( 1.2.840.113556.1.4.221
|
166
|
+
NAME 'sAMAccountName'
|
167
|
+
EQUALITY caseIgnoreMatch
|
168
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
169
|
+
SINGLE-VALUE )
|
170
|
+
|
171
|
+
attributetype ( 1.2.840.113556.1.4.302
|
172
|
+
NAME 'sAMAccountType'
|
173
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
174
|
+
SINGLE-VALUE )
|
175
|
+
|
176
|
+
attributetype ( 1.2.840.113556.1.4.121
|
177
|
+
NAME 'securityIdentifier'
|
178
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.40'
|
179
|
+
SINGLE-VALUE )
|
180
|
+
|
181
|
+
attributetype ( 1.2.840.113556.1.4.771
|
182
|
+
NAME 'servicePrincipalName'
|
183
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
|
184
|
+
|
185
|
+
attributetype ( 1.2.840.113556.1.4.609
|
186
|
+
NAME 'sIDHistory'
|
187
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.40' )
|
188
|
+
|
189
|
+
attributetype ( 1.2.840.113556.1.4.375
|
190
|
+
NAME 'systemFlags'
|
191
|
+
EQUALITY integerMatch
|
192
|
+
ORDERING integerOrderingMatch
|
193
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
194
|
+
SINGLE-VALUE )
|
195
|
+
|
196
|
+
attributetype ( 1.2.840.113556.1.4.1301
|
197
|
+
NAME 'tokenGroups'
|
198
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.40' )
|
199
|
+
|
200
|
+
attributetype ( 1.2.840.113556.1.4.1418
|
201
|
+
NAME 'tokenGroupsGlobalAndUniversal'
|
202
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.40' )
|
203
|
+
|
204
|
+
attributetype ( 1.2.840.113556.1.4.1303
|
205
|
+
NAME 'tokenGroupsNoGCAcceptable'
|
206
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.40' )
|
207
|
+
|
208
|
+
attributetype ( 1.2.840.113556.1.4.90
|
209
|
+
NAME 'unicodePwd'
|
210
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.40'
|
211
|
+
SINGLE-VALUE )
|
212
|
+
|
213
|
+
attributetype ( 1.2.840.113556.1.4.8
|
214
|
+
NAME 'userAccountControl'
|
215
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.27'
|
216
|
+
SINGLE-VALUE )
|
217
|
+
|
218
|
+
attributetype ( 1.2.840.113556.1.4.138
|
219
|
+
NAME 'userParameters'
|
220
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
221
|
+
SINGLE-VALUE )
|
222
|
+
|
223
|
+
attributetype ( 1.2.840.113556.1.4.656
|
224
|
+
NAME 'userPrincipalName'
|
225
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
|
226
|
+
SINGLE-VALUE )
|
227
|
+
|
228
|
+
attributetype ( 1.2.840.113556.1.2.3
|
229
|
+
NAME 'whenChanged'
|
230
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.24'
|
231
|
+
SINGLE-VALUE )
|
232
|
+
|
233
|
+
attributetype ( 1.2.840.113556.1.2.2
|
234
|
+
NAME 'whenCreated'
|
235
|
+
SYNTAX '1.3.6.1.4.1.1466.115.121.1.24'
|
236
|
+
SINGLE-VALUE )
|
237
|
+
|
238
|
+
###############################################################################
|
239
|
+
|
240
|
+
# Object Classes ##############################################################
|
241
|
+
|
242
|
+
objectclass ( 634.1.1
|
243
|
+
NAME 'adtest-top'
|
244
|
+
ABSTRACT
|
245
|
+
MUST ( objectClass )
|
246
|
+
MAY (
|
247
|
+
cn $ description $ distinguishedName $ whenCreated $ whenChanged $ displayName $
|
248
|
+
adminDisplayName $ proxyAddresses $ adminDescription $ systemFlags $ canonicalName
|
249
|
+
)
|
250
|
+
)
|
251
|
+
|
252
|
+
objectclass ( 634.1.2
|
253
|
+
NAME 'adtest-container'
|
254
|
+
SUP adtest-top
|
255
|
+
STRUCTURAL
|
256
|
+
MUST ( cn )
|
257
|
+
)
|
258
|
+
|
259
|
+
objectclass ( 634.1.3
|
260
|
+
NAME 'adtest-person'
|
261
|
+
SUP adtest-top
|
262
|
+
ABSTRACT
|
263
|
+
MUST ( cn )
|
264
|
+
MAY ( sn $ telephoneNumber $ userPassword )
|
265
|
+
)
|
266
|
+
|
267
|
+
objectclass ( 634.1.4
|
268
|
+
NAME 'adtest-organizationalPerson'
|
269
|
+
SUP adtest-person
|
270
|
+
ABSTRACT
|
271
|
+
MAY (
|
272
|
+
streetAddress $ homePostalAddress $ assistant $ company $ countryCode $ c $ department $
|
273
|
+
division $ mail $ employeeID $ facsimileTelephoneNumber $ generationQualifier $ givenName $
|
274
|
+
houseIdentifier $ initials $ l $ manager $ ou $ o $ otherMailbox $ middleName $ personalTitle $
|
275
|
+
otherHomePhone $ homePhone $ otherIpPhone $ ipPhone $ otherMobile $ mobile $ otherTelephone $
|
276
|
+
otherPager $ pager $ physicalDeliveryOfficeName $ postalAddress $ postalCode $ postOfficeBox $
|
277
|
+
st $ street $ co $ title $ comment
|
278
|
+
)
|
279
|
+
)
|
280
|
+
|
281
|
+
objectclass ( 634.1.5
|
282
|
+
NAME 'adtest-user'
|
283
|
+
SUP adtest-organizationalPerson
|
284
|
+
STRUCTURAL
|
285
|
+
MAY (
|
286
|
+
accountExpires $ adminCount $ badPasswordTime $ badPwdCount $ mail $ employeeNumber $
|
287
|
+
employeeType $ givenName $ homeDirectory $ homeDrive $ initials $ lastLogon $ lockoutTime $
|
288
|
+
logonCount $ maxStorage $ operatorCount $ profilePath $ pwdLastSet $ roomNumber $
|
289
|
+
servicePrincipalName $ unicodePwd $ userAccountControl $ userParameters $ userPrincipalName
|
290
|
+
)
|
291
|
+
)
|
292
|
+
|
293
|
+
objectclass ( 634.1.6
|
294
|
+
NAME 'adtest-securityPrincipal'
|
295
|
+
SUP adtest-top
|
296
|
+
AUXILIARY
|
297
|
+
MUST ( objectSid $ sAMAccountName )
|
298
|
+
MAY (
|
299
|
+
accountNameHistory $ sAMAccountType $ rid $ securityIdentifier $ sIDHistory $ tokenGroups $
|
300
|
+
tokenGroupsGlobalAndUniversal $ tokenGroupsNoGCAcceptable
|
301
|
+
)
|
302
|
+
)
|
303
|
+
|
304
|
+
###############################################################################
|
data/extras/slapd.conf
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
include /usr/local/etc/openldap/schema/core.schema
|
2
|
+
include /usr/local/etc/openldap/schema/cosine.schema
|
3
|
+
include /usr/local/etc/openldap/schema/inetorgperson.schema
|
4
|
+
include /usr/local/etc/openldap/schema/adtest.schema
|
5
|
+
|
6
|
+
database bdb
|
7
|
+
suffix "dc=localhost"
|
8
|
+
rootdn "cn=root,dc=localhost"
|
9
|
+
rootpw secret
|
10
|
+
directory /usr/local/var/openldap-data
|
data/lib/ad-framework.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'ad-framework/config'
|
2
|
+
require 'ad-framework/attribute_type'
|
3
|
+
require 'ad-framework/auxiliary_class'
|
4
|
+
require 'ad-framework/structural_class'
|
5
|
+
|
6
|
+
module AD
|
7
|
+
module Framework
|
8
|
+
class << self
|
9
|
+
|
10
|
+
def configure
|
11
|
+
if block_given?
|
12
|
+
yield self.config
|
13
|
+
end
|
14
|
+
self.config
|
15
|
+
end
|
16
|
+
|
17
|
+
def config
|
18
|
+
@config ||= AD::Framework::Config.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def connection
|
22
|
+
self.config.adapter
|
23
|
+
end
|
24
|
+
|
25
|
+
def defined_attributes
|
26
|
+
self.config.attributes
|
27
|
+
end
|
28
|
+
def register_attributes(attributes)
|
29
|
+
attributes.each do |attribute|
|
30
|
+
self.config.add_attribute(attribute)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def defined_attribute_types
|
35
|
+
self.config.attribute_types
|
36
|
+
end
|
37
|
+
def register_attribute_type(attribute_type)
|
38
|
+
self.config.add_attribute_type(attribute_type)
|
39
|
+
end
|
40
|
+
|
41
|
+
def defined_object_classes
|
42
|
+
self.config.object_classes
|
43
|
+
end
|
44
|
+
def register_structural_class(structural_class)
|
45
|
+
self.config.add_object_class(structural_class)
|
46
|
+
end
|
47
|
+
def register_auxiliary_class(auxiliary_class)
|
48
|
+
self.config.add_object_class(auxiliary_class)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|