feat(users): per-user sealed folders users/<id>/{home,apps,data,permissions}; storage SET_USER/LOCK/PURGE; init sign-in/sign-out loop (purge fresh/removed/guest, seed from factory, session start/stop); shell logout; pm user+system app shelves; terminal SIGNED_OUT; per-program stack (gatekeeper 12p); 128K load scratch
This commit is contained in:
@@ -9,6 +9,7 @@ mod launch;
|
||||
mod load;
|
||||
mod manifest;
|
||||
mod selftest;
|
||||
mod session;
|
||||
mod spawn;
|
||||
|
||||
use libkos::fs::Storage;
|
||||
@@ -59,15 +60,20 @@ pub fn run() -> ! {
|
||||
// The test image carries the SMP self-test; it and the tests run
|
||||
// instead of the desktop, and the last one halts the machine.
|
||||
let (storage, scratch) = launcher.storage();
|
||||
if storage
|
||||
launcher.desktop = if storage
|
||||
.open(b"bin/smptest")
|
||||
.is_ok_and(|h| storage.close(h).is_ok())
|
||||
{
|
||||
libkos::println!("init: running the SMP self-test");
|
||||
selftest::run(storage, scratch);
|
||||
launch_all(&mut launcher, manifest::TESTS);
|
||||
manifest::TESTS
|
||||
} else {
|
||||
launch_all(&mut launcher, manifest::DESKTOP);
|
||||
manifest::DESKTOP
|
||||
};
|
||||
// Nothing that touches a user's files starts before someone is in.
|
||||
if let Err(why) = session::sign_in(&mut launcher) {
|
||||
libkos::println!("init: STOP ({})", why);
|
||||
idle();
|
||||
}
|
||||
|
||||
libkos::println!("init: all loaded, serving spawns");
|
||||
@@ -80,12 +86,7 @@ fn launch_all(launcher: &mut launch::Launcher, programs: &[manifest::Program]) {
|
||||
for p in programs {
|
||||
libkos::print!("init: loading {}... ", p.name);
|
||||
match launcher.launch(p) {
|
||||
Ok(note) => libkos::println!("ok{}", note),
|
||||
// Without the owner, nothing that touches user data may start.
|
||||
Err(why) if p.unlocks => {
|
||||
libkos::println!("STOP ({})", why);
|
||||
idle();
|
||||
}
|
||||
Ok(started) => libkos::println!("ok{}", started.note),
|
||||
Err(why) => libkos::println!("SKIP ({})", why),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user