Alex Sassmannshausen <alex.sassmannshau...@gmail.com> skribis:

> * modules/dmd/support.scm: Add copyright.
>   (user-dmddir): New variable.
>   (default-logfile): Use it instead of user-homedir.
>   (default-persistency-state-file): Use it instead of user-homedir.
>   (default-configfile): Use it instead of user-homedir, use init.scm
>   as default name for configfile, ensure .dmd.d exists.
>   (default-socket-dir): Add check for root, if #f, use user-dmddir as
>   base for socket.

Applied, thanks!

>  ;; Configuration file.
>  (define default-config-file
>    (if (zero? (getuid))
>        (string-append Prefix-dir "/etc/dmdconf.scm")
> -    (string-append user-homedir "/.dmdconf.scm")))
> +      (begin
> +        (let ((config-file (string-append user-dmddir "/init.scm")))
> +          (cond ((not (file-exists? user-dmddir))
> +                 (mkdir user-dmddir)
> +                 config-file)
> +                (else config-file))))))

The file-exists?/mkdir pattern above introduces a TOCTTOU problem: when
running ‘make check -j’ the first time, one of the tests failed because
‘mkdir’ failed with EEXIST.

So I changed it to (catch-system-error (mkdir user-dmddir)).

Ludo’.

Reply via email to