Skip to content

Commit 1436abe

Browse files
author
Tatsuya Sato
committed
Merge remote-tracking branch 'denis/master' into take_over_denis_work
Conflicts: lib/net/ldap.rb lib/net/ldap/filter.rb lib/net/ldap/password.rb
2 parents a89d094 + 7438a2a commit 1436abe

File tree

5 files changed

+46
-19
lines changed

5 files changed

+46
-19
lines changed

lib/net/ldap.rb

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,33 @@ class Net::LDAP
247247
include Net::LDAP::Instrumentation
248248

249249
class LdapError < StandardError; end
250+
class AlreadyOpenedError < LdapError; end
251+
class SocketError < LdapError; end
252+
class ConnectionRefusedError < LdapError; end
253+
class NoOpenSSLError < LdapError; end
254+
class NoStartTLSResultError < LdapError; end
255+
class StartTLSError < LdapError; end
256+
class EncryptionUnsupportedError < LdapError; end
257+
class EncMethodUnsupportedError < LdapError; end
258+
class AuthMethodUnsupportedError < LdapError; end
259+
class BindingInformationInvalidError < LdapError; end
260+
class NoBindResultError < LdapError; end
261+
class SASLChallengeOverflowError < LdapError; end
262+
class SearchSizeInvalidError < LdapError; end
263+
class SearchScopeInvalidError < LdapError; end
264+
class ResponseTypeInvalidError < LdapError; end
265+
class ResponseMissingOrInvalidError < LdapError; end
266+
class EmptyDNError < LdapError; end
267+
class HashTypeUnsupportedError < LdapError; end
268+
class OperatorError < LdapError; end
269+
class SubstringFilterError < LdapError; end
270+
class SearchFilterError < LdapError; end
271+
class BERInvalidError < LdapError; end
272+
class SearchFilterTypeUnknownError < LdapError; end
273+
class BadAttributeError < LdapError; end
274+
class FilterTypeUnknownError < LdapError; end
275+
class FilterSyntaxInvalidError < LdapError; end
276+
class EntryOverflowError < LdapError; end
250277

251278
SearchScope_BaseObject = 0
252279
SearchScope_SingleLevel = 1
@@ -666,7 +693,7 @@ def open
666693
# anything with the bind results. We then pass self to the caller's
667694
# block, where he will execute his LDAP operations. Of course they will
668695
# all generate auth failures if the bind was unsuccessful.
669-
raise Net::LDAP::LdapError, "Open already in progress" if @open_connection
696+
raise Net::LDAP::AlreadyOpenedError, "Open already in progress" if @open_connection
670697

671698
instrument "open.net_ldap" do |payload|
672699
begin

lib/net/ldap/entry.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def from_single_ldif_string(ldif)
7171

7272
return nil if ds.empty?
7373

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
7575

7676
entry = ds.to_entries.first
7777

lib/net/ldap/filter.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class Net::LDAP::Filter
2727

2828
def initialize(op, left, right) #:nodoc:
2929
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."
3131
end
3232
@op = op
3333
@left = left
@@ -290,7 +290,7 @@ def parse_ber(ber)
290290
ber.last.each { |b|
291291
case b.ber_identifier
292292
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
294294
str += escape(b)
295295
when 0x81 # context-specific primitive 0, SubstringFilter "any"
296296
str += "*#{escape(b)}"
@@ -309,9 +309,9 @@ def parse_ber(ber)
309309
# call to_s to get rid of the BER-identifiedness of the incoming string.
310310
present?(ber.to_s)
311311
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
313-
314-
# Reassembles the extensible filter parts
312+
raise Net::LDAP::SearchFilterError, "Invalid extensible search filter, should be at least two elements" if ber.size < 2
313+
314+
# Reassembles the extensible filter parts
315315
# (["sn", "2.4.6.8.10", "Barbara Jones", '1'])
316316
type = value = dn = rule = nil
317317
ber.each do |element|
@@ -330,7 +330,7 @@ def parse_ber(ber)
330330

331331
ex(attribute, value)
332332
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."
334334
end
335335
end
336336

@@ -357,7 +357,7 @@ def parse_ldap_filter(obj)
357357
when 0xa3 # equalityMatch. context-specific constructed 3.
358358
eq(obj[0], obj[1])
359359
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}"
361361
end
362362
end
363363
end
@@ -532,7 +532,7 @@ def to_ber
532532
seq = []
533533

534534
unless @left =~ /^([-;\w]*)(:dn)?(:(\w+|[.\w]+))?$/
535-
raise Net::LDAP::LdapError, "Bad attribute #{@left}"
535+
raise Net::LDAP::BadAttributeError, "Bad attribute #{@left}"
536536
end
537537
type, dn, rule = $1, $2, $4
538538

@@ -639,7 +639,7 @@ def match(entry)
639639
l = entry[@left] and l = Array(l) and l.index(@right)
640640
end
641641
else
642-
raise Net::LDAP::LdapError, "Unknown filter type in match: #{@op}"
642+
raise Net::LDAP::FilterTypeUnknownError, "Unknown filter type in match: #{@op}"
643643
end
644644
end
645645

@@ -672,7 +672,7 @@ def parse(ldap_filter_string)
672672
def initialize(str)
673673
require 'strscan' # Don't load strscan until we need it.
674674
@filter = parse(StringScanner.new(str))
675-
raise Net::LDAP::LdapError, "Invalid filter syntax." unless @filter
675+
raise Net::LDAP::FilterSyntaxInvalidError, "Invalid filter syntax." unless @filter
676676
end
677677

678678
##

lib/net/ldap/password.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ class << self
2323
def generate(type, str)
2424
case type
2525
when :md5
26-
attribute_value = '{MD5}' + Base64.encode64(Digest::MD5.digest(str)).chomp!
26+
attribute_value = '{MD5}' + Base64.encode64(Digest::MD5.digest(str)).chomp!
2727
when :sha
28-
attribute_value = '{SHA}' + Base64.encode64(Digest::SHA1.digest(str)).chomp!
28+
attribute_value = '{SHA}' + Base64.encode64(Digest::SHA1.digest(str)).chomp!
2929
when :ssha
30-
salt = SecureRandom.random_bytes(16)
31-
attribute_value = '{SSHA}' + Base64.encode64(Digest::SHA1.digest(str + salt) + salt).chomp!
30+
srand; salt = (rand * 1000).to_i.to_s
31+
attribute_value = '{SSHA}' + Base64.encode64(Digest::SHA1.digest(str + salt) + salt).chomp!
3232
else
33-
raise Net::LDAP::LdapError, "Unsupported password-hash type (#{type})"
33+
raise Net::LDAP::HashTypeUnsupportedError, "Unsupported password-hash type (#{type})"
3434
end
3535
return attribute_value
3636
end

test/test_filter.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ def test_bug_7534_rfc2254
99
end
1010

1111
def test_invalid_filter_string
12-
assert_raises(Net::LDAP::LdapError) { Filter.from_rfc2254("") }
12+
assert_raises(Net::LDAP::FilterSyntaxInvalidError) { Filter.from_rfc2254("") }
1313
end
1414

1515
def test_invalid_filter
16-
assert_raises(Net::LDAP::LdapError) {
16+
assert_raises(Net::LDAP::OperatorError) {
1717
# This test exists to prove that our constructor blocks unknown filter
1818
# types. All filters must be constructed using helpers.
1919
Filter.__send__(:new, :xx, nil, nil)

0 commit comments

Comments
 (0)