~ruther/guix-local

720ee245dae56759785f968aca1714ea222645ad — Ludovic Courtès 11 years ago b6debda
guix system: Protect against changes to $PATH when activating the system.

Partly fixes <http://bugs.gnu.org/18082>.
Reported by Mark H Weaver <mhw@netris.org>.

* guix/scripts/system.scm (save-environment-excursion): New macro.
  (switch-to-system): Wrap 'primitive-load' call in it.
1 files changed, 15 insertions(+), 1 deletions(-)

M guix/scripts/system.scm
M guix/scripts/system.scm => guix/scripts/system.scm +15 -1
@@ 172,6 172,16 @@ When GRUB? is true, install GRUB on DEVICE, using GRUB.CFG."
  ;; The system profile.
  (string-append %state-directory "/profiles/system"))

(define-syntax-rule (save-environment-excursion body ...)
  "Save the current environment variables, run BODY..., and restore them."
  (let ((env (environ)))
    (dynamic-wind
      (const #t)
      (lambda ()
        body ...)
      (lambda ()
        (environ env)))))

(define* (switch-to-system os
                           #:optional (profile %system-profile))
  "Make a new generation of PROFILE pointing to the directory of OS, switch to


@@ 185,7 195,11 @@ it atomically, and then run OS's activation script."
      (switch-symlinks profile generation)

      (format #t (_ "activating system...~%"))
      (return (primitive-load (derivation->output-path script)))

      ;; The activation script may change $PATH, among others, so protect
      ;; against that.
      (return (save-environment-excursion
               (primitive-load (derivation->output-path script))))

      ;; TODO: Run 'deco reload ...'.
      )))