prathe_net-ldap 0.2.20110317223538

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 (51) hide show
  1. data/.autotest +11 -0
  2. data/.gemtest +0 -0
  3. data/.rspec +2 -0
  4. data/Contributors.rdoc +21 -0
  5. data/Hacking.rdoc +68 -0
  6. data/History.rdoc +172 -0
  7. data/License.rdoc +29 -0
  8. data/Manifest.txt +49 -0
  9. data/README.rdoc +52 -0
  10. data/Rakefile +75 -0
  11. data/autotest/discover.rb +1 -0
  12. data/lib/net-ldap.rb +2 -0
  13. data/lib/net/ber.rb +318 -0
  14. data/lib/net/ber/ber_parser.rb +168 -0
  15. data/lib/net/ber/core_ext.rb +62 -0
  16. data/lib/net/ber/core_ext/array.rb +82 -0
  17. data/lib/net/ber/core_ext/bignum.rb +22 -0
  18. data/lib/net/ber/core_ext/false_class.rb +10 -0
  19. data/lib/net/ber/core_ext/fixnum.rb +66 -0
  20. data/lib/net/ber/core_ext/string.rb +60 -0
  21. data/lib/net/ber/core_ext/true_class.rb +12 -0
  22. data/lib/net/ldap.rb +1556 -0
  23. data/lib/net/ldap/dataset.rb +154 -0
  24. data/lib/net/ldap/dn.rb +225 -0
  25. data/lib/net/ldap/entry.rb +185 -0
  26. data/lib/net/ldap/filter.rb +759 -0
  27. data/lib/net/ldap/password.rb +31 -0
  28. data/lib/net/ldap/pdu.rb +256 -0
  29. data/lib/net/snmp.rb +268 -0
  30. data/net-ldap.gemspec +59 -0
  31. data/spec/integration/ssl_ber_spec.rb +36 -0
  32. data/spec/spec.opts +2 -0
  33. data/spec/spec_helper.rb +5 -0
  34. data/spec/unit/ber/ber_spec.rb +109 -0
  35. data/spec/unit/ber/core_ext/string_spec.rb +51 -0
  36. data/spec/unit/ldap/dn_spec.rb +80 -0
  37. data/spec/unit/ldap/entry_spec.rb +51 -0
  38. data/spec/unit/ldap/filter_spec.rb +84 -0
  39. data/spec/unit/ldap_spec.rb +48 -0
  40. data/test/common.rb +3 -0
  41. data/test/test_entry.rb +59 -0
  42. data/test/test_filter.rb +122 -0
  43. data/test/test_ldap_connection.rb +24 -0
  44. data/test/test_ldif.rb +79 -0
  45. data/test/test_password.rb +17 -0
  46. data/test/test_rename.rb +77 -0
  47. data/test/test_snmp.rb +114 -0
  48. data/test/testdata.ldif +101 -0
  49. data/testserver/ldapserver.rb +210 -0
  50. data/testserver/testdata.ldif +101 -0
  51. metadata +206 -0
@@ -0,0 +1,101 @@
1
+ # $Id: testdata.ldif 50 2006-04-17 17:57:33Z blackhedd $
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
+
@@ -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,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prathe_net-ldap
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.20110317223538
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Francis Cianfrocca
9
+ - Emiel van de Laar
10
+ - Rory O'Connell
11
+ - Kaspar Schiess
12
+ - Austin Ziegler
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+ date: 2011-03-17 00:00:00.000000000Z
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
19
+ name: hoe-git
20
+ requirement: &70271986157580 !ruby/object:Gem::Requirement
21
+ none: false
22
+ requirements:
23
+ - - ~>
24
+ - !ruby/object:Gem::Version
25
+ version: '1'
26
+ type: :development
27
+ prerelease: false
28
+ version_requirements: *70271986157580
29
+ - !ruby/object:Gem::Dependency
30
+ name: hoe-gemspec
31
+ requirement: &70271986154980 !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ~>
35
+ - !ruby/object:Gem::Version
36
+ version: '1'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: *70271986154980
40
+ - !ruby/object:Gem::Dependency
41
+ name: metaid
42
+ requirement: &70271986153520 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: *70271986153520
51
+ - !ruby/object:Gem::Dependency
52
+ name: flexmock
53
+ requirement: &70271986152520 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ version: 0.9.0
59
+ type: :development
60
+ prerelease: false
61
+ version_requirements: *70271986152520
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: &70271986151160 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '2.0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: *70271986151160
73
+ - !ruby/object:Gem::Dependency
74
+ name: hoe
75
+ requirement: &70271986150280 !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: 2.9.1
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: *70271986150280
84
+ description: ! 'Net::LDAP for Ruby (also called net-ldap) implements client access
85
+ for the
86
+
87
+ Lightweight Directory Access Protocol (LDAP), an IETF standard protocol for
88
+
89
+ accessing distributed directory services. Net::LDAP is written completely in
90
+
91
+ Ruby with no external dependencies. It supports most LDAP client features and a
92
+
93
+ subset of server features as well.
94
+
95
+
96
+ Net::LDAP has been tested against modern popular LDAP servers including
97
+
98
+ OpenLDAP and Active Directory. The current release is mostly compliant with
99
+
100
+ earlier versions of the IETF LDAP RFCs (2251–2256, 2829–2830, 3377, and 3771).
101
+
102
+ Our roadmap for Net::LDAP 1.0 is to gain full <em>client</em> compliance with
103
+
104
+ the most recent LDAP RFCs (4510–4519, plutions of 4520–4532).'
105
+ email:
106
+ - blackhedd@rubyforge.org
107
+ - gemiel@gmail.com
108
+ - rory.ocon@gmail.com
109
+ - kaspar.schiess@absurd.li
110
+ - austin@rubyforge.org
111
+ executables: []
112
+ extensions: []
113
+ extra_rdoc_files:
114
+ - Manifest.txt
115
+ - Contributors.rdoc
116
+ - Hacking.rdoc
117
+ - History.rdoc
118
+ - License.rdoc
119
+ - README.rdoc
120
+ files:
121
+ - .autotest
122
+ - .rspec
123
+ - Contributors.rdoc
124
+ - Hacking.rdoc
125
+ - History.rdoc
126
+ - License.rdoc
127
+ - Manifest.txt
128
+ - README.rdoc
129
+ - Rakefile
130
+ - autotest/discover.rb
131
+ - lib/net-ldap.rb
132
+ - lib/net/ber.rb
133
+ - lib/net/ber/ber_parser.rb
134
+ - lib/net/ber/core_ext.rb
135
+ - lib/net/ber/core_ext/array.rb
136
+ - lib/net/ber/core_ext/bignum.rb
137
+ - lib/net/ber/core_ext/false_class.rb
138
+ - lib/net/ber/core_ext/fixnum.rb
139
+ - lib/net/ber/core_ext/string.rb
140
+ - lib/net/ber/core_ext/true_class.rb
141
+ - lib/net/ldap.rb
142
+ - lib/net/ldap/dataset.rb
143
+ - lib/net/ldap/dn.rb
144
+ - lib/net/ldap/entry.rb
145
+ - lib/net/ldap/filter.rb
146
+ - lib/net/ldap/password.rb
147
+ - lib/net/ldap/pdu.rb
148
+ - lib/net/snmp.rb
149
+ - net-ldap.gemspec
150
+ - spec/integration/ssl_ber_spec.rb
151
+ - spec/spec.opts
152
+ - spec/spec_helper.rb
153
+ - spec/unit/ber/ber_spec.rb
154
+ - spec/unit/ber/core_ext/string_spec.rb
155
+ - spec/unit/ldap/dn_spec.rb
156
+ - spec/unit/ldap/entry_spec.rb
157
+ - spec/unit/ldap/filter_spec.rb
158
+ - spec/unit/ldap_spec.rb
159
+ - test/common.rb
160
+ - test/test_entry.rb
161
+ - test/test_filter.rb
162
+ - test/test_ldap_connection.rb
163
+ - test/test_ldif.rb
164
+ - test/test_password.rb
165
+ - test/test_rename.rb
166
+ - test/test_snmp.rb
167
+ - test/testdata.ldif
168
+ - testserver/ldapserver.rb
169
+ - testserver/testdata.ldif
170
+ - .gemtest
171
+ homepage: http://net-ldap.rubyforge.org/
172
+ licenses: []
173
+ post_install_message:
174
+ rdoc_options:
175
+ - --main
176
+ - README.rdoc
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ! '>='
183
+ - !ruby/object:Gem::Version
184
+ version: 1.8.7
185
+ required_rubygems_version: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ requirements: []
192
+ rubyforge_project: net-ldap
193
+ rubygems_version: 1.8.10
194
+ signing_key:
195
+ specification_version: 3
196
+ summary: Net::LDAP for Ruby (also called net-ldap) implements client access for the
197
+ Lightweight Directory Access Protocol (LDAP), an IETF standard protocol for accessing
198
+ distributed directory services
199
+ test_files:
200
+ - test/test_entry.rb
201
+ - test/test_filter.rb
202
+ - test/test_ldap_connection.rb
203
+ - test/test_ldif.rb
204
+ - test/test_password.rb
205
+ - test/test_rename.rb
206
+ - test/test_snmp.rb