Net::imap exceptions

Hi,
I have a program that I am using to do password auditing on various
IMAP servers. It defines this method:

def tryIMAP (host, usessl, user, pass)

proto = usessl ? "IMAPS" : "IMAP"

begin
imap = Net::IMAP.new(host, usessl ? 993 : 143, usessl)
rescue => e
imap.disconnect if imap
STDERR.print “#{host} #{proto} #{e.to_s}\n”;
raise RuntimeError, “#{proto} failed”
end
begin
imap.login( user, pass)
imap.logout
imap.disconnect
‘success’
rescue Net::IMAP::NoResponseError
‘failure’
end

end

But the rescue clause does not catch all errors:

(Net::IMAP::ByeResponseError)948:in receive_responses': * BYE Autologout; idle for too long from /usr/lib/ruby/1.8/net/imap.rb:932:insynchronize’
from /usr/lib/ruby/1.8/net/imap.rb:932:in receive_responses' from /usr/lib/ruby/1.8/net/imap.rb:917:ininitialize’
from /usr/lib/ruby/1.8/net/imap.rb:916:in start' from /usr/lib/ruby/1.8/net/imap.rb:916:ininitialize’
from test.rb:11:in new' from test.rb:11:intryIMAP’
from test.rb:143
from test.rb:100:in each' from test.rb:100 from test.rb:89:ineach’
from test.rb:89
from test.rb:88:in `open’
from test.rb:88

How can I catch these errors?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Russell F. wrote:

 imap.disconnect if imap

end

end

But the rescue clause does not catch all errors:

(Net::IMAP::ByeResponseError)948:in `receive_responses’: * BYE
Autologout; idle for too long

[snip]

How can I catch these errors?

Change the rescue-line to:

rescue Net::IMAP::NoResponseError, Net::IMAP::ByeResponseError, Net::IMAP::BadResponseError

and so on. Maybe it helps to rescue Net::IMAP::Error only, but can’t
have a look at the implementation of the other exceptions at the moment.

HTH

Stefan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (MingW32)

iD8DBQFD1dLM9S2Eui6zfdQRAiiRAJ9CMxchp2129sP5srKNpFHhEUIIgQCfU+ov
4bEy3i+wvmei5HvOR8RYDKk=
=Y0JS
-----END PGP SIGNATURE-----

Stefan M. wrote:

Thanks for your response Stefan!

How can I catch these errors?

Change the rescue-line to:

rescue Net::IMAP::NoResponseError, Net::IMAP::ByeResponseError, Net::IMAP::BadResponseError

That was going to be my next try. Hmmm… last time I tried putting
more than one exception on a rescue statement I got a syntax error??
I’ll try again – must have been some other issue.

and so on. Maybe it helps to rescue Net::IMAP::Error only, but can’t
have a look at the implementation of the other exceptions at the moment.

Just a check on my understanding of how things should work:

I thought that an unadorned “rescue” should catch all exceptions.
Is this correct? Should I file a bug report? Where to?

Russell

Russell F. wrote:

more than one exception on a rescue statement I got a syntax error??
I’ll try again – must have been some other issue.

and so on. Maybe it helps to rescue Net::IMAP::Error only, but can’t
have a look at the implementation of the other exceptions at the moment.

Just a check on my understanding of how things should work:

I thought that an unadorned “rescue” should catch all exceptions.
Is this correct? Should I file a bug report? Where to?

No, it will only catch all Exceptions that are derived from
StandardError (as I read Pickaxe II, page 108).

Figure 8.1 on page 109 could be helpful.

The exception gets thrown in

imap = Net::IMAP.new(host, usessl ? 993 : 143, usessl)

as the backtrace tells:


from /usr/lib/ruby/1.8/net/imap.rb:916:in initialize' from test.rb:11:innew’
from test.rb:11:in `tryIMAP’

and on line 12 is only the standard rescue

rescue => e

If you add the IMAP-Exceptions there it should work (and raise a
RuntimeException).

Stefan M. wrote:

No, it will only catch all Exceptions that are derived from
StandardError (as I read Pickaxe II, page 108).

Ah! missed that, my bad!

Thanks Stefan!

Russell F. wrote:

Stefan M. wrote:

Thanks for your response Stefan!

How can I catch these errors?

Change the rescue-line to:

rescue Net::IMAP::NoResponseError, Net::IMAP::ByeResponseError, Net::IMAP::BadResponseError

That was going to be my next try.

I have now tried this and it still throws the exception with an explicit
rescue for that error.

Russell

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs