diff options
Diffstat (limited to '')
-rw-r--r-- | tests/deckard/contrib/libfaketime/src/timeprivacy | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/tests/deckard/contrib/libfaketime/src/timeprivacy b/tests/deckard/contrib/libfaketime/src/timeprivacy new file mode 100644 index 0000000..5fd6fd7 --- /dev/null +++ b/tests/deckard/contrib/libfaketime/src/timeprivacy @@ -0,0 +1,270 @@ +#!/bin/bash + +## Copyright (c) 2013, adrelanos at riseup dot net +## All rights reserved. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are met: +## +## 1. Redistributions of source code must retain the above copyright notice, this +## list of conditions and the following disclaimer. +## 2. Redistributions in binary form must reproduce the above copyright notice, +## this list of conditions and the following disclaimer in the documentation +## and/or other materials provided with the distribution. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +## ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +## (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#set -x + +SCRIPTNAME="$(basename $0)" + +usage() { + echo "$SCRIPTNAME + +Usage: $SCRIPTNAME [-h help] [-d day] [-m month] [-y year] [-i increment in seconds (0-60)] [-r random increment in seconds (0-60)] [-f history folder] +Example: $SCRIPTNAME -d 30 -m 12 -y 2013 -i 10 -f /tmp/$SCRIPTNAMEtest + sudo $SCRIPTNAME -d 30 -m 12 -y 2013 -r -f /tmp/$SCRIPTNAMEtest" +} + +_randomincrement="none" +_increment="none" + +while [ -n "$1" ]; do + case "$1" in + -h) + usage + exit 0 + ;; + -d) + _day="$2" + shift + ;; + -m) + _month="$2" + shift + ;; + -y) + _year="$2" + shift + ;; + -i) + _increment="$2" + shift + ;; + -r) + _randomincrement="$2" + shift + ;; + -f) + TIMEDIR="$2" + shift + ;; + *) + command="$(which $1)" + ## From now on the complete to-be wrapped command + its args + ## are stored in $@, which will expand like we want it for + ## handling quoted arguments with whitespaces in it, etc. + break + esac + shift +done + +if [ -z "$_day" ]; then + _day="$(date +"%d")" +fi + +if [ -z "$_month" ]; then + _month="$(date +"%m")" +fi + +if [ -z "$_year" ]; then + _year="$(date +"%Y")" +fi + +if [ "$_randomincrement" = "none" ] && [ "$_increment" = "none" ]; then + _increment="1" +fi + +if [ "$_randomincrement" = "none" ]; then + if [ -z "$_increment" ]; then + _increment="1" + fi +elif [ "$_increment" = "none" ]; then + if [ "$_randomincrement" = "" ]; then + echo "randomincrement must be a positive number." + exit 1 + else + ## random number between 1 and $_randomincrement + random_number="$(( 0+($(od -An -N2 -i /dev/random) )%($_randomincrement-0+1) ))" + _increment="$random_number" + fi +else + echo "You can not combine -r and -i." + exit 1 +fi + +if [ -z "$TIMEDIR" ]; then + TIMEDIR=~/.timeprivacy +fi + +nodigits="$(echo $_increment | sed 's/[[:digit:]]//g')" +if [ ! -z "$nodigits" ]; then + echo "increment is not a digit." + exit 1 +fi + +nodigits="$(echo $_year | sed 's/[[:digit:]]//g')" +if [ ! -z "$nodigits" ]; then + echo "_day is not a digit." + exit 1 +fi + +nodigits="$(echo $_year | sed 's/[[:digit:]]//g')" +if [ ! -z "$nodigits" ]; then + echo "year is not a digit." + exit 1 +fi + +nodigits="$(echo $_month | sed 's/[[:digit:]]//g')" +if [ ! -z "$nodigits" ]; then + echo "month is not a digit." + exit 1 +fi + +nodigits="$(echo $_day | sed 's/[[:digit:]]//g')" +if [ ! -z "$nodigits" ]; then + echo "day is not a digit." + exit 1 +fi + +nodigits="$(echo $_increment | sed 's/[[:digit:]]//g')" +if [ ! -z "$nodigits" ]; then + echo "increment is not a digit." + exit 1 +fi + +SECONDS_FILE="$TIMEDIR/seconds_file" +MINUTES_FILE="$TIMEDIR/minutes_file" +HOURS_FILE="$TIMEDIR/hours_file" + +#DAYS_FILE="$TIMEDIR/days_file" +#MONTHS_FILE="$TIMEDIR/months_file" +#YEARS_FILE="$TIMEDIR/years_file" + +#true "TIMEDIR: $TIMEDIR" +#true "year: $_year" +#true "month: $_month" +#true "day: $_day" +#true "_randomincrement: $_randomincrement" +#true "_increment: $_increment" + +read_date_file() { + if [ ! -d "$TIMEDIR" ]; then + mkdir -p "$TIMEDIR" + fi + + if [ ! -f "$SECONDS_FILE" ]; then + echo "0" > "$SECONDS_FILE" + fi + + if [ ! -f "$MINUTES_FILE" ]; then + echo "0" > "$MINUTES_FILE" + fi + + if [ ! -f "$HOURS_FILE" ]; then + echo "0" > "$HOURS_FILE" + fi + + #if [ ! -f "$DAYS_FILE" ]; then + #echo "1" > "$DAYS_FILE" + #fi + + #if [ ! -f "$MONTHS_FILE" ]; then + #echo "1" > "$MONTHS_FILE" + #fi + + #if [ ! -f "$YEARS_FILE" ]; then + #echo "2013" > "$YEARS_FILE" + #fi + + SECONDS="$(cat "$SECONDS_FILE")" + MINUTES="$(cat "$MINUTES_FILE")" + HOURS="$(cat "$HOURS_FILE")" + + if [ -z "$SECONDS" ]; then + SECONDS="0" + fi + + if [ -z "$MINUTES" ]; then + MINUTES="0" + fi + + if [ -z "$HOURS" ]; then + HOURS="0" + fi + + local nodigits="$(echo $SECONDS | sed 's/[[:digit:]]//g')" + if [ ! -z "$nodigits" ]; then + SECONDS="0" + fi + + local nodigits="$(echo $MINUTES | sed 's/[[:digit:]]//g')" + if [ ! -z "$nodigits" ]; then + MINUTES="0" + fi + + local nodigits="$(echo $HOURS | sed 's/[[:digit:]]//g')" + if [ ! -z "$nodigits" ]; then + HOURS="0" + fi + + SECONDS="$(expr "$SECONDS" + "$_increment")" || true + if [ "$SECONDS" -ge "60" ]; then + SECONDS="0" + + MINUTES="$(expr "$MINUTES" + "1")" || true + if [ "$MINUTES" -ge "60" ]; then + MINUTES="0" + + HOURS="$(expr "$HOURS" + "1")" || true + if [ "$HOURS" -ge "24" ]; then + HOURS="0" + fi + echo "$HOURS" > "$HOURS_FILE" + + fi + echo "$MINUTES" > "$MINUTES_FILE" + + fi + + echo "$SECONDS" > "$SECONDS_FILE" + + #echo "$HOURS $MINUTES $SECONDS" +} + +need_new_date() { + ## Testing + #while [ 1 ]; do + # read_date_file + #done + + read_date_file + + ## Testing + #echo "faketime '$_year-$_month-$_day $HOURS:$MINUTES:$SECONDS' /bin/date" + #faketime "$_year-$_month-$_day $HOURS:$MINUTES:$SECONDS" /bin/date + + echo "$_year-$_month-$_day $HOURS:$MINUTES:$SECONDS" +} + +need_new_date + |