mhl and mhbuild ignore to long lines
[mmh] / uip / mhsign.sh
index f28c0fe..44b3870 100755 (executable)
@@ -22,10 +22,11 @@ if [ -z "$userid" ] ; then
        userid="`mhparam pgpkey`"
 fi
 if [ -z "$userid" ] ; then
-       userid="`gpg --list-secret-keys --with-colons 2>/dev/null |
+       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 +%Y-%m-%d\`"'" {
+                               $7=="" || $7 > "'"\`date +%s\`"'" {
                                        print $5; exit;
                                }
                        '`"
@@ -100,6 +101,12 @@ lookupkeyring() {
        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=
@@ -109,16 +116,18 @@ lookupkeys() {
                return 1
        fi
 
-       whom -ali -tocc -nobcc "$1" | while read i ; 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
-               # extract the actual address
-               format='%<{error}%{error}: %{text}%|%(addr{text})%>'
-               i=`%libdir%/ap -form "=$format" "$i"`
                if k=`lookupkeyfile "$i"` ; then
                        KL="$KL $k"
                elif k=`lookupkeyring "$i"` ; then
@@ -173,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