Files
RedBear-OS/local/patches/base/absorbed/P0-dhcpd-auto-iface.patch
T
vasilito 5851974b20 feat: build system transition to release fork + archive hardening
Release fork infrastructure:
- REDBEAR_RELEASE=0.1.1 with offline enforcement (fetch/distclean/unfetch blocked)
- 195 BLAKE3-verified source archives in standard format
- Atomic provisioning via provision-release.sh (staging + .complete sentry)
- 5-phase improvement plan: restore format auto-detection, source tree
  validation (validate-source-trees.py), archive-map.json, REPO_BINARY fallback

Archive normalization:
- Removed 87 duplicate/unversioned archives from shared pool
- Regenerated all archives in consistent format with source/ + recipe.toml
- BLAKE3SUMS and manifest.json generated from stable tarball set

Patch management:
- verify-patches.sh: pre-sync dry-run report (OK/REVERSED/CONFLICT)
- 121 upstream-absorbed patches moved to absorbed/ directories
- 43 active patches verified clean against rebased sources
- Stress test: base updated to upstream HEAD, relibc reset and patched

Compilation fixes:
- relibc: Vec imports in redox-rt (proc.rs, lib.rs, sys.rs)
- relibc: unsafe from_raw_parts in mod.rs (2024 edition)
- fetch.rs: rev comparison handles short/full hash prefixes
- kibi recipe: corrected rev mismatch

New scripts: restore-sources.sh, provision-release.sh, verify-sources-archived.sh,
check-upstream-releases.sh, validate-source-trees.py, verify-patches.sh,
repair-archive-format.sh, generate-manifest.py

Documentation: AGENTS.md, README.md, local/AGENTS.md updated for release fork model
2026-05-02 01:41:17 +01:00

45 lines
1.2 KiB
Diff

diff --git a/dhcpd/src/main.rs b/dhcpd/src/main.rs
index a95b703e..45b7eab2 100644
--- a/dhcpd/src/main.rs
+++ b/dhcpd/src/main.rs
@@ -446,19 +446,36 @@ fn dhcp(iface: &str, verbose: bool) -> Result<(), String> {
Ok(())
}
+fn auto_detect_iface() -> String {
+ if let Ok(dir) = std::fs::read_dir("/scheme/netcfg/ifaces") {
+ for entry in dir.flatten() {
+ if let Ok(name) = entry.file_name().into_string() {
+ if !name.is_empty() && name != "." && name != ".." {
+ return name;
+ }
+ }
+ }
+ }
+ String::from("eth0")
+}
+
fn main() {
let mut verbose = false;
- let iface = "eth0";
+ let mut iface = String::new();
- //TODO: parse iface from the args
for arg in env::args().skip(1) {
match arg.as_ref() {
"-v" => verbose = true,
+ other if !other.starts_with('-') && iface.is_empty() => iface = other.to_string(),
_ => (),
}
}
- if let Err(err) = dhcp(iface, verbose) {
+ if iface.is_empty() {
+ iface = auto_detect_iface();
+ }
+
+ if let Err(err) = dhcp(&iface, verbose) {
eprintln!("dhcpd: {err}");
process::exit(1);
}