From eb97aa5f7cbf3800a22849f29fad555b0ca042d9 Mon Sep 17 00:00:00 2001 From: Daniel Pittman Date: Mon, 31 Jan 2011 10:50:00 -0800 Subject: Bug #6091 -- test leading double-slash in filenames are allowed. They presently are not; this ensures that we verify that before merging a change that fixes bugs in the area. --- spec/unit/type/file_spec.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/spec/unit/type/file_spec.rb b/spec/unit/type/file_spec.rb index 51c27c0e6..db0fa9f34 100755 --- a/spec/unit/type/file_spec.rb +++ b/spec/unit/type/file_spec.rb @@ -194,6 +194,23 @@ describe Puppet::Type.type(:file) do file = Puppet::Type::File.new(:path => "/") file[:path].should == "/" end + + it "should accept a double-slash at the start of the path" do + expect { + file = Puppet::Type::File.new(:path => "//tmp/xxx") + # REVISIT: This should be wrong, later. See the next test. + # --daniel 2011-01-31 + file[:path].should == '/tmp/xxx' + }.should_not raise_error + end + + # REVISIT: This is pending, because I don't want to try and audit the + # entire codebase to make sure we get this right. POSIX treats two (and + # exactly two) '/' characters at the start of the path specially. + # + # See sections 3.2 and 4.11, which allow DomainOS to be all special like + # and still have the POSIX branding and all. --daniel 2011-01-31 + it "should preserve the double-slash at the start of the path" end describe "on Microsoft Windows systems" do -- cgit From 878f266fbf8979bcfeab9faef308816fd4a54c50 Mon Sep 17 00:00:00 2001 From: James Turnbull Date: Tue, 1 Feb 2011 04:55:26 +1100 Subject: Fixed #6091 - Changed POSIX path matching to allow multiple leading slashes According to http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_266: "Multiple successive slashes are considered to be the same as one slash.", so '//tmp/xxx' is a valid POSIX pathname. Thomas Bellman adds: You should probably read section 3.2 then as well: 3.2 Absolute Pathname A pathname beginning with a single or more than two slashes; see also Pathname. Note that a pathname starting with exactly two slashes is *not* an absolute pathname according to Posix. And 4.11 (Pathname Resolution) says: A pathname that begins with two successive slashes may be interpreted in an implementation-defined manner, although more than two leading slashes shall be treated as a single slash. Posix has this rule to accomodate DomainOS, which was a Unix- like OS from Apollo, where paths on the form "//foo/bar/gazonk" meant the file "/bar/gazonk" on the machine named "foo". You may recognize this format from URLs, or MS Windows SMB paths (with backslashes instead of forward slashes). This ignores that complication, since none of our supported platforms treat the '//' form as significant. Signed-off-by: James Turnbull Signed-off-by: Daniel Pittman Signed-off-by: Rick Bradley --- lib/puppet/type/file.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/puppet/type/file.rb b/lib/puppet/type/file.rb index 0d69446b4..a91e7a504 100644 --- a/lib/puppet/type/file.rb +++ b/lib/puppet/type/file.rb @@ -34,7 +34,7 @@ Puppet::Type.newtype(:file) do validate do |value| # accept various path syntaxes: lone slash, posix, win32, unc - unless (Puppet.features.posix? and (value =~ /^\/$/ or value =~ /^\/[^\/]/)) or (Puppet.features.microsoft_windows? and (value =~ /^.:\// or value =~ /^\/\/[^\/]+\/[^\/]+/)) + unless (Puppet.features.posix? and value =~ /^\//) or (Puppet.features.microsoft_windows? and (value =~ /^.:\// or value =~ /^\/\/[^\/]+\/[^\/]+/)) fail Puppet::Error, "File paths must be fully qualified, not '#{value}'" end end -- cgit