Fix: CheckUpdates nutzt exec() statt shell_exec() für --check-only
shell_exec kann auf PHP-FPM Servern deaktiviert sein, wodurch version_remote nie aktualisiert wurde und kein Update angezeigt wurde. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main v1.1.345
parent
aaccb4bb32
commit
7e7d5c1069
|
|
@ -24,25 +24,27 @@ class CheckUpdates extends Command
|
|||
$updateBin = '/usr/local/sbin/mailwolt-update';
|
||||
$fetchHelper = '/usr/local/sbin/mailwolt-fetch-tags';
|
||||
|
||||
// Beide versuchen — --check-only schreibt version_remote, fetch-tags als Fallback
|
||||
// --check-only via exec() (shell_exec kann auf manchen Servern deaktiviert sein)
|
||||
$fetched = false;
|
||||
if (file_exists($updateBin) && str_contains((string) @file_get_contents($updateBin), '--check-only')) {
|
||||
$result = @shell_exec('sudo -n ' . escapeshellarg($updateBin) . ' --check-only 2>/dev/null');
|
||||
$fetched = ($result !== null);
|
||||
@exec('sudo -n ' . escapeshellarg($updateBin) . ' --check-only 2>/dev/null', $_, $rc);
|
||||
$fetched = ($rc === 0);
|
||||
}
|
||||
if (!$fetched && file_exists($fetchHelper)) {
|
||||
@shell_exec('sudo -n ' . escapeshellarg($fetchHelper) . ' 2>/dev/null');
|
||||
@exec('sudo -n ' . escapeshellarg($fetchHelper) . ' 2>/dev/null');
|
||||
}
|
||||
|
||||
// Version_remote wurde von einem der Helfer geschrieben; frisch genug wenn < 2h alt
|
||||
// version_remote von Helfer geschrieben; als frisch wenn < 2h alt
|
||||
$remoteFile = '/var/lib/mailwolt/version_remote';
|
||||
$remoteRaw = '';
|
||||
if (file_exists($remoteFile) && (time() - filemtime($remoteFile)) < 7200) {
|
||||
$remoteRaw = trim((string) file_get_contents($remoteFile));
|
||||
}
|
||||
|
||||
$latestTagRaw = $remoteRaw !== '' ? $remoteRaw
|
||||
: trim((string) shell_exec("git -C " . escapeshellarg($appPath) . " tag -l 'v*' --sort=-v:refname 2>/dev/null | head -n1"));
|
||||
// Fallback: lokale Tags (funktioniert nur wenn Tags lokal vorhanden)
|
||||
$out = [];
|
||||
@exec("git -C " . escapeshellarg($appPath) . " tag -l 'v*' --sort=-v:refname 2>/dev/null", $out);
|
||||
$latestTagRaw = $remoteRaw !== '' ? $remoteRaw : trim($out[0] ?? '');
|
||||
|
||||
$latestNorm = $this->normalizeVersion($latestTagRaw);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue