1-- 2-- Copyright (c) 2015 Pedro Souza <pedrosouza@freebsd.org> 3-- Copyright (c) 2018 Kyle Evans <kevans@FreeBSD.org> 4-- All rights reserved. 5-- 6-- Redistribution and use in source and binary forms, with or without 7-- modification, are permitted provided that the following conditions 8-- are met: 9-- 1. Redistributions of source code must retain the above copyright 10-- notice, this list of conditions and the following disclaimer. 11-- 2. Redistributions in binary form must reproduce the above copyright 12-- notice, this list of conditions and the following disclaimer in the 13-- documentation and/or other materials provided with the distribution. 14-- 15-- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18-- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25-- SUCH DAMAGE. 26-- 27-- $FreeBSD$ 28-- 29 30local config = require("config") 31local menu = require("menu") 32local password = require("password") 33local local_module 34 35local result, errstr, errnoval = lfs.attributes("/boot/lua/local.lua") 36-- Effectively discard any errors; we'll just act if it succeeds. 37if result ~= nil then 38 local_module = require("local") 39end 40 41-- Declares a global function cli_execute that attempts to dispatch the 42-- arguments passed as a lua function. This gives lua a chance to intercept 43-- builtin CLI commands like "boot" 44function cli_execute(...) 45 local argv = {...} 46 -- Just in case... 47 if #argv == 0 then 48 loader.command(...) 49 return 50 end 51 52 local cmd_name = argv[1] 53 local cmd = _G[cmd_name] 54 if cmd ~= nil and type(cmd) == "function" then 55 -- Pass argv wholesale into cmd. We could omit argv[0] since the 56 -- traditional reasons for including it don't necessarily apply, 57 -- it may not be totally redundant if we want to have one global 58 -- handling multiple commands 59 cmd(...) 60 else 61 loader.command(...) 62 end 63 64end 65 66config.load() 67password.check() 68menu.run() 69