aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/pubsub.lua4
-rw-r--r--util/serialization.lua23
-rw-r--r--util/stanza.lua2
-rw-r--r--util/termcolours.lua37
-rw-r--r--util/x509.lua (renamed from util/certverification.lua)4
5 files changed, 64 insertions, 6 deletions
diff --git a/util/pubsub.lua b/util/pubsub.lua
index 02e845e1..811f4a15 100644
--- a/util/pubsub.lua
+++ b/util/pubsub.lua
@@ -77,4 +77,8 @@ function service:get(node, actor, id)
end
end
+function service:get_nodes(actor)
+ return true, self.nodes;
+end
+
return _M;
diff --git a/util/serialization.lua b/util/serialization.lua
index bad2fe43..e193b64f 100644
--- a/util/serialization.lua
+++ b/util/serialization.lua
@@ -15,6 +15,10 @@ local error = error;
local pairs = pairs;
local next = next;
+local loadstring = loadstring;
+local setfenv = setfenv;
+local pcall = pcall;
+
local debug_traceback = debug.traceback;
local log = require "util.logger".init("serialization");
module "serialization"
@@ -24,14 +28,20 @@ local indent = function(i)
end
local function basicSerialize (o)
if type(o) == "number" or type(o) == "boolean" then
- return tostring(o);
+ -- no need to check for NaN, as that's not a valid table index
+ if o == 1/0 then return "(1/0)";
+ elseif o == -1/0 then return "(-1/0)";
+ else return tostring(o); end
else -- assume it is a string -- FIXME make sure it's a string. throw an error otherwise.
return (("%q"):format(tostring(o)):gsub("\\\n", "\\n"));
end
end
local function _simplesave(o, ind, t, func)
if type(o) == "number" then
- func(t, tostring(o));
+ if o ~= o then func(t, "(0/0)");
+ elseif o == 1/0 then func(t, "(1/0)");
+ elseif o == -1/0 then func(t, "(-1/0)");
+ else func(t, tostring(o)); end
elseif type(o) == "string" then
func(t, (("%q"):format(o):gsub("\\\n", "\\n")));
elseif type(o) == "table" then
@@ -72,7 +82,14 @@ function serialize(o)
end
function deserialize(str)
- error("Not implemented");
+ if type(str) ~= "string" then return nil; end
+ str = "return "..str;
+ local f, err = loadstring(str, "@data");
+ if not f then return nil, err; end
+ setfenv(f, {});
+ local success, ret = pcall(f);
+ if not success then return nil, ret; end
+ return ret;
end
return _M;
diff --git a/util/stanza.lua b/util/stanza.lua
index 307a858a..16d558af 100644
--- a/util/stanza.lua
+++ b/util/stanza.lua
@@ -254,7 +254,7 @@ function stanza_mt.get_error(stanza)
end
end
end
- return type, condition or "undefined-condition", text or "";
+ return type, condition or "undefined-condition", text;
end
function stanza_mt.__add(s1, s2)
diff --git a/util/termcolours.lua b/util/termcolours.lua
index 4e267bee..df204688 100644
--- a/util/termcolours.lua
+++ b/util/termcolours.lua
@@ -10,6 +10,14 @@
local t_concat, t_insert = table.concat, table.insert;
local char, format = string.char, string.format;
local ipairs = ipairs;
+local io_write = io.write;
+
+local windows;
+if os.getenv("WINDIR") then
+ windows = require "util.windows";
+end
+local orig_color = windows and windows.get_consolecolor and windows.get_consolecolor();
+
module "termcolours"
local stylemap = {
@@ -19,6 +27,13 @@ local stylemap = {
bold = 1, dark = 2, underline = 4, underlined = 4, normal = 0;
}
+local winstylemap = {
+ ["0"] = orig_color, -- reset
+ ["1"] = 7+8, -- bold
+ ["1;33"] = 2+4+8, -- bold yellow
+ ["1;31"] = 4+8 -- bold red
+}
+
local fmt_string = char(0x1B).."[%sm%s"..char(0x1B).."[0m";
function getstring(style, text)
if style then
@@ -39,4 +54,26 @@ function getstyle(...)
return t_concat(result, ";");
end
+local last = "0";
+function setstyle(style)
+ style = style or "0";
+ if style ~= last then
+ io_write("\27["..style.."m");
+ last = style;
+ end
+end
+
+if windows then
+ function setstyle(style)
+ style = style or "0";
+ if style ~= last then
+ windows.set_consolecolor(winstylemap[style] or orig_color);
+ last = style;
+ end
+ end
+ if not orig_color then
+ function setstyle(style) end
+ end
+end
+
return _M;
diff --git a/util/certverification.lua b/util/x509.lua
index d323f4b4..11f231a0 100644
--- a/util/certverification.lua
+++ b/util/x509.lua
@@ -20,9 +20,9 @@
local nameprep = require "util.encodings".stringprep.nameprep;
local idna_to_ascii = require "util.encodings".idna.to_ascii;
-local log = require "util.logger".init("certverification");
+local log = require "util.logger".init("x509");
-module "certverification"
+module "x509"
local oid_commonname = "2.5.4.3"; -- [LDAP] 2.3
local oid_subjectaltname = "2.5.29.17"; -- [PKIX] 4.2.1.6