feat: Lösch-Synchronisation mit lokalem Backup und Bereinigung

Gelöschte Dateien werden beim Download ins Backup-Verzeichnis verschoben
(${LOCAL_PHOTO_DIR}-bak, ${LOCAL_DARKTABLE_DB_DIR}-bak) statt permanent
gelöscht. Upload verwendet --delete ohne Backup. Backups älter als 2 Jahre
werden automatisch bereinigt. Safeguard verhindert --delete bei leerem
Quellverzeichnis. validate_path prüft jetzt auch lokale Pfade.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-21 07:04:06 +02:00
parent d714f95cb7
commit faa65dde2f
7 changed files with 166 additions and 9 deletions
+27
View File
@@ -13,6 +13,7 @@ setup() {
touch "$HOME/.config/darktable/library.db"
touch "$HOME/.config/darktable/data.db"
mkdir -p "$HOME/Pictures"
touch "$HOME/Pictures/test.jpg"
export DISPLAY=:99
}
@@ -241,3 +242,29 @@ EOF
[ "$status" -eq 0 ]
[ ! -f /tmp/evil_stub ]
}
# --- Backup-Pfad Security ---
@test "security: LOCAL_PHOTO_DIR mit Path-Traversal wird geblockt" {
create_valid_env
echo "LOCAL_PHOTO_DIR=/home/user/../../../etc/photos" >> "$CONFIG_DIR/.env"
run bash -c "source '$COMMON_SCRIPT'; load_config; validate_config"
[ "$status" -eq 1 ]
[[ "$output" == *"LOCAL_PHOTO_DIR"* ]]
}
@test "security: LOCAL_DARKTABLE_DB_DIR mit Path-Traversal wird geblockt" {
create_valid_env
echo "LOCAL_DARKTABLE_DB_DIR=/home/user/../../../etc/dt" >> "$CONFIG_DIR/.env"
run bash -c "source '$COMMON_SCRIPT'; load_config; validate_config"
[ "$status" -eq 1 ]
[[ "$output" == *"LOCAL_DARKTABLE_DB_DIR"* ]]
}
@test "security: LOCAL_PHOTO_DIR mit Single-Quote wird geblockt" {
create_valid_env
printf 'LOCAL_PHOTO_DIR="/home/user/pics'"'"'injection"\n' >> "$CONFIG_DIR/.env"
run bash -c "source '$COMMON_SCRIPT'; load_config; validate_config"
[ "$status" -eq 1 ]
[[ "$output" == *"LOCAL_PHOTO_DIR"* ]]
}