net-ldap 0.16.3 → 0.17.0

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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +36 -0
  3. data/README.rdoc +9 -2
  4. data/lib/net/ldap.rb +25 -2
  5. data/lib/net/ldap/connection.rb +1 -1
  6. data/lib/net/ldap/dataset.rb +2 -2
  7. data/lib/net/ldap/entry.rb +13 -2
  8. data/lib/net/ldap/error.rb +1 -26
  9. data/lib/net/ldap/password.rb +4 -0
  10. data/lib/net/ldap/version.rb +1 -1
  11. metadata +12 -88
  12. data/.gitignore +0 -10
  13. data/.rubocop.yml +0 -20
  14. data/.rubocop_todo.yml +0 -723
  15. data/.travis.yml +0 -57
  16. data/CONTRIBUTING.md +0 -54
  17. data/Gemfile +0 -2
  18. data/Rakefile +0 -23
  19. data/net-ldap.gemspec +0 -37
  20. data/script/changelog +0 -47
  21. data/script/ldap-docker +0 -12
  22. data/script/package +0 -7
  23. data/script/release +0 -16
  24. data/test/ber/core_ext/test_array.rb +0 -22
  25. data/test/ber/core_ext/test_string.rb +0 -25
  26. data/test/ber/test_ber.rb +0 -153
  27. data/test/fixtures/ca/docker-ca.pem +0 -18
  28. data/test/fixtures/ldif/06-retcode.ldif +0 -75
  29. data/test/fixtures/ldif/50-seed.ldif +0 -374
  30. data/test/integration/test_add.rb +0 -26
  31. data/test/integration/test_ber.rb +0 -30
  32. data/test/integration/test_bind.rb +0 -221
  33. data/test/integration/test_delete.rb +0 -29
  34. data/test/integration/test_open.rb +0 -87
  35. data/test/integration/test_password_modify.rb +0 -93
  36. data/test/integration/test_return_codes.rb +0 -46
  37. data/test/integration/test_search.rb +0 -77
  38. data/test/support/vm/openldap/.gitignore +0 -1
  39. data/test/test_auth_adapter.rb +0 -15
  40. data/test/test_dn.rb +0 -43
  41. data/test/test_entry.rb +0 -66
  42. data/test/test_filter.rb +0 -223
  43. data/test/test_filter_parser.rb +0 -29
  44. data/test/test_helper.rb +0 -73
  45. data/test/test_ldap.rb +0 -114
  46. data/test/test_ldap_connection.rb +0 -505
  47. data/test/test_ldif.rb +0 -104
  48. data/test/test_password.rb +0 -10
  49. data/test/test_rename.rb +0 -77
  50. data/test/test_search.rb +0 -39
  51. data/test/test_snmp.rb +0 -118
  52. data/test/test_ssl_ber.rb +0 -44
  53. data/test/testdata.ldif +0 -101
  54. data/testserver/ldapserver.rb +0 -200
  55. data/testserver/testdata.ldif +0 -101
@@ -1,200 +0,0 @@
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
- LdapServerAsnSyntax = {
19
- :application => {
20
- :constructed => {
21
- 0 => :array, # LDAP BindRequest
22
- 3 => :array # LDAP SearchRequest
23
- },
24
- :primitive => {
25
- 2 => :string, # ldapsearch sends this to unbind
26
- },
27
- },
28
- :context_specific => {
29
- :primitive => {
30
- 0 => :string, # simple auth (password)
31
- 7 => :string # present filter
32
- },
33
- :constructed => {
34
- 3 => :array # equality filter
35
- },
36
- },
37
- }
38
-
39
- def post_init
40
- $logger.info "Accepted LDAP connection"
41
- @authenticated = false
42
- end
43
-
44
- def receive_data data
45
- @data ||= ""; @data << data
46
- while pdu = @data.read_ber!(LdapServerAsnSyntax)
47
- begin
48
- handle_ldap_pdu pdu
49
- rescue
50
- $logger.error "closing connection due to error #{$!}"
51
- close_connection
52
- end
53
- end
54
- end
55
-
56
- def handle_ldap_pdu pdu
57
- tag_id = pdu[1].ber_identifier
58
- case tag_id
59
- when 0x60
60
- handle_bind_request pdu
61
- when 0x63
62
- handle_search_request pdu
63
- when 0x42
64
- # bizarre thing, it's a null object (primitive application-2)
65
- # sent by ldapsearch to request an unbind (or a kiss-off, not sure which)
66
- close_connection_after_writing
67
- else
68
- $logger.error "received unknown packet-type #{tag_id}"
69
- close_connection_after_writing
70
- end
71
- end
72
-
73
- def handle_bind_request pdu
74
- # TODO, return a proper LDAP error instead of blowing up on version error
75
- if pdu[1][0] != 3
76
- send_ldap_response 1, pdu[0].to_i, 2, "", "We only support version 3"
77
- elsif pdu[1][1] != "cn=bigshot,dc=bayshorenetworks,dc=com"
78
- send_ldap_response 1, pdu[0].to_i, 48, "", "Who are you?"
79
- elsif pdu[1][2].ber_identifier != 0x80
80
- send_ldap_response 1, pdu[0].to_i, 7, "", "Keep it simple, man"
81
- elsif pdu[1][2] != "opensesame"
82
- send_ldap_response 1, pdu[0].to_i, 49, "", "Make my day"
83
- else
84
- @authenticated = true
85
- send_ldap_response 1, pdu[0].to_i, 0, pdu[1][1], "I'll take it"
86
- end
87
- end
88
-
89
- # --
90
- # Search Response ::=
91
- # CHOICE {
92
- # entry [APPLICATION 4] SEQUENCE {
93
- # objectName LDAPDN,
94
- # attributes SEQUENCE OF SEQUENCE {
95
- # AttributeType,
96
- # SET OF AttributeValue
97
- # }
98
- # },
99
- # resultCode [APPLICATION 5] LDAPResult
100
- # }
101
- def handle_search_request pdu
102
- unless @authenticated
103
- # NOTE, early exit.
104
- send_ldap_response 5, pdu[0].to_i, 50, "", "Who did you say you were?"
105
- return
106
- end
107
-
108
- treebase = pdu[1][0]
109
- if treebase != "dc=bayshorenetworks,dc=com"
110
- send_ldap_response 5, pdu[0].to_i, 32, "", "unknown treebase"
111
- return
112
- end
113
-
114
- msgid = pdu[0].to_i.to_ber
115
-
116
- # pdu[1][7] is the list of requested attributes.
117
- # If it's an empty array, that means that *all* attributes were requested.
118
- requested_attrs = if pdu[1][7].length > 0
119
- pdu[1][7].map(&:downcase)
120
- else
121
- :all
122
- end
123
-
124
- filters = pdu[1][6]
125
- if filters.length == 0
126
- # NOTE, early exit.
127
- send_ldap_response 5, pdu[0].to_i, 53, "", "No filter specified"
128
- end
129
-
130
- # TODO, what if this returns nil?
131
- filter = Net::LDAP::Filter.parse_ldap_filter(filters)
132
-
133
- $ldif.each do |dn, entry|
134
- if filter.match(entry)
135
- attrs = []
136
- entry.each do |k, v|
137
- if requested_attrs == :all || requested_attrs.include?(k.downcase)
138
- attrvals = v.map(&:to_ber).to_ber_set
139
- attrs << [k.to_ber, attrvals].to_ber_sequence
140
- end
141
- end
142
-
143
- appseq = [dn.to_ber, attrs.to_ber_sequence].to_ber_appsequence(4)
144
- pkt = [msgid.to_ber, appseq].to_ber_sequence
145
- send_data pkt
146
- end
147
- end
148
-
149
- send_ldap_response 5, pdu[0].to_i, 0, "", "Was that what you wanted?"
150
- end
151
-
152
- def send_ldap_response pkt_tag, msgid, code, dn, text
153
- send_data([msgid.to_ber, [code.to_ber, dn.to_ber, text.to_ber].to_ber_appsequence(pkt_tag)].to_ber)
154
- end
155
- end
156
-
157
- #------------------------------------------------
158
-
159
- # Rather bogus, a global method, which reads a HARDCODED filename
160
- # parses out LDIF data. It will be used to serve LDAP queries out of this server.
161
- #
162
- def load_test_data
163
- ary = File.readlines("./testdata.ldif")
164
- hash = {}
165
- while (line = ary.shift) && line.chomp!
166
- if line =~ /^dn:[\s]*/i
167
- dn = $'
168
- hash[dn] = {}
169
- while (attr = ary.shift) && attr.chomp! && attr =~ /^([\w]+)[\s]*:[\s]*/
170
- hash[dn][$1.downcase] ||= []
171
- hash[dn][$1.downcase] << $'
172
- end
173
- end
174
- end
175
- hash
176
- end
177
-
178
- #------------------------------------------------
179
-
180
- if __FILE__ == $0
181
-
182
- require 'rubygems'
183
- require 'eventmachine'
184
-
185
- require 'logger'
186
- $logger = Logger.new $stderr
187
-
188
- $logger.info "adding ../lib to loadpath, to pick up dev version of Net::LDAP."
189
- $:.unshift "../lib"
190
-
191
- $ldif = load_test_data
192
-
193
- require 'net/ldap'
194
-
195
- EventMachine.run do
196
- $logger.info "starting LDAP server on 127.0.0.1 port 3890"
197
- EventMachine.start_server "127.0.0.1", 3890, LdapServer
198
- EventMachine.add_periodic_timer 60, proc { $logger.info "heartbeat" }
199
- end
200
- end
@@ -1,101 +0,0 @@
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
-