@@ -8,56 +8,49 @@ class Net::LDAP::Connection #:nodoc:
88
99 def initialize ( server )
1010 @instrumentation_service = server [ :instrumentation_service ]
11- server [ :hosts ] = [ [ server [ :host ] , server [ :port ] ] ] if server [ :hosts ] . nil?
1211
1312 if server [ :socket ]
14- prepare_socket ( server )
13+ prepare_socket ( server [ :socket ] , server [ :encryption ] )
1514 else
16- open_connection ( server )
15+ hosts = server [ :hosts ]
16+ hosts = [ [ server [ :host ] , server [ :port ] ] ] if hosts . nil?
17+ open_connection ( hosts , server [ :encryption ] )
1718 end
1819
1920 yield self if block_given?
2021 end
2122
22- def prepare_socket ( server )
23- @conn = server [ :socket ]
24-
25- if server [ :encryption ]
26- setup_encryption server [ :encryption ]
27- end
23+ def prepare_socket ( socket , encryption , close = false )
24+ @conn = socket
25+ setup_encryption encryption if encryption
26+ rescue
27+ # Ensure the connection is closed when requested in the event of an SSL
28+ # setup failure.
29+ @conn . close if close
30+ @conn = nil
31+ raise
2832 end
2933
30- def open_connection ( server )
34+ def open_connection ( hosts , encryption )
3135 errors = [ ]
32- server [ : hosts] . each do |host , port |
36+ hosts . each do |host , port |
3337 begin
34- return connect_to_host ( host , port , server )
35- rescue Net ::LDAP ::Error
36- errors << $!
38+ prepare_socket ( TCPSocket . new ( host , port ) , encryption , true )
39+ return
40+ rescue Net ::LDAP ::Error , SocketError , SystemCallError ,
41+ OpenSSL ::SSL ::SSLError
42+ errors << [ $!, host , port ]
3743 end
3844 end
3945
40- raise errors . first if errors . size == 1
41- raise Net ::LDAP ::Error ,
42- "Unable to connect to any given server: \n #{ errors . join ( "\n " ) } "
43- end
44-
45- def connect_to_host ( host , port , server )
46- begin
47- @conn = TCPSocket . new ( host , port )
48- rescue SocketError
49- raise Net ::LDAP ::Error , "No such address or other socket error."
50- rescue Errno ::ECONNREFUSED
51- raise Net ::LDAP ::ConnectionRefusedError , "Server #{ host } refused connection on port #{ port } ."
52- rescue Errno ::EHOSTUNREACH => error
53- raise Net ::LDAP ::Error , "Host #{ host } was unreachable (#{ error . message } )"
54- rescue Errno ::ETIMEDOUT
55- raise Net ::LDAP ::Error , "Connection to #{ host } timed out."
46+ if errors . size == 1
47+ error = errors . first . first
48+ raise Net ::LDAP ::ConnectionRefusedError , error . message if error . kind_of? Errno ::ECONNREFUSED
49+ raise Net ::LDAP ::Error , error . message
5650 end
5751
58- if server [ :encryption ]
59- setup_encryption server [ :encryption ]
60- end
52+ raise Net ::LDAP ::Error ,
53+ "Unable to connect to any given server: \n #{ errors . map { |e , h , p | "#{ e . class } : #{ e . message } (#{ h } :#{ p } )" } . join ( "\n " ) } "
6154 end
6255
6356 module GetbyteForSSLSocket
0 commit comments