Files
libfaketime/src/timeprivacy
Bjørn Forsman cccce3bf23 Replace #!/bin/bash shebangs with #!/usr/bin/env bash
For portability. E.g. /bin/bash doesn't exist on NixOS.
2025-09-24 15:02:44 +02:00

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