require 'date'
require 'open-uri'
+require 'net/ftp'
require 'tempfile'
+if RUBY_VERSION == '1.8.7'
+ # Mothers cry, puppies die and Ruby 1.8.7's open-uri needs to be
+ # monkeypatched to support passing in :ftp_passive_mode.
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..',
+ 'puppet_x', 'apt_key', 'patch_openuri.rb'))
+ OpenURI::Options.merge!({:ftp_active_mode => false,})
+end
+
Puppet::Type.type(:apt_key).provide(:apt_key) do
KEY_LINE = {
commands :apt_key => 'apt-key'
def self.instances
+ if RUBY_VERSION > '1.8.7'
+ key_output = apt_key('list').encode('UTF-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '')
+ else
+ key_output = apt_key('list')
+ end
key_array = apt_key('list').split("\n").collect do |line|
line_hash = key_line_hash(line)
next unless line_hash
value
else
begin
- key = open(value).read
- rescue OpenURI::HTTPError => e
+ key = open(value, :ftp_active_mode => false).read
+ rescue OpenURI::HTTPError, Net::FTPPermError => e
fail("#{e.message} for #{resource[:source]}")
rescue SocketError
fail("could not resolve #{resource[:source]}")