module EventMachine::Protocols::SASLauthclient
def post_init
def post_init @sasl_data = "" @queries = [] end
def receive_data data
def receive_data data @sasl_data << data while @sasl_data.length > 2 len = (@sasl_data[0,2].unpack("n")).first raise "SASL Max Field Length exceeded" if len > MaxFieldSize if @sasl_data.length >= (len + 2) val = @sasl_data[2,len] @sasl_data.slice!(0...(2+len)) q = @queries.pop (val == "NO") ? q.fail : q.succeed else break end end end
def validate? username, psw, sysname=nil, realm=nil
def validate? username, psw, sysname=nil, realm=nil str = [username, psw, sysname, realm].map {|m| [(m || "").length, (m || "")] }.flatten.pack( "nA*" * 4 ) send_data str d = EM::DefaultDeferrable.new @queries.unshift d d end