activation: Create directory with specified perms in ‘mkdir-p/perms’.

There is currently a window of time between when the desired directory is
created and when its permissions are changed.  During this time, its
permissions are restricted only by the umask.

Of course, in the "directory already exists" case, this doesn't matter, but if
the directory has been specifically deleted ahead of time so that it is
created afresh, this is an unnecessary window.

We can avoid this by passing the caller-provided BITS to 'mkdirat' when
attempting to create the last directory.

* gnu/build/activation.scm (mkdir-p/perms): Create target directory with BITS
  permissions.

Change-Id: I03d2c620872e86b6f591abe0f1c8317aa1245383
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Reepca Russelstein 2024-10-25 01:04:48 -05:00 committed by Ludovic Courtès
parent 6a8a6171a7
commit 4e6df8040e
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -113,7 +113,9 @@ (define open-flags (logior O_CLOEXEC ; don't pass the port on to subprocesses
;; If not, create it.
(catch 'system-error
(lambda _
(mkdirat root head))
(if (null? tail)
(mkdirat root head bits)
(mkdirat root head)))
(lambda args
;; Someone else created the directory. Unexpected but fine.
(unless (= EEXIST (system-error-errno args))