summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Shinn <alexshinn@gmail.com>2024-02-23 15:16:22 +0900
committerAlex Shinn <alexshinn@gmail.com>2024-02-23 15:16:22 +0900
commit19c7d4fec2932d90d3bcb0f2a296e963b264d298 (patch)
tree9911793913d578a716bf70f94d56e53ca95044f6
parent56ef426dfa8d0a19dc2f76d52f432b21af1c6286 (diff)
user/group-information should return #f for unknown usersHEADmaster
-rw-r--r--lib/chibi/system.sld13
-rw-r--r--lib/chibi/tar.scm4
2 files changed, 9 insertions, 8 deletions
diff --git a/lib/chibi/system.sld b/lib/chibi/system.sld
index 4dd4b6b1..e1b1faae 100644
--- a/lib/chibi/system.sld
+++ b/lib/chibi/system.sld
@@ -17,11 +17,12 @@
(else
(export user-information group-information)
(body
+ (define (safe-car x) (and (pair? x) (car x)))
(define (user-information user)
- (car (if (string? user)
- (getpwnam_r user (make-string 1024))
- (getpwuid_r user (make-string 1024)))))
+ (safe-car (if (string? user)
+ (getpwnam_r user (make-string 1024))
+ (getpwuid_r user (make-string 1024)))))
(define (group-information group)
- (car (if (string? group)
- (getgrnam_r group (make-string 1024))
- (getgrgid_r group (make-string 1024)))))))))
+ (safe-car (if (string? group)
+ (getgrnam_r group (make-string 1024))
+ (getgrgid_r group (make-string 1024)))))))))
diff --git a/lib/chibi/tar.scm b/lib/chibi/tar.scm
index 0fe6a729..c221c512 100644
--- a/lib/chibi/tar.scm
+++ b/lib/chibi/tar.scm
@@ -24,9 +24,9 @@
#u8(0 0 0 0 0 0 0 0 0 0 0 0)))
(define (file-owner-or-nobody uid)
- (or (user-name (user-information uid)) "nobody"))
+ (or (cond ((user-information uid) => user-name) (else #f)) "nobody"))
(define (file-group-or-nobody gid)
- (or (group-name (group-information gid)) "nobody"))
+ (or (cond ((group-information gid) => group-name) (else #f)) "nobody"))
(define (make-tar file mode uid gid size mod-time type . o)
(let* ((link (if (pair? o) (car o) ""))