prathe-net-ldap 0.2.20110317223538

Sign up to get free protection for your applications and to get access to all the features.
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: &70298028616040 !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: *70298028616040
29
+ - !ruby/object:Gem::Dependency
30
+ name: hoe-gemspec
31
+ requirement: &70298028610220 !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: *70298028610220
40
+ - !ruby/object:Gem::Dependency
41
+ name: metaid
42
+ requirement: &70298028602300 !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: *70298028602300
51
+ - !ruby/object:Gem::Dependency
52
+ name: flexmock
53
+ requirement: &70298028427820 !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: *70298028427820
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: &70298028415200 !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: *70298028415200
73
+ - !ruby/object:Gem::Dependency
74
+ name: hoe
75
+ requirement: &70298028406000 !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: *70298028406000
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: prathe-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