From 759f4afc650438da18529cb07ab0fe6b7b6194c8 Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Thu, 16 Dec 2021 16:53:59 +0300 Subject: [PATCH] tarsnap service: fix escaping (#150802) --- nixos/modules/services/backup/tarsnap.nix | 26 ++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/nixos/modules/services/backup/tarsnap.nix b/nixos/modules/services/backup/tarsnap.nix index 9cce86836612..c75df45871ff 100644 --- a/nixos/modules/services/backup/tarsnap.nix +++ b/nixos/modules/services/backup/tarsnap.nix @@ -320,21 +320,22 @@ in ${optionalString cfg.explicitSymlinks "-H"} \ ${optionalString cfg.followSymlinks "-L"} \ ${concatStringsSep " " cfg.directories}''; + cachedir = escapeShellArg cfg.cachedir; in if (cfg.cachedir != null) then '' - mkdir -p ${cfg.cachedir} - chmod 0700 ${cfg.cachedir} + mkdir -p ${cachedir} + chmod 0700 ${cachedir} ( flock 9 - if [ ! -e ${cfg.cachedir}/firstrun ]; then + if [ ! -e ${cachedir}/firstrun ]; then ( flock 10 flock -u 9 ${tarsnap} --fsck flock 9 - ) 10>${cfg.cachedir}/firstrun + ) 10>${cachedir}/firstrun fi - ) 9>${cfg.cachedir}/lockf + ) 9>${cachedir}/lockf - exec flock ${cfg.cachedir}/firstrun ${run} + exec flock ${cachedir}/firstrun ${run} '' else "exec ${run}"; serviceConfig = { @@ -356,22 +357,23 @@ in tarsnap = ''tarsnap --configfile "/etc/tarsnap/${name}.conf"''; lastArchive = "$(${tarsnap} --list-archives | sort | tail -1)"; run = ''${tarsnap} -x -f "${lastArchive}" ${optionalString cfg.verbose "-v"}''; + cachedir = escapeShellArg cfg.cachedir; in if (cfg.cachedir != null) then '' - mkdir -p ${cfg.cachedir} - chmod 0700 ${cfg.cachedir} + mkdir -p ${cachedir} + chmod 0700 ${cachedir} ( flock 9 - if [ ! -e ${cfg.cachedir}/firstrun ]; then + if [ ! -e ${cachedir}/firstrun ]; then ( flock 10 flock -u 9 ${tarsnap} --fsck flock 9 - ) 10>${cfg.cachedir}/firstrun + ) 10>${cachedir}/firstrun fi - ) 9>${cfg.cachedir}/lockf + ) 9>${cachedir}/lockf - exec flock ${cfg.cachedir}/firstrun ${run} + exec flock ${cachedir}/firstrun ${run} '' else "exec ${run}"; serviceConfig = {