commit 28ab90e4ff96fc81af1ced9124813738d0172da5
parent 94f603268199b0d5f59591ccff9ed5fdd079b7f2
Author: Jaromil <jaromil@dyne.org>
Date: Wed, 14 Jan 2015 16:07:29 +0100
fixes to anonymous mailing via mixmaster
Diffstat:
3 files changed, 47 insertions(+), 41 deletions(-)
diff --git a/src/zlibs/addressbook b/src/zlibs/addressbook
@@ -137,11 +137,15 @@ learn() {
[[ "$1" = "" ]] || { what="$1" }
func "learning from $what"
- case ${what} in
+ # zero e_addr map before using e_parse
+ e_addr=()
+ case ${what} in
+
sender|from) # simple: one address only on From:
-
+
# now e_name e_mail and e_parsed are filled in
+
awk '{ print $0 } /^$/ { exit }' | e_parse From
# no need to cycle, From is always only one field
@@ -173,16 +177,7 @@ learn() {
awk '{ print $0 } /^$/ { exit }' | e_parse To
- [[ $DRYRUN == 0 ]] && {
- # complex: more addresses in To: and Cc:
- for _e in ${(k)e_addr}; do
- _n="${e_addr[$_e]}"
- insert_address "$_e" "$_n"
- [[ $? = 0 ]] && { act "$list <- $_n <${_e}>" }
- done
- }
-
- e_parse Cc
+ awk '{ print $0 } /^$/ { exit }' | e_parse Cc
[[ $DRYRUN == 0 ]] && {
# complex: more addresses in To: and Cc:
diff --git a/src/zlibs/email b/src/zlibs/email
@@ -303,7 +303,7 @@ send() {
return 1 }
for qbody in ${(f)queue_outbox}; do
-
+ func "processing outbox queue: $qbody"
# clean interrupt
[[ $global_quit = 1 ]] && {
error "User break requested, interrupting operation"
@@ -317,6 +317,22 @@ send() {
_tmp_create
anoncfg="$JAROTMP"
+ _tmp_create
+ msmtpcfg="$JAROTMP"
+ cat <<EOF > $msmtpcfg
+account default
+from ${email}
+user ${login}
+host ${smtp}
+port ${smtp_port}
+tls on
+tls_starttls on
+tls_certcheck off
+logfile "${MAILDIRS}/logs/msmtp.log"
+auth ${auth}
+password ${password}
+EOF
+
cat <<EOF > "$anoncfg"
REMAIL n
POOLSIZE 0
@@ -329,17 +345,20 @@ TYPE1LIST /var/lib/mixmaster/used-stats/rlist.txt
TYPE2REL /var/lib/mixmaster/used-stats/mlist.txt
TYPE2LIST /var/lib/mixmaster/used-stats/type2.list
-SENDMAIL=msmtp -C $tmp -t
+SENDMAIL=msmtp -C $msmtpcfg -t
ERRLOG=${MAILDIRS}/logs/mixmaster.log
VERBOSE=2
EOF
act "Sending out anonymous email via mixmaster"
- recipients=(`hdr $qbody | ${WORKDIR}/bin/fetchaddr -a -x to | cut -d, -f1`)
- recipients+=(`hdr $qbody | ${WORKDIR}/bin/fetchaddr -a -x cc | cut -d, -f1`)
- for r in ${recipients}; do
- act "Sending to: ${r}"
+ e_addr=()
+ hdr $qbody | e_parse To
+ hdr $qbody | e_parse Cc
+ # cycle through recipients
+ for _e in ${(k)e_addr}; do
+ _n="${(v)e_addr[$_e]}"
+ act "Sending to: $_n <$_e>"
# parse subject line
anonsubj=`hdr "$qbody" | awk '
@@ -347,23 +366,13 @@ EOF
act "Subject: $anonsubj"
# strip headers and send via mixmaster
- cat "$qbody" | awk '
-BEGIN { head=1 }
-/^To: / { print $0; next }
-/^Cc: / { print $0; next }
-/^Bcc: / { print $0; next }
-/^Date: / { print $0; next }
-/^Subject: / { print $0; next }
-/^In-Reply-To: / { print $0; next }
-/^References: / { print $0; next }
-/^Mime-Version: / { print $0; next }
-/^Content-Type: / { print $0; next }
-/^Content-Disposition: / { print $0; next }
-/^$/ { head=0 }
-{ if(head==0) print $0 }
-' | tee -a "$qbody.anon" | mixmaster --config=$anoncfg -m --to="$r" --subject="$anonsubj"
+ awk '
+BEGIN { body=0 }
+/^$/ { body=1 }
+{ if(body==1) print $0 }
+' "$qbody" \
+ | mixmaster --config="$anoncfg" -m --to="$_e" --subject="$anonsubj"
res=$?
- mv "$qbody.anon" "$qbody"
func "mixmaster returns $res"
done
diff --git a/src/zlibs/helpers b/src/zlibs/helpers
@@ -155,16 +155,18 @@ e_parse() {
# use RFC822 parser in fetchaddr
e_parsed=`${WORKDIR}/bin/fetchaddr ${=_arg} -a`
- e_addr=()
for _p in ${(f)e_parsed}; do
_e="${(Q)_p[(ws:,:)1]:l}"
# check if an email address was found
- isemail "$_e" && {
- _n="${(Q)_p[(ws:,:)2]}"
- # reformat output using comma as separator
- e_addr+=("$_e" "$_n")
- func "parsed: $_n <$_e>"
- }
+ isemail "$_e" || continue
+ # avoid duplicates
+ [[ "${(v)e_addr[$_e]}" = "" ]] || continue
+
+ # extract also the name using comma separator
+ _n="${(Q)_p[(ws:,:)2]}"
+
+ e_addr+=("$_e" "$_n")
+ func "parsed: $_n <$_e>"
done
# no emails found