summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXabier de Zuazo <xabier@zuazo.org>2012-11-20 13:38:12 +0100
committerXabier de Zuazo <xabier@zuazo.org>2012-11-20 13:38:12 +0100
commit3ba8c034e28eabe353207d114635177fee5daf4e (patch)
tree09ca85ff83d8595b2281feef3ce798ef72806fb3
parentfec6ecff74f9e58e3177a92470e7ead81515f379 (diff)
downloadohai-3ba8c034e28eabe353207d114635177fee5daf4e.tar.gz
created a private expand_path method to avoid infinite loops when reading EC2 metadata
-rw-r--r--lib/ohai/mixin/ec2_metadata.rb11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/ohai/mixin/ec2_metadata.rb b/lib/ohai/mixin/ec2_metadata.rb
index 44090aaa..375b54fb 100644
--- a/lib/ohai/mixin/ec2_metadata.rb
+++ b/lib/ohai/mixin/ec2_metadata.rb
@@ -64,7 +64,7 @@ module Ohai
def fetch_metadata(id='')
metadata = Hash.new
http_client.get("#{EC2_METADATA_URL}/#{id}").body.split("\n").each do |o|
- key = "#{id}#{o.gsub(/\=.*$/, '/')}"
+ key = expand_path("#{id}#{o}")
if key[-1..-1] != '/'
metadata[metadata_key(key)] =
if EC2_ARRAY_VALUES.include? key
@@ -72,7 +72,7 @@ module Ohai
else
http_client.get("#{EC2_METADATA_URL}/#{key}").body
end
- elsif not key.eql?(id) and not key.eql?("/")
+ elsif not key.eql?(id) and not key.eql?('/')
name = key[0..-2]
sym = metadata_key(name)
if EC2_ARRAY_DIR.include?(name)
@@ -123,6 +123,13 @@ module Ohai
private
+ def expand_path(file_name)
+ path = File.expand_path(file_name.gsub(/\=.*$/, '/'), '/')
+ path[0] = '' # remove the initial "/"
+ path << '/' if file_name[-1..-1].eql?('/') # it was a directory
+ path
+ end
+
def metadata_key(key)
key.gsub(/\-|\//, '_')
end