--- sup_imap.rb	2009-07-19 01:33:33.838875038 +0200
+++ /usr/lib/ruby/1.8/sup/imap.rb	2009-07-19 01:35:27.299254702 +0200
@@ -241,16 +241,21 @@
         ## with a NO response, the client may try another", in practice
         ## it seems like they can also send a BAD response.
         begin
-          raise Net::IMAP::NoResponseError unless @imap.capability().member? "AUTH=CRAM-MD5"
-          @imap.authenticate 'CRAM-MD5', @username, @password
-        rescue Net::IMAP::BadResponseError, Net::IMAP::NoResponseError => e
-          Redwood::log "CRAM-MD5 authentication failed: #{e.class}. Trying LOGIN auth..."
+          raise Net::IMAP::NoResponseError unless @imap.capability().member? "AUTH=GSSAPI"
+          @imap.authenticate 'GSSAPI', @username, host
+        rescue
           begin
-            raise Net::IMAP::NoResponseError unless @imap.capability().member? "AUTH=LOGIN"
-            @imap.authenticate 'LOGIN', @username, @password
+            raise Net::IMAP::NoResponseError unless @imap.capability().member? "AUTH=CRAM-MD5"
+            @imap.authenticate 'CRAM-MD5', @username, @password
           rescue Net::IMAP::BadResponseError, Net::IMAP::NoResponseError => e
-            Redwood::log "LOGIN authentication failed: #{e.class}. Trying plain-text LOGIN..."
-            @imap.login @username, @password
+            Redwood::log "CRAM-MD5 authentication failed: #{e.class}. Trying LOGIN auth..."
+            begin
+              raise Net::IMAP::NoResponseError unless @imap.capability().member? "AUTH=LOGIN"
+              @imap.authenticate 'LOGIN', @username, @password
+            rescue Net::IMAP::BadResponseError, Net::IMAP::NoResponseError => e
+              Redwood::log "LOGIN authentication failed: #{e.class}. Trying plain-text LOGIN..."
+              @imap.login @username, @password
+            end
           end
         end
         say "Successfully connected to #{@parsed_uri}."
