diff options
author | Xabier de Zuazo <xabier@zuazo.org> | 2012-11-20 13:38:12 +0100 |
---|---|---|
committer | Xabier de Zuazo <xabier@zuazo.org> | 2012-11-20 13:38:12 +0100 |
commit | 3ba8c034e28eabe353207d114635177fee5daf4e (patch) | |
tree | 09ca85ff83d8595b2281feef3ce798ef72806fb3 | |
parent | fec6ecff74f9e58e3177a92470e7ead81515f379 (diff) | |
download | ohai-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.rb | 11 |
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 |