diff options
author | Tomas Volf <wolf@wolfsden.cz> | 2023-10-13 18:18:11 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2024-01-29 14:31:01 +0100 |
commit | b6866ded2bec4a4a92ec5c36c7525bd8041b29ab (patch) | |
tree | d77649f6a3a9dfad5c946b81bb149197ba7ec860 | |
parent | 0933791c49e7ede0f2d9bcf5e27acb573f7e04e7 (diff) |
ftw: Fix getuid-or-false, getgid-or-false macros.
Both macros were missing a quote for the procedure call, causing the
actual return value to be compiled into the ftw.go, instead of the
procedure call. Snippet from disassembly of ftw.go does confirm that:
55 (make-immediate 2 3990) ;; 997 at ice-9/ftw.scm:319:46
56 (make-long-immediate 1 120002) ;; 30000 at ice-9/ftw.scm:320:46
That effectively prevented ftw from entering directories without access
for others. Simple reproduction:
scheme@(guile-user)> ,use (ice-9 ftw)
scheme@(guile-user)> (mkdir "/tmp/xxxx")
scheme@(guile-user)> (chmod "/tmp/xxxx" #o0700)
scheme@(guile-user)> (ftw "/tmp/xxxx" (lambda (_ __ f) (pk f) #t))
;;; (directory-not-readable)
$1 = #t
scheme@(guile-user)> (system "ls -al /tmp/xxxx")
total 0
drwx------ 1 wolf wolf 0 Oct 11 22:54 .
drwxrwxrwt 1 root root 888 Oct 11 22:54 ..
$2 = 0
The fix is to quote the procedure call, leading to the intended
behavior.
Fixes <https://bugs.gnu.org/55344>.
* module/ice-9/ftw.scm (getuid-or-false): Quote the (getuid).
(getgid-or-false): Quote the (getgid).
* NEWS: Update.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | module/ice-9/ftw.scm | 4 |
2 files changed, 4 insertions, 2 deletions
@@ -41,6 +41,8 @@ the compiler reports it as "possibly unused". (<https://bugs.gnu.org/55356>) ** 'read-u8' in (scheme base) now defaults to (current-input-port) (<https://bugs.gnu.org/62690>) +** 'ftw' now correctly deals with directory permissions + (<https://bugs.gnu.org/55344>) ** Hashing of UTF-8 symbols with non-ASCII characters avoids corruption (<https://bugs.gnu.org/56413>) diff --git a/module/ice-9/ftw.scm b/module/ice-9/ftw.scm index ac6aa6316..8496086a1 100644 --- a/module/ice-9/ftw.scm +++ b/module/ice-9/ftw.scm @@ -201,12 +201,12 @@ (define-macro (getuid-or-false) (if (defined? 'getuid) - (getuid) + '(getuid) #f)) (define-macro (getgid-or-false) (if (defined? 'getgid) - (getgid) + '(getgid) #f)) (define (directory-files dir) |