#!/usr/libexec/flua local ucl = require("ucl") local function load_rc_config(str) local rc_config = io.popen("set -o allexport; . /etc/rc.subr; load_rc_config ".. arg[1] .."; env") local s = rc_config:read("*a") rc_config:close() local t = {} for k,v in string.gmatch(s, "([^=]*)=([^\n]*)\n") do t[k] = v end return t end local function errmsg(str) io.stderr:write(str) os.exit(1) end local function read_rc(file) local parser = ucl.parser() local res,err = parser:parse_file(file) if not res then errmsg("error parsing ".. file ..": ".. err .. "\n") end local obj = parser:get_object() return obj end if #arg < 2 then errmsg("usage ".. arg[1] .. " [fast|force|one|quiet]".. "(start|stop|restart|rcvar|enable|disable|delete|enabled|describe|extracommands|reset)\n") end local function start(rc) if not rc.start then return end local start_fct = assert(load(rc.start)) start_fct(config) end local function stop() print("stop") end local function restart() print("restart") end local rcfile = arg[1] local command_tbl = { ["start"] = start, ["stop"] = stop, ["restart"] = restart, ["rcvar"] = rcvar, ["enable"] = enable, ["disable"] = disable, ["delete"] = delete, ["enabled"] = enabled, ["describe"] = describe, ["extracommands"] = extracommands, ["reset"] = reset, ["status"] = status, } local rcobj = read_rc(rcfile) rc_config = load_rc_config(rcobj.name) local cmd = command_tbl[arg[2]] if (cmd) then cmd(rcobj, config) else errmsg("invalid command ".. arg[2] .. "\n") end