jailconf

Parse and edit your FreeBSD jail.conf file


Keywords
jail, conf
License
BSD-3-Clause
Install
pip install jailconf==0.2.2

Documentation

Parse and edit your FreeBSD jail.conf file with python.

Installation

To install jailconf, simply:

pip3 install jailconf

jailconf requires Python 3.

Examples

import jailconf

Load the configuration from a path

conf = jailconf.load('/etc/jail.conf')

Load the configuration from a string

conf = jailconf.loads(open('/etc/jail.conf').read())

Create an empty configuration

conf = jailconf.JailConf()

The configuration is represented as a dictionnary (actually a subclass of OrderedDict).

Let's modify some settings.

The quoted strings in the configuration should be passed with the quotes. For example, to obtain the setting:

path = "/var/jail/$name";

you write:

conf['path'] = '"/var/jail/$name"'

The string should be exactly what you want to appear on the right side of the parameter name in the configuration file. If you want the value of a parameter to be a quoted string, you pass a string containing a quoted string. This allows you to specify what kind of quotes you want to see in the output configuration file (single quotes, double quotes, or no quote at all).

conf['exec.start'] = '"/bin/sh /etc/rc"'
conf['exec.stop'] = '"/bin/sh /etc/rc.shutdown"'

Boolean parameters. To obtain:

exec.clean;
mount.devfs;

you write:

conf['exec.clean'] = True
conf['mount.devfs'] = True

Add a jail:

conf['myjail'] = jailconf.JailBlock([
    ('host.hostname', '"example.com"'),
    ('ip4.addr', ['10.1.1.1', '10.1.1.2', '10.1.1.3'])
])

Modify a jail

conf['myjail']['ip4.addr'] = '192.168.1.2' # this will be rendered as the line: ip4.addr = 192.168.1.2

# To set multiple ips, use a list:

conf['myjail']['ip4.addr'] = ['192.168.1.2', '192.168.1.3']

Delete a jail

del conf['uselessjail']

Iterate over jails

for name, jail_block in conf.jails():
    jail_block['host.hostname'] = '"%s"' % name

Output the configuration as a string

>>> print(conf.dumps())
path = "/var/jail/$name";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
myjail {
        host.hostname = "myjail";
        ip4.addr = 192.168.1.2, 192.168.1.3;
}

Write the configuration to a file

conf.write('/etc/jail.conf')

GitHub repo: https://github.com/leforestier/jailconf