mirror of
https://github.com/wolfcw/libfaketime.git
synced 2026-05-17 00:26:16 +03:00
271 lines
6.4 KiB
Bash
271 lines
6.4 KiB
Bash
#!/usr/bin/env 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
|
|
|