Forráskód Böngészése

fix: core_only — passer BACKUP_CORE_ONLY via env_keep au lieu de sudo env

sudo env ... n'est pas autorisé dans les règles sudoers (/usr/bin/env absent).
On passe la variable via l'environnement du processus subprocess (env=) et
on ajoute env_keep dans sudoers pour que sudo la transmette à yunohost.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Cedric Hansen 2 hete
szülő
commit
2cfe55edc8
2 módosított fájl, 6 hozzáadás és 2 törlés
  1. 1 0
      conf/sudoers
  2. 5 2
      sources/jobs/ynh_backup.py

+ 1 - 0
conf/sudoers

@@ -1,4 +1,5 @@
 Defaults:__APP__ !requiretty
+Defaults:__APP__ env_keep += "BACKUP_CORE_ONLY"
 __APP__ ALL=(root) NOPASSWD: /usr/bin/yunohost backup create *
 __APP__ ALL=(root) NOPASSWD: /usr/bin/yunohost backup delete *
 __APP__ ALL=(root) NOPASSWD: /usr/bin/yunohost backup restore *

+ 5 - 2
sources/jobs/ynh_backup.py

@@ -129,10 +129,13 @@ def _run_ynh_app(job, instance, backup_dir):
     archive = _archive_name(instance, app_id, backup_dir)
 
     cmd = ["sudo", "yunohost", "backup", "create", "--apps", app_id, "--name", archive]
+    run_env = None
     if core_only:
-        cmd = ["sudo", "env", "BACKUP_CORE_ONLY=1"] + cmd[1:]
+        # sudo env ... n'est pas autorisé dans sudoers ; on passe la variable
+        # via l'environnement du processus sudo et env_keep dans sudoers.
+        run_env = {**os.environ, "BACKUP_CORE_ONLY": "1"}
 
-    result = subprocess.run(cmd, capture_output=True, text=True, timeout=3600)
+    result = subprocess.run(cmd, capture_output=True, text=True, timeout=3600, env=run_env)
     log = (result.stdout + result.stderr).strip()
 
     if result.returncode != 0: