(c-system-include "unistd.h") (c-system-include "pwd.h") (c-system-include "sys/types.h") (define-c-struct passwd predicate: user? (string pw_name user-name) (string pw_passwd user-password) (uid_t pw_uid user-id) (gid_t pw_gid user-group-id) (string pw_gecos user-gecos) (string pw_dir user-home) (string pw_shell user-shell)) (define-c uid_t (current-user-id "getuid") ()) (define-c gid_t (current-group-id "getgid") ()) (define-c uid_t (current-effective-user-id "geteuid") ()) (define-c gid_t (current-effective-group-id "getegid") ()) (define-c errno (set-current-user-id! "setuid") (uid_t)) (define-c errno (set-current-effective-user-id! "seteuid") (uid_t)) (define-c errno (set-current-group-id! "setgid") (gid_t)) (define-c errno (set-current-effective-group-id! "setegid") (gid_t)) (define-c pid_t (current-session-id "getsid") ((default 0 pid_t))) (define-c pid_t (create-session "setsid") ()) (define-c errno (set-root-directory! "chroot") (string)) (define-c errno getpwuid_r (uid_t (result passwd) (result (array char arg3)) (value 1024 int) (result pointer passwd))) (define-c errno getpwnam_r (string (result passwd) (result (array char arg3)) (value 1024 int) (result pointer passwd)))