Finish setuid/setgid.

This commit is contained in:
Dominik Pantůček 2025-04-13 15:12:00 +02:00
parent 8bd46721aa
commit 0e012332e1

View file

@ -34,7 +34,9 @@
(chicken string) (chicken string)
api-servlets api-servlets
bar-db bar-db
(chicken process-context posix)) (chicken process-context posix)
(chicken process-context)
posix-groups)
(define -port- (make-parameter #f)) (define -port- (make-parameter #f))
(define -certificate- (make-parameter #f)) (define -certificate- (make-parameter #f))
@ -99,12 +101,24 @@
private-key: (-key-)) private-key: (-key-))
(tcp-listen port))) (tcp-listen port)))
(when (or (-user-) (-group-)) (print "current user id: " (current-user-id))
(print "current user id: " (current-user-id)) (print "current effective user id: " (current-effective-user-id))
(print "current effective user id: " (current-effective-user-id)) (when (-group-) ; group first, since only superuser can switch groups
(switch-user/group (-user-) (-group-)) (let ((ginfo (group-information (-group-))))
(print "current user id: " (current-user-id)) (unless ginfo
(print "current effective user id: " (current-effective-user-id))) (error "Group does not exist" (-group-)))
(set! (current-group-id) (list-ref ginfo 2))))
(when (-user-)
(let ((uinfo (user-information (-user-))))
(unless uinfo
(error "User does not exist" (-user-)))
(set-environment-variable! "HOME" (list-ref uinfo 5))
(initialize-groups (-user-) (list-ref uinfo 3))
(unless (-group-) ; Already changed to target group?
(set! (current-group-id) (list-ref uinfo 3)))
(set! (current-user-id) (list-ref uinfo 2))))
(print "current user id: " (current-user-id))
(print "current effective user id: " (current-effective-user-id))
(bar-db-init! (-db-name-) (-db-host-) (-db-user-) (-db-pass-)) (bar-db-init! (-db-name-) (-db-host-) (-db-user-) (-db-pass-))