@@ -8,56 +8,49 @@ class Net::LDAP::Connection #:nodoc:
8
8
9
9
def initialize ( server )
10
10
@instrumentation_service = server [ :instrumentation_service ]
11
- server [ :hosts ] = [ [ server [ :host ] , server [ :port ] ] ] if server [ :hosts ] . nil?
12
11
13
12
if server [ :socket ]
14
- prepare_socket ( server )
13
+ prepare_socket ( server [ :socket ] , server [ :encryption ] )
15
14
else
16
- open_connection ( server )
15
+ hosts = server [ :hosts ]
16
+ hosts = [ [ server [ :host ] , server [ :port ] ] ] if hosts . nil?
17
+ open_connection ( hosts , server [ :encryption ] )
17
18
end
18
19
19
20
yield self if block_given?
20
21
end
21
22
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
28
32
end
29
33
30
- def open_connection ( server )
34
+ def open_connection ( hosts , encryption )
31
35
errors = [ ]
32
- server [ : hosts] . each do |host , port |
36
+ hosts . each do |host , port |
33
37
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 ]
37
43
end
38
44
end
39
45
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
56
50
end
57
51
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 " ) } "
61
54
end
62
55
63
56
module GetbyteForSSLSocket
0 commit comments