def Base.connection(exc=RuntimeError.new('unknown error'), try_reconnect = true)
if block_given?
begin
Timeout.alarm(@@config[:timeout]) do
begin
yield @@conn
rescue => e
@@logger.debug("Converting '#{e.inspect}' to useful exception")
raise *LDAP::err2exception(@@conn.err) if @@conn.err != 0
@@logger.debug('Reraising')
raise e
end
end
rescue Timeout::Error => e
@@logger.error('Requested action timed out.')
retry if try_reconnect and @@config[:retry_on_timeout] and Base.reconnect()
message = e.message
message = exc.message unless exc.nil?
@@logger.error(message)
raise TimeoutError, message
rescue LDAP::ServerDown, LDAP::ResultError, RuntimeError => e
@@logger.error("#{e.class} exception occurred in connection block")
@@logger.error("Exception message: #{e.message}")
@@logger.error("Exception backtrace: #{e.backtrace}")
@@logger.error(exc.message) unless exc.nil?
retry if try_reconnect and Base.reconnect()
raise exc unless exc.nil?
return nil
rescue LDAP::UndefinedType => e
@@logger.error("#{e.class} exception occurred in connection block")
@@logger.error("Exception message: #{e.message}")
@@logger.error("Exception backtrace: #{e.backtrace}")
raise exc unless exc.nil?
return nil
rescue => e
@@logger.error("#{e.class} exception occurred in connection block")
@@logger.error("Exception message: #{e.message}")
@@logger.error("Exception backtrace: #{e.backtrace}")
@@logger.error("Error in catch all: please send debug log to ActiveLDAP author")
@@logger.error(exc.message) unless exc.nil?
raise exc unless exc.nil?
return nil
end
end
return @@conn
end