diff options
-rwxr-xr-x | ezjail-admin | 74 |
1 files changed, 67 insertions, 7 deletions
diff --git a/ezjail-admin b/ezjail-admin index 19725d2..324168f 100755 --- a/ezjail-admin +++ b/ezjail-admin | |||
@@ -2,6 +2,7 @@ | |||
2 | 2 | ||
3 | # ugly: this variable is set during port install time | 3 | # ugly: this variable is set during port install time |
4 | ezjail_prefix=EZJAIL_PREFIX | 4 | ezjail_prefix=EZJAIL_PREFIX |
5 | ezjail_jailcfgs=${ezjail_prefix}/etc/ezjail | ||
5 | 6 | ||
6 | if [ "0" != "`id -u`" ]; then | 7 | if [ "0" != "`id -u`" ]; then |
7 | echo "Retry as root"; exit 1; | 8 | echo "Retry as root"; exit 1; |
@@ -24,8 +25,9 @@ ezjail_procfs_enable=${ezjail_procfs_enable:-"YES"} | |||
24 | ezjail_fdescfs_enable=${ezjail_fdescfs_enable:-"YES"} | 25 | ezjail_fdescfs_enable=${ezjail_fdescfs_enable:-"YES"} |
25 | 26 | ||
26 | # check for command | 27 | # check for command |
27 | if [ -z "$1" ]; | 28 | if [ -z "$1" ]; then |
28 | then echo "Usage: `basename $0` [create|delete|list|update] {params}"; exit; | 29 | echo "Usage: `basename $0` [create|delete|list|update] {params}"; |
30 | exit 1; | ||
29 | fi | 31 | fi |
30 | 32 | ||
31 | case "$1" in | 33 | case "$1" in |
@@ -33,10 +35,12 @@ create) | |||
33 | shift | 35 | shift |
34 | args=`getopt xr: $*` | 36 | args=`getopt xr: $*` |
35 | if [ $? != 0 ]; then | 37 | if [ $? != 0 ]; then |
36 | echo 'Usage: ezjail create [-r jailroot] [-x] jailname jailip'; exit 1; | 38 | echo 'Usage: ezjail create [-r jailroot] [-x] jailname jailip'; |
39 | exit 1; | ||
37 | fi | 40 | fi |
38 | 41 | ||
39 | newjail_root= | 42 | newjail_root= |
43 | newjail_softlink= | ||
40 | newjail_fill="YES" | 44 | newjail_fill="YES" |
41 | 45 | ||
42 | for arg in args; do | 46 | for arg in args; do |
@@ -48,16 +52,72 @@ create) | |||
48 | done; | 52 | done; |
49 | newjail_name=$1; newjail_ip=$2; shift 2; | 53 | newjail_name=$1; newjail_ip=$2; shift 2; |
50 | 54 | ||
55 | # wee need at least a name and an ip for new jail | ||
51 | if [ -z "$newjail_name" -o -z "$newjail_ip" -o $# != 0 ]; then | 56 | if [ -z "$newjail_name" -o -z "$newjail_ip" -o $# != 0 ]; then |
52 | echo 'Usage: ezjail create [-r jailroot] [-x] jailname jailip'; exit 1; | 57 | echo 'Usage: ezjail create [-r jailroot] [-x] jailname jailip'; exit 1; |
53 | fi | 58 | fi |
54 | 59 | ||
55 | echo running CREATE $newjail_name $newjail_ip $newjail_fill | 60 | # relative paths don't make sense in rc.scripts |
61 | if [ ${ezjail_jaildir:1:1} != / ]; then | ||
62 | echo Error: Need an absolute path in ezjail_jaildir, it is currently set to: $ezjail_jaildir | ||
63 | exit 1; | ||
64 | fi | ||
65 | |||
66 | # jail names must not have names that irritate file systems, | ||
67 | # excluding dots from this list was done intentionally to | ||
68 | # allow foo.com style directory names, however, the jail | ||
69 | # name will be foo_com in most scripts | ||
70 | newjail_name=`echo $newjail_name | tr /~ __`; | ||
71 | newjail_root=${newjail_root:-"$ezjail_jaildir/$newjail_name"} | ||
72 | newjail_nname=`echo $newjail_name | tr . _`; | ||
73 | |||
74 | # if jail root specified on command line is not absolute, | ||
75 | # make it absolute inside our jail directory | ||
76 | if [ ${newjail_root:1:1} != / ]; then | ||
77 | newjail_root=$ezjail_jaildir/$newjail_root | ||
78 | fi | ||
79 | |||
80 | # if jail root specified on command line does not lie | ||
81 | # within our jail directory, we need to create a softlink | ||
82 | if [ ${newjail_root##${ezjail_jaildir}} = $newjail_root ]; then | ||
83 | newjail_softlink=$ezjail_jaildir/`basename $newjail_root` | ||
84 | if [ -e $newjail_softlink -a $newjail_fill = "YES" ]; then | ||
85 | echo Error: an ezjail already exists at $newjail_softlink | ||
86 | exit 1; | ||
87 | fi | ||
88 | fi | ||
89 | fi | ||
90 | |||
91 | # now take a copy of our template jail | ||
92 | if [ $newjail_fill = "YES" ]; then | ||
93 | mkdir -p ${newjail_root} && cd ${ezjail_jailtemplate} \ | ||
94 | && find * | cpio -p -v ${newjail_root} | ||
95 | fi | ||
96 | |||
97 | # if a soft link is necessary, create it now | ||
98 | if [ $newjail_softlink ]; then | ||
99 | ln -s $newjail_root $newjail_softlink | ||
100 | fi | ||
56 | 101 | ||
57 | exit | 102 | # if the automount feature is not disabled, create an |
103 | # fstab entry for new jail | ||
104 | echo $ezjail_jailbase $newjail_root/basejail nullfs ro 0 0 > /etc/fstab.$newjail_name | ||
105 | |||
106 | # now, where everything seems to have gone right, | ||
107 | # create control file in ezjails config dir | ||
108 | mkdir -p $ezjail_jailcfgs | ||
109 | echo \ | ||
110 | jail_${newjail_nname}_hostname=\"${newjail_name}\" \n \ | ||
111 | jail_${newjail_nname}_ip=\"${newjail_ip}\" \n \ | ||
112 | jail_${newjail_nname}_rootdir=\"${newjail_root}\" \n \ | ||
113 | jail_${newjail_nname}_exec=\"/bin/sh /etc/rc\" | ||
114 | jail_${newjail_nname}_mount_enable=\"${ezjail_mount_enable}\" \n \ | ||
115 | jail_${newjail_nname}_devfs_enable=\"${ezjail_devfs_enable}\" \n \ | ||
116 | jail_${newjail_nname}_devfs_ruleset="devfsrules_jail" | ||
117 | jail_${newjail_nname}_procfs_enable=\"${ezjail_procfs_enable}\" \n \ | ||
118 | jail_${newjail_nname}_fdescfs_enable=\"${ezjail_fdescfs_enable}\" \n \ | ||
119 | > ${ezail_jailcfgs}/newjail_nname | ||
58 | 120 | ||
59 | mkdir ${newjail_root} && cd ${ezjail_jailtemplate} \ | ||
60 | && find * | cpio -p -v ${newjail_root} | ||
61 | ;; | 121 | ;; |
62 | delete) | 122 | delete) |
63 | 123 | ||