diff options
author | Kim Alvefur <zash@zash.se> | 2016-01-08 16:21:05 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2016-01-08 16:21:05 +0100 |
commit | 8cdd08825d3ab4afddc12ddf75dc9af1924e8518 (patch) | |
tree | b72ea8b35e4dae603543a1b490f959f32b930870 /util | |
parent | 3d0f3a9db092d06daa782135077acfaf9b40b69c (diff) | |
parent | b3d9c810676d288d193e4dcc3d95456e8a050f0e (diff) | |
download | prosody-8cdd08825d3ab4afddc12ddf75dc9af1924e8518.tar.gz prosody-8cdd08825d3ab4afddc12ddf75dc9af1924e8518.zip |
Merge 0.10->trunk
Diffstat (limited to 'util')
-rw-r--r-- | util/ip.lua | 6 | ||||
-rw-r--r-- | util/random.lua | 28 | ||||
-rw-r--r-- | util/uuid.lua | 2 |
3 files changed, 10 insertions, 26 deletions
diff --git a/util/ip.lua b/util/ip.lua index 7dcace5c..ec3b4d7e 100644 --- a/util/ip.lua +++ b/util/ip.lua @@ -25,6 +25,10 @@ local function new_ip(ipStr, proto) elseif proto ~= "IPv4" and proto ~= "IPv6" then return nil, "invalid protocol"; end + local zone; + if proto == "IPv6" and ipStr:find('%', 1, true) then + ipStr, zone = ipStr:match("^(.-)%%(.*)"); + end if proto == "IPv6" and ipStr:find('.', 1, true) then local changed; ipStr, changed = ipStr:gsub(":(%d+)%.(%d+)%.(%d+)%.(%d+)$", function(a,b,c,d) @@ -33,7 +37,7 @@ local function new_ip(ipStr, proto) if changed ~= 1 then return nil, "invalid-address"; end end - return setmetatable({ addr = ipStr, proto = proto }, ip_mt); + return setmetatable({ addr = ipStr, proto = proto, zone = zone }, ip_mt); end local function toBits(ip) diff --git a/util/random.lua b/util/random.lua index 5938a94f..4963e98c 100644 --- a/util/random.lua +++ b/util/random.lua @@ -6,35 +6,15 @@ -- COPYING file in the source package for more information. -- -local tostring = tostring; -local os_time = os.time; -local os_clock = os.clock; -local ceil = math.ceil; -local H = require "util.hashes".sha512; - -local last_uniq_time = 0; -local function uniq_time() - local new_uniq_time = os_time(); - if last_uniq_time >= new_uniq_time then new_uniq_time = last_uniq_time + 1; end - last_uniq_time = new_uniq_time; - return new_uniq_time; -end - -local function new_random(x) - return H(x..os_clock()..tostring({})); -end - -local buffer = new_random(uniq_time()); +local urandom = assert(io.open("/dev/urandom", "r+")); local function seed(x) - buffer = new_random(buffer..x); + urandom:write(x); + urandom:flush(); end local function bytes(n) - if #buffer < n+4 then seed(uniq_time()); end - local r = buffer:sub(1, n); - buffer = buffer:sub(n+1); - return r; + return urandom:read(n); end return { diff --git a/util/uuid.lua b/util/uuid.lua index e10fc0f7..f4fd21f6 100644 --- a/util/uuid.lua +++ b/util/uuid.lua @@ -16,7 +16,7 @@ local function get_nibbles(n) end local function get_twobits() - return ("%x"):format(get_nibbles(1):byte() % 4 + 8); + return ("%x"):format(random_bytes(1):byte() % 4 + 8); end local function generate() |