Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/share/examples/flua/libjail.lua
39530 views
1
#!/usr/libexec/flua
2
--[[
3
/*-
4
* SPDX-License-Identifier: BSD-2-Clause
5
*
6
* Copyright (c) 2020, Ryan Moeller <[email protected]>
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*/
29
]]--
30
31
jail = require("jail")
32
ucl = require("ucl")
33
34
name = "demo"
35
36
local has_demo = false
37
38
-- Make sure we don't have a demo jail to start with; "jid" and "name" are
39
-- always present.
40
for jparams in jail.list() do
41
if jparams["name"] == name then
42
has_demo = true
43
break
44
end
45
end
46
47
if not has_demo then
48
-- Create a persistent jail named "demo" with all other parameters default.
49
jid, err = jail.setparams(name, {persist = "true"}, jail.CREATE)
50
if not jid then
51
error(err)
52
end
53
end
54
55
-- Get a list of all known jail parameter names.
56
allparams = jail.allparams()
57
58
-- Get all the parameters of the jail we created.
59
jid, res = jail.getparams(name, allparams)
60
if not jid then
61
error(res)
62
end
63
64
-- Display the jail's parameters as a pretty-printed JSON object.
65
print(ucl.to_json(res))
66
67
-- Confirm that we still have it for now.
68
has_demo = false
69
for jparams in jail.list() do
70
if jparams["name"] == name then
71
has_demo = true
72
break
73
end
74
end
75
76
if not has_demo then
77
print("demo does not exist")
78
end
79
80
-- Update the "persist" parameter to "false" to remove the jail.
81
jid, err = jail.setparams(name, {persist = "false"}, jail.UPDATE)
82
if not jid then
83
error(err)
84
end
85
86
-- Verify that the jail is no longer on the system.
87
local is_persistent = false
88
has_demo = false
89
for jparams in jail.list({"persist"}) do
90
if jparams["name"] == name then
91
has_demo = true
92
jid = jparams["jid"]
93
is_persistent = jparams["persist"] ~= "false"
94
end
95
end
96
97
-- In fact, it does remain until this process ends -- c'est la vie.
98
if has_demo then
99
io.write("demo still exists, jid " .. jid .. ", ")
100
if is_persistent then
101
io.write("persistent\n")
102
else
103
io.write("not persistent\n")
104
end
105
end
106
107