first commit

This commit is contained in:
2026-03-02 20:53:28 +01:00
commit d27c205106
63 changed files with 4593 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
using HanaToolbox.Services.Interfaces;
namespace HanaToolbox.Services;
/// <summary>
/// Wraps a shell command to run as &lt;sid&gt;adm using `su - &lt;sid&gt;adm -c '...'`.
/// If the current OS user is already &lt;sid&gt;adm, the command is executed directly.
/// </summary>
public sealed class SuUserSwitcher(IProcessRunner runner) : IUserSwitcher
{
public async Task<ProcessResult> RunAsAsync(
string sid, string shellCommand,
CancellationToken ct = default)
{
var sidAdm = $"{sid.ToLowerInvariant()}adm";
if (string.Equals(Environment.UserName, sidAdm, StringComparison.OrdinalIgnoreCase))
{
// Already running as the correct user — run directly via bash
return await runner.RunAsync("/bin/bash", ["-c", shellCommand], ct);
}
// Use `su -` to inherit the user's environment (HOME, PATH, etc.)
return await runner.RunAsync("/bin/su", ["-", sidAdm, "-c", shellCommand], ct);
}
}