From 29282b5a7d43e8b5ce12b0ec4b7a7620c19a67b6 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Mon, 9 Feb 2015 19:44:12 +0200 Subject: proper escaping for back-end addresses --- aconf/model/init.lua | 1 + aconf/model/net.lua | 6 +++--- aconf/model/node.lua | 11 ++++++++--- aconf/model/root.lua | 8 +++++--- aconf/model/service.lua | 12 +++++++----- 5 files changed, 24 insertions(+), 14 deletions(-) (limited to 'aconf/model') diff --git a/aconf/model/init.lua b/aconf/model/init.lua index 01b4791..0ee876a 100644 --- a/aconf/model/init.lua +++ b/aconf/model/init.lua @@ -58,6 +58,7 @@ local isinstance = object.isinstance local super = object.super M.path = require('aconf.path') +M.addr = require('aconf.path.address') local store = require('aconf.persistence') local def_store = require('aconf.persistence.defer') diff --git a/aconf/model/net.lua b/aconf/model/net.lua index 39ca756..48a419a 100644 --- a/aconf/model/net.lua +++ b/aconf/model/net.lua @@ -1,5 +1,5 @@ --[[ -Copyright (c) 2012-2014 Kaarle Ritvanen +Copyright (c) 2012-2015 Kaarle Ritvanen See LICENSE file for license details --]] @@ -15,7 +15,7 @@ local object = require('aconf.object') local class = object.class local super = object.super -local pth = require('aconf.path') +local address = require('aconf.path.address') local update = require('aconf.util').update @@ -26,7 +26,7 @@ local BaseIPAddress = class(String) function BaseIPAddress:abs_mask_addr(context) if self.mask_addr then - return pth.join(pth.parent(context.addr), self.mask_addr) + return address.join(address.parent(context.addr), self.mask_addr) end end diff --git a/aconf/model/node.lua b/aconf/model/node.lua index 91f0256..21b3ec2 100644 --- a/aconf/model/node.lua +++ b/aconf/model/node.lua @@ -13,6 +13,7 @@ local isinstance = object.isinstance local super = object.super local pth = require('aconf.path') +local address = require('aconf.path.address') local util = require('aconf.util') local copy = util.copy @@ -20,7 +21,11 @@ local setdefaults = util.setdefaults local update = util.update -function M.null_addr(path, name) return '/null'..pth.join(path, name) end +function M.null_addr(path, name) + local comps = pth.split(path) + table.insert(comps, pth.escape(name)) + return address.join('/null', table.unpack(comps)) +end M.BoundMember = class() @@ -33,7 +38,7 @@ function M.BoundMember:init(parent, name, field) local member = field[k] if type(member) ~= 'function' then return member end - local addr = field.addr or pth.escape(name) + local addr = field.addr or address.escape(name) if type(addr) == 'function' then addr = addr(pmt.path, name) end return function(self, ...) return member( @@ -43,7 +48,7 @@ function M.BoundMember:init(parent, name, field) privileged=pmt.privileged, parent=parent, path=pth.join(pmt.path, name), - addr=pth.to_absolute(addr, pmt.addr) + addr=address.to_absolute(addr, pmt.addr) }, ... ) diff --git a/aconf/model/root.lua b/aconf/model/root.lua index 9b05488..e8525db 100644 --- a/aconf/model/root.lua +++ b/aconf/model/root.lua @@ -9,6 +9,7 @@ local model = require('aconf.model.model') local node = require('aconf.model.node') local object = require('aconf.object') local pth = require('aconf.path') +local address = require('aconf.path.address') local util = require('aconf.util') local setdefault = util.setdefault @@ -39,18 +40,19 @@ local order = 0 function M.topology(addr, create) local top = _topology if type(addr) == 'table' then addr = util.copy(addr) - else addr = pth.split(addr) end + else addr = address.split(addr) end local function defaults(top) return util.setdefaults(top, {members={}, paths={}, referrers={}}) end while #addr > 0 do + local comp = address.escape(addr[1]) if create then - top = setdefault(defaults(top).members, addr[1], {order=order}) + top = setdefault(defaults(top).members, comp, {order=order}) order = order + 1 else - top = top.members[addr[1]] or top.members[pth.wildcard] + top = top.members[comp] or top.members['*'] if not top then return end end table.remove(addr, 1) diff --git a/aconf/model/service.lua b/aconf/model/service.lua index 6951ffc..a7c02b0 100644 --- a/aconf/model/service.lua +++ b/aconf/model/service.lua @@ -1,21 +1,23 @@ --[[ -Copyright (c) 2012-2014 Kaarle Ritvanen +Copyright (c) 2012-2015 Kaarle Ritvanen See LICENSE file for license details --]] local fld = require('aconf.model.field') local new = require('aconf.model.model').new local super = require('aconf.object').super -local pth = require('aconf.path') +local address = require('aconf.path.address') local store = require('aconf.persistence') return function(name) local res = new() - local addr = pth.join('/service', name) - local eaddr = pth.join(addr, 'enabled') + local addr = address.join('/service', name) + local eaddr = address.join(addr, 'enabled') res.enabled = fld.Boolean{addr=eaddr, required=true} - res.status = fld.String{addr=pth.join(addr, 'status'), editable=false} + res.status = fld.String{ + addr=address.join(addr, 'status'), editable=false + } local function is_enabled() return store:get(eaddr) end local enabled -- cgit v1.2.3