#!/usr/bin/lua --[[ UCI Validation Layer - Command Line Utility (c) 2008 Jo-Philipp Wich (c) 2008 Steven Barth Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 $Id$ ]]-- require("luci.uvl") require("luci.util") function getopt( arg, options ) options = options or "" local tab = {} local args = {} for k, v in ipairs(arg) do if v:sub(1, 2) == "--" then local x = v:find( "=", 1, true ) if x then tab[ v:sub( 3, x-1 ) ] = v:sub( x+1 ) else tab[ v:sub( 3 ) ] = true end elseif v:sub( 1, 1 ) == "-" then local y = 2 local l = #v local jopt while ( y <= l ) do jopt = v:sub( y, y ) if options:find( jopt, 1, true ) then if y < l then tab[ jopt ] = v:sub( y+1 ) y = l else tab[ jopt ] = arg[ k + 1 ] arg[ k + 1 ] = "" end else tab[ jopt ] = true end y = y + 1 end elseif #v > 0 then table.insert(args, v) end end return tab, args end local options, arguments = getopt( arg ) if #arguments == 0 or options.help then print([=[ uvl - UCI Validation Layer $Id$ (c) 2008 Jo-Philipp Wich, Steven Barth Usage: uvl --help uvl [--silent] [--schemedir=DIR] [--no-strict-sections] [--no-strict-options] [--no-strict-validators] config[.section[.option]] Options: --help Display this help message. --silent Don't produce any output. --schemedir=DIR Use DIR as scheme directory. --no-strict-sections Don't treat sections found in config but not in scheme as error. --no-strict-options Don't treat options found in config but not in scheme as error. --no-strict-validators Don't invalidate config if an external validator fails. ]=]) os.exit(255) else luci.uvl.STRICT_UNKNOWN_SECTIONS = ( options['no-strict-sections'] and false or true ) luci.uvl.STRICT_UNKNOWN_OPTIONS = ( options['no-strict-options'] and false or true ) luci.uvl.STRICT_EXTERNAL_VALIDATORS = ( options['no-strict-validators'] and false or true ) local uvl = luci.uvl.UVL( type(options.schemedir) == "string" and options.schemedir or nil ) local cso = luci.util.split( arguments[1], "." ) local ok, err = uvl:validate( unpack(cso) ) if ok then if not options.silent then print( string.format( '%s "%s" validates fine!', ( #cso == 1 and "Config" or ( #cso == 2 and "Section" or "Option" ) ), table.concat(cso, ".") ) ) end os.exit( 0 ) else if not options.silent then print( err ) end os.exit( 1 ) end end