module Groat::SMTPD::Extensions::StartTLS

Public Class Methods

included(mod) click to toggle source
# File lib/groat/smtpd/extensions/starttls.rb, line 27
def self.included mod
  puts "Included RFC 3207: STARTTLS"
  mod.ehlo_keyword :starttls, nil, :show_starttls_keyword?
  mod.verb :starttls, :smtp_verb_starttls
end

Public Instance Methods

reset_connection() click to toggle source
Calls superclass method
# File lib/groat/smtpd/extensions/starttls.rb, line 33
def reset_connection
  @secure = false
  super
end
secure?() click to toggle source
# File lib/groat/smtpd/extensions/starttls.rb, line 46
def secure?
  @secure
end
set_ssl_context(ctx) click to toggle source
# File lib/groat/smtpd/extensions/starttls.rb, line 38
def set_ssl_context(ctx)
  @sslctx = ctx
end
show_starttls_keyword?() click to toggle source
# File lib/groat/smtpd/extensions/starttls.rb, line 42
def show_starttls_keyword?
  not secure?
end
smtp_verb_starttls(args) click to toggle source
# File lib/groat/smtpd/extensions/starttls.rb, line 50
def smtp_verb_starttls(args)
  check_command_group
  response_syntax_error unless args.empty?
  response_bad_sequence unless esmtp?
  # ยง 4.2 "A client MUST NOT attempt to start a TLS session if a TLS
  # session is already active"
  response_bad_sequence if secure?
  toclient "220 Ready to start TLS\r\n"
  ssl = OpenSSL::SSL::SSLSocket.new(@s, @sslctx)
  ssl.accept
  @s = ssl
  # http://www.imc.org/ietf-smtp/mail-archive/msg05452.html
  reset_connection
  @secure = true
  true
end