hi all, ich habe mir ein script gebaut was die passwd datei wieder korrigiert, wer den fehler also auch hat kann sich gern bei mir melden bzgl. des scriptes.
ich hoffe lc findet den fehler, warum nur einige zeilen korrekt in der datei stehen und die anderen falsch.
mfg
Ungetestet (!!!) Aber hier wäre ein von ChatGPT vorgeschlagenes Script
Bash
#!/bin/bash
# fix_dovecot_passwd.sh
# Korrigiert falsche Einträge in /etc/dovecot/passwd, bei denen der Mailpfad unvollständig ist.
PASSWD_FILE="/etc/dovecot/passwd"
BACKUP_FILE="/etc/dovecot/passwd.bak_$(date +%Y%m%d_%H%M%S)"
# Backup anlegen
cp "$PASSWD_FILE" "$BACKUP_FILE"
echo "Backup erstellt: $BACKUP_FILE"
# Datei zeilenweise prüfen und korrigieren
awk -F: '
{
# Prüfen, ob der 6. Feldteil (Home) fehlerhaft ist
if ($6 == "/var/mail") {
# Benutzername aus Feld 1 extrahieren (z. B. slu4300/8 aus userdb_mail-Pfad)
match($0, /userdb_mail=maildir:\/var\/mail\/([^/]+\/[0-9]+)/, m)
if (m[1] != "") {
# Homepfad korrekt zusammensetzen
$6 = "/var/mail/" m[1]
}
}
# korrigierte Zeile ausgeben
OFS=":"; print $0
}' "$PASSWD_FILE" > "${PASSWD_FILE}.fixed"
# Wenn das neue File gültig ist (nicht leer etc.), ersetzen
if [ -s "${PASSWD_FILE}.fixed" ]; then
mv "${PASSWD_FILE}.fixed" "$PASSWD_FILE"
echo "Korrektur abgeschlossen. Datei wurde aktualisiert."
else
echo "Fehler: Keine gültige Ausgabe erzeugt. Originaldatei bleibt unverändert."
rm -f "${PASSWD_FILE}.fixed"
fi
Alles anzeigen
Was das Script tut:
-
Legt eine Sicherung der Originaldatei an
-
Sucht Zeilen, wo
$6 == "/var/mail"ist -
Liest aus der
userdb_mail=maildir:/var/mail/...-Angabe den korrekten Unterpfad heraus -
Fügt ihn wieder in die 6. Spalte ein
-
Schreibt die korrigierte Datei zurück