Ignore emacs backup files
[fake-hwclock.git] / fake-hwclock
index f36a615..a8e72fa 100755 (executable)
@@ -6,7 +6,7 @@
 # NTP is still recommended on these machines to get to real time sync
 # once more of the system is up and running.
 #
-# Copyright 2012 Steve McIntyre <93sam@debian.org>
+# Copyright 2012-2016 Steve McIntyre <93sam@debian.org>
 #
 # License: GPLv2, see COPYING
 
@@ -14,21 +14,55 @@ if [ "$FILE"x = ""x ] ; then
     FILE=/etc/fake-hwclock.data
 fi
 
+# Midnight on the day of this release, used as a sanity check when
+# saving
+HWCLOCK_EPOCH="2016-04-15 00:00:00"
+HWCLOCK_EPOCH_SEC="1460678400"
+
 COMMAND=$1
 if [ "$COMMAND"x = ""x ] ; then
     COMMAND="save"
 fi
 
+FORCE=false
+if [ "$2"x = "force"x ] ; then
+    FORCE=true
+fi
+
 case $COMMAND in
     save)
-        date -u '+%Y-%m-%d %H:%M:%S' > $FILE;;
+        if [ -e $FILE ] ; then
+            NOW_SEC=$(date -u '+%s')
+            if $FORCE || [ $NOW_SEC -ge $HWCLOCK_EPOCH_SEC ] ; then
+                date -u '+%Y-%m-%d %H:%M:%S' > $FILE
+            else
+               echo "Time travel detected!"
+                echo "fake-hwclock release date is in the future: $HWCLOCK_EPOCH"
+                echo "Current system time: $(date -u '+%Y-%m-%d %H:%M:%S')"
+                echo "To force the saved system clock backwards in time anyway, use \"force\""
+            fi
+        else
+            date -u '+%Y-%m-%d %H:%M:%S' > $FILE
+        fi
+        ;;
     load)
         if [ -e $FILE ] ; then
-            date -u -s "`cat $FILE`"
+            SAVED="$(cat $FILE)"
+            SAVED_SEC=$(date -u -d "$SAVED" '+%s')
+            NOW_SEC=$(date -u '+%s')
+            if $FORCE || [ $NOW_SEC -le $SAVED_SEC ] ; then
+                date -u -s "$SAVED"
+            else
+                echo "Current system time: $(date -u '+%Y-%m-%d %H:%M:%S')"
+                echo "fake-hwclock saved clock information is in the past: $SAVED"
+                echo "To set system time to this saved clock anyway, use \"force\""
+            fi      
         else
             echo "Unable to read saved clock information: $FILE does not exist"
-        fi;;
+        fi
+        ;;
     *)
         echo $0: Unknown command $COMMAND
-        exit 1;;
+        exit 1
+        ;;
 esac