net-ldap 0.10.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fe93b5d4adc9f8aad092d00b1e3b6f9049ebf40d
4
- data.tar.gz: 3483c7b26e26a6f87385e60f2c58b32fa508df89
3
+ metadata.gz: 093221df6c10572671e2d05af258d473d1c17e78
4
+ data.tar.gz: e27ca24638d8d46f2a8a39900fb90d8ca6a7f1fe
5
5
  SHA512:
6
- metadata.gz: 4790e354827d3886500a788a154247c8b8ef582273e74d876d88d1a52edcfe5fb44c8f5efcbc54a7f246bca20413ace95491508f69d379c89b57b52c12b2f3f7
7
- data.tar.gz: cab9f575616ca54675015d42ac15f4add481a24fd4ae5c30867980ddf306363dbb28262b134e04cbb975557a6821f777c2a62ee0aa4d1c0173991f8f62a28bea
6
+ metadata.gz: 7f1bdba62c083cfc5b128226107f94815fb6d8b2d4d04fb47e30271289d6ffa193dc5e9363a2f44a04b7d5a30af08a97bba3d5afeda4ce035d7581f533db639a
7
+ data.tar.gz: 9ff4126e94e791948777a1ed4396c21cdf62fb9a446a4eb240364302367c08a27566243af69bdf907fd2f8bfbe92117513eccc033db97f3c47acefab348971a1
@@ -0,0 +1,5 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ Exclude:
5
+ - 'pkg/**/*'
@@ -0,0 +1,462 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2014-12-19 15:32:44 +1100 using RuboCop version 0.28.0.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ # Offense count: 12
9
+ # Configuration parameters: AllowSafeAssignment.
10
+ Lint/AssignmentInCondition:
11
+ Enabled: false
12
+
13
+ # Offense count: 1
14
+ # Configuration parameters: AlignWith, SupportedStyles.
15
+ Lint/EndAlignment:
16
+ Enabled: false
17
+
18
+ # Offense count: 1
19
+ Lint/RescueException:
20
+ Enabled: false
21
+
22
+ # Offense count: 1
23
+ Lint/ShadowingOuterLocalVariable:
24
+ Enabled: false
25
+
26
+ # Offense count: 9
27
+ # Cop supports --auto-correct.
28
+ Lint/UnusedBlockArgument:
29
+ Enabled: false
30
+
31
+ # Offense count: 3
32
+ # Cop supports --auto-correct.
33
+ Lint/UnusedMethodArgument:
34
+ Enabled: false
35
+
36
+ # Offense count: 7
37
+ Lint/UselessAssignment:
38
+ Enabled: false
39
+
40
+ # Offense count: 47
41
+ Metrics/AbcSize:
42
+ Max: 114
43
+
44
+ # Offense count: 11
45
+ Metrics/BlockNesting:
46
+ Max: 4
47
+
48
+ # Offense count: 9
49
+ # Configuration parameters: CountComments.
50
+ Metrics/ClassLength:
51
+ Max: 470
52
+
53
+ # Offense count: 20
54
+ Metrics/CyclomaticComplexity:
55
+ Max: 41
56
+
57
+ # Offense count: 193
58
+ # Configuration parameters: AllowURI, URISchemes.
59
+ Metrics/LineLength:
60
+ Max: 360
61
+
62
+ # Offense count: 71
63
+ # Configuration parameters: CountComments.
64
+ Metrics/MethodLength:
65
+ Max: 130
66
+
67
+ # Offense count: 13
68
+ Metrics/PerceivedComplexity:
69
+ Max: 36
70
+
71
+ # Offense count: 1
72
+ Style/AccessorMethodName:
73
+ Enabled: false
74
+
75
+ # Offense count: 4
76
+ # Cop supports --auto-correct.
77
+ Style/AlignArray:
78
+ Enabled: false
79
+
80
+ # Offense count: 3
81
+ # Cop supports --auto-correct.
82
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
83
+ Style/AlignParameters:
84
+ Enabled: false
85
+
86
+ # Offense count: 36
87
+ # Cop supports --auto-correct.
88
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
89
+ Style/AndOr:
90
+ Enabled: false
91
+
92
+ # Offense count: 1
93
+ # Cop supports --auto-correct.
94
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
95
+ Style/BarePercentLiterals:
96
+ Enabled: false
97
+
98
+ # Offense count: 1
99
+ # Cop supports --auto-correct.
100
+ Style/BlockComments:
101
+ Enabled: false
102
+
103
+ # Offense count: 20
104
+ # Cop supports --auto-correct.
105
+ Style/Blocks:
106
+ Enabled: false
107
+
108
+ # Offense count: 2
109
+ # Cop supports --auto-correct.
110
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
111
+ Style/BracesAroundHashParameters:
112
+ Enabled: false
113
+
114
+ # Offense count: 4
115
+ # Configuration parameters: IndentWhenRelativeTo, SupportedStyles, IndentOneStep.
116
+ Style/CaseIndentation:
117
+ Enabled: false
118
+
119
+ # Offense count: 4
120
+ # Cop supports --auto-correct.
121
+ Style/CharacterLiteral:
122
+ Enabled: false
123
+
124
+ # Offense count: 22
125
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
126
+ Style/ClassAndModuleChildren:
127
+ Enabled: false
128
+
129
+ # Offense count: 1
130
+ # Cop supports --auto-correct.
131
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
132
+ Style/ClassCheck:
133
+ Enabled: false
134
+
135
+ # Offense count: 13
136
+ # Cop supports --auto-correct.
137
+ Style/ColonMethodCall:
138
+ Enabled: false
139
+
140
+ # Offense count: 2
141
+ # Configuration parameters: Keywords.
142
+ Style/CommentAnnotation:
143
+ Enabled: false
144
+
145
+ # Offense count: 86
146
+ Style/ConstantName:
147
+ Enabled: false
148
+
149
+ # Offense count: 18
150
+ # Cop supports --auto-correct.
151
+ Style/DeprecatedHashMethods:
152
+ Enabled: false
153
+
154
+ # Offense count: 46
155
+ Style/Documentation:
156
+ Enabled: false
157
+
158
+ # Offense count: 23
159
+ # Cop supports --auto-correct.
160
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
161
+ Style/DotPosition:
162
+ Enabled: false
163
+
164
+ # Offense count: 1
165
+ # Cop supports --auto-correct.
166
+ Style/ElseAlignment:
167
+ Enabled: false
168
+
169
+ # Offense count: 4
170
+ # Cop supports --auto-correct.
171
+ # Configuration parameters: AllowAdjacentOneLineDefs.
172
+ Style/EmptyLineBetweenDefs:
173
+ Enabled: false
174
+
175
+ # Offense count: 9
176
+ # Cop supports --auto-correct.
177
+ Style/EmptyLines:
178
+ Enabled: false
179
+
180
+ # Offense count: 1
181
+ # Cop supports --auto-correct.
182
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
183
+ Style/EmptyLinesAroundClassBody:
184
+ Enabled: false
185
+
186
+ # Offense count: 2
187
+ # Cop supports --auto-correct.
188
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
189
+ Style/EmptyLinesAroundModuleBody:
190
+ Enabled: false
191
+
192
+ # Offense count: 3
193
+ Style/EvenOdd:
194
+ Enabled: false
195
+
196
+ # Offense count: 1
197
+ # Configuration parameters: Exclude.
198
+ Style/FileName:
199
+ Enabled: false
200
+
201
+ # Offense count: 9
202
+ # Configuration parameters: AllowedVariables.
203
+ Style/GlobalVars:
204
+ Enabled: false
205
+
206
+ # Offense count: 3
207
+ # Configuration parameters: MinBodyLength.
208
+ Style/GuardClause:
209
+ Enabled: false
210
+
211
+ # Offense count: 150
212
+ # Cop supports --auto-correct.
213
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
214
+ Style/HashSyntax:
215
+ Enabled: false
216
+
217
+ # Offense count: 8
218
+ # Configuration parameters: MaxLineLength.
219
+ Style/IfUnlessModifier:
220
+ Enabled: false
221
+
222
+ # Offense count: 2
223
+ # Cop supports --auto-correct.
224
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
225
+ Style/IndentHash:
226
+ Enabled: false
227
+
228
+ # Offense count: 6
229
+ # Cop supports --auto-correct.
230
+ # Configuration parameters: Width.
231
+ Style/IndentationWidth:
232
+ Enabled: false
233
+
234
+ # Offense count: 2
235
+ # Cop supports --auto-correct.
236
+ Style/LeadingCommentSpace:
237
+ Enabled: false
238
+
239
+ # Offense count: 21
240
+ # Cop supports --auto-correct.
241
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
242
+ Style/MethodDefParentheses:
243
+ Enabled: false
244
+
245
+ # Offense count: 1
246
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
247
+ Style/MethodName:
248
+ Enabled: false
249
+
250
+ # Offense count: 5
251
+ # Cop supports --auto-correct.
252
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
253
+ Style/MultilineOperationIndentation:
254
+ Enabled: false
255
+
256
+ # Offense count: 1
257
+ Style/MultilineTernaryOperator:
258
+ Enabled: false
259
+
260
+ # Offense count: 1
261
+ # Cop supports --auto-correct.
262
+ Style/NegatedIf:
263
+ Enabled: false
264
+
265
+ # Offense count: 1
266
+ # Cop supports --auto-correct.
267
+ Style/NegatedWhile:
268
+ Enabled: false
269
+
270
+ # Offense count: 3
271
+ # Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
272
+ Style/Next:
273
+ Enabled: false
274
+
275
+ # Offense count: 1
276
+ # Cop supports --auto-correct.
277
+ Style/NilComparison:
278
+ Enabled: false
279
+
280
+ # Offense count: 1
281
+ # Cop supports --auto-correct.
282
+ # Configuration parameters: IncludeSemanticChanges.
283
+ Style/NonNilCheck:
284
+ Enabled: false
285
+
286
+ # Offense count: 1
287
+ # Cop supports --auto-correct.
288
+ Style/Not:
289
+ Enabled: false
290
+
291
+ # Offense count: 10
292
+ # Cop supports --auto-correct.
293
+ Style/NumericLiterals:
294
+ MinDigits: 8
295
+
296
+ # Offense count: 3
297
+ Style/OpMethod:
298
+ Enabled: false
299
+
300
+ # Offense count: 6
301
+ # Cop supports --auto-correct.
302
+ # Configuration parameters: AllowSafeAssignment.
303
+ Style/ParenthesesAroundCondition:
304
+ Enabled: false
305
+
306
+ # Offense count: 3
307
+ # Cop supports --auto-correct.
308
+ # Configuration parameters: PreferredDelimiters.
309
+ Style/PercentLiteralDelimiters:
310
+ Enabled: false
311
+
312
+ # Offense count: 11
313
+ # Cop supports --auto-correct.
314
+ Style/PerlBackrefs:
315
+ Enabled: false
316
+
317
+ # Offense count: 9
318
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
319
+ Style/RaiseArgs:
320
+ Enabled: false
321
+
322
+ # Offense count: 1
323
+ # Cop supports --auto-correct.
324
+ Style/RedundantBegin:
325
+ Enabled: false
326
+
327
+ # Offense count: 3
328
+ # Cop supports --auto-correct.
329
+ # Configuration parameters: AllowMultipleReturnValues.
330
+ Style/RedundantReturn:
331
+ Enabled: false
332
+
333
+ # Offense count: 7
334
+ # Cop supports --auto-correct.
335
+ Style/RedundantSelf:
336
+ Enabled: false
337
+
338
+ # Offense count: 1
339
+ # Configuration parameters: MaxSlashes.
340
+ Style/RegexpLiteral:
341
+ Enabled: false
342
+
343
+ # Offense count: 2
344
+ Style/RescueModifier:
345
+ Enabled: false
346
+
347
+ # Offense count: 7
348
+ # Cop supports --auto-correct.
349
+ # Configuration parameters: AllowAsExpressionSeparator.
350
+ Style/Semicolon:
351
+ Enabled: false
352
+
353
+ # Offense count: 61
354
+ # Cop supports --auto-correct.
355
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
356
+ Style/SignalException:
357
+ Enabled: false
358
+
359
+ # Offense count: 2
360
+ # Configuration parameters: Methods.
361
+ Style/SingleLineBlockParams:
362
+ Enabled: false
363
+
364
+ # Offense count: 2
365
+ # Cop supports --auto-correct.
366
+ Style/SingleSpaceBeforeFirstArg:
367
+ Enabled: false
368
+
369
+ # Offense count: 24
370
+ # Cop supports --auto-correct.
371
+ Style/SpaceAfterComma:
372
+ Enabled: false
373
+
374
+ # Offense count: 2
375
+ # Cop supports --auto-correct.
376
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
377
+ Style/SpaceAroundEqualsInParameterDefault:
378
+ Enabled: false
379
+
380
+ # Offense count: 8
381
+ # Cop supports --auto-correct.
382
+ Style/SpaceAroundOperators:
383
+ Enabled: false
384
+
385
+ # Offense count: 2
386
+ # Cop supports --auto-correct.
387
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
388
+ Style/SpaceBeforeBlockBraces:
389
+ Enabled: false
390
+
391
+ # Offense count: 18
392
+ # Cop supports --auto-correct.
393
+ # Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
394
+ Style/SpaceInsideBlockBraces:
395
+ Enabled: false
396
+
397
+ # Offense count: 37
398
+ # Cop supports --auto-correct.
399
+ Style/SpaceInsideBrackets:
400
+ Enabled: false
401
+
402
+ # Offense count: 1
403
+ # Cop supports --auto-correct.
404
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
405
+ Style/SpaceInsideHashLiteralBraces:
406
+ Enabled: false
407
+
408
+ # Offense count: 20
409
+ # Cop supports --auto-correct.
410
+ Style/SpaceInsideParens:
411
+ Enabled: false
412
+
413
+ # Offense count: 5
414
+ # Cop supports --auto-correct.
415
+ Style/SpecialGlobalVars:
416
+ Enabled: false
417
+
418
+ # Offense count: 645
419
+ # Cop supports --auto-correct.
420
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
421
+ Style/StringLiterals:
422
+ Enabled: false
423
+
424
+ # Offense count: 10
425
+ # Cop supports --auto-correct.
426
+ # Configuration parameters: IgnoredMethods.
427
+ Style/SymbolProc:
428
+ Enabled: false
429
+
430
+ # Offense count: 1
431
+ # Cop supports --auto-correct.
432
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
433
+ Style/TrailingBlankLines:
434
+ Enabled: false
435
+
436
+ # Offense count: 9
437
+ # Cop supports --auto-correct.
438
+ # Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
439
+ Style/TrailingComma:
440
+ Enabled: false
441
+
442
+ # Offense count: 1
443
+ # Cop supports --auto-correct.
444
+ # Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, Whitelist.
445
+ Style/TrivialAccessors:
446
+ Enabled: false
447
+
448
+ # Offense count: 5
449
+ # Cop supports --auto-correct.
450
+ Style/UnneededPercentQ:
451
+ Enabled: false
452
+
453
+ # Offense count: 1
454
+ # Configuration parameters: MaxLineLength.
455
+ Style/WhileUntilModifier:
456
+ Enabled: false
457
+
458
+ # Offense count: 1
459
+ # Cop supports --auto-correct.
460
+ # Configuration parameters: WordRegex.
461
+ Style/WordArray:
462
+ MinSize: 2
@@ -15,7 +15,7 @@ install:
15
15
  - if [ "$INTEGRATION" = "openldap" ]; then ./script/install-openldap; fi
16
16
  - bundle install
17
17
 
18
- script: bundle exec rake
18
+ script: bundle exec rake ci
19
19
 
20
20
  matrix:
21
21
  allow_failures:
@@ -20,3 +20,5 @@ Contributions since:
20
20
  * Erik Hetzner (egh)
21
21
  * nowhereman
22
22
  * David J. Lee (DavidJLee)
23
+ * Cody Cutrer (ccutrer)
24
+ * WoodsBagotAndreMarquesLee
@@ -1,3 +1,12 @@
1
+ === Net::LDAP 0.11
2
+ * Major enhancements:
3
+ * #183 Specific errors subclassing Net::LDAP::Error
4
+ * Bug fixes:
5
+ * #176 Fix nil tls options
6
+ * #184 Search guards against nil queued reads. Connection#unescape handles numerics
7
+ * Code clean-up:
8
+ * #180 Refactor connection establishment
9
+
1
10
  === Net::LDAP 0.10.1
2
11
  * Bug fixes:
3
12
  * Fix Integer BER encoding of signed values
@@ -37,12 +37,27 @@ sources.
37
37
 
38
38
  Simply require either 'net-ldap' or 'net/ldap'.
39
39
 
40
+ == Develop
41
+
42
+ This task will run the test suite and the
43
+ {RuboCop}[https://github.com/bbatsov/rubocop] static code analyzer.
44
+
45
+ rake rubotest
46
+
47
+ To run the integration tests against an LDAP server:
48
+
49
+ cd test/support/vm/openldap
50
+ vagrant up
51
+ cd ../../../..
52
+ INTEGRATION=openldap bundle exec rake rubotest
53
+
40
54
  == Release
41
55
 
42
56
  This section is for gem maintainers to cut a new version of the gem.
43
57
 
44
58
  * Update lib/net/ldap/version.rb to next version number X.X.X following {semver}(http://semver.org/).
45
59
  * Update `History.rdoc`. Get latest changes with `git log --oneline vLAST_RELEASE..HEAD | grep Merge`
60
+
46
61
  * On the master branch, run `script/release`
47
62
 
48
63
  :include: Contributors.rdoc
data/Rakefile CHANGED
@@ -3,11 +3,22 @@
3
3
  # vim: syntax=ruby
4
4
 
5
5
  require 'rake/testtask'
6
+ require 'rubocop/rake_task'
7
+ require 'bundler'
8
+
9
+ RuboCop::RakeTask.new
6
10
 
7
11
  Rake::TestTask.new do |t|
8
- t.libs << "test"
12
+ t.libs << 'test'
9
13
  t.test_files = FileList['test/**/test_*.rb']
10
14
  t.verbose = true
15
+ t.description = 'Run tests, set INTEGRATION=openldap to run integration tests, INTEGRATION_HOST and INTEGRATION_PORT are also supported'
11
16
  end
12
17
 
13
- task :default => :test
18
+ desc 'Run tests and RuboCop (RuboCop runs on mri only)'
19
+ task ci: [:test]
20
+
21
+ desc 'Run tests and RuboCop'
22
+ task rubotest: [:test, :rubocop]
23
+
24
+ task default: Bundler.current_ruby.mri? ? [:test, :rubocop] : [:test]
@@ -26,6 +26,7 @@ require 'net/ldap/entry'
26
26
  require 'net/ldap/instrumentation'
27
27
  require 'net/ldap/connection'
28
28
  require 'net/ldap/version'
29
+ require 'net/ldap/error'
29
30
 
30
31
  # == Quick-start for the Impatient
31
32
  # === Quick Example of a user-authentication against an LDAP directory:
@@ -246,8 +247,6 @@ require 'net/ldap/version'
246
247
  class Net::LDAP
247
248
  include Net::LDAP::Instrumentation
248
249
 
249
- class LdapError < StandardError; end
250
-
251
250
  SearchScope_BaseObject = 0
252
251
  SearchScope_SingleLevel = 1
253
252
  SearchScope_WholeSubtree = 2
@@ -666,16 +665,11 @@ class Net::LDAP
666
665
  # anything with the bind results. We then pass self to the caller's
667
666
  # block, where he will execute his LDAP operations. Of course they will
668
667
  # all generate auth failures if the bind was unsuccessful.
669
- raise Net::LDAP::LdapError, "Open already in progress" if @open_connection
668
+ raise Net::LDAP::AlreadyOpenedError, "Open already in progress" if @open_connection
670
669
 
671
670
  instrument "open.net_ldap" do |payload|
672
671
  begin
673
- @open_connection =
674
- Net::LDAP::Connection.new \
675
- :host => @host,
676
- :port => @port,
677
- :encryption => @encryption,
678
- :instrumentation_service => @instrumentation_service
672
+ @open_connection = new_connection
679
673
  payload[:connection] = @open_connection
680
674
  payload[:bind] = @open_connection.bind(@auth)
681
675
  yield self
@@ -745,27 +739,11 @@ class Net::LDAP
745
739
  result_set = return_result_set ? [] : nil
746
740
 
747
741
  instrument "search.net_ldap", args do |payload|
748
- if @open_connection
749
- @result = @open_connection.search(args) { |entry|
742
+ @result = use_connection(args) do |conn|
743
+ conn.search(args) { |entry|
750
744
  result_set << entry if result_set
751
745
  yield entry if block_given?
752
746
  }
753
- else
754
- begin
755
- conn = Net::LDAP::Connection.new \
756
- :host => @host,
757
- :port => @port,
758
- :encryption => @encryption,
759
- :instrumentation_service => @instrumentation_service
760
- if (@result = conn.bind(args[:auth] || @auth)).result_code == Net::LDAP::ResultCodeSuccess
761
- @result = conn.search(args) { |entry|
762
- result_set << entry if result_set
763
- yield entry if block_given?
764
- }
765
- end
766
- ensure
767
- conn.close if conn
768
- end
769
747
  end
770
748
 
771
749
  if return_result_set
@@ -844,11 +822,7 @@ class Net::LDAP
844
822
  payload[:bind] = @result = @open_connection.bind(auth)
845
823
  else
846
824
  begin
847
- conn = Connection.new \
848
- :host => @host,
849
- :port => @port,
850
- :encryption => @encryption,
851
- :instrumentation_service => @instrumentation_service
825
+ conn = new_connection
852
826
  payload[:connection] = conn
853
827
  payload[:bind] = @result = conn.bind(auth)
854
828
  ensure
@@ -946,22 +920,8 @@ class Net::LDAP
946
920
  # end
947
921
  def add(args)
948
922
  instrument "add.net_ldap", args do |payload|
949
- if @open_connection
950
- @result = @open_connection.add(args)
951
- else
952
- @result = 0
953
- begin
954
- conn = Connection.new \
955
- :host => @host,
956
- :port => @port,
957
- :encryption => @encryption,
958
- :instrumentation_service => @instrumentation_service
959
- if (@result = conn.bind(args[:auth] || @auth)).result_code == Net::LDAP::ResultCodeSuccess
960
- @result = conn.add(args)
961
- end
962
- ensure
963
- conn.close if conn
964
- end
923
+ @result = use_connection(args) do |conn|
924
+ conn.add(args)
965
925
  end
966
926
  @result.success?
967
927
  end
@@ -1050,24 +1010,9 @@ class Net::LDAP
1050
1010
  # does _not_ imply transactional atomicity, which LDAP does not provide.
1051
1011
  def modify(args)
1052
1012
  instrument "modify.net_ldap", args do |payload|
1053
- if @open_connection
1054
- @result = @open_connection.modify(args)
1055
- else
1056
- @result = 0
1057
- begin
1058
- conn = Connection.new \
1059
- :host => @host,
1060
- :port => @port,
1061
- :encryption => @encryption,
1062
- :instrumentation_service => @instrumentation_service
1063
- if (@result = conn.bind(args[:auth] || @auth)).result_code == Net::LDAP::ResultCodeSuccess
1064
- @result = conn.modify(args)
1065
- end
1066
- ensure
1067
- conn.close if conn
1068
- end
1013
+ @result = use_connection(args) do |conn|
1014
+ conn.modify(args)
1069
1015
  end
1070
-
1071
1016
  @result.success?
1072
1017
  end
1073
1018
  end
@@ -1127,22 +1072,8 @@ class Net::LDAP
1127
1072
  # _Documentation_ _stub_
1128
1073
  def rename(args)
1129
1074
  instrument "rename.net_ldap", args do |payload|
1130
- if @open_connection
1131
- @result = @open_connection.rename(args)
1132
- else
1133
- @result = 0
1134
- begin
1135
- conn = Connection.new \
1136
- :host => @host,
1137
- :port => @port,
1138
- :encryption => @encryption,
1139
- :instrumentation_service => @instrumentation_service
1140
- if (@result = conn.bind(args[:auth] || @auth)).result_code == Net::LDAP::ResultCodeSuccess
1141
- @result = conn.rename(args)
1142
- end
1143
- ensure
1144
- conn.close if conn
1145
- end
1075
+ @result = use_connection(args) do |conn|
1076
+ conn.rename(args)
1146
1077
  end
1147
1078
  @result.success?
1148
1079
  end
@@ -1160,22 +1091,8 @@ class Net::LDAP
1160
1091
  # ldap.delete :dn => dn
1161
1092
  def delete(args)
1162
1093
  instrument "delete.net_ldap", args do |payload|
1163
- if @open_connection
1164
- @result = @open_connection.delete(args)
1165
- else
1166
- @result = 0
1167
- begin
1168
- conn = Connection.new \
1169
- :host => @host,
1170
- :port => @port,
1171
- :encryption => @encryption,
1172
- :instrumentation_service => @instrumentation_service
1173
- if (@result = conn.bind(args[:auth] || @auth)).result_code == Net::LDAP::ResultCodeSuccess
1174
- @result = conn.delete(args)
1175
- end
1176
- ensure
1177
- conn.close
1178
- end
1094
+ @result = use_connection(args) do |conn|
1095
+ conn.delete(args)
1179
1096
  end
1180
1097
  @result.success?
1181
1098
  end
@@ -1277,4 +1194,36 @@ class Net::LDAP
1277
1194
  @server_caps ||= search_root_dse
1278
1195
  @server_caps[:supportedcontrol].include?(Net::LDAP::LDAPControls::PAGED_RESULTS)
1279
1196
  end
1197
+
1198
+ private
1199
+
1200
+ # Yields an open connection if there is one, otherwise establishes a new
1201
+ # connection, binds, and yields it. If binding fails, it will return the
1202
+ # result from that, and :use_connection: will not yield at all. If not
1203
+ # the return value is whatever is returned from the block.
1204
+ def use_connection(args)
1205
+ if @open_connection
1206
+ yield @open_connection
1207
+ else
1208
+ begin
1209
+ conn = new_connection
1210
+ if (result = conn.bind(args[:auth] || @auth)).result_code == Net::LDAP::ResultCodeSuccess
1211
+ yield conn
1212
+ else
1213
+ return result
1214
+ end
1215
+ ensure
1216
+ conn.close if conn
1217
+ end
1218
+ end
1219
+ end
1220
+
1221
+ # Establish a new connection to the LDAP server
1222
+ def new_connection
1223
+ Net::LDAP::Connection.new \
1224
+ :host => @host,
1225
+ :port => @port,
1226
+ :encryption => @encryption,
1227
+ :instrumentation_service => @instrumentation_service
1228
+ end
1280
1229
  end # class LDAP
@@ -12,13 +12,13 @@ class Net::LDAP::Connection #:nodoc:
12
12
  begin
13
13
  @conn = server[:socket] || TCPSocket.new(server[:host], server[:port])
14
14
  rescue SocketError
15
- raise Net::LDAP::LdapError, "No such address or other socket error."
15
+ raise Net::LDAP::Error, "No such address or other socket error."
16
16
  rescue Errno::ECONNREFUSED
17
- raise Net::LDAP::LdapError, "Server #{server[:host]} refused connection on port #{server[:port]}."
17
+ raise Net::LDAP::Error, "Server #{server[:host]} refused connection on port #{server[:port]}."
18
18
  rescue Errno::EHOSTUNREACH => error
19
- raise Net::LDAP::LdapError, "Host #{server[:host]} was unreachable (#{error.message})"
19
+ raise Net::LDAP::Error, "Host #{server[:host]} was unreachable (#{error.message})"
20
20
  rescue Errno::ETIMEDOUT
21
- raise Net::LDAP::LdapError, "Connection to #{server[:host]} timed out."
21
+ raise Net::LDAP::Error, "Connection to #{server[:host]} timed out."
22
22
  end
23
23
 
24
24
  if server[:encryption]
@@ -42,7 +42,7 @@ class Net::LDAP::Connection #:nodoc:
42
42
  end
43
43
 
44
44
  def self.wrap_with_ssl(io, tls_options = {})
45
- raise Net::LDAP::LdapError, "OpenSSL is unavailable" unless Net::LDAP::HasOpenSSL
45
+ raise Net::LDAP::NoOpenSSLError, "OpenSSL is unavailable" unless Net::LDAP::HasOpenSSL
46
46
 
47
47
  ctx = OpenSSL::SSL::SSLContext.new
48
48
 
@@ -67,7 +67,7 @@ class Net::LDAP::Connection #:nodoc:
67
67
  # successfully-opened @conn instance variable, which is a TCP connection.
68
68
  # Depending on the received arguments, we establish SSL, potentially
69
69
  # replacing the value of @conn accordingly. Don't generate any errors here
70
- # if no encryption is requested. DO raise Net::LDAP::LdapError objects if encryption
70
+ # if no encryption is requested. DO raise Net::LDAP::Error objects if encryption
71
71
  # is requested and we have trouble setting it up. That includes if OpenSSL
72
72
  # is not set up on the machine. (Question: how does the Ruby OpenSSL
73
73
  # wrapper react in that case?) DO NOT filter exceptions raised by the
@@ -89,6 +89,7 @@ class Net::LDAP::Connection #:nodoc:
89
89
  # generously contributing the :start_tls path.
90
90
  #++
91
91
  def setup_encryption(args)
92
+ args[:tls_options] ||= {}
92
93
  case args[:method]
93
94
  when :simple_tls
94
95
  @conn = self.class.wrap_with_ssl(@conn, args[:tls_options])
@@ -104,16 +105,16 @@ class Net::LDAP::Connection #:nodoc:
104
105
  pdu = queued_read(message_id)
105
106
 
106
107
  if pdu.nil? || pdu.app_tag != Net::LDAP::PDU::ExtendedResponse
107
- raise Net::LDAP::LdapError, "no start_tls result"
108
+ raise Net::LDAP::NoStartTLSResultError, "no start_tls result"
108
109
  end
109
110
 
110
111
  if pdu.result_code.zero?
111
112
  @conn = self.class.wrap_with_ssl(@conn, args[:tls_options])
112
113
  else
113
- raise Net::LDAP::LdapError, "start_tls failed: #{pdu.result_code}"
114
+ raise Net::LDAP::StartTlSError, "start_tls failed: #{pdu.result_code}"
114
115
  end
115
116
  else
116
- raise Net::LDAP::LdapError, "unsupported encryption method #{args[:method]}"
117
+ raise Net::LDAP::EncMethodUnsupportedError, "unsupported encryption method #{args[:method]}"
117
118
  end
118
119
  end
119
120
 
@@ -224,7 +225,7 @@ class Net::LDAP::Connection #:nodoc:
224
225
  elsif meth == :gss_spnego
225
226
  bind_gss_spnego(auth)
226
227
  else
227
- raise Net::LDAP::LdapError, "Unsupported auth method (#{meth})"
228
+ raise Net::LDAP::AuthMethodUnsupportedError, "Unsupported auth method (#{meth})"
228
229
  end
229
230
  end
230
231
  end
@@ -240,7 +241,7 @@ class Net::LDAP::Connection #:nodoc:
240
241
  ["", ""]
241
242
  end
242
243
 
243
- raise Net::LDAP::LdapError, "Invalid binding information" unless (user && psw)
244
+ raise Net::LDAP::BindingInformationInvalidError, "Invalid binding information" unless (user && psw)
244
245
 
245
246
  message_id = next_msgid
246
247
  request = [
@@ -252,7 +253,7 @@ class Net::LDAP::Connection #:nodoc:
252
253
  pdu = queued_read(message_id)
253
254
 
254
255
  if !pdu || pdu.app_tag != Net::LDAP::PDU::BindResult
255
- raise Net::LDAP::LdapError, "no bind result"
256
+ raise Net::LDAP::NoBindResultError, "no bind result"
256
257
  end
257
258
 
258
259
  pdu
@@ -282,7 +283,7 @@ class Net::LDAP::Connection #:nodoc:
282
283
  def bind_sasl(auth)
283
284
  mech, cred, chall = auth[:mechanism], auth[:initial_credential],
284
285
  auth[:challenge_response]
285
- raise Net::LDAP::LdapError, "Invalid binding information" unless (mech && cred && chall)
286
+ raise Net::LDAP::BindingInformationInvalidError, "Invalid binding information" unless (mech && cred && chall)
286
287
 
287
288
  message_id = next_msgid
288
289
 
@@ -297,16 +298,16 @@ class Net::LDAP::Connection #:nodoc:
297
298
  pdu = queued_read(message_id)
298
299
 
299
300
  if !pdu || pdu.app_tag != Net::LDAP::PDU::BindResult
300
- raise Net::LDAP::LdapError, "no bind result"
301
+ raise Net::LDAP::NoBindResultError, "no bind result"
301
302
  end
302
303
 
303
304
  return pdu unless pdu.result_code == Net::LDAP::ResultCodeSaslBindInProgress
304
- raise Net::LDAP::LdapError, "sasl-challenge overflow" if ((n += 1) > MaxSaslChallenges)
305
+ raise Net::LDAP::SASLChallengeOverflowError, "sasl-challenge overflow" if ((n += 1) > MaxSaslChallenges)
305
306
 
306
307
  cred = chall.call(pdu.result_server_sasl_creds)
307
308
  }
308
309
 
309
- raise Net::LDAP::LdapError, "why are we here?"
310
+ raise Net::LDAP::SASLChallengeOverflowError, "why are we here?"
310
311
  end
311
312
  private :bind_sasl
312
313
 
@@ -325,7 +326,7 @@ class Net::LDAP::Connection #:nodoc:
325
326
  require 'ntlm'
326
327
 
327
328
  user, psw = [auth[:username] || auth[:dn], auth[:password]]
328
- raise Net::LDAP::LdapError, "Invalid binding information" unless (user && psw)
329
+ raise Net::LDAP::BindingInformationInvalidError, "Invalid binding information" unless (user && psw)
329
330
 
330
331
  nego = proc { |challenge|
331
332
  t2_msg = NTLM::Message.parse(challenge)
@@ -411,10 +412,10 @@ class Net::LDAP::Connection #:nodoc:
411
412
  sort = args.fetch(:sort_controls, false)
412
413
 
413
414
  # arg validation
414
- raise Net::LDAP::LdapError, "search base is required" unless base
415
- raise Net::LDAP::LdapError, "invalid search-size" unless size >= 0
416
- raise Net::LDAP::LdapError, "invalid search scope" unless Net::LDAP::SearchScopes.include?(scope)
417
- raise Net::LDAP::LdapError, "invalid alias dereferencing value" unless Net::LDAP::DerefAliasesArray.include?(deref)
415
+ raise ArgumentError, "search base is required" unless base
416
+ raise ArgumentError, "invalid search-size" unless size >= 0
417
+ raise ArgumentError, "invalid search scope" unless Net::LDAP::SearchScopes.include?(scope)
418
+ raise ArgumentError, "invalid alias dereferencing value" unless Net::LDAP::DerefAliasesArray.include?(deref)
418
419
 
419
420
  # arg transforms
420
421
  filter = Net::LDAP::Filter.construct(filter) if filter.is_a?(String)
@@ -526,7 +527,7 @@ class Net::LDAP::Connection #:nodoc:
526
527
  end
527
528
  break
528
529
  else
529
- raise Net::LDAP::LdapError, "invalid response-type in search: #{pdu.app_tag}"
530
+ raise Net::LDAP::ResponseTypeInvalidError, "invalid response-type in search: #{pdu.app_tag}"
530
531
  end
531
532
  end
532
533
 
@@ -570,12 +571,13 @@ class Net::LDAP::Connection #:nodoc:
570
571
  result_pdu || OpenStruct.new(:status => :failure, :result_code => Net::LDAP::ResultCodeOperationsError, :message => "Invalid search")
571
572
  end # instrument
572
573
  ensure
574
+
573
575
  # clean up message queue for this search
574
576
  messages = message_queue.delete(message_id)
575
577
 
576
578
  # in the exceptional case some messages were *not* consumed from the queue,
577
579
  # instrument the event but do not fail.
578
- unless messages.empty?
580
+ if !messages.nil? && !messages.empty?
579
581
  instrument "search_messages_unread.net_ldap_connection",
580
582
  message_id: message_id, messages: messages
581
583
  end
@@ -623,7 +625,7 @@ class Net::LDAP::Connection #:nodoc:
623
625
  pdu = queued_read(message_id)
624
626
 
625
627
  if !pdu || pdu.app_tag != Net::LDAP::PDU::ModifyResponse
626
- raise Net::LDAP::LdapError, "response missing or invalid"
628
+ raise Net::LDAP::ResponseMissingOrInvalidError, "response missing or invalid"
627
629
  end
628
630
 
629
631
  pdu
@@ -637,7 +639,7 @@ class Net::LDAP::Connection #:nodoc:
637
639
  # to the error message and the matched-DN returned by the server.
638
640
  #++
639
641
  def add(args)
640
- add_dn = args[:dn] or raise Net::LDAP::LdapError, "Unable to add empty DN"
642
+ add_dn = args[:dn] or raise Net::LDAP::EmptyDNError, "Unable to add empty DN"
641
643
  add_attrs = []
642
644
  a = args[:attributes] and a.each { |k, v|
643
645
  add_attrs << [ k.to_s.to_ber, Array(v).map { |m| m.to_ber}.to_ber_set ].to_ber_sequence
@@ -650,7 +652,7 @@ class Net::LDAP::Connection #:nodoc:
650
652
  pdu = queued_read(message_id)
651
653
 
652
654
  if !pdu || pdu.app_tag != Net::LDAP::PDU::AddResponse
653
- raise Net::LDAP::LdapError, "response missing or invalid"
655
+ raise Net::LDAP::ResponseMissingError, "response missing or invalid"
654
656
  end
655
657
 
656
658
  pdu
@@ -673,7 +675,7 @@ class Net::LDAP::Connection #:nodoc:
673
675
  pdu = queued_read(message_id)
674
676
 
675
677
  if !pdu || pdu.app_tag != Net::LDAP::PDU::ModifyRDNResponse
676
- raise Net::LDAP::LdapError.new "response missing or invalid"
678
+ raise Net::LDAP::ResponseMissingOrInvalidError.new "response missing or invalid"
677
679
  end
678
680
 
679
681
  pdu
@@ -692,7 +694,7 @@ class Net::LDAP::Connection #:nodoc:
692
694
  pdu = queued_read(message_id)
693
695
 
694
696
  if !pdu || pdu.app_tag != Net::LDAP::PDU::DeleteResponse
695
- raise Net::LDAP::LdapError, "response missing or invalid"
697
+ raise Net::LDAP::ResponseMissingOrInvalidError, "response missing or invalid"
696
698
  end
697
699
 
698
700
  pdu
@@ -71,7 +71,7 @@ class Net::LDAP::Entry
71
71
 
72
72
  return nil if ds.empty?
73
73
 
74
- raise Net::LDAP::LdapError, "Too many LDIF entries" unless ds.size == 1
74
+ raise Net::LDAP::EntryOverflowError, "Too many LDIF entries" unless ds.size == 1
75
75
 
76
76
  entry = ds.to_entries.first
77
77
 
@@ -0,0 +1,38 @@
1
+ class Net::LDAP
2
+ class LdapError < StandardError
3
+ def message
4
+ "Deprecation warning: Net::LDAP::LdapError is no longer used. Use Net::LDAP::Error or rescue one of it's subclasses. \n" + super
5
+ end
6
+ end
7
+
8
+ class Error < StandardError; end
9
+
10
+ class AlreadyOpenedError < Error; end
11
+ class SocketError < Error; end
12
+ class ConnectionRefusedError < Error; end
13
+ class NoOpenSSLError < Error; end
14
+ class NoStartTLSResultError < Error; end
15
+ class NoSearchBaseError < Error; end
16
+ class StartTLSError < Error; end
17
+ class EncryptionUnsupportedError < Error; end
18
+ class EncMethodUnsupportedError < Error; end
19
+ class AuthMethodUnsupportedError < Error; end
20
+ class BindingInformationInvalidError < Error; end
21
+ class NoBindResultError < Error; end
22
+ class SASLChallengeOverflowError < Error; end
23
+ class SearchSizeInvalidError < Error; end
24
+ class SearchScopeInvalidError < Error; end
25
+ class ResponseTypeInvalidError < Error; end
26
+ class ResponseMissingOrInvalidError < Error; end
27
+ class EmptyDNError < Error; end
28
+ class HashTypeUnsupportedError < Error; end
29
+ class OperatorError < Error; end
30
+ class SubstringFilterError < Error; end
31
+ class SearchFilterError < Error; end
32
+ class BERInvalidError < Error; end
33
+ class SearchFilterTypeUnknownError < Error; end
34
+ class BadAttributeError < Error; end
35
+ class FilterTypeUnknownError < Error; end
36
+ class FilterSyntaxInvalidError < Error; end
37
+ class EntryOverflowError < Error; end
38
+ end
@@ -27,7 +27,7 @@ class Net::LDAP::Filter
27
27
 
28
28
  def initialize(op, left, right) #:nodoc:
29
29
  unless FilterTypes.include?(op)
30
- raise Net::LDAP::LdapError, "Invalid or unsupported operator #{op.inspect} in LDAP Filter."
30
+ raise Net::LDAP::OperatorError, "Invalid or unsupported operator #{op.inspect} in LDAP Filter."
31
31
  end
32
32
  @op = op
33
33
  @left = left
@@ -290,7 +290,7 @@ class Net::LDAP::Filter
290
290
  ber.last.each { |b|
291
291
  case b.ber_identifier
292
292
  when 0x80 # context-specific primitive 0, SubstringFilter "initial"
293
- raise Net::LDAP::LdapError, "Unrecognized substring filter; bad initial value." if str.length > 0
293
+ raise Net::LDAP::SubstringFilterError, "Unrecognized substring filter; bad initial value." if str.length > 0
294
294
  str += escape(b)
295
295
  when 0x81 # context-specific primitive 0, SubstringFilter "any"
296
296
  str += "*#{escape(b)}"
@@ -309,7 +309,7 @@ class Net::LDAP::Filter
309
309
  # call to_s to get rid of the BER-identifiedness of the incoming string.
310
310
  present?(ber.to_s)
311
311
  when 0xa9 # context-specific constructed 9, "extensible comparison"
312
- raise Net::LDAP::LdapError, "Invalid extensible search filter, should be at least two elements" if ber.size<2
312
+ raise Net::LDAP::SearchFilterError, "Invalid extensible search filter, should be at least two elements" if ber.size < 2
313
313
 
314
314
  # Reassembles the extensible filter parts
315
315
  # (["sn", "2.4.6.8.10", "Barbara Jones", '1'])
@@ -330,7 +330,7 @@ class Net::LDAP::Filter
330
330
 
331
331
  ex(attribute, value)
332
332
  else
333
- raise Net::LDAP::LdapError, "Invalid BER tag-value (#{ber.ber_identifier}) in search filter."
333
+ raise Net::LDAP::BERInvalidError, "Invalid BER tag-value (#{ber.ber_identifier}) in search filter."
334
334
  end
335
335
  end
336
336
 
@@ -357,7 +357,7 @@ class Net::LDAP::Filter
357
357
  when 0xa3 # equalityMatch. context-specific constructed 3.
358
358
  eq(obj[0], obj[1])
359
359
  else
360
- raise Net::LDAP::LdapError, "Unknown LDAP search-filter type: #{obj.ber_identifier}"
360
+ raise Net::LDAP::SearchFilterTypeUnknownError, "Unknown LDAP search-filter type: #{obj.ber_identifier}"
361
361
  end
362
362
  end
363
363
  end
@@ -532,7 +532,7 @@ class Net::LDAP::Filter
532
532
  seq = []
533
533
 
534
534
  unless @left =~ /^([-;\w]*)(:dn)?(:(\w+|[.\w]+))?$/
535
- raise Net::LDAP::LdapError, "Bad attribute #{@left}"
535
+ raise Net::LDAP::BadAttributeError, "Bad attribute #{@left}"
536
536
  end
537
537
  type, dn, rule = $1, $2, $4
538
538
 
@@ -639,15 +639,14 @@ class Net::LDAP::Filter
639
639
  l = entry[@left] and l = Array(l) and l.index(@right)
640
640
  end
641
641
  else
642
- raise Net::LDAP::LdapError, "Unknown filter type in match: #{@op}"
642
+ raise Net::LDAP::FilterTypeUnknownError, "Unknown filter type in match: #{@op}"
643
643
  end
644
644
  end
645
645
 
646
646
  ##
647
647
  # Converts escaped characters (e.g., "\\28") to unescaped characters
648
- # ("(").
649
648
  def unescape(right)
650
- right.gsub(/\\([a-fA-F\d]{2})/) { [$1.hex].pack("U") }
649
+ right.to_s.gsub(/\\([a-fA-F\d]{2})/) { [$1.hex].pack("U") }
651
650
  end
652
651
  private :unescape
653
652
 
@@ -672,7 +671,7 @@ class Net::LDAP::Filter
672
671
  def initialize(str)
673
672
  require 'strscan' # Don't load strscan until we need it.
674
673
  @filter = parse(StringScanner.new(str))
675
- raise Net::LDAP::LdapError, "Invalid filter syntax." unless @filter
674
+ raise Net::LDAP::FilterSyntaxInvalidError, "Invalid filter syntax." unless @filter
676
675
  end
677
676
 
678
677
  ##
@@ -23,14 +23,14 @@ class Net::LDAP::Password
23
23
  def generate(type, str)
24
24
  case type
25
25
  when :md5
26
- attribute_value = '{MD5}' + Base64.encode64(Digest::MD5.digest(str)).chomp!
26
+ attribute_value = '{MD5}' + Base64.encode64(Digest::MD5.digest(str)).chomp!
27
27
  when :sha
28
- attribute_value = '{SHA}' + Base64.encode64(Digest::SHA1.digest(str)).chomp!
28
+ attribute_value = '{SHA}' + Base64.encode64(Digest::SHA1.digest(str)).chomp!
29
29
  when :ssha
30
- salt = SecureRandom.random_bytes(16)
31
- attribute_value = '{SSHA}' + Base64.encode64(Digest::SHA1.digest(str + salt) + salt).chomp!
30
+ salt = SecureRandom.random_bytes(16)
31
+ attribute_value = '{SSHA}' + Base64.encode64(Digest::SHA1.digest(str + salt) + salt).chomp!
32
32
  else
33
- raise Net::LDAP::LdapError, "Unsupported password-hash type (#{type})"
33
+ raise Net::LDAP::HashTypeUnsupportedError, "Unsupported password-hash type (#{type})"
34
34
  end
35
35
  return attribute_value
36
36
  end
@@ -1,5 +1,5 @@
1
1
  module Net
2
2
  class LDAP
3
- VERSION = "0.10.1"
3
+ VERSION = "0.11"
4
4
  end
5
5
  end
@@ -31,4 +31,5 @@ the most recent LDAP RFCs (4510-4519, plutions of 4520-4532).}
31
31
 
32
32
  s.add_development_dependency("flexmock", "~> 1.3")
33
33
  s.add_development_dependency("rake", "~> 10.0")
34
+ s.add_development_dependency("rubocop", "~> 0.28.0")
34
35
  end
@@ -9,11 +9,11 @@ class TestFilter < Test::Unit::TestCase
9
9
  end
10
10
 
11
11
  def test_invalid_filter_string
12
- assert_raises(Net::LDAP::LdapError) { Filter.from_rfc2254("") }
12
+ assert_raises(Net::LDAP::FilterSyntaxInvalidError) { Filter.from_rfc2254("") }
13
13
  end
14
14
 
15
15
  def test_invalid_filter
16
- assert_raises(Net::LDAP::LdapError) {
16
+ assert_raises(Net::LDAP::OperatorError) {
17
17
  # This test exists to prove that our constructor blocks unknown filter
18
18
  # types. All filters must be constructed using helpers.
19
19
  Filter.__send__(:new, :xx, nil, nil)
@@ -215,4 +215,9 @@ class TestFilterRSpec < Test::Unit::TestCase
215
215
  filter = Net::LDAP::Filter.parse_ber(ber.read_ber(Net::LDAP::AsnSyntax))
216
216
  assert_equal "(objectclass=#{escaped}*#{escaped}*#{escaped})", filter.to_s
217
217
  end
218
+
219
+ def test_unescape_fixnums
220
+ filter = Net::LDAP::Filter.eq("objectclass", 3)
221
+ assert_equal "\xA3\x10\x04\vobjectclass\x04\x013".b, filter.to_ber
222
+ end
218
223
  end
@@ -2,14 +2,14 @@ require_relative 'test_helper'
2
2
 
3
3
  class TestLDAPConnection < Test::Unit::TestCase
4
4
  def test_unresponsive_host
5
- assert_raise Net::LDAP::LdapError do
5
+ assert_raise Net::LDAP::Error do
6
6
  Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
7
7
  end
8
8
  end
9
9
 
10
10
  def test_blocked_port
11
11
  flexmock(TCPSocket).should_receive(:new).and_raise(SocketError)
12
- assert_raise Net::LDAP::LdapError do
12
+ assert_raise Net::LDAP::Error do
13
13
  Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
14
14
  end
15
15
  end
@@ -202,7 +202,7 @@ class TestLDAPConnectionSocketReads < Test::Unit::TestCase
202
202
  and_return(result2)
203
203
  mock.should_receive(:write)
204
204
  conn = Net::LDAP::Connection.new(:socket => mock)
205
- flexmock(Net::LDAP::Connection).should_receive(:wrap_with_ssl).with(mock, nil).
205
+ flexmock(Net::LDAP::Connection).should_receive(:wrap_with_ssl).with(mock, {}).
206
206
  and_return(mock)
207
207
 
208
208
  conn.next_msgid # simulates ongoing query
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-ldap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: '0.11'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francis Cianfrocca
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-12-16 00:00:00.000000000 Z
16
+ date: 2015-01-21 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: flexmock
@@ -43,6 +43,20 @@ dependencies:
43
43
  - - "~>"
44
44
  - !ruby/object:Gem::Version
45
45
  version: '10.0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rubocop
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: 0.28.0
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 0.28.0
46
60
  description: |-
47
61
  Net::LDAP for Ruby (also called net-ldap) implements client access for the
48
62
  Lightweight Directory Access Protocol (LDAP), an IETF standard protocol for
@@ -71,6 +85,8 @@ extra_rdoc_files:
71
85
  - README.rdoc
72
86
  files:
73
87
  - ".gitignore"
88
+ - ".rubocop.yml"
89
+ - ".rubocop_todo.yml"
74
90
  - ".travis.yml"
75
91
  - CONTRIBUTING.md
76
92
  - Contributors.rdoc
@@ -94,6 +110,7 @@ files:
94
110
  - lib/net/ldap/dataset.rb
95
111
  - lib/net/ldap/dn.rb
96
112
  - lib/net/ldap/entry.rb
113
+ - lib/net/ldap/error.rb
97
114
  - lib/net/ldap/filter.rb
98
115
  - lib/net/ldap/instrumentation.rb
99
116
  - lib/net/ldap/password.rb