From be3d1fedf9f8c778fd03ace86c5178f295ed7846 Mon Sep 17 00:00:00 2001 From: Daniel Molina Date: Thu, 19 Jan 2012 12:36:41 +0100 Subject: [PATCH 1/2] feature #985: Add path support for EC2 signature --- src/cloud/common/CloudAuth/EC2CloudAuth.rb | 5 ++++- src/cloud/ec2/lib/EC2QueryClient.rb | 3 ++- src/cloud/ec2/lib/econe-server.rb | 17 ++++++++++++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/cloud/common/CloudAuth/EC2CloudAuth.rb b/src/cloud/common/CloudAuth/EC2CloudAuth.rb index 639743597f..38afacd64f 100644 --- a/src/cloud/common/CloudAuth/EC2CloudAuth.rb +++ b/src/cloud/common/CloudAuth/EC2CloudAuth.rb @@ -44,6 +44,7 @@ module EC2CloudAuth params.delete('Signature') params.delete('econe_host') params.delete('econe_port') + params.delete('econe_path') req_desc = params.sort {|x,y| x[0].downcase <=> y[0].downcase}.to_s digest_generator = OpenSSL::Digest::Digest.new(digest) @@ -59,6 +60,7 @@ module EC2CloudAuth server_host = params.delete('econe_host') server_port = params.delete('econe_port') + server_path = params.delete('econe_path') || '/' if include_port server_str = "#{server_host}:#{server_port}" else @@ -68,7 +70,8 @@ module EC2CloudAuth canonical_str = AWS.canonical_string( params, server_str, - env['REQUEST_METHOD']) + env['REQUEST_METHOD'], + server_path) # Use the correct signature strength sha_strength = case params['SignatureMethod'] diff --git a/src/cloud/ec2/lib/EC2QueryClient.rb b/src/cloud/ec2/lib/EC2QueryClient.rb index eb1ae27776..96a0da7d6f 100644 --- a/src/cloud/ec2/lib/EC2QueryClient.rb +++ b/src/cloud/ec2/lib/EC2QueryClient.rb @@ -76,7 +76,8 @@ module EC2QueryClient :secret_access_key => @access_key_secret, :server => @uri.host, :port => @uri.port, - :use_ssl => @uri.scheme == 'https') + :use_ssl => @uri.scheme == 'https', + :path => @uri.path) end diff --git a/src/cloud/ec2/lib/econe-server.rb b/src/cloud/ec2/lib/econe-server.rb index 4647114203..293446ae1d 100644 --- a/src/cloud/ec2/lib/econe-server.rb +++ b/src/cloud/ec2/lib/econe-server.rb @@ -44,6 +44,7 @@ $: << RUBY_LIB_LOCATION+"/cloud/econe" require 'rubygems' require 'sinatra' require 'yaml' +require 'uri' require 'EC2QueryServer' require 'CloudAuth' @@ -89,12 +90,21 @@ end set :cloud_auth, cloud_auth -econe_host = conf[:ssl_server] -econe_host ||= conf[:server] -econe_port = conf[:port] +if conf +if conf[:ssl_server] + uri = URI.parse(conf[:ssl_server]) + econe_host = uri.host + econe_port = uri.port + econe_path = uri.path +else + econe_host = conf[:server] + econe_port = conf[:port] + econe_path = '/' +end set :econe_host, econe_host set :econe_port, econe_port +set :econe_path, econe_path ############################################################################## # Actions @@ -104,6 +114,7 @@ before do begin params['econe_host'] = settings.econe_host params['econe_port'] = settings.econe_port + params['econe_path'] = settings.econe_path username = settings.cloud_auth.auth(request.env, params) rescue Exception => e error 500, error_xml("AuthFailure", 0) From 0323a1511ff4268eadd903554c34c4d385b0efb6 Mon Sep 17 00:00:00 2001 From: Daniel Molina Date: Thu, 19 Jan 2012 15:49:17 +0100 Subject: [PATCH 2/2] feature #985: Fix minor bug --- src/cloud/ec2/lib/econe-server.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cloud/ec2/lib/econe-server.rb b/src/cloud/ec2/lib/econe-server.rb index 293446ae1d..0a8ccc1d98 100644 --- a/src/cloud/ec2/lib/econe-server.rb +++ b/src/cloud/ec2/lib/econe-server.rb @@ -90,7 +90,6 @@ end set :cloud_auth, cloud_auth -if conf if conf[:ssl_server] uri = URI.parse(conf[:ssl_server]) econe_host = uri.host