Fix mail queue and logs commands

- Hardcode paths: /usr/sbin/postqueue, /usr/sbin/postsuper, /usr/bin/journalctl
- Fix postqueue: remove -p flag (conflicts with -j)
- Add stderr logging for queue errors
This commit is contained in:
Christoph Haas 2026-03-22 01:40:06 +01:00
parent d56722ddb9
commit 060f88dffe
3 changed files with 14 additions and 8 deletions

View file

@ -1,6 +1,7 @@
package handlers
import (
"log"
"net/http"
"github.com/imc-vibe/backend/internal/mail"
@ -20,7 +21,8 @@ func (h *QueueHandler) List(w http.ResponseWriter, r *http.Request) {
entries, err := mail.GetQueue()
if err != nil {
Error(w, http.StatusServiceUnavailable, "mail queue tools not available")
log.Printf("Queue error: %v", err)
Error(w, http.StatusServiceUnavailable, "failed to get queue: "+err.Error())
return
}

View file

@ -26,7 +26,7 @@ func GetLogs(hours int, filter string) ([]LogEntry, error) {
"--no-pager",
}
cmd := exec.CommandContext(ctx, "journalctl", args...)
cmd := exec.CommandContext(ctx, "/usr/bin/journalctl", args...)
var out bytes.Buffer
cmd.Stdout = &out

View file

@ -4,6 +4,7 @@ import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"os/exec"
"regexp"
"strconv"
@ -22,12 +23,15 @@ type QueueEntry struct {
var queueLineRegex = regexp.MustCompile(`^([A-Fa-f0-9]+)\s+(\d+)\s+(\w+)\s+([A-Za-z]+\s+\d+\s+[\d:]+)\s+([^\s]+)\s+(.+)$`)
func GetQueue() ([]QueueEntry, error) {
cmd := exec.Command("postqueue", "-p", "-j")
cmd := exec.Command("/usr/sbin/postqueue", "-j")
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
return nil, err
err := cmd.Run()
if err != nil {
return nil, fmt.Errorf("/usr/sbin/postqueue -j: %v (stderr: %s)", err, stderr.String())
}
var entries []QueueEntry
@ -77,7 +81,7 @@ func GetQueue() ([]QueueEntry, error) {
}
func RequeueMail(id string) error {
cmd := exec.Command("postqueue", "-f", "-v")
cmd := exec.Command("/usr/sbin/postqueue", "-f", "-v")
var out bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &out
@ -89,12 +93,12 @@ func RequeueMail(id string) error {
}
func DeleteFromQueue(id string) error {
cmd := exec.Command("postsuper", "-d", id)
cmd := exec.Command("/usr/sbin/postsuper", "-d", id)
return cmd.Run()
}
func GetQueueCount() (int, error) {
cmd := exec.Command("postqueue", "-p")
cmd := exec.Command("/usr/sbin/postqueue", "-j")
var out bytes.Buffer
cmd.Stdout = &out