diff --git a/CHANGELOG.md b/CHANGELOG.md index 525184e..d2a9c1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added +- Packages: `get_packages`, `install_package`, `uninstall_package`. +- Updates: `get_available_updates`, with VuXML's verdict as `security` on + FreeBSD and base-system patches as one `base-system` entry (OpenBSD + `syspatch`, classic FreeBSD `freebsd-update`). +- Services: `get_services` and `manage_service` (start, stop, restart, + enable, disable) through `service` and `rcctl`. - `get_listening_sockets()` in the shape of `ListeningSocketsMixin`: FreeBSD through `sockstat`, OpenBSD through `fstat` as root and `netstat -an` without, which the reading reports as `attributed: False`. diff --git a/README.md b/README.md index be3fb9d..f948037 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,9 @@ over SSH, built on [napalm-device-types](https://git.netork.io/NAPALM/napalm-dev | `get_lldp_neighbors` | `{}` | `{}` | no LLDP daemon in either base system | | `get_users`, `get_processes`, `get_cron_jobs` | ✓ | ✓ | `/etc/passwd`+`/etc/group`, `ps … lstart`, system crontab + `crontab -l` | | `get_listening_sockets` | ✓ | ✓ | `sockstat -46lq` / `fstat -n` as root, `netstat -an` without | +| `get_packages`, `install_package`, `uninstall_package` | ✓ | ✓ | `pkg query` / `pkg install`, `pkg delete`; `pkg_info` / `pkg_add -I`, `pkg_delete` | +| `get_available_updates` | ✓ | ✓ | `pkg upgrade -n` + `pkg audit` (VuXML); `pkg_add -u -n -v` + `syspatch -c` | +| `get_services`, `manage_service` | ✓ | ✓ | `service -e` + `service … status` / `service … `; `rcctl ls on` + `rcctl check` / `rcctl ` | `get_listening_sockets` has the shape of napalm-device-types' `ListeningSocketsMixin` (whose `ss`/cgroup reading is Linux's) and its rule: @@ -45,7 +48,20 @@ There is deliberately no `get_kernel_facts`: `KernelFactsMixin` reports a Linux kernel's modules and `CONFIG_*` options, which a BSD kernel does not have, and `hasattr(driver, "get_kernel_facts")` has to stay truthful. -Packages, services, updates (#799) and SNMP (#800) follow. +**Updates.** `security` on FreeBSD comes from VuXML (`pkg audit`): True for a +package it lists as vulnerable, False for one it does not, None when the audit +could not run. OpenBSD's tools do not say, so it is None there. Base-system +patches are one entry, `base-system` (NetOrk/netork#799): OpenBSD's +`syspatch` applies its patches together and in order; a classic FreeBSD base +reports what `freebsd-update` has fetched (`updatesready`). On FreeBSD with +pkgbase the base system is packages from the `FreeBSD-base` repository and +needs no extra entry. + +**Services** are the enabled ones. FreeBSD reads their status as root, as +root-only pidfiles hide a daemon from anyone else, and without root when sudo +refuses; OpenBSD's `rcctl check` needs no root. Actions run as root. + +SNMP (#800) follows. ## Connection arguments diff --git a/napalm_bsd/base.py b/napalm_bsd/base.py index 8b9c1a3..0ce5f58 100644 --- a/napalm_bsd/base.py +++ b/napalm_bsd/base.py @@ -9,6 +9,7 @@ stdin, as napalm-linux does it. from __future__ import annotations import logging +import re import socket from shlex import quote from typing import Any, Optional @@ -27,6 +28,14 @@ from napalm_bsd import parse logger = logging.getLogger(__name__) +#: The update-list entry for base-system patches (OpenBSD syspatch, classic +#: FreeBSD freebsd-update): one entry, as they are applied together (#799). +BASE_SYSTEM = "base-system" + +_SERVICE_ACTIONS = frozenset({"start", "stop", "restart", "enable", "disable"}) +_SERVICE_NAME = re.compile(r"^[A-Za-z0-9][A-Za-z0-9_.-]*$") +_PACKAGE_NAME = re.compile(r"^[A-Za-z0-9][A-Za-z0-9_.+-]*$") + class BsdDriver(OSDriver): """Base for the BSD drivers; a concrete one names the commands that differ.""" @@ -277,6 +286,64 @@ class BsdDriver(OSDriver): "sockets": self._parse_listening(plain.stdout, attributed=False), } + # -- packages ----------------------------------------------------------------- + + #: ``{name}`` is the package (with its version, when one is asked for). + INSTALL_COMMAND = "" + UNINSTALL_COMMAND = "" + + def _package_command(self, template: str, name: str) -> None: + """Run a package command as root; a failure raises with what it printed.""" + result = self.run_command(template.format(name=name), privileged=True, timeout=600) + if result.exit_code != 0: + raise RuntimeError( + (result.stderr or result.stdout).strip() or f"{name}: exit {result.exit_code}" + ) + + def install_package(self, name: str, version: str = "") -> None: + if not _PACKAGE_NAME.match(name) or (version and not _PACKAGE_NAME.match(version)): + raise ValueError(f"Not a package name: {name!r}") + self._package_command(self.INSTALL_COMMAND, f"{name}-{version}" if version else name) + + def uninstall_package(self, name: str) -> None: + if not _PACKAGE_NAME.match(name): + raise ValueError(f"Not a package name: {name!r}") + self._package_command(self.UNINSTALL_COMMAND, name) + + # -- services ----------------------------------------------------------------- + + #: Prints ``namestatus`` per enabled service; parsed by :meth:`_parse_services`. + SERVICE_STATUS_COMMAND = "" + #: ``{name}`` and ``{action}`` (start, stop, restart, enable, disable). + SERVICE_ACTION_COMMAND = "" + + def _parse_services(self, output: str) -> list[dict[str, Any]]: + raise NotImplementedError + + def get_services(self) -> list[dict[str, Any]]: + """The enabled services, whether each runs, and its PID where known. + + Read as root where the status needs it, and without root otherwise. + """ + result = self.run_command(self.SERVICE_STATUS_COMMAND, privileged=True, timeout=120) + if result.exit_code != 0 or not result.stdout.strip(): # no root: sudo refused + result = self.run_command(self.SERVICE_STATUS_COMMAND, timeout=120) + return self._parse_services(result.stdout) + + def manage_service(self, name: str, action: str) -> dict[str, Any]: + """Applies *action* to the service *name*, as root. + + :returns: ``{"success": bool, "output": str}`` + :raises ValueError: for an unknown action or an invalid name, before + anything is sent. + """ + if action not in _SERVICE_ACTIONS or not _SERVICE_NAME.match(name): + raise ValueError(f"Cannot {action!r} service {name!r}") + command = self.SERVICE_ACTION_COMMAND.format(name=name, action=action) + result = self.run_command(command, privileged=True, timeout=120) + output = "\n".join(filter(None, (result.stdout.strip(), result.stderr.strip()))) + return {"success": result.exit_code == 0, "output": output} + # -- accounts, processes, cron ----------------------------------------------- def get_users(self) -> list[dict[str, Any]]: diff --git a/napalm_bsd/freebsd.py b/napalm_bsd/freebsd.py index fbe4245..4906043 100644 --- a/napalm_bsd/freebsd.py +++ b/napalm_bsd/freebsd.py @@ -5,7 +5,7 @@ from __future__ import annotations from napalm_device_types import FingerprintRule from napalm_bsd import parse -from napalm_bsd.base import BsdDriver +from napalm_bsd.base import BASE_SYSTEM, BsdDriver class FreeBSDDriver(BsdDriver): @@ -35,6 +35,68 @@ class FreeBSDDriver(BsdDriver): def _parse_listening(self, output: str, *, attributed: bool) -> list[dict]: return parse.sockstat(output) + PKG_QUERY = "pkg query '%n\t%v\t%R\t%sb\t%c'" + INSTALL_COMMAND = "pkg install -y {name}" + UNINSTALL_COMMAND = "pkg delete -y {name}" + # Root reads every daemon's pidfile; one-shot scripts have no status. + SERVICE_STATUS_COMMAND = ( + "for s in $(service -e); do n=${s##*/}; " + 'printf "%s\\t%s\\n" "$n" "$(service $n status 2>&1 | head -1)"; done' + ) + SERVICE_ACTION_COMMAND = "service {name} {action}" + + def _parse_services(self, output: str) -> list[dict]: + return parse.service_status(output) + + def _has_pkg(self) -> bool: + """pkg is bootstrapped; a hand-installed classic system may have only the stub.""" + return self.run_command("pkg -N").exit_code == 0 + + def get_packages(self) -> list[dict]: + return parse.pkg_query(self._out(self.PKG_QUERY)) if self._has_pkg() else [] + + def get_available_updates(self) -> list[dict]: + """Package updates from ``pkg upgrade -n``, and fetched base-system updates. + + ``security`` comes from VuXML (``pkg audit``): True for a package it + lists as vulnerable, False for one it does not, None when the audit + could not run. On pkgbase the base system is packages from the + FreeBSD-base repository; a classic base reports one entry (#799). + """ + updates: list[dict] = [] + if self._has_pkg(): + updates = parse.pkg_upgrades(self._out("pkg upgrade -n", privileged=True, timeout=300)) + audit = self.run_command("pkg audit -Fq", privileged=True, timeout=120) + known = audit.exit_code in (0, 1) # 1: vulnerable packages found + vulnerable = parse.pkg_audit(audit.stdout) if known else set() + for update in updates: + update["security"] = (update["name"] in vulnerable) if known else None + if "FreeBSD-base" in self._out("pkg repos -l").split(): + return updates + return updates + self._base_updates() + + def _base_updates(self) -> list[dict]: + """A classic base system's updates, as freebsd-update fetched them. + + ``updatesready`` exits 0 when fetched updates wait to be installed and + 2 when there are none; it does not fetch, which ``freebsd-update cron`` + does daily where it is enabled. + """ + ready = self.run_command( + "freebsd-update --not-running-from-cron updatesready", privileged=True, timeout=60 + ) + if ready.exit_code != 0: + return [] + return [ + { + "name": BASE_SYSTEM, + "current_version": self._out("freebsd-version -u"), + "new_version": "fetched by freebsd-update", + "origin": "freebsd-update", + "security": None, + } + ] + def _os_version(self) -> str: version = super()._os_version() return f"FreeBSD {version}" if version else "" diff --git a/napalm_bsd/openbsd.py b/napalm_bsd/openbsd.py index 831ec66..66130eb 100644 --- a/napalm_bsd/openbsd.py +++ b/napalm_bsd/openbsd.py @@ -5,7 +5,7 @@ from __future__ import annotations from napalm_device_types import FingerprintRule from napalm_bsd import parse -from napalm_bsd.base import BsdDriver +from napalm_bsd.base import BASE_SYSTEM, BsdDriver class OpenBSDDriver(BsdDriver): @@ -33,6 +33,56 @@ class OpenBSDDriver(BsdDriver): def _parse_listening(self, output: str, *, attributed: bool) -> list[dict]: return parse.fstat_sockets(output) if attributed else parse.netstat_listening(output) + INSTALL_COMMAND = "pkg_add -I {name}" + UNINSTALL_COMMAND = "pkg_delete {name}" + # rcctl check needs no root; "rcctl ls started" does. + SERVICE_STATUS_COMMAND = ( + "for s in $(rcctl ls on); do " + "if rcctl check $s >/dev/null 2>&1; then r=1; else r=0; fi; " + 'printf "%s\\t%s\\n" "$s" "$r"; done' + ) + SERVICE_ACTION_COMMAND = "rcctl {action} {name}" + + def _parse_services(self, output: str) -> list[dict]: + return parse.rcctl_check(output) + + def get_services(self) -> list[dict]: + return self._parse_services(self._out(self.SERVICE_STATUS_COMMAND, timeout=120)) + + def get_packages(self) -> list[dict]: + return parse.pkg_info(self._out("pkg_info")) + + def get_available_updates(self) -> list[dict]: + """Package updates from ``pkg_add -u -n -v``, and the base system's syspatches. + + syspatch applies its patches together and in order, so they are one + entry (#799). Neither tool says which update is a security fix. + """ + updates: list[dict] = [ + {**candidate, "origin": None, "security": None} + for candidate in parse.pkg_add_candidates( + self._out("pkg_add -u -n -v", privileged=True, timeout=300) + ) + ] + patches = parse.syspatch(self._out("syspatch -c", privileged=True, timeout=120)) + if patches: + installed = parse.syspatch(self._out("syspatch -l", privileged=True)) + summary = ( + ", ".join(patches) + if len(patches) <= 3 + else f"{len(patches)} patches: {patches[0]} … {patches[-1]}" + ) + updates.append( + { + "name": BASE_SYSTEM, + "current_version": installed[-1] if installed else self._out("uname -r"), + "new_version": summary, + "origin": "syspatch", + "security": None, + } + ) + return updates + def _hardware(self) -> tuple[str, str, str]: hw = self._platform() return hw.get("vendor", ""), hw.get("product", ""), hw.get("serialno", "") diff --git a/napalm_bsd/parse.py b/napalm_bsd/parse.py index 261ce72..24a38b3 100644 --- a/napalm_bsd/parse.py +++ b/napalm_bsd/parse.py @@ -347,3 +347,146 @@ def netstat_listening(text: str) -> list[dict[str, Any]]: continue sockets.append(_socket(proto, local, family, None, None)) return _unique(sockets) + + +# -- packages, updates, services --------------------------------------------------- + +_PACKAGE_NAME = re.compile(r"^(?P\S+?)-(?P\d\S*)$") + + +def split_package(full: str) -> tuple[str, str]: + """An OpenBSD package name: ``bash-completion-2.17.0`` -> (``bash-completion``, ``2.17.0``). + + The version starts at the first ``-`` followed by a digit. + """ + match = _PACKAGE_NAME.match(full) + return (match["name"], match["version"]) if match else (full, "") + + +def pkg_query(text: str) -> list[dict[str, Any]]: + """FreeBSD ``pkg query '%n\\t%v\\t%R\\t%sb\\t%c'``; the source is the repository.""" + packages = [] + for line in text.splitlines(): + parts = line.split("\t") + if len(parts) < 5: + continue + name, version, repo, size, comment = parts[:5] + packages.append( + { + "name": name, + "version": version, + "installed": True, + "description": comment, + "size": int(size) if size.isdigit() else 0, + "source": repo, + } + ) + return packages + + +def pkg_info(text: str) -> list[dict[str, Any]]: + """OpenBSD ``pkg_info``: ``name-version comment`` per installed package.""" + packages = [] + for line in text.splitlines(): + full, _, comment = line.partition(" ") + if not full: + continue + name, version = split_package(full) + packages.append( + { + "name": name, + "version": version, + "installed": True, + "description": comment.strip(), + "size": 0, + "source": "pkg_add", + } + ) + return packages + + +_PKG_UPGRADE = re.compile( + r"^\s+(?P\S+): (?P\S+) -> (?P\S+)(?: \[(?P[^\]]+)\])?" +) + + +def pkg_upgrades(text: str) -> list[dict[str, Any]]: + """FreeBSD ``pkg upgrade -n``: the packages it would upgrade, with their repository.""" + updates = [] + for line in text.splitlines(): + match = _PKG_UPGRADE.match(line) + if match: + updates.append( + { + "name": match["name"], + "current_version": match["old"], + "new_version": match["new"], + "origin": match["repo"], + } + ) + return updates + + +def pkg_audit(text: str) -> set[str]: + """FreeBSD ``pkg audit -q``: the names of the vulnerable packages (VuXML).""" + names = set() + for line in text.splitlines(): + line = line.strip() + if line: + names.add(line.rpartition("-")[0] or line) + return names + + +_CANDIDATE = re.compile(r"^Update candidates: (?P\S+) -> (?P\S+)$") + + +def pkg_add_candidates(text: str) -> list[dict[str, Any]]: + """OpenBSD ``pkg_add -u -n -v``: the candidates whose version changes.""" + updates: list[dict[str, Any]] = [] + seen = set() + for line in text.splitlines(): + match = _CANDIDATE.match(line.strip()) + if not match or match["old"] == match["new"] or match["old"] in seen: + continue + seen.add(match["old"]) + name, old = split_package(match["old"]) + _, new = split_package(match["new"]) + updates.append({"name": name, "current_version": old, "new_version": new}) + return updates + + +def syspatch(text: str) -> list[str]: + """OpenBSD ``syspatch -c`` / ``-l``: one patch name per line.""" + return [line.strip() for line in text.splitlines() if re.match(r"^\d{3}_\S+$", line.strip())] + + +_RUNNING = re.compile(r"is running as pid (\d+)") + + +def service_status(text: str) -> list[dict[str, Any]]: + """FreeBSD: ``namefirst line of 'service name status'`` per enabled service.""" + services = [] + for line in text.splitlines(): + name, _, status = line.partition("\t") + if not name: + continue + running = _RUNNING.search(status) + services.append( + { + "name": name, + "running": bool(running), + "enabled": True, + "pid": int(running[1]) if running else 0, + } + ) + return services + + +def rcctl_check(text: str) -> list[dict[str, Any]]: + """OpenBSD: ``name1|0`` per enabled service, from ``rcctl check``.""" + services = [] + for line in text.splitlines(): + name, _, ok = line.partition("\t") + if name: + services.append({"name": name, "running": ok.strip() == "1", "enabled": True, "pid": 0}) + return services diff --git a/tests/fixtures/freebsd-vm/COMMANDS.txt b/tests/fixtures/freebsd-vm/COMMANDS.txt index 4f0e81f..c2c4576 100644 --- a/tests/fixtures/freebsd-vm/COMMANDS.txt +++ b/tests/fixtures/freebsd-vm/COMMANDS.txt @@ -35,3 +35,11 @@ freebsd-update -h id sockstat -46lq -P tcp,udp sudo sockstat -46lq -P tcp,udp +pkg version -vRL= (repo FreeBSD-ports -> latest) +sudo pkg upgrade -n (repo -> latest) +pkg query -e '%a = 0' '%n\t%v\t%R\t%sb\t%c' +service -e; service -l | head -5 +pkg query '%n\t%v\t%R\t%sb\t%c' +for s in $(service -e); do n=${s##*/}; printf "%s\t%s\n" "$n" "$(service $n status 2>&1 | head -1)"; done +sudo pkg audit -Fq +sudo for s in $(service -e); do n=${s##*/}; printf "%s\t%s\n" "$n" "$(service $n status 2>&1 | head -1)"; done diff --git a/tests/fixtures/freebsd-vm/pkg_query_e_a0_n_v_R_sb_c.txt b/tests/fixtures/freebsd-vm/pkg_query_e_a0_n_v_R_sb_c.txt new file mode 100644 index 0000000..1d631b8 --- /dev/null +++ b/tests/fixtures/freebsd-vm/pkg_query_e_a0_n_v_R_sb_c.txt @@ -0,0 +1,11 @@ +FreeBSD-set-base 15.1 FreeBSD-base 0 Base system (metapackage) +FreeBSD-set-base-dbg 15.1 FreeBSD-base 0 Base system debug symbols (metapackage) +FreeBSD-set-kernels 15.1 FreeBSD-base 0 Base system kernels (metapackage) +FreeBSD-set-kernels-dbg 15.1 FreeBSD-base 0 Base system kernels debugging symbols (metapackage) +FreeBSD-set-lib32 15.1 FreeBSD-base 0 32-bit compatibility libraries (metapackage) +FreeBSD-set-lib32-dbg 15.1 FreeBSD-base 0 32-bit compatibility library debugging symbols (metapackage) +FreeBSD-set-tests 15.1 FreeBSD-base 0 System test suite +firstboot-pkg-upgrade 1.2 FreeBSD-ports 1757 Update the system using pkg when it first boots +pkg 2.7.5 FreeBSD-ports 27719861 Package manager +qemu-guest-agent 11.0.2 FreeBSD-ports 31962444 QEMU CPU Emulator (guest agent) +sudo 1.9.17p2_2 FreeBSD-ports 8429090 Allow others to run commands as root diff --git a/tests/fixtures/freebsd-vm/pkg_query_n_v_R_sb_c.txt b/tests/fixtures/freebsd-vm/pkg_query_n_v_R_sb_c.txt new file mode 100644 index 0000000..49274f8 --- /dev/null +++ b/tests/fixtures/freebsd-vm/pkg_query_n_v_R_sb_c.txt @@ -0,0 +1,514 @@ +FreeBSD-acct 15.1p4 FreeBSD-base 118976 System resource accounting +FreeBSD-acct-dbg 15.1p4 FreeBSD-base 162712 System resource accounting (debugging symbols) +FreeBSD-acpi 15.1 FreeBSD-base 2312577 Advanced Configuration and Power Interface (ACPI) utilities +FreeBSD-acpi-dbg 15.1 FreeBSD-base 3022016 Advanced Configuration and Power Interface (ACPI) utilities (debugging symbols) +FreeBSD-apm 15.1 FreeBSD-base 15685 Intel / Microsoft APM BIOS utility +FreeBSD-apm-dbg 15.1 FreeBSD-base 13912 Intel / Microsoft APM BIOS utility (debugging symbols) +FreeBSD-at 15.1 FreeBSD-base 50088 Scheduled and batch command utilities +FreeBSD-at-dbg 15.1 FreeBSD-base 48776 Scheduled and batch command utilities (debugging symbols) +FreeBSD-atf 15.1 FreeBSD-base 184430 Automated Testing Framework +FreeBSD-atf-dbg 15.1 FreeBSD-base 1996064 Automated Testing Framework (debugging symbols) +FreeBSD-atf-dev 15.1 FreeBSD-base 2034771 Automated Testing Framework (development files) +FreeBSD-atf-lib 15.1 FreeBSD-base 208520 Automated Testing Framework (libraries) +FreeBSD-audit 15.1p4 FreeBSD-base 265124 OpenBSM auditing utilities +FreeBSD-audit-dbg 15.1p4 FreeBSD-base 532848 OpenBSM auditing utilities (debugging symbols) +FreeBSD-audit-dbg-lib32 15.1 FreeBSD-base 231920 OpenBSM auditing utilities (32-bit debugging symbols) +FreeBSD-audit-dev 15.1 FreeBSD-base 739988 OpenBSM auditing utilities (development files) +FreeBSD-audit-dev-lib32 15.1 FreeBSD-base 315584 OpenBSM auditing utilities (32-bit development files) +FreeBSD-audit-lib 15.1 FreeBSD-base 108992 OpenBSM auditing utilities (libraries) +FreeBSD-audit-lib32 15.1 FreeBSD-base 115800 OpenBSM auditing utilities (32-bit libraries) +FreeBSD-autofs 15.1p2 FreeBSD-base 71482 File system automounter +FreeBSD-autofs-dbg 15.1p2 FreeBSD-base 60280 File system automounter (debugging symbols) +FreeBSD-bhyve 15.1p4 FreeBSD-base 679492 bhyve virtual machine hypervisor +FreeBSD-bhyve-dbg 15.1p4 FreeBSD-base 752856 bhyve virtual machine hypervisor (debugging symbols) +FreeBSD-blocklist 15.1 FreeBSD-base 233452 Network blocklist daemon +FreeBSD-blocklist-dbg 15.1 FreeBSD-base 266888 Network blocklist daemon (debugging symbols) +FreeBSD-blocklist-dbg-lib32 15.1 FreeBSD-base 39864 Network blocklist daemon (32-bit debugging symbols) +FreeBSD-blocklist-dev 15.1 FreeBSD-base 80665 Network blocklist daemon (development files) +FreeBSD-blocklist-dev-lib32 15.1 FreeBSD-base 44646 Network blocklist daemon (32-bit development files) +FreeBSD-blocklist-lib32 15.1 FreeBSD-base 19824 Network blocklist daemon (32-bit libraries) +FreeBSD-bluetooth 15.1 FreeBSD-base 640827 Bluetooth support +FreeBSD-bluetooth-dbg 15.1 FreeBSD-base 610992 Bluetooth support (debugging symbols) +FreeBSD-bluetooth-dbg-lib32 15.1 FreeBSD-base 62392 Bluetooth support (32-bit debugging symbols) +FreeBSD-bluetooth-dev 15.1 FreeBSD-base 164663 Bluetooth support (development files) +FreeBSD-bluetooth-dev-lib32 15.1 FreeBSD-base 78122 Bluetooth support (32-bit development files) +FreeBSD-bluetooth-lib 15.1 FreeBSD-base 39496 Bluetooth support (libraries) +FreeBSD-bluetooth-lib32 15.1 FreeBSD-base 32192 Bluetooth support (32-bit libraries) +FreeBSD-bmake 15.1 FreeBSD-base 667182 Program maintenance utility +FreeBSD-bmake-dbg 15.1 FreeBSD-base 324496 Program maintenance utility (debugging symbols) +FreeBSD-bootloader 15.1 FreeBSD-base 6813408 System boot loader +FreeBSD-bootloader-dbg 15.1 FreeBSD-base 4374144 System boot loader (debugging symbols) +FreeBSD-bootloader-dev 15.1 FreeBSD-base 7431 System boot loader (development files) +FreeBSD-bsdconfig 15.1 FreeBSD-base 1178152 System configuration utility +FreeBSD-bsdinstall 15.1 FreeBSD-base 300909 System installer +FreeBSD-bsdinstall-dbg 15.1 FreeBSD-base 98112 System installer (debugging symbols) +FreeBSD-bsnmp 15.1p1 FreeBSD-base 1905434 Simple and extensible SNMP daemon +FreeBSD-bsnmp-dbg 15.1p1 FreeBSD-base 2122296 Simple and extensible SNMP daemon (debugging symbols) +FreeBSD-bsnmp-dbg-lib32 15.1 FreeBSD-base 118132 Simple and extensible SNMP daemon (32-bit debugging symbols) +FreeBSD-bsnmp-dev 15.1 FreeBSD-base 395170 Simple and extensible SNMP daemon (development files) +FreeBSD-bsnmp-dev-lib32 15.1 FreeBSD-base 168235 Simple and extensible SNMP daemon (32-bit development files) +FreeBSD-bsnmp-lib32 15.1 FreeBSD-base 71664 Simple and extensible SNMP daemon (32-bit libraries) +FreeBSD-bzip2 15.1 FreeBSD-base 52032 A block-sorting data compressor +FreeBSD-bzip2-dbg 15.1 FreeBSD-base 187488 A block-sorting data compressor (debugging symbols) +FreeBSD-bzip2-dbg-lib32 15.1 FreeBSD-base 105796 A block-sorting data compressor (32-bit debugging symbols) +FreeBSD-bzip2-dev 15.1 FreeBSD-base 214032 A block-sorting data compressor (development files) +FreeBSD-bzip2-dev-lib32 15.1 FreeBSD-base 144480 A block-sorting data compressor (32-bit development files) +FreeBSD-bzip2-lib 15.1 FreeBSD-base 82648 A block-sorting data compressor (libraries) +FreeBSD-bzip2-lib32 15.1 FreeBSD-base 70976 A block-sorting data compressor (32-bit libraries) +FreeBSD-caroot 15.1 FreeBSD-base 936376 Mozilla Root Store trusted TLS certificates +FreeBSD-ccdconfig 15.1 FreeBSD-base 17180 Concatenated disk driver (ccd) configuration utility +FreeBSD-ccdconfig-dbg 15.1 FreeBSD-base 14840 Concatenated disk driver (ccd) configuration utility (debugging symbols) +FreeBSD-certctl 15.1 FreeBSD-base 27612 Tool for managing trusted and untrusted TLS certificates +FreeBSD-certctl-dbg 15.1 FreeBSD-base 27832 Tool for managing trusted and untrusted TLS certificates (debugging symbols) +FreeBSD-clang 15.1p2 FreeBSD-base 164289993 The Clang C, C++, and Objective-C compiler +FreeBSD-clang-dbg 15.1p2 FreeBSD-base 438402744 The Clang C, C++, and Objective-C compiler (debugging symbols) +FreeBSD-clang-dev 15.1p1 FreeBSD-base 73790614 The Clang C, C++, and Objective-C compiler (development files) +FreeBSD-clibs 15.1p4 FreeBSD-base 3987631 Core runtime libraries +FreeBSD-clibs-dbg 15.1p4 FreeBSD-base 16750984 Core runtime libraries (debugging symbols) +FreeBSD-clibs-dbg-lib32 15.1p4 FreeBSD-base 13223536 Core runtime libraries (32-bit debugging symbols) +FreeBSD-clibs-dev 15.1p4 FreeBSD-base 64062010 Core runtime libraries (development files) +FreeBSD-clibs-dev-lib32 15.1p4 FreeBSD-base 27776056 Core runtime libraries (32-bit development files) +FreeBSD-clibs-lib32 15.1p4 FreeBSD-base 3697906 Core runtime libraries (32-bit libraries) +FreeBSD-console-tools 15.1p2 FreeBSD-base 278222 Video console utilities +FreeBSD-console-tools-dbg 15.1p2 FreeBSD-base 196976 Video console utilities (debugging symbols) +FreeBSD-cron 15.1 FreeBSD-base 95131 Command scheduling facility +FreeBSD-cron-dbg 15.1 FreeBSD-base 97000 Command scheduling facility (debugging symbols) +FreeBSD-csh 15.1 FreeBSD-base 921990 C shell with file name completion and command line editing +FreeBSD-csh-dbg 15.1 FreeBSD-base 487000 C shell with file name completion and command line editing (debugging symbols) +FreeBSD-ctf 15.1 FreeBSD-base 199436 Compact C Type Format (CTF) +FreeBSD-ctf-dbg 15.1 FreeBSD-base 485992 Compact C Type Format (CTF) (debugging symbols) +FreeBSD-ctf-dbg-lib32 15.1 FreeBSD-base 158968 Compact C Type Format (CTF) (32-bit debugging symbols) +FreeBSD-ctf-dev 15.1 FreeBSD-base 339279 Compact C Type Format (CTF) (development files) +FreeBSD-ctf-dev-lib32 15.1 FreeBSD-base 203151 Compact C Type Format (CTF) (32-bit development files) +FreeBSD-ctf-lib 15.1 FreeBSD-base 67880 Compact C Type Format (CTF) (libraries) +FreeBSD-ctf-lib32 15.1 FreeBSD-base 59904 Compact C Type Format (CTF) (32-bit libraries) +FreeBSD-ctl 15.1p4 FreeBSD-base 474350 CAM Target Layer / iSCSI target daemon +FreeBSD-ctl-dbg 15.1p4 FreeBSD-base 1714888 CAM Target Layer / iSCSI target daemon (debugging symbols) +FreeBSD-cxgbe-tools 15.1 FreeBSD-base 6923427 Configuration utility for Chelsio cxbge(4) network interfaces +FreeBSD-cxgbe-tools-dbg 15.1 FreeBSD-base 179768 Configuration utility for Chelsio cxbge(4) network interfaces (debugging symbols) +FreeBSD-devd 15.1 FreeBSD-base 89174 Kernel event handling daemon +FreeBSD-devd-dbg 15.1 FreeBSD-base 188160 Kernel event handling daemon (debugging symbols) +FreeBSD-devmatch 15.1 FreeBSD-base 42868 Automatically load kernel drivers for attached hardware +FreeBSD-devmatch-dbg 15.1 FreeBSD-base 52072 Automatically load kernel drivers for attached hardware (debugging symbols) +FreeBSD-devmatch-dbg-lib32 15.1 FreeBSD-base 16536 Automatically load kernel drivers for attached hardware (32-bit debugging symbols) +FreeBSD-devmatch-dev 15.1 FreeBSD-base 32391 Automatically load kernel drivers for attached hardware (development files) +FreeBSD-devmatch-dev-lib32 15.1 FreeBSD-base 15641 Automatically load kernel drivers for attached hardware (32-bit development files) +FreeBSD-devmatch-lib32 15.1 FreeBSD-base 8512 Automatically load kernel drivers for attached hardware (32-bit libraries) +FreeBSD-dhclient 15.1p4 FreeBSD-base 154160 Dynamic Host Configuration Protocol (DHCP) client +FreeBSD-dhclient-dbg 15.1p4 FreeBSD-base 109592 Dynamic Host Configuration Protocol (DHCP) client (debugging symbols) +FreeBSD-diff3 15.1 FreeBSD-base 29549 GNU 3-way file comparison and merge utility +FreeBSD-diff3-dbg 15.1 FreeBSD-base 35064 GNU 3-way file comparison and merge utility (debugging symbols) +FreeBSD-dma 15.1p4 FreeBSD-base 82628 DragonFly Mail Agent +FreeBSD-dma-dbg 15.1p4 FreeBSD-base 86936 DragonFly Mail Agent (debugging symbols) +FreeBSD-dtrace 15.1 FreeBSD-base 977498 DTrace dynamic tracing framework +FreeBSD-dtrace-dbg 15.1 FreeBSD-base 1906968 DTrace dynamic tracing framework (debugging symbols) +FreeBSD-dtrace-dbg-lib32 15.1 FreeBSD-base 1445892 DTrace dynamic tracing framework (32-bit debugging symbols) +FreeBSD-dtrace-dev 15.1 FreeBSD-base 3644945 DTrace dynamic tracing framework (development files) +FreeBSD-dtrace-dev-lib32 15.1 FreeBSD-base 2137418 DTrace dynamic tracing framework (32-bit development files) +FreeBSD-dtrace-lib32 15.1 FreeBSD-base 606808 DTrace dynamic tracing framework (32-bit libraries) +FreeBSD-dwatch 15.1 FreeBSD-base 107846 Watch processes as they trigger a particular DTrace probe +FreeBSD-ee 15.1 FreeBSD-base 167158 Easy Editor +FreeBSD-ee-dbg 15.1 FreeBSD-base 81744 Easy Editor (debugging symbols) +FreeBSD-efi-tools 15.1 FreeBSD-base 155307 Utilities for the Unified Extensible Firmware Interface (UEFI) +FreeBSD-efi-tools-dbg 15.1 FreeBSD-base 293464 Utilities for the Unified Extensible Firmware Interface (UEFI) (debugging symbols) +FreeBSD-efi-tools-dev 15.1 FreeBSD-base 317287 Utilities for the Unified Extensible Firmware Interface (UEFI) (development files) +FreeBSD-examples 15.1 FreeBSD-base 555435 System interface examples +FreeBSD-fd 15.1 FreeBSD-base 72329 Floppy disk utilities +FreeBSD-fd-dbg 15.1 FreeBSD-base 61424 Floppy disk utilities (debugging symbols) +FreeBSD-fetch 15.1 FreeBSD-base 112434 Retrieve a file from a remote URL +FreeBSD-fetch-dbg 15.1 FreeBSD-base 207520 Retrieve a file from a remote URL (debugging symbols) +FreeBSD-fetch-dbg-lib32 15.1 FreeBSD-base 132244 Retrieve a file from a remote URL (32-bit debugging symbols) +FreeBSD-fetch-dev 15.1 FreeBSD-base 296303 Retrieve a file from a remote URL (development files) +FreeBSD-fetch-dev-lib32 15.1 FreeBSD-base 175739 Retrieve a file from a remote URL (32-bit development files) +FreeBSD-fetch-lib32 15.1 FreeBSD-base 70264 Retrieve a file from a remote URL (32-bit libraries) +FreeBSD-firmware-iwm 15.1 FreeBSD-base 14493588 Firmware for iwm(4) Intel 802.11ac network interfaces +FreeBSD-flua 15.1 FreeBSD-base 441149 Private Lua implementation +FreeBSD-flua-dbg 15.1 FreeBSD-base 672552 Private Lua implementation (debugging symbols) +FreeBSD-flua-dev 15.1 FreeBSD-base 4138 Private Lua implementation (development files) +FreeBSD-ftp 15.1 FreeBSD-base 176150 File Transfer Protocol (FTP) client +FreeBSD-ftp-dbg 15.1 FreeBSD-base 144392 File Transfer Protocol (FTP) client (debugging symbols) +FreeBSD-fwget 15.1 FreeBSD-base 48026 Install firmware packages for the running system +FreeBSD-games 15.1p4 FreeBSD-base 35736 Games +FreeBSD-games-dbg 15.1p4 FreeBSD-base 33272 Games (debugging symbols) +FreeBSD-geom 15.1 FreeBSD-base 526070 GEOM configuration utilities +FreeBSD-geom-dbg 15.1 FreeBSD-base 726784 GEOM configuration utilities (debugging symbols) +FreeBSD-geom-dbg-lib32 15.1 FreeBSD-base 521932 GEOM configuration utilities (32-bit debugging symbols) +FreeBSD-geom-lib32 15.1 FreeBSD-base 317672 GEOM configuration utilities (32-bit libraries) +FreeBSD-ggate 15.1 FreeBSD-base 71502 GEOM Gate client and server +FreeBSD-ggate-dbg 15.1 FreeBSD-base 73336 GEOM Gate client and server (debugging symbols) +FreeBSD-gssd 15.1 FreeBSD-base 42054 gssd(8) daemon for kernel GSS-API +FreeBSD-gssd-dbg 15.1 FreeBSD-base 52632 gssd(8) daemon for kernel GSS-API (debugging symbols) +FreeBSD-hast 15.1p4 FreeBSD-base 313689 Highly Available Storage daemon +FreeBSD-hast-dbg 15.1p4 FreeBSD-base 302664 Highly Available Storage daemon (debugging symbols) +FreeBSD-hostapd 15.1 FreeBSD-base 1176639 IEEE Std 802.11 Access Point authentication daemon +FreeBSD-hostapd-dbg 15.1 FreeBSD-base 1844408 IEEE Std 802.11 Access Point authentication daemon (debugging symbols) +FreeBSD-hyperv-tools 15.1 FreeBSD-base 44956 Microsoft Hyper-V utilities +FreeBSD-hyperv-tools-dbg 15.1 FreeBSD-base 38928 Microsoft Hyper-V utilities (debugging symbols) +FreeBSD-inetd 15.1 FreeBSD-base 65071 Internet super-server +FreeBSD-inetd-dbg 15.1 FreeBSD-base 51584 Internet super-server (debugging symbols) +FreeBSD-ipf 15.1 FreeBSD-base 1016982 IP Filter (ipf) packet filter management tools +FreeBSD-ipf-dbg 15.1 FreeBSD-base 995496 IP Filter (ipf) packet filter management tools (debugging symbols) +FreeBSD-ipfw 15.1 FreeBSD-base 261982 ipfw (IP firewall) management utilities +FreeBSD-ipfw-dbg 15.1 FreeBSD-base 209272 ipfw (IP firewall) management utilities (debugging symbols) +FreeBSD-iscsi 15.1p4 FreeBSD-base 105951 iSCSI initiator +FreeBSD-iscsi-dbg 15.1p4 FreeBSD-base 111320 iSCSI initiator (debugging symbols) +FreeBSD-jail 15.1p2 FreeBSD-base 137381 Jail management tools +FreeBSD-jail-dbg 15.1p2 FreeBSD-base 115488 Jail management tools (debugging symbols) +FreeBSD-kerberos 15.1 FreeBSD-base 467964 Kerberos client +FreeBSD-kerberos-dbg 15.1 FreeBSD-base 6960496 Kerberos client (debugging symbols) +FreeBSD-kerberos-dbg-lib32 15.1 FreeBSD-base 4939464 Kerberos client (32-bit debugging symbols) +FreeBSD-kerberos-dev 15.1 FreeBSD-base 11169640 Kerberos client (development files) +FreeBSD-kerberos-dev-lib32 15.1 FreeBSD-base 6564664 Kerberos client (32-bit development files) +FreeBSD-kerberos-kdc 15.1 FreeBSD-base 1044038 Kerberos key distribution center +FreeBSD-kerberos-kdc-dbg 15.1 FreeBSD-base 2364296 Kerberos key distribution center (debugging symbols) +FreeBSD-kerberos-lib 15.1 FreeBSD-base 1987568 Kerberos client (libraries) +FreeBSD-kerberos-lib32 15.1 FreeBSD-base 1813021 Kerberos client (32-bit libraries) +FreeBSD-kernel-generic 15.1p4 FreeBSD-base 161420246 FreeBSD GENERIC Kernel +FreeBSD-kernel-generic-dbg 15.1p4 FreeBSD-base 605419763 FreeBSD GENERIC Kernel -dbg (debugging symbols) +FreeBSD-kernel-man 15.1p4 FreeBSD-base 2770335 Kernel manual pages +FreeBSD-kyua 15.1 FreeBSD-base 1415388 Testing framework for infrastructure software +FreeBSD-kyua-dbg 15.1 FreeBSD-base 7211888 Testing framework for infrastructure software (debugging symbols) +FreeBSD-lib9p 15.1p2 FreeBSD-base 100928 9P network protocol library +FreeBSD-lib9p-dbg 15.1p2 FreeBSD-base 296200 9P network protocol library (debugging symbols) +FreeBSD-lib9p-dbg-lib32 15.1p2 FreeBSD-base 216936 9P network protocol library (32-bit debugging symbols) +FreeBSD-lib9p-dev 15.1p2 FreeBSD-base 487581 9P network protocol library (development files) +FreeBSD-lib9p-dev-lib32 15.1p2 FreeBSD-base 281388 9P network protocol library (32-bit development files) +FreeBSD-lib9p-lib32 15.1p2 FreeBSD-base 85620 9P network protocol library (32-bit libraries) +FreeBSD-libarchive 15.1 FreeBSD-base 908662 Library for reading and writing streaming archives +FreeBSD-libarchive-dbg 15.1 FreeBSD-base 2756288 Library for reading and writing streaming archives (debugging symbols) +FreeBSD-libarchive-dbg-lib32 15.1 FreeBSD-base 2114812 Library for reading and writing streaming archives (32-bit debugging symbols) +FreeBSD-libarchive-dev 15.1 FreeBSD-base 4267893 Library for reading and writing streaming archives (development files) +FreeBSD-libarchive-dev-lib32 15.1 FreeBSD-base 2701451 Library for reading and writing streaming archives (32-bit development files) +FreeBSD-libarchive-lib32 15.1 FreeBSD-base 847384 Library for reading and writing streaming archives (32-bit libraries) +FreeBSD-libbegemot 15.1 FreeBSD-base 11176 rpoll(3) interface for event-driven I/O +FreeBSD-libbegemot-dbg 15.1 FreeBSD-base 20352 rpoll(3) interface for event-driven I/O (debugging symbols) +FreeBSD-libbegemot-dbg-lib32 15.1 FreeBSD-base 16720 rpoll(3) interface for event-driven I/O (32-bit debugging symbols) +FreeBSD-libbegemot-dev 15.1 FreeBSD-base 32469 rpoll(3) interface for event-driven I/O (development files) +FreeBSD-libbegemot-dev-lib32 15.1 FreeBSD-base 17199 rpoll(3) interface for event-driven I/O (32-bit development files) +FreeBSD-libbegemot-lib32 15.1 FreeBSD-base 9636 rpoll(3) interface for event-driven I/O (32-bit libraries) +FreeBSD-libblocksruntime 15.1 FreeBSD-base 10912 LLVM BlocksRuntime library +FreeBSD-libblocksruntime-dbg 15.1 FreeBSD-base 22440 LLVM BlocksRuntime library (debugging symbols) +FreeBSD-libblocksruntime-dbg-lib32 15.1 FreeBSD-base 17244 LLVM BlocksRuntime library (32-bit debugging symbols) +FreeBSD-libblocksruntime-dev 15.1 FreeBSD-base 37538 LLVM BlocksRuntime library (development files) +FreeBSD-libblocksruntime-dev-lib32 15.1 FreeBSD-base 19079 LLVM BlocksRuntime library (32-bit development files) +FreeBSD-libblocksruntime-lib32 15.1 FreeBSD-base 9136 LLVM BlocksRuntime library (32-bit libraries) +FreeBSD-libbsdstat 15.1 FreeBSD-base 8304 Periodic statistics library +FreeBSD-libbsdstat-dbg 15.1 FreeBSD-base 16688 Periodic statistics library (debugging symbols) +FreeBSD-libbsdstat-dbg-lib32 15.1 FreeBSD-base 12400 Periodic statistics library (32-bit debugging symbols) +FreeBSD-libbsdstat-dev 15.1 FreeBSD-base 22865 Periodic statistics library (development files) +FreeBSD-libbsdstat-dev-lib32 15.1 FreeBSD-base 10860 Periodic statistics library (32-bit development files) +FreeBSD-libbsdstat-lib32 15.1 FreeBSD-base 6656 Periodic statistics library (32-bit libraries) +FreeBSD-libcasper 15.1p4 FreeBSD-base 145104 Casper library +FreeBSD-libcasper-dbg 15.1p4 FreeBSD-base 318848 Casper library (debugging symbols) +FreeBSD-libcasper-dbg-lib32 15.1p4 FreeBSD-base 217440 Casper library (32-bit debugging symbols) +FreeBSD-libcasper-dev 15.1 FreeBSD-base 62447 Casper library (development files) +FreeBSD-libcasper-dev-lib32 15.1 FreeBSD-base 147 Casper library (32-bit development files) +FreeBSD-libcasper-lib32 15.1p4 FreeBSD-base 121336 Casper library (32-bit libraries) +FreeBSD-libcompat-dev 15.1 FreeBSD-base 45054 Compatibility library (development files) +FreeBSD-libcompat-dev-lib32 15.1 FreeBSD-base 26092 Compatibility library (32-bit development files) +FreeBSD-libcompiler_rt-dev 15.1 FreeBSD-base 804538 LLVM compiler_rt library (development files) +FreeBSD-libcompiler_rt-dev-lib32 15.1 FreeBSD-base 362204 LLVM compiler_rt library (32-bit development files) +FreeBSD-libcuse 15.1 FreeBSD-base 14128 Userland character device library +FreeBSD-libcuse-dbg 15.1 FreeBSD-base 26816 Userland character device library (debugging symbols) +FreeBSD-libcuse-dbg-lib32 15.1 FreeBSD-base 19136 Userland character device library (32-bit debugging symbols) +FreeBSD-libcuse-dev 15.1 FreeBSD-base 41992 Userland character device library (development files) +FreeBSD-libcuse-dev-lib32 15.1 FreeBSD-base 20738 Userland character device library (32-bit development files) +FreeBSD-libcuse-lib32 15.1 FreeBSD-base 11660 Userland character device library (32-bit libraries) +FreeBSD-libdwarf 15.1 FreeBSD-base 199416 DWARF access library +FreeBSD-libdwarf-dbg 15.1 FreeBSD-base 979800 DWARF access library (debugging symbols) +FreeBSD-libdwarf-dbg-lib32 15.1 FreeBSD-base 759884 DWARF access library (32-bit debugging symbols) +FreeBSD-libdwarf-dev 15.1 FreeBSD-base 2270941 DWARF access library (development files) +FreeBSD-libdwarf-dev-lib32 15.1 FreeBSD-base 1190869 DWARF access library (32-bit development files) +FreeBSD-libdwarf-lib32 15.1 FreeBSD-base 191568 DWARF access library (32-bit libraries) +FreeBSD-libevent1 15.1p2 FreeBSD-base 41832 Private libevent1 library +FreeBSD-libevent1-dbg 15.1p2 FreeBSD-base 104728 Private libevent1 library (debugging symbols) +FreeBSD-libevent1-dbg-lib32 15.1p2 FreeBSD-base 76516 Private libevent1 library (32-bit debugging symbols) +FreeBSD-libevent1-dev 15.1p2 FreeBSD-base 171289 Private libevent1 library (development files) +FreeBSD-libevent1-dev-lib32 15.1p2 FreeBSD-base 100995 Private libevent1 library (32-bit development files) +FreeBSD-libevent1-lib32 15.1p2 FreeBSD-base 36444 Private libevent1 library (32-bit libraries) +FreeBSD-libexecinfo 15.1 FreeBSD-base 11680 NetBSD stack backtrace library +FreeBSD-libexecinfo-dbg 15.1 FreeBSD-base 26888 NetBSD stack backtrace library (debugging symbols) +FreeBSD-libexecinfo-dbg-lib32 15.1 FreeBSD-base 20988 NetBSD stack backtrace library (32-bit debugging symbols) +FreeBSD-libexecinfo-dev 15.1 FreeBSD-base 40128 NetBSD stack backtrace library (development files) +FreeBSD-libexecinfo-dev-lib32 15.1 FreeBSD-base 22402 NetBSD stack backtrace library (32-bit development files) +FreeBSD-libexecinfo-lib32 15.1 FreeBSD-base 9304 NetBSD stack backtrace library (32-bit libraries) +FreeBSD-libipt 15.1 FreeBSD-base 134944 Intel(R) Processor Trace decoder library +FreeBSD-libipt-dbg 15.1 FreeBSD-base 404552 Intel(R) Processor Trace decoder library (debugging symbols) +FreeBSD-libipt-dev 15.1 FreeBSD-base 762515 Intel(R) Processor Trace decoder library (development files) +FreeBSD-libldns 15.1 FreeBSD-base 439200 Private LDNS library +FreeBSD-libldns-dbg 15.1 FreeBSD-base 1188568 Private LDNS library (debugging symbols) +FreeBSD-libldns-dbg-lib32 15.1 FreeBSD-base 835244 Private LDNS library (32-bit debugging symbols) +FreeBSD-libldns-dev 15.1 FreeBSD-base 1978245 Private LDNS library (development files) +FreeBSD-libldns-dev-lib32 15.1 FreeBSD-base 1195745 Private LDNS library (32-bit development files) +FreeBSD-libldns-lib32 15.1 FreeBSD-base 392184 Private LDNS library (32-bit libraries) +FreeBSD-libmagic 15.1 FreeBSD-base 12352849 Magic number recognition library +FreeBSD-libmagic-dbg 15.1 FreeBSD-base 463624 Magic number recognition library (debugging symbols) +FreeBSD-libmagic-dbg-lib32 15.1 FreeBSD-base 342316 Magic number recognition library (32-bit debugging symbols) +FreeBSD-libmagic-dev 15.1 FreeBSD-base 787744 Magic number recognition library (development files) +FreeBSD-libmagic-dev-lib32 15.1 FreeBSD-base 489962 Magic number recognition library (32-bit development files) +FreeBSD-libmagic-lib32 15.1 FreeBSD-base 154988 Magic number recognition library (32-bit libraries) +FreeBSD-libmilter 15.1 FreeBSD-base 56544 sendmail Mail Filter API library +FreeBSD-libmilter-dbg 15.1 FreeBSD-base 130192 sendmail Mail Filter API library (debugging symbols) +FreeBSD-libmilter-dbg-lib32 15.1 FreeBSD-base 100652 sendmail Mail Filter API library (32-bit debugging symbols) +FreeBSD-libmilter-dev 15.1 FreeBSD-base 245019 sendmail Mail Filter API library (development files) +FreeBSD-libmilter-dev-lib32 15.1 FreeBSD-base 139268 sendmail Mail Filter API library (32-bit development files) +FreeBSD-libmilter-lib32 15.1 FreeBSD-base 49512 sendmail Mail Filter API library (32-bit libraries) +FreeBSD-libpathconv 15.1 FreeBSD-base 5640 Library for handling relative and absolute pathnames +FreeBSD-libpathconv-dbg 15.1 FreeBSD-base 12080 Library for handling relative and absolute pathnames (debugging symbols) +FreeBSD-libpathconv-dbg-lib32 15.1 FreeBSD-base 8968 Library for handling relative and absolute pathnames (32-bit debugging symbols) +FreeBSD-libpathconv-dev 15.1 FreeBSD-base 15449 Library for handling relative and absolute pathnames (development files) +FreeBSD-libpathconv-dev-lib32 15.1 FreeBSD-base 7264 Library for handling relative and absolute pathnames (32-bit development files) +FreeBSD-libpathconv-lib32 15.1 FreeBSD-base 4268 Library for handling relative and absolute pathnames (32-bit libraries) +FreeBSD-librpcsec_gss 15.1 FreeBSD-base 29800 RPCSEC_GSS library +FreeBSD-librpcsec_gss-dbg 15.1 FreeBSD-base 78024 RPCSEC_GSS library (debugging symbols) +FreeBSD-librpcsec_gss-dbg-lib32 15.1 FreeBSD-base 58548 RPCSEC_GSS library (32-bit debugging symbols) +FreeBSD-librpcsec_gss-dev 15.1 FreeBSD-base 147868 RPCSEC_GSS library (development files) +FreeBSD-librpcsec_gss-dev-lib32 15.1 FreeBSD-base 77350 RPCSEC_GSS library (32-bit development files) +FreeBSD-librpcsec_gss-lib32 15.1 FreeBSD-base 25840 RPCSEC_GSS library (32-bit libraries) +FreeBSD-librss 15.1 FreeBSD-base 7808 Receive-side scaling library +FreeBSD-librss-dbg 15.1 FreeBSD-base 15184 Receive-side scaling library (debugging symbols) +FreeBSD-librss-dbg-lib32 15.1 FreeBSD-base 11840 Receive-side scaling library (32-bit debugging symbols) +FreeBSD-librss-dev 15.1 FreeBSD-base 17866 Receive-side scaling library (development files) +FreeBSD-librss-dev-lib32 15.1 FreeBSD-base 9677 Receive-side scaling library (32-bit development files) +FreeBSD-librss-lib32 15.1 FreeBSD-base 6316 Receive-side scaling library (32-bit libraries) +FreeBSD-libsqlite3 15.1 FreeBSD-base 1220296 Private SQLite library +FreeBSD-libsqlite3-dbg 15.1 FreeBSD-base 4294160 Private SQLite library (debugging symbols) +FreeBSD-libsqlite3-dbg-lib32 15.1 FreeBSD-base 3224812 Private SQLite library (32-bit debugging symbols) +FreeBSD-libsqlite3-dev 15.1 FreeBSD-base 5355591 Private SQLite library (development files) +FreeBSD-libsqlite3-dev-lib32 15.1 FreeBSD-base 3180730 Private SQLite library (32-bit development files) +FreeBSD-libsqlite3-lib32 15.1 FreeBSD-base 1161800 Private SQLite library (32-bit libraries) +FreeBSD-libthread_db 15.1 FreeBSD-base 32032 Library for interacting with threaded processes +FreeBSD-libthread_db-dbg 15.1 FreeBSD-base 82528 Library for interacting with threaded processes (debugging symbols) +FreeBSD-libthread_db-dbg-lib32 15.1 FreeBSD-base 64400 Library for interacting with threaded processes (32-bit debugging symbols) +FreeBSD-libthread_db-dev 15.1 FreeBSD-base 152643 Library for interacting with threaded processes (development files) +FreeBSD-libthread_db-dev-lib32 15.1 FreeBSD-base 90509 Library for interacting with threaded processes (32-bit development files) +FreeBSD-libthread_db-lib32 15.1 FreeBSD-base 32452 Library for interacting with threaded processes (32-bit libraries) +FreeBSD-libucl 15.1 FreeBSD-base 145640 Private Universal Configuration Library (UCL) library +FreeBSD-libucl-dbg 15.1 FreeBSD-base 428672 Private Universal Configuration Library (UCL) library (debugging symbols) +FreeBSD-libucl-dbg-lib32 15.1 FreeBSD-base 300824 Private Universal Configuration Library (UCL) library (32-bit debugging symbols) +FreeBSD-libucl-dev 15.1 FreeBSD-base 649386 Private Universal Configuration Library (UCL) library (development files) +FreeBSD-libucl-dev-lib32 15.1 FreeBSD-base 368030 Private Universal Configuration Library (UCL) library (32-bit development files) +FreeBSD-libucl-lib32 15.1 FreeBSD-base 137032 Private Universal Configuration Library (UCL) library (32-bit libraries) +FreeBSD-libvgl 15.1 FreeBSD-base 41472 Video Graphics Library +FreeBSD-libvgl-dbg 15.1 FreeBSD-base 97088 Video Graphics Library (debugging symbols) +FreeBSD-libvgl-dbg-lib32 15.1 FreeBSD-base 64568 Video Graphics Library (32-bit debugging symbols) +FreeBSD-libvgl-dev 15.1 FreeBSD-base 150595 Video Graphics Library (development files) +FreeBSD-libvgl-dev-lib32 15.1 FreeBSD-base 87823 Video Graphics Library (32-bit development files) +FreeBSD-libvgl-lib32 15.1 FreeBSD-base 36128 Video Graphics Library (32-bit libraries) +FreeBSD-libvmmapi 15.1p4 FreeBSD-base 34824 Front-end library for the vmm(4) virtualization driver +FreeBSD-libvmmapi-dbg 15.1p4 FreeBSD-base 100456 Front-end library for the vmm(4) virtualization driver (debugging symbols) +FreeBSD-libvmmapi-dev 15.1p4 FreeBSD-base 154799 Front-end library for the vmm(4) virtualization driver (development files) +FreeBSD-libyaml 15.1 FreeBSD-base 123288 Private YAML library +FreeBSD-libyaml-dbg 15.1 FreeBSD-base 254136 Private YAML library (debugging symbols) +FreeBSD-libyaml-dbg-lib32 15.1 FreeBSD-base 200208 Private YAML library (32-bit debugging symbols) +FreeBSD-libyaml-dev 15.1 FreeBSD-base 499914 Private YAML library (development files) +FreeBSD-libyaml-dev-lib32 15.1 FreeBSD-base 288487 Private YAML library (32-bit development files) +FreeBSD-libyaml-lib32 15.1 FreeBSD-base 114420 Private YAML library (32-bit libraries) +FreeBSD-lld 15.1 FreeBSD-base 2770779 LLVM ELF link loader +FreeBSD-lld-dbg 15.1 FreeBSD-base 9566744 LLVM ELF link loader (debugging symbols) +FreeBSD-lldb 15.1 FreeBSD-base 695521 LLVM debugger +FreeBSD-lldb-dbg 15.1 FreeBSD-base 2437392 LLVM debugger (debugging symbols) +FreeBSD-local-unbound 15.1 FreeBSD-base 1800537 NLnet Labs Unbound DNS resolver +FreeBSD-local-unbound-dbg 15.1 FreeBSD-base 3922760 NLnet Labs Unbound DNS resolver (debugging symbols) +FreeBSD-local-unbound-dbg-lib32 15.1 FreeBSD-base 2509340 NLnet Labs Unbound DNS resolver (32-bit debugging symbols) +FreeBSD-local-unbound-dev 15.1 FreeBSD-base 6161404 NLnet Labs Unbound DNS resolver (development files) +FreeBSD-local-unbound-dev-lib32 15.1 FreeBSD-base 3808328 NLnet Labs Unbound DNS resolver (32-bit development files) +FreeBSD-local-unbound-lib32 15.1 FreeBSD-base 1234800 NLnet Labs Unbound DNS resolver (32-bit libraries) +FreeBSD-locales 15.1 FreeBSD-base 25618978 Locale definitions +FreeBSD-lp 15.1 FreeBSD-base 377434 Print spooler +FreeBSD-lp-dbg 15.1 FreeBSD-base 386008 Print spooler (debugging symbols) +FreeBSD-mandoc 15.1 FreeBSD-base 653330 Online manual page reader +FreeBSD-mandoc-dbg 15.1 FreeBSD-base 538632 Online manual page reader (debugging symbols) +FreeBSD-mlx-tools 15.1 FreeBSD-base 13019 Utility for managing Connect-X 4/5/6 Mellanox network adapters +FreeBSD-mlx-tools-dbg 15.1 FreeBSD-base 13928 Utility for managing Connect-X 4/5/6 Mellanox network adapters (debugging symbols) +FreeBSD-mtree 15.1p2 FreeBSD-base 134952 Filesystem hierarchy management tool +FreeBSD-mtree-dbg 15.1 FreeBSD-base 68184 Filesystem hierarchy management tool (debugging symbols) +FreeBSD-natd 15.1p1 FreeBSD-base 154058 Userland Network Address Translation (NAT) for ipfw +FreeBSD-natd-dbg 15.1p1 FreeBSD-base 343360 Userland Network Address Translation (NAT) for ipfw (debugging symbols) +FreeBSD-natd-dbg-lib32 15.1p1 FreeBSD-base 238308 Userland Network Address Translation (NAT) for ipfw (32-bit debugging symbols) +FreeBSD-natd-dev 15.1p1 FreeBSD-base 391651 Userland Network Address Translation (NAT) for ipfw (development files) +FreeBSD-natd-dev-lib32 15.1p1 FreeBSD-base 232239 Userland Network Address Translation (NAT) for ipfw (32-bit development files) +FreeBSD-natd-lib32 15.1p1 FreeBSD-base 93320 Userland Network Address Translation (NAT) for ipfw (32-bit libraries) +FreeBSD-ncurses 15.1 FreeBSD-base 368979 ncurses terminal control library +FreeBSD-ncurses-dbg 15.1 FreeBSD-base 2375864 ncurses terminal control library (debugging symbols) +FreeBSD-ncurses-dbg-lib32 15.1 FreeBSD-base 1783380 ncurses terminal control library (32-bit debugging symbols) +FreeBSD-ncurses-dev 15.1 FreeBSD-base 4820800 ncurses terminal control library (development files) +FreeBSD-ncurses-dev-lib32 15.1 FreeBSD-base 2683302 ncurses terminal control library (32-bit development files) +FreeBSD-ncurses-lib 15.1 FreeBSD-base 601624 ncurses terminal control library (libraries) +FreeBSD-ncurses-lib32 15.1 FreeBSD-base 533716 ncurses terminal control library (32-bit libraries) +FreeBSD-netmap 15.1 FreeBSD-base 43765 Userland netmap support +FreeBSD-netmap-dbg 15.1 FreeBSD-base 78576 Userland netmap support (debugging symbols) +FreeBSD-netmap-dbg-lib32 15.1 FreeBSD-base 49580 Userland netmap support (32-bit debugging symbols) +FreeBSD-netmap-dev 15.1 FreeBSD-base 129541 Userland netmap support (development files) +FreeBSD-netmap-dev-lib32 15.1 FreeBSD-base 63324 Userland netmap support (32-bit development files) +FreeBSD-netmap-lib32 15.1 FreeBSD-base 25152 Userland netmap support (32-bit libraries) +FreeBSD-newsyslog 15.1 FreeBSD-base 58839 Create and rotate system log files +FreeBSD-newsyslog-dbg 15.1 FreeBSD-base 49232 Create and rotate system log files (debugging symbols) +FreeBSD-nfs 15.1 FreeBSD-base 405765 NFS client and server utilities +FreeBSD-nfs-dbg 15.1 FreeBSD-base 381040 NFS client and server utilities (debugging symbols) +FreeBSD-ntp 15.1p2 FreeBSD-base 4761154 Network Time Protocol (NTP) daemon +FreeBSD-ntp-dbg 15.1p2 FreeBSD-base 2728656 Network Time Protocol (NTP) daemon (debugging symbols) +FreeBSD-nuageinit 15.1 FreeBSD-base 44831 cloud-init configuration support +FreeBSD-nvme-tools 15.1 FreeBSD-base 235090 NVMe utilities +FreeBSD-nvme-tools-dbg 15.1 FreeBSD-base 283848 NVMe utilities (debugging symbols) +FreeBSD-openssl 15.1 FreeBSD-base 1387605 OpenSSL Transport Layer Security (TLS) library +FreeBSD-openssl-dbg 15.1p4 FreeBSD-base 18825800 OpenSSL Transport Layer Security (TLS) library (debugging symbols) +FreeBSD-openssl-dbg-lib32 15.1p4 FreeBSD-base 12281700 OpenSSL Transport Layer Security (TLS) library (32-bit debugging symbols) +FreeBSD-openssl-dev 15.1p4 FreeBSD-base 36308608 OpenSSL Transport Layer Security (TLS) library (development files) +FreeBSD-openssl-dev-lib32 15.1p4 FreeBSD-base 18573861 OpenSSL Transport Layer Security (TLS) library (32-bit development files) +FreeBSD-openssl-lib 15.1p4 FreeBSD-base 7604712 OpenSSL Transport Layer Security (TLS) library (libraries) +FreeBSD-openssl-lib32 15.1p4 FreeBSD-base 5573012 OpenSSL Transport Layer Security (TLS) library (32-bit libraries) +FreeBSD-pam 15.1 FreeBSD-base 237985 Modular user authentication facility +FreeBSD-pam-dbg 15.1 FreeBSD-base 513224 Modular user authentication facility (debugging symbols) +FreeBSD-pam-dbg-lib32 15.1 FreeBSD-base 407092 Modular user authentication facility (32-bit debugging symbols) +FreeBSD-pam-dev 15.1 FreeBSD-base 1285994 Modular user authentication facility (development files) +FreeBSD-pam-dev-lib32 15.1 FreeBSD-base 770139 Modular user authentication facility (32-bit development files) +FreeBSD-pam-lib 15.1 FreeBSD-base 52616 Modular user authentication facility (libraries) +FreeBSD-pam-lib32 15.1 FreeBSD-base 198573 Modular user authentication facility (32-bit libraries) +FreeBSD-periodic 15.1 FreeBSD-base 63345 Run periodic system functions +FreeBSD-pf 15.1 FreeBSD-base 918137 OpenBSD packet filter +FreeBSD-pf-dbg 15.1 FreeBSD-base 911440 OpenBSD packet filter (debugging symbols) +FreeBSD-pf-dev 15.1 FreeBSD-base 45301 OpenBSD packet filter (development files) +FreeBSD-pkg-bootstrap 15.1 FreeBSD-base 593177 pkg(7) bootstrap utility +FreeBSD-pkg-bootstrap-dbg 15.1 FreeBSD-base 465128 pkg(7) bootstrap utility (debugging symbols) +FreeBSD-pmc 15.1p2 FreeBSD-base 8045457 Support for hardware performance counters +FreeBSD-pmc-dbg 15.1p2 FreeBSD-base 1470440 Support for hardware performance counters (debugging symbols) +FreeBSD-pmc-dbg-lib32 15.1 FreeBSD-base 790492 Support for hardware performance counters (32-bit debugging symbols) +FreeBSD-pmc-dev 15.1 FreeBSD-base 9311647 Support for hardware performance counters (development files) +FreeBSD-pmc-dev-lib32 15.1 FreeBSD-base 5320805 Support for hardware performance counters (32-bit development files) +FreeBSD-pmc-lib32 15.1 FreeBSD-base 4635992 Support for hardware performance counters (32-bit libraries) +FreeBSD-powerd 15.1 FreeBSD-base 23823 System power control utility +FreeBSD-powerd-dbg 15.1 FreeBSD-base 26488 System power control utility (debugging symbols) +FreeBSD-ppp 15.1p3 FreeBSD-base 593348 Point-to-Point Protocol (PPP) utilities +FreeBSD-ppp-dbg 15.1p3 FreeBSD-base 712992 Point-to-Point Protocol (PPP) utilities (debugging symbols) +FreeBSD-quotacheck 15.1 FreeBSD-base 25983 Filesystem quota consistency checker +FreeBSD-quotacheck-dbg 15.1 FreeBSD-base 30528 Filesystem quota consistency checker (debugging symbols) +FreeBSD-rc 15.1 FreeBSD-base 413554 rc(8) subsystem +FreeBSD-rc-dbg 15.1 FreeBSD-base 21144 rc(8) subsystem (debugging symbols) +FreeBSD-rcmds 15.1p4 FreeBSD-base 111125 BSD/SunOS remote status commands +FreeBSD-rcmds-dbg 15.1p4 FreeBSD-base 130968 BSD/SunOS remote status commands (debugging symbols) +FreeBSD-rdma 15.1 FreeBSD-base 211344 Remote Direct Memory Access (RDMA) and InfiniBand utilities +FreeBSD-rdma-dbg 15.1 FreeBSD-base 296640 Remote Direct Memory Access (RDMA) and InfiniBand utilities (debugging symbols) +FreeBSD-rescue 15.1p4 FreeBSD-base 20063693 Rescue system +FreeBSD-resolvconf 15.1 FreeBSD-base 57726 A framework for managing multiple DNS configurations +FreeBSD-rip 15.1 FreeBSD-base 192814 RIP routing protocol +FreeBSD-rip-dbg 15.1 FreeBSD-base 193848 RIP routing protocol (debugging symbols) +FreeBSD-runtime 15.1p4 FreeBSD-base 8493462 Core system +FreeBSD-runtime-dbg 15.1p4 FreeBSD-base 9881640 Core system (debugging symbols) +FreeBSD-runtime-dbg-lib32 15.1p4 FreeBSD-base 3325528 Core system (32-bit debugging symbols) +FreeBSD-runtime-dev 15.1p4 FreeBSD-base 7485714 Core system (development files) +FreeBSD-runtime-dev-lib32 15.1p4 FreeBSD-base 4410588 Core system (32-bit development files) +FreeBSD-runtime-lib32 15.1p4 FreeBSD-base 1439636 Core system (32-bit libraries) +FreeBSD-sendmail 15.1 FreeBSD-base 1861874 sendmail mail transport agent +FreeBSD-sendmail-dbg 15.1 FreeBSD-base 1091040 sendmail mail transport agent (debugging symbols) +FreeBSD-set-base 15.1 FreeBSD-base 0 Base system (metapackage) +FreeBSD-set-base-dbg 15.1 FreeBSD-base 0 Base system debug symbols (metapackage) +FreeBSD-set-devel 15.1 FreeBSD-base 0 Development tools (metapackage) +FreeBSD-set-devel-dbg 15.1 FreeBSD-base 0 Development tools debugging symbols (metapackage) +FreeBSD-set-kernels 15.1 FreeBSD-base 0 Base system kernels (metapackage) +FreeBSD-set-kernels-dbg 15.1 FreeBSD-base 0 Base system kernels debugging symbols (metapackage) +FreeBSD-set-lib32 15.1 FreeBSD-base 0 32-bit compatibility libraries (metapackage) +FreeBSD-set-lib32-dbg 15.1 FreeBSD-base 0 32-bit compatibility library debugging symbols (metapackage) +FreeBSD-set-minimal 15.1 FreeBSD-base 0 Basic multi-user system (metapackage) +FreeBSD-set-minimal-dbg 15.1 FreeBSD-base 0 Basic multi-user system debugging symbols (metapackage) +FreeBSD-set-optional 15.1 FreeBSD-base 0 Optional base system software (metapackage) +FreeBSD-set-optional-dbg 15.1 FreeBSD-base 0 Optional software debug symbols (metapackage) +FreeBSD-set-tests 15.1 FreeBSD-base 0 System test suite +FreeBSD-smbutils 15.1 FreeBSD-base 101756 SMB network filesystem utilities +FreeBSD-smbutils-dbg 15.1 FreeBSD-base 196392 SMB network filesystem utilities (debugging symbols) +FreeBSD-smbutils-dbg-lib32 15.1 FreeBSD-base 114988 SMB network filesystem utilities (32-bit debugging symbols) +FreeBSD-smbutils-dev 15.1 FreeBSD-base 255717 SMB network filesystem utilities (development files) +FreeBSD-smbutils-dev-lib32 15.1 FreeBSD-base 157785 SMB network filesystem utilities (32-bit development files) +FreeBSD-smbutils-lib32 15.1 FreeBSD-base 50288 SMB network filesystem utilities (32-bit libraries) +FreeBSD-sound 15.1p4 FreeBSD-base 1698798 Audio utilities +FreeBSD-sound-dbg 15.1p4 FreeBSD-base 277392 Audio utilities (debugging symbols) +FreeBSD-sound-dbg-lib32 15.1 FreeBSD-base 82220 Audio utilities (32-bit debugging symbols) +FreeBSD-sound-dev 15.1 FreeBSD-base 1606462 Audio utilities (development files) +FreeBSD-sound-dev-lib32 15.1 FreeBSD-base 1539334 Audio utilities (32-bit development files) +FreeBSD-sound-lib32 15.1 FreeBSD-base 1504444 Audio utilities (32-bit libraries) +FreeBSD-ssh 15.1p4 FreeBSD-base 3786753 OpenSSH Secure Shell client and server +FreeBSD-ssh-dbg 15.1p4 FreeBSD-base 4442032 OpenSSH Secure Shell client and server (debugging symbols) +FreeBSD-ssh-dbg-lib32 15.1 FreeBSD-base 1812424 OpenSSH Secure Shell client and server (32-bit debugging symbols) +FreeBSD-ssh-dev 15.1 FreeBSD-base 4234357 OpenSSH Secure Shell client and server (development files) +FreeBSD-ssh-dev-lib32 15.1 FreeBSD-base 2701937 OpenSSH Secure Shell client and server (32-bit development files) +FreeBSD-ssh-lib32 15.1 FreeBSD-base 1033200 OpenSSH Secure Shell client and server (32-bit libraries) +FreeBSD-syscons-data 15.1 FreeBSD-base 1385261 syscons(4) fonts and keymaps +FreeBSD-syslogd 15.1p4 FreeBSD-base 84366 System logging daemon +FreeBSD-syslogd-dbg 15.1p4 FreeBSD-base 74728 System logging daemon (debugging symbols) +FreeBSD-tcpd 15.1 FreeBSD-base 103097 TCP Wrappers access control facility +FreeBSD-tcpd-dbg 15.1 FreeBSD-base 140552 TCP Wrappers access control facility (debugging symbols) +FreeBSD-tcpd-dbg-lib32 15.1 FreeBSD-base 68224 TCP Wrappers access control facility (32-bit debugging symbols) +FreeBSD-tcpd-dev 15.1 FreeBSD-base 187627 TCP Wrappers access control facility (development files) +FreeBSD-tcpd-dev-lib32 15.1 FreeBSD-base 111780 TCP Wrappers access control facility (32-bit development files) +FreeBSD-tcpd-lib32 15.1 FreeBSD-base 31392 TCP Wrappers access control facility (32-bit libraries) +FreeBSD-telnet 15.1 FreeBSD-base 160218 TELNET client +FreeBSD-telnet-dbg 15.1 FreeBSD-base 128856 TELNET client (debugging symbols) +FreeBSD-tests 15.1p4 FreeBSD-base 109865923 Test suite +FreeBSD-tests-dbg 15.1p4 FreeBSD-base 88056112 Test suite (debugging symbols) +FreeBSD-toolchain 15.1p4 FreeBSD-base 1520458 Utilities for program development +FreeBSD-toolchain-dbg 15.1p4 FreeBSD-base 1688544 Utilities for program development (debugging symbols) +FreeBSD-toolchain-dev 15.1 FreeBSD-base 27513 Utilities for program development (development files) +FreeBSD-toolchain-dev-lib32 15.1 FreeBSD-base 4970 Utilities for program development (32-bit development files) +FreeBSD-ufs 15.1 FreeBSD-base 634325 UFS filesystem support +FreeBSD-ufs-dbg 15.1 FreeBSD-base 741288 UFS filesystem support (debugging symbols) +FreeBSD-ufs-dbg-lib32 15.1 FreeBSD-base 85628 UFS filesystem support (32-bit debugging symbols) +FreeBSD-ufs-dev 15.1 FreeBSD-base 208854 UFS filesystem support (development files) +FreeBSD-ufs-dev-lib32 15.1 FreeBSD-base 130691 UFS filesystem support (32-bit development files) +FreeBSD-ufs-lib 15.1 FreeBSD-base 51760 UFS filesystem support (libraries) +FreeBSD-ufs-lib32 15.1 FreeBSD-base 54932 UFS filesystem support (32-bit libraries) +FreeBSD-utilities 15.1p4 FreeBSD-base 51297734 Non-vital programs and libraries +FreeBSD-utilities-dbg 15.1p4 FreeBSD-base 28891808 Non-vital programs and libraries (debugging symbols) +FreeBSD-utilities-dbg-lib32 15.1p4 FreeBSD-base 8429304 Non-vital programs and libraries (32-bit debugging symbols) +FreeBSD-utilities-dev 15.1p4 FreeBSD-base 18580307 Non-vital programs and libraries (development files) +FreeBSD-utilities-dev-lib32 15.1p4 FreeBSD-base 5849787 Non-vital programs and libraries (32-bit development files) +FreeBSD-utilities-lib32 15.1p4 FreeBSD-base 2976920 Non-vital programs and libraries (32-bit libraries) +FreeBSD-vi 15.1 FreeBSD-base 793399 Text editor +FreeBSD-vi-dbg 15.1 FreeBSD-base 772880 Text editor (debugging symbols) +FreeBSD-vt-data 15.1 FreeBSD-base 1636329 vt(4) fonts and keymaps +FreeBSD-wpa 15.1 FreeBSD-base 1669163 IEEE Std 802.11 WPA Supplicant +FreeBSD-wpa-dbg 15.1 FreeBSD-base 2306032 IEEE Std 802.11 WPA Supplicant (debugging symbols) +FreeBSD-xz 15.1p4 FreeBSD-base 145361 LZMA2 data compression +FreeBSD-xz-dbg 15.1p4 FreeBSD-base 810512 LZMA2 data compression (debugging symbols) +FreeBSD-xz-dbg-lib32 15.1 FreeBSD-base 511860 LZMA2 data compression (32-bit debugging symbols) +FreeBSD-xz-dev 15.1 FreeBSD-base 1366359 LZMA2 data compression (development files) +FreeBSD-xz-dev-lib32 15.1 FreeBSD-base 746782 LZMA2 data compression (32-bit development files) +FreeBSD-xz-lib 15.1 FreeBSD-base 203192 LZMA2 data compression (libraries) +FreeBSD-xz-lib32 15.1 FreeBSD-base 190144 LZMA2 data compression (32-bit libraries) +FreeBSD-yp 15.1 FreeBSD-base 428311 Yellow Pages (YP) / Network Information Service (NIS) +FreeBSD-yp-dbg 15.1 FreeBSD-base 488536 Yellow Pages (YP) / Network Information Service (NIS) (debugging symbols) +FreeBSD-zfs 15.1 FreeBSD-base 1317718 ZFS filesystem support +FreeBSD-zfs-dbg 15.1p1 FreeBSD-base 15878048 ZFS filesystem support (debugging symbols) +FreeBSD-zfs-dbg-lib32 15.1p1 FreeBSD-base 10836392 ZFS filesystem support (32-bit debugging symbols) +FreeBSD-zfs-dev 15.1p1 FreeBSD-base 23403660 ZFS filesystem support (development files) +FreeBSD-zfs-dev-lib32 15.1p1 FreeBSD-base 13926879 ZFS filesystem support (32-bit development files) +FreeBSD-zfs-lib 15.1p1 FreeBSD-base 4824528 ZFS filesystem support (libraries) +FreeBSD-zfs-lib32 15.1p1 FreeBSD-base 4176488 ZFS filesystem support (32-bit libraries) +FreeBSD-zlib 15.1 FreeBSD-base 102728 DEFLATE (gzip) data compression library +FreeBSD-zlib-dbg 15.1 FreeBSD-base 214248 DEFLATE (gzip) data compression library (debugging symbols) +FreeBSD-zlib-dbg-lib32 15.1 FreeBSD-base 155256 DEFLATE (gzip) data compression library (32-bit debugging symbols) +FreeBSD-zlib-dev 15.1 FreeBSD-base 453783 DEFLATE (gzip) data compression library (development files) +FreeBSD-zlib-dev-lib32 15.1 FreeBSD-base 230399 DEFLATE (gzip) data compression library (32-bit development files) +FreeBSD-zlib-lib32 15.1 FreeBSD-base 91852 DEFLATE (gzip) data compression library (32-bit libraries) +FreeBSD-zoneinfo 15.1p4 FreeBSD-base 839686 Timezone database +FreeBSD-zstd 15.1 FreeBSD-base 186549 Fast, lossless compression algorithm +FreeBSD-zstd-dbg 15.1 FreeBSD-base 3715136 Fast, lossless compression algorithm (debugging symbols) +FreeBSD-zstd-dbg-lib32 15.1 FreeBSD-base 2964044 Fast, lossless compression algorithm (32-bit debugging symbols) +FreeBSD-zstd-dev 15.1 FreeBSD-base 3272809 Fast, lossless compression algorithm (development files) +FreeBSD-zstd-dev-lib32 15.1 FreeBSD-base 2351481 Fast, lossless compression algorithm (32-bit development files) +FreeBSD-zstd-lib 15.1 FreeBSD-base 699248 Fast, lossless compression algorithm (libraries) +FreeBSD-zstd-lib32 15.1 FreeBSD-base 713256 Fast, lossless compression algorithm (32-bit libraries) +expat 2.8.2 FreeBSD-ports 400466 XML 1.0 parser written in C +firstboot-pkg-upgrade 1.2 FreeBSD-ports 1757 Update the system using pkg when it first boots +gettext-runtime 1.0_1 FreeBSD-ports 2057233 GNU gettext runtime libraries and programs +glib 2.86.4,2 FreeBSD-ports 110072519 Some useful routines of C programming (current stable version) +indexinfo 0.3.1_1 FreeBSD-ports 11766 Utility to regenerate the GNU info page index +libffi 3.6.0 FreeBSD-ports 180639 Foreign Function Interface +libiconv 1.18_1 FreeBSD-ports 3657746 Character set conversion library +mpdecimal 4.0.1 FreeBSD-ports 747472 C/C++ arbitrary precision decimal floating point libraries +pcre2 10.47_1 FreeBSD-ports 8411385 Perl Compatible Regular Expressions library, version 2 +pkg 2.7.5 FreeBSD-ports 27719861 Package manager +py312-packaging 26.2 FreeBSD-ports 1169815 Core utilities for Python packages +python312 3.12.14 FreeBSD-ports 229854416 Interpreted object-oriented programming language +qemu-guest-agent 11.0.2 FreeBSD-ports 31962444 QEMU CPU Emulator (guest agent) +readline 8.3.3 FreeBSD-ports 3239753 Library for editing command lines as they are typed +sudo 1.9.17p2_2 FreeBSD-ports 8429090 Allow others to run commands as root diff --git a/tests/fixtures/freebsd-vm/pkg_version_vRL_latest.txt b/tests/fixtures/freebsd-vm/pkg_version_vRL_latest.txt new file mode 100644 index 0000000..a859418 --- /dev/null +++ b/tests/fixtures/freebsd-vm/pkg_version_vRL_latest.txt @@ -0,0 +1,10 @@ +expat-2.8.2 < needs updating (remote has 2.8.5) +firstboot-pkg-upgrade-1.2 < needs updating (remote has 1.4) +glib-2.86.4,2 < needs updating (remote has 2.88.3,2) +libffi-3.6.0 < needs updating (remote has 3.8.0) +pcre2-10.47_1 < needs updating (remote has 10.49) +pkg-2.7.5 < needs updating (remote has 2.8.4) +py312-packaging-26.2 < needs updating (remote has 26.3) +python312-3.12.14 < needs updating (remote has 3.12.14_1) +qemu-guest-agent-11.0.2 < needs updating (remote has 11.1.2) +readline-8.3.3 < needs updating (remote has 8.3.6) diff --git a/tests/fixtures/freebsd-vm/service_e_l.txt b/tests/fixtures/freebsd-vm/service_e_l.txt new file mode 100644 index 0000000..5a79708 --- /dev/null +++ b/tests/fixtures/freebsd-vm/service_e_l.txt @@ -0,0 +1,38 @@ +/etc/rc.d/hostid +/etc/rc.d/growfs +/etc/rc.d/growfs_fstab +/etc/rc.d/hostid_save +/etc/rc.d/var_run +/etc/rc.d/kldxref +/etc/rc.d/devmatch +/etc/rc.d/nuageinit +/etc/rc.d/cleanvar +/etc/rc.d/ip6addrctl +/etc/rc.d/mixer +/etc/rc.d/rctl +/etc/rc.d/netif +/etc/rc.d/devd +/etc/rc.d/resolv +/etc/rc.d/os-release +/etc/rc.d/dmesg +/etc/rc.d/gptboot +/etc/rc.d/motd +/etc/rc.d/newsyslog +/etc/rc.d/virecover +/etc/rc.d/cleartmp +/etc/rc.d/nuageinit_post_net +/etc/rc.d/syslogd +/usr/local/etc/rc.d/firstboot_pkg_upgrade +/etc/rc.d/savecore +/etc/rc.d/utx +/usr/local/etc/rc.d/qemu-guest-agent +/etc/rc.d/nuageinit_user_data_script +/etc/rc.d/cron +/etc/rc.d/sshd +/etc/rc.d/bgfsck +--- +DAEMON +FILESYSTEMS +LOGIN +NETWORKING +SERVERS diff --git a/tests/fixtures/freebsd-vm/service_status_loop.txt b/tests/fixtures/freebsd-vm/service_status_loop.txt new file mode 100644 index 0000000..cbeac24 --- /dev/null +++ b/tests/fixtures/freebsd-vm/service_status_loop.txt @@ -0,0 +1,32 @@ +hostid /etc/rc.d/hostid: unknown directive 'status'. +growfs /etc/rc.d/growfs: unknown directive 'status'. +growfs_fstab /etc/rc.d/growfs_fstab: unknown directive 'status'. +hostid_save /etc/rc.d/hostid_save: unknown directive 'status'. +var_run /etc/rc.d/var_run: unknown directive 'status'. +kldxref /etc/rc.d/kldxref: unknown directive 'status'. +devmatch /etc/rc.d/devmatch: unknown directive 'status'. +nuageinit /etc/rc.d/nuageinit: unknown directive 'status'. +cleanvar /etc/rc.d/cleanvar: unknown directive 'status'. +ip6addrctl Prefix Prec Label Use +mixer /etc/rc.d/mixer: unknown directive 'status'. +rctl /etc/rc.d/rctl: unknown directive 'status'. +netif /etc/rc.d/netif: unknown directive 'status'. +devd devd is running as pid 771. +resolv /etc/rc.d/resolv: unknown directive 'status'. +os-release /etc/rc.d/os-release: unknown directive 'status'. +dmesg /etc/rc.d/dmesg: unknown directive 'status'. +gptboot /etc/rc.d/gptboot: unknown directive 'status'. +motd /etc/rc.d/motd: unknown directive 'status'. +newsyslog newsyslog is not running. +virecover /etc/rc.d/virecover: unknown directive 'status'. +cleartmp /etc/rc.d/cleartmp: unknown directive 'status'. +nuageinit_post_net /etc/rc.d/nuageinit_post_net: unknown directive 'status'. +syslogd eval: cannot open /var/run/syslog.pid: Permission denied +firstboot_pkg_upgrade /usr/local/etc/rc.d/firstboot_pkg_upgrade: unknown directive 'status'. +savecore /etc/rc.d/savecore: unknown directive 'status'. +utx /etc/rc.d/utx: unknown directive 'status'. +qemu-guest-agent qemu_guest_agent is not running. +nuageinit_user_data_script /etc/rc.d/nuageinit_user_data_script: unknown directive 'status'. +cron eval: cannot open /var/run/cron.pid: Permission denied +sshd sshd is running as pid 1282. +bgfsck /etc/rc.d/bgfsck: unknown directive 'status'. diff --git a/tests/fixtures/freebsd-vm/sudo_pkg_audit_Fq.txt b/tests/fixtures/freebsd-vm/sudo_pkg_audit_Fq.txt new file mode 100644 index 0000000..a3614d8 --- /dev/null +++ b/tests/fixtures/freebsd-vm/sudo_pkg_audit_Fq.txt @@ -0,0 +1,3 @@ +python312-3.12.14 +expat-2.8.2 +rc=1 diff --git a/tests/fixtures/freebsd-vm/sudo_pkg_upgrade_n_latest.txt b/tests/fixtures/freebsd-vm/sudo_pkg_upgrade_n_latest.txt new file mode 100644 index 0000000..456747b --- /dev/null +++ b/tests/fixtures/freebsd-vm/sudo_pkg_upgrade_n_latest.txt @@ -0,0 +1,27 @@ +Updating FreeBSD-ports repository catalogue... +FreeBSD-ports repository is up to date. +Updating FreeBSD-ports-kmods repository catalogue... +FreeBSD-ports-kmods repository is up to date. +Updating FreeBSD-base repository catalogue... +FreeBSD-base repository is up to date. +All repositories are up to date. +Checking for upgrades (10 candidates): .......... done +Processing candidates (10 candidates): .......... done +The following 10 package(s) will be affected (of 0 checked): + +Installed packages to be UPGRADED: + expat: 2.8.2 -> 2.8.5 [FreeBSD-ports] + firstboot-pkg-upgrade: 1.2 -> 1.4 [FreeBSD-ports] + glib: 2.86.4,2 -> 2.88.3,2 [FreeBSD-ports] + libffi: 3.6.0 -> 3.8.0 [FreeBSD-ports] + pcre2: 10.47_1 -> 10.49 [FreeBSD-ports] + pkg: 2.7.5 -> 2.8.4 [FreeBSD-ports] + py312-packaging: 26.2 -> 26.3 [FreeBSD-ports] + python312: 3.12.14 -> 3.12.14_1 [FreeBSD-ports] + qemu-guest-agent: 11.0.2 -> 11.1.2 [FreeBSD-ports] + readline: 8.3.3 -> 8.3.6 [FreeBSD-ports] + +Number of packages to be upgraded: 10 + +The process will require 27 MiB more space. +70 MiB to be downloaded. diff --git a/tests/fixtures/freebsd-vm/sudo_service_status_loop.txt b/tests/fixtures/freebsd-vm/sudo_service_status_loop.txt new file mode 100644 index 0000000..72e622b --- /dev/null +++ b/tests/fixtures/freebsd-vm/sudo_service_status_loop.txt @@ -0,0 +1,32 @@ +hostid /etc/rc.d/hostid: unknown directive 'status'. +growfs /etc/rc.d/growfs: unknown directive 'status'. +growfs_fstab /etc/rc.d/growfs_fstab: unknown directive 'status'. +hostid_save /etc/rc.d/hostid_save: unknown directive 'status'. +var_run /etc/rc.d/var_run: unknown directive 'status'. +kldxref /etc/rc.d/kldxref: unknown directive 'status'. +devmatch /etc/rc.d/devmatch: unknown directive 'status'. +nuageinit /etc/rc.d/nuageinit: unknown directive 'status'. +cleanvar /etc/rc.d/cleanvar: unknown directive 'status'. +ip6addrctl Prefix Prec Label Use +mixer /etc/rc.d/mixer: unknown directive 'status'. +rctl /etc/rc.d/rctl: unknown directive 'status'. +netif /etc/rc.d/netif: unknown directive 'status'. +devd devd is running as pid 771. +resolv /etc/rc.d/resolv: unknown directive 'status'. +os-release /etc/rc.d/os-release: unknown directive 'status'. +dmesg /etc/rc.d/dmesg: unknown directive 'status'. +gptboot /etc/rc.d/gptboot: unknown directive 'status'. +motd /etc/rc.d/motd: unknown directive 'status'. +newsyslog newsyslog is not running. +virecover /etc/rc.d/virecover: unknown directive 'status'. +cleartmp /etc/rc.d/cleartmp: unknown directive 'status'. +nuageinit_post_net /etc/rc.d/nuageinit_post_net: unknown directive 'status'. +syslogd syslogd is running as pid 1052. +firstboot_pkg_upgrade /usr/local/etc/rc.d/firstboot_pkg_upgrade: unknown directive 'status'. +savecore /etc/rc.d/savecore: unknown directive 'status'. +utx /etc/rc.d/utx: unknown directive 'status'. +qemu-guest-agent qemu_guest_agent is not running. +nuageinit_user_data_script /etc/rc.d/nuageinit_user_data_script: unknown directive 'status'. +cron cron is running as pid 1232. +sshd sshd is running as pid 1282. +bgfsck /etc/rc.d/bgfsck: unknown directive 'status'. diff --git a/tests/fixtures/openbsd-vm/COMMANDS.txt b/tests/fixtures/openbsd-vm/COMMANDS.txt index b112acc..0367598 100644 --- a/tests/fixtures/openbsd-vm/COMMANDS.txt +++ b/tests/fixtures/openbsd-vm/COMMANDS.txt @@ -33,3 +33,9 @@ id sudo fstat -n fstat -n netstat -an -f inet; netstat -an -f inet6 +pkg_info -m +sudo rcctl ls on/started/failed +sudo pkg_add -u -n -v (pcre2 downgraded to 10.44) +pkg_info +for s in $(rcctl ls on); do if rcctl check $s >/dev/null 2>&1; then r=1; else r=0; fi; printf "%s\t%s\n" "$s" "$r"; done +sudo syspatch -l diff --git a/tests/fixtures/openbsd-vm/pkg_info_full.txt b/tests/fixtures/openbsd-vm/pkg_info_full.txt new file mode 100644 index 0000000..5aed25b --- /dev/null +++ b/tests/fixtures/openbsd-vm/pkg_info_full.txt @@ -0,0 +1,84 @@ +argon2-20190702p0 C implementation of Argon2 - password hashing function +bash-5.3.9 GNU Bourne Again Shell +bash-completion-2.17.0 programmable completion functions for bash +bzip2-1.0.8p0 block-sorting file compressor, unencumbered +e2fsprogs-1.47.3 utilities to manipulate ext2 filesystems +gettext-runtime-1.0 GNU gettext runtime libraries and programs +glib2-2.86.5 general-purpose utility library +libb2-0.98.1v0 library providing BLAKE2b, BLAKE2s, BLAKE2bp, BLAKE2sp +libffi-3.5.2p0 Foreign Function Interface +libiconv-1.19 character set conversion library +libyaml-0.2.5 YAML 1.1 parser and emitter written in C +meson-1.10.2v0 next-generation build system +ninja-1.11.1p1v1 small build system with a focus on speed +pcre2-10.44 perl-compatible regular expression library, version 2 +py3-MarkupSafe-3.0.3p0 implements an XML/HTML/XHTML markup safe string +py3-apipkg-3.0.2p1 namespace control and lazy-import mechanism for Python +py3-argon2-cffi-25.1.0 argon2 password hashing for Python +py3-argon2-cffi-bindings-25.1.0 argon2 password hashing for Python +py3-arrow-1.4.0p0 better dates and times for Python +py3-attrs-25.4.0 classes without boilerplate +py3-bcrypt-5.0.0p0 bcrypt blowfish password hashing for Python +py3-blinker-1.9.0p0 fast, simple object-to-object and broadcast signaling +py3-brotli-1.2.0 Python bindings for the Brotli compression library +py3-cachetools-7.0.5 extensible memoizing collections and decorators +py3-certifi-2026.1.4 TLS CA support for Python, patched to use /etc/ssl/cert.pem +py3-cffi-2.0.0p0 Foreign Function Interface for Python calling C code +py3-chardet-5.2.0v0 character encoding auto-detection in Python +py3-charset-normalizer-3.4.7 character set detector library +py3-colorama-0.4.6p1 print colored terminal text from Python apps +py3-configobj-5.0.9p0 config file reader and writer +py3-coverage-7.13.2 code coverage measurement for Python +py3-cparser-3.0 C parser in pure Python +py3-cryptography-46.0.7 cryptographic recipes and primitives for Python +py3-dateutil-2.9.0pl0p0 Python API for advanced date calculations +py3-distlib-0.4.0 distribution utilities +py3-execnet-2.1.2 rapid multi-Python deployment +py3-filelock-3.25.2 platform independent file lock +py3-fqdn-1.5.1p1 validates that domain names are acceptable to browsers +py3-idna-3.11 Python library to support the IDNA protocol +py3-iniconfig-2.3.0 brain-dead simple config-ini parsing +py3-isoduration-20.11.0p2 operations with ISO 8601 durations +py3-jinja2-3.1.6p0 fast, optionally sandboxed, Python template engine +py3-jsonpatch-1.33p2 library to apply JSON Patches according to RFC 6902 +py3-jsonpointer-2.4p2 library to resolve JSON Pointers according to RFC 6901 +py3-jsonschema-4.24.0 implementation of JSON Schema validation for Python +py3-jsonschema-specifications-2025.4.1 JSON schema meta-schemas and vocabularies +py3-jwt-2.10.1 JSON Web Token implementation in Python +py3-mock-5.1.0p0 python mocking and patching library for testing +py3-oauthlib-3.3.1 Python library for OAuth +py3-packaging-26.0 core utilities for Python packaging +py3-passlib-1.9.3p0 Python module providing a password hashing framework +py3-platformdirs-4.9.6 determine appropriate platform-specific directories +py3-pluggy-1.6.0p0 plugin and hook calling mechanisms for Python +py3-pygments-2.20.0 Python syntax highlighter +py3-pyproject_api-1.10.0 API to interact with pyproject.toml-based projects +py3-python-discovery-1.2.1p0 library for discovering Python interpreters +py3-referencing-0.37.0p0 JSON referencing in Python +py3-requests-2.33.1 elegant and simple HTTP library for Python +py3-responses-0.25.0p2 utility library for mocking out the `requests` Python +py3-rfc3339-validator-0.1.4p2 pure python RFC3339 validator +py3-rfc3986-validator-0.1.1p2 pure python RFC3986 validator +py3-rpds-py-0.30.0p0 Python bindings for Rust's persistent data structures (rpds) +py3-scrypt-0.9.4 support for the scrypt key derivation function +py3-serial-3.5p0 serial interface class for Python +py3-six-1.17.0p1 Python 2 and 3 compatibility library +py3-test-9.0.2p0 cross-project testing tool for Python +py3-test-cov-7.1.0 pytest plugin for measuring coverage +py3-test-mock-3.15.1 thin wrapper around mock package for easier use with pytest +py3-test-xdist-3.8.0 py.test xdist plugin for distributed testing +py3-tox-4.47.0 virtualenv-based automation of test activities +py3-types-python-dateutil-2.9.0.20260305 typing stubs for Python dateutil +py3-tzdata-2026.3 IANA timezone data +py3-uri-template-1.3.0p1 RFC 6570 URI template processor +py3-urllib3-1.26.20p0 HTTP library for Python +py3-virtualenv-21.2.3 virtual Python environment builder +py3-webcolors-25.10.0p0 library for working with HTML color formats +py3-yaml-6.0.2p1 YAML parser and emitter in Python +python-3.13.15p0 interpreted object-oriented programming language +qemu-ga-10.2.1 QEMU guest agent +quirks-7.194 exceptions to pkg_add rules +sqlite3-3.51.3 embedded SQL implementation +sudo-1.9.17.2p1 execute a command as another user +updatedb-0p0 pkg_add speed up cache +xz-5.8.4 library and tools for XZ and LZMA compressed files diff --git a/tests/fixtures/openbsd-vm/pkg_info_m.txt b/tests/fixtures/openbsd-vm/pkg_info_m.txt new file mode 100644 index 0000000..9f1010a --- /dev/null +++ b/tests/fixtures/openbsd-vm/pkg_info_m.txt @@ -0,0 +1,25 @@ +bash-5.3.9 GNU Bourne Again Shell +bash-completion-2.17.0 programmable completion functions for bash +e2fsprogs-1.47.3 utilities to manipulate ext2 filesystems +meson-1.10.2v0 next-generation build system +pcre2-10.44 perl-compatible regular expression library, version 2 +py3-configobj-5.0.9p0 config file reader and writer +py3-jinja2-3.1.6p0 fast, optionally sandboxed, Python template engine +py3-jsonpatch-1.33p2 library to apply JSON Patches according to RFC 6902 +py3-jsonschema-4.24.0 implementation of JSON Schema validation for Python +py3-oauthlib-3.3.1 Python library for OAuth +py3-packaging-26.0 core utilities for Python packaging +py3-passlib-1.9.3p0 Python module providing a password hashing framework +py3-requests-2.33.1 elegant and simple HTTP library for Python +py3-responses-0.25.0p2 utility library for mocking out the `requests` Python +py3-serial-3.5p0 serial interface class for Python +py3-test-9.0.2p0 cross-project testing tool for Python +py3-test-cov-7.1.0 pytest plugin for measuring coverage +py3-test-mock-3.15.1 thin wrapper around mock package for easier use with pytest +py3-test-xdist-3.8.0 py.test xdist plugin for distributed testing +py3-tox-4.47.0 virtualenv-based automation of test activities +py3-yaml-6.0.2p1 YAML parser and emitter in Python +python-3.13.15p0 interpreted object-oriented programming language +qemu-ga-10.2.1 QEMU guest agent +quirks-7.194 exceptions to pkg_add rules +sudo-1.9.17.2p1 execute a command as another user diff --git a/tests/fixtures/openbsd-vm/rcctl_check_loop.txt b/tests/fixtures/openbsd-vm/rcctl_check_loop.txt new file mode 100644 index 0000000..02007a4 --- /dev/null +++ b/tests/fixtures/openbsd-vm/rcctl_check_loop.txt @@ -0,0 +1,18 @@ +check_quotas 0 +cloudconfig 0 +cloudfinal 0 +cloudinit 0 +cloudinitlocal 0 +cron 1 +dhcpleased 1 +library_aslr 0 +ntpd 1 +pf 0 +pflogd 1 +qemu_ga 0 +resolvd 1 +slaacd 1 +smtpd 1 +sndiod 1 +sshd 1 +syslogd 1 diff --git a/tests/fixtures/openbsd-vm/sudo_pkg_add_u_n_v.txt b/tests/fixtures/openbsd-vm/sudo_pkg_add_u_n_v.txt new file mode 100644 index 0000000..967c13c --- /dev/null +++ b/tests/fixtures/openbsd-vm/sudo_pkg_add_u_n_v.txt @@ -0,0 +1,214 @@ +Update candidates: quirks-7.194 -> quirks-7.194 +quirks-7.194->7.194 (processing)(pretending) +Update candidates: updatedb-0p0 -> updatedb-0p0 +quirks-7.194:updatedb-0p0->0p0 (processing)(pretending) +quirks-7.194->7.194 (processing)(pretending) +quirks-7.194 signed on 2026-10-01T16:58:35Z +Update candidates: argon2-20190702p0 -> argon2-20190702p0 +argon2-20190702p0->20190702p0 (processing)(pretending) +Update candidates: bash-5.3.9 -> bash-5.3.9 +bash-5.3.9->5.3.9 (processing)(pretending) +Update candidates: gettext-runtime-1.0 -> gettext-runtime-1.0 +bash-5.3.9:gettext-runtime-1.0->1.0 (processing)(pretending) +Update candidates: libiconv-1.19 -> libiconv-1.19 +bash-5.3.9:libiconv-1.19->1.19 (processing)(pretending) +bash-5.3.9:gettext-runtime-1.0->1.0 (processing)(pretending) +bash-5.3.9->5.3.9 (processing)(pretending) +Update candidates: bash-completion-2.17.0 -> bash-completion-2.17.0 +bash-completion-2.17.0->2.17.0 (processing)(pretending) +Update candidates: bzip2-1.0.8p0 -> bzip2-1.0.8p0 +bzip2-1.0.8p0->1.0.8p0 (processing)(pretending) +Update candidates: e2fsprogs-1.47.3 -> e2fsprogs-1.47.3 +e2fsprogs-1.47.3->1.47.3 (processing)(pretending) +Update candidates: glib2-2.86.5 -> glib2-2.86.5 +glib2-2.86.5->2.86.5 (processing)(pretending) +Update candidates: pcre2-10.44 -> pcre2-10.48 +glib2-2.86.5:pcre2-10.44->10.48 (processing)(pretending) +glib2-2.86.5:.libs-pcre2-10.48+pcre2-10.44->pcre2-10.48 (processing)(pretending) +glib2-2.86.5:pcre2-10.44 (hashing)(pretending) +glib2-2.86.5:.libs-pcre2-10.48 (hashing)(pretending) +glib2-2.86.5:pcre2-10.48 (tieing)(pretending) +glib2-2.86.5:pcre2-10.48 (extracting)(pretending) +glib2-2.86.5:pcre2-10.48 (skipping)(pretending) +glib2-2.86.5:pcre2-10.44 (deleting)(pretending) +Removing manpages in /usr/local/man: /usr/local/man/man1/pcre2-config.1 /usr/local/man/man1/pcre2grep.1 /usr/local/man/man1/pcre2test.1 /usr/local/man/man3/pcre2.3 /usr/local/man/man3/pcre2_callout_enumerate.3 /usr/local/man/man3/pcre2_code_copy.3 /usr/local/man/man3/pcre2_code_copy_with_tables.3 /usr/local/man/man3/pcre2_code_free.3 /usr/local/man/man3/pcre2_compile.3 /usr/local/man/man3/pcre2_compile_context_copy.3 /usr/local/man/man3/pcre2_compile_context_create.3 /usr/local/man/man3/pcre2_compile_context_free.3 /usr/local/man/man3/pcre2_config.3 /usr/local/man/man3/pcre2_convert_context_copy.3 /usr/local/man/man3/pcre2_convert_context_create.3 /usr/local/man/man3/pcre2_convert_context_free.3 /usr/local/man/man3/pcre2_converted_pattern_free.3 /usr/local/man/man3/pcre2_dfa_match.3 /usr/local/man/man3/pcre2_general_context_copy.3 /usr/local/man/man3/pcre2_general_context_create.3 /usr/local/man/man3/pcre2_general_context_free.3 /usr/local/man/man3/pcre2_get_error_message.3 /usr/local/man/man3/pcre2_get_mark.3 /usr/local/man/man3/pcre2_get_match_data_heapframes_size.3 /usr/local/man/man3/pcre2_get_match_data_size.3 /usr/local/man/man3/pcre2_get_ovector_count.3 /usr/local/man/man3/pcre2_get_ovector_pointer.3 /usr/local/man/man3/pcre2_get_startchar.3 /usr/local/man/man3/pcre2_jit_compile.3 /usr/local/man/man3/pcre2_jit_free_unused_memory.3 /usr/local/man/man3/pcre2_jit_match.3 /usr/local/man/man3/pcre2_jit_stack_assign.3 /usr/local/man/man3/pcre2_jit_stack_create.3 /usr/local/man/man3/pcre2_jit_stack_free.3 /usr/local/man/man3/pcre2_maketables.3 /usr/local/man/man3/pcre2_maketables_free.3 /usr/local/man/man3/pcre2_match.3 /usr/local/man/man3/pcre2_match_context_copy.3 /usr/local/man/man3/pcre2_match_context_create.3 /usr/local/man/man3/pcre2_match_context_free.3 /usr/local/man/man3/pcre2_match_data_create.3 /usr/local/man/man3/pcre2_match_data_create_from_pattern.3 /usr/local/man/man3/pcre2_match_data_free.3 /usr/local/man/man3/pcre2_pattern_convert.3 /usr/local/man/man3/pcre2_pattern_info.3 /usr/local/man/man3/pcre2_serialize_decode.3 /usr/local/man/man3/pcre2_serialize_encode.3 /usr/local/man/man3/pcre2_serialize_free.3 /usr/local/man/man3/pcre2_serialize_get_number_of_codes.3 /usr/local/man/man3/pcre2_set_bsr.3 /usr/local/man/man3/pcre2_set_callout.3 /usr/local/man/man3/pcre2_set_character_tables.3 /usr/local/man/man3/pcre2_set_compile_extra_options.3 /usr/local/man/man3/pcre2_set_compile_recursion_guard.3 /usr/local/man/man3/pcre2_set_depth_limit.3 /usr/local/man/man3/pcre2_set_glob_escape.3 /usr/local/man/man3/pcre2_set_glob_separator.3 /usr/local/man/man3/pcre2_set_heap_limit.3 /usr/local/man/man3/pcre2_set_match_limit.3 /usr/local/man/man3/pcre2_set_max_pattern_compiled_length.3 /usr/local/man/man3/pcre2_set_max_pattern_length.3 /usr/local/man/man3/pcre2_set_max_varlookbehind.3 /usr/local/man/man3/pcre2_set_newline.3 /usr/local/man/man3/pcre2_set_offset_limit.3 /usr/local/man/man3/pcre2_set_parens_nest_limit.3 /usr/local/man/man3/pcre2_set_recursion_limit.3 /usr/local/man/man3/pcre2_set_recursion_memory_management.3 /usr/local/man/man3/pcre2_set_substitute_callout.3 /usr/local/man/man3/pcre2_substitute.3 /usr/local/man/man3/pcre2_substring_copy_byname.3 /usr/local/man/man3/pcre2_substring_copy_bynumber.3 /usr/local/man/man3/pcre2_substring_free.3 /usr/local/man/man3/pcre2_substring_get_byname.3 /usr/local/man/man3/pcre2_substring_get_bynumber.3 /usr/local/man/man3/pcre2_substring_length_byname.3 /usr/local/man/man3/pcre2_substring_length_bynumber.3 /usr/local/man/man3/pcre2_substring_list_free.3 /usr/local/man/man3/pcre2_substring_list_get.3 /usr/local/man/man3/pcre2_substring_nametable_scan.3 /usr/local/man/man3/pcre2_substring_number_from_name.3 /usr/local/man/man3/pcre2api.3 /usr/local/man/man3/pcre2build.3 /usr/local/man/man3/pcre2callout.3 /usr/local/man/man3/pcre2compat.3 /usr/local/man/man3/pcre2convert.3 /usr/local/man/man3/pcre2demo.3 /usr/local/man/man3/pcre2jit.3 /usr/local/man/man3/pcre2limits.3 /usr/local/man/man3/pcre2matching.3 /usr/local/man/man3/pcre2partial.3 /usr/local/man/man3/pcre2pattern.3 /usr/local/man/man3/pcre2perform.3 /usr/local/man/man3/pcre2posix.3 /usr/local/man/man3/pcre2sample.3 /usr/local/man/man3/pcre2serialize.3 /usr/local/man/man3/pcre2syntax.3 /usr/local/man/man3/pcre2unicode.3 +glib2-2.86.5:.libs-pcre2-10.48 (deleting)(pretending) +glib2-2.86.5:pcre2-10.48 (installing)(pretending) +Adding glib2-2.86.5:.libs-pcre2-10.48+pcre2-10.44->pcre2-10.48(pretending) +Update candidates: python-3.13.15p0 -> python-3.13.15p0 +glib2-2.86.5:python-3.13.15p0->3.13.15p0 (processing)(pretending) +Update candidates: xz-5.8.4 -> xz-5.8.4 +glib2-2.86.5:xz-5.8.4->5.8.4 (processing)(pretending) +Update candidates: sqlite3-3.51.3 -> sqlite3-3.51.3 +glib2-2.86.5:sqlite3-3.51.3->3.51.3 (processing)(pretending) +Update candidates: libb2-0.98.1v0 -> libb2-0.98.1v0 +glib2-2.86.5:libb2-0.98.1v0->0.98.1v0 (processing)(pretending) +Update candidates: libffi-3.5.2p0 -> libffi-3.5.2p0 +glib2-2.86.5:libffi-3.5.2p0->3.5.2p0 (processing)(pretending) +glib2-2.86.5:python-3.13.15p0->3.13.15p0 (processing)(pretending) +Update candidates: py3-packaging-26.0 -> py3-packaging-26.0 +glib2-2.86.5:py3-packaging-26.0->26.0 (processing)(pretending) +glib2-2.86.5->2.86.5 (processing)(pretending) +Update candidates: libyaml-0.2.5 -> libyaml-0.2.5 +libyaml-0.2.5->0.2.5 (processing)(pretending) +Update candidates: meson-1.10.2v0 -> meson-1.10.2v0 +meson-1.10.2v0->1.10.2v0 (processing)(pretending) +Update candidates: ninja-1.11.1p1v1 -> ninja-1.11.1p1v1 +meson-1.10.2v0:ninja-1.11.1p1v1->1.11.1p1v1 (processing)(pretending) +meson-1.10.2v0->1.10.2v0 (processing)(pretending) +Update candidates: py3-MarkupSafe-3.0.3p0 -> py3-MarkupSafe-3.0.3p0 +py3-MarkupSafe-3.0.3p0->3.0.3p0 (processing)(pretending) +Update candidates: py3-apipkg-3.0.2p1 -> py3-apipkg-3.0.2p1 +py3-apipkg-3.0.2p1->3.0.2p1 (processing)(pretending) +Update candidates: py3-argon2-cffi-25.1.0 -> py3-argon2-cffi-25.1.0 +py3-argon2-cffi-25.1.0->25.1.0 (processing)(pretending) +Update candidates: py3-argon2-cffi-bindings-25.1.0 -> py3-argon2-cffi-bindings-25.1.0 +py3-argon2-cffi-25.1.0:py3-argon2-cffi-bindings-25.1.0->25.1.0 (processing)(pretending) +Update candidates: py3-cffi-2.0.0p0 -> py3-cffi-2.0.0p0 +py3-argon2-cffi-25.1.0:py3-cffi-2.0.0p0->2.0.0p0 (processing)(pretending) +Update candidates: py3-cparser-3.0 -> py3-cparser-3.0 +py3-argon2-cffi-25.1.0:py3-cparser-3.0->3.0 (processing)(pretending) +py3-argon2-cffi-25.1.0:py3-cffi-2.0.0p0->2.0.0p0 (processing)(pretending) +py3-argon2-cffi-25.1.0:py3-argon2-cffi-bindings-25.1.0->25.1.0 (processing)(pretending) +py3-argon2-cffi-25.1.0->25.1.0 (processing)(pretending) +Update candidates: py3-arrow-1.4.0p0 -> py3-arrow-1.4.0p0 +py3-arrow-1.4.0p0->1.4.0p0 (processing)(pretending) +Update candidates: py3-types-python-dateutil-2.9.0.20260305 -> py3-types-python-dateutil-2.9.0.20260305 +py3-arrow-1.4.0p0:py3-types-python-dateutil-2.9.0.20260305->2.9.0.20260305 (processing)(pretending) +Update candidates: py3-tzdata-2026.3 -> py3-tzdata-2026.4 +py3-arrow-1.4.0p0:py3-tzdata-2026.3->2026.4 (processing)(pretending) +py3-arrow-1.4.0p0:py3-tzdata-2026.3 (hashing)(pretending) +py3-arrow-1.4.0p0:py3-tzdata-2026.4 (tieing)(pretending) +py3-arrow-1.4.0p0:py3-tzdata-2026.4 (extracting)(pretending) +py3-arrow-1.4.0p0:py3-tzdata-2026.4 (skipping)(pretending) +py3-arrow-1.4.0p0:py3-tzdata-2026.3 (deleting)(pretending) +py3-arrow-1.4.0p0:py3-tzdata-2026.4 (installing)(pretending) +Adding py3-arrow-1.4.0p0:py3-tzdata-2026.3->2026.4(pretending) +Update candidates: py3-dateutil-2.9.0pl0p0 -> py3-dateutil-2.9.0pl0p0 +py3-arrow-1.4.0p0:py3-dateutil-2.9.0pl0p0->2.9.0pl0p0 (processing)(pretending) +Update candidates: py3-six-1.17.0p1 -> py3-six-1.17.0p1 +py3-arrow-1.4.0p0:py3-six-1.17.0p1->1.17.0p1 (processing)(pretending) +py3-arrow-1.4.0p0:py3-dateutil-2.9.0pl0p0->2.9.0pl0p0 (processing)(pretending) +py3-arrow-1.4.0p0->1.4.0p0 (processing)(pretending) +Update candidates: py3-attrs-25.4.0 -> py3-attrs-25.4.0 +py3-attrs-25.4.0->25.4.0 (processing)(pretending) +Update candidates: py3-bcrypt-5.0.0p0 -> py3-bcrypt-5.0.0p0 +py3-bcrypt-5.0.0p0->5.0.0p0 (processing)(pretending) +Update candidates: py3-blinker-1.9.0p0 -> py3-blinker-1.9.0p0 +py3-blinker-1.9.0p0->1.9.0p0 (processing)(pretending) +Update candidates: py3-brotli-1.2.0 -> py3-brotli-1.2.0 +py3-brotli-1.2.0->1.2.0 (processing)(pretending) +Update candidates: py3-cachetools-7.0.5 -> py3-cachetools-7.0.5 +py3-cachetools-7.0.5->7.0.5 (processing)(pretending) +Update candidates: py3-certifi-2026.1.4 -> py3-certifi-2026.1.4 +py3-certifi-2026.1.4->2026.1.4 (processing)(pretending) +Update candidates: py3-chardet-5.2.0v0 -> py3-chardet-5.2.0v0 +py3-chardet-5.2.0v0->5.2.0v0 (processing)(pretending) +Update candidates: py3-charset-normalizer-3.4.7 -> py3-charset-normalizer-3.4.7 +py3-charset-normalizer-3.4.7->3.4.7 (processing)(pretending) +Update candidates: py3-colorama-0.4.6p1 -> py3-colorama-0.4.6p1 +py3-colorama-0.4.6p1->0.4.6p1 (processing)(pretending) +Update candidates: py3-configobj-5.0.9p0 -> py3-configobj-5.0.9p0 +py3-configobj-5.0.9p0->5.0.9p0 (processing)(pretending) +Update candidates: py3-coverage-7.13.2 -> py3-coverage-7.13.2 +py3-coverage-7.13.2->7.13.2 (processing)(pretending) +Update candidates: py3-cryptography-46.0.7 -> py3-cryptography-46.0.7 +py3-cryptography-46.0.7->46.0.7 (processing)(pretending) +Update candidates: py3-distlib-0.4.0 -> py3-distlib-0.4.0 +py3-distlib-0.4.0->0.4.0 (processing)(pretending) +Update candidates: py3-execnet-2.1.2 -> py3-execnet-2.1.2 +py3-execnet-2.1.2->2.1.2 (processing)(pretending) +Update candidates: py3-filelock-3.25.2 -> py3-filelock-3.25.2 +py3-filelock-3.25.2->3.25.2 (processing)(pretending) +Update candidates: py3-fqdn-1.5.1p1 -> py3-fqdn-1.5.1p1 +py3-fqdn-1.5.1p1->1.5.1p1 (processing)(pretending) +Update candidates: py3-idna-3.11 -> py3-idna-3.11 +py3-idna-3.11->3.11 (processing)(pretending) +Update candidates: py3-iniconfig-2.3.0 -> py3-iniconfig-2.3.0 +py3-iniconfig-2.3.0->2.3.0 (processing)(pretending) +Update candidates: py3-isoduration-20.11.0p2 -> py3-isoduration-20.11.0p2 +py3-isoduration-20.11.0p2->20.11.0p2 (processing)(pretending) +Update candidates: py3-jinja2-3.1.6p0 -> py3-jinja2-3.1.6p0 +py3-jinja2-3.1.6p0->3.1.6p0 (processing)(pretending) +Update candidates: py3-jsonpatch-1.33p2 -> py3-jsonpatch-1.33p2 +py3-jsonpatch-1.33p2->1.33p2 (processing)(pretending) +Update candidates: py3-jsonpointer-2.4p2 -> py3-jsonpointer-2.4p2 +py3-jsonpatch-1.33p2:py3-jsonpointer-2.4p2->2.4p2 (processing)(pretending) +py3-jsonpatch-1.33p2->1.33p2 (processing)(pretending) +Update candidates: py3-jsonschema-4.24.0 -> py3-jsonschema-4.24.0 +py3-jsonschema-4.24.0->4.24.0 (processing)(pretending) +Update candidates: py3-uri-template-1.3.0p1 -> py3-uri-template-1.3.0p1 +py3-jsonschema-4.24.0:py3-uri-template-1.3.0p1->1.3.0p1 (processing)(pretending) +Update candidates: py3-rfc3339-validator-0.1.4p2 -> py3-rfc3339-validator-0.1.4p2 +py3-jsonschema-4.24.0:py3-rfc3339-validator-0.1.4p2->0.1.4p2 (processing)(pretending) +Update candidates: py3-rfc3986-validator-0.1.1p2 -> py3-rfc3986-validator-0.1.1p2 +py3-jsonschema-4.24.0:py3-rfc3986-validator-0.1.1p2->0.1.1p2 (processing)(pretending) +Update candidates: py3-rpds-py-0.30.0p0 -> py3-rpds-py-0.30.0p0 +py3-jsonschema-4.24.0:py3-rpds-py-0.30.0p0->0.30.0p0 (processing)(pretending) +Update candidates: py3-webcolors-25.10.0p0 -> py3-webcolors-25.10.0p0 +py3-jsonschema-4.24.0:py3-webcolors-25.10.0p0->25.10.0p0 (processing)(pretending) +Update candidates: py3-referencing-0.37.0p0 -> py3-referencing-0.37.0p0 +py3-jsonschema-4.24.0:py3-referencing-0.37.0p0->0.37.0p0 (processing)(pretending) +Update candidates: py3-jsonschema-specifications-2025.4.1 -> py3-jsonschema-specifications-2025.4.1 +py3-jsonschema-4.24.0:py3-jsonschema-specifications-2025.4.1->2025.4.1 (processing)(pretending) +py3-jsonschema-4.24.0->4.24.0 (processing)(pretending) +Update candidates: py3-jwt-2.10.1 -> py3-jwt-2.10.1 +py3-jwt-2.10.1->2.10.1 (processing)(pretending) +Update candidates: py3-mock-5.1.0p0 -> py3-mock-5.1.0p0 +py3-mock-5.1.0p0->5.1.0p0 (processing)(pretending) +Update candidates: py3-oauthlib-3.3.1 -> py3-oauthlib-3.3.1 +py3-oauthlib-3.3.1->3.3.1 (processing)(pretending) +Update candidates: py3-passlib-1.9.3p0 -> py3-passlib-1.9.3p0 +py3-passlib-1.9.3p0->1.9.3p0 (processing)(pretending) +Update candidates: py3-scrypt-0.9.4 -> py3-scrypt-0.9.4 +py3-passlib-1.9.3p0:py3-scrypt-0.9.4->0.9.4 (processing)(pretending) +py3-passlib-1.9.3p0->1.9.3p0 (processing)(pretending) +Update candidates: py3-platformdirs-4.9.6 -> py3-platformdirs-4.9.6 +py3-platformdirs-4.9.6->4.9.6 (processing)(pretending) +Update candidates: py3-pluggy-1.6.0p0 -> py3-pluggy-1.6.0p0 +py3-pluggy-1.6.0p0->1.6.0p0 (processing)(pretending) +Update candidates: py3-pygments-2.20.0 -> py3-pygments-2.20.0 +py3-pygments-2.20.0->2.20.0 (processing)(pretending) +Update candidates: py3-pyproject_api-1.10.0 -> py3-pyproject_api-1.10.0 +py3-pyproject_api-1.10.0->1.10.0 (processing)(pretending) +Update candidates: py3-python-discovery-1.2.1p0 -> py3-python-discovery-1.2.1p0 +py3-python-discovery-1.2.1p0->1.2.1p0 (processing)(pretending) +py3-python-discovery-1.2.1p0 (hashing)(pretending) +py3-python-discovery-1.2.1p0 (tieing)(pretending) +py3-python-discovery-1.2.1p0 (extracting)(pretending) +py3-python-discovery-1.2.1p0 (skipping)(pretending) +py3-python-discovery-1.2.1p0 (deleting)(pretending) +py3-python-discovery-1.2.1p0 (installing)(pretending) +Adding py3-python-discovery-1.2.1p0->1.2.1p0(pretending) +Update candidates: py3-requests-2.33.1 -> py3-requests-2.33.1 +py3-requests-2.33.1->2.33.1 (processing)(pretending) +Update candidates: py3-urllib3-1.26.20p0 -> py3-urllib3-1.26.20p0 +py3-requests-2.33.1:py3-urllib3-1.26.20p0->1.26.20p0 (processing)(pretending) +py3-requests-2.33.1->2.33.1 (processing)(pretending) +Update candidates: py3-responses-0.25.0p2 -> py3-responses-0.25.0p2 +py3-responses-0.25.0p2->0.25.0p2 (processing)(pretending) +Update candidates: py3-yaml-6.0.2p1 -> py3-yaml-6.0.2p1 +py3-responses-0.25.0p2:py3-yaml-6.0.2p1->6.0.2p1 (processing)(pretending) +py3-responses-0.25.0p2->0.25.0p2 (processing)(pretending) +Update candidates: py3-serial-3.5p0 -> py3-serial-3.5p0 +py3-serial-3.5p0->3.5p0 (processing)(pretending) +Update candidates: py3-test-9.0.2p0 -> py3-test-9.0.2p0 +py3-test-9.0.2p0->9.0.2p0 (processing)(pretending) +Update candidates: py3-test-cov-7.1.0 -> py3-test-cov-7.1.0 +py3-test-cov-7.1.0->7.1.0 (processing)(pretending) +Update candidates: py3-test-mock-3.15.1 -> py3-test-mock-3.15.1 +py3-test-mock-3.15.1->3.15.1 (processing)(pretending) +Update candidates: py3-test-xdist-3.8.0 -> py3-test-xdist-3.8.0 +py3-test-xdist-3.8.0->3.8.0 (processing)(pretending) +Update candidates: py3-tox-4.47.0 -> py3-tox-4.47.0 +py3-tox-4.47.0->4.47.0 (processing)(pretending) +Update candidates: py3-virtualenv-21.2.3 -> py3-virtualenv-21.2.3 +py3-tox-4.47.0:py3-virtualenv-21.2.3->21.2.3 (processing)(pretending) +py3-tox-4.47.0->4.47.0 (processing)(pretending) +Update candidates: qemu-ga-10.2.1 -> qemu-ga-10.2.1 +qemu-ga-10.2.1->10.2.1 (processing)(pretending) +Update candidates: sudo-1.9.17.2p1 -> sudo-1.9.17.2p1 +sudo-1.9.17.2p1->1.9.17.2p1 (processing)(pretending) +Update candidates: updatedb-0p0 -> updatedb-0p0 +updatedb-0p0->0p0 (processing)(pretending) +Merging manpages in /usr/local/man: /usr/local/man/man1/pcre2-config.1 /usr/local/man/man1/pcre2grep.1 /usr/local/man/man1/pcre2test.1 /usr/local/man/man3/pcre2.3 /usr/local/man/man3/pcre2_callout_enumerate.3 /usr/local/man/man3/pcre2_code_copy.3 /usr/local/man/man3/pcre2_code_copy_with_tables.3 /usr/local/man/man3/pcre2_code_free.3 /usr/local/man/man3/pcre2_compile.3 /usr/local/man/man3/pcre2_compile_context_copy.3 /usr/local/man/man3/pcre2_compile_context_create.3 /usr/local/man/man3/pcre2_compile_context_free.3 /usr/local/man/man3/pcre2_config.3 /usr/local/man/man3/pcre2_convert_context_copy.3 /usr/local/man/man3/pcre2_convert_context_create.3 /usr/local/man/man3/pcre2_convert_context_free.3 /usr/local/man/man3/pcre2_converted_pattern_free.3 /usr/local/man/man3/pcre2_dfa_match.3 /usr/local/man/man3/pcre2_general_context_copy.3 /usr/local/man/man3/pcre2_general_context_create.3 /usr/local/man/man3/pcre2_general_context_free.3 /usr/local/man/man3/pcre2_get_error_message.3 /usr/local/man/man3/pcre2_get_mark.3 /usr/local/man/man3/pcre2_get_match_data_heapframes_size.3 /usr/local/man/man3/pcre2_get_match_data_size.3 /usr/local/man/man3/pcre2_get_ovector_count.3 /usr/local/man/man3/pcre2_get_ovector_pointer.3 /usr/local/man/man3/pcre2_get_startchar.3 /usr/local/man/man3/pcre2_jit_compile.3 /usr/local/man/man3/pcre2_jit_free_unused_memory.3 /usr/local/man/man3/pcre2_jit_match.3 /usr/local/man/man3/pcre2_jit_stack_assign.3 /usr/local/man/man3/pcre2_jit_stack_create.3 /usr/local/man/man3/pcre2_jit_stack_free.3 /usr/local/man/man3/pcre2_maketables.3 /usr/local/man/man3/pcre2_maketables_free.3 /usr/local/man/man3/pcre2_match.3 /usr/local/man/man3/pcre2_match_context_copy.3 /usr/local/man/man3/pcre2_match_context_create.3 /usr/local/man/man3/pcre2_match_context_free.3 /usr/local/man/man3/pcre2_match_data_create.3 /usr/local/man/man3/pcre2_match_data_create_from_pattern.3 /usr/local/man/man3/pcre2_match_data_free.3 /usr/local/man/man3/pcre2_next_match.3 /usr/local/man/man3/pcre2_pattern_convert.3 /usr/local/man/man3/pcre2_pattern_info.3 /usr/local/man/man3/pcre2_serialize_decode.3 /usr/local/man/man3/pcre2_serialize_encode.3 /usr/local/man/man3/pcre2_serialize_free.3 /usr/local/man/man3/pcre2_serialize_get_number_of_codes.3 /usr/local/man/man3/pcre2_set_bsr.3 /usr/local/man/man3/pcre2_set_callout.3 /usr/local/man/man3/pcre2_set_character_tables.3 /usr/local/man/man3/pcre2_set_compile_extra_options.3 /usr/local/man/man3/pcre2_set_compile_recursion_guard.3 /usr/local/man/man3/pcre2_set_depth_limit.3 /usr/local/man/man3/pcre2_set_glob_escape.3 /usr/local/man/man3/pcre2_set_glob_separator.3 /usr/local/man/man3/pcre2_set_heap_limit.3 /usr/local/man/man3/pcre2_set_match_limit.3 /usr/local/man/man3/pcre2_set_max_pattern_compiled_length.3 /usr/local/man/man3/pcre2_set_max_pattern_length.3 /usr/local/man/man3/pcre2_set_max_varlookbehind.3 /usr/local/man/man3/pcre2_set_newline.3 /usr/local/man/man3/pcre2_set_offset_limit.3 /usr/local/man/man3/pcre2_set_optimize.3 /usr/local/man/man3/pcre2_set_parens_nest_limit.3 /usr/local/man/man3/pcre2_set_recursion_limit.3 /usr/local/man/man3/pcre2_set_recursion_memory_management.3 /usr/local/man/man3/pcre2_set_substitute_callout.3 /usr/local/man/man3/pcre2_set_substitute_case_callout.3 /usr/local/man/man3/pcre2_substitute.3 /usr/local/man/man3/pcre2_substring_copy_byname.3 /usr/local/man/man3/pcre2_substring_copy_bynumber.3 /usr/local/man/man3/pcre2_substring_free.3 /usr/local/man/man3/pcre2_substring_get_byname.3 /usr/local/man/man3/pcre2_substring_get_bynumber.3 /usr/local/man/man3/pcre2_substring_length_byname.3 /usr/local/man/man3/pcre2_substring_length_bynumber.3 /usr/local/man/man3/pcre2_substring_list_free.3 /usr/local/man/man3/pcre2_substring_list_get.3 /usr/local/man/man3/pcre2_substring_nametable_scan.3 /usr/local/man/man3/pcre2_substring_number_from_name.3 /usr/local/man/man3/pcre2api.3 /usr/local/man/man3/pcre2build.3 /usr/local/man/man3/pcre2callout.3 /usr/local/man/man3/pcre2compat.3 /usr/local/man/man3/pcre2convert.3 /usr/local/man/man3/pcre2demo.3 /usr/local/man/man3/pcre2jit.3 /usr/local/man/man3/pcre2limits.3 /usr/local/man/man3/pcre2matching.3 /usr/local/man/man3/pcre2partial.3 /usr/local/man/man3/pcre2pattern.3 /usr/local/man/man3/pcre2perform.3 /usr/local/man/man3/pcre2posix.3 /usr/local/man/man3/pcre2sample.3 /usr/local/man/man3/pcre2serialize.3 /usr/local/man/man3/pcre2syntax.3 /usr/local/man/man3/pcre2unicode.3 diff --git a/tests/fixtures/openbsd-vm/sudo_rcctl_ls_on_started_failed.txt b/tests/fixtures/openbsd-vm/sudo_rcctl_ls_on_started_failed.txt new file mode 100644 index 0000000..b2ffd59 --- /dev/null +++ b/tests/fixtures/openbsd-vm/sudo_rcctl_ls_on_started_failed.txt @@ -0,0 +1,35 @@ +check_quotas +cloudconfig +cloudfinal +cloudinit +cloudinitlocal +cron +dhcpleased +library_aslr +ntpd +pf +pflogd +qemu_ga +resolvd +slaacd +smtpd +sndiod +sshd +syslogd +--- +cron +dhcpleased +ntpd +pflogd +resolvd +slaacd +smtpd +sndiod +sshd +syslogd +--- +cloudconfig +cloudfinal +cloudinit +cloudinitlocal +qemu_ga diff --git a/tests/fixtures/openbsd-vm/sudo_syspatch_l.txt b/tests/fixtures/openbsd-vm/sudo_syspatch_l.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_drivers.py b/tests/test_drivers.py index 244d70f..9a2640e 100644 --- a/tests/test_drivers.py +++ b/tests/test_drivers.py @@ -224,3 +224,216 @@ class TestListeningSockets: (s["proto"], s["address"], s["port"]) for s in result["sockets"] } assert calls == [("fstat -n", True), (OpenBSDDriver.LISTENING_FALLBACK_COMMAND, False)] + + +class _Result: + def __init__(self, stdout: str = "", exit_code: int = 0, stderr: str = "") -> None: + self.stdout, self.exit_code, self.stderr = stdout, exit_code, stderr + + +def _channel(cls, answers: dict): + """A driver whose run_command answers from *answers*: ``command -> stdout`` + or ``command -> (stdout, exit_code)``; ``(command, True)`` keys answer only + privileged calls. Every call is recorded as ``(command, privileged)``.""" + driver = cls("host", "netork", "") + calls: list[tuple[str, bool]] = [] + + def run(command, *, privileged=False, timeout=60, stdin=None): + calls.append((command, privileged)) + answer = answers.get((command, privileged), answers.get(command, "")) + stdout, code = answer if isinstance(answer, tuple) else (answer, 0) + return _Result(stdout, code) + + driver.run_command = run # type: ignore[method-assign] + driver.calls = calls # type: ignore[attr-defined] + return driver + + +class TestPackages: + def test_freebsd_packages_with_their_repository(self): + driver = _channel( + FreeBSDDriver, + { + "pkg -N": "", + FreeBSDDriver.PKG_QUERY: _read("freebsd-vm", "pkg_query_n_v_R_sb_c.txt"), + }, + ) + packages = driver.get_packages() + assert {p["source"] for p in packages} >= {"FreeBSD-base", "FreeBSD-ports"} + + def test_freebsd_without_pkg_has_no_packages(self): + """A hand-installed classic system may never have bootstrapped pkg.""" + driver = _channel(FreeBSDDriver, {"pkg -N": ("pkg: pkg is not installed", 1)}) + assert driver.get_packages() == [] + assert driver.calls == [("pkg -N", False)] + + def test_openbsd_packages(self): + driver = _channel(OpenBSDDriver, {"pkg_info": _read("openbsd-vm", "pkg_info_full.txt")}) + assert any(p["name"] == "pcre2" for p in driver.get_packages()) + + @pytest.mark.parametrize( + ("cls", "install", "uninstall"), + [ + (FreeBSDDriver, "pkg install -y nginx", "pkg delete -y nginx"), + (OpenBSDDriver, "pkg_add -I nginx", "pkg_delete nginx"), + ], + ) + def test_install_and_uninstall_as_root(self, cls, install, uninstall): + driver = _channel(cls, {}) + driver.install_package("nginx") + driver.uninstall_package("nginx") + assert driver.calls == [(install, True), (uninstall, True)] + + def test_a_version_is_part_of_the_name(self): + driver = _channel(FreeBSDDriver, {}) + driver.install_package("nginx", "1.28.0") + assert driver.calls == [("pkg install -y nginx-1.28.0", True)] + + def test_a_failed_install_raises(self): + driver = _channel(OpenBSDDriver, {("pkg_add -I nope", True): ("Can't find nope", 1)}) + with pytest.raises(RuntimeError, match="nope"): + driver.install_package("nope") + + @pytest.mark.parametrize("name", ["", "nginx; reboot", "-f", "a b"]) + def test_a_name_that_is_not_a_package_is_refused(self, name): + driver = _channel(FreeBSDDriver, {}) + with pytest.raises(ValueError): + driver.install_package(name) + assert driver.calls == [] + + +class TestAvailableUpdates: + def test_freebsd_marks_what_vuxml_knows(self): + driver = _channel( + FreeBSDDriver, + { + "pkg -N": "", + ("pkg upgrade -n", True): _read("freebsd-vm", "sudo_pkg_upgrade_n_latest.txt"), + ("pkg audit -Fq", True): ("python312-3.12.14\nexpat-2.8.2\n", 1), + "pkg repos -l": _read("freebsd-vm", "pkg_repos_l.txt"), + }, + ) + updates = {u["name"]: u for u in driver.get_available_updates()} + assert len(updates) == 10 + assert updates["expat"]["security"] is True + assert updates["pkg"]["security"] is False + assert updates["pkg"]["origin"] == "FreeBSD-ports" + assert "base-system" not in updates # pkgbase: the base system is packages + + def test_freebsd_without_an_audit_cannot_tell(self): + driver = _channel( + FreeBSDDriver, + { + "pkg -N": "", + ("pkg upgrade -n", True): _read("freebsd-vm", "sudo_pkg_upgrade_n_latest.txt"), + ("pkg audit -Fq", True): ("pkg: cannot fetch", 3), + "pkg repos -l": "FreeBSD-ports\nFreeBSD-base\n", + }, + ) + assert {u["security"] for u in driver.get_available_updates()} == {None} + + def test_classic_freebsd_reports_fetched_base_updates_as_one_entry(self): + driver = _channel( + FreeBSDDriver, + { + "pkg -N": ("pkg: pkg is not installed", 1), + ("freebsd-update --not-running-from-cron updatesready", True): ("", 0), + "freebsd-version -u": "15.1-RELEASE", + }, + ) + assert driver.get_available_updates() == [ + { + "name": "base-system", + "current_version": "15.1-RELEASE", + "new_version": "fetched by freebsd-update", + "origin": "freebsd-update", + "security": None, + } + ] + + def test_classic_freebsd_without_fetched_updates(self): + driver = _channel( + FreeBSDDriver, + { + "pkg -N": ("", 1), + ("freebsd-update --not-running-from-cron updatesready", True): ("", 2), + }, + ) + assert driver.get_available_updates() == [] + + def test_openbsd_packages_and_syspatches(self): + driver = _channel( + OpenBSDDriver, + { + ("pkg_add -u -n -v", True): _read("openbsd-vm", "sudo_pkg_add_u_n_v.txt"), + ("syspatch -c", True): _read("openbsd-vm", "syspatch_c.txt"), + ("syspatch -l", True): "", + "uname -r": "7.9", + }, + ) + updates = {u["name"]: u for u in driver.get_available_updates()} + assert updates["pcre2"]["new_version"] == "10.48" + assert updates["pcre2"]["security"] is None + base = updates["base-system"] + assert base["current_version"] == "7.9" + assert base["new_version"].startswith("34 patches: 001_xserver") + assert base["origin"] == "syspatch" + assert base["security"] is None + + def test_openbsd_fully_patched(self): + driver = _channel( + OpenBSDDriver, {("pkg_add -u -n -v", True): "", ("syspatch -c", True): ""} + ) + assert driver.get_available_updates() == [] + + +class TestServices: + def test_freebsd_reads_the_status_as_root(self): + status = _read("freebsd-vm", "sudo_service_status_loop.txt") + driver = _channel(FreeBSDDriver, {(FreeBSDDriver.SERVICE_STATUS_COMMAND, True): status}) + services = {s["name"]: s for s in driver.get_services()} + assert services["cron"]["running"] is True + + def test_freebsd_without_root_reads_what_it_can(self): + status = _read("freebsd-vm", "service_status_loop.txt") + driver = _channel( + FreeBSDDriver, + { + (FreeBSDDriver.SERVICE_STATUS_COMMAND, True): ("sudo: a password is required", 1), + (FreeBSDDriver.SERVICE_STATUS_COMMAND, False): status, + }, + ) + assert {s["name"] for s in driver.get_services()} >= {"sshd", "cron"} + + def test_openbsd(self): + driver = _channel( + OpenBSDDriver, + {OpenBSDDriver.SERVICE_STATUS_COMMAND: _read("openbsd-vm", "rcctl_check_loop.txt")}, + ) + assert {s["name"]: s["running"] for s in driver.get_services()}["smtpd"] is True + + @pytest.mark.parametrize( + ("cls", "command"), + [(FreeBSDDriver, "service sshd restart"), (OpenBSDDriver, "rcctl restart sshd")], + ) + def test_manage_as_root(self, cls, command): + driver = _channel(cls, {}) + assert driver.manage_service("sshd", "restart") == {"success": True, "output": ""} + assert driver.calls == [(command, True)] + + def test_a_failed_action_says_so(self): + driver = _channel( + OpenBSDDriver, {("rcctl start nope", True): ("rcctl: service nope does not exist", 2)} + ) + result = driver.manage_service("nope", "start") + assert result["success"] is False + assert "does not exist" in result["output"] + + @pytest.mark.parametrize( + ("name", "action"), [("sshd", "reload"), ("sshd;reboot", "start"), ("", "start")] + ) + def test_refused_before_anything_is_sent(self, name, action): + driver = _channel(FreeBSDDriver, {}) + with pytest.raises(ValueError): + driver.manage_service(name, action) + assert driver.calls == [] diff --git a/tests/test_parse.py b/tests/test_parse.py index 5e3eaab..ec20582 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -269,3 +269,89 @@ class TestListeningSockets: def test_a_socket_held_by_two_processes_is_listed_once(self): text = "www nginx 901 6 tcp4 *:80 *:*\nwww nginx 900 6 tcp4 *:80 *:*\n" assert [(s["pid"]) for s in parse.sockstat(text)] == [901] + + +class TestPackages: + def test_freebsd_pkg_query_names_the_repository(self): + packages = parse.pkg_query(fixture("freebsd-vm", "pkg_query_n_v_R_sb_c.txt")) + acct = next(p for p in packages if p["name"] == "FreeBSD-acct") + assert acct == { + "name": "FreeBSD-acct", + "version": "15.1p4", + "installed": True, + "description": "System resource accounting", + "size": 118976, + "source": "FreeBSD-base", + } + assert any(p["source"] == "FreeBSD-ports" for p in packages) + + @pytest.mark.parametrize( + ("full", "name", "version"), + [ + ("pcre2-10.44", "pcre2", "10.44"), + ("bash-completion-2.17.0", "bash-completion", "2.17.0"), + ("py3-tzdata-2026.3", "py3-tzdata", "2026.3"), + ("argon2-20190702p0", "argon2", "20190702p0"), + ("gettext-runtime-1.0", "gettext-runtime", "1.0"), + ], + ) + def test_openbsd_package_names(self, full, name, version): + assert parse.split_package(full) == (name, version) + + def test_openbsd_pkg_info(self): + packages = parse.pkg_info(fixture("openbsd-vm", "pkg_info_full.txt")) + assert packages[1] == { + "name": "bash", + "version": "5.3.9", + "installed": True, + "description": "GNU Bourne Again Shell", + "size": 0, + "source": "pkg_add", + } + assert any(p["name"] == "bash-completion" for p in packages) + + +class TestUpdates: + def test_freebsd_pkg_upgrade_dry_run(self): + updates = parse.pkg_upgrades(fixture("freebsd-vm", "sudo_pkg_upgrade_n_latest.txt")) + assert len(updates) == 10 + assert updates[0] == { + "name": "expat", + "current_version": "2.8.2", + "new_version": "2.8.5", + "origin": "FreeBSD-ports", + } + + def test_freebsd_pkg_audit_names_the_vulnerable_packages(self): + text = fixture("freebsd-vm", "sudo_pkg_audit_Fq.txt").replace("rc=1\n", "") + assert parse.pkg_audit(text) == {"python312", "expat"} + + def test_openbsd_update_candidates_that_change(self): + updates = parse.pkg_add_candidates(fixture("openbsd-vm", "sudo_pkg_add_u_n_v.txt")) + assert updates == [ + {"name": "pcre2", "current_version": "10.44", "new_version": "10.48"}, + {"name": "py3-tzdata", "current_version": "2026.3", "new_version": "2026.4"}, + ] + + def test_openbsd_syspatch(self): + patches = parse.syspatch(fixture("openbsd-vm", "syspatch_c.txt")) + assert len(patches) == 34 + assert patches[0] == "001_xserver" + + +class TestServices: + def test_freebsd_status_as_root(self): + services = { + s["name"]: s + for s in parse.service_status(fixture("freebsd-vm", "sudo_service_status_loop.txt")) + } + assert services["sshd"] == {"name": "sshd", "running": True, "enabled": True, "pid": 1282} + assert services["qemu-guest-agent"]["running"] is False + assert services["hostid"]["running"] is False # a one-shot script without a status + + def test_openbsd_rcctl_check(self): + services = { + s["name"]: s for s in parse.rcctl_check(fixture("openbsd-vm", "rcctl_check_loop.txt")) + } + assert services["sshd"] == {"name": "sshd", "running": True, "enabled": True, "pid": 0} + assert services["check_quotas"]["running"] is False