From e28ef099a4f9213a87e5fb99fccc74629958cad1 Mon Sep 17 00:00:00 2001 From: riking Date: Tue, 26 Aug 2014 17:00:27 -0700 Subject: [PATCH] Fix pop3 SSL state leaking over multisite --- app/jobs/scheduled/poll_mailbox.rb | 8 ++++---- config/site_settings.yml | 1 + spec/jobs/poll_mailbox_spec.rb | 17 ++++++++++++++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/app/jobs/scheduled/poll_mailbox.rb b/app/jobs/scheduled/poll_mailbox.rb index 8d86043c5ce..6226461f10f 100644 --- a/app/jobs/scheduled/poll_mailbox.rb +++ b/app/jobs/scheduled/poll_mailbox.rb @@ -73,10 +73,10 @@ module Jobs end def poll_pop3 - Net::POP3.start(SiteSetting.pop3_polling_host, - SiteSetting.pop3_polling_port, - SiteSetting.pop3_polling_username, - SiteSetting.pop3_polling_password) do |pop| + connection = Net::POP3.new(SiteSetting.pop3_polling_host, SiteSetting.pop3_polling_port) + connection.enable_ssl if SiteSetting.pop3_polling_ssl + + connection.start(SiteSetting.pop3_polling_username, SiteSetting.pop3_polling_password) do |pop| unless pop.mails.empty? pop.each do |mail| handle_mail(mail) diff --git a/config/site_settings.yml b/config/site_settings.yml index 623e48e60a0..0ec749d6c6d 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -386,6 +386,7 @@ email: reply_by_email_enabled: false reply_by_email_address: '' pop3_polling_enabled: false + pop3_polling_ssl: true pop3_polling_period_mins: 5 pop3_polling_host: '' pop3_polling_port: 995 diff --git a/spec/jobs/poll_mailbox_spec.rb b/spec/jobs/poll_mailbox_spec.rb index 3ba94945f11..9b365a40495 100644 --- a/spec/jobs/poll_mailbox_spec.rb +++ b/spec/jobs/poll_mailbox_spec.rb @@ -32,13 +32,28 @@ describe Jobs::PollMailbox do error = Net::POPAuthenticationError.new data = { limit_once_per: 1.hour, message_params: { error: error }} - Net::POP3.expects(:start).raises(error) + Net::POP3.any_instance.expects(:start).raises(error) Discourse.expects(:handle_exception) poller.poll_pop3 end + it "calls enable_ssl when the setting is enabled" do + SiteSetting.pop3_polling_ssl = true + Net::POP3.any_instance.stubs(:start) + Net::POP3.any_instance.expects(:enable_ssl) + + poller.poll_pop3 + end + + it "does not call enable_ssl when the setting is off" do + SiteSetting.pop3_polling_ssl = false + Net::POP3.any_instance.stubs(:start) + Net::POP3.any_instance.expects(:enable_ssl).never + + poller.poll_pop3 + end end # Testing mock for the email objects that you get