Beispiel #1
0
def mount(
    destination: str,
    source: str=None,
    fstype: str="nullfs",
    opts: typing.List[str]=[],
    logger: typing.Optional['libioc.Logger.Logger']=None,
    **iov_data: typing.Any
) -> None:
    """Mount a filesystem using libc."""
    data: typing.Dict[str, typing.Optional[str]] = dict(
        fstype=fstype,
        fspath=destination
    )
    for key, value in iov_data.items():
        data[key] = str(value)
    if source is not None:
        if fstype == "nullfs":
            data["target"] = source
        else:
            data["from"] = source
    for opt in opts:
        data[opt] = None
    jiov = libjail.Jiov(data)
    if libjail.dll.nmount(jiov.pointer, len(jiov), 0) != 0:
        raise libioc.errors.MountFailed(
            mountpoint=destination,
            reason=jiov.errmsg.value.decode("UTF-8"),
            logger=logger
        )
Beispiel #2
0
def test_jail_create() -> None:
    jiov = jail.Jiov(dict(persist=None, path="/rescue"))
    jid = jail.dll.jail_set(jiov.pointer, len(jiov), 1)
    try:
        assert isinstance(jid, int)
        assert jid > 0
    finally:
        subprocess.check_output([jail_command, "-r", str(jid)])
Beispiel #3
0
def test_jiov_length():
    data = dict(persist=None, path="/rescue")
    jiov = jail.Jiov(data)

    print(dict(jiov.items()))

    data_length = len(data)
    assert len(dict(jiov.items())) == data_length
    assert len(list(jiov.keys())) == data_length
    assert len(list(jiov.values())) == data_length

    struct_length = (len(data) + 1) * 2  # (data + errmsg) key/value pairs
    assert len(jiov.struct) == struct_length
    assert len(jiov) == struct_length
Beispiel #4
0
def test_configure_ipv4_addresses_for_non_vnet_jail(
    ipv4_address: ipaddress.IPv4Address,
    bridge_interface: str
) -> None:
    subprocess.check_output(
        [ifconfig_command, bridge_interface, "inet", str(ipv4_address)]
    )
    jiov = jail.Jiov({
        "persist": None,
        "path": "/rescue",
        "ip4.addr": [ipv4_address]
    })
    jid = jail.dll.jail_set(jiov.pointer, len(jiov), 1)
    try:
        assert isinstance(jid, int)
        assert jid > 0

        assert str(ipv4_address) in subprocess.check_output(
            [jexec_command, str(jid), "/ifconfig", bridge_interface]
        ).decode("UTF-8")
    finally:
        subprocess.check_output([jail_command, "-r", str(jid)])
Beispiel #5
0
def test_configure_miltiple_ipv4_addresses_for_non_vnet_jail(
    ipv4_address: ipaddress.IPv4Address,
    bridge_interface: str
) -> None:
    ip1 = ipaddress.IPv4Address("192.0.2." + str(random.randint(1,254)))
    ip2 = ipaddress.IPv4Address("192.0.2." + str(random.randint(1,254)))

    print("IPS", str(ip1), str(ip2))
    subprocess.check_output(
        [ifconfig_command, bridge_interface, "inet", str(ip1), "alias"]
    )
    subprocess.check_output(
        [ifconfig_command, bridge_interface, "inet", str(ip2), "alias"]
    )
    jiov = jail.Jiov({
        "persist": None,
        "path": "/rescue",
        "ip4.addr": [ip1, ip2]
    })
    jid = jail.dll.jail_set(jiov.pointer, len(jiov), 1)
    try:
        assert isinstance(jid, int)
        assert jid > 0

        stdout = subprocess.check_output(
            [jexec_command, str(jid), "/ifconfig", bridge_interface]
        ).decode("UTF-8")
        print(stdout)
        print(subprocess.check_output(
            ["jls", "-n"]
        ).decode("UTF-8"))

        assert str(ip1) in stdout
        assert str(ip2) in stdout
    finally:
        subprocess.check_output([jail_command, "-r", str(jid)])