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 )
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)])
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
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)])
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)])