1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00

Update luci-base

This commit is contained in:
Ycarus 2018-05-09 15:20:50 +02:00
parent f7b2096fa2
commit b2999bb6b2
64 changed files with 2089 additions and 2008 deletions

View file

@ -12,8 +12,7 @@ LUCI_TYPE:=mod
LUCI_BASENAME:=base LUCI_BASENAME:=base
LUCI_TITLE:=LuCI core libraries LUCI_TITLE:=LuCI core libraries
LUCI_DEPENDS:=+lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc LUCI_DEPENDS:=+lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc +liblucihttp-lua
LUCI_EXTRA_DEPENDS:=libuci-lua (>= 2018-01-01)
PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2 PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2
PKG_SOURCE_URL:=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/luasrcdiet PKG_SOURCE_URL:=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/luasrcdiet

View file

@ -218,12 +218,13 @@ var cbi_validators = {
((ipv4only == 1) && cbi_validators.ip4addr.apply(this)); ((ipv4only == 1) && cbi_validators.ip4addr.apply(this));
}, },
'hostname': function() 'hostname': function(strict)
{ {
if (this.length <= 253) if (this.length <= 253)
return (this.match(/^[a-zA-Z0-9]+$/) != null || return (this.match(/^[a-zA-Z0-9_]+$/) != null ||
(this.match(/^[a-zA-Z0-9_][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$/) && (this.match(/^[a-zA-Z0-9_][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$/) &&
this.match(/[^0-9.]/))); this.match(/[^0-9.]/))) &&
(!strict || !this.match(/^_/));
return false; return false;
}, },

View file

@ -39,7 +39,7 @@ XHR = function()
this._xmlHttp.abort(); this._xmlHttp.abort();
} }
this.get = function(url,data,callback) this.get = function(url,data,callback,timeout)
{ {
this.reinit(); this.reinit();
@ -56,6 +56,9 @@ XHR = function()
xhr.open('GET', url, true); xhr.open('GET', url, true);
if (!isNaN(timeout))
xhr.timeout = timeout;
xhr.onreadystatechange = function() xhr.onreadystatechange = function()
{ {
if (xhr.readyState == 4) { if (xhr.readyState == 4) {
@ -76,7 +79,7 @@ XHR = function()
xhr.send(null); xhr.send(null);
} }
this.post = function(url,data,callback) this.post = function(url,data,callback,timeout)
{ {
this.reinit(); this.reinit();
@ -90,6 +93,10 @@ XHR = function()
} }
xhr.open('POST', url, true); xhr.open('POST', url, true);
if (!isNaN(timeout))
xhr.timeout = timeout;
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send(code); xhr.send(code);
} }
@ -168,7 +175,7 @@ XHR.get = function(url, data, callback)
(new XHR()).get(url, data, callback); (new XHR()).get(url, data, callback);
} }
XHR.poll = function(interval, url, data, callback) XHR.poll = function(interval, url, data, callback, post)
{ {
if (isNaN(interval) || interval < 1) if (isNaN(interval) || interval < 1)
interval = 5; interval = 5;
@ -181,22 +188,38 @@ XHR.poll = function(interval, url, data, callback)
for (var i = 0, e = XHR._q[0]; i < XHR._q.length; e = XHR._q[++i]) for (var i = 0, e = XHR._q[0]; i < XHR._q.length; e = XHR._q[++i])
{ {
if (!(XHR._t % e.interval) && !e.xhr.busy()) if (!(XHR._t % e.interval) && !e.xhr.busy())
e.xhr.get(e.url, e.data, e.callback); e.xhr[post ? 'post' : 'get'](e.url, e.data, e.callback, e.interval * 1000 - 5);
} }
XHR._t++; XHR._t++;
}; };
} }
XHR._q.push({ var e = {
interval: interval, interval: interval,
callback: callback, callback: callback,
url: url, url: url,
data: data, data: data,
xhr: new XHR() xhr: new XHR()
}); };
XHR._q.push(e);
XHR.run(); XHR.run();
return e;
}
XHR.stop = function(e)
{
for (var i = 0; XHR._q && XHR._q[i]; i++) {
if (XHR._q[i] === e) {
e.xhr.cancel();
XHR._q.splice(i, 1);
return true;
}
}
return false;
} }
XHR.halt = function() XHR.halt = function()

View file

@ -199,13 +199,13 @@ function macaddr(val)
return ip.checkmac(val) and true or false return ip.checkmac(val) and true or false
end end
function hostname(val) function hostname(val, strict)
if val and (#val < 254) and ( if val and (#val < 254) and (
val:match("^[a-zA-Z_]+$") or val:match("^[a-zA-Z_]+$") or
(val:match("^[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*[a-zA-Z0-9]$") and (val:match("^[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*[a-zA-Z0-9]$") and
val:match("[^0-9%.]")) val:match("[^0-9%.]"))
) then ) then
return true return (not strict or not val:match("^_"))
end end
return false return false
end end

View file

@ -75,11 +75,16 @@ function error404(message)
http.status(404, "Not Found") http.status(404, "Not Found")
message = message or "Not Found" message = message or "Not Found"
require("luci.template") local function render()
if not util.copcall(luci.template.render, "error404") then local template = require "luci.template"
template.render("error404")
end
if not util.copcall(render) then
http.prepare_content("text/plain") http.prepare_content("text/plain")
http.write(message) http.write(message)
end end
return false return false
end end
@ -113,7 +118,8 @@ function httpdispatch(request, prefix)
end end
end end
for node in pathinfo:gmatch("[^/]+") do local node
for node in pathinfo:gmatch("[^/%z]+") do
r[#r+1] = node r[#r+1] = node
end end
@ -136,8 +142,7 @@ local function require_post_security(target)
if (type(required_val) == "string" and if (type(required_val) == "string" and
request_val ~= required_val) or request_val ~= required_val) or
(required_val == true and (required_val == true and request_val == nil)
(request_val == nil or request_val == ""))
then then
return false return false
end end
@ -346,15 +351,23 @@ function dispatch(request)
ifattr = function(...) return _ifattr(...) end; ifattr = function(...) return _ifattr(...) end;
attr = function(...) return _ifattr(true, ...) end; attr = function(...) return _ifattr(true, ...) end;
url = build_url; url = build_url;
}, {__index=function(table, key) }, {__index=function(tbl, key)
if key == "controller" then if key == "controller" then
return build_url() return build_url()
elseif key == "REQUEST_URI" then elseif key == "REQUEST_URI" then
return build_url(unpack(ctx.requestpath)) return build_url(unpack(ctx.requestpath))
elseif key == "FULL_REQUEST_URI" then
local url = { http.getenv("SCRIPT_NAME"), http.getenv("PATH_INFO") }
local query = http.getenv("QUERY_STRING")
if query and #query > 0 then
url[#url+1] = "?"
url[#url+1] = query
end
return table.concat(url, "")
elseif key == "token" then elseif key == "token" then
return ctx.authtoken return ctx.authtoken
else else
return rawget(table, key) or _G[key] return rawget(tbl, key) or _G[key]
end end
end}) end})
end end
@ -429,6 +442,13 @@ function dispatch(request)
ctx.authuser = sdat.username ctx.authuser = sdat.username
end end
if track.cors and http.getenv("REQUEST_METHOD") == "OPTIONS" then
luci.http.status(200, "OK")
luci.http.header("Access-Control-Allow-Origin", http.getenv("HTTP_ORIGIN") or "*")
luci.http.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
return
end
if c and require_post_security(c.target) then if c and require_post_security(c.target) then
if not test_post_security(c) then if not test_post_security(c) then
return return
@ -650,6 +670,23 @@ function node(...)
return c return c
end end
function lookup(...)
local i, path = nil, {}
for i = 1, select('#', ...) do
local name, arg = nil, tostring(select(i, ...))
for name in arg:gmatch("[^/]+") do
path[#path+1] = name
end
end
for i = #path, 1, -1 do
local node = context.treecache[table.concat(path, ".", 1, i)]
if node and (i == #path or node.leaf) then
return node, build_url(unpack(path))
end
end
end
function _create_node(path) function _create_node(path)
if #path == 0 then if #path == 0 then
return context.tree return context.tree
@ -791,7 +828,16 @@ local function _cbi(self, ...)
local state = nil local state = nil
local i, res
for i, res in ipairs(maps) do for i, res in ipairs(maps) do
if util.instanceof(res, cbi.SimpleForm) then
io.stderr:write("Model %s returns SimpleForm but is dispatched via cbi(),\n"
% self.model)
io.stderr:write("please change %s to use the form() action instead.\n"
% table.concat(context.request, "/"))
end
res.flow = config res.flow = config
local cstate = res:parse() local cstate = res:parse()
if cstate and (not state or cstate < state) then if cstate and (not state or cstate < state) then
@ -884,7 +930,7 @@ end
function cbi(model, config) function cbi(model, config)
return { return {
type = "cbi", type = "cbi",
post = { ["cbi.submit"] = "1" }, post = { ["cbi.submit"] = true },
config = config, config = config,
model = model, model = model,
target = _cbi target = _cbi
@ -912,6 +958,7 @@ local function _form(self, ...)
local maps = luci.cbi.load(self.model, ...) local maps = luci.cbi.load(self.model, ...)
local state = nil local state = nil
local i, res
for i, res in ipairs(maps) do for i, res in ipairs(maps) do
local cstate = res:parse() local cstate = res:parse()
if cstate and (not state or cstate < state) then if cstate and (not state or cstate < state) then
@ -930,7 +977,7 @@ end
function form(model) function form(model)
return { return {
type = "cbi", type = "cbi",
post = { ["cbi.submit"] = "1" }, post = { ["cbi.submit"] = true },
model = model, model = model,
target = _form target = _form
} }

View file

@ -116,8 +116,8 @@ Create a new dispatching node and define common parameters.
---[[ ---[[
Fetch or create a dispatching node without setting the target module or Fetch or create a dispatching node without setting the target module or
enabling the node. enabling the node.
@class function @class function
@name get @name get
@param ... Virtual path @param ... Virtual path
@ -133,6 +133,15 @@ Fetch or create a new dispatching node.
@return Dispatching tree node @return Dispatching tree node
]] ]]
---[[
Lookup node in dispatching tree.
@class function
@name lookup
@param ... Virtual path
@return Node object, canonical url or nil if the path was not found.
]]
---[[ ---[[
Alias the first (lowest order) page automatically Alias the first (lowest order) page automatically

View file

@ -1,18 +1,21 @@
-- Copyright 2008 Steven Barth <steven@midlink.org> -- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2010-2018 Jo-Philipp Wich <jo@mein.io>
-- Licensed to the public under the Apache License 2.0. -- Licensed to the public under the Apache License 2.0.
local ltn12 = require "luci.ltn12"
local protocol = require "luci.http.protocol"
local util = require "luci.util" local util = require "luci.util"
local string = require "string"
local coroutine = require "coroutine" local coroutine = require "coroutine"
local table = require "table" local table = require "table"
local lhttp = require "lucihttp"
local nixio = require "nixio"
local ltn12 = require "luci.ltn12"
local ipairs, pairs, next, type, tostring, error = local table, ipairs, pairs, type, tostring, tonumber, error =
ipairs, pairs, next, type, tostring, error table, ipairs, pairs, type, tostring, tonumber, error
module "luci.http" module "luci.http"
HTTP_MAX_CONTENT = 1024*8 -- 8 kB maximum content size
context = util.threadlocal() context = util.threadlocal()
Request = util.class() Request = util.class()
@ -28,7 +31,7 @@ function Request.__init__(self, env, sourcein, sinkerr)
self.message = { self.message = {
env = env, env = env,
headers = {}, headers = {},
params = protocol.urldecode_params(env.QUERY_STRING or ""), params = urldecode_params(env.QUERY_STRING or ""),
} }
self.parsed_input = false self.parsed_input = false
@ -73,10 +76,7 @@ function Request.content(self)
end end
function Request.getcookie(self, name) function Request.getcookie(self, name)
local c = string.gsub(";" .. (self:getenv("HTTP_COOKIE") or "") .. ";", "%s*;%s*", ";") return lhttp.header_attribute("cookie; " .. (self:getenv("HTTP_COOKIE") or ""), name)
local p = ";" .. name .. "=(.-);"
local i, j, value = c:find(p)
return value and urldecode(value)
end end
function Request.getenv(self, name) function Request.getenv(self, name)
@ -90,40 +90,34 @@ end
function Request.setfilehandler(self, callback) function Request.setfilehandler(self, callback)
self.filehandler = callback self.filehandler = callback
-- If input has already been parsed then any files are either in temporary files if not self.parsed_input then
-- or are in self.message.params[key] return
if self.parsed_input then end
for param, value in pairs(self.message.params) do
repeat -- If input has already been parsed then uploads are stored as unlinked
-- We're only interested in files -- temporary files pointed to by open file handles in the parameter
if (not value["file"]) then break end -- value table. Loop all params, and invoke the file callback for any
-- If we were able to write to temporary file -- param with an open file handle.
if (value["fd"]) then local name, value
fd = value["fd"] for name, value in pairs(self.message.params) do
local eof = false if type(value) == "table" then
repeat while value.fd do
filedata = fd:read(1024) local data = value.fd:read(1024)
if (filedata:len() < 1024) then local eof = (not data or data == "")
eof = true
end callback(value, data, eof)
callback({ name=value["name"], file=value["file"] }, filedata, eof)
until (eof) if eof then
fd:close() value.fd:close()
value["fd"] = nil value.fd = nil
-- We had to read into memory
else
-- There should only be one numbered value in table - the data
for k, v in ipairs(value) do
callback({ name=value["name"], file=value["file"] }, v, true)
end end
end end
until true
end end
end end
end end
function Request._parse_input(self) function Request._parse_input(self)
protocol.parse_message_body( parse_message_body(
self.input, self.input,
self.message, self.message,
self.filehandler self.filehandler
@ -254,23 +248,307 @@ function redirect(url)
end end
function build_querystring(q) function build_querystring(q)
local s = { "?" } local s, n, k, v = {}, 1, nil, nil
for k, v in pairs(q) do for k, v in pairs(q) do
if #s > 1 then s[#s+1] = "&" end s[n+0] = (n == 1) and "?" or "&"
s[n+1] = util.urlencode(k)
s[#s+1] = urldecode(k) s[n+2] = "="
s[#s+1] = "=" s[n+3] = util.urlencode(v)
s[#s+1] = urldecode(v) n = n + 4
end end
return table.concat(s, "") return table.concat(s, "")
end end
urldecode = protocol.urldecode urldecode = util.urldecode
urlencode = protocol.urlencode urlencode = util.urlencode
function write_json(x) function write_json(x)
util.serialize_json(x, write) util.serialize_json(x, write)
end end
-- from given url or string. Returns a table with urldecoded values.
-- Simple parameters are stored as string values associated with the parameter
-- name within the table. Parameters with multiple values are stored as array
-- containing the corresponding values.
function urldecode_params(url, tbl)
local parser, name
local params = tbl or { }
parser = lhttp.urlencoded_parser(function (what, buffer, length)
if what == parser.TUPLE then
name, value = nil, nil
elseif what == parser.NAME then
name = lhttp.urldecode(buffer)
elseif what == parser.VALUE and name then
params[name] = lhttp.urldecode(buffer) or ""
end
return true
end)
if parser then
parser:parse((url or ""):match("[^?]*$"))
parser:parse(nil)
end
return params
end
-- separated by "&". Tables are encoded as parameters with multiple values by
-- repeating the parameter name with each value.
function urlencode_params(tbl)
local k, v
local n, enc = 1, {}
for k, v in pairs(tbl) do
if type(v) == "table" then
local i, v2
for i, v2 in ipairs(v) do
if enc[1] then
enc[n] = "&"
n = n + 1
end
enc[n+0] = lhttp.urlencode(k)
enc[n+1] = "="
enc[n+2] = lhttp.urlencode(v2)
n = n + 3
end
else
if enc[1] then
enc[n] = "&"
n = n + 1
end
enc[n+0] = lhttp.urlencode(k)
enc[n+1] = "="
enc[n+2] = lhttp.urlencode(v)
n = n + 3
end
end
return table.concat(enc, "")
end
-- Content-Type. Stores all extracted data associated with its parameter name
-- in the params table within the given message object. Multiple parameter
-- values are stored as tables, ordinary ones as strings.
-- If an optional file callback function is given then it is feeded with the
-- file contents chunk by chunk and only the extracted file name is stored
-- within the params table. The callback function will be called subsequently
-- with three arguments:
-- o Table containing decoded (name, file) and raw (headers) mime header data
-- o String value containing a chunk of the file data
-- o Boolean which indicates wheather the current chunk is the last one (eof)
function mimedecode_message_body(src, msg, file_cb)
local parser, header, field
local len, maxlen = 0, tonumber(msg.env.CONTENT_LENGTH or nil)
parser, err = lhttp.multipart_parser(msg.env.CONTENT_TYPE, function (what, buffer, length)
if what == parser.PART_INIT then
field = { }
elseif what == parser.HEADER_NAME then
header = buffer:lower()
elseif what == parser.HEADER_VALUE and header then
if header:lower() == "content-disposition" and
lhttp.header_attribute(buffer, nil) == "form-data"
then
field.name = lhttp.header_attribute(buffer, "name")
field.file = lhttp.header_attribute(buffer, "filename")
field[1] = field.file
end
if field.headers then
field.headers[header] = buffer
else
field.headers = { [header] = buffer }
end
elseif what == parser.PART_BEGIN then
return not field.file
elseif what == parser.PART_DATA and field.name and length > 0 then
if field.file then
if file_cb then
file_cb(field, buffer, false)
msg.params[field.name] = msg.params[field.name] or field
else
if not field.fd then
field.fd = nixio.mkstemp(field.name)
end
if field.fd then
field.fd:write(buffer)
msg.params[field.name] = msg.params[field.name] or field
end
end
else
field.value = buffer
end
elseif what == parser.PART_END and field.name then
if field.file and msg.params[field.name] then
if file_cb then
file_cb(field, "", true)
elseif field.fd then
field.fd:seek(0, "set")
end
else
local val = msg.params[field.name]
if type(val) == "table" then
val[#val+1] = field.value or ""
elseif val ~= nil then
msg.params[field.name] = { val, field.value or "" }
else
msg.params[field.name] = field.value or ""
end
end
field = nil
elseif what == parser.ERROR then
err = buffer
end
return true
end)
return ltn12.pump.all(src, function (chunk)
len = len + (chunk and #chunk or 0)
if maxlen and len > maxlen + 2 then
return nil, "Message body size exceeds Content-Length"
end
if not parser or not parser:parse(chunk) then
return nil, err
end
return true
end)
end
-- Content-Type. Stores all extracted data associated with its parameter name
-- in the params table within the given message object. Multiple parameter
-- values are stored as tables, ordinary ones as strings.
function urldecode_message_body(src, msg)
local err, name, value, parser
local len, maxlen = 0, tonumber(msg.env.CONTENT_LENGTH or nil)
parser = lhttp.urlencoded_parser(function (what, buffer, length)
if what == parser.TUPLE then
name, value = nil, nil
elseif what == parser.NAME then
name = lhttp.urldecode(buffer, lhttp.DECODE_PLUS)
elseif what == parser.VALUE and name then
local val = msg.params[name]
if type(val) == "table" then
val[#val+1] = lhttp.urldecode(buffer, lhttp.DECODE_PLUS) or ""
elseif val ~= nil then
msg.params[name] = { val, lhttp.urldecode(buffer, lhttp.DECODE_PLUS) or "" }
else
msg.params[name] = lhttp.urldecode(buffer, lhttp.DECODE_PLUS) or ""
end
elseif what == parser.ERROR then
err = buffer
end
return true
end)
return ltn12.pump.all(src, function (chunk)
len = len + (chunk and #chunk or 0)
if maxlen and len > maxlen + 2 then
return nil, "Message body size exceeds Content-Length"
elseif len > HTTP_MAX_CONTENT then
return nil, "Message body size exceeds maximum allowed length"
end
if not parser or not parser:parse(chunk) then
return nil, err
end
return true
end)
end
-- This function will examine the Content-Type within the given message object
-- to select the appropriate content decoder.
-- Currently the application/x-www-urlencoded and application/form-data
-- mime types are supported. If the encountered content encoding can't be
-- handled then the whole message body will be stored unaltered as "content"
-- property within the given message object.
function parse_message_body(src, msg, filecb)
if msg.env.CONTENT_LENGTH or msg.env.REQUEST_METHOD == "POST" then
local ctype = lhttp.header_attribute(msg.env.CONTENT_TYPE, nil)
-- Is it multipart/mime ?
if ctype == "multipart/form-data" then
return mimedecode_message_body(src, msg, filecb)
-- Is it application/x-www-form-urlencoded ?
elseif ctype == "application/x-www-form-urlencoded" then
return urldecode_message_body(src, msg)
end
-- Unhandled encoding
-- If a file callback is given then feed it chunk by chunk, else
-- store whole buffer in message.content
local sink
-- If we have a file callback then feed it
if type(filecb) == "function" then
local meta = {
name = "raw",
encoding = msg.env.CONTENT_TYPE
}
sink = function( chunk )
if chunk then
return filecb(meta, chunk, false)
else
return filecb(meta, nil, true)
end
end
-- ... else append to .content
else
msg.content = ""
msg.content_length = 0
sink = function( chunk )
if chunk then
if ( msg.content_length + #chunk ) <= HTTP_MAX_CONTENT then
msg.content = msg.content .. chunk
msg.content_length = msg.content_length + #chunk
return true
else
return nil, "POST data exceeds maximum allowed length"
end
end
return true
end
end
-- Pump data...
while true do
local ok, err = ltn12.pump.step( src, sink )
if not ok and err then
return nil, err
elseif not ok then -- eof
return true
end
end
return true
end
return false
end

View file

@ -6,25 +6,24 @@ module "luci.http"
---[[ ---[[
Close the HTTP-Connection. Close the HTTP-Connection.
@class function
@class function @name close
@name close
]] ]]
---[[ ---[[
Return the request content if the request was of unknown type. Return the request content if the request was of unknown type.
@class function @class function
@name content @name content
@return HTTP request body @return HTTP request body
@return HTTP request body length @return HTTP request body length
]] ]]
---[[ ---[[
Get a certain HTTP input value or a table of all input values. Get a certain HTTP input value or a table of all input values.
@class function @class function
@name formvalue @name formvalue
@param name Name of the GET or POST variable to fetch @param name Name of the GET or POST variable to fetch
@param noparse Don't parse POST data before getting the value @param noparse Don't parse POST data before getting the value
@return HTTP input value or table of all input value @return HTTP input value or table of all input value
@ -33,8 +32,8 @@ Get a certain HTTP input value or a table of all input values.
---[[ ---[[
Get a table of all HTTP input values with a certain prefix. Get a table of all HTTP input values with a certain prefix.
@class function @class function
@name formvaluetable @name formvaluetable
@param prefix Prefix @param prefix Prefix
@return Table of all HTTP input values with given prefix @return Table of all HTTP input values with given prefix
]] ]]
@ -42,18 +41,18 @@ Get a table of all HTTP input values with a certain prefix.
---[[ ---[[
Get the value of a certain HTTP-Cookie. Get the value of a certain HTTP-Cookie.
@class function @class function
@name getcookie @name getcookie
@param name Cookie Name @param name Cookie Name
@return String containing cookie data @return String containing cookie data
]] ]]
---[[ ---[[
Get the value of a certain HTTP environment variable Get the value of a certain HTTP environment variable
or the environment table itself. or the environment table itself.
@class function
@name getenv @class function
@name getenv
@param name Environment variable @param name Environment variable
@return HTTP environment value or environment table @return HTTP environment value or environment table
]] ]]
@ -61,41 +60,41 @@ or the environment table itself.
---[[ ---[[
Set a handler function for incoming user file uploads. Set a handler function for incoming user file uploads.
@class function @class function
@name setfilehandler @name setfilehandler
@param callback Handler function @param callback Handler function
]] ]]
---[[ ---[[
Send a HTTP-Header. Send a HTTP-Header.
@class function @class function
@name header @name header
@param key Header key @param key Header key
@param value Header value @param value Header value
]] ]]
---[[ ---[[
Set the mime type of following content data. Set the mime type of following content data.
@class function @class function
@name prepare_content @name prepare_content
@param mime Mimetype of following content @param mime Mimetype of following content
]] ]]
---[[ ---[[
Get the RAW HTTP input source Get the RAW HTTP input source
@class function @class function
@name source @name source
@return HTTP LTN12 source @return HTTP LTN12 source
]] ]]
---[[ ---[[
Set the HTTP status code and status message. Set the HTTP status code and status message.
@class function @class function
@name status @name status
@param code Status code @param code Status code
@param message Status message @param message Status message
]] ]]
@ -105,8 +104,9 @@ Send a chunk of content data to the client.
This function is as a valid LTN12 sink. This function is as a valid LTN12 sink.
If the content chunk is nil this function will automatically invoke close. If the content chunk is nil this function will automatically invoke close.
@class function
@name write @class function
@name write
@param content Content chunk @param content Content chunk
@param src_err Error object from source (optional) @param src_err Error object from source (optional)
@see close @see close
@ -115,51 +115,146 @@ If the content chunk is nil this function will automatically invoke close.
---[[ ---[[
Splice data from a filedescriptor to the client. Splice data from a filedescriptor to the client.
@class function @class function
@name splice @name splice
@param fp File descriptor @param fp File descriptor
@param size Bytes to splice (optional) @param size Bytes to splice (optional)
]] ]]
---[[ ---[[
Redirects the client to a new URL and closes the connection. Redirects the client to a new URL and closes the connection.
@class function @class function
@name redirect @name redirect
@param url Target URL @param url Target URL
]] ]]
---[[ ---[[
Create a querystring out of a table of key - value pairs. Create a querystring out of a table of key - value pairs.
@class function @class function
@name build_querystring @name build_querystring
@param table Query string source table @param table Query string source table
@return Encoded HTTP query string @return Encoded HTTP query string
]] ]]
---[[ ---[[
Return the URL-decoded equivalent of a string. Return the URL-decoded equivalent of a string.
@class function
@name urldecode
@param str URL-encoded string @param str URL-encoded string
@param no_plus Don't decode + to " " @param no_plus Don't decode + to " "
@return URL-decoded string @return URL-decoded string
@see urlencode @see urlencode
]] ]]
---[[ ---[[
Return the URL-encoded equivalent of a string. Return the URL-encoded equivalent of a string.
@class function
@name urlencode
@param str Source string @param str Source string
@return URL-encoded string @return URL-encoded string
@see urldecode @see urldecode
]] ]]
---[[ ---[[
Send the given data as JSON encoded string. Send the given data as JSON encoded string.
@class function @class function
@name write_json @name write_json
@param data Data to send @param data Data to send
]] ]]
---[[
Extract and split urlencoded data pairs, separated bei either "&" or ";"
from given url or string. Returns a table with urldecoded values.
Simple parameters are stored as string values associated with the parameter
name within the table. Parameters with multiple values are stored as array
containing the corresponding values.
@class function
@name urldecode_params
@param url The url or string which contains x-www-urlencoded form data
@param tbl Use the given table for storing values (optional)
@return Table containing the urldecoded parameters
@see urlencode_params
]]
---[[
Encode each key-value-pair in given table to x-www-urlencoded format,
separated by "&".
Tables are encoded as parameters with multiple values by repeating the
parameter name with each value.
@class function
@name urlencode_params
@param tbl Table with the values
@return String containing encoded values
@see urldecode_params
]]
---[[
Decode a mime encoded http message body with multipart/form-data Content-Type.
Stores all extracted data associated with its parameter name
in the params table within the given message object. Multiple parameter
values are stored as tables, ordinary ones as strings.
If an optional file callback function is given then it is feeded with the
file contents chunk by chunk and only the extracted file name is stored
within the params table. The callback function will be called subsequently
with three arguments:
o Table containing decoded (name, file) and raw (headers) mime header data
o String value containing a chunk of the file data
o Boolean which indicates wheather the current chunk is the last one (eof)
@class function
@name mimedecode_message_body
@param src Ltn12 source function
@param msg HTTP message object
@param filecb File callback function (optional)
@return Value indicating successful operation (not nil means "ok")
@return String containing the error if unsuccessful
@see parse_message_header
]]
---[[
Decode an urlencoded http message body with application/x-www-urlencoded
Content-Type.
Stores all extracted data associated with its parameter name in the params
table within the given message object. Multiple parameter values are stored
as tables, ordinary ones as strings.
@class function
@name urldecode_message_body
@param src Ltn12 source function
@param msg HTTP message object
@return Value indicating successful operation (not nil means "ok")
@return String containing the error if unsuccessful
@see parse_message_header
]]
---[[
Try to extract and decode a http message body from the given ltn12 source.
This function will examine the Content-Type within the given message object
to select the appropriate content decoder.
Currently the application/x-www-urlencoded and application/form-data
mime types are supported. If the encountered content encoding can't be
handled then the whole message body will be stored unaltered as "content"
property within the given message object.
@class function
@name parse_message_body
@param src Ltn12 source function
@param msg HTTP message object
@param filecb File data callback (optional, see mimedecode_message_body())
@return Value indicating successful operation (not nil means "ok")
@return String containing the error if unsuccessful
@see parse_message_header
]]

View file

@ -1,649 +0,0 @@
-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
-- This class contains several functions useful for http message- and content
-- decoding and to retrive form data from raw http messages.
module("luci.http.protocol", package.seeall)
local ltn12 = require("luci.ltn12")
HTTP_MAX_CONTENT = 1024*8 -- 8 kB maximum content size
-- the "+" sign to " " - and return the decoded string.
function urldecode( str, no_plus )
local function __chrdec( hex )
return string.char( tonumber( hex, 16 ) )
end
if type(str) == "string" then
if not no_plus then
str = str:gsub( "+", " " )
end
str = str:gsub( "%%([a-fA-F0-9][a-fA-F0-9])", __chrdec )
end
return str
end
-- from given url or string. Returns a table with urldecoded values.
-- Simple parameters are stored as string values associated with the parameter
-- name within the table. Parameters with multiple values are stored as array
-- containing the corresponding values.
function urldecode_params( url, tbl )
local params = tbl or { }
if url:find("?") then
url = url:gsub( "^.+%?([^?]+)", "%1" )
end
for pair in url:gmatch( "[^&;]+" ) do
-- find key and value
local key = urldecode( pair:match("^([^=]+)") )
local val = urldecode( pair:match("^[^=]+=(.+)$") )
-- store
if type(key) == "string" and key:len() > 0 then
if type(val) ~= "string" then val = "" end
if not params[key] then
params[key] = val
elseif type(params[key]) ~= "table" then
params[key] = { params[key], val }
else
table.insert( params[key], val )
end
end
end
return params
end
function urlencode( str )
local function __chrenc( chr )
return string.format(
"%%%02x", string.byte( chr )
)
end
if type(str) == "string" then
str = str:gsub(
"([^a-zA-Z0-9$_%-%.%~])",
__chrenc
)
end
return str
end
-- separated by "&". Tables are encoded as parameters with multiple values by
-- repeating the parameter name with each value.
function urlencode_params( tbl )
local enc = ""
for k, v in pairs(tbl) do
if type(v) == "table" then
for i, v2 in ipairs(v) do
enc = enc .. ( #enc > 0 and "&" or "" ) ..
urlencode(k) .. "=" .. urlencode(v2)
end
else
enc = enc .. ( #enc > 0 and "&" or "" ) ..
urlencode(k) .. "=" .. urlencode(v)
end
end
return enc
end
-- (Internal function)
-- Initialize given parameter and coerce string into table when the parameter
-- already exists.
local function __initval( tbl, key )
if tbl[key] == nil then
tbl[key] = ""
elseif type(tbl[key]) == "string" then
tbl[key] = { tbl[key], "" }
else
table.insert( tbl[key], "" )
end
end
-- (Internal function)
-- Initialize given file parameter.
local function __initfileval( tbl, key, filename, fd )
if tbl[key] == nil then
tbl[key] = { file=filename, fd=fd, name=key, "" }
else
table.insert( tbl[key], "" )
end
end
-- (Internal function)
-- Append given data to given parameter, either by extending the string value
-- or by appending it to the last string in the parameter's value table.
local function __appendval( tbl, key, chunk )
if type(tbl[key]) == "table" then
tbl[key][#tbl[key]] = tbl[key][#tbl[key]] .. chunk
else
tbl[key] = tbl[key] .. chunk
end
end
-- (Internal function)
-- Finish the value of given parameter, either by transforming the string value
-- or - in the case of multi value parameters - the last element in the
-- associated values table.
local function __finishval( tbl, key, handler )
if handler then
if type(tbl[key]) == "table" then
tbl[key][#tbl[key]] = handler( tbl[key][#tbl[key]] )
else
tbl[key] = handler( tbl[key] )
end
end
end
-- Table of our process states
local process_states = { }
-- Extract "magic", the first line of a http message.
-- Extracts the message type ("get", "post" or "response"), the requested uri
-- or the status code if the line descripes a http response.
process_states['magic'] = function( msg, chunk, err )
if chunk ~= nil then
-- ignore empty lines before request
if #chunk == 0 then
return true, nil
end
-- Is it a request?
local method, uri, http_ver = chunk:match("^([A-Z]+) ([^ ]+) HTTP/([01]%.[019])$")
-- Yup, it is
if method then
msg.type = "request"
msg.request_method = method:lower()
msg.request_uri = uri
msg.http_version = tonumber( http_ver )
msg.headers = { }
-- We're done, next state is header parsing
return true, function( chunk )
return process_states['headers']( msg, chunk )
end
-- Is it a response?
else
local http_ver, code, message = chunk:match("^HTTP/([01]%.[019]) ([0-9]+) ([^\r\n]+)$")
-- Is a response
if code then
msg.type = "response"
msg.status_code = code
msg.status_message = message
msg.http_version = tonumber( http_ver )
msg.headers = { }
-- We're done, next state is header parsing
return true, function( chunk )
return process_states['headers']( msg, chunk )
end
end
end
end
-- Can't handle it
return nil, "Invalid HTTP message magic"
end
-- Extract headers from given string.
process_states['headers'] = function( msg, chunk )
if chunk ~= nil then
-- Look for a valid header format
local hdr, val = chunk:match( "^([A-Za-z][A-Za-z0-9%-_]+): +(.+)$" )
if type(hdr) == "string" and hdr:len() > 0 and
type(val) == "string" and val:len() > 0
then
msg.headers[hdr] = val
-- Valid header line, proceed
return true, nil
elseif #chunk == 0 then
-- Empty line, we won't accept data anymore
return false, nil
else
-- Junk data
return nil, "Invalid HTTP header received"
end
else
return nil, "Unexpected EOF"
end
end
-- data line by line with the trailing \r\n stripped of.
function header_source( sock )
return ltn12.source.simplify( function()
local chunk, err, part = sock:receive("*l")
-- Line too long
if chunk == nil then
if err ~= "timeout" then
return nil, part
and "Line exceeds maximum allowed length"
or "Unexpected EOF"
else
return nil, err
end
-- Line ok
elseif chunk ~= nil then
-- Strip trailing CR
chunk = chunk:gsub("\r$","")
return chunk, nil
end
end )
end
-- Content-Type. Stores all extracted data associated with its parameter name
-- in the params table within the given message object. Multiple parameter
-- values are stored as tables, ordinary ones as strings.
-- If an optional file callback function is given then it is feeded with the
-- file contents chunk by chunk and only the extracted file name is stored
-- within the params table. The callback function will be called subsequently
-- with three arguments:
-- o Table containing decoded (name, file) and raw (headers) mime header data
-- o String value containing a chunk of the file data
-- o Boolean which indicates wheather the current chunk is the last one (eof)
function mimedecode_message_body( src, msg, filecb )
if msg and msg.env.CONTENT_TYPE then
msg.mime_boundary = msg.env.CONTENT_TYPE:match("^multipart/form%-data; boundary=(.+)$")
end
if not msg.mime_boundary then
return nil, "Invalid Content-Type found"
end
local tlen = 0
local inhdr = false
local field = nil
local store = nil
local lchunk = nil
local function parse_headers( chunk, field )
local stat
repeat
chunk, stat = chunk:gsub(
"^([A-Z][A-Za-z0-9%-_]+): +([^\r\n]+)\r\n",
function(k,v)
field.headers[k] = v
return ""
end
)
until stat == 0
chunk, stat = chunk:gsub("^\r\n","")
-- End of headers
if stat > 0 then
if field.headers["Content-Disposition"] then
if field.headers["Content-Disposition"]:match("^form%-data; ") then
field.name = field.headers["Content-Disposition"]:match('name="(.-)"')
field.file = field.headers["Content-Disposition"]:match('filename="(.+)"$')
end
end
if not field.headers["Content-Type"] then
field.headers["Content-Type"] = "text/plain"
end
if field.name and field.file and filecb then
__initval( msg.params, field.name )
__appendval( msg.params, field.name, field.file )
store = filecb
elseif field.name and field.file then
local nxf = require "nixio"
local fd = nxf.mkstemp(field.name)
__initfileval ( msg.params, field.name, field.file, fd )
if fd then
store = function(hdr, buf, eof)
fd:write(buf)
if (eof) then
fd:seek(0, "set")
end
end
else
store = function( hdr, buf, eof )
__appendval( msg.params, field.name, buf )
end
end
elseif field.name then
__initval( msg.params, field.name )
store = function( hdr, buf, eof )
__appendval( msg.params, field.name, buf )
end
else
store = nil
end
return chunk, true
end
return chunk, false
end
local function snk( chunk )
tlen = tlen + ( chunk and #chunk or 0 )
if msg.env.CONTENT_LENGTH and tlen > tonumber(msg.env.CONTENT_LENGTH) + 2 then
return nil, "Message body size exceeds Content-Length"
end
if chunk and not lchunk then
lchunk = "\r\n" .. chunk
elseif lchunk then
local data = lchunk .. ( chunk or "" )
local spos, epos, found
repeat
spos, epos = data:find( "\r\n--" .. msg.mime_boundary .. "\r\n", 1, true )
if not spos then
spos, epos = data:find( "\r\n--" .. msg.mime_boundary .. "--\r\n", 1, true )
end
if spos then
local predata = data:sub( 1, spos - 1 )
if inhdr then
predata, eof = parse_headers( predata, field )
if not eof then
return nil, "Invalid MIME section header"
elseif not field.name then
return nil, "Invalid Content-Disposition header"
end
end
if store then
store( field, predata, true )
end
field = { headers = { } }
found = found or true
data, eof = parse_headers( data:sub( epos + 1, #data ), field )
inhdr = not eof
end
until not spos
if found then
-- We found at least some boundary. Save
-- the unparsed remaining data for the
-- next chunk.
lchunk, data = data, nil
else
-- There was a complete chunk without a boundary. Parse it as headers or
-- append it as data, depending on our current state.
if inhdr then
lchunk, eof = parse_headers( data, field )
inhdr = not eof
else
-- We're inside data, so append the data. Note that we only append
-- lchunk, not all of data, since there is a chance that chunk
-- contains half a boundary. Assuming that each chunk is at least the
-- boundary in size, this should prevent problems
store( field, lchunk, false )
lchunk, chunk = chunk, nil
end
end
end
return true
end
return ltn12.pump.all( src, snk )
end
-- Content-Type. Stores all extracted data associated with its parameter name
-- in the params table within the given message object. Multiple parameter
-- values are stored as tables, ordinary ones as strings.
function urldecode_message_body( src, msg )
local tlen = 0
local lchunk = nil
local function snk( chunk )
tlen = tlen + ( chunk and #chunk or 0 )
if msg.env.CONTENT_LENGTH and tlen > tonumber(msg.env.CONTENT_LENGTH) + 2 then
return nil, "Message body size exceeds Content-Length"
elseif tlen > HTTP_MAX_CONTENT then
return nil, "Message body size exceeds maximum allowed length"
end
if not lchunk and chunk then
lchunk = chunk
elseif lchunk then
local data = lchunk .. ( chunk or "&" )
local spos, epos
repeat
spos, epos = data:find("^.-[;&]")
if spos then
local pair = data:sub( spos, epos - 1 )
local key = pair:match("^(.-)=")
local val = pair:match("=([^%s]*)%s*$")
if key and #key > 0 then
__initval( msg.params, key )
__appendval( msg.params, key, val )
__finishval( msg.params, key, urldecode )
end
data = data:sub( epos + 1, #data )
end
until not spos
lchunk = data
end
return true
end
return ltn12.pump.all( src, snk )
end
-- version, message headers and resulting CGI environment variables from the
-- given ltn12 source.
function parse_message_header( src )
local ok = true
local msg = { }
local sink = ltn12.sink.simplify(
function( chunk )
return process_states['magic']( msg, chunk )
end
)
-- Pump input data...
while ok do
-- get data
ok, err = ltn12.pump.step( src, sink )
-- error
if not ok and err then
return nil, err
-- eof
elseif not ok then
-- Process get parameters
if ( msg.request_method == "get" or msg.request_method == "post" ) and
msg.request_uri:match("?")
then
msg.params = urldecode_params( msg.request_uri )
else
msg.params = { }
end
-- Populate common environment variables
msg.env = {
CONTENT_LENGTH = msg.headers['Content-Length'];
CONTENT_TYPE = msg.headers['Content-Type'] or msg.headers['Content-type'];
REQUEST_METHOD = msg.request_method:upper();
REQUEST_URI = msg.request_uri;
SCRIPT_NAME = msg.request_uri:gsub("?.+$","");
SCRIPT_FILENAME = ""; -- XXX implement me
SERVER_PROTOCOL = "HTTP/" .. string.format("%.1f", msg.http_version);
QUERY_STRING = msg.request_uri:match("?")
and msg.request_uri:gsub("^.+?","") or ""
}
-- Populate HTTP_* environment variables
for i, hdr in ipairs( {
'Accept',
'Accept-Charset',
'Accept-Encoding',
'Accept-Language',
'Connection',
'Cookie',
'Host',
'Referer',
'User-Agent',
} ) do
local var = 'HTTP_' .. hdr:upper():gsub("%-","_")
local val = msg.headers[hdr]
msg.env[var] = val
end
end
end
return msg
end
-- This function will examine the Content-Type within the given message object
-- to select the appropriate content decoder.
-- Currently the application/x-www-urlencoded and application/form-data
-- mime types are supported. If the encountered content encoding can't be
-- handled then the whole message body will be stored unaltered as "content"
-- property within the given message object.
function parse_message_body( src, msg, filecb )
-- Is it multipart/mime ?
if msg.env.REQUEST_METHOD == "POST" and msg.env.CONTENT_TYPE and
msg.env.CONTENT_TYPE:match("^multipart/form%-data")
then
return mimedecode_message_body( src, msg, filecb )
-- Is it application/x-www-form-urlencoded ?
elseif msg.env.REQUEST_METHOD == "POST" and msg.env.CONTENT_TYPE and
msg.env.CONTENT_TYPE:match("^application/x%-www%-form%-urlencoded")
then
return urldecode_message_body( src, msg, filecb )
-- Unhandled encoding
-- If a file callback is given then feed it chunk by chunk, else
-- store whole buffer in message.content
else
local sink
-- If we have a file callback then feed it
if type(filecb) == "function" then
local meta = {
name = "raw",
encoding = msg.env.CONTENT_TYPE
}
sink = function( chunk )
if chunk then
return filecb(meta, chunk, false)
else
return filecb(meta, nil, true)
end
end
-- ... else append to .content
else
msg.content = ""
msg.content_length = 0
sink = function( chunk )
if chunk then
if ( msg.content_length + #chunk ) <= HTTP_MAX_CONTENT then
msg.content = msg.content .. chunk
msg.content_length = msg.content_length + #chunk
return true
else
return nil, "POST data exceeds maximum allowed length"
end
end
return true
end
end
-- Pump data...
while true do
local ok, err = ltn12.pump.step( src, sink )
if not ok and err then
return nil, err
elseif not ok then -- eof
return true
end
end
return true
end
end
statusmsg = {
[200] = "OK",
[206] = "Partial Content",
[301] = "Moved Permanently",
[302] = "Found",
[304] = "Not Modified",
[400] = "Bad Request",
[403] = "Forbidden",
[404] = "Not Found",
[405] = "Method Not Allowed",
[408] = "Request Time-out",
[411] = "Length Required",
[412] = "Precondition Failed",
[416] = "Requested range not satisfiable",
[500] = "Internal Server Error",
[503] = "Server Unavailable",
}

View file

@ -1,142 +0,0 @@
---[[
LuCI http protocol class.
This class contains several functions useful for http message- and content
decoding and to retrive form data from raw http messages.
]]
module "luci.http.protocol"
---[[
Decode an urlencoded string - optionally without decoding
the "+" sign to " " - and return the decoded string.
@class function
@name urldecode
@param str Input string in x-www-urlencoded format
@param no_plus Don't decode "+" signs to spaces
@return The decoded string
@see urlencode
]]
---[[
Extract and split urlencoded data pairs, separated bei either "&" or ";"
from given url or string. Returns a table with urldecoded values.
Simple parameters are stored as string values associated with the parameter
name within the table. Parameters with multiple values are stored as array
containing the corresponding values.
@class function
@name urldecode_params
@param url The url or string which contains x-www-urlencoded form data
@param tbl Use the given table for storing values (optional)
@return Table containing the urldecoded parameters
@see urlencode_params
]]
---[[
Encode given string to x-www-urlencoded format.
@class function
@name urlencode
@param str String to encode
@return String containing the encoded data
@see urldecode
]]
---[[
Encode each key-value-pair in given table to x-www-urlencoded format,
separated by "&". Tables are encoded as parameters with multiple values by
repeating the parameter name with each value.
@class function
@name urlencode_params
@param tbl Table with the values
@return String containing encoded values
@see urldecode_params
]]
---[[
Creates a ltn12 source from the given socket. The source will return it's
data line by line with the trailing \r\n stripped of.
@class function
@name header_source
@param sock Readable network socket
@return Ltn12 source function
]]
---[[
Decode a mime encoded http message body with multipart/form-data
Content-Type. Stores all extracted data associated with its parameter name
in the params table within the given message object. Multiple parameter
values are stored as tables, ordinary ones as strings.
If an optional file callback function is given then it is feeded with the
file contents chunk by chunk and only the extracted file name is stored
within the params table. The callback function will be called subsequently
with three arguments:
o Table containing decoded (name, file) and raw (headers) mime header data
o String value containing a chunk of the file data
o Boolean which indicates wheather the current chunk is the last one (eof)
@class function
@name mimedecode_message_body
@param src Ltn12 source function
@param msg HTTP message object
@param filecb File callback function (optional)
@return Value indicating successful operation (not nil means "ok")
@return String containing the error if unsuccessful
@see parse_message_header
]]
---[[
Decode an urlencoded http message body with application/x-www-urlencoded
Content-Type. Stores all extracted data associated with its parameter name
in the params table within the given message object. Multiple parameter
values are stored as tables, ordinary ones as strings.
@class function
@name urldecode_message_body
@param src Ltn12 source function
@param msg HTTP message object
@return Value indicating successful operation (not nil means "ok")
@return String containing the error if unsuccessful
@see parse_message_header
]]
---[[
Try to extract an http message header including information like protocol
version, message headers and resulting CGI environment variables from the
given ltn12 source.
@class function
@name parse_message_header
@param src Ltn12 source function
@return HTTP message object
@see parse_message_body
]]
---[[
Try to extract and decode a http message body from the given ltn12 source.
This function will examine the Content-Type within the given message object
to select the appropriate content decoder.
Currently the application/x-www-urlencoded and application/form-data
mime types are supported. If the encountered content encoding can't be
handled then the whole message body will be stored unaltered as "content"
property within the given message object.
@class function
@name parse_message_body
@param src Ltn12 source function
@param msg HTTP message object
@param filecb File data callback (optional, see mimedecode_message_body())
@return Value indicating successful operation (not nil means "ok")
@return String containing the error if unsuccessful
@see parse_message_header
]]
---[[
Table containing human readable messages for several http status codes.
@class table
]]

View file

@ -1,110 +0,0 @@
-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
-- This class provides basic ETag handling and implements most of the
-- conditional HTTP/1.1 headers specified in RFC2616 Sct. 14.24 - 14.28 .
module("luci.http.protocol.conditionals", package.seeall)
local date = require("luci.http.protocol.date")
function mk_etag( stat )
if stat ~= nil then
return string.format( '"%x-%x-%x"', stat.ino, stat.size, stat.mtime )
end
end
-- Test whether the given message object contains an "If-Match" header and
-- compare it against the given stat object.
function if_match( req, stat )
local h = req.headers
local etag = mk_etag( stat )
-- Check for matching resource
if type(h['If-Match']) == "string" then
for ent in h['If-Match']:gmatch("([^, ]+)") do
if ( ent == '*' or ent == etag ) and stat ~= nil then
return true
end
end
return false, 412
end
return true
end
-- Test whether the given message object contains an "If-Modified-Since" header
-- and compare it against the given stat object.
function if_modified_since( req, stat )
local h = req.headers
-- Compare mtimes
if type(h['If-Modified-Since']) == "string" then
local since = date.to_unix( h['If-Modified-Since'] )
if stat == nil or since < stat.mtime then
return true
end
return false, 304, {
["ETag"] = mk_etag( stat );
["Date"] = date.to_http( os.time() );
["Last-Modified"] = date.to_http( stat.mtime )
}
end
return true
end
-- Test whether the given message object contains an "If-None-Match" header and
-- compare it against the given stat object.
function if_none_match( req, stat )
local h = req.headers
local etag = mk_etag( stat )
local method = req.env and req.env.REQUEST_METHOD or "GET"
-- Check for matching resource
if type(h['If-None-Match']) == "string" then
for ent in h['If-None-Match']:gmatch("([^, ]+)") do
if ( ent == '*' or ent == etag ) and stat ~= nil then
if method == "GET" or method == "HEAD" then
return false, 304, {
["ETag"] = etag;
["Date"] = date.to_http( os.time() );
["Last-Modified"] = date.to_http( stat.mtime )
}
else
return false, 412
end
end
end
end
return true
end
-- The If-Range header is currently not implemented due to the lack of general
-- byte range stuff in luci.http.protocol . This function will always return
-- false, 412 to indicate a failed precondition.
function if_range( req, stat )
-- Sorry, no subranges (yet)
return false, 412
end
-- Test whether the given message object contains an "If-Unmodified-Since"
-- header and compare it against the given stat object.
function if_unmodified_since( req, stat )
local h = req.headers
-- Compare mtimes
if type(h['If-Unmodified-Since']) == "string" then
local since = date.to_unix( h['If-Unmodified-Since'] )
if stat ~= nil and since <= stat.mtime then
return false, 412
end
end
return true
end

View file

@ -1,85 +0,0 @@
---[[
LuCI http protocol implementation - HTTP/1.1 bits.
This class provides basic ETag handling and implements most of the
conditional HTTP/1.1 headers specified in RFC2616 Sct. 14.24 - 14.28 .
]]
module "luci.http.protocol.conditionals"
---[[
Implement 14.19 / ETag.
@class function
@name mk_etag
@param stat A file.stat structure
@return String containing the generated tag suitable for ETag headers
]]
---[[
14.24 / If-Match
Test whether the given message object contains an "If-Match" header and
compare it against the given stat object.
@class function
@name if_match
@param req HTTP request message object
@param stat A file.stat object
@return Boolean indicating whether the precondition is ok
@return Alternative status code if the precondition failed
]]
---[[
14.25 / If-Modified-Since
Test whether the given message object contains an "If-Modified-Since" header
and compare it against the given stat object.
@class function
@name if_modified_since
@param req HTTP request message object
@param stat A file.stat object
@return Boolean indicating whether the precondition is ok
@return Alternative status code if the precondition failed
@return Table containing extra HTTP headers if the precondition failed
]]
---[[
14.26 / If-None-Match
Test whether the given message object contains an "If-None-Match" header and
compare it against the given stat object.
@class function
@name if_none_match
@param req HTTP request message object
@param stat A file.stat object
@return Boolean indicating whether the precondition is ok
@return Alternative status code if the precondition failed
@return Table containing extra HTTP headers if the precondition failed
]]
---[[
14.27 / If-Range
The If-Range header is currently not implemented due to the lack of general
byte range stuff in luci.http.protocol . This function will always return
false, 412 to indicate a failed precondition.
@class function
@name if_range
@param req HTTP request message object
@param stat A file.stat object
@return Boolean indicating whether the precondition is ok
@return Alternative status code if the precondition failed
]]
---[[
14.28 / If-Unmodified-Since
Test whether the given message object contains an "If-Unmodified-Since"
header and compare it against the given stat object.
@class function
@name if_unmodified_since
@param req HTTP request message object
@param stat A file.stat object
@return Boolean indicating whether the precondition is ok
@return Alternative status code if the precondition failed
]]

View file

@ -1,87 +0,0 @@
-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
-- This class contains functions to parse, compare and format http dates.
module("luci.http.protocol.date", package.seeall)
require("luci.sys.zoneinfo")
MONTHS = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"
}
function tz_offset(tz)
if type(tz) == "string" then
-- check for a numeric identifier
local s, v = tz:match("([%+%-])([0-9]+)")
if s == '+' then s = 1 else s = -1 end
if v then v = tonumber(v) end
if s and v then
return s * 60 * ( math.floor( v / 100 ) * 60 + ( v % 100 ) )
-- lookup symbolic tz
elseif luci.sys.zoneinfo.OFFSET[tz:lower()] then
return luci.sys.zoneinfo.OFFSET[tz:lower()]
end
end
-- bad luck
return 0
end
function to_unix(date)
local wd, day, mon, yr, hr, min, sec, tz = date:match(
"([A-Z][a-z][a-z]), ([0-9]+) " ..
"([A-Z][a-z][a-z]) ([0-9]+) " ..
"([0-9]+):([0-9]+):([0-9]+) " ..
"([A-Z0-9%+%-]+)"
)
if day and mon and yr and hr and min and sec then
-- find month
local month = 1
for i = 1, 12 do
if MONTHS[i] == mon then
month = i
break
end
end
-- convert to epoch time
return tz_offset(tz) + os.time( {
year = yr,
month = month,
day = day,
hour = hr,
min = min,
sec = sec
} )
end
return 0
end
function to_http(time)
return os.date( "%a, %d %b %Y %H:%M:%S GMT", time )
end
function compare(d1, d2)
if d1:match("[^0-9]") then d1 = to_unix(d1) end
if d2:match("[^0-9]") then d2 = to_unix(d2) end
if d1 == d2 then
return 0
elseif d1 < d2 then
return -1
else
return 1
end
end

View file

@ -1,46 +0,0 @@
---[[
LuCI http protocol implementation - date helper class.
This class contains functions to parse, compare and format http dates.
]]
module "luci.http.protocol.date"
---[[
Return the time offset in seconds between the UTC and given time zone.
@class function
@name tz_offset
@param tz Symbolic or numeric timezone specifier
@return Time offset to UTC in seconds
]]
---[[
Parse given HTTP date string and convert it to unix epoch time.
@class function
@name to_unix
@param data String containing the date
@return Unix epoch time
]]
---[[
Convert the given unix epoch time to valid HTTP date string.
@class function
@name to_http
@param time Unix epoch time
@return String containing the formatted date
]]
---[[
Compare two dates which can either be unix epoch times or HTTP date strings.
@class function
@name compare
@param d1 The first date or epoch time to compare
@param d2 The first date or epoch time to compare
@return -1 - if d1 is lower then d2
@return 0 - if both dates are equal
@return 1 - if d1 is higher then d2
]]

View file

@ -1,78 +0,0 @@
-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
-- This class provides functions to guess mime types from file extensions and
-- vice versa.
module("luci.http.protocol.mime", package.seeall)
require("luci.util")
MIME_TYPES = {
["txt"] = "text/plain";
["js"] = "text/javascript";
["css"] = "text/css";
["htm"] = "text/html";
["html"] = "text/html";
["patch"] = "text/x-patch";
["c"] = "text/x-csrc";
["h"] = "text/x-chdr";
["o"] = "text/x-object";
["ko"] = "text/x-object";
["bmp"] = "image/bmp";
["gif"] = "image/gif";
["png"] = "image/png";
["jpg"] = "image/jpeg";
["jpeg"] = "image/jpeg";
["svg"] = "image/svg+xml";
["zip"] = "application/zip";
["pdf"] = "application/pdf";
["xml"] = "application/xml";
["xsl"] = "application/xml";
["doc"] = "application/msword";
["ppt"] = "application/vnd.ms-powerpoint";
["xls"] = "application/vnd.ms-excel";
["odt"] = "application/vnd.oasis.opendocument.text";
["odp"] = "application/vnd.oasis.opendocument.presentation";
["pl"] = "application/x-perl";
["sh"] = "application/x-shellscript";
["php"] = "application/x-php";
["deb"] = "application/x-deb";
["iso"] = "application/x-cd-image";
["tgz"] = "application/x-compressed-tar";
["mp3"] = "audio/mpeg";
["ogg"] = "audio/x-vorbis+ogg";
["wav"] = "audio/x-wav";
["mpg"] = "video/mpeg";
["mpeg"] = "video/mpeg";
["avi"] = "video/x-msvideo";
}
-- "application/octet-stream" if the extension is unknown.
function to_mime(filename)
if type(filename) == "string" then
local ext = filename:match("[^%.]+$")
if ext and MIME_TYPES[ext:lower()] then
return MIME_TYPES[ext:lower()]
end
end
return "application/octet-stream"
end
-- given mime-type is unknown.
function to_ext(mimetype)
if type(mimetype) == "string" then
for ext, type in luci.util.kspairs( MIME_TYPES ) do
if type == mimetype then
return ext
end
end
end
return nil
end

View file

@ -1,34 +0,0 @@
---[[
LuCI http protocol implementation - mime helper class.
This class provides functions to guess mime types from file extensions and
vice versa.
]]
module "luci.http.protocol.mime"
---[[
MIME mapping table containg extension - mimetype relations.
@class table
]]
---[[
Extract extension from a filename and return corresponding mime-type or
"application/octet-stream" if the extension is unknown.
@class function
@name to_mime
@param filename The filename for which the mime type is guessed
@return String containign the determined mime type
]]
---[[
Return corresponding extension for a given mime type or nil if the
given mime-type is unknown.
@class function
@name to_ext
@param mimetype The mimetype to retrieve the extension from
@return String with the extension or nil for unknown type
]]

View file

@ -20,12 +20,14 @@ module "luci.model.ipkg"
-- Internal action function -- Internal action function
local function _action(cmd, ...) local function _action(cmd, ...)
local pkg = "" local cmdline = { ipkg, cmd }
local k, v
for k, v in pairs({...}) do for k, v in pairs({...}) do
pkg = pkg .. " '" .. v:gsub("'", "") .. "'" cmdline[#cmdline+1] = util.shellquote(v)
end end
local c = "%s %s %s >/tmp/opkg.stdout 2>/tmp/opkg.stderr" %{ ipkg, cmd, pkg } local c = "%s >/tmp/opkg.stdout 2>/tmp/opkg.stderr" % table.concat(cmdline, " ")
local r = os.execute(c) local r = os.execute(c)
local e = fs.readfile("/tmp/opkg.stderr") local e = fs.readfile("/tmp/opkg.stderr")
local o = fs.readfile("/tmp/opkg.stdout") local o = fs.readfile("/tmp/opkg.stdout")
@ -74,17 +76,17 @@ local function _parselist(rawdata)
end end
-- Internal lookup function -- Internal lookup function
local function _lookup(act, pkg) local function _lookup(cmd, pkg)
local cmd = ipkg .. " " .. act local cmdline = { ipkg, cmd }
if pkg then if pkg then
cmd = cmd .. " '" .. pkg:gsub("'", "") .. "'" cmdline[#cmdline+1] = util.shellquote(pkg)
end end
-- OPKG sometimes kills the whole machine because it sucks -- OPKG sometimes kills the whole machine because it sucks
-- Therefore we have to use a sucky approach too and use -- Therefore we have to use a sucky approach too and use
-- tmpfiles instead of directly reading the output -- tmpfiles instead of directly reading the output
local tmpfile = os.tmpname() local tmpfile = os.tmpname()
os.execute(cmd .. (" >%s 2>/dev/null" % tmpfile)) os.execute("%s >%s 2>/dev/null" %{ table.concat(cmdline, " "), tmpfile })
local data = _parselist(io.lines(tmpfile)) local data = _parselist(io.lines(tmpfile))
os.remove(tmpfile) os.remove(tmpfile)
@ -123,9 +125,12 @@ end
-- List helper -- List helper
local function _list(action, pat, cb) local function _list(action, pat, cb)
local fd = io.popen(ipkg .. " " .. action .. local cmdline = { ipkg, action }
(pat and (" '%s'" % pat:gsub("'", "")) or "")) if pat then
cmdline[#cmdline+1] = util.shellquote(pat)
end
local fd = io.popen(table.concat(cmdline, " "))
if fd then if fd then
local name, version, sz, desc local name, version, sz, desc
while true do while true do

View file

@ -629,7 +629,7 @@ function get_interface(self, i)
if _interfaces[i] or _wifi_iface(i) then if _interfaces[i] or _wifi_iface(i) then
return interface(i) return interface(i)
else else
local netid = _wifi_netid_by_netname(i) local netid = _wifi_netid_by_sid(i)
return netid and interface(netid) return netid and interface(netid)
end end
end end

View file

@ -2,13 +2,12 @@
-- Licensed to the public under the Apache License 2.0. -- Licensed to the public under the Apache License 2.0.
local os = require "os" local os = require "os"
local uci = require "uci"
local util = require "luci.util" local util = require "luci.util"
local table = require "table" local table = require "table"
local setmetatable, rawget, rawset = setmetatable, rawget, rawset local setmetatable, rawget, rawset = setmetatable, rawget, rawset
local require, getmetatable = require, getmetatable local require, getmetatable, assert = require, getmetatable, assert
local error, pairs, ipairs = error, pairs, ipairs local error, pairs, ipairs = error, pairs, ipairs
local type, tostring, tonumber, unpack = type, tostring, tonumber, unpack local type, tostring, tonumber, unpack = type, tostring, tonumber, unpack
@ -20,151 +19,436 @@ local type, tostring, tonumber, unpack = type, tostring, tonumber, unpack
-- reloaded. -- reloaded.
module "luci.model.uci" module "luci.model.uci"
cursor = uci.cursor local ERRSTR = {
"Invalid command",
"Invalid argument",
"Method not found",
"Entry not found",
"No data",
"Permission denied",
"Timeout",
"Not supported",
"Unknown error",
"Connection failed"
}
APIVERSION = uci.APIVERSION local session_id = nil
function cursor_state() local function call(cmd, args)
return cursor(nil, "/var/state") if type(args) == "table" and session_id then
args.ubus_rpc_session = session_id
end
return util.ubus("uci", cmd, args)
end end
inst = cursor() function cursor()
inst_state = cursor_state() return _M
end
local Cursor = getmetatable(inst) function cursor_state()
return _M
end
function Cursor.apply(self, configlist, command) function substate(self)
return self
end
function get_confdir(self)
return "/etc/config"
end
function get_savedir(self)
return "/tmp/.uci"
end
function get_session_id(self)
return session_id
end
function set_confdir(self, directory)
return false
end
function set_savedir(self, directory)
return false
end
function set_session_id(self, id)
session_id = id
return true
end
function load(self, config)
return true
end
function save(self, config)
return true
end
function unload(self, config)
return true
end
function changes(self, config)
local rv = call("changes", { config = config })
local res = {}
if type(rv) == "table" and type(rv.changes) == "table" then
local package, changes
for package, changes in pairs(rv.changes) do
res[package] = {}
local _, change
for _, change in ipairs(changes) do
local operation, section, option, value = unpack(change)
if option and value and operation ~= "add" then
res[package][section] = res[package][section] or { }
if operation == "list-add" then
local v = res[package][section][option]
if type(v) == "table" then
v[#v+1] = value or ""
elseif v ~= nil then
res[package][section][option] = { v, value }
else
res[package][section][option] = { value }
end
else
res[package][section][option] = value or ""
end
else
res[package][section] = res[package][section] or {}
res[package][section][".type"] = option or ""
end
end
end
end
return res
end
function revert(self, config)
local _, err = call("revert", { config = config })
return (err == nil), ERRSTR[err]
end
function commit(self, config)
local _, err = call("commit", { config = config })
return (err == nil), ERRSTR[err]
end
--[[
function apply(self, configs, command)
local _, config
assert(not command, "Apply command not supported anymore")
if type(configs) == "table" then
for _, config in ipairs(configs) do
call("service", "event", {
type = "config.change",
data = { package = config }
})
end
end
end
]]
function foreach(self, config, stype, callback)
if type(callback) == "function" then
local rv, err = call("get", {
config = config,
type = stype
})
if type(rv) == "table" and type(rv.values) == "table" then
local sections = { }
local res = false
local index = 1
local _, section
for _, section in pairs(rv.values) do
section[".index"] = section[".index"] or index
sections[index] = section
index = index + 1
end
table.sort(sections, function(a, b)
return a[".index"] < b[".index"]
end)
for _, section in ipairs(sections) do
local continue = callback(section)
res = true
if continue == false then
break
end
end
return res
else
return false, ERRSTR[err] or "No data"
end
else
return false, "Invalid argument"
end
end
local function _get(self, operation, config, section, option)
if section == nil then
return nil
elseif type(option) == "string" and option:byte(1) ~= 46 then
local rv, err = call(operation, {
config = config,
section = section,
option = option
})
if type(rv) == "table" then
return rv.value or nil
elseif err then
return false, ERRSTR[err]
else
return nil
end
elseif option == nil then
local values = self:get_all(config, section)
if values then
return values[".type"], values[".name"]
else
return nil
end
else
return false, "Invalid argument"
end
end
function get(self, ...)
return _get(self, "get", ...)
end
function get_state(self, ...)
return _get(self, "state", ...)
end
function get_all(self, config, section)
local rv, err = call("get", {
config = config,
section = section
})
if type(rv) == "table" and type(rv.values) == "table" then
return rv.values
elseif err then
return false, ERRSTR[err]
else
return nil
end
end
function get_bool(self, ...)
local val = self:get(...)
return (val == "1" or val == "true" or val == "yes" or val == "on")
end
function get_first(self, config, stype, option, default)
local rv = default
self:foreach(config, stype, function(s)
local val = not option and s[".name"] or s[option]
if type(default) == "number" then
val = tonumber(val)
elseif type(default) == "boolean" then
val = (val == "1" or val == "true" or
val == "yes" or val == "on")
end
if val ~= nil then
rv = val
return false
end
end)
return rv
end
function get_list(self, config, section, option)
if config and section and option then
local val = self:get(config, section, option)
return (type(val) == "table" and val or { val })
end
return { }
end
function section(self, config, stype, name, values)
local rv, err = call("add", {
config = config,
type = stype,
name = name,
values = values
})
if type(rv) == "table" then
return rv.section
elseif err then
return false, ERRSTR[err]
else
return nil
end
end
function add(self, config, stype)
return self:section(config, stype)
end
function set(self, config, section, option, value)
if value == nil then
local sname, err = self:section(config, option, section)
return (not not sname), err
else
local _, err = call("set", {
config = config,
section = section,
values = { [option] = value }
})
return (err == nil), ERRSTR[err]
end
end
function set_list(self, config, section, option, value)
if section == nil or option == nil then
return false
elseif value == nil or (type(value) == "table" and #value == 0) then
return self:delete(config, section, option)
elseif type(value) == "table" then
return self:set(config, section, option, value)
else
return self:set(config, section, option, { value })
end
end
function tset(self, config, section, values)
local _, err = call("set", {
config = config,
section = section,
values = values
})
return (err == nil), ERRSTR[err]
end
function reorder(self, config, section, index)
local sections
if type(section) == "string" and type(index) == "number" then
local pos = 0
sections = { }
self:foreach(config, nil, function(s)
if pos == index then
pos = pos + 1
end
if s[".name"] ~= section then
pos = pos + 1
sections[pos] = s[".name"]
else
sections[index + 1] = section
end
end)
elseif type(section) == "table" then
sections = section
else
return false, "Invalid argument"
end
local _, err = call("order", {
config = config,
sections = sections
})
return (err == nil), ERRSTR[err]
end
function delete(self, config, section, option)
local _, err = call("delete", {
config = config,
section = section,
option = option
})
return (err == nil), ERRSTR[err]
end
function delete_all(self, config, stype, comparator)
local _, err
if type(comparator) == "table" then
_, err = call("delete", {
config = config,
type = stype,
match = comparator
})
elseif type(comparator) == "function" then
local rv = call("get", {
config = config,
type = stype
})
if type(rv) == "table" and type(rv.values) == "table" then
local sname, section
for sname, section in pairs(rv.values) do
if comparator(section) then
_, err = call("delete", {
config = config,
section = sname
})
end
end
end
elseif comparator == nil then
_, err = call("delete", {
config = config,
type = stype
})
else
return false, "Invalid argument"
end
return (err == nil), ERRSTR[err]
end
function apply(self, configlist, command)
configlist = self:_affected(configlist) configlist = self:_affected(configlist)
if command then if command then
return { "/sbin/luci-reload", unpack(configlist) } return { "/sbin/luci-reload", unpack(configlist) }
else else
return os.execute("/sbin/luci-reload %s >/dev/null 2>&1" return os.execute("/sbin/luci-reload %s >/dev/null 2>&1"
% table.concat(configlist, " ")) % util.shellquote(table.concat(configlist, " ")))
end end
end end
-- returns a boolean whether to delete the current section (optional)
function Cursor.delete_all(self, config, stype, comparator)
local del = {}
if type(comparator) == "table" then
local tbl = comparator
comparator = function(section)
for k, v in pairs(tbl) do
if section[k] ~= v then
return false
end
end
return true
end
end
local function helper (section)
if not comparator or comparator(section) then
del[#del+1] = section[".name"]
end
end
self:foreach(config, stype, helper)
for i, j in ipairs(del) do
self:delete(config, j)
end
end
function Cursor.section(self, config, type, name, values)
local stat = true
if name then
stat = self:set(config, name, type)
else
name = self:add(config, type)
stat = name and true
end
if stat and values then
stat = self:tset(config, name, values)
end
return stat and name
end
function Cursor.tset(self, config, section, values)
local stat = true
for k, v in pairs(values) do
if k:sub(1, 1) ~= "." then
stat = stat and self:set(config, section, k, v)
end
end
return stat
end
function Cursor.get_bool(self, ...)
local val = self:get(...)
return ( val == "1" or val == "true" or val == "yes" or val == "on" )
end
function Cursor.get_list(self, config, section, option)
if config and section and option then
local val = self:get(config, section, option)
return ( type(val) == "table" and val or { val } )
end
return {}
end
function Cursor.get_first(self, conf, stype, opt, def)
local rv = def
self:foreach(conf, stype,
function(s)
local val = not opt and s['.name'] or s[opt]
if type(def) == "number" then
val = tonumber(val)
elseif type(def) == "boolean" then
val = (val == "1" or val == "true" or
val == "yes" or val == "on")
end
if val ~= nil then
rv = val
return false
end
end)
return rv
end
function Cursor.set_list(self, config, section, option, value)
if config and section and option then
if not value or #value == 0 then
return self:delete(config, section, option)
end
return self:set(
config, section, option,
( type(value) == "table" and value or { value } )
)
end
return false
end
-- Return a list of initscripts affected by configuration changes. -- Return a list of initscripts affected by configuration changes.
function Cursor._affected(self, configlist) function _affected(self, configlist)
configlist = type(configlist) == "table" and configlist or {configlist} configlist = type(configlist) == "table" and configlist or { configlist }
local c = cursor()
c:load("ucitrack")
-- Resolve dependencies -- Resolve dependencies
local reloadlist = {} local reloadlist = { }
local function _resolve_deps(name) local function _resolve_deps(name)
local reload = {name} local reload = { name }
local deps = {} local deps = { }
c:foreach("ucitrack", name, self:foreach("ucitrack", name,
function(section) function(section)
if section.affects then if section.affects then
for i, aff in ipairs(section.affects) do for i, aff in ipairs(section.affects) do
@ -173,7 +457,9 @@ function Cursor._affected(self, configlist)
end end
end) end)
local i, dep
for i, dep in ipairs(deps) do for i, dep in ipairs(deps) do
local j, add
for j, add in ipairs(_resolve_deps(dep)) do for j, add in ipairs(_resolve_deps(dep)) do
reload[#reload+1] = add reload[#reload+1] = add
end end
@ -183,7 +469,9 @@ function Cursor._affected(self, configlist)
end end
-- Collect initscripts -- Collect initscripts
local j, config
for j, config in ipairs(configlist) do for j, config in ipairs(configlist) do
local i, e
for i, e in ipairs(_resolve_deps(config)) do for i, e in ipairs(_resolve_deps(config)) do
if not util.contains(reloadlist, e) then if not util.contains(reloadlist, e) then
reloadlist[#reloadlist+1] = e reloadlist[#reloadlist+1] = e
@ -193,44 +481,3 @@ function Cursor._affected(self, configlist)
return reloadlist return reloadlist
end end
-- curser, means it the parent unloads or loads configs, the sub state will
-- do so as well.
function Cursor.substate(self)
Cursor._substates = Cursor._substates or { }
Cursor._substates[self] = Cursor._substates[self] or cursor_state()
return Cursor._substates[self]
end
local _load = Cursor.load
function Cursor.load(self, ...)
if Cursor._substates and Cursor._substates[self] then
_load(Cursor._substates[self], ...)
end
return _load(self, ...)
end
local _unload = Cursor.unload
function Cursor.unload(self, ...)
if Cursor._substates and Cursor._substates[self] then
_unload(Cursor._substates[self], ...)
end
return _unload(self, ...)
end

View file

@ -14,224 +14,226 @@ module "luci.model.uci"
---[[ ---[[
Create a new UCI-Cursor. Create a new UCI-Cursor.
@class function @class function
@name cursor @name cursor
@return UCI-Cursor @return UCI-Cursor
]] ]]
---[[ ---[[
Create a new Cursor initialized to the state directory. Create a new Cursor initialized to the state directory.
@class function @class function
@name cursor_state @name cursor_state
@return UCI cursor @return UCI cursor
]] ]]
---[[ ---[[
Applies UCI configuration changes Applies UCI configuration changes
@class function @class function
@name Cursor.apply @name Cursor.apply
@param configlist List of UCI configurations @param configlist List of UCI configurations
@param command Don't apply only return the command @param command Don't apply only return the command
]] ]]
---[[ ---[[
Delete all sections of a given type that match certain criteria. Delete all sections of a given type that match certain criteria.
@class function @class function
@name Cursor.delete_all @name Cursor.delete_all
@param config UCI config @param config UCI config
@param type UCI section type @param type UCI section type
@param comparator Function that will be called for each section and @param comparator Function that will be called for each section and returns
returns a boolean whether to delete the current section (optional) a boolean whether to delete the current section (optional)
]] ]]
---[[ ---[[
Create a new section and initialize it with data. Create a new section and initialize it with data.
@class function @class function
@name Cursor.section @name Cursor.section
@param config UCI config @param config UCI config
@param type UCI section type @param type UCI section type
@param name UCI section name (optional) @param name UCI section name (optional)
@param values Table of key - value pairs to initialize the section with @param values Table of key - value pairs to initialize the section with
@return Name of created section @return Name of created section
]] ]]
---[[ ---[[
Updated the data of a section using data from a table. Updated the data of a section using data from a table.
@class function @class function
@name Cursor.tset @name Cursor.tset
@param config UCI config @param config UCI config
@param section UCI section name (optional) @param section UCI section name (optional)
@param values Table of key - value pairs to update the section with @param values Table of key - value pairs to update the section with
]] ]]
---[[ ---[[
Get a boolean option and return it's value as true or false. Get a boolean option and return it's value as true or false.
@class function @class function
@name Cursor.get_bool @name Cursor.get_bool
@param config UCI config @param config UCI config
@param section UCI section name @param section UCI section name
@param option UCI option @param option UCI option
@return Boolean @return Boolean
]] ]]
---[[ ---[[
Get an option or list and return values as table. Get an option or list and return values as table.
@class function @class function
@name Cursor.get_list @name Cursor.get_list
@param config UCI config @param config UCI config
@param section UCI section name @param section UCI section name
@param option UCI option @param option UCI option
@return table. If the option was not found, you will simply get @return table. If the option was not found, you will simply get an empty
-- an empty table. table.
]] ]]
---[[ ---[[
Get the given option from the first section with the given type. Get the given option from the first section with the given type.
@class function @class function
@name Cursor.get_first @name Cursor.get_first
@param config UCI config @param config UCI config
@param type UCI section type @param type UCI section type
@param option UCI option (optional) @param option UCI option (optional)
@param default Default value (optional) @param default Default value (optional)
@return UCI value @return UCI value
]] ]]
---[[ ---[[
Set given values as list. Setting a list option to an empty list Set given values as list. Setting a list option to an empty list
has the same effect as deleting the option. has the same effect as deleting the option.
@class function @class function
@name Cursor.set_list @name Cursor.set_list
@param config UCI config @param config UCI config
@param section UCI section name @param section UCI section name
@param option UCI option @param option UCI option
@param value value or table. Raw values will become a single item table. @param value Value or table. Non-table values will be set as single
@return Boolean whether operation succeeded item UCI list.
@return Boolean whether operation succeeded
]] ]]
---[[ ---[[
Create a sub-state of this cursor. The sub-state is tied to the parent Create a sub-state of this cursor.
curser, means it the parent unloads or loads configs, the sub state will The sub-state is tied to the parent curser, means it the parent unloads or
do so as well. loads configs, the sub state will do so as well.
@class function
@name Cursor.substate @class function
@return UCI state cursor tied to the parent cursor @name Cursor.substate
@return UCI state cursor tied to the parent cursor
]] ]]
---[[ ---[[
Add an anonymous section. Add an anonymous section.
@class function @class function
@name Cursor.add @name Cursor.add
@param config UCI config @param config UCI config
@param type UCI section type @param type UCI section type
@return Name of created section @return Name of created section
]] ]]
---[[ ---[[
Get a table of saved but uncommitted changes. Get a table of saved but uncommitted changes.
@class function @class function
@name Cursor.changes @name Cursor.changes
@param config UCI config @param config UCI config
@return Table of changes @return Table of changes
@see Cursor.save @see Cursor.save
]] ]]
---[[ ---[[
Commit saved changes. Commit saved changes.
@class function @class function
@name Cursor.commit @name Cursor.commit
@param config UCI config @param config UCI config
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
@see Cursor.revert @see Cursor.revert
@see Cursor.save @see Cursor.save
]] ]]
---[[ ---[[
Deletes a section or an option. Deletes a section or an option.
@class function @class function
@name Cursor.delete @name Cursor.delete
@param config UCI config @param config UCI config
@param section UCI section name @param section UCI section name
@param option UCI option (optional) @param option UCI option (optional)
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
]] ]]
---[[ ---[[
Call a function for every section of a certain type. Call a function for every section of a certain type.
@class function @class function
@name Cursor.foreach @name Cursor.foreach
@param config UCI config @param config UCI config
@param type UCI section type @param type UCI section type
@param callback Function to be called @param callback Function to be called
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
]] ]]
---[[ ---[[
Get a section type or an option Get a section type or an option
@class function @class function
@name Cursor.get @name Cursor.get
@param config UCI config @param config UCI config
@param section UCI section name @param section UCI section name
@param option UCI option (optional) @param option UCI option (optional)
@return UCI value @return UCI value
]] ]]
---[[ ---[[
Get all sections of a config or all values of a section. Get all sections of a config or all values of a section.
@class function @class function
@name Cursor.get_all @name Cursor.get_all
@param config UCI config @param config UCI config
@param section UCI section name (optional) @param section UCI section name (optional)
@return Table of UCI sections or table of UCI values @return Table of UCI sections or table of UCI values
]] ]]
---[[ ---[[
Manually load a config. Manually load a config.
@class function @class function
@name Cursor.load @name Cursor.load
@param config UCI config @param config UCI config
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
@see Cursor.save @see Cursor.save
@see Cursor.unload @see Cursor.unload
]] ]]
---[[ ---[[
Revert saved but uncommitted changes. Revert saved but uncommitted changes.
@class function @class function
@name Cursor.revert @name Cursor.revert
@param config UCI config @param config UCI config
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
@see Cursor.commit @see Cursor.commit
@see Cursor.save @see Cursor.save
]] ]]
---[[ ---[[
Saves changes made to a config to make them committable. Saves changes made to a config to make them committable.
@class function @class function
@name Cursor.save @name Cursor.save
@param config UCI config @param config UCI config
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
@see Cursor.load @see Cursor.load
@see Cursor.unload @see Cursor.unload
]] ]]
---[[ ---[[
@ -243,57 +245,74 @@ then a named section of the given type is created.
When invoked with four arguments `config`, `sectionname`, `optionname` and When invoked with four arguments `config`, `sectionname`, `optionname` and
`optionvalue` then the value of the specified option is set to the given value. `optionvalue` then the value of the specified option is set to the given value.
@class function @class function
@name Cursor.set @name Cursor.set
@param config UCI config @param config UCI config
@param section UCI section name @param section UCI section name
@param option UCI option or UCI section type @param option UCI option or UCI section type
@param value UCI value or nothing if you want to create a section @param value UCI value or nothing if you want to create a section
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
]] ]]
---[[ ---[[
Get the configuration directory. Get the configuration directory.
@class function @class function
@name Cursor.get_confdir @name Cursor.get_confdir
@return Configuration directory @return Configuration directory
]] ]]
---[[ ---[[
Get the directory for uncomitted changes. Get the directory for uncomitted changes.
@class function @class function
@name Cursor.get_savedir @name Cursor.get_savedir
@return Save directory @return Save directory
]]
---[[
Get the effective session ID.
@class function
@name Cursor.get_session_id
@return String containing the session ID
]] ]]
---[[ ---[[
Set the configuration directory. Set the configuration directory.
@class function @class function
@name Cursor.set_confdir @name Cursor.set_confdir
@param directory UCI configuration directory @param directory UCI configuration directory
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
]] ]]
---[[ ---[[
Set the directory for uncommited changes. Set the directory for uncommited changes.
@class function @class function
@name Cursor.set_savedir @name Cursor.set_savedir
@param directory UCI changes directory @param directory UCI changes directory
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
]]
---[[
Set the effective session ID.
@class function
@name Cursor.set_session_id
@param id String containing the session ID to set
@return Boolean whether operation succeeded
]] ]]
---[[ ---[[
Discard changes made to a config. Discard changes made to a config.
@class function @class function
@name Cursor.unload @name Cursor.unload
@param config UCI config @param config UCI config
@return Boolean whether operation succeeded @return Boolean whether operation succeeded
@see Cursor.load @see Cursor.load
@see Cursor.save @see Cursor.save
]] ]]

View file

@ -87,10 +87,10 @@ end
function httpget(url, stream, target) function httpget(url, stream, target)
if not target then if not target then
local source = stream and io.popen or luci.util.exec local source = stream and io.popen or luci.util.exec
return source("wget -qO- '"..url:gsub("'", "").."'") return source("wget -qO- %s" % luci.util.shellquote(url))
else else
return os.execute("wget -qO '%s' '%s'" % return os.execute("wget -qO %s %s" %
{target:gsub("'", ""), url:gsub("'", "")}) {luci.util.shellquote(target), luci.util.shellquote(url)})
end end
end end
@ -443,18 +443,11 @@ function user.checkpasswd(username, pass)
end end
function user.setpasswd(username, password) function user.setpasswd(username, password)
if password then return os.execute("(echo %s; sleep 1; echo %s) | passwd %s >/dev/null 2>&1" %{
password = password:gsub("'", [['"'"']]) luci.util.shellquote(password),
end luci.util.shellquote(password),
luci.util.shellquote(username)
if username then })
username = username:gsub("'", [['"'"']])
end
return os.execute(
"(echo '" .. password .. "'; sleep 1; echo '" .. password .. "') | " ..
"passwd '" .. username .. "' >/dev/null 2>&1"
)
end end

View file

@ -202,7 +202,7 @@ TZ = {
{ 'America/Winnipeg', 'CST6CDT,M3.2.0,M11.1.0' }, { 'America/Winnipeg', 'CST6CDT,M3.2.0,M11.1.0' },
{ 'America/Yakutat', 'AKST9AKDT,M3.2.0,M11.1.0' }, { 'America/Yakutat', 'AKST9AKDT,M3.2.0,M11.1.0' },
{ 'America/Yellowknife', 'MST7MDT,M3.2.0,M11.1.0' }, { 'America/Yellowknife', 'MST7MDT,M3.2.0,M11.1.0' },
{ 'Antarctica/Casey', '<+11>-11' }, { 'Antarctica/Casey', '<+08>-8' },
{ 'Antarctica/Davis', '<+07>-7' }, { 'Antarctica/Davis', '<+07>-7' },
{ 'Antarctica/DumontDUrville', '<+10>-10' }, { 'Antarctica/DumontDUrville', '<+10>-10' },
{ 'Antarctica/Macquarie', '<+11>-11' }, { 'Antarctica/Macquarie', '<+11>-11' },
@ -239,8 +239,8 @@ TZ = {
{ 'Asia/Dubai', '<+04>-4' }, { 'Asia/Dubai', '<+04>-4' },
{ 'Asia/Dushanbe', '<+05>-5' }, { 'Asia/Dushanbe', '<+05>-5' },
{ 'Asia/Famagusta', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, { 'Asia/Famagusta', 'EET-2EEST,M3.5.0/3,M10.5.0/4' },
{ 'Asia/Gaza', 'EET-2EEST,M3.5.6/1,M10.5.6/1' }, { 'Asia/Gaza', 'EET-2EEST,M3.4.6/1,M10.5.6/1' },
{ 'Asia/Hebron', 'EET-2EEST,M3.5.6/1,M10.5.6/1' }, { 'Asia/Hebron', 'EET-2EEST,M3.4.6/1,M10.5.6/1' },
{ 'Asia/Ho Chi Minh', '<+07>-7' }, { 'Asia/Ho Chi Minh', '<+07>-7' },
{ 'Asia/Hong Kong', 'HKT-8' }, { 'Asia/Hong Kong', 'HKT-8' },
{ 'Asia/Hovd', '<+07>-7' }, { 'Asia/Hovd', '<+07>-7' },

View file

@ -187,7 +187,9 @@ function switch_status(devs)
local switches = { } local switches = { }
for dev in devs:gmatch("[^%s,]+") do for dev in devs:gmatch("[^%s,]+") do
local ports = { } local ports = { }
local swc = io.popen("swconfig dev %q show" % dev, "r") local swc = io.popen("swconfig dev %s show"
% luci.util.shellquote(dev), "r")
if swc then if swc then
local l local l
repeat repeat

View file

@ -10,6 +10,7 @@ local string = require "string"
local coroutine = require "coroutine" local coroutine = require "coroutine"
local tparser = require "luci.template.parser" local tparser = require "luci.template.parser"
local json = require "luci.jsonc" local json = require "luci.jsonc"
local lhttp = require "lucihttp"
local _ubus = require "ubus" local _ubus = require "ubus"
local _ubus_connection = nil local _ubus_connection = nil
@ -160,10 +161,33 @@ function pcdata(value)
return value and tparser.pcdata(tostring(value)) return value and tparser.pcdata(tostring(value))
end end
function urlencode(value)
if value ~= nil then
local str = tostring(value)
return lhttp.urlencode(str, lhttp.ENCODE_IF_NEEDED + lhttp.ENCODE_FULL)
or str
end
return nil
end
function urldecode(value, decode_plus)
if value ~= nil then
local flag = decode_plus and lhttp.DECODE_PLUS or 0
local str = tostring(value)
return lhttp.urldecode(str, lhttp.DECODE_IF_NEEDED + flag)
or str
end
return nil
end
function striptags(value) function striptags(value)
return value and tparser.striptags(tostring(value)) return value and tparser.striptags(tostring(value))
end end
function shellquote(value)
return string.format("'%s'", string.gsub(value or "", "'", "'\\''"))
end
-- for bash, ash and similar shells single-quoted strings are taken -- for bash, ash and similar shells single-quoted strings are taken
-- literally except for single quotes (which terminate the string) -- literally except for single quotes (which terminate the string)
-- (and the exception noted below for dash (-) at the start of a -- (and the exception noted below for dash (-) at the start of a
@ -383,16 +407,6 @@ function clone(object, deep)
end end
function dtable()
return setmetatable({}, { __index =
function(tbl, key)
return rawget(tbl, key)
or rawget(rawset(tbl, key, dtable()), key)
end
})
end
-- Serialize the contents of a table value. -- Serialize the contents of a table value.
function _serialize_table(t, seen) function _serialize_table(t, seen)
assert(not seen[t], "Recursion detected.") assert(not seen[t], "Recursion detected.")
@ -617,6 +631,20 @@ function execl(command)
return data return data
end end
local ubus_codes = {
"INVALID_COMMAND",
"INVALID_ARGUMENT",
"METHOD_NOT_FOUND",
"NOT_FOUND",
"NO_DATA",
"PERMISSION_DENIED",
"TIMEOUT",
"NOT_SUPPORTED",
"UNKNOWN_ERROR",
"CONNECTION_FAILED"
}
function ubus(object, method, data) function ubus(object, method, data)
if not _ubus_connection then if not _ubus_connection then
_ubus_connection = _ubus.connect() _ubus_connection = _ubus.connect()
@ -627,7 +655,8 @@ function ubus(object, method, data)
if type(data) ~= "table" then if type(data) ~= "table" then
data = { } data = { }
end end
return _ubus_connection:call(object, method, data) local rv, err = _ubus_connection:call(object, method, data)
return rv, err, ubus_codes[err]
elseif object then elseif object then
return _ubus_connection:signatures(object) return _ubus_connection:signatures(object)
else else
@ -652,10 +681,11 @@ end
function checklib(fullpathexe, wantedlib) function checklib(fullpathexe, wantedlib)
local fs = require "nixio.fs" local fs = require "nixio.fs"
local haveldd = fs.access('/usr/bin/ldd') local haveldd = fs.access('/usr/bin/ldd')
if not haveldd then local haveexe = fs.access(fullpathexe)
if not haveldd or not haveexe then
return false return false
end end
local libs = exec("/usr/bin/ldd " .. fullpathexe) local libs = exec(string.format("/usr/bin/ldd %s", shellquote(fullpathexe)))
if not libs then if not libs then
return false return false
end end

View file

@ -15,126 +15,164 @@ Class can be instantiated by calling them. All parameters will be passed
to the __init__ function of this class - if such a function exists. to the __init__ function of this class - if such a function exists.
The __init__ function must be used to set any object parameters that are not shared The __init__ function must be used to set any object parameters that are not shared
with other objects of this class. Any return values will be ignored. with other objects of this class. Any return values will be ignored.
@class function
@name class @class function
@param base The base class to inherit from (optional) @name class
@return A class object @param base The base class to inherit from (optional)
@see instanceof @return A class object
@see clone @see instanceof
@see clone
]] ]]
---[[ ---[[
Test whether the given object is an instance of the given class. Test whether the given object is an instance of the given class.
@class function @class function
@name instanceof @name instanceof
@param object Object instance @param object Object instance
@param class Class object to test against @param class Class object to test against
@return Boolean indicating whether the object is an instance @return Boolean indicating whether the object is an instance
@see class @see class
@see clone @see clone
]] ]]
---[[ ---[[
Create a new or get an already existing thread local store associated with Create a new or get an already existing thread local store associated with
the current active coroutine.
the current active coroutine. A thread local store is private a table object A thread local store is private a table object
whose values can't be accessed from outside of the running coroutine. whose values can't be accessed from outside of the running coroutine.
@class function
@name threadlocal @class function
@return Table value representing the corresponding thread local store @name threadlocal
@return Table value representing the corresponding thread local store
]] ]]
---[[ ---[[
Write given object to stderr. Write given object to stderr.
@class function @class function
@name perror @name perror
@param obj Value to write to stderr @param obj Value to write to stderr
@return Boolean indicating whether the write operation was successful @return Boolean indicating whether the write operation was successful
]] ]]
---[[ ---[[
Recursively dumps a table to stdout, useful for testing and debugging. Recursively dumps a table to stdout, useful for testing and debugging.
@class function @class function
@name dumptable @name dumptable
@param t Table value to dump @param t Table value to dump
@param maxdepth Maximum depth @param maxdepth Maximum depth
@return Always nil @return Always nil
]] ]]
---[[ ---[[
Create valid XML PCDATA from given string. Create valid XML PCDATA from given string.
@class function @class function
@name pcdata @name pcdata
@param value String value containing the data to escape @param value String value containing the data to escape
@return String value containing the escaped data @return String value containing the escaped data
]]
---[[
Decode an URL-encoded string - optionally decoding the "+" sign to space.
@class function
@name urldecode
@param str Input string in x-www-urlencoded format
@param decode_plus Decode "+" signs to spaces if true (optional)
@return The decoded string
@see urlencode
]]
---[[
URL-encode given string.
@class function
@name urlencode
@param str String to encode
@return String containing the encoded data
@see urldecode
]] ]]
---[[ ---[[
Strip HTML tags from given string. Strip HTML tags from given string.
@class function @class function
@name striptags @name striptags
@param value String containing the HTML text @param value String containing the HTML text
@return String with HTML tags stripped of @return String with HTML tags stripped of
]]
---[[
Safely quote value for use in shell commands.
@class function
@name shellquote
@param value String containing the value to quote
@return Single-quote enclosed string with embedded quotes escaped
]] ]]
---[[ ---[[
Splits given string on a defined separator sequence and return a table Splits given string on a defined separator sequence and return a table
containing the resulting substrings.
containing the resulting substrings. The optional max parameter specifies The optional max parameter specifies the number of bytes to process,
the number of bytes to process, regardless of the actual length of the given regardless of the actual length of the given string. The optional last
string. The optional last parameter, regex, specifies whether the separator parameter, regex, specifies whether the separator sequence is
sequence is interpreted as regular expression. nterpreted as regular expression.
@class function
@name split @class function
@param str String value containing the data to split up @name split
@param pat String with separator pattern (optional, defaults to "\n") @param str String value containing the data to split up
@param max Maximum times to split (optional) @param pat String with separator pattern (optional, defaults to "\n")
@param regex Boolean indicating whether to interpret the separator @param max Maximum times to split (optional)
@param regex Boolean indicating whether to interpret the separator
-- pattern as regular expression (optional, default is false) -- pattern as regular expression (optional, default is false)
@return Table containing the resulting substrings @return Table containing the resulting substrings
]] ]]
---[[ ---[[
Remove leading and trailing whitespace from given string value. Remove leading and trailing whitespace from given string value.
@class function @class function
@name trim @name trim
@param str String value containing whitespace padded data @param str String value containing whitespace padded data
@return String value with leading and trailing space removed @return String value with leading and trailing space removed
]] ]]
---[[ ---[[
Count the occurrences of given substring in given string. Count the occurrences of given substring in given string.
@class function @class function
@name cmatch @name cmatch
@param str String to search in @param str String to search in
@param pattern String containing pattern to find @param pattern String containing pattern to find
@return Number of found occurrences @return Number of found occurrences
]] ]]
---[[ ---[[
Return a matching iterator for the given value. The iterator will return Return a matching iterator for the given value.
one token per invocation, the tokens are separated by whitespace. If the The iterator will return one token per invocation, the tokens are separated by
input value is a table, it is transformed into a string first. A nil value whitespace. If the input value is a table, it is transformed into a string first.
will result in a valid interator which aborts with the first invocation. A nil value will result in a valid interator which aborts with the first invocation.
@class function
@name imatch @class function
@param val The value to scan (table, string or nil) @name imatch
@return Iterator which returns one token per call @param val The value to scan (table, string or nil)
@return Iterator which returns one token per call
]] ]]
---[[ ---[[
Parse certain units from the given string and return the canonical integer Parse certain units from the given string and return the canonical integer
value or 0 if the unit is unknown.
value or 0 if the unit is unknown. Upper- or lower case is irrelevant. Upper- or lower case is irrelevant.
Recognized units are: Recognized units are:
-- o "y" - one year (60*60*24*366) -- o "y" - one year (60*60*24*366)
o "m" - one month (60*60*24*31) o "m" - one month (60*60*24*31)
o "w" - one week (60*60*24*7) o "w" - one week (60*60*24*7)
@ -147,232 +185,229 @@ Recognized units are:
o "kib" - one si kilobyte (1000) o "kib" - one si kilobyte (1000)
o "mib" - one si megabyte (1000*1000) o "mib" - one si megabyte (1000*1000)
o "gib" - one si gigabyte (1000*1000*1000) o "gib" - one si gigabyte (1000*1000*1000)
@class function
@name parse_units @class function
@param ustr String containing a numerical value with trailing unit @name parse_units
@return Number containing the canonical value @param ustr String containing a numerical value with trailing unit
@return Number containing the canonical value
]] ]]
---[[ ---[[
Appends numerically indexed tables or single objects to a given table. Appends numerically indexed tables or single objects to a given table.
@class function @class function
@name append @name append
@param src Target table @param src Target table
@param ... Objects to insert @param ... Objects to insert
@return Target table @return Target table
]] ]]
---[[ ---[[
Combines two or more numerically indexed tables and single objects into one table. Combines two or more numerically indexed tables and single objects into one table.
@class function @class function
@name combine @name combine
@param tbl1 Table value to combine @param tbl1 Table value to combine
@param tbl2 Table value to combine @param tbl2 Table value to combine
@param ... More tables to combine @param ... More tables to combine
@return Table value containing all values of given tables @return Table value containing all values of given tables
]] ]]
---[[ ---[[
Checks whether the given table contains the given value. Checks whether the given table contains the given value.
@class function @class function
@name contains @name contains
@param table Table value @param table Table value
@param value Value to search within the given table @param value Value to search within the given table
@return number indicating the first index at which the given value occurs @return Number indicating the first index at which the given value occurs
-- within table or false. -- within table or false.
]] ]]
---[[ ---[[
Update values in given table with the values from the second given table. Update values in given table with the values from the second given table.
Both table are - in fact - merged together. Both table are - in fact - merged together.
@class function
@name update @class function
@name update
@param t Table which should be updated @param t Table which should be updated
@param updates Table containing the values to update @param updates Table containing the values to update
@return Always nil @return Always nil
]] ]]
---[[ ---[[
Retrieve all keys of given associative table. Retrieve all keys of given associative table.
@class function @class function
@name keys @name keys
@param t Table to extract keys from @param t Table to extract keys from
@return Sorted table containing the keys @return Sorted table containing the keys
]] ]]
---[[ ---[[
Clones the given object and return it's copy. Clones the given object and return it's copy.
@class function @class function
@name clone @name clone
@param object Table value to clone @param object Table value to clone
@param deep Boolean indicating whether to do recursive cloning @param deep Boolean indicating whether to do recursive cloning
@return Cloned table value @return Cloned table value
]]
---[[
Create a dynamic table which automatically creates subtables.
@class function
@name dtable
@return Dynamic Table
]] ]]
---[[ ---[[
Recursively serialize given data to lua code, suitable for restoring Recursively serialize given data to lua code, suitable for restoring
with loadstring(). with loadstring().
@class function
@name serialize_data @class function
@param val Value containing the data to serialize @name serialize_data
@return String value containing the serialized code @param val Value containing the data to serialize
@see restore_data @return String value containing the serialized code
@see get_bytecode @see restore_data
@see get_bytecode
]] ]]
---[[ ---[[
Restore data previously serialized with serialize_data(). Restore data previously serialized with serialize_data().
@class function @class function
@name restore_data @name restore_data
@param str String containing the data to restore @param str String containing the data to restore
@return Value containing the restored data structure @return Value containing the restored data structure
@see serialize_data @see serialize_data
@see get_bytecode @see get_bytecode
]] ]]
---[[ ---[[
Return the current runtime bytecode of the given data. The byte code Return the current runtime bytecode of the given data. The byte code
will be stripped before it is returned. will be stripped before it is returned.
@class function
@name get_bytecode @class function
@param val Value to return as bytecode @name get_bytecode
@return String value containing the bytecode of the given data @param val Value to return as bytecode
@return String value containing the bytecode of the given data
]] ]]
---[[ ---[[
Strips unnescessary lua bytecode from given string. Information like line Strips unnescessary lua bytecode from given string.
numbers and debugging numbers will be discarded. Original version by Information like line numbers and debugging numbers will be discarded.
Peter Cawley (http://lua-users.org/lists/lua-l/2008-02/msg01158.html) Original version by Peter Cawley (http://lua-users.org/lists/lua-l/2008-02/msg01158.html)
@class function
@name strip_bytecode @class function
@param code String value containing the original lua byte code @name strip_bytecode
@return String value containing the stripped lua byte code @param code String value containing the original lua byte code
@return String value containing the stripped lua byte code
]] ]]
---[[ ---[[
Return a key, value iterator which returns the values sorted according to Return a key, value iterator which returns the values sorted according to
the provided callback function. the provided callback function.
@class function
@name spairs @class function
@param t The table to iterate @name spairs
@param f A callback function to decide the order of elements @param t The table to iterate
@return Function value containing the corresponding iterator @param f A callback function to decide the order of elements
@return Function value containing the corresponding iterator
]] ]]
---[[ ---[[
Return a key, value iterator for the given table. Return a key, value iterator for the given table.
The table pairs are sorted by key. The table pairs are sorted by key.
@class function
@name kspairs @class function
@param t The table to iterate @name kspairs
@return Function value containing the corresponding iterator @param t The table to iterate
@return Function value containing the corresponding iterator
]] ]]
---[[ ---[[
Return a key, value iterator for the given table. Return a key, value iterator for the given table.
The table pairs are sorted by value. The table pairs are sorted by value.
@class function
@name vspairs @class function
@param t The table to iterate @name vspairs
@return Function value containing the corresponding iterator @param t The table to iterate
@return Function value containing the corresponding iterator
]] ]]
---[[ ---[[
Test whether the current system is operating in big endian mode. Test whether the current system is operating in big endian mode.
@class function @class function
@name bigendian @name bigendian
@return Boolean value indicating whether system is big endian @return Boolean value indicating whether system is big endian
]] ]]
---[[ ---[[
Execute given commandline and gather stdout. Execute given commandline and gather stdout.
@class function @class function
@name exec @name exec
@param command String containing command to execute @param command String containing command to execute
@return String containing the command's stdout @return String containing the command's stdout
]] ]]
---[[ ---[[
Return a line-buffered iterator over the output of given command. Return a line-buffered iterator over the output of given command.
@class function @class function
@name execi @name execi
@param command String containing the command to execute @param command String containing the command to execute
@return Iterator @return Iterator
]] ]]
---[[ ---[[
Issue an ubus call. Issue an ubus call.
@class function @class function
@name ubus @name ubus
@param object String containing the ubus object to call @param object String containing the ubus object to call
@param method String containing the ubus method to call @param method String containing the ubus method to call
@param values Table containing the values to pass @param values Table containing the values to pass
@return Table containin the ubus result @return Table containin the ubus result
]] ]]
---[[ ---[[
Convert data structure to JSON Convert data structure to JSON
@class function @class function
@name serialize_json @name serialize_json
@param data The data to serialize @param data The data to serialize
@param writer A function to write a chunk of JSON data (optional) @param writer A function to write a chunk of JSON data (optional)
@return String containing the JSON if called without write callback @return String containing the JSON if called without write callback
]] ]]
---[[ ---[[
Returns the absolute path to LuCI base directory. Returns the absolute path to LuCI base directory.
@class function @class function
@name libpath @name libpath
@return String containing the directory path @return String containing the directory path
]] ]]
---[[ ---[[
This is a coroutine-safe drop-in replacement for Lua's "xpcall"-function This is a coroutine-safe drop-in replacement for Lua's "xpcall"-function
@class function @class function
@name coxpcall @name coxpcall
@param f Lua function to be called protected @param f Lua function to be called protected
@param err Custom error handler @param err Custom error handler
@param ... Parameters passed to the function @param ... Parameters passed to the function
@return A boolean whether the function call succeeded and the return @return A boolean whether the function call succeeded and the return
-- values of either the function or the error handler -- values of either the function or the error handler
]] ]]
---[[ ---[[
This is a coroutine-safe drop-in replacement for Lua's "pcall"-function This is a coroutine-safe drop-in replacement for Lua's "pcall"-function
@class function @class function
@name copcall @name copcall
@param f Lua function to be called protected @param f Lua function to be called protected
@param ... Parameters passed to the function @param ... Parameters passed to the function
@return A boolean whether the function call succeeded and the returns @return A boolean whether the function call succeeded and the returns
-- values of the function or the error object -- values of the function or the error object
]] ]]

View file

@ -2,6 +2,7 @@
<%+cbi/valueheader%> <%+cbi/valueheader%>
<input class="cbi-input-text" type="text"<%= attr("value", v) .. attr("name", cbid) .. attr("id", cbid) %> /> <input class="cbi-input-text" type="text"<%= attr("value", v) .. attr("name", cbid) .. attr("id", cbid) %> />
<script type="text/javascript"> <script type="text/javascript">
cbi_init()
cbi_browser_init('<%=cbid%>', '<%=resource%>', '<%=url('admin/filebrowser')%>'<%=self.default_path and ", '"..self.default_path.."'"%>); cbi_browser_init('<%=cbid%>', '<%=resource%>', '<%=url('admin/filebrowser')%>'<%=self.default_path and ", '"..self.default_path.."'"%>);
</script> </script>
<%+cbi/valuefooter%> <%+cbi/valuefooter%>

View file

@ -22,9 +22,9 @@
<script type="text/javascript"> <script type="text/javascript">
function callback(path) { function callback(path) {
if( window.opener ) { if( window.opener ) {
var input = window.opener.document.getElementById('<%=luci.http.formvalue('field')%>'); var input = window.opener.document.getElementById(decodeURIComponent('<%=luci.http.urlencode(luci.http.formvalue('field'))%>'));
if( input ) { if( input ) {
input.value = path; input.value = decodeURIComponent(path);
window.close(); window.close();
} }
} }
@ -48,33 +48,44 @@
end end
end end
local filepath = table.concat( path, '/' ) local filestat = nixio.fs.stat(table.concat(path, '/'))
local filestat = nixio.fs.stat( filepath ) local baseurl = { 'admin', 'filebrowser' }
local baseurl = luci.dispatcher.build_url('admin', 'filebrowser')
if filestat and filestat.type == "reg" then if filestat and filestat.type == "reg" then
table.remove( path, #path ) path[#path] = ''
filepath = table.concat( path, '/' ) .. '/' elseif not (filestat and filestat.type == "dir") then
elseif not ( filestat and filestat.type == "dir" ) then path = { '', '' }
path = { '' }
filepath = '/'
else else
filepath = filepath .. '/' path[#path+1] = ''
end end
local entries = nixio.util.consume((nixio.fs.dir(filepath))) filepath = table.concat(path, '/')
local entries = {}
local _, e
for _, e in luci.util.vspairs(nixio.util.consume((nixio.fs.dir(filepath)))) do
local p = filepath .. e
local s = nixio.fs.stat(p)
if s then
entries[#entries+1] = {
name = e,
path = p,
type = s.type
}
end
end
-%> -%>
<div id="path"> <div id="path">
Location: Location:
<% for i, dir in ipairs(path) do %> <% for i, dir in ipairs(path) do %>
<% if i == 1 then %> <% if i == 1 then %>
<a href="<%=baseurl%>?field=<%=field%>">(root)</a> <a href="<%=url(unpack(baseurl))%>?field=<%=luci.http.urlencode(field)%>">(root)</a>
<% elseif next(path, i) then %> <% elseif next(path, i) then %>
<% baseurl = baseurl .. '/' .. dir %> <% baseurl[#baseurl+1] = luci.http.urlencode(dir) %>
/ <a href="<%=baseurl%>?field=<%=field%>"><%=dir%></a> / <a href="<%=url(unpack(baseurl))%>?field=<%=luci.http.urlencode(field)%>"><%=pcdata(dir)%></a>
<% else %> <% else %>
<% baseurl = baseurl .. '/' .. dir %> <% baseurl[#baseurl+1] = luci.http.urlencode(dir) %>
/ <%=dir%> / <%=pcdata(dir)%>
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
@ -83,23 +94,17 @@
<div id="listing"> <div id="listing">
<ul> <ul>
<% for _, e in luci.util.vspairs(entries) do <% for _, e in ipairs(entries) do if e.type == 'dir' then -%>
local stat = nixio.fs.stat(filepath..e)
if stat and stat.type == 'dir' then
-%>
<li class="dir"> <li class="dir">
<img src="<%=resource%>/cbi/folder.gif" alt="<%:Directory%>" /> <img src="<%=resource%>/cbi/folder.gif" alt="<%:Directory%>" />
<a href="<%=baseurl%>/<%=e%>?field=<%=field%>"><%=e%>/</a> <a href="<%=url(unpack(baseurl))%>/<%=luci.http.urlencode(e.name)%>?field=<%=luci.http.urlencode(field)%>"><%=pcdata(e.name)%>/</a>
</li> </li>
<% end end -%> <% end end -%>
<% for _, e in luci.util.vspairs(entries) do <% for _, e in ipairs(entries) do if e.type ~= 'dir' then -%>
local stat = nixio.fs.stat(filepath..e)
if stat and stat.type ~= 'dir' then
-%>
<li class="file"> <li class="file">
<img src="<%=resource%>/cbi/file.gif" alt="<%:File%>" /> <img src="<%=resource%>/cbi/file.gif" alt="<%:File%>" />
<a href="#" onclick="callback('<%=filepath..e%>')"><%=e%></a> <a href="#" onclick="callback('<%=luci.http.urlencode(e.path)%>')"><%=pcdata(e.name)%></a>
</li> </li>
<% end end -%> <% end end -%>
</ul> </ul>

View file

@ -1,6 +1,6 @@
<%- if pageaction then -%> <%- if pageaction then -%>
<div class="cbi-page-actions"> <div class="cbi-page-actions">
<% if redirect then %> <% if redirect and not flow.hidebackbtn then %>
<div style="float:left"> <div style="float:left">
<input class="cbi-button cbi-button-link" type="button" value="<%:Back to Overview%>" onclick="location.href='<%=pcdata(redirect)%>'" /> <input class="cbi-button cbi-button-link" type="button" value="<%:Back to Overview%>" onclick="location.href='<%=pcdata(redirect)%>'" />
</div> </div>

View file

@ -52,7 +52,8 @@
<%- if not self.cancel then -%><%-:Cancel-%><%-else-%><%=self.cancel%><%end-%> <%- if not self.cancel then -%><%-:Cancel-%><%-else-%><%=self.cancel%><%end-%>
" /> " />
<% end %> <% end %>
<script type="text/javascript">cbi_d_update();</script>
</div> </div>
</form> </form>
<% end %> <% end %>
<script type="text/javascript">cbi_init();</script>

View file

@ -35,7 +35,7 @@ end
<%- else -%> <%- else -%>
<th>&#160;</th> <th>&#160;</th>
<%- end -%> <%- end -%>
<%- end -%> <%- count = count +1; end -%>
<%- for i, k in pairs(self.children) do if not k.optional then -%> <%- for i, k in pairs(self.children) do if not k.optional then -%>
<th class="cbi-section-table-cell"<%=width(k)%>> <th class="cbi-section-table-cell"<%=width(k)%>>
<%- if k.titleref then -%><a title="<%=self.titledesc or translate('Go to relevant configuration page')%>" class="cbi-title-ref" href="<%=k.titleref%>"><%- end -%> <%- if k.titleref then -%><a title="<%=self.titledesc or translate('Go to relevant configuration page')%>" class="cbi-title-ref" href="<%=k.titleref%>"><%- end -%>
@ -44,7 +44,7 @@ end
</th> </th>
<%- count = count + 1; end; end; if self.sortable then -%> <%- count = count + 1; end; end; if self.sortable then -%>
<th class="cbi-section-table-cell"><%:Sort%></th> <th class="cbi-section-table-cell"><%:Sort%></th>
<%- end; if self.extedit or self.addremove then -%> <%- count = count + 1; end; if self.extedit or self.addremove then -%>
<th class="cbi-section-table-cell">&#160;</th> <th class="cbi-section-table-cell">&#160;</th>
<%- count = count + 1; end -%> <%- count = count + 1; end -%>
</tr> </tr>

View file

@ -7,5 +7,5 @@
<%+header%> <%+header%>
<h2 name="content">404 <%:Not Found%></h2> <h2 name="content">404 <%:Not Found%></h2>
<p><%:Sorry, the object you requested was not found.%></p> <p><%:Sorry, the object you requested was not found.%></p>
<tt><%:Unable to dispatch%>: <%=luci.http.request.env.PATH_INFO%></tt> <tt><%:Unable to dispatch%>: <%=url(unpack(luci.dispatcher.context.request))%></tt>
<%+footer%> <%+footer%>

View file

@ -6,7 +6,7 @@
<%+header%> <%+header%>
<form method="post" action="<%=pcdata(luci.http.getenv("REQUEST_URI"))%>"> <form method="post" action="<%=pcdata(FULL_REQUEST_URI)%>">
<%- if fuser then %> <%- if fuser then %>
<div class="errorbox"><%:Invalid username and/or password! Please try again.%></div> <div class="errorbox"><%:Invalid username and/or password! Please try again.%></div>
<% end -%> <% end -%>

View file

@ -743,6 +743,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1012,6 +1017,11 @@ msgstr "Emergència"
msgid "Enable" msgid "Enable"
msgstr "Habilita" msgstr "Habilita"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Habilita l'<abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Habilita l'<abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1069,6 +1079,9 @@ msgstr "Activa/Desactiva"
msgid "Enabled" msgid "Enabled"
msgstr "Habilitat" msgstr "Habilitat"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2154,6 +2167,9 @@ msgstr "Avís"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "D'acord" msgstr "D'acord"
@ -2913,6 +2929,9 @@ msgstr "Mida"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "Mida (.ipk)" msgstr "Mida (.ipk)"
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Salta" msgstr "Salta"
@ -3305,7 +3324,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3526,7 +3545,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -737,6 +737,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1012,6 +1017,11 @@ msgstr "Záchrana"
msgid "Enable" msgid "Enable"
msgstr "Povolit" msgstr "Povolit"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Povolit <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Povolit <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1069,6 +1079,9 @@ msgstr "Povolit/Zakázat"
msgid "Enabled" msgid "Enabled"
msgstr "Povoleno" msgstr "Povoleno"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2162,6 +2175,9 @@ msgstr "Oznámení"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2939,6 +2955,9 @@ msgstr "Velikost"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Přeskočit" msgstr "Přeskočit"
@ -3347,7 +3366,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3566,7 +3585,7 @@ msgstr "Použít směrovací tabulku"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -763,6 +763,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "Eigene Repositories" msgstr "Eigene Repositories"
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1038,6 +1043,11 @@ msgstr "Notfall"
msgid "Enable" msgid "Enable"
msgstr "Aktivieren" msgstr "Aktivieren"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr> aktivieren" msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr> aktivieren"
@ -1096,6 +1106,9 @@ msgstr "Aktivieren/Deaktivieren"
msgid "Enabled" msgid "Enabled"
msgstr "Aktiviert" msgstr "Aktiviert"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2228,6 +2241,9 @@ msgstr "Notiz"
msgid "Nslookup" msgid "Nslookup"
msgstr "DNS-Auflösung" msgstr "DNS-Auflösung"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -3039,6 +3055,9 @@ msgstr "Größe"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "Größe (.ipk)" msgstr "Größe (.ipk)"
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Überspringen" msgstr "Überspringen"
@ -3475,15 +3494,15 @@ msgid ""
"This is the content of /etc/rc.local. Insert your own commands here (in " "This is the content of /etc/rc.local. Insert your own commands here (in "
"front of 'exit 0') to execute them at the end of the boot process." "front of 'exit 0') to execute them at the end of the boot process."
msgstr "" msgstr ""
"Dies ist der Inhalt von /etc.rc.local. Hier kann man eigene Befehle einfügen " "Dies ist der Inhalt von /etc/rc.local. Hier kann man eigene Befehle einfügen "
"(vor 'exit 0'), die dann am Ende des Bootvorgangs ausgeführt werden." "(vor 'exit 0'), die dann am Ende des Bootvorgangs ausgeführt werden."
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"Dies ist die lokale, vom Broker zugewiesene IPv6-Adresse, sie endet " "Dies ist die lokale, vom Broker zugewiesene IPv6-Adresse, sie endet "
"üblicherweise mit <code>:2</code>" "üblicherweise mit <code>...:2/64</code>"
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3703,7 +3722,7 @@ msgstr "Benutze Routing-Tabelle"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -746,6 +746,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1024,6 +1029,11 @@ msgstr "Έκτακτη ανάγκη"
msgid "Enable" msgid "Enable"
msgstr "Ενεργοποίηση" msgstr "Ενεργοποίηση"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Ενεργοποίηση <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Ενεργοποίηση <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1081,6 +1091,9 @@ msgstr "Ενεργοποίηση/Απενεργοποίηση"
msgid "Enabled" msgid "Enabled"
msgstr "Ενεργοποιημένο" msgstr "Ενεργοποιημένο"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2170,6 +2183,9 @@ msgstr "Επισήμανση"
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "Εντάξει" msgstr "Εντάξει"
@ -2931,6 +2947,9 @@ msgstr "Μέγεθος"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Παράκαμψη" msgstr "Παράκαμψη"
@ -3307,7 +3326,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3522,7 +3541,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -733,6 +733,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1003,6 +1008,11 @@ msgstr ""
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1060,6 +1070,9 @@ msgstr "Enable/Disable"
msgid "Enabled" msgid "Enabled"
msgstr "Enabled" msgstr "Enabled"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2137,6 +2150,9 @@ msgstr ""
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2895,6 +2911,9 @@ msgstr "Size"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Skip" msgstr "Skip"
@ -3267,7 +3286,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3479,7 +3498,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -742,6 +742,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1018,6 +1023,11 @@ msgstr "Emergencia"
msgid "Enable" msgid "Enable"
msgstr "Activar" msgstr "Activar"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Activar <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Activar <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1075,6 +1085,9 @@ msgstr "Activar/Desactivar"
msgid "Enabled" msgid "Enabled"
msgstr "Activado" msgstr "Activado"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2176,6 +2189,9 @@ msgstr "Aviso"
msgid "Nslookup" msgid "Nslookup"
msgstr "NSLookup" msgstr "NSLookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "Aceptar" msgstr "Aceptar"
@ -2952,6 +2968,9 @@ msgstr "Tamaño"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Saltar" msgstr "Saltar"
@ -3372,10 +3391,10 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"Esta es la dirección de punto final asignada por el broker del túnel, suele " "Esta es la dirección de punto final asignada por el broker del túnel, suele "
"terminar con <code>:2</code>" "terminar con <code>...:2/64</code>"
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3591,7 +3610,7 @@ msgstr "Usar tabla de rutas"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -749,6 +749,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1028,6 +1033,11 @@ msgstr "Urgence"
msgid "Enable" msgid "Enable"
msgstr "Activer" msgstr "Activer"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Activer le protocole <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Activer le protocole <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1085,6 +1095,9 @@ msgstr "Activer/Désactiver"
msgid "Enabled" msgid "Enabled"
msgstr "Activé" msgstr "Activé"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2190,6 +2203,9 @@ msgstr "Note"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2966,6 +2982,9 @@ msgstr "Taille"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Passer au suivant" msgstr "Passer au suivant"
@ -3387,10 +3406,10 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"Il s'agit de l'adresse de l'extrémité locale attribuée par le fournisseur de " "Il s'agit de l'adresse de l'extrémité locale attribuée par le fournisseur de "
"tunnels, elle se termine habituellement avec <code>:2</code>" "tunnels, elle se termine habituellement avec <code>...:2/64</code>"
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3610,7 +3629,7 @@ msgstr "Utiliser la table de routage"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -726,6 +726,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -988,6 +993,11 @@ msgstr "מצב חרום"
msgid "Enable" msgid "Enable"
msgstr "אפשר" msgstr "אפשר"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "אפשר <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "אפשר <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1045,6 +1055,9 @@ msgstr ""
msgid "Enabled" msgid "Enabled"
msgstr "אפשר" msgstr "אפשר"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2110,6 +2123,9 @@ msgstr ""
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "" msgstr ""
@ -2862,6 +2878,9 @@ msgstr ""
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "" msgstr ""
@ -3228,7 +3247,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3437,7 +3456,7 @@ msgstr "השתמש בטבלת ניתוב"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -744,6 +744,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1021,6 +1026,11 @@ msgstr "Vészhelyzet"
msgid "Enable" msgid "Enable"
msgstr "Engedélyezés" msgstr "Engedélyezés"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr> engedélyezése" msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr> engedélyezése"
@ -1078,6 +1088,9 @@ msgstr "Engedélyezés/Letiltás"
msgid "Enabled" msgid "Enabled"
msgstr "Engedélyezve" msgstr "Engedélyezve"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2179,6 +2192,9 @@ msgstr "Megjegyzés"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2957,6 +2973,9 @@ msgstr "Méret"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Ugrás" msgstr "Ugrás"
@ -3375,10 +3394,10 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"Ez az alagút közvetítő (tunnel broker) által megadott helyi végpont címe, " "Ez az alagút közvetítő (tunnel broker) által megadott helyi végpont címe, "
"általában így végződik: <code>:2</code>" "általában így végződik: <code>...:2/64</code>"
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3597,7 +3616,7 @@ msgstr "Útválasztó tábla használata"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -749,6 +749,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1024,6 +1029,11 @@ msgstr "Emergenza"
msgid "Enable" msgid "Enable"
msgstr "Abilita" msgstr "Abilita"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Abilita <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Abilita <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1081,6 +1091,9 @@ msgstr "Abilita/Disabilita"
msgid "Enabled" msgid "Enabled"
msgstr "Abilitato" msgstr "Abilitato"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2179,6 +2192,9 @@ msgstr "Notifica"
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2941,6 +2957,9 @@ msgstr "Dimensione"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Salta" msgstr "Salta"
@ -3335,7 +3354,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3554,7 +3573,7 @@ msgstr "Utilizzare tabella di instradamento"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -3,18 +3,18 @@ msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:40+0200\n" "POT-Creation-Date: 2009-06-10 03:40+0200\n"
"PO-Revision-Date: 2017-10-20 13:54+0900\n" "PO-Revision-Date: 2018-05-03 00:23+0900\n"
"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
"Language: ja\n" "Language: ja\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.0.4\n" "X-Generator: Poedit 2.0.7\n"
"Language-Team: \n" "Language-Team: \n"
msgid "%.1f dB" msgid "%.1f dB"
msgstr "" msgstr "%.1f dB"
msgid "%s is untagged in multiple VLANs!" msgid "%s is untagged in multiple VLANs!"
msgstr "%s は複数のVLANにUntaggedしています!" msgstr "%s は複数のVLANにUntaggedしています!"
@ -137,7 +137,7 @@ msgid "<abbr title=\"Media Access Control\">MAC</abbr>-Address"
msgstr "<abbr title=\"Media Access Control\">MAC</abbr>-アドレス" msgstr "<abbr title=\"Media Access Control\">MAC</abbr>-アドレス"
msgid "<abbr title=\"The DHCP Unique Identifier\">DUID</abbr>" msgid "<abbr title=\"The DHCP Unique Identifier\">DUID</abbr>"
msgstr "" msgstr "<abbr title=\"The DHCP Unique Identifier\">DUID</abbr>"
msgid "" msgid ""
"<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Dynamic Host Configuration " "<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Dynamic Host Configuration "
@ -251,6 +251,8 @@ msgstr "追加"
msgid "Add local domain suffix to names served from hosts files" msgid "Add local domain suffix to names served from hosts files"
msgstr "" msgstr ""
"hosts ファイルにより解決される名前にローカルドメイン サフィックスを付加しま"
"す。"
msgid "Add new interface..." msgid "Add new interface..."
msgstr "インターフェースの新規作成..." msgstr "インターフェースの新規作成..."
@ -750,6 +752,13 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "カスタム フィード" msgstr "カスタム フィード"
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
"カスタム ファイル(証明書, スクリプト)がシステムに残るかもしれません。これを"
"防ぐには、まず最初に factory-reset を行います。"
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -953,7 +962,7 @@ msgid "Domain whitelist"
msgstr "ドメイン ホワイトリスト" msgstr "ドメイン ホワイトリスト"
msgid "Don't Fragment" msgid "Don't Fragment"
msgstr "" msgstr "非フラグメント化"
msgid "" msgid ""
"Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without " "Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
@ -1024,6 +1033,13 @@ msgstr "緊急"
msgid "Enable" msgid "Enable"
msgstr "有効" msgstr "有効"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
"<abbr title=\"Internet Group Management Protocol\">IGMP</abbr> スヌーピングの"
"有効化"
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr>を有効にする" msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr>を有効にする"
@ -1067,7 +1083,7 @@ msgid "Enable mirroring of outgoing packets"
msgstr "送信パケットのミラーリングを有効化" msgstr "送信パケットのミラーリングを有効化"
msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
msgstr "" msgstr "カプセル化されたパケットの DF (Don't Fragment) フラグを有効にします。"
msgid "Enable this mount" msgid "Enable this mount"
msgstr "マウント設定を有効にする" msgstr "マウント設定を有効にする"
@ -1081,6 +1097,9 @@ msgstr "有効/無効"
msgid "Enabled" msgid "Enabled"
msgstr "有効" msgstr "有効"
msgid "Enables IGMP snooping on this bridge"
msgstr "ブリッジの IGMP スヌーピングを有効にします"
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -1254,7 +1273,7 @@ msgid "Force use of NAT-T"
msgstr "NAT-Tの強制使用" msgstr "NAT-Tの強制使用"
msgid "Form token mismatch" msgid "Form token mismatch"
msgstr "" msgstr "フォーム トークンの不一致"
msgid "Forward DHCP traffic" msgid "Forward DHCP traffic"
msgstr "DHCPトラフィックを転送する" msgstr "DHCPトラフィックを転送する"
@ -1598,6 +1617,8 @@ msgstr "インストール"
msgid "Install iputils-traceroute6 for IPv6 traceroute" msgid "Install iputils-traceroute6 for IPv6 traceroute"
msgstr "" msgstr ""
"IPv6 の traceroute を使用するには、 iputils-traceroute6 をインストールしま"
"す。"
msgid "Install package %q" msgid "Install package %q"
msgstr "%q パッケージをインストールします" msgstr "%q パッケージをインストールします"
@ -1661,7 +1682,7 @@ msgstr ""
"ユーザー名かパスワード、もしくは両方が不正です!もう一度入力してください。" "ユーザー名かパスワード、もしくは両方が不正です!もう一度入力してください。"
msgid "Isolate Clients" msgid "Isolate Clients"
msgstr "" msgstr "クライアント間の分離"
msgid "" msgid ""
"It appears that you are trying to flash an image that does not fit into the " "It appears that you are trying to flash an image that does not fit into the "
@ -1756,6 +1777,8 @@ msgstr "割り当て数"
msgid "Limit DNS service to subnets interfaces on which we are serving DNS." msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
msgstr "" msgstr ""
"DNS サービスを、現在 DNS を提供しているサブネットのインターフェースに限定しま"
"す。"
msgid "Limit listening to these interfaces, and loopback." msgid "Limit listening to these interfaces, and loopback."
msgstr "待ち受けをこれらのインターフェースとループバックに制限します。" msgstr "待ち受けをこれらのインターフェースとループバックに制限します。"
@ -1840,7 +1863,7 @@ msgid "Local IPv6 address"
msgstr "ローカル IPv6 アドレス" msgstr "ローカル IPv6 アドレス"
msgid "Local Service Only" msgid "Local Service Only"
msgstr "" msgstr "ローカルサービスのみ"
msgid "Local Startup" msgid "Local Startup"
msgstr "ローカル スタートアップ" msgstr "ローカル スタートアップ"
@ -1855,6 +1878,8 @@ msgid ""
"Local domain specification. Names matching this domain are never forwarded " "Local domain specification. Names matching this domain are never forwarded "
"and are resolved from DHCP or hosts files only" "and are resolved from DHCP or hosts files only"
msgstr "" msgstr ""
"ローカル ドメインの定義です。このドメインに一致する名前は転送が行われず、 "
"DHCP または hosts ファイルのみにより解決されます。"
msgid "Local domain suffix appended to DHCP names and hosts file entries" msgid "Local domain suffix appended to DHCP names and hosts file entries"
msgstr "" msgstr ""
@ -2178,6 +2203,11 @@ msgstr "注意"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
"キャッシュされる DNS エントリーの数です。(最大 10000 件。 0の場合はキャッ"
"シュしません)"
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2394,7 +2424,7 @@ msgid "Packets"
msgstr "パケット" msgstr "パケット"
msgid "Part of zone %q" msgid "Part of zone %q"
msgstr "ゾーン %qの一部" msgstr "ゾーン %q の一部"
msgid "Password" msgid "Password"
msgstr "パスワード" msgstr "パスワード"
@ -2962,6 +2992,9 @@ msgstr "サイズ"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "サイズ (.ipk)" msgstr "サイズ (.ipk)"
msgid "Size of DNS query cache"
msgstr "DNS クエリ キャッシュのサイズ"
msgid "Skip" msgid "Skip"
msgstr "スキップ" msgstr "スキップ"
@ -3085,10 +3118,10 @@ msgid "Submit"
msgstr "送信" msgstr "送信"
msgid "Suppress logging" msgid "Suppress logging"
msgstr "" msgstr "ログの抑制"
msgid "Suppress logging of the routine operation of these protocols" msgid "Suppress logging of the routine operation of these protocols"
msgstr "" msgstr "これらのプロトコルのルーチン的操作についてのログを抑制します。"
msgid "Swap" msgid "Swap"
msgstr "スワップ" msgstr "スワップ"
@ -3110,7 +3143,7 @@ msgid ""
msgstr "" msgstr ""
msgid "Switch Port Mask" msgid "Switch Port Mask"
msgstr "" msgstr "スイッチポート マスク"
msgid "Switch VLAN" msgid "Switch VLAN"
msgstr "" msgstr ""
@ -3338,13 +3371,16 @@ msgstr ""
"サービスを有効にするために、管理者パスワードを設定してください。" "サービスを有効にするために、管理者パスワードを設定してください。"
msgid "This IPv4 address of the relay" msgid "This IPv4 address of the relay"
msgstr "" msgstr "リレーの IPv4 アドレス"
msgid "" msgid ""
"This file may contain lines like 'server=/domain/1.2.3.4' or " "This file may contain lines like 'server=/domain/1.2.3.4' or "
"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " "'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain "
"Name System\">DNS</abbr> servers." "Name System\">DNS</abbr> servers."
msgstr "" msgstr ""
"このファイルは、特定ドメイン用、または上位 <abbr title=\"Domain Name System"
"\">DNS</abbr> サーバーのための 'server=/domain/1.2.3.4' や 'server=1.2.3.4' "
"というような行を含めることができます。"
msgid "" msgid ""
"This is a list of shell glob patterns for matching files and directories to " "This is a list of shell glob patterns for matching files and directories to "
@ -3369,17 +3405,17 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"プロバイダからアサインされた、ローカルのエンドポイント アドレスです。通常、" "プロバイダからアサインされた、ローカルのエンドポイント アドレスです。通常、"
"<code>:2</code>が終端に設定されます。" "<code>...:2/64</code>が終端に設定されます。"
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
"abbr> in the local network" "abbr> in the local network"
msgstr "" msgstr ""
"ローカル ネットワーク内のみの <abbr title=\"Dynamic Host Configuration " "これはローカル ネットワーク内のみの <abbr title=\"Dynamic Host Configuration "
"Protocol\">DHCP</abbr>として使用する" "Protocol\">DHCP</abbr> です。"
msgid "This is the plain username for logging into the account" msgid "This is the plain username for logging into the account"
msgstr "" msgstr ""
@ -3591,7 +3627,7 @@ msgstr "ルーティング テーブルの使用"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."
@ -3946,24 +3982,3 @@ msgstr "はい"
msgid "« Back" msgid "« Back"
msgstr "« 戻る" msgstr "« 戻る"
#~ msgid "Action"
#~ msgstr "動作"
#~ msgid "Buttons"
#~ msgstr "ボタン"
#~ msgid "Handler"
#~ msgstr "ハンドラ"
#~ msgid "Maximum hold time"
#~ msgstr "最大保持時間"
#~ msgid "Minimum hold time"
#~ msgstr "最短保持時間"
#~ msgid "Path to executable which handles the button event"
#~ msgstr "ボタンイベントをハンドルする実行ファイルのパス"
#~ msgid "This page allows the configuration of custom button actions"
#~ msgstr "このページでは、ボタンの動作を変更することができます。"

View file

@ -731,6 +731,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "Custom feed 들" msgstr "Custom feed 들"
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1001,6 +1006,11 @@ msgstr ""
msgid "Enable" msgid "Enable"
msgstr "활성화" msgstr "활성화"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr> 활성화" msgstr "<abbr title=\"Spanning Tree Protocol\">STP</abbr> 활성화"
@ -1058,6 +1068,9 @@ msgstr "활성/비활성"
msgid "Enabled" msgid "Enabled"
msgstr "활성화됨" msgstr "활성화됨"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2128,6 +2141,9 @@ msgstr ""
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "" msgstr ""
@ -2890,6 +2906,9 @@ msgstr "Size"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "크기 (.ipk)" msgstr "크기 (.ipk)"
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "" msgstr ""
@ -3270,7 +3289,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3484,7 +3503,7 @@ msgstr "Routing table 사용"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -711,6 +711,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -973,6 +978,11 @@ msgstr ""
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Mengaktifkan <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Mengaktifkan <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1030,6 +1040,9 @@ msgstr ""
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr ""
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2108,6 +2121,9 @@ msgstr ""
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "Baik" msgstr "Baik"
@ -2864,6 +2880,9 @@ msgstr "Saiz"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Skip" msgstr "Skip"
@ -3238,7 +3257,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3452,7 +3471,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -733,6 +733,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1008,6 +1013,11 @@ msgstr "Krisesituasjon"
msgid "Enable" msgid "Enable"
msgstr "Aktiver" msgstr "Aktiver"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Aktiver <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Aktiver <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1065,6 +1075,9 @@ msgstr "Aktiver/Deaktiver"
msgid "Enabled" msgid "Enabled"
msgstr "Aktivert" msgstr "Aktivert"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2153,6 +2166,9 @@ msgstr "Merk"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2930,6 +2946,9 @@ msgstr "Størrelse"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Gå videre" msgstr "Gå videre"
@ -3343,10 +3362,10 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"Dette er den lokale endepunkt adressen som ble tildelt av tunnel 'broker', " "Dette er den lokale endepunkt adressen som ble tildelt av tunnel 'broker', "
"adressen ender vanligvis med <code>:2</code>" "adressen ender vanligvis med <code>...:2/64</code>"
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3562,7 +3581,7 @@ msgstr "Bruk rutingtabellen"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -752,6 +752,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
# Spacji zabrało i napisy się skleiły # Spacji zabrało i napisy się skleiły
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
@ -1034,6 +1039,11 @@ msgstr "Zagrożenie"
msgid "Enable" msgid "Enable"
msgstr "Włącz" msgstr "Włącz"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Włącz <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Włącz <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1091,6 +1101,9 @@ msgstr "Wlącz/Wyłącz"
msgid "Enabled" msgid "Enabled"
msgstr "Włączony" msgstr "Włączony"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2198,6 +2211,9 @@ msgstr "Spostrzeżenie"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2978,6 +2994,9 @@ msgstr "Rozmiar"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Pomiń" msgstr "Pomiń"
@ -3400,10 +3419,10 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"To jest lokalny adres końcowy przypisany przez tunnel broker'a, zwykle " "To jest lokalny adres końcowy przypisany przez tunnel broker'a, zwykle "
"kończący się z <code>:2</code>" "kończący się z <code>...:2/64</code>"
# w tłumaczeniu pojawiła się spacja po DHCP</abbr> co powoduje niepoprawne wyświetlanie się strony z lang PL # w tłumaczeniu pojawiła się spacja po DHCP</abbr> co powoduje niepoprawne wyświetlanie się strony z lang PL
msgid "" msgid ""
@ -3622,7 +3641,7 @@ msgstr "Użyj tabeli routingu"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -786,6 +786,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "Fontes de pacotes customizadas" msgstr "Fontes de pacotes customizadas"
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1070,6 +1075,11 @@ msgstr "Emergência"
msgid "Enable" msgid "Enable"
msgstr "Ativar" msgstr "Ativar"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Ativar <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Ativar <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1127,6 +1137,9 @@ msgstr "Ativar/Desativar"
msgid "Enabled" msgid "Enabled"
msgstr "Ativado" msgstr "Ativado"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2279,6 +2292,9 @@ msgstr "Aviso"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -3084,6 +3100,9 @@ msgstr "Tamanho"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "Tamanho (.ipk)" msgstr "Tamanho (.ipk)"
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Pular" msgstr "Pular"
@ -3519,10 +3538,10 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"Este é o endereço da ponta local designado pelo agente de túnel. normalmente " "Este é o endereço da ponta local designado pelo agente de túnel. normalmente "
"ele termina com <code>:2</code>" "ele termina com <code>...:2/64</code>"
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3745,7 +3764,7 @@ msgstr "Use a tabela de roteamento"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -746,6 +746,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1024,6 +1029,11 @@ msgstr "Emergência"
msgid "Enable" msgid "Enable"
msgstr "Ativar" msgstr "Ativar"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Ativar <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Ativar <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1081,6 +1091,9 @@ msgstr "Ativar/Desativar"
msgid "Enabled" msgid "Enabled"
msgstr "Ativado" msgstr "Ativado"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2177,6 +2190,9 @@ msgstr "Reparo"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2948,6 +2964,9 @@ msgstr "Tamanho"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Saltar" msgstr "Saltar"
@ -3347,7 +3366,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3560,7 +3579,7 @@ msgstr "Usar tabela de roteamento"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -721,6 +721,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -979,6 +984,11 @@ msgstr "Urgenta"
msgid "Enable" msgid "Enable"
msgstr "Activeaza" msgstr "Activeaza"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Activeaza <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Activeaza <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1036,6 +1046,9 @@ msgstr "Activeaza/Dezactiveaza"
msgid "Enabled" msgid "Enabled"
msgstr "Activat" msgstr "Activat"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2107,6 +2120,9 @@ msgstr "Notificare"
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2858,6 +2874,9 @@ msgstr "Marime"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "" msgstr ""
@ -3220,7 +3239,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3428,7 +3447,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -777,6 +777,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "Список custom-ных feed-ов" msgstr "Список custom-ных feed-ов"
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1055,6 +1060,11 @@ msgstr "Чрезвычайная ситуация"
msgid "Enable" msgid "Enable"
msgstr "Включить" msgstr "Включить"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Включить <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Включить <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1112,6 +1122,9 @@ msgstr "Включить/выключить"
msgid "Enabled" msgid "Enabled"
msgstr "Включено" msgstr "Включено"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2235,6 +2248,9 @@ msgstr "Заметка"
msgid "Nslookup" msgid "Nslookup"
msgstr "DNS-запрос" msgstr "DNS-запрос"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -3043,6 +3059,9 @@ msgstr "Размер"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "Размер (.ipk)" msgstr "Размер (.ipk)"
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Пропустить" msgstr "Пропустить"
@ -3471,10 +3490,10 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"Это локальный адрес, назначенный туннельным брокером, обычно заканчивается " "Это локальный адрес, назначенный туннельным брокером, обычно заканчивается "
"на <code>:2</code>." "на <code>...:2/64</code>."
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3693,7 +3712,7 @@ msgstr "Использовать таблицу маршрутизации"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -704,6 +704,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -960,6 +965,11 @@ msgstr ""
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "" msgstr ""
@ -1017,6 +1027,9 @@ msgstr ""
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr ""
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2082,6 +2095,9 @@ msgstr ""
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "" msgstr ""
@ -2830,6 +2846,9 @@ msgstr ""
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "" msgstr ""
@ -3190,7 +3209,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3398,7 +3417,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -718,6 +718,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "Anpassade flöden" msgstr "Anpassade flöden"
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -980,6 +985,11 @@ msgstr "Nödsituation"
msgid "Enable" msgid "Enable"
msgstr "Aktivera" msgstr "Aktivera"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Aktivera <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Aktivera <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1037,6 +1047,9 @@ msgstr "Aktivera/Inaktivera"
msgid "Enabled" msgid "Enabled"
msgstr "Aktiverad" msgstr "Aktiverad"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2103,6 +2116,9 @@ msgstr "Avisering"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2853,6 +2869,9 @@ msgstr "Storlek"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "Storlek (.ipk)" msgstr "Storlek (.ipk)"
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Hoppa över" msgstr "Hoppa över"
@ -3215,7 +3234,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3425,7 +3444,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -697,6 +697,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -953,6 +958,11 @@ msgstr ""
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "" msgstr ""
@ -1010,6 +1020,9 @@ msgstr ""
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr ""
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2075,6 +2088,9 @@ msgstr ""
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "" msgstr ""
@ -2823,6 +2839,9 @@ msgstr ""
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "" msgstr ""
@ -3183,7 +3202,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3391,7 +3410,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -717,6 +717,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -973,6 +978,11 @@ msgstr ""
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "" msgstr ""
@ -1030,6 +1040,9 @@ msgstr ""
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr ""
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2095,6 +2108,9 @@ msgstr ""
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "" msgstr ""
@ -2843,6 +2859,9 @@ msgstr ""
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "" msgstr ""
@ -3203,7 +3222,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3411,7 +3430,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -755,6 +755,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -1034,6 +1039,11 @@ msgstr "Аварійний"
msgid "Enable" msgid "Enable"
msgstr "Увімкнути" msgstr "Увімкнути"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Увімкнути <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Увімкнути <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1091,6 +1101,9 @@ msgstr "Увімкнено/Вимкнено"
msgid "Enabled" msgid "Enabled"
msgstr "Увімкнено" msgstr "Увімкнено"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2191,6 +2204,9 @@ msgstr "Попередження"
msgid "Nslookup" msgid "Nslookup"
msgstr "DNS-запит" msgstr "DNS-запит"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@ -2973,6 +2989,9 @@ msgstr "Розмір"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "Пропустити" msgstr "Пропустити"
@ -3391,10 +3410,10 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
"Це локальна адреса кінцевої точки, присвоєна тунельним брокером, зазвичай " "Це локальна адреса кінцевої точки, присвоєна тунельним брокером, зазвичай "
"закінчується на <code>:2</code>" "закінчується на <code>...:2/64</code>"
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3614,7 +3633,7 @@ msgstr "Використовувати таблицю маршрутизації
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -711,6 +711,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -978,6 +983,11 @@ msgstr ""
msgid "Enable" msgid "Enable"
msgstr "" msgstr ""
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Kích hoạt <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Kích hoạt <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1035,6 +1045,9 @@ msgstr "Cho kích hoạt/ Vô hiệu hóa"
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr ""
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2112,6 +2125,9 @@ msgstr ""
msgid "Nslookup" msgid "Nslookup"
msgstr "" msgstr ""
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "OK " msgstr "OK "
@ -2870,6 +2886,9 @@ msgstr "Dung lượng "
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "" msgstr ""
@ -3240,7 +3259,7 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "" msgstr ""
msgid "" msgid ""
@ -3453,7 +3472,7 @@ msgstr ""
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -720,6 +720,12 @@ msgstr "自定义软件源地址,例如:私有的软件源。此文件在系
msgid "Custom feeds" msgid "Custom feeds"
msgstr "自定义软件源" msgstr "自定义软件源"
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
"自定义文件(证书、脚本)会保留在系统上。若无需保留,请先执行恢复出厂设置。"
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -987,6 +993,11 @@ msgstr "紧急"
msgid "Enable" msgid "Enable"
msgstr "启用" msgstr "启用"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "开启 <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "开启 <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1044,6 +1055,9 @@ msgstr "启用/禁用"
msgid "Enabled" msgid "Enabled"
msgstr "启用" msgstr "启用"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2127,6 +2141,9 @@ msgstr "注意"
msgid "Nslookup" msgid "Nslookup"
msgstr "Nslookup" msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr "缓存的 DNS 条目数量(最大 100000 表示不缓存)"
msgid "OK" msgid "OK"
msgstr "确认" msgstr "确认"
@ -2900,6 +2917,9 @@ msgstr "大小"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "大小(.ipk" msgstr "大小(.ipk"
msgid "Size of DNS query cache"
msgstr "DNS 查询缓存的大小"
msgid "Skip" msgid "Skip"
msgstr "跳过" msgstr "跳过"
@ -3283,8 +3303,8 @@ msgstr "启动脚本插入到 'exit 0' 之前即可随系统启动运行。"
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "隧道代理分配的本地终端地址,通常以 <code>:2</code> 结尾" msgstr "隧道代理分配的本地终端地址,通常以 <code>...:2/64</code> 结尾"
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3495,7 +3515,7 @@ msgstr "使用路由表"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -722,6 +722,11 @@ msgstr ""
msgid "Custom feeds" msgid "Custom feeds"
msgstr "" msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
msgid "" msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible." "\">LED</abbr>s if possible."
@ -990,6 +995,11 @@ msgstr "緊急"
msgid "Enable" msgid "Enable"
msgstr "啟用" msgstr "啟用"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "啟用 <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "啟用 <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@ -1047,6 +1057,9 @@ msgstr "啟用/關閉"
msgid "Enabled" msgid "Enabled"
msgstr "啟用" msgstr "啟用"
msgid "Enables IGMP snooping on this bridge"
msgstr ""
msgid "" msgid ""
"Enables fast roaming among access points that belong to the same Mobility " "Enables fast roaming among access points that belong to the same Mobility "
"Domain" "Domain"
@ -2119,6 +2132,9 @@ msgstr "通知"
msgid "Nslookup" msgid "Nslookup"
msgstr "DNS偵錯Nslookup" msgstr "DNS偵錯Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
msgstr ""
msgid "OK" msgid "OK"
msgstr "行" msgstr "行"
@ -2883,6 +2899,9 @@ msgstr "大小"
msgid "Size (.ipk)" msgid "Size (.ipk)"
msgstr "" msgstr ""
msgid "Size of DNS query cache"
msgstr ""
msgid "Skip" msgid "Skip"
msgstr "跳過" msgstr "跳過"
@ -3275,8 +3294,8 @@ msgstr ""
msgid "" msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually " "This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>:2</code>" "ends with <code>...:2/64</code>"
msgstr "這是由通道代理人指定的本地終端位址, 通常用 <code>:2</code>結尾." msgstr "這是由通道代理人指定的本地終端位址, 通常用 <code>...:2/64</code>結尾."
msgid "" msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@ -3487,7 +3506,7 @@ msgstr "使用路由表"
msgid "" msgid ""
"Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
"em> indentifies the host, the <em>IPv4-Address</em> specifies the fixed " "em> identifies the host, the <em>IPv4-Address</em> specifies the fixed "
"address to use, and the <em>Hostname</em> is assigned as a symbolic name to " "address to use, and the <em>Hostname</em> is assigned as a symbolic name to "
"the requesting host. The optional <em>Lease time</em> can be used to set non-" "the requesting host. The optional <em>Lease time</em> can be used to set non-"
"standard host-specific lease time, e.g. 12h, 3d or infinite." "standard host-specific lease time, e.g. 12h, 3d or infinite."

View file

@ -36,6 +36,7 @@ config qos
config system config system
option init led option init led
option exec '/etc/init.d/log reload'
list affects luci_statistics list affects luci_statistics
list affects dhcp list affects dhcp

View file

@ -0,0 +1,11 @@
{
"uci-access": {
"description": "Grant uci write access to all configurations",
"read": {
"uci": [ "*" ]
},
"write": {
"uci": [ "*" ]
}
}
}

BIN
luci-base/src/po2lmo Executable file

Binary file not shown.

BIN
luci-base/src/po2lmo.o Normal file

Binary file not shown.

Binary file not shown.