dm-ldap-adapter 0.4.5-java → 0.4.6-java
Sign up to get free protection for your applications and to get access to all the features.
- data/README-bundler.md +34 -0
- data/README-example.md +17 -0
- data/example/posix.rb +166 -0
- data/lib/adapters/ldap_adapter.rb +11 -5
- data/lib/ldap/net_ldap_facade.rb +3 -2
- metadata +203 -295
- data/spec/performance_spec.rb.omit +0 -65
- data/spec/spec.opts +0 -2
- data/spec/support/contact.rb.omit +0 -58
- data/spec/support/resource_state.rb- +0 -16
data/README-bundler.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# no Gemfile.lock on git #
|
2
|
+
|
3
|
+
there are two references for different DM versions
|
4
|
+
|
5
|
+
* ~> 1.1.0
|
6
|
+
|
7
|
+
* ~> 1.0.0
|
8
|
+
|
9
|
+
with a simple symbolic link you can switch between these two profiles.
|
10
|
+
|
11
|
+
`$ ln -s Gemfile.lock.1.1.0 Gemfile.lock`
|
12
|
+
|
13
|
+
for that reason Gemfile.lock in not on github, so the script run-all.sh
|
14
|
+
|
15
|
+
# run specs #
|
16
|
+
|
17
|
+
`$ bundle exec spec spec`
|
18
|
+
|
19
|
+
or for some jruby versions (which needs jruby and ruby-maven gem)
|
20
|
+
|
21
|
+
`$ rmvn test`
|
22
|
+
`$ rmvn test --Djruby.versions=1.5.6,1.6.2 -Djruby.18and19
|
23
|
+
|
24
|
+
# build gem
|
25
|
+
|
26
|
+
for the ruby platform
|
27
|
+
|
28
|
+
`$ gem build dm-ldap-adapter.gemspec`
|
29
|
+
|
30
|
+
or for java platform (needs jruby and ruby-maven gem)
|
31
|
+
|
32
|
+
`$ rmvn package`
|
33
|
+
|
34
|
+
gem will be inside target/dm-ldap-adapter directory.
|
data/README-example.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
posix accounts/groups example
|
2
|
+
=============================
|
3
|
+
|
4
|
+
first you need to adjust the configuration for ldap adapter in `example/posix.rb` and then start irb
|
5
|
+
|
6
|
+
$ LDAP_PWD='secret' irb
|
7
|
+
|
8
|
+
require 'example/posix.rb'
|
9
|
+
u = User.create(:login=>'test', :name => "name", :password => "pwd")
|
10
|
+
User.all
|
11
|
+
g = Group.create(:name => "test")
|
12
|
+
Group.all
|
13
|
+
u.groups << g
|
14
|
+
u.groups
|
15
|
+
g.users
|
16
|
+
u.authenticate("wrong-pwd")
|
17
|
+
u.authenticate("pwd")
|
data/example/posix.rb
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'slf4r/logger'
|
4
|
+
require 'slf4r/ruby_logger'
|
5
|
+
require 'dm-core'
|
6
|
+
|
7
|
+
$LOAD_PATH << Pathname(__FILE__).dirname.parent.expand_path + 'lib'
|
8
|
+
|
9
|
+
# Logging.init :debug, :info, :warn, :error
|
10
|
+
|
11
|
+
# appender = Logging::Appender.stdout
|
12
|
+
# appender.layout = Logging::Layouts::Pattern.new(:pattern => "%d [%-l] (%c) %m\n")
|
13
|
+
# logger = Logging::Logger.new(:root)
|
14
|
+
# logger.add_appenders(appender)
|
15
|
+
# logger.level = :debug
|
16
|
+
# logger.info "initialized logger . . ."
|
17
|
+
|
18
|
+
dummy = false # uncomment this to use ldap, dummy = false uses the database
|
19
|
+
unless dummy
|
20
|
+
require 'ldap_resource'
|
21
|
+
|
22
|
+
require 'adapters/ldap_adapter'
|
23
|
+
|
24
|
+
DataMapper.setup(:default, {
|
25
|
+
:adapter => 'ldap',
|
26
|
+
:host => 'localhost',
|
27
|
+
:port => '389',
|
28
|
+
:base => ENV['LDAP_BASE'] || "dc=example,dc=com",
|
29
|
+
:bind_name => "cn=admin," + (ENV['LDAP_BASE'] || "dc=example,dc=com"),
|
30
|
+
:password => ENV['LDAP_PWD'] || "behappy"
|
31
|
+
})
|
32
|
+
else
|
33
|
+
require 'dummy_ldap_resource'
|
34
|
+
DataMapper.setup(:default, 'sqlite3::memory:')
|
35
|
+
adapter = DataMapper.repository.adapter
|
36
|
+
def adapter.ldap_connection
|
37
|
+
con = Object.new
|
38
|
+
def con.open
|
39
|
+
yield
|
40
|
+
end
|
41
|
+
con
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class User
|
46
|
+
include DataMapper::Resource
|
47
|
+
|
48
|
+
property :id, Serial, :field => "uidNumber"
|
49
|
+
property :login, String, :field => "uid"
|
50
|
+
property :hashed_password, String, :field => "userPassword"
|
51
|
+
property :name, String, :field => "cn"
|
52
|
+
|
53
|
+
has n, :group_users, :child_key => [:memberuid]
|
54
|
+
|
55
|
+
def groups
|
56
|
+
groups = GroupUser.all(:memberuid => login).collect{ |gu| gu.group }
|
57
|
+
def groups.user=(user)
|
58
|
+
@user = user
|
59
|
+
end
|
60
|
+
groups.user = self
|
61
|
+
def groups.<<(group)
|
62
|
+
unless member? group
|
63
|
+
GroupUser.create(:memberuid => @user.login, :gidnumber => group.id)
|
64
|
+
super
|
65
|
+
end
|
66
|
+
self
|
67
|
+
end
|
68
|
+
def groups.delete(group)
|
69
|
+
gu = GroupUser.first(:memberuid => @user.login, :gidnumber => group.id)
|
70
|
+
if gu
|
71
|
+
gu.destroy
|
72
|
+
super
|
73
|
+
end
|
74
|
+
end
|
75
|
+
groups
|
76
|
+
end
|
77
|
+
|
78
|
+
dn_prefix { |user| "uid=#{user.login}"}
|
79
|
+
|
80
|
+
treebase "ou=people"
|
81
|
+
|
82
|
+
ldap_properties do |user|
|
83
|
+
properties = { :objectclass => ["inetOrgPerson", "posixAccount", "shadowAccount"], :loginshell => "/bin/bash", :gidnumber => "10000" }
|
84
|
+
properties[:sn] = "#{user.name.sub(/.*\ /, "")}"
|
85
|
+
properties[:givenname] = "#{user.name.sub(/\ .*/, "")}"
|
86
|
+
properties[:homedirectory] = "/home/#{user.login}"
|
87
|
+
properties
|
88
|
+
end
|
89
|
+
|
90
|
+
def password=(password)
|
91
|
+
attribute_set(:hashed_password, Ldap::Digest.sha(password)) if password
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class Group
|
96
|
+
include DataMapper::Resource
|
97
|
+
include Slf4r::Logger
|
98
|
+
property :id, Serial, :field => "gidNumber"
|
99
|
+
property :name, String, :field => "cn"
|
100
|
+
|
101
|
+
dn_prefix { |group| "cn=#{group.name}" }
|
102
|
+
|
103
|
+
treebase "ou=groups"
|
104
|
+
|
105
|
+
ldap_properties {{ :objectclass => "posixGroup"}}
|
106
|
+
|
107
|
+
def users
|
108
|
+
users = GroupUser.all(:gidnumber => id).collect{ |gu| gu.user }
|
109
|
+
def users.group=(group)
|
110
|
+
@group = group
|
111
|
+
end
|
112
|
+
users.group = self
|
113
|
+
def users.<<(user)
|
114
|
+
unless member? user
|
115
|
+
GroupUser.create(:memberuid => user.login, :gidnumber => @group.id)
|
116
|
+
super
|
117
|
+
end
|
118
|
+
self
|
119
|
+
end
|
120
|
+
def users.delete(user)
|
121
|
+
gu = GroupUser.first(:memberuid => user.login, :gidnumber => @group.id)
|
122
|
+
if gu
|
123
|
+
gu.destroy
|
124
|
+
super
|
125
|
+
end
|
126
|
+
end
|
127
|
+
users
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
class GroupUser
|
132
|
+
include DataMapper::Resource
|
133
|
+
include Slf4r::Logger
|
134
|
+
|
135
|
+
dn_prefix { |group_user| "cn=#{group_user.group.name}" }
|
136
|
+
|
137
|
+
treebase "ou=groups"
|
138
|
+
|
139
|
+
multivalue_field :memberuid
|
140
|
+
|
141
|
+
ldap_properties do |group_user|
|
142
|
+
{:cn=>"#{group_user.group.name}", :objectclass => "posixGroup"}
|
143
|
+
end
|
144
|
+
property :memberuid, String, :key => true#, :field => "memberUid"
|
145
|
+
property :gidnumber, Integer, :key => true#, :field => "gidNumber"
|
146
|
+
|
147
|
+
def group
|
148
|
+
Group.get!(gidnumber)
|
149
|
+
end
|
150
|
+
|
151
|
+
def group=(group)
|
152
|
+
gidnumber = group.id
|
153
|
+
end
|
154
|
+
|
155
|
+
def user
|
156
|
+
User.first(:login => memberuid)
|
157
|
+
end
|
158
|
+
|
159
|
+
def user=(user)
|
160
|
+
memberuid = user.login
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
if dummy
|
165
|
+
DataMapper.auto_migrate!
|
166
|
+
end
|
@@ -209,16 +209,22 @@ module DataMapper
|
|
209
209
|
value = prop.get!(resource)
|
210
210
|
if prop.class == ::Ldap::LdapArray
|
211
211
|
props[prop.field.to_sym] = value unless value.nil? or value.size == 0
|
212
|
+
elsif ::DataMapper::Property::Boolean === prop
|
213
|
+
props[prop.field.to_sym] = value ? 'TRUE' : 'FALSE' unless value.nil?
|
212
214
|
else
|
213
|
-
props[prop.field.to_sym] = value.to_s unless value.nil?
|
215
|
+
props[prop.field.to_sym] = prop.dump(value).to_s unless value.nil?
|
214
216
|
end
|
215
217
|
key = prop if prop.serial?
|
216
218
|
end
|
217
219
|
resource_dup = resource.dup
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
220
|
+
|
221
|
+
if props[key_properties(resource).field.to_sym].nil? then
|
222
|
+
id = ldap.retrieve_next_id(resource.model.treebase,
|
223
|
+
key_properties(resource).field)
|
224
|
+
resource_dup.send("#{key_properties(resource).name}=".to_sym, id)
|
225
|
+
props[key_properties(resource).field.to_sym] = "#{id}"
|
226
|
+
end
|
227
|
+
|
222
228
|
key_value = begin
|
223
229
|
ldap.create_object(resource.model.dn_prefix(resource_dup),
|
224
230
|
resource.model.treebase,
|
data/lib/ldap/net_ldap_facade.rb
CHANGED
@@ -65,13 +65,14 @@ module Ldap
|
|
65
65
|
# @param Array of conditions for the search
|
66
66
|
# @return Array of Hashes with a name/values pair for each attribute
|
67
67
|
def read_objects(treebase, key_fields, conditions, field_names, order_field = nil)
|
68
|
-
searchbase = base(treebase)
|
69
|
-
filter = Conditions2Filter.convert(conditions)
|
70
68
|
|
71
69
|
# If there is a :dn in the filter skip everything and look it up
|
72
70
|
if dn = conditions.detect { |c| c[1] == "dn" } then
|
73
71
|
searchbase = dn[2]
|
74
72
|
filter = nil
|
73
|
+
else
|
74
|
+
searchbase = base(treebase)
|
75
|
+
filter = Conditions2Filter.convert(conditions)
|
75
76
|
end
|
76
77
|
|
77
78
|
result = []
|
metadata
CHANGED
@@ -1,307 +1,215 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-ldap-adapter
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 0.4.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.4.6
|
6
6
|
platform: java
|
7
|
-
authors:
|
8
|
-
|
9
|
-
|
10
|
-
autorequire:
|
7
|
+
authors:
|
8
|
+
- mkristian
|
9
|
+
- xertres
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
- - "="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: 1.2.0
|
146
|
-
type: :development
|
147
|
-
version_requirements: *id012
|
148
|
-
- !ruby/object:Gem::Dependency
|
149
|
-
name: rspec
|
150
|
-
prerelease: false
|
151
|
-
requirement: &id013 !ruby/object:Gem::Requirement
|
152
|
-
none: false
|
153
|
-
requirements:
|
154
|
-
- - "="
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version: 2.6.0
|
157
|
-
type: :development
|
158
|
-
version_requirements: *id013
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: rspec-core
|
161
|
-
prerelease: false
|
162
|
-
requirement: &id014 !ruby/object:Gem::Requirement
|
163
|
-
none: false
|
164
|
-
requirements:
|
165
|
-
- - "="
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
version: 2.6.2
|
168
|
-
type: :runtime
|
169
|
-
version_requirements: *id014
|
170
|
-
- !ruby/object:Gem::Dependency
|
171
|
-
name: rspec-expectations
|
172
|
-
prerelease: false
|
173
|
-
requirement: &id015 !ruby/object:Gem::Requirement
|
174
|
-
none: false
|
175
|
-
requirements:
|
176
|
-
- - "="
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
version: 2.6.0
|
179
|
-
type: :runtime
|
180
|
-
version_requirements: *id015
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: diff-lcs
|
183
|
-
prerelease: false
|
184
|
-
requirement: &id016 !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - "="
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: 1.1.3
|
190
|
-
type: :runtime
|
191
|
-
version_requirements: *id016
|
192
|
-
- !ruby/object:Gem::Dependency
|
193
|
-
name: rspec-mocks
|
194
|
-
prerelease: false
|
195
|
-
requirement: &id017 !ruby/object:Gem::Requirement
|
196
|
-
none: false
|
197
|
-
requirements:
|
198
|
-
- - "="
|
199
|
-
- !ruby/object:Gem::Version
|
200
|
-
version: 2.6.0
|
201
|
-
type: :runtime
|
202
|
-
version_requirements: *id017
|
203
|
-
- !ruby/object:Gem::Dependency
|
204
|
-
name: bundler
|
205
|
-
prerelease: false
|
206
|
-
requirement: &id018 !ruby/object:Gem::Requirement
|
207
|
-
none: false
|
208
|
-
requirements:
|
209
|
-
- - ">="
|
210
|
-
- !ruby/object:Gem::Version
|
211
|
-
version: 0.0.0
|
212
|
-
type: :development
|
213
|
-
version_requirements: *id018
|
214
|
-
- !ruby/object:Gem::Dependency
|
215
|
-
name: jruby-openssl
|
216
|
-
prerelease: false
|
217
|
-
requirement: &id019 !ruby/object:Gem::Requirement
|
218
|
-
none: false
|
219
|
-
requirements:
|
220
|
-
- - ">="
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
version: 0.0.0
|
223
|
-
type: :runtime
|
224
|
-
version_requirements: *id019
|
13
|
+
date: 2013-04-10 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: net-ldap
|
17
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.2'
|
22
|
+
none: false
|
23
|
+
requirement: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0.2'
|
28
|
+
none: false
|
29
|
+
prerelease: false
|
30
|
+
type: :runtime
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: slf4r
|
33
|
+
version_requirements: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - "~>"
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.4.2
|
38
|
+
none: false
|
39
|
+
requirement: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.4.2
|
44
|
+
none: false
|
45
|
+
prerelease: false
|
46
|
+
type: :runtime
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: dm-core
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.0'
|
54
|
+
none: false
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.0'
|
60
|
+
none: false
|
61
|
+
prerelease: false
|
62
|
+
type: :runtime
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: dm-transactions
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.0'
|
70
|
+
none: false
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.0'
|
76
|
+
none: false
|
77
|
+
prerelease: false
|
78
|
+
type: :runtime
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: dm-sqlite-adapter
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - "~>"
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '1.0'
|
86
|
+
none: false
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '1.0'
|
92
|
+
none: false
|
93
|
+
prerelease: false
|
94
|
+
type: :development
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: dm-migrations
|
97
|
+
version_requirements: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '1.0'
|
102
|
+
none: false
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '1.0'
|
108
|
+
none: false
|
109
|
+
prerelease: false
|
110
|
+
type: :development
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.6'
|
118
|
+
none: false
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '2.6'
|
124
|
+
none: false
|
125
|
+
prerelease: false
|
126
|
+
type: :development
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: jruby-openssl
|
129
|
+
version_requirements: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - '='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 0.7.2
|
134
|
+
none: false
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - '='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 0.7.2
|
140
|
+
none: false
|
141
|
+
prerelease: false
|
142
|
+
type: :runtime
|
225
143
|
description: ldap adapter for datamapper which uses either net-ldap or ruby-ldap
|
226
|
-
email:
|
227
|
-
|
228
|
-
|
144
|
+
email:
|
145
|
+
- m.kristian@web.de
|
146
|
+
- ''
|
229
147
|
executables: []
|
230
|
-
|
231
148
|
extensions: []
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
- spec/support/contact.rb.omit
|
271
|
-
- spec/support/group.rb
|
149
|
+
extra_rdoc_files:
|
150
|
+
- History.txt
|
151
|
+
- README.md
|
152
|
+
- ldap-commands.txt
|
153
|
+
files:
|
154
|
+
- History.txt
|
155
|
+
- MIT-LICENSE
|
156
|
+
- ldap-commands.txt
|
157
|
+
- README.md
|
158
|
+
- README-example.md
|
159
|
+
- README-bundler.md
|
160
|
+
- lib/dm-ldap-adapter.rb
|
161
|
+
- lib/ldap_resource.rb
|
162
|
+
- lib/dummy_ldap_resource.rb
|
163
|
+
- lib/adapters/ldap_adapter.rb
|
164
|
+
- lib/adapters/noop_transaction.rb
|
165
|
+
- lib/ldap/version.rb
|
166
|
+
- lib/ldap/unboundid_ldap_facade.rb
|
167
|
+
- lib/ldap/transactions.rb
|
168
|
+
- lib/ldap/ruby_ldap_facade.rb
|
169
|
+
- lib/ldap/digest.rb
|
170
|
+
- lib/ldap/net_ldap_facade.rb
|
171
|
+
- lib/ldap/conditions_2_filter.rb
|
172
|
+
- lib/ldap/array.rb
|
173
|
+
- spec/multi_value_attributes_spec.rb
|
174
|
+
- spec/sorting_spec.rb
|
175
|
+
- spec/multi_repository_spec.rb
|
176
|
+
- spec/spec_helper.rb
|
177
|
+
- spec/ldap_adapter_spec.rb
|
178
|
+
- spec/authentication_ldap_adapter_spec.rb
|
179
|
+
- spec/assiociations_ldap_adapter_spec.rb
|
180
|
+
- spec/ldap_array_spec.rb
|
181
|
+
- spec/support/group_user.rb
|
182
|
+
- spec/support/user.rb
|
183
|
+
- spec/support/test_contact.rb
|
184
|
+
- spec/support/role.rb
|
185
|
+
- spec/support/group.rb
|
186
|
+
- example/posix.rb
|
272
187
|
homepage: http://github.com/mkristian/dm-ldap-adapter
|
273
|
-
licenses:
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
188
|
+
licenses: []
|
189
|
+
post_install_message:
|
190
|
+
rdoc_options:
|
191
|
+
- "--main"
|
192
|
+
- README.txt
|
193
|
+
require_paths:
|
194
|
+
- lib
|
195
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - ">="
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: !binary |-
|
200
|
+
MA==
|
282
201
|
none: false
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
202
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: !binary |-
|
207
|
+
MA==
|
288
208
|
none: false
|
289
|
-
requirements:
|
290
|
-
- - ">="
|
291
|
-
- !ruby/object:Gem::Version
|
292
|
-
version: "0"
|
293
209
|
requirements: []
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
signing_key:
|
210
|
+
rubyforge_project:
|
211
|
+
rubygems_version: 1.8.24
|
212
|
+
signing_key:
|
298
213
|
specification_version: 3
|
299
|
-
summary:
|
300
|
-
test_files:
|
301
|
-
- spec/multi_value_attributes_spec.rb
|
302
|
-
- spec/sorting_spec.rb
|
303
|
-
- spec/multi_repository_spec.rb
|
304
|
-
- spec/ldap_adapter_spec.rb
|
305
|
-
- spec/authentication_ldap_adapter_spec.rb
|
306
|
-
- spec/assiociations_ldap_adapter_spec.rb
|
307
|
-
- spec/ldap_array_spec.rb
|
214
|
+
summary: ''
|
215
|
+
test_files: []
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'dm-core/version'
|
4
|
-
p DataMapper::VERSION
|
5
|
-
describe DataMapper.repository(:ldap).adapter do
|
6
|
-
|
7
|
-
describe 'sorting of big list' do
|
8
|
-
|
9
|
-
before do
|
10
|
-
DataMapper.repository(:ldap) do
|
11
|
-
#User.all.destroy!
|
12
|
-
first = 1501
|
13
|
-
len = 1500
|
14
|
-
(first..len).each do |i|
|
15
|
-
p i
|
16
|
-
Contact.create(:id => "login#{i}", :sn => "name#{Kernel.rand}")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should load all and sort in timely manner' do
|
22
|
-
expected = nil
|
23
|
-
all = nil
|
24
|
-
|
25
|
-
DataMapper.repository(:ldap) do
|
26
|
-
#puts User.all.collect {|u| u.name }.join("\n")
|
27
|
-
#p User.all.size
|
28
|
-
fields = Contact.properties.defaults.dup.<<(Contact.properties[:mobile])
|
29
|
-
start = Time.new
|
30
|
-
all = Contact.all(:fields => fields)
|
31
|
-
intermediate = Time.new
|
32
|
-
all.each { |a| a.mobile }
|
33
|
-
finished = Time.new
|
34
|
-
|
35
|
-
p intermediate - start
|
36
|
-
p finished - intermediate
|
37
|
-
p finished - start
|
38
|
-
|
39
|
-
end
|
40
|
-
puts
|
41
|
-
DataMapper.repository(:ldap) do
|
42
|
-
#puts User.all.collect {|u| u.name }.join("\n")
|
43
|
-
#p User.all.size
|
44
|
-
fields = Contact.properties.defaults.dup.<<(Contact.properties[:mobile])
|
45
|
-
start = Time.new
|
46
|
-
all = Contact.all(:order => [:sn], :fields => fields)
|
47
|
-
intermediate = Time.new
|
48
|
-
all.each { |a| a.inspect }
|
49
|
-
finished = Time.new
|
50
|
-
expected = all.dup.sort do |u1, u2|
|
51
|
-
u1.sn.upcase <=> u2.sn.upcase
|
52
|
-
end
|
53
|
-
|
54
|
-
p intermediate - start
|
55
|
-
p finished - intermediate
|
56
|
-
p finished - start
|
57
|
-
|
58
|
-
# all.should == expected
|
59
|
-
end
|
60
|
-
#p all#.collect {|u| u.name }.join("\n")
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
data/spec/spec.opts
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
class Contact
|
2
|
-
include DataMapper::Resource
|
3
|
-
|
4
|
-
def self.auto_upgrade!(args = nil)
|
5
|
-
DataMapper.logger.warn("Skipping #{self.name}.auto_upgrade!")
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.default_repository_name
|
9
|
-
:ldap
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.repository_name
|
13
|
-
:ldap
|
14
|
-
end
|
15
|
-
|
16
|
-
property :id, Serial, :field => 'uid'
|
17
|
-
property :cn, String, :required => true
|
18
|
-
property :salutation, String, :lazy => [:view]
|
19
|
-
property :title, String, :lazy => [:view]
|
20
|
-
property :givenname, String
|
21
|
-
property :sn, String, :required => true
|
22
|
-
property :o, String
|
23
|
-
property :postaladdress, String, :lazy => [:view]
|
24
|
-
property :postalcode, String, :lazy => [:view]
|
25
|
-
property :l, String
|
26
|
-
property :st, String, :lazy => [:view]
|
27
|
-
property :c, String, :lazy => [:view]
|
28
|
-
property :telephonenumber, String
|
29
|
-
property :facsimiletelephonenumber, String, :lazy => [:view]
|
30
|
-
property :pager, String, :lazy => [:view]
|
31
|
-
property :jpegphoto, LdapArray, :lazy => true
|
32
|
-
property :mobile, String, :lazy => [:view]
|
33
|
-
property :anniversary, String, :lazy => [:view]
|
34
|
-
property :mail, LdapArray
|
35
|
-
property :labeleduri, LdapArray, :lazy => [:view]
|
36
|
-
property :marker, LdapArray, :lazy => [:view]
|
37
|
-
property :description, LdapArray, :lazy => [:view]
|
38
|
-
|
39
|
-
dn_prefix do |u|
|
40
|
-
"uid=#{u.id}"
|
41
|
-
end
|
42
|
-
|
43
|
-
ldap_properties do |u|
|
44
|
-
properties = { :objectclass => ['inetOrgPerson']}#, "posixAccount", "shadowAccount"]}#'contactPerson'] }
|
45
|
-
properties
|
46
|
-
end
|
47
|
-
|
48
|
-
treebase 'ou=people'
|
49
|
-
|
50
|
-
before :save, :fix_object
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def fix_object
|
55
|
-
self.cn = "#{self.givenname} #{self.sn}".strip
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
#This needs some documentation.
|
2
|
-
|
3
|
-
module DataMapper
|
4
|
-
module Resource
|
5
|
-
class State
|
6
|
-
|
7
|
-
# a persisted/deleted resource
|
8
|
-
class Deleted < Persisted
|
9
|
-
def set(subject, value)
|
10
|
-
warn 'Deleted resource cannot be modified ' + subject.inspect + ' ' + value.to_s + " " + @resource.inspect
|
11
|
-
super
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|