net-ldap 0.16.3 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
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
-