diff options
author | Tim Smith <tsmith84@gmail.com> | 2020-06-03 11:29:13 -0700 |
---|---|---|
committer | Tim Smith <tsmith84@gmail.com> | 2020-06-23 09:30:58 -0700 |
commit | c3fb89fdea405bf10863293909842dfb62086252 (patch) | |
tree | 3efc385828ba0469e22af2cdf67d848805d69f62 /lib/chef/resource | |
parent | a34fd84377c705fcdf3a415b40300e11c3cacf35 (diff) | |
download | chef-c3fb89fdea405bf10863293909842dfb62086252.tar.gz |
archive_file: better handle mode property and deprecate Integer values
FileUtils.mkdir_p expects the mode to be in octal form. We accept Integers, but Ruby doesn't have a way to tell if what the user passed was octal or not. The safest thing to do here is to only accept mode as a String and then convert it to octal form with .to_i(8). This adds a new deprecation and correctly sets the file mode value as octal. Right now this feature works like this:
String mode: applies wrong permission
Base 10 mode: applies wrong permissions
Octal mode: Works
New behavior:
String mode: Works
Base 10 mode: Works but throws a deprecation warning
Octal mode: applies the wrong permissions and throws a deprecation warning
Signed-off-by: Tim Smith <tsmith@chef.io>
Diffstat (limited to 'lib/chef/resource')
-rw-r--r-- | lib/chef/resource/archive_file.rb | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/chef/resource/archive_file.rb b/lib/chef/resource/archive_file.rb index b4eed51137..a0c493ea59 100644 --- a/lib/chef/resource/archive_file.rb +++ b/lib/chef/resource/archive_file.rb @@ -65,7 +65,7 @@ class Chef description: "The group of the extracted files." property :mode, [String, Integer], - description: "The mode of the extracted files.", + description: "The mode of the extracted files. Integer values are deprecated as octal strings (ex. 0755) would not be interpreted correctly.", default: "755" property :destination, String, @@ -97,7 +97,8 @@ class Chef Chef::Log.trace("File or directory does not exist at destination path: #{new_resource.destination}") converge_by("create directory #{new_resource.destination}") do - FileUtils.mkdir_p(new_resource.destination, mode: new_resource.mode.to_i) + # @todo when we remove the ability for mode to be an int we can remove the .to_s below + FileUtils.mkdir_p(new_resource.destination, mode: new_resource.mode.to_s.to_i(8)) end extract(new_resource.path, new_resource.destination, Array(new_resource.options)) |