From 2534e81d5b40a532210479c09f38de5a998c4bc1 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Sat, 26 Dec 2009 23:48:43 +0900 Subject: [PATCH] adding initial host system module --- lib/chibi/system.module | 15 +++++++++++++++ lib/chibi/system.stub | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 lib/chibi/system.module create mode 100644 lib/chibi/system.stub diff --git a/lib/chibi/system.module b/lib/chibi/system.module new file mode 100644 index 00000000..adc26ddc --- /dev/null +++ b/lib/chibi/system.module @@ -0,0 +1,15 @@ + +(define-module (chibi system) + (export user-information user-name user-password + user-id user-group-id user-gecos user-home user-shell + current-user-id current-group-id + current-effective-user-id current-effective-group-id + set-current-user-id! set-current-effective-user-id! + set-current-group-id! set-current-effective-group-id! + current-session-id create-session + set-root-directory!) + (import-immutable (scheme)) + (include-shared "system") + ;;(include "system.scm") + ) + diff --git a/lib/chibi/system.stub b/lib/chibi/system.stub new file mode 100644 index 00000000..7d4a836f --- /dev/null +++ b/lib/chibi/system.stub @@ -0,0 +1,34 @@ + +(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 256 int) (result pointer passwd))) +