Improve exitrace parameter naming for better usability
- Add descriptive parameter names: -FROM, -TO, -DOMAIN, -MSGID, -GREP - Maintain backwards compatibility with old short forms (-f, -t, -D, -m, -G) - Update README with new examples and backwards compatibility section - More intuitive and self-documenting command line interface 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+149
-55
@@ -1,37 +1,57 @@
|
|||||||
# exitrace
|
# exitrace
|
||||||
|
|
||||||
Exim-Log-Trace & Status für einzelne Mails/Adressen/Domain-Ziele:
|
**Remote Exim-Log-Trace & Status für einzelne Mails/Adressen/Domain-Ziele**
|
||||||
Durchsucht Exim-Logs nach Message-IDs, gruppiert alle Ereignisse und klassifiziert den Delivery-Status
|
|
||||||
|
Führt Exim-Log-Analyse remote auf `logger.in.nessus.at` aus, wo sich die Exim-Logs befinden.
|
||||||
|
Durchsucht Logs nach Message-IDs, gruppiert alle Ereignisse und klassifiziert den Delivery-Status.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Sucht in `/var/log/easyname/YYYY/MM/YYYY-MM-DD.log(.gz)` (konfigurierbar via `$LOGROOT`)
|
- **Remote-Ausführung**: Automatische SSH-Verbindung zu `logger.in.nessus.at`
|
||||||
- Zeitfenster: letzte N Stunden/Tage ODER konkretes Datum/Datumsbereich
|
- **Zeitfenster**: Letzte N Stunden/Tage ODER konkretes Datum/Datumsbereich
|
||||||
- Filter: Absender, Empfänger (Regex), Domain, Message-ID, zusätzliche Regex
|
- **Filter**: Absender, Empfänger (Regex), Domain, Message-ID, zusätzliche Regex
|
||||||
- Gruppiert alle Treffer pro Exim-Message-ID und fasst Status zusammen
|
- **Gruppierung**: Alle Treffer pro Exim-Message-ID mit Status-Zusammenfassung
|
||||||
- **Status-Klassifikation**: OK / PARTIAL / DELAY / FAIL / UNKNOWN
|
- **Status-Klassifikation**: OK / PARTIAL / DELAY / FAIL / UNKNOWN
|
||||||
- **MX-Records**: Optional DNS-Abfragen für Ziel-Domain (--mx)
|
- **MX-Records**: Optional DNS-Abfragen für Ziel-Domain (--mx)
|
||||||
- Markiert häufige Fehler (z. B. "all hosts for 'domain' have been failing")
|
- **Failure-Detection**: Markiert häufige Fehler (z.B. "all hosts failing")
|
||||||
- Sortierte chronologische Ausgabe pro Message-ID
|
- **Chronologische Ausgabe**: Sortiert nach Message-ID Erstkontakt
|
||||||
- **Komprimierte Logs**: Automatischer Support für .gz-Archive
|
- **Komprimierte Logs**: Automatischer Support für .gz-Archive
|
||||||
|
- **Smart Connection**: Verwendet `go logger` oder `ssh ${LUSER}@logger.in.nessus.at`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
1. Repository klonen oder Skript kopieren:
|
Via Installer (empfohlen):
|
||||||
```bash
|
```bash
|
||||||
git clone <gitea-url>/esn-support-bash-snippets.git
|
cd ~/.dev/esn-support-bash-snippets
|
||||||
cd esn-support-bash-snippets/legacy/exitrace
|
./install.sh
|
||||||
chmod +x exitrace.sh
|
# Dann: 3) Legacy Tools auswählen und exitrace installieren
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Abhängigkeiten:
|
Manuelle Installation:
|
||||||
- Standard Unix-Tools (awk, grep, date, zcat)
|
```bash
|
||||||
|
git clone <repo-url>/esn-support-bash-snippets.git ~/.dev/esn-support-bash-snippets
|
||||||
|
cd ~/.dev/esn-support-bash-snippets/legacy/exitrace
|
||||||
|
chmod +x exitrace.sh
|
||||||
|
ln -sf ~/.dev/esn-support-bash-snippets/legacy/exitrace/exitrace.sh ~/bin/exitrace
|
||||||
|
```
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- **LUSER Environment Variable** ODER installiertes `go` Tool
|
||||||
|
- **SSH-Zugang** zu `logger.in.nessus.at`
|
||||||
|
- Standard Unix-Tools (awk, grep, date, ssh/scp)
|
||||||
- `dig` (optional, für --mx Feature)
|
- `dig` (optional, für --mx Feature)
|
||||||
- Lesezugriff auf `/var/log/easyname/` (oder custom `$LOGROOT`)
|
|
||||||
|
**Setup:**
|
||||||
|
```bash
|
||||||
|
export LUSER="dein-username"
|
||||||
|
# Oder in ~/.bash_env für permanente Konfiguration
|
||||||
|
echo 'export LUSER="dein-username"' >> ~/.bash_env
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -44,24 +64,43 @@ exitrace
|
|||||||
(durchsucht heutiges Log ohne Filter)
|
(durchsucht heutiges Log ohne Filter)
|
||||||
|
|
||||||
### Beispiele
|
### Beispiele
|
||||||
|
|
||||||
|
**Häufige Use-Cases:**
|
||||||
```bash
|
```bash
|
||||||
# Mail-Trace einer konkreten Message-ID
|
# Mail-Trace für spezifischen Absender zu t-online.de (letzte 48h)
|
||||||
exitrace -m 1uwRvz-000Fz2-CI
|
exitrace -FROM franziskus@adjuva.info -DOMAIN t-online.de -H 48
|
||||||
|
|
||||||
# Alle Mails von bestimmtem Absender in den letzten 48 Stunden
|
# Alle Mails an bestimmte Domain in Zeitspanne
|
||||||
exitrace -f sender@example.com -H 48
|
exitrace -DOMAIN gmx.de -r 2025-09-10..2025-09-11
|
||||||
|
|
||||||
# Empfänger-Domain in Zeitspanne
|
# Konkrete Message-ID verfolgen
|
||||||
exitrace -D example.de -r 2025-09-09..2025-09-11
|
exitrace -MSGID 1uwRvz-000Fz2-CI
|
||||||
|
|
||||||
# Regex-Filter auf Empfänger + konkretes Datum
|
# Regex-Filter auf Empfänger + MX-Records anzeigen
|
||||||
exitrace -t '.*@example\.de' -d 2025-09-10
|
exitrace -TO '.*@gmail\.com' -d 2025-09-11 --mx
|
||||||
|
|
||||||
# Kombinierte Filter: Absender + Domain + Zeitfenster + MX-Info
|
# Kombinierte Filter: Absender + Domain + Zeitfenster
|
||||||
exitrace -f sender@example.com -D example.de -H 48 --mx
|
exitrace -FROM noreply@company.com -DOMAIN outlook.com -H 24
|
||||||
|
```
|
||||||
|
|
||||||
# Dry-Run: zeigt nur, welche Logfiles durchsucht würden
|
**Debugging & Analyse:**
|
||||||
|
```bash
|
||||||
|
# Dry-Run: zeigt nur welche Logfiles durchsucht würden
|
||||||
exitrace -n -H 24
|
exitrace -n -H 24
|
||||||
|
|
||||||
|
# Alle Mails von Domain in letzten 7 Tagen
|
||||||
|
exitrace -FROM '.*@problematic-domain\.com' -DAYS 7
|
||||||
|
|
||||||
|
# Zusätzlicher Regex-Filter
|
||||||
|
exitrace -DOMAIN example.com -GREP "550.*blocked" -H 12
|
||||||
|
```
|
||||||
|
|
||||||
|
**Backwards Compatibility:**
|
||||||
|
```bash
|
||||||
|
# Alte Parameter funktionieren weiterhin
|
||||||
|
exitrace -f sender@domain.com -D example.de -H 48
|
||||||
|
exitrace -m 1uwRvz-000Fz2-CI
|
||||||
|
exitrace -t '.*@gmail\.com' --mx
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -78,34 +117,55 @@ Zeitfenster (eine Option wählen):
|
|||||||
-r, --range A..B Datumsbereich (inkl.): YYYY-MM-DD..YYYY-MM-DD
|
-r, --range A..B Datumsbereich (inkl.): YYYY-MM-DD..YYYY-MM-DD
|
||||||
|
|
||||||
Filter (beliebig kombinierbar):
|
Filter (beliebig kombinierbar):
|
||||||
-f, --from ADDR Envelope-From / "from <...>"
|
-FROM, --from ADDR Envelope-From / "from <...>" (alias: -f)
|
||||||
-t, --to REGEX Empfänger (Regex, matcht nach " for <rcpt>" oder in "** ...")
|
-TO, --to REGEX Empfänger (Regex, matcht nach " for <rcpt>" oder in "** ...") (alias: -t)
|
||||||
-D, --domain NAME Ziel-Domain (z. B. example.de), prüft auf Zustellungen/Fehler dorthin
|
-DOMAIN, --domain NAME Ziel-Domain (z. B. example.de), prüft auf Zustellungen/Fehler dorthin (alias: -D)
|
||||||
-m, --msgid ID Exim-Message-ID (z. B. 1uwRvz-000Fz2-CI)
|
-MSGID, --msgid ID Exim-Message-ID (z. B. 1uwRvz-000Fz2-CI) (alias: -m)
|
||||||
-G, --grep REGEX Zusätzlicher Regex auf Logzeilen
|
-GREP, --grep REGEX Zusätzlicher Regex auf Logzeilen (alias: -G)
|
||||||
|
|
||||||
Sonstiges:
|
Sonstiges:
|
||||||
--mx Zeigt MX-Einträge (und A/AAAA) für --domain
|
--mx Zeigt MX-Einträge (und A/AAAA) für --domain
|
||||||
-n, --dry-run Zeigt nur, welche Logfiles untersucht würden
|
-n, --dry-run Zeigt nur, welche Logfiles untersucht würden
|
||||||
-h, --help Diese Hilfe
|
-h, --help Diese Hilfe
|
||||||
|
|
||||||
|
Remote Execution:
|
||||||
|
Wird automatisch remote auf logger.in.nessus.at ausgeführt.
|
||||||
|
Verwendet 'go logger' oder 'ssh ${LUSER}@logger.in.nessus.at'.
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Beispielausgabe
|
## Beispielausgabe
|
||||||
|
|
||||||
|
### Erfolgreiche Zustellung
|
||||||
```
|
```
|
||||||
[OK] ID=1uwRvz-000Fz2-CI | First=2025-09-10 14:32:15 | From=sender@example.com | Rcpts=recipient@example.de | Delivered=1 Deferred=0 Failed=0
|
[OK] ID=1v2K8X-0004Zm-BC | First=2025-09-11 08:32:15 | From=franziskus@adjuva.info | Rcpts=user@t-online.de | Delivered=1 Deferred=0 Failed=0
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
ID: 1uwRvz-000Fz2-CI
|
ID: 1v2K8X-0004Zm-BC
|
||||||
First: 2025-09-10 14:32:15
|
First: 2025-09-11 08:32:15
|
||||||
Last: 2025-09-10 14:32:47
|
Last: 2025-09-11 08:32:47
|
||||||
From: sender@example.com
|
From: franziskus@adjuva.info
|
||||||
Rcpts: recipient@example.de
|
Rcpts: user@t-online.de
|
||||||
Status: OK (Delivered=1, Deferred=0, Failed=0)
|
Status: OK (Delivered=1, Deferred=0, Failed=0)
|
||||||
Log:
|
Log:
|
||||||
2025-09-10 14:32:15 | <= sender@example.com H=mail.example.com [10.0.0.1] P=esmtp S=1234
|
2025-09-11 08:32:15 | <= franziskus@adjuva.info H=mail.adjuva.info [10.0.0.1] P=esmtp S=2156
|
||||||
2025-09-10 14:32:47 | => recipient@example.de <recipient@example.de> R=dnslookup T=remote_smtp H=mx.example.de [10.0.0.2]
|
2025-09-11 08:32:47 | => user@t-online.de <user@t-online.de> R=dnslookup T=remote_smtp H=mx01.t-online.de [217.5.206.120]
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fehlgeschlagene Zustellung
|
||||||
|
```
|
||||||
|
[FAIL] ID=1v2L9Y-0005Ap-DE | First=2025-09-11 09:15:32 | From=franziskus@adjuva.info | Rcpts=blocked@t-online.de | Delivered=0 Deferred=0 Failed=1
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
ID: 1v2L9Y-0005Ap-DE
|
||||||
|
First: 2025-09-11 09:15:32
|
||||||
|
Last: 2025-09-11 09:15:55
|
||||||
|
From: franziskus@adjuva.info
|
||||||
|
Rcpts: blocked@t-online.de
|
||||||
|
Status: FAIL (Delivered=0, Deferred=0, Failed=1)
|
||||||
|
Log:
|
||||||
|
2025-09-11 09:15:32 | <= franziskus@adjuva.info H=mail.adjuva.info [10.0.0.1] P=esmtp S=1847
|
||||||
|
2025-09-11 09:15:55 | ** blocked@t-online.de <blocked@t-online.de> R=dnslookup T=remote_smtp H=mx01.t-online.de [217.5.206.120]: SMTP error from remote mail server after RCPT TO:<blocked@t-online.de>: 550 requested action not taken: mailbox unavailable
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -138,32 +198,66 @@ Bei Delivery-Stalls:
|
|||||||
|
|
||||||
Nach Installation über `./install.sh` ist das Script direkt verfügbar:
|
Nach Installation über `./install.sh` ist das Script direkt verfügbar:
|
||||||
```bash
|
```bash
|
||||||
exitrace -m 1uwRvz-000Fz2-CI
|
exitrace -FROM franziskus@adjuva.info -DOMAIN t-online.de -H 48
|
||||||
```
|
```
|
||||||
|
|
||||||
Das Installationsscript erstellt automatisch einen Symlink in `~/bin` (ohne `.sh` Extension).
|
**LUSER Environment Variable setzen (wichtig!):**
|
||||||
|
|
||||||
Umgebungsvariable für abweichenden Logpfad:
|
|
||||||
```bash
|
```bash
|
||||||
export LOGROOT="/var/log/custom"
|
# Temporär
|
||||||
|
export LUSER="dein-username"
|
||||||
|
|
||||||
|
# Permanent in ~/.bash_env (empfohlen)
|
||||||
|
echo 'export LUSER="dein-username"' >> ~/.bash_env
|
||||||
|
source ~/.bash_env
|
||||||
```
|
```
|
||||||
|
|
||||||
Logger-spezifisch ggf. in `~/.profile` ergänzen:
|
**Verbindungstest:**
|
||||||
```bash
|
```bash
|
||||||
cd /var/log/easyname/$(date +%Y)/$(date +%m)/
|
# Test ob go-Tool verfügbar
|
||||||
|
go logger
|
||||||
|
|
||||||
|
# Test ob SSH funktioniert
|
||||||
|
ssh ${LUSER}@logger.in.nessus.at "hostname"
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Notes
|
## Troubleshooting
|
||||||
|
|
||||||
- Das Skript analysiert Exim-Logs im Format `/var/log/easyname/YYYY/MM/YYYY-MM-DD.log(.gz)`
|
### Häufige Probleme
|
||||||
- **Komprimierte Archive**: Automatische Erkennung und Verarbeitung von .gz-Dateien
|
|
||||||
- **Status-Logik**: Basiert auf SMTP-Response-Codes und typischen Exim-Nachrichten
|
**"LUSER Variable nicht gesetzt"**
|
||||||
- Bei größeren Zeiträumen kann die Verarbeitung länger dauern
|
```bash
|
||||||
- Regex-Filter (-t, -G) sollten sorgfältig formuliert werden, um false positives zu vermeiden
|
export LUSER="dein-username"
|
||||||
- Die Ausgabe ist nach chronologischem Erstkontakt der Message-ID sortiert
|
```
|
||||||
- **MX-Feature**: Benötigt `dig` für DNS-Abfragen
|
|
||||||
- Exit-Codes: 0 = OK (auch bei 0 Treffern), 1 = Fehlerhafte Parameter/Umgebung
|
**"Permission denied" oder SSH-Fehler**
|
||||||
|
- Kerberos-Login: `kinit ${LUSER}@NESSUS.AT`
|
||||||
|
- SSH-Keys prüfen oder `go` Tool installieren
|
||||||
|
|
||||||
|
**"Keine Logfiles gefunden"**
|
||||||
|
- Zeitfenster zu eng: `-H 48` oder `-DAYS 3` probieren
|
||||||
|
- Dry-run verwenden: `exitrace -n -H 24`
|
||||||
|
|
||||||
|
**AWK-Errors**
|
||||||
|
- Regex-Syntax prüfen bei `-t` und `-G` Optionen
|
||||||
|
- Sonderzeichen escapen: `.*@example\.com`
|
||||||
|
|
||||||
|
### Performance-Tipps
|
||||||
|
|
||||||
|
- **Kleine Zeitfenster**: `-H 24` statt `-DAYS 7`
|
||||||
|
- **Spezifische Filter**: `-f` oder `-m` sind schneller als `-t`
|
||||||
|
- **Dry-Run nutzen**: `-n` zeigt Suchbereich ohne Ausführung
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Technical Notes
|
||||||
|
|
||||||
|
- **Remote-Ausführung**: Komplettes Script wird via SSH Heredoc übertragen
|
||||||
|
- **Log-Format**: `/var/log/easyname/YYYY/MM/YYYY-MM-DD.log(.gz)` auf logger
|
||||||
|
- **Status-Logik**: Basiert auf SMTP-Response-Codes und Exim-Nachrichten
|
||||||
|
- **Komprimierte Archive**: Automatische .gz-Verarbeitung via `zcat`
|
||||||
|
- **Chronologische Sortierung**: Nach Message-ID Erstkontakt
|
||||||
|
- **Exit-Codes**: 0 = OK (auch bei 0 Treffern), 1 = Parameter-/Verbindungsfehler
|
||||||
|
|
||||||
Built with the help of Claude Code
|
Built with the help of Claude Code
|
||||||
+18
-18
@@ -33,11 +33,11 @@ Zeitfenster (eine Option wählen):
|
|||||||
-r, --range A..B Datumsbereich (inkl.): YYYY-MM-DD..YYYY-MM-DD
|
-r, --range A..B Datumsbereich (inkl.): YYYY-MM-DD..YYYY-MM-DD
|
||||||
|
|
||||||
Filter (beliebig kombinierbar):
|
Filter (beliebig kombinierbar):
|
||||||
-f, --from ADDR Envelope-From / "from <...>"
|
-FROM, --from ADDR Envelope-From / "from <...>"
|
||||||
-t, --to REGEX Empfänger (Regex, matcht ' for <rcpt>' oder in '** rcpt')
|
-TO, --to REGEX Empfänger (Regex, matcht ' for <rcpt>' oder in '** rcpt')
|
||||||
-D, --domain NAME Ziel-Domain (z. B. example.de)
|
-DOMAIN, --domain NAME Ziel-Domain (z. B. example.de)
|
||||||
-m, --msgid ID Exim-Message-ID (z. B. 1uwRvz-000Fz2-CI)
|
-MSGID, --msgid ID Exim-Message-ID (z. B. 1uwRvz-000Fz2-CI)
|
||||||
-G, --grep REGEX Zusätzlicher Regex auf Logzeilen
|
-GREP, --grep REGEX Zusätzlicher Regex auf Logzeilen
|
||||||
|
|
||||||
Sonstiges:
|
Sonstiges:
|
||||||
--mx Zeigt MX-Einträge (und A/AAAA) für --domain
|
--mx Zeigt MX-Einträge (und A/AAAA) für --domain
|
||||||
@@ -45,9 +45,9 @@ Sonstiges:
|
|||||||
-h, --help Diese Hilfe
|
-h, --help Diese Hilfe
|
||||||
|
|
||||||
Beispiele:
|
Beispiele:
|
||||||
exitrace -f sender@example.com -D example.de -H 48
|
exitrace -FROM sender@example.com -DOMAIN example.de -H 48
|
||||||
exitrace -m 1uwRvz-000Fz2-CI
|
exitrace -MSGID 1uwRvz-000Fz2-CI
|
||||||
exitrace -t '.*@example.de' -r 2025-09-09..2025-09-11 --mx
|
exitrace -TO '.*@example.de' -r 2025-09-09..2025-09-11 --mx
|
||||||
|
|
||||||
Note: Wird automatisch remote auf logger.in.nessus.at ausgeführt.
|
Note: Wird automatisch remote auf logger.in.nessus.at ausgeführt.
|
||||||
USAGE
|
USAGE
|
||||||
@@ -118,23 +118,23 @@ while [[ $# -gt 0 ]]; do
|
|||||||
validate_date_range "$DATE_RANGE"
|
validate_date_range "$DATE_RANGE"
|
||||||
REMOTE_ARGS+=("$1" "$2")
|
REMOTE_ARGS+=("$1" "$2")
|
||||||
shift 2 ;;
|
shift 2 ;;
|
||||||
-f|--from)
|
-FROM|--from|-f)
|
||||||
FROM="${2:-}"
|
FROM="${2:-}"
|
||||||
REMOTE_ARGS+=("$1" "$2")
|
REMOTE_ARGS+=("$1" "$2")
|
||||||
shift 2 ;;
|
shift 2 ;;
|
||||||
-t|--to)
|
-TO|--to|-t)
|
||||||
TO_REGEX="${2:-}"
|
TO_REGEX="${2:-}"
|
||||||
REMOTE_ARGS+=("$1" "$2")
|
REMOTE_ARGS+=("$1" "$2")
|
||||||
shift 2 ;;
|
shift 2 ;;
|
||||||
-D|--domain)
|
-DOMAIN|--domain|-D)
|
||||||
TARGET_DOMAIN="${2:-}"
|
TARGET_DOMAIN="${2:-}"
|
||||||
REMOTE_ARGS+=("$1" "$2")
|
REMOTE_ARGS+=("$1" "$2")
|
||||||
shift 2 ;;
|
shift 2 ;;
|
||||||
-m|--msgid)
|
-MSGID|--msgid|-m)
|
||||||
MSGID="${2:-}"
|
MSGID="${2:-}"
|
||||||
REMOTE_ARGS+=("$1" "$2")
|
REMOTE_ARGS+=("$1" "$2")
|
||||||
shift 2 ;;
|
shift 2 ;;
|
||||||
-G|--grep)
|
-GREP|--grep|-G)
|
||||||
GREPEXTRA="${2:-}"
|
GREPEXTRA="${2:-}"
|
||||||
REMOTE_ARGS+=("$1" "$2")
|
REMOTE_ARGS+=("$1" "$2")
|
||||||
shift 2 ;;
|
shift 2 ;;
|
||||||
@@ -284,11 +284,11 @@ while [[ $# -gt 0 ]]; do
|
|||||||
-DAYS|--days) DAYS="${2:-}"; shift 2 ;;
|
-DAYS|--days) DAYS="${2:-}"; shift 2 ;;
|
||||||
-d|--date) DATE_ONE="${2:-}"; shift 2 ;;
|
-d|--date) DATE_ONE="${2:-}"; shift 2 ;;
|
||||||
-r|--range) DATE_RANGE="${2:-}"; shift 2 ;;
|
-r|--range) DATE_RANGE="${2:-}"; shift 2 ;;
|
||||||
-f|--from) FROM="${2:-}"; shift 2 ;;
|
-FROM|--from|-f) FROM="${2:-}"; shift 2 ;;
|
||||||
-t|--to) TO_REGEX="${2:-}"; shift 2 ;;
|
-TO|--to|-t) TO_REGEX="${2:-}"; shift 2 ;;
|
||||||
-D|--domain) TARGET_DOMAIN="${2:-}"; shift 2 ;;
|
-DOMAIN|--domain|-D) TARGET_DOMAIN="${2:-}"; shift 2 ;;
|
||||||
-m|--msgid) MSGID="${2:-}"; shift 2 ;;
|
-MSGID|--msgid|-m) MSGID="${2:-}"; shift 2 ;;
|
||||||
-G|--grep) GREPEXTRA="${2:-}"; shift 2 ;;
|
-GREP|--grep|-G) GREPEXTRA="${2:-}"; shift 2 ;;
|
||||||
--mx) WANT_MX=1; shift ;;
|
--mx) WANT_MX=1; shift ;;
|
||||||
-n|--dry-run) DRYRUN=1; shift ;;
|
-n|--dry-run) DRYRUN=1; shift ;;
|
||||||
*) shift ;;
|
*) shift ;;
|
||||||
|
|||||||
Reference in New Issue
Block a user