btrbk-0.32.7

  * MIGRATION
    - Update ssh_filter_btrbk.sh on remote hosts.
    - All users using ssh_filter_btrbk.sh in their authorized_keys
      configurations should upgrade immediately.
  * This release fixes a critical security vulnerability
    (CVE-2026-62943) in ssh_filter_btrbk.sh.
    Specially crafted commands can bypass filter checks and execute
    arbitrary commands. Applies to remote hosts using
    ssh_filter_btrbk.sh in authorized_keys for command filtering.
    Thanks to @machin0r for responsible disclosure.
  * Minor bugfixes, spelling and documentation improvements.

btrbk-0.32.6

  * Fix backup of unrelated (by parent_uuid) snapshots (close #339).
  * Remove echo -e for portability (close #506).
  * Support btrfs send protocol v2 (send_protocol and
    send_compressed_data config options).
  * Add bzip3 support.
  * Convert ssh_filter_btrbk.sh to POSIX sh, and harden it.
  * Slight change in ssh_filter_btrbk.sh logging output.
  * Minor bugfixes, stability and documentation improvements.

btrbk-0.32.5

  * Correct handling of zero-size raw info file (close #491).

btrbk-0.32.4

  * Fix regression: wrong deprecation warnings in some cases.

btrbk-0.32.3

  * Fix deletion of many subvolumes at once (close #476).
  * Allow disabling ssh_identity and ssh_user options.
  * Minor bugfixes and documentation improvements.

btrbk-0.32.2

  * Fix regression: archive on missing target directories.
  * Fix action "config print".
  * Print version and help message to stdout (close #452).
  * Check results of filesystem usage (close #469).
  * Add "compat ignore_receive_errors" option (close #383).
  * Support multiple gpg recipients (close #471).
  * Fix changelog: remove "compat missing_otime" item in v0.32.1.
  * Fix changelog: correct "warn_unknown_targets" item in v0.31.3.
  * Minor bugfixes and framework improvements.

btrbk-0.32.1

  * Fix regression: correctly read mountinfo (close #445).
  * Fix regression: filter paths for "lsbtr" (action "ls").
  * Add backend btrfs-progs-doas (close #444).
  * Allow directory traversal for local command line arguments.
  * Display all source subvolumes in "usage" action.
  * Handle errors from btrfs filesystem usage.

btrbk-0.32.0

  * MIGRATION
    - If timestamp_format is not configured, explicitely set
      "timestamp_format short" to revert old behavior.
    - Update ssh_filter_btrbk.sh on remote hosts.
  * Change default for timestamp_format to "long".
  * Optional "volume" config section.
  * Use "volume" section only for grouping and relative paths.
  * Allow absolute path for "subvolume" and "snapshot_dir"
    (close #407, #121).
  * Support subvolume names with UTF-8 characters (close #392, #213,
    #120). Add "safe_commands" option for paranoid people.
  * Add "incremental_prefs" configuration option (close #387).
  * Change incremental prefs policy, giving snapshots created by btrbk
    higher preference than the global ones resolved by parent-uuid.
  * Change "incremental_clones" option to boolean.
  * Drop support of deprecated raw file format (btrbk < 0.26.0).
  * Drop support of deprecated "-r, --resume-only" cmdline option.
  * Fix ambiguous naming in --format=raw output of "list" actions.
  * Accept quoted values in config.
  * Use single quotes for raw table output.

btrbk-0.31.3

  * Add "warn_unknown_targets" configuration option (close #393).
  * Add -1,--single-column command-line option for listing actions.
  * Allow relative path command line argument for all actions.
  * Add support for zstd adaptive compression (close #397).
  * Add contrib/tools/btrbk_restore_raw.py (close #401).
  * Minor bugfixes and framework improvements.

btrbk-0.31.2

  * MIGRATION
    - Update ssh_filter_btrbk.sh on remote hosts.
  * ssh_filter_btrbk.sh: Fix security vulnerability.
    Specialy crafted commands may be executed without being propely
    checked. Applies to remote hosts filtering ssh commands using
    ssh_filter_btrbk.sh in authorized_keys.
  * Warn if no subvolume defined in config (close #378).

btrbk-0.31.1

  * Bugfix: duplicate snapshot location check (close #360).
  * Bugfix: action "list all" (close #367).
  * btrbk-mail: optionally prefix command output lines.

btrbk-0.31.0

  * Add action "extents [diff]": print accurate disk space usage based
    on block regions (extent data, FIEMAP ioctl).
  * Improve action "list" and "stats" table output (close #334).
  * Add subcommand "list all", make default for "list" action.
  * Change semantics on output of action "list": show only btrbk
    snapshots/backups (close #333).
  * Print human readable units in action "diff" (close #345).
  * Allow custom table format definitions from command line.
  * Add Bash completion (close #343).
  * Add support for zstd compression (close #358).
  * Bugfix: fs_path fallback for action "origin" and logging.
  * Bugfix: makefile bin-links race (close #341).

btrbk-0.30.0

  * MIGRATION
    - In your scripts (e.g. cron jobs, systemd units), replace
      "/usr/sbin/btrbk" with "/usr/bin/btrbk".
  * Install to "/usr/bin" instead of "/usr/sbin".
  * Support IPv6 addresses (close #332).
  * Add "compat busybox" configuration option (close #327).
  * Create "lsbtr" symlink (alias for "btrbk ls").
  * Improve action "ls" (allow url, bugfixes).
  * Add "backend_local_user" configuration option.
  * btrbk-mail: add more elaborated email and rsync options.
  * Minor bugfixes and framework improvements.

btrbk-0.29.1

  * Allow multiple path arguments for action "ls".
  * Change default output to format=short for action "ls".
  * ssh_filter_btrbk.sh: exclude "btrfs subvolume show|list" from
    restrict-path (close #309).
  * Bugfix: fix filter statement match on wildcards (close #311).
  * Fix regression: print ssh errors only if needed.

btrbk-0.29.0

  * MIGRATION
    - If stream_buffer or rate_limit is configured, please install
      "mbuffer" (version >= 20180505). Note that mbuffer is only
      required on remote hosts if stream_buffer_remote or
      rate_limit_remote is set.
    - In order to mimic old behavior, replace rate_limit with
      rate_limit_remote, and read btrbk.conf(5).
    - If you are using table output other than --format=raw in your
      scripts, note that the column headings changed from pretty
      two-line to (uppercase) one-line format. Either add --pretty
      option to mimic old behavior, or adapt your scripts.
  * Dropped run-time dependency on "pv" (in favor of "mbuffer").
  * Combined stream_buffer and rate_limit: for rate_limit, use
    "mbuffer" (on local host) instead of "pv" (on source host).
  * Add stream_buffer_remote and rate_limit_remote options.
  * Use "mbuffer" instead of "pv" for --progress display.
  * Add stream_buffer functionality for raw targets.
  * Add action "ls": list all btrfs subvolumes below given path.
  * Change table output: print single-line, uppercase headings.
  * ssh_filter_btrbk.sh: whitelist mkdir if -t,--target option is set,
    used by "btrbk archive" action (close #297).
  * Bugfix: handle subvolumes with special characters (close #288).
  * Bugfix: don't display "<no_action>" in backup summary if volume is
    skipped by --exclude or noauto (close #291).
  * Bugfix: systemd: Use WantedBy=timers.target instead of
    WantedBy=multi-user.target in btrbk.timer (close #293).

btrbk-0.28.3

  * Bugfix: return exitcode=10 if action skipped by stray subvolumes
    (close: #285).
  * Bugfix: correctly handle root subvolumes having uuid.
  * Bugfix: fix mount point resolving.

btrbk-0.28.2

  * Fix regression: crash if raw target dir is empty (close  #281).
  * Bugfix: honor incremental_resolve on targets: resolve from
    mountpoint instead of directory.
  * Bugfix: handle directories named "0" correctly.

btrbk-0.28.1

  * Fix regression: crash if deep parent/child relations exceed
    depth=100 (close #279).
  * Remove pre-generated man pages, requires "asciidoctor" for builds.

btrbk-0.28.0

  * MIGRATION
    - Replace "ssh_port" options with "ssh://hostname[:port]" notation
      on "volume" or "target" declarations.
    - Check filter statements in your scripts ("btrbk run <filter>"),
      especially when using groups having the same name as subvolumes.
  * Fix table format "resolved" (btrbk list snapshots|backups).
  * Add btrbk-verify: tool for automated backup integrity check based
    on rsync (close #256).
  * Use "ssh://hostname[:port]" notation instead of ambiguous
    "ssh_port" option (now deprecated).
  * Bugfix: correctly handle multiple volume sections with same host,
    but distinct port numbers (virtual machines setups, close #233).
  * Remove selected rows ("*host", "*port") from table output if all
    values are empty.
  * Consider all parent/child relations (close #255).
  * Disallow unrelated parents for btrfs-send if incremental=strict.
  * Add clone sources to btrfs-send if necessary.
  * Add "incremental_resolve" configuration option.
  * Add "incremental_clones" configuration option.
  * Add "noauto" configuration option.
  * Add "--exclude" command line option.
  * Make target_type optional, defaults to "send-receive".
  * Use more sophisticated filter arguments.
  * Allow whitespace separated "group" option.

btrbk-0.27.2

  * Bump dependency >= btrfs-progs-4.12 (as of btrbk-0.27.0).
  * Trigger autofs mount while resolving mountpoints (close #259).
  * Bugfix: fix scheduler when overriding "target_preserve_min" in
    combination with global "target" section.

btrbk-0.27.1

  * MIGRATION
    - Update ssh_filter_btrbk.sh on remote hosts if using
      backend=btrfs-progs-sudo.
  * Bugfix (regression): call "sudo -n readlink" for
    backend=btrfs-progs-sudo (close #257).
  * Bugfix (regression): fix failing "config print" command.
  * Don't print title and blank lines for --format=raw, syslog and
    transaction log.

btrbk-0.27.0

  * MIGRATION
    - Run "btrbk prune --dry-run --print-schedule" and check if any
      snapshots/backups would get deleted [1] [2]. If you want to
      forcibly preserve a snapshot/backup forever, rename it (btrbk
      ignores subvolumes with unknown naming scheme), e.g.:
      "mv mysubvol.YYYYMMDD mysubvol.YYYYMMDD.keep_forever"
    - Update ssh_filter_btrbk.sh on remote hosts (btrbk always calls
      "readlink" and "cat /proc/self/mountinfo").
  * Add "preserve_hour_of_day" configuration option (close #202).
  * Allow backup of filesystem root using "subvolume ." (close #240).
  * Add "-S" command line option (shortcut for --print-schedule).
  * Bugfix: correct scheduling of "first weekly backup in month/year"
    (close #217) [1] [2].
  * Bugfix: add "btrfs filesystem usage" backend mapping (close #222).
  * Bugfix: do not fail (exitcode=10) if targets are not accessible on
    "btrfs snapshot --preserve".
  * Bugfix: if "incremental no" is configured on target, do not keep
    latest common snapshot.
  * Enhance internal data structures:
    - Allow snapshot_dir to be a mountpoint.
    - Search complete target tree for correlated subvolumes.
    - Include snapshots from all mountpoints as candidates (disabled
      due to uptream bug: github.com/kdave/btrfs-progs/issues/96).
    - Read /proc/self/mountinfo instead of /proc/self/mounts.
    - Always read /proc/self/mountinfo.
    - Resolve realpath using readlink(1).
  * Fallback to "asciidoctor" for manpage generation (close #219).

      [1] https://github.com/digint/btrbk/issues/217
      [2] https://github.com/digint/btrbk/commit/719fb5f

btrbk-0.26.1

  * Add "archive_exclude" configuration option.
  * Add warning on redefined configuration option.
  * Bugfix: fix parsing of "openssl_iv_size" configuration option.
  * Bugfix: fix filter statement matching for volume=/ (close #209).

btrbk-0.26.0

  * MIGRATION
    - If you are using raw targets, make sure to run the
      "raw_suffix2sidecar" utility in each target directory.
  * Support for btrfs-progs v4.13.2: adapt parsing of "btrfs sub list"
    output (close #192).
  * Add "resume" command, replacement for "-r, --resume-only" command
    line option (which is now deprecated).
  * Add "snapshot" command (close #150).
  * Add "prune" command.
  * Add "--preserve-snapshots" and "--preserve-backups" options.
  * Add "--wipe" command line option (close #173).
  * Change raw backup format (sidecar file instead of uuid in file).
  * Honor target_preserve for raw targets (delete raw targets).
  * Add symmetric encryption for raw targets (close #157).
  * Add "{snapshot,target,archive}_qgroup_destroy" configuration
    options (close #49, #189).
  * Do not run in "perl taint mode" by default: remove "perl -T" in
    hashbang; hardcode $PATH only if taint mode is enabled.
  * Remove "duration" column from transaction_log/transaction_syslog.
  * Resolve ancestors (recursive on parent_uuid chain) when searching
    for latest common subvolume.
  * Generate man pages from asciidoc (remove raw groff sources).
  * Bugfix: ssh_filter_btrbk: accept mbuffer command (stream_buffer).
  * Bugfix: print correct (end-)time in transaction_log.
  * Bugfix: check path when expanding wildcards (close #181).
  * Bugfix: never show failed deletes in summary (close #183).

btrbk-0.25.1

  * Support for btrfs-progs v4.12: fix parsing of "btrfs sub show"
    output, which now prints relative paths (close #171).
  * Add "stream_buffer" configuration option (close #154).
  * Bugfix: accept "no" for "transaction_log", "transaction_syslog"
    and "lockfile" configuration options.
  * Show "up-to-date" status for backups in "stats" command.
  * Show "correlated" status instead of "orphaned" in "stats" command.
  * Check source subvolumes for readonly and received_uuid flags, and
    abort if one of them is set.

btrbk-0.25.0

  * MIGRATION
    - If you call ssh_filter_btrbk.sh with "--sudo" option, make sure
      to set "backend btrfs-progs-sudo" in btrbk.conf for this host.
    - If "rate_limit" is enabled, update ssh_filter_btrbk.sh on remote
      source hosts, and make sure the "pv" command is available there.
  * Allow converting backup disks to source disks (close #114).
  * Add "backend btrfs-progs-sudo" configuration option (close #115).
  * Show aggregate "size" and "used" for "usage" action (close #119).
  * Add "raw_target_split" configuration option (close #125).
  * Allow trailing comments in btrbk.conf (close #129).
  * Bugfix: rate limiting must be done after compression (close #134).
  * raw_target_encrypt: Always set "gpg --no-random-seed-file":
    prevents creation of "~/.gnupg/random_seed" with slight perfomance
    penalty.

btrbk-0.24.0

  * MIGRATION
    - update ssh_filter_btrbk.sh on remote hosts if "stream_compress"
      is enabled. Also add "--compress" option to ssh_filter_btrbk.sh
      invocation if "stream_compress" is enabled.
  * Add "stream_compress" configuration option.
  * Perform extra metadata check on target subvolume after "btrfs
    receive" (adds an additional call to "btrfs subvolume show").
  * Bugfix: Replace "realpath" with "readlink" in ssh_filter_btrbk.sh
  * Add "raw_target_block_size" configuration option (close #105).
  * Add "backend" configuration option (experimental).
  * Bugfix: fix "list latest" with no snapshots (close #111).
  * Support for btrfs-progs v4.8.3: fix parsing of "btrfs sub show"
    output, which has changed for toplevel subvolume.

btrbk-0.23.3

  * Replace "realpath -e" with "readlink -e" for mountpoint discovery
    (close #92).
  * Dynamically set BINDIR in btrbk.service by Makefile.
  * Add ChangeLog to DOCDIR in Makefile.

btrbk-0.23.2

  * Added "lockfile" configuration option and --lockfile command line
    option (close: #81).
  * Bugfix: raw targets: correctly handle multiple backups in same
    target directory (close: #87).
  * Use relative instead of absolute binary calls in btrbk-mail.

btrbk-0.23.1

  * Bugfix: set correct parent section when propagating targets
    (close: #85).
  * Add syslog output of transaction log (close #82).
  * Do not print headers to transaction log anymore.
  * Explain "orphaned" status in "stats" command, and suppress it on
    "list backups" command (close: #76).

btrbk-0.23.0

  * INCOMPATIBLE CONFIGURATION:
    * Please read "doc/upgrade_to_v0.23.0.md" for details on updating
      the configuration file (/etc/btrbk/btrbk.conf).
    * Dropped "btrfs_progs_compat" option. Need btrfs-progs >= v3.18.
    * Removed "resume_missing" configuration option.
  * Create backups only if needed to satisfy retention policy.
  * Preserve FIRST backup of hour/day/week/month instead of LAST.
  * Replaced "{snapshot,target}_preserve_{daily,weekly,monthly}"
    configuration options with "{snapshot,target}_preserve_min" and
    "{snapshot,target}_preserve NNh NNd NNw NNm NNy" options.
  * Added hourly/yearly retention policies (close: #36, #69).
  * Allow regular directories for send-receive targets (close: #77).
  * Allow wildcards in subvolume section (close: #71).
  * Propagate targets defined in "volume" or "root" context to all
    "subvolume" sections (close: #78).
  * Added "archive" command (close: #79).
  * Changed output format of "origin" command, add table formats.
  * Added configuration option "rate_limit" (close: #72).
  * Added new timestamp_format "long-iso", having a timezone postfix.
  * Added "--print-schedule" command line option.
  * Detect interrupted transfers of raw targets (close: #75).
  * Always read "readonly" flag (additional call to btrfs-progs).
  * Warn on receive targets at unexpected location (instead of abort).
  * On incremental send/receive, use all snapshots sharing same
    parent_uuid as candidates for "-p <parent>" instead of only older
    snapshots. As last resort, use subvolumes in snapshot_dir matching
    btrbk file name scheme as candidates (which allows incremental
    backups after the parent vanished, e.g. after backup restore).
  * Use perl built-in Time::Local instead of Date::Calc.
  * Improvements of internal data structures.

btrbk-0.22.2

  * Bugfix: fix checks on "btrfs sub show" output, which resulted in
    breakage on btrfs-progs < 4.1 (close: #68).

btrbk-0.22.1

  * Support for btrfs-progs v4.4 (close: #66).

btrbk-0.22.0

  * Bugfix: fix monthly schedule if older than 10 weeks (close: #59).
  * Bugfix: fix sprintf used by config option "timestamp_format long"
    when using perl-5.22.0 (close: #57).
  * Bugfix: fix "--progress" option (close: #64).
  * Added "clean" command (close: #61).
  * Added "-n, --dry-run" option.
  * Added configuration options "raw_target_compress_level",
    "raw_target_compress_threads" (close: #60).
  * Added "stats" command (close: #54).
  * Print "$hostname:$path" instead of "{$hostname}$path" in summary
    and logs.

btrbk-0.21.0

  * Added transaction log (configuration option "transaction_log").
  * Added configuration option "group".
  * Allow filtering of all commands by group as well as targets.
  * Added "list backups|snapshots|latest|config|source|volume|target"
    commands (while removing "tree" command).
  * Added "config print" command.
  * Added "--format=table|long|raw" and "-t,--table" command line
    options, producing tabular and raw (machine-readable) output for
    "(dry)run", "tree" and "list" commands.
  * Print scheduler details if -v option is set on action run/dryrun.
  * Added configuration option "ssh_cipher_spec" (close: #47).
  * Added "target raw", with GnuPG and compression support
    (experimental).
  * Added configuration option "timestamp_format short|long".
  * Replaced "info" command with "usage", with tabular output.
  * Bugfix: correctly handle "incremental no" option.
  * Bugfix: return exit status 10 instead of 0 if one or more backup
    tasks aborted.
  * Better error handling for send/receive commands (close: #33).
  * Hardened ssh_filter_btrbk.sh script: fine-grained access control,
    restrict-path option, sudo option (close: #45).
  * Added example cron script.

btrbk-0.20.0

  * Added configuration option "ssh_port" (close: #39).
  * Added configuration option "ssh_compression" (close: #44).
  * Added command line option "--progress" (close: #42).
  * Bugfix: correct handling of empty "snapshot_dir" (close: #43).
  * Accept long options on command line.
  * Documentation: added FAQ.

btrbk-0.19.3

  * Bugfix: fix sorting of dates in schedule().
  * Bugfix: correct parsing of btrfs subvolume list (close: #28).
  * Support for btrfs-progs v4.1-rc1.

btrbk-0.19.2

  * Bugfix: fix crash when using btrfs-progs < 3.17.3 (close: #24).

btrbk-0.19.1

  * Use "cgen" for snapshot comparison.
  * Bugfix: fix crash in summary display (close: #22).

btrbk-0.19.0

  * Added "snapshot_create onchange", which skips snapshot creation if
    the latest snapshot is up-to-date (i.e. has same generation as the
    source subvolume).
  * Improved handling of command line subvolume filter for "run",
    "dryrun" and "tree" actions (close: #21).
  * Bugfix: fixed crash in action "diff".

btrbk-0.18.0

  * MIGRATION
    - update ssh_filter_btrbk.sh on all remote hosts
    - update configuration file (/etc/btrbk/btrbk.conf):
      - "snapshot_create_always yes" -> "snapshot_create always"
      - "snapshot_create_always no"  -> "snapshot_create ondemand"
  * Set PATH variable instead of using absolute "/sbin/btrfs" for
    compatibility with all linux distros out there, which all install
    'btrfs' in different locations (close: #20).
  * Added configuration option "snapshot_create", replacing option
    "snapshot_create_always". This allows setups with multiple btrbk
    instances on several hosts (close: #18).
  * Added command line option -r (resume only).
  * Catch and display errors from "btrfs subvolume show".
  * Include systemd service and timer unit for daily backups.

btrbk-0.17.1

  * Bugfix: send/receive: delete possibly left-behind garbled
    subvolume on failure. Fail with unrecoverable error if stray
    target subvolume is in the way (close: #17).
  * Bugfix: assume unreachable target as clean on snapshot creation if
    snapshot_create_always is set (close: #19).

btrbk-0.17.0

  * New versioning scheme using more common three-level versions.
  * Code refactoring: cleanup of data structures and handling of btrfs
    subvolume tree, as well as security related code parts.
  * Correct handling of symlinks to btrfs subvolumes (close: #12).
  * Added configuration option "snapshot_name" (close: #5).
  * Log messages now go to stderr, only the summary is printed on
    stdout.
  * Bugfix: allow "0" as subvolume name (close: #10).
  * Bugfix: allow "/" as volume name (close: #15).
  * Bugfix: check source AND targets for determining snapshot postfix
    (close: #11).
  * Bugfix: fixed "diff" action (colses: #14).
  * Allow '+' character for subvolume names.
  * Filesystems on remote hosts are now printed as
    "{my.remote-host.com}" in summary and logs.

btrbk-0.16

  * Bugfix: correctly check retention policy for missing backups.

btrbk-0.15

  * Added configuration option "btrfs_progs_compat", to be enabled if
    using btrfs-progs < 3.17 (close: #6).
  * Added configuration option "resume_missing", for automatic resume
    of missing backups (close: #8).
  * Removed configuration option "receive_log" in favor of printing
    errors from "btrfs receive".
  * Bugfix: show correct exit code on external command failure.
  * Bugfix: no crash if "commit_delete" option is set to "no"

btrbk-0.14

  * Bugfix: correctly handle empty target subvolumes (blocker for all
    new users; close: #4).

btrbk-0.13

  * Bugfix: allow '@' character for subvolume names (blocker for
    ubuntu users, since ubuntu prefixes all subvolumes with '@' in its
    subvolume layout; close: #3).

btrbk-0.12

  * Cleaner and more generic parsing of btrfs subvolume list.
  * Bugfix: subvolumes are also allowed for "snapshot_dir" (close:
    #1, #2).

btrbk-0.11

  * Added option -p (preserve backups).
  * Added optional subvolume argument for run/dryrun actions, for
    explicit selection of subvolumes to be processed.
  * Bugfixes

btrbk-0.10

  * Initial revision.
