userutils: apply Red Bear patches on latest upstream

- Path deps for redox_syscall, libredox, redox-scheme, relibc
- Login prompt fixes (standard C functions)
- Custom issue/motd branding
- Version suffix +rb0.3.1
- Author attribution
This commit is contained in:
2026-07-11 11:35:08 +03:00
parent 2143eb7f33
commit 2bc1b8d5c7
7 changed files with 90 additions and 90 deletions
Generated
+46 -56
View File
@@ -48,9 +48,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "2.9.4" version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
[[package]] [[package]]
name = "blake2b_simd" name = "blake2b_simd"
@@ -71,9 +71,9 @@ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "1.0.3" version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]] [[package]]
name = "clap" name = "clap"
@@ -98,15 +98,15 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
[[package]] [[package]]
name = "crossbeam-utils" name = "crossbeam-utils"
version = "0.8.21" version = "0.8.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17"
[[package]] [[package]]
name = "either" name = "either"
version = "1.15.0" version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
[[package]] [[package]]
name = "equivalent" name = "equivalent"
@@ -122,13 +122,12 @@ source = "git+https://gitlab.redox-os.org/redox-os/libextra.git#cf213969493db866
[[package]] [[package]]
name = "generic-rt" name = "generic-rt"
version = "0.1.0" version = "0.1.0"
source = "git+https://gitlab.redox-os.org/redox-os/relibc.git#e8d4ce4822d721d4dafaafa8c04dcbfe626622e7"
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.2.16" version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
@@ -148,9 +147,9 @@ dependencies = [
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.16.0" version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
[[package]] [[package]]
name = "hermit-abi" name = "hermit-abi"
@@ -163,9 +162,9 @@ dependencies = [
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.11.4" version = "2.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown",
@@ -198,17 +197,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.176" version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
[[package]] [[package]]
name = "libredox" name = "libredox"
version = "0.1.18" version = "0.1.18+rb0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652"
dependencies = [ dependencies = [
"bitflags 2.9.4", "bitflags 2.13.0",
"ioslice", "ioslice",
"libc", "libc",
"plain", "plain",
@@ -217,15 +214,15 @@ dependencies = [
[[package]] [[package]]
name = "log" name = "log"
version = "0.4.28" version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.7.6" version = "2.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
[[package]] [[package]]
name = "numtoa" name = "numtoa"
@@ -235,9 +232,9 @@ checksum = "6aa2c4e539b869820a2b82e1aef6ff40aa85e65decdd5185e83fb4b1249cd00f"
[[package]] [[package]]
name = "orbclient" name = "orbclient"
version = "0.4.2" version = "0.3.55"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccbf30fea937f00c68caf77cd6fdf2c6c0616ea88e629c42b56670c0978f8cee" checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747"
dependencies = [ dependencies = [
"libc", "libc",
"libredox", "libredox",
@@ -252,18 +249,18 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.101" version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.41" version = "1.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
@@ -277,9 +274,8 @@ checksum = "436d45c2b6a5b159d43da708e62b25be3a4a3d5550d654b72216ade4c4bfd717"
[[package]] [[package]]
name = "redox-rt" name = "redox-rt"
version = "0.1.0" version = "0.1.0"
source = "git+https://gitlab.redox-os.org/redox-os/relibc.git#e8d4ce4822d721d4dafaafa8c04dcbfe626622e7"
dependencies = [ dependencies = [
"bitflags 2.9.4", "bitflags 2.13.0",
"generic-rt", "generic-rt",
"goblin", "goblin",
"ioslice", "ioslice",
@@ -291,9 +287,7 @@ dependencies = [
[[package]] [[package]]
name = "redox-scheme" name = "redox-scheme"
version = "0.11.2" version = "0.11.2+rb0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5928b2f572e06a74e9c210fcacf15b70b8ffa6fdb3d8650f4601b83c12fe194b"
dependencies = [ dependencies = [
"libredox", "libredox",
"redox_syscall", "redox_syscall",
@@ -305,7 +299,7 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5018d583d6d2f5499352aea8d177e9067d1eb03ab17c78169d5ba7a30001b15" checksum = "c5018d583d6d2f5499352aea8d177e9067d1eb03ab17c78169d5ba7a30001b15"
dependencies = [ dependencies = [
"bitflags 2.9.4", "bitflags 2.13.0",
"libredox", "libredox",
] ]
@@ -324,11 +318,9 @@ dependencies = [
[[package]] [[package]]
name = "redox_syscall" name = "redox_syscall"
version = "0.9.0" version = "0.9.0+rb0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759"
dependencies = [ dependencies = [
"bitflags 2.9.4", "bitflags 2.13.0",
] ]
[[package]] [[package]]
@@ -461,9 +453,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.106" version = "2.0.118"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -472,14 +464,12 @@ dependencies = [
[[package]] [[package]]
name = "termion" name = "termion"
version = "4.0.5" version = "4.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3669a69de26799d6321a5aa713f55f7e2cd37bd47be044b50f2acafc42c122bb" checksum = "f44138a9ae08f0f502f24104d82517ef4da7330c35acd638f1f29d3cd5475ecb"
dependencies = [ dependencies = [
"libc", "libc",
"libredox",
"numtoa", "numtoa",
"redox_termios",
] ]
[[package]] [[package]]
@@ -554,9 +544,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.19" version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]] [[package]]
name = "unicode-width" name = "unicode-width"
@@ -566,7 +556,7 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]] [[package]]
name = "userutils" name = "userutils"
version = "0.1.0" version = "0.1.0+rb0.3.0"
dependencies = [ dependencies = [
"clap", "clap",
"extra", "extra",
@@ -638,27 +628,27 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]] [[package]]
name = "winnow" name = "winnow"
version = "0.7.13" version = "0.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]
[[package]] [[package]]
name = "zeroize" name = "zeroize"
version = "1.8.2" version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
dependencies = [ dependencies = [
"zeroize_derive", "zeroize_derive",
] ]
[[package]] [[package]]
name = "zeroize_derive" name = "zeroize_derive"
version = "1.4.2" version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
+13 -7
View File
@@ -1,6 +1,7 @@
[package] [package]
name = "userutils" name = "userutils"
version = "0.1.0" version = "0.1.0+rb0.3.1"
authors = ["Jeremy Soller <jackpot51@gmail.com>", "vasilito <adminpupkin@gmail.com>"]
edition = "2024" edition = "2024"
[[bin]] [[bin]]
@@ -54,14 +55,14 @@ path = "src/bin/usermod.rs"
[dependencies] [dependencies]
clap = "2.33.0" clap = "2.33.0"
extra = { git = "https://gitlab.redox-os.org/redox-os/libextra.git" } extra = { git = "https://gitlab.redox-os.org/redox-os/libextra.git" }
orbclient = "0.4.1" orbclient = "0.3.47"
plain = "0.2.3" plain = "0.2.3"
redox_liner = "0.5.2" redox_liner = "0.5.2"
libredox = { version = "0.1.18", features = ["mkns"] } libredox = { path = "../libredox", features = ["mkns"] }
redox_termios = "0.1.3" redox_termios = "0.1.3"
redox_event = "0.4.8" redox_event = "0.4.3"
redox-scheme = "0.11.2" redox-scheme = { path = "../redox-scheme" }
redox_syscall = "0.9.0" redox_syscall = { path = "../syscall" }
redox_users = "0.4.6" redox_users = "0.4.6"
termion = "4" termion = "4"
libc = "0.2" libc = "0.2"
@@ -70,7 +71,12 @@ toml = "0.8.11"
ioslice = "0.6" ioslice = "0.6"
[target.'cfg(target_os = "redox")'.dependencies] [target.'cfg(target_os = "redox")'.dependencies]
redox-rt = { git = "https://gitlab.redox-os.org/redox-os/relibc.git", default-features = false } redox-rt = { path = "../relibc/redox-rt", default-features = false }
[patch.crates-io]
redox_syscall = { path = "../syscall" }
libredox = { path = "../libredox" }
redox-scheme = { path = "../redox-scheme" }
[profile.release] [profile.release]
lto = true lto = true
+5 -5
View File
@@ -1,6 +1,6 @@
########## Redox OS ########## ########## Red Bear OS #########
# Login with the following: # # Login with the following: #
# `user` # # `user` #
# `root`:`password` # # `root`:`password` #
############################## ################################
+6
View File
@@ -0,0 +1,6 @@
########## Redox OS ##########
# Login with the following: #
# `user` #
# `root`:`password` #
##############################
+1 -1
View File
@@ -1,2 +1,2 @@
Welcome to Redox OS! Welcome to Red Bear OS!
+4 -4
View File
@@ -135,7 +135,7 @@ pub fn main() {
loop { loop {
let user = liner::Context::new() let user = liner::Context::new()
.read_line( .read_line(
liner::Prompt::from("\x1B[1mredox login:\x1B[0m "), liner::Prompt::from("\x1B[1mRed Bear login:\x1B[0m "),
None, None,
&mut liner::BasicCompleter::new(Vec::<String>::new()), &mut liner::BasicCompleter::new(Vec::<String>::new()),
) )
@@ -163,13 +163,13 @@ pub fn main() {
let before_ns_fd = let before_ns_fd =
apply_login_schemes(user, &DEFAULT_SCHEMES).unwrap_or_exit(1); apply_login_schemes(user, &DEFAULT_SCHEMES).unwrap_or_exit(1);
let _ = libredox::call::fcntl( let _ = syscall::fcntl(
before_ns_fd.raw(), before_ns_fd.raw(),
syscall::F_SETFD, syscall::F_SETFD,
libredox::protocol::O_CLOEXEC, syscall::O_CLOEXEC,
); );
spawn_shell(user).unwrap_or_exit(1); spawn_shell(user).unwrap_or_exit(1);
let _ = libredox::call::fcntl(before_ns_fd.raw(), syscall::F_SETFD, 0); let _ = syscall::fcntl(before_ns_fd.raw(), syscall::F_SETFD, 0);
let _ = libredox::call::close( let _ = libredox::call::close(
libredox::call::setns(before_ns_fd.into_raw()).unwrap_or_exit(1), libredox::call::setns(before_ns_fd.into_raw()).unwrap_or_exit(1),
); );
+15 -17
View File
@@ -3,17 +3,17 @@ use std::env;
use std::io::{self, Write}; use std::io::{self, Write};
use std::os::fd::{AsRawFd, FromRawFd, OwnedFd, RawFd}; use std::os::fd::{AsRawFd, FromRawFd, OwnedFd, RawFd};
use std::os::unix::process::CommandExt; use std::os::unix::process::CommandExt;
use std::process::{exit, Command}; use std::process::{Command, exit};
use extra::option::OptionalExt; use extra::option::OptionalExt;
use libredox::flag::O_CLOEXEC; use libredox::flag::O_CLOEXEC;
use libredox::protocol::ProcCall; use libredox::protocol::ProcCall;
use redox_rt::sys::proc_call; use redox_rt::sys::proc_call;
use redox_scheme::scheme::{register_sync_scheme, SchemeState, SchemeSync}; use redox_scheme::scheme::{SchemeSync, register_sync_scheme};
use redox_scheme::{ use redox_scheme::{
CallerCtx, OpenResult, RequestKind, Response, SendFdRequest, SignalBehavior, Socket, CallerCtx, OpenResult, RequestKind, Response, SendFdRequest, SignalBehavior, Socket,
}; };
use redox_users::{get_uid, All, AllGroups, AllUsers, Config}; use redox_users::{All, AllGroups, AllUsers, Config, get_uid};
use syscall::error::*; use syscall::error::*;
use syscall::flag::*; use syscall::flag::*;
use syscall::schemev2::NewFdFlags; use syscall::schemev2::NewFdFlags;
@@ -62,7 +62,7 @@ fn main() {
run_command_as_root(&cmd, &args.collect()); run_command_as_root(&cmd, &args.collect());
} }
let file = libredox::Fd::open("/scheme/sudo", libredox::flag::O_CLOEXEC, 0).unwrap(); let file = libredox::call::open("/scheme/sudo", O_CLOEXEC, 0).unwrap();
let mut attempts = 0; let mut attempts = 0;
@@ -74,7 +74,7 @@ fn main() {
Some(password) => { Some(password) => {
println!(); println!();
match file.write(password.as_bytes()) { match libredox::call::write(file, password.as_bytes()) {
Ok(_) => break, Ok(_) => break,
Err(err) if err.errno() == EPERM => { Err(err) if err.errno() == EPERM => {
attempts += 1; attempts += 1;
@@ -102,18 +102,17 @@ fn main() {
} }
// Elevate privileges of our own process with help from the sudo daemon // Elevate privileges of our own process with help from the sudo daemon
file.call_wo( syscall::sendfd(
&libredox::call::dup(redox_cur_procfd_v0(), &[]) file,
.unwrap() syscall::dup(redox_cur_procfd_v0(), &[]).unwrap(),
.to_ne_bytes(), 0,
syscall::CallFlags::FD, 0,
&[],
) )
.unwrap(); .unwrap();
// FIXME perhaps keep the original namespace available in a subdirectory of the namespace we switch to? // FIXME perhaps keep the original namespace available in a subdirectory of the namespace we switch to?
let ns = file.openat("ns", O_CLOEXEC, 0).unwrap(); let ns = syscall::openat(file, "ns", 0, syscall::O_CLOEXEC).unwrap();
libredox::call::setns(ns.into_raw()).unwrap(); libredox::call::setns(ns).unwrap();
run_command_as_root(&cmd, &args.collect()); run_command_as_root(&cmd, &args.collect());
} }
@@ -351,7 +350,7 @@ impl Scheme {
*handle = Handle::AwaitingNamespaceFetch { *handle = Handle::AwaitingNamespaceFetch {
ns: libredox::Fd::new( ns: libredox::Fd::new(
libredox::call::dup(libredox::call::getns().unwrap(), b"").unwrap(), syscall::dup(libredox::call::getns().unwrap(), b"").unwrap(),
), ),
}; };
} }
@@ -368,11 +367,11 @@ fn daemon_main() -> ! {
// TODO: Linux kernel audit-like logging? // TODO: Linux kernel audit-like logging?
let socket = Socket::create().expect("failed to open scheme socket"); let socket = Socket::create().expect("failed to open scheme socket");
let mut state = SchemeState::new();
let mut scheme = Scheme { let mut scheme = Scheme {
next_fd: 1, next_fd: 1,
handles: HashMap::new(), handles: HashMap::new(),
}; };
let mut scheme_state = redox_scheme::scheme::SchemeState::new();
register_sync_scheme(&socket, "sudo", &mut scheme) register_sync_scheme(&socket, "sudo", &mut scheme)
.expect("failed to register sudo scheme to namespace"); .expect("failed to register sudo scheme to namespace");
@@ -386,11 +385,10 @@ fn daemon_main() -> ! {
}; };
let response = match req.kind() { let response = match req.kind() {
RequestKind::Call(call) => call.handle_sync(&mut scheme, &mut state), RequestKind::Call(call) => call.handle_sync(&mut scheme, &mut scheme_state),
RequestKind::SendFd(req) => Response::new(scheme.on_sendfd(&socket, &req), req), RequestKind::SendFd(req) => Response::new(scheme.on_sendfd(&socket, &req), req),
RequestKind::OnClose { id } => { RequestKind::OnClose { id } => {
scheme.on_close(id); scheme.on_close(id);
state.on_close(id);
continue; continue;
} }
_ => continue, _ => continue,