diff options
author | jamesc <james@opscode.com> | 2013-05-23 20:21:05 -0700 |
---|---|---|
committer | Bryan McLellan <btm@opscode.com> | 2013-06-18 08:58:18 -0700 |
commit | b3aafbc814a5dceb2d6f793d5035d4248f153892 (patch) | |
tree | be24dec0ae8044a20dd54a89ab9c467739e773ab | |
parent | 5adefe7da91576bc6a92d6ebec13ff41fb6b1287 (diff) | |
download | chef-b3aafbc814a5dceb2d6f793d5035d4248f153892.tar.gz |
monkey patch SecureRandom with uuid method if required
-rw-r--r-- | lib/chef/monkey_patches/securerandom.rb | 44 | ||||
-rw-r--r-- | lib/chef/resource_reporter.rb | 16 |
2 files changed, 46 insertions, 14 deletions
diff --git a/lib/chef/monkey_patches/securerandom.rb b/lib/chef/monkey_patches/securerandom.rb new file mode 100644 index 0000000000..7a41a1dbb0 --- /dev/null +++ b/lib/chef/monkey_patches/securerandom.rb @@ -0,0 +1,44 @@ +# +# Author:: James Casey <james@opscode.com> +# Copyright:: Copyright (c) 2013 Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# == SecureRandom (Patch) +# On ruby 1.9, SecureRandom has a uuid method which generates a v4 UUID. The +# backport of SecureRandom to 1.8.7 is missing this method + +require 'securerandom' + +module SecureRandom + unless respond_to?(:uuid) + # SecureRandom.uuid generates a v4 random UUID (Universally Unique IDentifier). + # + # p SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594" + # p SecureRandom.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab" + # p SecureRandom.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b" + # + # The version 4 UUID is purely random (except the version). + # It doesn't contain meaningful information such as MAC address, time, etc. + # + # See RFC 4122 for details of UUID. + def self.uuid + ary = self.random_bytes(16).unpack("NnnnnN") + ary[2] = (ary[2] & 0x0fff) | 0x4000 + ary[3] = (ary[3] & 0x3fff) | 0x8000 + "%08x-%04x-%04x-%04x-%04x%08x" % ary + end + end +end diff --git a/lib/chef/resource_reporter.rb b/lib/chef/resource_reporter.rb index c428e70afd..44e8a068db 100644 --- a/lib/chef/resource_reporter.rb +++ b/lib/chef/resource_reporter.rb @@ -20,6 +20,7 @@ # require 'uri' +require 'chef/monkey_patches/securerandom' require 'chef/event_dispatch/base' class Chef @@ -97,12 +98,7 @@ class Chef @pending_update = nil @status = "success" @exception = nil - begin - @run_id = uuid - rescue LoadError - Chef::Log.debug("Can't load SecureRandom - disabling resource_reporter") - @reporting_enabled = false - end + @run_id = SecureRandom.uuid @rest_client = rest_client @error_descriptions = {} end @@ -307,13 +303,5 @@ class Chef end end - def uuid - require 'securerandom' - # Ruby 1.8.7 does not have SecureRandom::uuid, so copy the 1.9.2 impl here - ary = SecureRandom.random_bytes(16).unpack("NnnnnN") - ary[2] = (ary[2] & 0x0fff) | 0x4000 - ary[3] = (ary[3] & 0x3fff) | 0x8000 - "%08x-%04x-%04x-%04x-%04x%08x" % ary - end end end |