more portability fixes: GNU date and BSD date prognosticate differently.
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 12 Sep 2008 22:03:40 +0000 (18:03 -0400)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 12 Sep 2008 22:03:40 +0000 (18:03 -0400)
src/common
src/monkeysphere-server

index c8a7db65425523a59d84ec7aab094e384db96100..48739d92d8639056c59295cf6fba0585df162eec 100644 (file)
@@ -134,6 +134,54 @@ lock() {
     esac
 }
 
+
+# for portability, between gnu date and BSD date.
+# arguments should be:  number longunits format
+
+# e.g. advance_date 20 seconds +%F
+advance_date() {
+    local gnutry
+    local number="$1"
+    local longunits="$2"
+    local format="$3"
+    local shortunits
+
+    # try things the GNU way first 
+    if date -d "$number $longunits" "$format" >&/dev/null ; then
+       date -d "$number $longunits" "$format"
+    else
+       # otherwise, convert to (a limited version of) BSD date syntax:
+       case "$longunits" in
+           years)
+               shortunits=y
+               ;;
+           months)
+               shortunits=m
+               ;;
+           weeks)
+               shortunits=w
+               ;;
+           days)
+               shortunits=d
+               ;;
+           hours)
+               shortunits=H
+               ;;
+           minutes)
+               shortunits=M
+               ;;
+           seconds)
+               shortunits=S
+               ;;
+           *)
+               # this is a longshot, and will likely fail; oh well.
+               shortunits="$longunits"
+       esac
+       date "-v+${number}${shortunits}" "$format"
+    fi
+}
+
+
 # check that characters are in a string (in an AND fashion).
 # used for checking key capability
 # check_capability capability a [b...]
index e590f3cdd3469ab0104ce231ff054bed45542d20..b96a65986a7f516f5f5747f07da266c178fb6446 100755 (executable)
@@ -545,6 +545,7 @@ publish_server_key() {
     gpg_authentication "--keyserver $KEYSERVER --send-keys '0x${fingerprint}!'"
 }
 
+
 diagnostics() {
 #  * check on the status and validity of the key and public certificates
     local seckey
@@ -566,7 +567,7 @@ diagnostics() {
     curdate=$(date +%s)
     # warn when anything is 2 months away from expiration
     warnwindow='2 months'
-    warndate=$(date +%s -d "$warnwindow")
+    warndate=$(advance_date $warnwindow +%s)
 
     if ! id monkeysphere >/dev/null ; then
        echo "! No monkeysphere user found!  Please create a monkeysphere system user."
@@ -593,7 +594,7 @@ diagnostics() {
                echo "! Host key is expired."
                echo " - Recommendation: extend lifetime of key with 'monkeysphere-server extend-key'"
            elif (( "$expire" < "$warndate" )); then
-               echo "! Host key expires in less than $warnwindow:" $(date -d "$(( $expire - $curdate )) seconds" +%F)
+               echo "! Host key expires in less than $warnwindow:" $(advance_date $(( $expire - $curdate )) seconds +%F)
                echo " - Recommendation: extend lifetime of key with 'monkeysphere-server extend-key'"
            fi
        fi
@@ -619,7 +620,7 @@ diagnostics() {
                    echo "! User ID '$uid' is expired."
                        # FIXME: recommend a way to resolve this
                elif (( "$expire" < "$warndate" )); then
-                   echo "! User ID '$uid' expires in less than $warnwindow:" $(date -d "$(( $expire - $curdate )) seconds" +%F)                
+                   echo "! User ID '$uid' expires in less than $warnwindow:" $(advance_date $(( $expire - $curdate )) seconds +%F)             
                    # FIXME: recommend a way to resolve this
                fi
            fi