class DBus::Authentication::DBusCookieSHA1
Implements the AUTH DBUS_COOKIE_SHA1 mechanism. dbus.freedesktop.org/doc/dbus-specification.html#auth-mechanisms-sha
Public Instance Methods
call(challenge)
click to toggle source
First we are called with nil and we reply with our username. Then we prove that we can read that user’s cookie file.
# File lib/dbus/auth.rb 78 def call(challenge) 79 if challenge.nil? 80 require "etc" 81 # number of retries we have for auth 82 @retries = 1 83 return [:MechContinue, Etc.getlogin] 84 end 85 86 require "digest/sha1" 87 # name of cookie file, id of cookie in file, servers random challenge 88 context, id, s_challenge = challenge.split(" ") 89 # Random client challenge 90 c_challenge = 1.upto(s_challenge.bytesize / 2).map { rand(255).to_s }.join 91 # Search cookie file for id 92 path = File.join(ENV["HOME"], ".dbus-keyrings", context) 93 DBus.logger.debug "path: #{path.inspect}" 94 File.foreach(path) do |line| 95 if line.start_with?(id) 96 # Right line of file, read cookie 97 cookie = line.split(" ")[2].chomp 98 DBus.logger.debug "cookie: #{cookie.inspect}" 99 # Concatenate and encrypt 100 to_encrypt = [s_challenge, c_challenge, cookie].join(":") 101 sha = Digest::SHA1.hexdigest(to_encrypt) 102 # Return response 103 response = [:MechOk, "#{c_challenge} #{sha}"] 104 return response 105 end 106 end 107 return if @retries <= 0 108 109 # a little rescue magic 110 puts "ERROR: Could not auth, will now exit." 111 puts "ERROR: Unable to locate cookie, retry in 1 second." 112 @retries -= 1 113 sleep 1 114 call(challenge) 115 end
name()
click to toggle source
returns the modules name
# File lib/dbus/auth.rb 72 def name 73 "DBUS_COOKIE_SHA1" 74 end