blob: b20eeee17805d37fcf4f2f72c8942f2b64399b09 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#!/bin/bash
# mail2news-wrapper.sh - Privacy version
TEMP_DIR=$(mktemp -d)
RAW_EMAIL="$TEMP_DIR/raw_email.txt"
CLEANED_EMAIL="$TEMP_DIR/clean_email.txt"
# Leggi l'email da stdin
cat > "$RAW_EMAIL"
# Rimuovi la riga mbox "From " se presente
sed -i '1{/^From /d;}' "$RAW_EMAIL"
# === ESTRAI NEWSGROUP ===
NEWSGROUP=""
# Metodo 1: da X-Original-To header
ORIG_TO=$(grep -i "^X-Original-To:" "$RAW_EMAIL" | head -1)
if [ -n "$ORIG_TO" ]; then
NEWSGROUP=$(echo "$ORIG_TO" | sed -n 's/.*mail2news-[0-9]*-\([^@]*\)@.*/\1/p')
fi
# Metodo 2: da Delivered-To header
if [ -z "$NEWSGROUP" ]; then
DELIVERED_TO=$(grep -i "^Delivered-To:" "$RAW_EMAIL" | head -1)
if [ -n "$DELIVERED_TO" ]; then
NEWSGROUP=$(echo "$DELIVERED_TO" | sed -n 's/.*mail2news-[0-9]*-\([^@]*\)@.*/\1/p')
fi
fi
# Metodo 3: dall'header Newsgroups giĆ presente
if [ -z "$NEWSGROUP" ]; then
NEWSGROUP=$(grep -i "^Newsgroups:" "$RAW_EMAIL" | head -1 | sed 's/^[Nn]ewsgroups:[[:space:]]*//')
fi
# Metodo 4: da argomento passato da Postfix ($1)
if [ -z "$NEWSGROUP" ] && [ -n "$1" ]; then
NEWSGROUP=$(echo "$1" | sed -n 's/.*mail2news-[0-9]*-\([^@]*\)@.*/\1/p')
fi
# Se ancora non abbiamo il newsgroup, errore
if [ -z "$NEWSGROUP" ]; then
rm -rf "$TEMP_DIR"
exit 1
fi
# === COSTRUISCI L'EMAIL PULITA ===
grep -i "^From:" "$RAW_EMAIL" > "$CLEANED_EMAIL" || echo "From: anonymous@mail2news.tcpreset.net" > "$CLEANED_EMAIL"
grep -i "^Subject:" "$RAW_EMAIL" >> "$CLEANED_EMAIL" || echo "Subject: (No Subject)" >> "$CLEANED_EMAIL"
# Header Newsgroups
echo "Newsgroups: $NEWSGROUP" >> "$CLEANED_EMAIL"
# Header To
grep -i "^To:" "$RAW_EMAIL" >> "$CLEANED_EMAIL"
grep -i "^Message-ID:" "$RAW_EMAIL" >> "$CLEANED_EMAIL"
grep -i "^References:" "$RAW_EMAIL" >> "$CLEANED_EMAIL"
grep -i "^In-Reply-To:" "$RAW_EMAIL" >> "$CLEANED_EMAIL"
# Header X-*
grep -i "^X-Ed25519-Sig:" "$RAW_EMAIL" >> "$CLEANED_EMAIL"
grep -i "^X-Ed25519-Pub:" "$RAW_EMAIL" >> "$CLEANED_EMAIL"
grep -i "^X-No-Archive:" "$RAW_EMAIL" >> "$CLEANED_EMAIL"
# Header Face (VFACE identicon) - preserve folded continuation lines
awk '/^[Ff]ace:/{f=1;print;next} f==1 && /^[ \t]/{print;next} {f=0}' "$RAW_EMAIL" >> "$CLEANED_EMAIL"
echo "" >> "$CLEANED_EMAIL"
# Estrai il corpo
sed -n '/^$/,$p' "$RAW_EMAIL" | tail -n +2 >> "$CLEANED_EMAIL"
# Esegui mail2news
sudo -u mail2news /usr/local/bin/mail2news < "$CLEANED_EMAIL" 2>&1
RESULT=$?
# Pulisci
srm -rf "$TEMP_DIR"
exit $RESULT
|