sudo-ctdra (1.0.0)
Installation
[registry]
default = "gitea"
[registries.gitea]
index = "sparse+https://gitea.creative-dragonslayer.de/api/packages/Rust-Crates/cargo/" # Sparse index
# index = "https://gitea.creative-dragonslayer.de/Rust-Crates/_cargo-index.git" # Git
[net]
git-fetch-with-cli = truecargo add sudo-ctdra@1.0.0About this package
sudo-ctdra
Eine kompakte, leichtgewichtige Rust-Bibliothek zur Überprüfung und Anforderung von Root-/Administrator-Rechten über sudo unter Linux und Unix-Systemen.
🚀 Übersicht & Features
- Root-Prüfung (
is_run_as_root): Schnelle und zuverlässige Überprüfung der effektiven Benutzer-ID (libc::geteuid() == 0). - Prozess-Eskalation (
run_as_root): Startet das aktuelle Programm übersudoneu, übergibt alle Befehlszeilenargumente (std::env::args) und ersetzt den aktuellen Prozess (CommandExt::exec). - Saubere Fehlerbehandlung: Gibt bei Fehlschlägen einen [
std::io::Error] zurück, anstatt das Programm unkontrolliert zu beenden oder ungefragt zu loggen. - Rust Edition 2024: Moderner Rust-Standard mit optimierten Profileinstellungen.
- Automatisierte CI/CD-Workflows: Vorkonfigurierte Gitea Actions für Tests, Compiler-Checks, Paketierung und Releases.
📦 Einbindung
Füge die Crate zu deiner Cargo.toml hinzu:
[dependencies]
sudo-ctdra = { version = "1.0.0", registry = "gitea" }
Falls die Gitea Package Registry genutzt wird, trage diese in deiner .cargo/config.toml ein:
[registries.gitea]
index = "sparse+https://gitea.creative-dragonslayer.de/api/packages/Rust-Crates/cargo/"
💡 Anwendungsbeispiel
use sudo_ctdra::{is_run_as_root, run_as_root};
fn main() {
if is_run_as_root() {
println!("Programm läuft mit Root-Rechten.");
// Privilegierte Aktionen durchführen...
} else {
println!("Normale Benutzerrechte erkannt. Starte neu als Root über sudo...");
let err = run_as_root();
eprintln!("Fehler beim Ausführen von 'sudo': {err}");
std::process::exit(1);
}
}
📁 Projektstruktur
.
├── .gitea/
│ └── workflows/
│ ├── main.yaml # CI/CD: Test, Check, Publish & Release für 'main'
│ └── testing.yaml # CI/CD: Test, Check & Pre-Release für 'testing'
├── .idea/ # Vorkonfigurierte JetBrains IDE Einstellungen
├── src/
│ └── lib.rs # Einstiegspunkt der Crate / Bibliotheksfunktionen
├── tests/
│ └── integration_tests.rs # Integrations- und Subprozess-Tests
├── Cargo.lock
├── Cargo.toml # Crate-Manifest & Metadaten
├── LICENSE # GNU General Public License v3.0
├── AGENTS.md # Richtlinien und Kontext für KI-Agenten
└── README.md # Projektdokumentation
💻 Lokale Entwicklung & Befehle
Die gängigen Cargo-Befehle zur Entwicklung und Validierung:
-
Kompilierung prüfen:
cargo check --all-targets -
Tests ausführen (Unit-, Integrations- und Doc-Tests):
cargo test -
Linter & Code-Formatierung:
cargo clippy --all-targets -- -D warnings cargo fmt --check -
Crate lokal paketieren:
cargo package -
Dokumentation generieren:
cargo doc --no-deps --open
🔄 CI/CD & Branching-Workflow
| Branch | Trigger | Aktionen |
|---|---|---|
testing |
Push auf testing |
• cargo test• cargo check --all-targets• cargo package• Erstellt/Aktualisiert Pre-Release v<VERSION>-preview mit .crate-Asset |
main |
Push auf main |
• cargo test• cargo check --all-targets• cargo package• Veröffentlicht Crate in Gitea Package Registry • Erstellt/Aktualisiert Release v<VERSION> mit .crate-Asset |
Hinweis zur Versionierung: Die Versionsnummer wird automatisch aus
Cargo.toml(version = "...") ausgelesen. Passe vor einem Release / Merge die Version inCargo.tomlentsprechend SemVer an.
📄 Lizenz
Dieses Projekt steht unter der GNU General Public License v3.0 or later (GPL-3.0-or-later).
Dependencies
| ID | Version |
|---|---|
| libc | ^1.0.0-alpha.4 |