# ChangeLog

# ?

- Improve path lookup.

# 0.20.0

- Port [`Force
  Sandboxing`](https://man.exherbo.org/syd.7.html#Force_Sandboxing) to
  the Kernel Crypto API (`AF_ALG`) new in Syd-3.51.0.
- Track `trace/allow_unsafe_*` tips from Syd logs and emit as commented
  options in generated profiles.
- Print actionable guidance on `SIGSYS` exit.
- Generalize profiles with `SYD_*` environment variable substitution
  (`SYD_TTY`, `SYD_HOME`, `SYD_PWD`, `SYD_UID`, `SYD_GID`).
- Add support to generate _landlock_(7) rules for use with [`Lock
  Sandboxing`](https://man.exherbo.org/syd.7.html#Lock_Sandboxing).
- Add initial test suite. Use `make check` to run. Requires _perl_(1),
  _prove_(1) and a C compiler which supports C99.
- Upgrade [`simple-dns`](https://crates.io/crates/simple-dns)
  crate from `0.7` to `0.11`.
- Upgrade [`dns-lookup`](https://crates.io/crates/dns-lookup)
  crate from `2.0` to `3.0`.
- Upgrade [`data-encoding`](https://crates.io/crates/data-encoding)
  crate from `2.9` to `2.10`.

# 0.19.0

- Add support for `notify` category new in Syd-3.50.0.

# 0.18.0

- Use [`simple-dns`](https://crates.io/crates/simple-dns) to resolve DNS
  by default. Add `system-dns` option to fallback to
  [`dns-lookup`](https://crates.io/crates/dns-lookup) which uses libc.
  The features are mutually exclusive so to specify `system-dns`
  feature, the user should also pass `--no-default-features`.

# 0.17.0

- Improve _ioctl_(2) parsing.
- Add support for Filesystem sandboxing which is new in Syd-3.47.0.
- Improve I/O to handle `EAGAIN` and `EINTR` gracefully.

# 0.16.1

- Upgrade [`crc`](https://crates.io/crates/tempfile) crate from `3.3` to
  `3.4`.
- Upgrade [`tempfile`](https://crates.io/crates/tempfile) crate from
  version `3.22` to `3.23`.

# 0.16.0

- Add support for the new category and category sets in Syd-3.39.0.
- Upgrade [`tempfile`](https://crates.io/crates/tempfile) crate from
  version `3.21` to `3.22`.
- Switch from [`serde`](https://crates.io/crates/serde) crate to
  [`serde_core`](https://crates.io/crates/serde-core) crate to
  reduce compile times.

# 0.15.0

- Update device creation categories to include the new `mkbdev`, and
  `mkcdev` in Syd-3.38.0.
- Warn about JSON parsing errors if the environment variable
  `PANDORA_DEBUG` is set.
- Add support for [aliases](https://man.exherbo.org/syd.2.html#ALIASES)
  new in Syd-3.38.0.
- Add support for writing rules with _ioctl_(2) request names.
  This allows for portable, readable profiles and requires
  Syd-3.38.0 or later.

# 0.14.4

- Upgrade `console` crate from `0.15` to `0.16`.
- Upgrade `indicatif` crate from `0.17` to `0.18`.
- Upgrade `md5` crate from `0.7` to `0.8`.
- Replace `hex-conservative` crate with the `data-encoding` crate. The
  former decided to remove the hex-encoding in the latest major version
  in an effort to stabilize the crate therefore we can no longer use it.
  Moreover, the latter allows us to do permissive hex decoding when
  parsing is done case-insensitively.

# 0.14.3

- Avoid using `codegen-units=1` for release builds.
- Use `thin` LTO rather than `fat` LTO for release builds.

# 0.14.2

- Upgrade `tempfile` crate from `3.13` to `3.20`.
- Upgrade `num_cpus` crate from `1.16` to `1.17`.
- Upgrade `btoi` crate from `0.4` to `0.5`.
- Upgrade `crc` crate from `3.2` to `3.3`.
- Upgrade `nix` crate from `0.29` to `0.30`.
- Fix build issue on aarch64 (thx omni!)

# 0.14.1

- Add support for the new `rmdir` sandbox category in Syd-3.33.0.
- Set the environment variable `SYD_QUIET_TTY` to make
  Syd print logs in line-oriented JSON format. Previously,
  this was implied by the option `log/verbose:0` in the
  `trace` profile which is no longer the case since
  Syd-3.32.4.

# 0.14.0

- Sort _ioctl_(2) requests before printing them to the profile.
- Add support to turn UNIX socket paths into globs.
- Add support to confine `!unnamed` dummy path for UNIX unnamed sockets
  for the `net/bind` and `net/connect` sandboxing categories.
- Add support for the `@` prefix for UNIX abstract sockets which is new
  in Syd-3.32.0.

# 0.13.0

- Rewrite option parsing to use the `lexopt` crate rather than `argv`
  and `getargs` crates. Make option parsing [POSIXly
  correct](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02).
- Add support for new sandbox categories in Syd-3.31.0.

# 0.12.1

- Add support to learn _ioctl_(2) requests.
- Stop using the `dns-lookup` crate and call libc _getnameinfo_(3)
  directly.

# 0.12.0

- Fix passing extra options to Syd.
- Fix static linking.
- Stop using the `built` crate which depends on `libgit2-sys`.
- Replace the `clap` crate with `getargs` crate for option parsing.
- Send the signal `SIGKILL` on timeout rather than `SIGTERM`.
- Avoid locking the sandbox in generated profiles.

# 0.12.0-beta.3

- Fix _syslog_(2) handling to do non-destructive reads.
- Upgrade `hex-conservative` crate dependency from `0.2` to `0.3`.

# 0.12.0-beta.2

- Fix _syslog_(2) handling.

# 0.12.0-beta.1

- Replace `parking_lot` crate with stdlib locks.
- The special input argument `syslog` may now be passed to
  `pandora inspect --input` to read access violations from
  _syslog_(2). This allows easy access to the _syslog_(2)
  emulation new in Syd-3.30.0.
- Do checksum calculation in parallel.
- Support choosing alternative algorithms to use for executable
  verification with the new  `-h` option. The default remains the most
  secure SHA3-512.
- Be permissive in JSON parsing: Lines with invalid JSON are now skipped
  and pandora strips all characters until the first `{` from input lines
  before attempting to parse them as JSON.
- Add support for [`Chdir
  Sandboxing`](http://man.exherbo.org/syd.7.html#Chdir_Sandboxing),
  [`Readdir
  Sandboxing`](http://man.exherbo.org/syd.7.html#Readdir_Sandboxing),
  [`Rename
  Sandboxing`](http://man.exherbo.org/syd.7.html#Create/Delete/Truncate/Rename/Link_Sandboxing),
  and [`Link
  Sandboxing`](http://man.exherbo.org/syd.7.html#Create/Delete/Truncate/Rename/Link_Sandboxing)
  new in Syd-3.30.0.

# 0.11.1

- Stop using the `pandora` profile which is a no-op with the `trace`
  profile already applied.

# 0.11.0

- Change project license from `GPL-3.0-or-later` to `GPL-3.0`.
- Add support for Create/Delete, Node, Attr, Chown/Chgrp, Tmpfile, and
  Net/Send sandboxing types new in Syd-3.28.0.
- Print progress during checksum generation.
- Sync with logging changes in Syd-3.28.0.
- Remove humantime and time crates from dependencies.
- Replace const-hex crate with hex-conservative crate.

# 0.10.3

- Fix panic when allowlisting UNIX abstract/domain sockets.

# 0.10.2

- Perform reverse DNS lookup on IPs and add hostnames as comments
  to the auto-generated profile.
- Add efficient handling of `/proc/pid/ns/` paths.
- Implement grouping of sandboxing rules together by sandboxing type.

# 0.10.1

- Make various formatting improvements to the auto-generated profile.
- Reduce --limit default from 7 to 3 for practicality.
- Enumerate dynamic libraries for Exec sandboxing.

# 0.10.0

- Add support for calculating the checksums of dynamically linked
  libraries.
- Add support for Ioctl sandboxing of Syd-3.23.0
- Replace hex crate with const-hex crate.

# 0.9.0

- Add support for writing Integrity Force rules. The user should
  turn force sandboxing on manually for this to work, e.g:
  `pandora profile -msandbox/force:on -- true`

## 0.8.4

- Improve documentation.

## 0.8.3

- Add `--timeout` option to `profile` subcommand to limit process
  runtime with a duration. The option takes human-formatted time as
  argument.
- Block SIGINT when profiling so interrupting the underlying process
  does not interrupt profile generation.

## 0.8.2..

See git history
