X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhsign.sh;h=44b387081b386fcd4d4225245d975d134231d709;hp=ac56bc26ca103998b7d42600e4772d5a28b733ae;hb=HEAD;hpb=f45cdc98117a84f071759462c7ae212f4bc5ab2e diff --git a/uip/mhsign.sh b/uip/mhsign.sh index ac56bc2..44b3870 100755 --- a/uip/mhsign.sh +++ b/uip/mhsign.sh @@ -9,7 +9,7 @@ # will be removed and any "From " line will be indented for # best compatibility. Enforced for multipart messages. -usage="Usage: mhsign [-encrypt] [-mime] file" +usage="Usage: mhsign [-encrypt] [-mime] [-Version] [-help] file" # defaults usemime=n @@ -18,12 +18,20 @@ function=sign # find out the signing key userid="$MMHPGPKEY" -if [ "x$userid" = "x" ] ; then +if [ -z "$userid" ] ; then userid="`mhparam pgpkey`" fi -userid="`gpg --list-secret-keys --with-colons 2>/dev/null | - sed -n '/^sec/{p;q}' | cut -d: -f5`" -if [ "x$userid" = x ] ; then +if [ -z "$userid" ] ; then + userid="`gpg --list-secret-keys --with-colons --fixed-list-mode \ + 2>/dev/null | + grep '^sec' | sort -t: -k3,3nr -k 6,6nr | + awk -F: ' + $7=="" || $7 > "'"\`date +%s\`"'" { + print $5; exit; + } + '`" +fi +if [ -z "$userid" ] ; then echo "No secret key found" >&2 exit 1 fi @@ -89,10 +97,16 @@ lookupkeyring() { if [ $? != 0 ] ; then return 1 fi - echo "$key" | sed -n '/^pub/{p;q}' | cut -d: -f5 + echo "$key" | sed -n '/^pub:[^idre]:/{p;q;}' | cut -d: -f5 return 0 } +### Do a best guess at FQDN +mh_hostname() +{ + hostname -f 2>/dev/null || uname -n +} + ### lookupkeys file -- set $KL to list of recipient keys lookupkeys() { KL= @@ -101,13 +115,18 @@ lookupkeys() { echo "Encryption is not supported for BCCs" >&2 return 1 fi - - for i in `whom -ali -tocc -nobcc "$1"` ; do + + # extract the actual address + format='%<{error}%{error}: %{text}%|%(addr{text})%>' + addresses=`whom -ali -tocc -nobcc "$1" |sed 's_$_,_'` + addresses=`%libdir%/ap -form "=$format" "$addresses"` + + for i in $addresses ; do case "$i" in '|'*) echo "Ignoring pipe address" >&2 continue ;; *@*) ;; - *) i="$i@`hostname -f`" ;; + *) i="$i@`mh_hostname`" ;; esac if k=`lookupkeyfile "$i"` ; then KL="$KL $k" @@ -163,7 +182,7 @@ fixheaders() { ### newboundary -- output a suitable boundary marker newboundary() { - b=$$_`date|sed 's/[ : ]/_/g'` + b=$$_`LC_ALL=C date|sed 's/[ : ]/_/g'` for i in 0 x '=' _ + , Z 9 4 ; do if grep "^--$b" $TEMP/body >/dev/null 2>&1 ; then ## oops, bad boundary -- try again