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 package handlers
import ( import (
"log"
"net/http" "net/http"
"github.com/imc-vibe/backend/internal/mail" "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() entries, err := mail.GetQueue()
if err != nil { 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 return
} }

View file

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

View file

@ -4,6 +4,7 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt"
"os/exec" "os/exec"
"regexp" "regexp"
"strconv" "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+(.+)$`) 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) { func GetQueue() ([]QueueEntry, error) {
cmd := exec.Command("postqueue", "-p", "-j") cmd := exec.Command("/usr/sbin/postqueue", "-j")
var out bytes.Buffer var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out cmd.Stdout = &out
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil { err := cmd.Run()
return nil, err if err != nil {
return nil, fmt.Errorf("/usr/sbin/postqueue -j: %v (stderr: %s)", err, stderr.String())
} }
var entries []QueueEntry var entries []QueueEntry
@ -77,7 +81,7 @@ func GetQueue() ([]QueueEntry, error) {
} }
func RequeueMail(id string) error { func RequeueMail(id string) error {
cmd := exec.Command("postqueue", "-f", "-v") cmd := exec.Command("/usr/sbin/postqueue", "-f", "-v")
var out bytes.Buffer var out bytes.Buffer
cmd.Stdout = &out cmd.Stdout = &out
cmd.Stderr = &out cmd.Stderr = &out
@ -89,12 +93,12 @@ func RequeueMail(id string) error {
} }
func DeleteFromQueue(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() return cmd.Run()
} }
func GetQueueCount() (int, error) { func GetQueueCount() (int, error) {
cmd := exec.Command("postqueue", "-p") cmd := exec.Command("/usr/sbin/postqueue", "-j")
var out bytes.Buffer var out bytes.Buffer
cmd.Stdout = &out cmd.Stdout = &out