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