summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sysutils/puppet/Makefile3
-rw-r--r--sysutils/puppet/distinfo4
-rw-r--r--sysutils/puppet/files/patch-CVEs571
3 files changed, 3 insertions, 575 deletions
diff --git a/sysutils/puppet/Makefile b/sysutils/puppet/Makefile
index 0eaaab7584ac..bc018908e43f 100644
--- a/sysutils/puppet/Makefile
+++ b/sysutils/puppet/Makefile
@@ -6,8 +6,7 @@
#
PORTNAME= puppet
-PORTVERSION= 2.7.12
-PORTREVISION= 1
+PORTVERSION= 2.7.13
CATEGORIES= sysutils
MASTER_SITES= http://downloads.puppetlabs.com/puppet/
diff --git a/sysutils/puppet/distinfo b/sysutils/puppet/distinfo
index 087c8ce0951b..74860a4b1a96 100644
--- a/sysutils/puppet/distinfo
+++ b/sysutils/puppet/distinfo
@@ -1,2 +1,2 @@
-SHA256 (puppet-2.7.12.tar.gz) = dd218e0cc7cb8a4b5423225085e760acc6e6aa0da6948665f30b41cdbeb38d32
-SIZE (puppet-2.7.12.tar.gz) = 1878606
+SHA256 (puppet-2.7.13.tar.gz) = cb7caa1893ebc7e4ddf063edd3434a8be4831ddbfba5a3920314e8a311510e2b
+SIZE (puppet-2.7.13.tar.gz) = 1877225
diff --git a/sysutils/puppet/files/patch-CVEs b/sysutils/puppet/files/patch-CVEs
deleted file mode 100644
index db1f6c8eebde..000000000000
--- a/sysutils/puppet/files/patch-CVEs
+++ /dev/null
@@ -1,571 +0,0 @@
-From 77f7c815c4de0f1e51550efc5779863aef52259e Mon Sep 17 00:00:00 2001
-From: Matthaus Litteken <matthaus@puppetlabs.com>
-Date: Wed, 4 Apr 2012 14:33:33 -0700
-Subject: [PATCH] 2.7 - Fixes for CVEs 2012-1906, 2012-1986 to 2012-1989
-
-Squashed commit of the following:
-
-commit 1f58ea69847ee6ce7a8b9be255614f8f7384c209
-Author: Patrick Carlisle <patrick@puppetlabs.com>
-Date: Wed Apr 4 13:36:06 2012 -0700
-
- Stub mktmpdir and remove_entry_secure in os x package providers
-
-commit b7553a555774d687d2c96f5a2d7b430fbf49c130
-Author: Patrick Carlisle <patrick@puppetlabs.com>
-Date: Tue Apr 3 16:17:18 2012 -0700
-
- (#13260) Spec test to verify that mktmpdir is used
-
-commit 46e8dc06aa31426ec3bf5203e46107d72a9ba398
-Author: Patrick Carlisle <patrick@puppetlabs.com>
-Date: Fri Mar 23 12:20:40 2012 -0700
-
- (#13260) Use mktmpdir when downloading packages
-
- This fixes a security vulnerability in the appdmg and pkgdmg providers where
- they would curl packages directly into /tmp and the install them, allowing an
- attacker to craft a symlink and overwrite arbitrary files or install arbitrary
- packages.
-
-commit b36bda9ceb14b746a5b37553bff15aaeec7b20fc
-Author: Patrick Carlisle <patrick@puppetlabs.com>
-Date: Fri Mar 16 14:44:44 2012 -0700
-
- Refactor pkgdmg specs
-
- Refactor to a more current spec style. Several of these specs didn't actually
- test anything. They have either been deleted or made more specific.
-
-commit 91e7ce478649490d87684661f79d70b5ca46ddd0
-Author: Matthaus Litteken <matthaus@puppetlabs.com>
-Date: Tue Apr 3 11:34:33 2012 -0700
-
- Remove telnet Output_log parameter
-
- The puppet telnet util opened an output log by default with a predictable name.
- This left the log open to a write-through symlink attack as the puppet user.
- This fix addresses that by removing the Output_log parameter from the
- Net::Telnet::new call. Without the parameter, Net::Telnet defaults to no output
- logging. The same is true for the dump_log parameter. The spec test for telnet
- has been updated to test and ensure that no files are opened during connect. It
- also stubs the TCPSocket for the telnet connection so that no connection is
- attempted if @transport.connect isn't stubbed.
-
-commit 0d6d29933e613fe177e9235415919a5428db67bc
-Author: Andrew Parker <andy@puppetlabs.com>
-Date: Mon Apr 2 11:47:17 2012 -0700
-
- Fix for bucket_path security vulnerability
-
- This is a fix for Bugs #13553, #13418, #13511. The bucket_path parameter
- allowed control over where the filebucket will try to read and write to.
- The only place available to stop this parameter is in the resolution
- from a URI to an indirectory terminus. The bucket_path is used
- internally for local filebuckets and so cannot be removed completely
- without a larger change to the design.
-
-commit 19bd30a35c0dcf01d58934413d7dabb7edfabd3f
-Author: Andrew Parker <andy@puppetlabs.com>
-Date: Mon Apr 2 10:44:26 2012 -0700
-
- Removed text/marshal support
-
- Removing text/marshal support in order to close the security
- vulnerability described in Bug #13552.
----
- lib/puppet/network/formats.rb | 27 ------
- lib/puppet/network/http/api/v1.rb | 1 +
- lib/puppet/provider/package/appdmg.rb | 26 ++---
- lib/puppet/provider/package/pkgdmg.rb | 36 +++----
- lib/puppet/util/network_device/transport/telnet.rb | 4 +-
- spec/unit/network/formats_spec.rb | 43 ---------
- spec/unit/network/http/api/v1_spec.rb | 8 ++
- spec/unit/provider/package/appdmg_spec.rb | 42 ++++++++
- spec/unit/provider/package/pkgdmg_spec.rb | 102 +++++++++++---------
- .../util/network_device/transport/telnet_spec.rb | 9 ++
- 10 files changed, 144 insertions(+), 154 deletions(-)
- create mode 100755 spec/unit/provider/package/appdmg_spec.rb
-
-diff --git a/lib/puppet/network/formats.rb b/lib/puppet/network/formats.rb
-index 082c83e..c5af288 100644
---- lib/puppet/network/formats.rb
-+++ lib/puppet/network/formats.rb
-@@ -77,33 +77,6 @@ Puppet::Network::FormatHandler.create_serialized_formats(:b64_zlib_yaml) do
- end
- end
-
--
--Puppet::Network::FormatHandler.create(:marshal, :mime => "text/marshal") do
-- # Marshal doesn't need the class name; it's serialized.
-- def intern(klass, text)
-- Marshal.load(text)
-- end
--
-- # Marshal doesn't need the class name; it's serialized.
-- def intern_multiple(klass, text)
-- Marshal.load(text)
-- end
--
-- def render(instance)
-- Marshal.dump(instance)
-- end
--
-- # Marshal monkey-patches Array, so this works.
-- def render_multiple(instances)
-- Marshal.dump(instances)
-- end
--
-- # Everything's supported
-- def supported?(klass)
-- true
-- end
--end
--
- Puppet::Network::FormatHandler.create(:s, :mime => "text/plain", :extension => "txt")
-
- # A very low-weight format so it'll never get chosen automatically.
-diff --git a/lib/puppet/network/http/api/v1.rb b/lib/puppet/network/http/api/v1.rb
-index 852568a..ef19fe4 100644
---- lib/puppet/network/http/api/v1.rb
-+++ lib/puppet/network/http/api/v1.rb
-@@ -31,6 +31,7 @@ module Puppet::Network::HTTP::API::V1
- method = indirection_method(http_method, indirection)
-
- params[:environment] = Puppet::Node::Environment.new(environment)
-+ params.delete(:bucket_path)
-
- raise ArgumentError, "No request key specified in #{uri}" if key == "" or key.nil?
-
-diff --git a/lib/puppet/provider/package/appdmg.rb b/lib/puppet/provider/package/appdmg.rb
-index 6c5099a..1e292e3 100644
---- lib/puppet/provider/package/appdmg.rb
-+++ lib/puppet/provider/package/appdmg.rb
-@@ -50,23 +50,24 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag
-
- def self.installpkgdmg(source, name)
- unless source =~ /\.dmg$/i
-- self.fail "Mac OS X PKG DMG's must specificy a source string ending in .dmg"
-+ self.fail "Mac OS X PKG DMG's must specify a source string ending in .dmg"
- end
- require 'open-uri'
- require 'facter/util/plist'
- cached_source = source
-- if %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ cached_source
-- cached_source = "/tmp/#{name}"
-- begin
-- curl "-o", cached_source, "-C", "-", "-k", "-L", "-s", "--url", source
-- Puppet.debug "Success: curl transfered [#{name}]"
-- rescue Puppet::ExecutionFailure
-- Puppet.debug "curl did not transfer [#{name}]. Falling back to slower open-uri transfer methods."
-- cached_source = source
-+ tmpdir = Dir.mktmpdir
-+ begin
-+ if %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ cached_source
-+ cached_source = File.join(tmpdir, name)
-+ begin
-+ curl "-o", cached_source, "-C", "-", "-k", "-L", "-s", "--url", source
-+ Puppet.debug "Success: curl transfered [#{name}]"
-+ rescue Puppet::ExecutionFailure
-+ Puppet.debug "curl did not transfer [#{name}]. Falling back to slower open-uri transfer methods."
-+ cached_source = source
-+ end
- end
-- end
-
-- begin
- open(cached_source) do |dmg|
- xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", dmg.path
- ptable = Plist::parse_xml xml_str
-@@ -87,8 +88,7 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag
- end
- end
- ensure
-- # JJM Remove the file if open-uri didn't already do so.
-- File.unlink(cached_source) if File.exist?(cached_source)
-+ FileUtils.remove_entry_secure(tmpdir, force=true)
- end
- end
-
-diff --git a/lib/puppet/provider/package/pkgdmg.rb b/lib/puppet/provider/package/pkgdmg.rb
-index c1268be..be9d3a7 100644
---- lib/puppet/provider/package/pkgdmg.rb
-+++ lib/puppet/provider/package/pkgdmg.rb
-@@ -39,11 +39,7 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
-
- def self.instances
- instance_by_name.collect do |name|
-- new(
-- :name => name,
-- :provider => :pkgdmg,
-- :ensure => :installed
-- )
-+ new(:name => name, :provider => :pkgdmg, :ensure => :installed)
- end
- end
-
-@@ -58,22 +54,23 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
-
- def self.installpkgdmg(source, name)
- unless source =~ /\.dmg$/i || source =~ /\.pkg$/i
-- raise Puppet::Error.new("Mac OS X PKG DMG's must specificy a source string ending in .dmg or flat .pkg file")
-+ raise Puppet::Error.new("Mac OS X PKG DMG's must specify a source string ending in .dmg or flat .pkg file")
- end
- require 'open-uri'
- cached_source = source
-- if %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ cached_source
-- cached_source = "/tmp/#{name}"
-- begin
-- curl "-o", cached_source, "-C", "-", "-k", "-L", "-s", "--url", source
-- Puppet.debug "Success: curl transfered [#{name}]"
-- rescue Puppet::ExecutionFailure
-- Puppet.debug "curl did not transfer [#{name}]. Falling back to slower open-uri transfer methods."
-- cached_source = source
-+ tmpdir = Dir.mktmpdir
-+ begin
-+ if %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ cached_source
-+ cached_source = File.join(tmpdir, name)
-+ begin
-+ curl "-o", cached_source, "-C", "-", "-k", "-L", "-s", "--url", source
-+ Puppet.debug "Success: curl transfered [#{name}]"
-+ rescue Puppet::ExecutionFailure
-+ Puppet.debug "curl did not transfer [#{name}]. Falling back to slower open-uri transfer methods."
-+ cached_source = source
-+ end
- end
-- end
-
-- begin
- if source =~ /\.dmg$/i
- File.open(cached_source) do |dmg|
- xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", dmg.path
-@@ -96,14 +93,11 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
- end
- end
- end
-- elsif source =~ /\.pkg$/i
-- installpkg(cached_source, name, source)
- else
-- raise Puppet::Error.new("Mac OS X PKG DMG's must specificy a source string ending in .dmg or flat .pkg file")
-+ installpkg(cached_source, name, source)
- end
- ensure
-- # JJM Remove the file if open-uri didn't already do so.
-- File.unlink(cached_source) if File.exist?(cached_source)
-+ FileUtils.remove_entry_secure(tmpdir, force=true)
- end
- end
-
-diff --git a/lib/puppet/util/network_device/transport/telnet.rb b/lib/puppet/util/network_device/transport/telnet.rb
-index e55079e..e9322f8 100644
---- lib/puppet/util/network_device/transport/telnet.rb
-+++ lib/puppet/util/network_device/transport/telnet.rb
-@@ -15,7 +15,7 @@ class Puppet::Util::NetworkDevice::Transport::Telnet < Puppet::Util::NetworkDevi
- def connect
- @telnet = Net::Telnet::new("Host" => host, "Port" => port || 23,
- "Timeout" => 10,
-- "Prompt" => default_prompt, "Output_log" => "/tmp/out.log")
-+ "Prompt" => default_prompt)
- end
-
- def close
-@@ -39,4 +39,4 @@ class Puppet::Util::NetworkDevice::Transport::Telnet < Puppet::Util::NetworkDevi
- def send(line)
- @telnet.puts(line)
- end
--end
-\ No newline at end of file
-+end
-diff --git a/spec/unit/network/formats_spec.rb b/spec/unit/network/formats_spec.rb
-index 62c2dbb..635e695 100755
---- spec/unit/network/formats_spec.rb
-+++ spec/unit/network/formats_spec.rb
-@@ -162,49 +162,6 @@ describe "Puppet Network Format" do
-
- end
-
-- it "should include a marshal format" do
-- Puppet::Network::FormatHandler.format(:marshal).should_not be_nil
-- end
--
-- describe "marshal" do
-- before do
-- @marshal = Puppet::Network::FormatHandler.format(:marshal)
-- end
--
-- it "should have its mime type set to text/marshal" do
-- Puppet::Network::FormatHandler.format(:marshal).mime.should == "text/marshal"
-- end
--
-- it "should be supported on Strings" do
-- @marshal.should be_supported(String)
-- end
--
-- it "should render by calling 'Marshal.dump' on the instance" do
-- instance = mock 'instance'
-- Marshal.expects(:dump).with(instance).returns "foo"
-- @marshal.render(instance).should == "foo"
-- end
--
-- it "should render multiple instances by calling 'to_marshal' on the array" do
-- instances = [mock('instance')]
--
-- Marshal.expects(:dump).with(instances).returns "foo"
-- @marshal.render_multiple(instances).should == "foo"
-- end
--
-- it "should intern by calling 'Marshal.load'" do
-- text = "foo"
-- Marshal.expects(:load).with("foo").returns "bar"
-- @marshal.intern(String, text).should == "bar"
-- end
--
-- it "should intern multiples by calling 'Marshal.load'" do
-- text = "foo"
-- Marshal.expects(:load).with("foo").returns "bar"
-- @marshal.intern_multiple(String, text).should == "bar"
-- end
-- end
--
- describe "plaintext" do
- before do
- @text = Puppet::Network::FormatHandler.format(:s)
-diff --git a/spec/unit/network/http/api/v1_spec.rb b/spec/unit/network/http/api/v1_spec.rb
-index 039bccf..115f573 100755
---- spec/unit/network/http/api/v1_spec.rb
-+++ spec/unit/network/http/api/v1_spec.rb
-@@ -42,6 +42,14 @@ describe Puppet::Network::HTTP::API::V1 do
- @tester.uri2indirection("GET", "/env/foo/bar", {:environment => "otherenv"})[3][:environment].to_s.should == "env"
- end
-
-+ it "should not pass a buck_path parameter through (See Bugs #13553, #13518, #13511)" do
-+ @tester.uri2indirection("GET", "/env/foo/bar", { :bucket_path => "/malicious/path" })[3].should_not include({ :bucket_path => "/malicious/path" })
-+ end
-+
-+ it "should pass allowed parameters through" do
-+ @tester.uri2indirection("GET", "/env/foo/bar", { :allowed_param => "value" })[3].should include({ :allowed_param => "value" })
-+ end
-+
- it "should return the environment as a Puppet::Node::Environment" do
- @tester.uri2indirection("GET", "/env/foo/bar", {})[3][:environment].should be_a Puppet::Node::Environment
- end
-diff --git a/spec/unit/provider/package/appdmg_spec.rb b/spec/unit/provider/package/appdmg_spec.rb
-new file mode 100755
-index 0000000..bde9efc
---- /dev/null
-+++ spec/unit/provider/package/appdmg_spec.rb
-@@ -0,0 +1,42 @@
-+#!/usr/bin/env rspec
-+require 'spec_helper'
-+
-+describe Puppet::Type.type(:package).provider(:appdmg) do
-+ let(:resource) { Puppet::Type.type(:package).new(:name => 'foo', :provider => :appdmg) }
-+ let(:provider) { described_class.new(resource) }
-+
-+ describe "when installing an appdmg" do
-+ let(:fake_mountpoint) { "/tmp/dmg.foo" }
-+ let(:empty_hdiutil_plist) { Plist::Emit.dump({}) }
-+ let(:fake_hdiutil_plist) { Plist::Emit.dump({"system-entities" => [{"mount-point" => fake_mountpoint}]}) }
-+
-+ before do
-+ fh = mock 'filehandle'
-+ fh.stubs(:path).yields "/tmp/foo"
-+ resource[:source] = "foo.dmg"
-+ described_class.stubs(:open).yields fh
-+ Dir.stubs(:mktmpdir).returns "/tmp/testtmp123"
-+ FileUtils.stubs(:remove_entry_secure)
-+ end
-+
-+ describe "from a remote source" do
-+ let(:tmpdir) { "/tmp/good123" }
-+
-+ before :each do
-+ resource[:source] = "http://fake.puppetlabs.com/foo.dmg"
-+ end
-+
-+ it "should call tmpdir and use the returned directory" do
-+ Dir.expects(:mktmpdir).returns tmpdir
-+ Dir.stubs(:entries).returns ["foo.app"]
-+ described_class.expects(:curl).with do |*args|
-+ args[0] == "-o" and args[1].include? tmpdir
-+ end
-+ described_class.stubs(:hdiutil).returns fake_hdiutil_plist
-+ described_class.expects(:installapp)
-+
-+ provider.install
-+ end
-+ end
-+ end
-+end
-diff --git a/spec/unit/provider/package/pkgdmg_spec.rb b/spec/unit/provider/package/pkgdmg_spec.rb
-index 155f12e..f8b2316 100755
---- spec/unit/provider/package/pkgdmg_spec.rb
-+++ spec/unit/provider/package/pkgdmg_spec.rb
-@@ -1,83 +1,89 @@
- #!/usr/bin/env rspec
- require 'spec_helper'
-
--provider = Puppet::Type.type(:package).provider(:pkgdmg)
-+describe Puppet::Type.type(:package).provider(:pkgdmg) do
-+ let(:resource) { Puppet::Type.type(:package).new(:name => 'foo', :provider => :pkgdmg) }
-+ let(:provider) { described_class.new(resource) }
-
--describe provider do
-- before do
-- @resource = stub 'resource', :[] => "dummypkgdmg"
-- @provider = provider.new(@resource)
--
-- @fakemountpoint = "/tmp/dmg.foo"
-- @fakepkgfile = "/tmp/test.pkg"
-- @fakehdiutilinfo = {"system-entities" => [{"mount-point" => @fakemountpoint}] }
-- @fakehdiutilplist = Plist::Emit.dump(@fakehdiutilinfo)
--
-- @hdiutilmountargs = ["mount", "-plist", "-nobrowse", "-readonly",
-- "-noidme", "-mountrandom", "/tmp"]
-- end
--
-- it "should not be versionable" do
-- provider.versionable?.should be_false
-- end
--
-- it "should not be uninstallable" do
-- provider.uninstallable?.should be_false
-- end
-+ it { should_not be_versionable }
-+ it { should_not be_uninstallable }
-
- describe "when installing it should fail when" do
-- it "no source is specified" do
-- @resource.stubs(:[]).with(:source).returns nil
-- lambda { @provider.install }.should raise_error(Puppet::Error)
-+ before :each do
-+ Puppet::Util.expects(:execute).never
- end
-
-- it "no name is specified" do
-- @resource.stubs(:[]).with(:name).returns nil
-- lambda { @provider.install }.should raise_error(Puppet::Error)
-+ it "no source is specified" do
-+ expect { provider.install }.should raise_error(Puppet::Error, /must specify a package source/)
- end
-
- it "the source does not end in .dmg or .pkg" do
-- @resource.stubs(:[]).with(:source).returns "notendingindotdmgorpkg"
-- lambda { @provider.install }.should raise_error(Puppet::Error)
-- end
--
-- it "a disk image with no system entities is mounted" do
-- @provider.stubs(:[]).with(:hdiutil).returns ""
-- lambda { @provider.install }.should raise_error(Puppet::Error)
-+ resource[:source] = "bar"
-+ expect { provider.install }.should raise_error(Puppet::Error, /must specify a source string ending in .*dmg.*pkg/)
- end
- end
-
- # These tests shouldn't be this messy. The pkgdmg provider needs work...
- describe "when installing a pkgdmg" do
-+ let(:fake_mountpoint) { "/tmp/dmg.foo" }
-+ let(:empty_hdiutil_plist) { Plist::Emit.dump({}) }
-+ let(:fake_hdiutil_plist) { Plist::Emit.dump({"system-entities" => [{"mount-point" => fake_mountpoint}]}) }
-+
- before do
- fh = mock 'filehandle'
- fh.stubs(:path).yields "/tmp/foo"
-- @resource.stubs(:[]).with(:source).returns "foo.dmg"
-+ resource[:source] = "foo.dmg"
- File.stubs(:open).yields fh
-+ Dir.stubs(:mktmpdir).returns "/tmp/testtmp123"
-+ FileUtils.stubs(:remove_entry_secure)
-+ end
-+
-+ it "should fail when a disk image with no system entities is mounted" do
-+ described_class.stubs(:hdiutil).returns(empty_hdiutil_plist)
-+ expect { provider.install }.should raise_error(Puppet::Error, /No disk entities/)
- end
-
- it "should call hdiutil to mount and eject the disk image" do
- Dir.stubs(:entries).returns []
-- @provider.class.expects(:hdiutil).with("eject", @fakemountpoint).returns 0
-- @provider.class.expects(:hdiutil).with("mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", nil).returns @fakehdiutilplist
-- @provider.install
-+ provider.class.expects(:hdiutil).with("eject", fake_mountpoint).returns 0
-+ provider.class.expects(:hdiutil).with("mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", nil).returns fake_hdiutil_plist
-+ provider.install
- end
-
- it "should call installpkg if a pkg/mpkg is found on the dmg" do
- Dir.stubs(:entries).returns ["foo.pkg"]
-- @provider.class.stubs(:hdiutil).returns @fakehdiutilplist
-- @provider.class.expects(:installpkg).with("#{@fakemountpoint}/foo.pkg", @resource[:name], "foo.dmg").returns ""
-- @provider.install
-+ provider.class.stubs(:hdiutil).returns fake_hdiutil_plist
-+ provider.class.expects(:installpkg).with("#{fake_mountpoint}/foo.pkg", resource[:name], "foo.dmg").returns ""
-+ provider.install
-+ end
-+
-+ describe "from a remote source" do
-+ let(:tmpdir) { "/tmp/good123" }
-+
-+ before :each do
-+ resource[:source] = "http://fake.puppetlabs.com/foo.dmg"
-+ end
-+
-+ it "should call tmpdir and use the returned directory" do
-+ Dir.expects(:mktmpdir).returns tmpdir
-+ Dir.stubs(:entries).returns ["foo.pkg"]
-+ described_class.expects(:curl).with do |*args|
-+ args[0] == "-o" and args[1].include? tmpdir
-+ end
-+ described_class.stubs(:hdiutil).returns fake_hdiutil_plist
-+ described_class.expects(:installpkg)
-+
-+ provider.install
-+ end
- end
- end
-
- describe "when installing flat pkg file" do
- it "should call installpkg if a flat pkg file is found instead of a .dmg image" do
-- @resource.stubs(:[]).with(:source).returns "/tmp/test.pkg"
-- @resource.stubs(:[]).with(:name).returns "testpkg"
-- @provider.class.expects(:installpkgdmg).with("#{@fakepkgfile}", "testpkg").returns ""
-- @provider.install
-- end
-+ resource[:source] = "/tmp/test.pkg"
-+ resource[:name] = "testpkg"
-+ provider.class.expects(:installpkgdmg).with("/tmp/test.pkg", "testpkg").returns ""
-+ provider.install
-+ end
- end
--
- end
-diff --git a/spec/unit/util/network_device/transport/telnet_spec.rb b/spec/unit/util/network_device/transport/telnet_spec.rb
-index cea5ab7..0f73f52 100755
---- spec/unit/util/network_device/transport/telnet_spec.rb
-+++ spec/unit/util/network_device/transport/telnet_spec.rb
-@@ -6,6 +6,7 @@ require 'puppet/util/network_device/transport/telnet'
- describe Puppet::Util::NetworkDevice::Transport::Telnet do
-
- before(:each) do
-+ TCPSocket.stubs(:open).returns stub_everything('tcp')
- @transport = Puppet::Util::NetworkDevice::Transport::Telnet.new()
- end
-
-@@ -13,6 +14,14 @@ describe Puppet::Util::NetworkDevice::Transport::Telnet do
- @transport.should_not be_handles_login
- end
-
-+ it "should not open any files" do
-+ File.expects(:open).never
-+ @transport.host = "localhost"
-+ @transport.port = 23
-+
-+ @transport.connect
-+ end
-+
- it "should connect to the given host and port" do
- Net::Telnet.expects(:new).with { |args| args["Host"] == "localhost" && args["Port"] == 23 }.returns stub_everything
- @transport.host = "localhost"
---
-1.7.9.2
-