From b80ff05a0a94bd9c3a576b81b5c6e58b0c57a60d Mon Sep 17 00:00:00 2001 From: boban Date: Sun, 19 Oct 2025 23:38:39 +0200 Subject: [PATCH] =?UTF-8?q?Rechtebechebung=20f=C3=BCr=20User=20mit=20Sudor?= =?UTF-8?q?echte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DkimService.php | 54 ++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/app/Services/DkimService.php b/app/Services/DkimService.php index 13ce914..bbc8788 100644 --- a/app/Services/DkimService.php +++ b/app/Services/DkimService.php @@ -164,25 +164,67 @@ class DkimService { $name = $domain instanceof Domain ? $domain->domain : $domain; + // Selektoren ermitteln if (is_null($selector)) { - // alle Selector aus DB holen und nacheinander entfernen $keys = $domain instanceof Domain ? $domain->dkimKeys()->pluck('selector')->all() : \App\Models\DkimKey::whereHas('domain', fn($q) => $q->where('domain', $name)) ->pluck('selector')->all(); - - $keys = $keys ?: ['mwl1']; // notfalls versuchen wir Standard + $keys = $keys ?: ['mwl1']; } else { $keys = [$selector]; } foreach ($keys as $sel) { - Process::run(['sudo','-n','/usr/local/sbin/mailwolt-remove-dkim',$name,$sel]); + $cmd = ['sudo','-n','/usr/local/sbin/mailwolt-remove-dkim',$name,$sel]; + $res = \Illuminate\Support\Facades\Process::timeout(30)->run($cmd); + + Log::info('DKIM remove exit', [ + 'domain' => $name, + 'selector' => $sel, + 'exit' => $res->exitCode(), + 'out' => $res->output(), + 'err' => $res->errorOutput(), + ]); + + if ($res->failed()) { + throw new \RuntimeException('OpenDKIM-Remove fehlgeschlagen: '.$res->errorOutput()); + } } - // Dienst neu laden (ohne Fehler abbrechen) - Process::run(['sudo','-n','/bin/systemctl','reload','opendkim']); + // Dienst neu laden (best effort) + \Illuminate\Support\Facades\Process::run(['sudo','-n','/bin/systemctl','reload','opendkim']); } +// public function removeForDomain(Domain|string $domain, ?string $selector = null): void +// { +// $name = $domain instanceof Domain ? $domain->domain : $domain; +// +// if (is_null($selector)) { +// // alle Selector aus DB holen und nacheinander entfernen +// $keys = $domain instanceof Domain +// ? $domain->dkimKeys()->pluck('selector')->all() +// : \App\Models\DkimKey::whereHas('domain', fn($q) => $q->where('domain', $name)) +// ->pluck('selector')->all(); +// +// $keys = $keys ?: ['mwl1']; // notfalls versuchen wir Standard +// } else { +// $keys = [$selector]; +// } +// +// foreach ($keys as $sel) { +// Process::run(['sudo','-n','/usr/local/sbin/mailwolt-remove-dkim',$name,$sel]); +// } +// +// // Dienst neu laden (ohne Fehler abbrechen) +// Process::run(['sudo','-n','/bin/systemctl','reload','opendkim']); +// +// $res = Process::timeout(30)->run($cmd); +// Log::info('DKIM install exit', [ +// 'exit' => $res->exitCode(), +// 'out' => $res->output(), +// 'err' => $res->errorOutput(), +// ]); +// } // public function removeForDomain(Domain|string $domain, ?string $selector = null): void