X-Git-Url: http://git.plutz.net/?p=cgilite;a=blobdiff_plain;f=session.sh;h=ee5c4993a72df047fe0fc67b3c384f2b5733be48;hp=25a65987c3671df4f4c8499279a71487edad5775;hb=7e6d863ffdd71e4bf83bb133ba429ea35c99796a;hpb=e2678dc719c2dcda2de9a6079ac63837681e1a26 diff --git a/session.sh b/session.sh index 25a6598..ee5c499 100755 --- a/session.sh +++ b/session.sh @@ -3,6 +3,9 @@ [ -n "$include_session" ] && return 0 include_session="$0" +_DATE="$(date +%s)" +SESSION_TIMEOUT="${SESSION_TIMEOUT:-7200}" + server_key(){ IDFILE="${IDFILE:-${_DATA:-.}/serverkey}" if [ "$(stat -c %s "$IDFILE")" -ne 512 ] || ! cat "$IDFILE"; then @@ -27,7 +30,7 @@ randomid(){ } timeid(){ - d=$(($(date +%s) % 4294967296)) + d=$(($_DATE % 4294967296)) { printf "$( printf \\%o \ $((d / 16777216 % 256)) \ @@ -41,6 +44,15 @@ timeid(){ checkid(){ grep -m 1 -xE '[0-9a-zA-Z:=]{16}'; } +transid(){ + # transaction ID to modify a given file + local file="$1" + { stat -c %F%i%n%N%s%Y "$file" 2>&- + printf %s "$SESSION_ID" + server_key + } | sha256sum | cut -d\ -f1 +} + update_session(){ local session sid time sig serverkey checksig @@ -51,17 +63,16 @@ update_session(){ checksig="$(printf %s "$sid" "$time" "$serverkey" | sha256sum)" checksig="${checksig%% *}" - d=$(date +%s) - if [ "$checksig" != "$sig" \ - -o "$time" -lt "$d" \ - -o ! "$(printf %s "$sid" |checkid)" ] 2>&- + if ! [ "$checksig" = "$sig" \ + -a "$time" -ge "$_DATE" \ + -a "$(printf %s "$sid" |checkid)" ] 2>&- then debug Setting up new session sid="$(randomid)" fi - time=$(( $(date +%s) + 7200 )) + time=$(( $_DATE + $SESSION_TIMEOUT )) sig="$(printf %s "$sid" "$time" "$serverkey" |sha256sum)" sig="${sig%% *}" printf %s\\n "${sid}-${time}-${sig}"