rubinius-net-ldap 0.11

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.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rubocop.yml +5 -0
  4. data/.rubocop_todo.yml +462 -0
  5. data/.travis.yml +19 -0
  6. data/CONTRIBUTING.md +54 -0
  7. data/Contributors.rdoc +24 -0
  8. data/Gemfile +2 -0
  9. data/Hacking.rdoc +63 -0
  10. data/History.rdoc +260 -0
  11. data/License.rdoc +29 -0
  12. data/README.rdoc +65 -0
  13. data/Rakefile +17 -0
  14. data/lib/net-ldap.rb +2 -0
  15. data/lib/net/ber.rb +320 -0
  16. data/lib/net/ber/ber_parser.rb +182 -0
  17. data/lib/net/ber/core_ext.rb +55 -0
  18. data/lib/net/ber/core_ext/array.rb +96 -0
  19. data/lib/net/ber/core_ext/false_class.rb +10 -0
  20. data/lib/net/ber/core_ext/integer.rb +74 -0
  21. data/lib/net/ber/core_ext/string.rb +66 -0
  22. data/lib/net/ber/core_ext/true_class.rb +11 -0
  23. data/lib/net/ldap.rb +1229 -0
  24. data/lib/net/ldap/connection.rb +702 -0
  25. data/lib/net/ldap/dataset.rb +168 -0
  26. data/lib/net/ldap/dn.rb +225 -0
  27. data/lib/net/ldap/entry.rb +193 -0
  28. data/lib/net/ldap/error.rb +38 -0
  29. data/lib/net/ldap/filter.rb +778 -0
  30. data/lib/net/ldap/instrumentation.rb +23 -0
  31. data/lib/net/ldap/password.rb +38 -0
  32. data/lib/net/ldap/pdu.rb +297 -0
  33. data/lib/net/ldap/version.rb +5 -0
  34. data/lib/net/snmp.rb +264 -0
  35. data/rubinius-net-ldap.gemspec +37 -0
  36. data/script/install-openldap +112 -0
  37. data/script/package +7 -0
  38. data/script/release +16 -0
  39. data/test/ber/core_ext/test_array.rb +22 -0
  40. data/test/ber/core_ext/test_string.rb +25 -0
  41. data/test/ber/test_ber.rb +99 -0
  42. data/test/fixtures/cacert.pem +20 -0
  43. data/test/fixtures/openldap/memberof.ldif +33 -0
  44. data/test/fixtures/openldap/retcode.ldif +76 -0
  45. data/test/fixtures/openldap/slapd.conf.ldif +67 -0
  46. data/test/fixtures/seed.ldif +374 -0
  47. data/test/integration/test_add.rb +28 -0
  48. data/test/integration/test_ber.rb +30 -0
  49. data/test/integration/test_bind.rb +34 -0
  50. data/test/integration/test_delete.rb +31 -0
  51. data/test/integration/test_open.rb +88 -0
  52. data/test/integration/test_return_codes.rb +38 -0
  53. data/test/integration/test_search.rb +77 -0
  54. data/test/support/vm/openldap/.gitignore +1 -0
  55. data/test/support/vm/openldap/README.md +32 -0
  56. data/test/support/vm/openldap/Vagrantfile +33 -0
  57. data/test/test_dn.rb +44 -0
  58. data/test/test_entry.rb +65 -0
  59. data/test/test_filter.rb +223 -0
  60. data/test/test_filter_parser.rb +20 -0
  61. data/test/test_helper.rb +66 -0
  62. data/test/test_ldap.rb +60 -0
  63. data/test/test_ldap_connection.rb +404 -0
  64. data/test/test_ldif.rb +104 -0
  65. data/test/test_password.rb +10 -0
  66. data/test/test_rename.rb +77 -0
  67. data/test/test_search.rb +39 -0
  68. data/test/test_snmp.rb +119 -0
  69. data/test/test_ssl_ber.rb +40 -0
  70. data/test/testdata.ldif +101 -0
  71. data/testserver/ldapserver.rb +210 -0
  72. data/testserver/testdata.ldif +101 -0
  73. metadata +204 -0
@@ -0,0 +1,210 @@
1
+ # $Id$
2
+ #
3
+ # Copyright (C) 2006 by Francis Cianfrocca. All Rights Reserved.
4
+ # Gmail account: garbagecat10.
5
+ #
6
+ # This is an LDAP server intended for unit testing of Net::LDAP.
7
+ # It implements as much of the protocol as we have the stomach
8
+ # to implement but serves static data. Use ldapsearch to test
9
+ # this server!
10
+ #
11
+ # To make this easier to write, we use the Ruby/EventMachine
12
+ # reactor library.
13
+ #
14
+
15
+ #------------------------------------------------
16
+
17
+ module LdapServer
18
+
19
+ LdapServerAsnSyntax = {
20
+ :application => {
21
+ :constructed => {
22
+ 0 => :array, # LDAP BindRequest
23
+ 3 => :array # LDAP SearchRequest
24
+ },
25
+ :primitive => {
26
+ 2 => :string, # ldapsearch sends this to unbind
27
+ }
28
+ },
29
+ :context_specific => {
30
+ :primitive => {
31
+ 0 => :string, # simple auth (password)
32
+ 7 => :string # present filter
33
+ },
34
+ :constructed => {
35
+ 3 => :array # equality filter
36
+ },
37
+ }
38
+ }
39
+
40
+ def post_init
41
+ $logger.info "Accepted LDAP connection"
42
+ @authenticated = false
43
+ end
44
+
45
+ def receive_data data
46
+ @data ||= ""; @data << data
47
+ while pdu = @data.read_ber!(LdapServerAsnSyntax)
48
+ begin
49
+ handle_ldap_pdu pdu
50
+ rescue
51
+ $logger.error "closing connection due to error #{$!}"
52
+ close_connection
53
+ end
54
+ end
55
+ end
56
+
57
+ def handle_ldap_pdu pdu
58
+ tag_id = pdu[1].ber_identifier
59
+ case tag_id
60
+ when 0x60
61
+ handle_bind_request pdu
62
+ when 0x63
63
+ handle_search_request pdu
64
+ when 0x42
65
+ # bizarre thing, it's a null object (primitive application-2)
66
+ # sent by ldapsearch to request an unbind (or a kiss-off, not sure which)
67
+ close_connection_after_writing
68
+ else
69
+ $logger.error "received unknown packet-type #{tag_id}"
70
+ close_connection_after_writing
71
+ end
72
+ end
73
+
74
+ def handle_bind_request pdu
75
+ # TODO, return a proper LDAP error instead of blowing up on version error
76
+ if pdu[1][0] != 3
77
+ send_ldap_response 1, pdu[0].to_i, 2, "", "We only support version 3"
78
+ elsif pdu[1][1] != "cn=bigshot,dc=bayshorenetworks,dc=com"
79
+ send_ldap_response 1, pdu[0].to_i, 48, "", "Who are you?"
80
+ elsif pdu[1][2].ber_identifier != 0x80
81
+ send_ldap_response 1, pdu[0].to_i, 7, "", "Keep it simple, man"
82
+ elsif pdu[1][2] != "opensesame"
83
+ send_ldap_response 1, pdu[0].to_i, 49, "", "Make my day"
84
+ else
85
+ @authenticated = true
86
+ send_ldap_response 1, pdu[0].to_i, 0, pdu[1][1], "I'll take it"
87
+ end
88
+ end
89
+
90
+
91
+
92
+ #--
93
+ # Search Response ::=
94
+ # CHOICE {
95
+ # entry [APPLICATION 4] SEQUENCE {
96
+ # objectName LDAPDN,
97
+ # attributes SEQUENCE OF SEQUENCE {
98
+ # AttributeType,
99
+ # SET OF AttributeValue
100
+ # }
101
+ # },
102
+ # resultCode [APPLICATION 5] LDAPResult
103
+ # }
104
+ def handle_search_request pdu
105
+ unless @authenticated
106
+ # NOTE, early exit.
107
+ send_ldap_response 5, pdu[0].to_i, 50, "", "Who did you say you were?"
108
+ return
109
+ end
110
+
111
+ treebase = pdu[1][0]
112
+ if treebase != "dc=bayshorenetworks,dc=com"
113
+ send_ldap_response 5, pdu[0].to_i, 32, "", "unknown treebase"
114
+ return
115
+ end
116
+
117
+ msgid = pdu[0].to_i.to_ber
118
+
119
+ # pdu[1][7] is the list of requested attributes.
120
+ # If it's an empty array, that means that *all* attributes were requested.
121
+ requested_attrs = if pdu[1][7].length > 0
122
+ pdu[1][7].map {|a| a.downcase}
123
+ else
124
+ :all
125
+ end
126
+
127
+ filters = pdu[1][6]
128
+ if filters.length == 0
129
+ # NOTE, early exit.
130
+ send_ldap_response 5, pdu[0].to_i, 53, "", "No filter specified"
131
+ end
132
+
133
+ # TODO, what if this returns nil?
134
+ filter = Net::LDAP::Filter.parse_ldap_filter( filters )
135
+
136
+ $ldif.each {|dn, entry|
137
+ if filter.match( entry )
138
+ attrs = []
139
+ entry.each {|k, v|
140
+ if requested_attrs == :all or requested_attrs.include?(k.downcase)
141
+ attrvals = v.map {|v1| v1.to_ber}.to_ber_set
142
+ attrs << [k.to_ber, attrvals].to_ber_sequence
143
+ end
144
+ }
145
+
146
+ appseq = [dn.to_ber, attrs.to_ber_sequence].to_ber_appsequence(4)
147
+ pkt = [msgid.to_ber, appseq].to_ber_sequence
148
+ send_data pkt
149
+ end
150
+ }
151
+
152
+
153
+ send_ldap_response 5, pdu[0].to_i, 0, "", "Was that what you wanted?"
154
+ end
155
+
156
+
157
+
158
+ def send_ldap_response pkt_tag, msgid, code, dn, text
159
+ send_data( [msgid.to_ber, [code.to_ber, dn.to_ber, text.to_ber].to_ber_appsequence(pkt_tag) ].to_ber )
160
+ end
161
+
162
+ end
163
+
164
+
165
+ #------------------------------------------------
166
+
167
+ # Rather bogus, a global method, which reads a HARDCODED filename
168
+ # parses out LDIF data. It will be used to serve LDAP queries out of this server.
169
+ #
170
+ def load_test_data
171
+ ary = File.readlines( "./testdata.ldif" )
172
+ hash = {}
173
+ while line = ary.shift and line.chomp!
174
+ if line =~ /^dn:[\s]*/i
175
+ dn = $'
176
+ hash[dn] = {}
177
+ while attr = ary.shift and attr.chomp! and attr =~ /^([\w]+)[\s]*:[\s]*/
178
+ hash[dn][$1.downcase] ||= []
179
+ hash[dn][$1.downcase] << $'
180
+ end
181
+ end
182
+ end
183
+ hash
184
+ end
185
+
186
+
187
+ #------------------------------------------------
188
+
189
+ if __FILE__ == $0
190
+
191
+ require 'rubygems'
192
+ require 'eventmachine'
193
+
194
+ require 'logger'
195
+ $logger = Logger.new $stderr
196
+
197
+ $logger.info "adding ../lib to loadpath, to pick up dev version of Net::LDAP."
198
+ $:.unshift "../lib"
199
+
200
+ $ldif = load_test_data
201
+
202
+ require 'net/ldap'
203
+
204
+ EventMachine.run {
205
+ $logger.info "starting LDAP server on 127.0.0.1 port 3890"
206
+ EventMachine.start_server "127.0.0.1", 3890, LdapServer
207
+ EventMachine.add_periodic_timer 60, proc {$logger.info "heartbeat"}
208
+ }
209
+ end
210
+
@@ -0,0 +1,101 @@
1
+ # $Id$
2
+ #
3
+ # This is test-data for an LDAP server in LDIF format.
4
+ #
5
+ dn: dc=bayshorenetworks,dc=com
6
+ objectClass: dcObject
7
+ objectClass: organization
8
+ o: Bayshore Networks LLC
9
+ dc: bayshorenetworks
10
+
11
+ dn: cn=Manager,dc=bayshorenetworks,dc=com
12
+ objectClass: organizationalrole
13
+ cn: Manager
14
+
15
+ dn: ou=people,dc=bayshorenetworks,dc=com
16
+ objectClass: organizationalunit
17
+ ou: people
18
+
19
+ dn: ou=privileges,dc=bayshorenetworks,dc=com
20
+ objectClass: organizationalunit
21
+ ou: privileges
22
+
23
+ dn: ou=roles,dc=bayshorenetworks,dc=com
24
+ objectClass: organizationalunit
25
+ ou: roles
26
+
27
+ dn: ou=office,dc=bayshorenetworks,dc=com
28
+ objectClass: organizationalunit
29
+ ou: office
30
+
31
+ dn: mail=nogoodnik@steamheat.net,ou=people,dc=bayshorenetworks,dc=com
32
+ cn: Bob Fosse
33
+ mail: nogoodnik@steamheat.net
34
+ sn: Fosse
35
+ ou: people
36
+ objectClass: top
37
+ objectClass: inetorgperson
38
+ objectClass: authorizedperson
39
+ hasAccessRole: uniqueIdentifier=engineer,ou=roles
40
+ hasAccessRole: uniqueIdentifier=ldapadmin,ou=roles
41
+ hasAccessRole: uniqueIdentifier=ldapsuperadmin,ou=roles
42
+ hasAccessRole: uniqueIdentifier=ogilvy_elephant_user,ou=roles
43
+ hasAccessRole: uniqueIdentifier=ogilvy_eagle_user,ou=roles
44
+ hasAccessRole: uniqueIdentifier=greenplug_user,ou=roles
45
+ hasAccessRole: uniqueIdentifier=brandplace_logging_user,ou=roles
46
+ hasAccessRole: uniqueIdentifier=brandplace_report_user,ou=roles
47
+ hasAccessRole: uniqueIdentifier=workorder_user,ou=roles
48
+ hasAccessRole: uniqueIdentifier=bayshore_eagle_user,ou=roles
49
+ hasAccessRole: uniqueIdentifier=bayshore_eagle_superuser,ou=roles
50
+ hasAccessRole: uniqueIdentifier=kledaras_user,ou=roles
51
+
52
+ dn: mail=elephant@steamheat.net,ou=people,dc=bayshorenetworks,dc=com
53
+ cn: Gwen Verdon
54
+ mail: elephant@steamheat.net
55
+ sn: Verdon
56
+ ou: people
57
+ objectClass: top
58
+ objectClass: inetorgperson
59
+ objectClass: authorizedperson
60
+ hasAccessRole: uniqueIdentifier=brandplace_report_user,ou=roles
61
+ hasAccessRole: uniqueIdentifier=engineer,ou=roles
62
+ hasAccessRole: uniqueIdentifier=ogilvy_elephant_user,ou=roles
63
+ hasAccessRole: uniqueIdentifier=ldapsuperadmin,ou=roles
64
+ hasAccessRole: uniqueIdentifier=ldapadmin,ou=roles
65
+
66
+ dn: uniqueIdentifier=engineering,ou=privileges,dc=bayshorenetworks,dc=com
67
+ uniqueIdentifier: engineering
68
+ ou: privileges
69
+ objectClass: accessPrivilege
70
+
71
+ dn: uniqueIdentifier=engineer,ou=roles,dc=bayshorenetworks,dc=com
72
+ uniqueIdentifier: engineer
73
+ ou: roles
74
+ objectClass: accessRole
75
+ hasAccessPrivilege: uniqueIdentifier=engineering,ou=privileges
76
+
77
+ dn: uniqueIdentifier=ldapadmin,ou=roles,dc=bayshorenetworks,dc=com
78
+ uniqueIdentifier: ldapadmin
79
+ ou: roles
80
+ objectClass: accessRole
81
+
82
+ dn: uniqueIdentifier=ldapsuperadmin,ou=roles,dc=bayshorenetworks,dc=com
83
+ uniqueIdentifier: ldapsuperadmin
84
+ ou: roles
85
+ objectClass: accessRole
86
+
87
+ dn: mail=catperson@steamheat.net,ou=people,dc=bayshorenetworks,dc=com
88
+ cn: Sid Sorokin
89
+ mail: catperson@steamheat.net
90
+ sn: Sorokin
91
+ ou: people
92
+ objectClass: top
93
+ objectClass: inetorgperson
94
+ objectClass: authorizedperson
95
+ hasAccessRole: uniqueIdentifier=engineer,ou=roles
96
+ hasAccessRole: uniqueIdentifier=ogilvy_elephant_user,ou=roles
97
+ hasAccessRole: uniqueIdentifier=ldapsuperadmin,ou=roles
98
+ hasAccessRole: uniqueIdentifier=ogilvy_eagle_user,ou=roles
99
+ hasAccessRole: uniqueIdentifier=greenplug_user,ou=roles
100
+ hasAccessRole: uniqueIdentifier=workorder_user,ou=roles
101
+
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubinius-net-ldap
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.11"
5
+ platform: ruby
6
+ authors:
7
+ - Francis Cianfrocca
8
+ - Emiel van de Laar
9
+ - Rory O'Connell
10
+ - Kaspar Schiess
11
+ - Austin Ziegler
12
+ - Michael Schaarschmidt
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2015-06-05 00:00:00 Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: flexmock
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: "1.3"
27
+ type: :development
28
+ version_requirements: *id001
29
+ - !ruby/object:Gem::Dependency
30
+ name: rake
31
+ prerelease: false
32
+ requirement: &id002 !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ~>
35
+ - !ruby/object:Gem::Version
36
+ version: "10.0"
37
+ type: :development
38
+ version_requirements: *id002
39
+ description: |
40
+ Net::LDAP for Ruby (also called net-ldap) implements client access for the
41
+ Lightweight Directory Access Protocol (LDAP), an IETF standard protocol for
42
+ accessing distributed directory services. Net::LDAP is written completely in
43
+ Ruby with no external dependencies. It supports most LDAP client features and a
44
+ subset of server features as well.
45
+
46
+ Net::LDAP has been tested against modern popular LDAP servers including
47
+ OpenLDAP and Active Directory. The current release is mostly compliant with
48
+ earlier versions of the IETF LDAP RFCs (2251-2256, 2829-2830, 3377, and 3771).
49
+ Our roadmap for Net::LDAP 1.0 is to gain full <em>client</em> compliance with
50
+ the most recent LDAP RFCs (4510-4519, plutions of 4520-4532).
51
+
52
+ NOTE: This is a fork of https://github.com/ruby-ldap/ruby-net-ldap to support
53
+ Ruby 1.8.7.
54
+
55
+ email:
56
+ - blackhedd@rubyforge.org
57
+ - gemiel@gmail.com
58
+ - rory.ocon@gmail.com
59
+ - kaspar.schiess@absurd.li
60
+ - austin@rubyforge.org
61
+ executables: []
62
+
63
+ extensions: []
64
+
65
+ extra_rdoc_files:
66
+ - Contributors.rdoc
67
+ - Hacking.rdoc
68
+ - History.rdoc
69
+ - License.rdoc
70
+ - README.rdoc
71
+ files:
72
+ - .gitignore
73
+ - .rubocop.yml
74
+ - .rubocop_todo.yml
75
+ - .travis.yml
76
+ - CONTRIBUTING.md
77
+ - Contributors.rdoc
78
+ - Gemfile
79
+ - Hacking.rdoc
80
+ - History.rdoc
81
+ - License.rdoc
82
+ - README.rdoc
83
+ - Rakefile
84
+ - lib/net-ldap.rb
85
+ - lib/net/ber.rb
86
+ - lib/net/ber/ber_parser.rb
87
+ - lib/net/ber/core_ext.rb
88
+ - lib/net/ber/core_ext/array.rb
89
+ - lib/net/ber/core_ext/false_class.rb
90
+ - lib/net/ber/core_ext/integer.rb
91
+ - lib/net/ber/core_ext/string.rb
92
+ - lib/net/ber/core_ext/true_class.rb
93
+ - lib/net/ldap.rb
94
+ - lib/net/ldap/connection.rb
95
+ - lib/net/ldap/dataset.rb
96
+ - lib/net/ldap/dn.rb
97
+ - lib/net/ldap/entry.rb
98
+ - lib/net/ldap/error.rb
99
+ - lib/net/ldap/filter.rb
100
+ - lib/net/ldap/instrumentation.rb
101
+ - lib/net/ldap/password.rb
102
+ - lib/net/ldap/pdu.rb
103
+ - lib/net/ldap/version.rb
104
+ - lib/net/snmp.rb
105
+ - rubinius-net-ldap.gemspec
106
+ - script/install-openldap
107
+ - script/package
108
+ - script/release
109
+ - test/ber/core_ext/test_array.rb
110
+ - test/ber/core_ext/test_string.rb
111
+ - test/ber/test_ber.rb
112
+ - test/fixtures/cacert.pem
113
+ - test/fixtures/openldap/memberof.ldif
114
+ - test/fixtures/openldap/retcode.ldif
115
+ - test/fixtures/openldap/slapd.conf.ldif
116
+ - test/fixtures/seed.ldif
117
+ - test/integration/test_add.rb
118
+ - test/integration/test_ber.rb
119
+ - test/integration/test_bind.rb
120
+ - test/integration/test_delete.rb
121
+ - test/integration/test_open.rb
122
+ - test/integration/test_return_codes.rb
123
+ - test/integration/test_search.rb
124
+ - test/support/vm/openldap/.gitignore
125
+ - test/support/vm/openldap/README.md
126
+ - test/support/vm/openldap/Vagrantfile
127
+ - test/test_dn.rb
128
+ - test/test_entry.rb
129
+ - test/test_filter.rb
130
+ - test/test_filter_parser.rb
131
+ - test/test_helper.rb
132
+ - test/test_ldap.rb
133
+ - test/test_ldap_connection.rb
134
+ - test/test_ldif.rb
135
+ - test/test_password.rb
136
+ - test/test_rename.rb
137
+ - test/test_search.rb
138
+ - test/test_snmp.rb
139
+ - test/test_ssl_ber.rb
140
+ - test/testdata.ldif
141
+ - testserver/ldapserver.rb
142
+ - testserver/testdata.ldif
143
+ homepage: https://github.com/rubinius/ruby-net-ldap
144
+ licenses:
145
+ - MIT
146
+ metadata: {}
147
+
148
+ post_install_message:
149
+ rdoc_options:
150
+ - --main
151
+ - README.rdoc
152
+ require_paths:
153
+ - lib
154
+ required_ruby_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - &id003
157
+ - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: "0"
160
+ required_rubygems_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - *id003
163
+ requirements: []
164
+
165
+ rubyforge_project:
166
+ rubygems_version: 2.4.6
167
+ signing_key:
168
+ specification_version: 4
169
+ summary: Net::LDAP for Ruby (also called net-ldap) implements client access for the Lightweight Directory Access Protocol (LDAP), an IETF standard protocol for accessing distributed directory services
170
+ test_files:
171
+ - test/ber/core_ext/test_array.rb
172
+ - test/ber/core_ext/test_string.rb
173
+ - test/ber/test_ber.rb
174
+ - test/fixtures/cacert.pem
175
+ - test/fixtures/openldap/memberof.ldif
176
+ - test/fixtures/openldap/retcode.ldif
177
+ - test/fixtures/openldap/slapd.conf.ldif
178
+ - test/fixtures/seed.ldif
179
+ - test/integration/test_add.rb
180
+ - test/integration/test_ber.rb
181
+ - test/integration/test_bind.rb
182
+ - test/integration/test_delete.rb
183
+ - test/integration/test_open.rb
184
+ - test/integration/test_return_codes.rb
185
+ - test/integration/test_search.rb
186
+ - test/support/vm/openldap/.gitignore
187
+ - test/support/vm/openldap/README.md
188
+ - test/support/vm/openldap/Vagrantfile
189
+ - test/test_dn.rb
190
+ - test/test_entry.rb
191
+ - test/test_filter.rb
192
+ - test/test_filter_parser.rb
193
+ - test/test_helper.rb
194
+ - test/test_ldap.rb
195
+ - test/test_ldap_connection.rb
196
+ - test/test_ldif.rb
197
+ - test/test_password.rb
198
+ - test/test_rename.rb
199
+ - test/test_search.rb
200
+ - test/test_snmp.rb
201
+ - test/test_ssl_ber.rb
202
+ - test/testdata.ldif
203
+ - testserver/ldapserver.rb
204
+ - testserver/testdata.ldif