usergen: Fix wrong password and username usage

Due to the lack of double quotes, passwords with whitespaces were not
passed correctly to printf(1), thus making users not able to log into
their account.

OTOH, for some reason usernames containing whitespaces made jq(1)
complain, so it has been decided not to support them.
This commit is contained in:
Xavier Del Campo Romero 2023-04-30 23:25:43 +02:00
parent 401c5dcf44
commit 291d951ee1
Signed by: xavi
GPG Key ID: 84FF3612A9BF43F2
1 changed files with 12 additions and 6 deletions

18
usergen
View File

@ -15,7 +15,13 @@ fi
DIR=$1 DIR=$1
echo Username: >&2 echo Username: >&2
read -r USER IFS= read -r USER
if printf '%s' "$USER" | grep -qe '[[:space:]]'
then
echo Username cannot contain whitespaces >&2
exit 1
fi
DB="$DIR/db.json" DB="$DIR/db.json"
@ -26,21 +32,21 @@ then
fi fi
echo Password: >&2 echo Password: >&2
read -r PWD IFS= read -r PWD
echo "Quota, in MiB (leave empty for unlimited quota):" >&2 echo "Quota, in MiB (leave empty for unlimited quota):" >&2
read -r QUOTA read -r QUOTA
PWD=$(printf '%s' $PWD | xxd -p | tr -d '\n') PWD=$(printf '%s' "$PWD" | xxd -p | tr -d '\n')
SALT=$(openssl rand 32 | xxd -p | tr -d '\n') SALT=$(openssl rand 32 | xxd -p | tr -d '\n')
KEY=$(openssl rand 32 | xxd -p | tr -d '\n') KEY=$(openssl rand 32 | xxd -p | tr -d '\n')
PWD=$(printf '%s%s' $SALT $PWD) PWD=$(printf '%s%s' $SALT "$PWD")
ROUNDS=1000 ROUNDS=1000
for i in $(seq $ROUNDS) for i in $(seq $ROUNDS)
do do
printf "\r%d/$ROUNDS" $i >&2 printf "\r%d/$ROUNDS" $i >&2
PWD=$(printf '%s' $PWD | xxd -p -r | sha256sum | cut -d' ' -f1) PWD=$(printf '%s' "$PWD" | xxd -p -r | sha256sum | cut -d' ' -f1)
done done
echo >&2 echo >&2
@ -56,7 +62,7 @@ trap cleanup EXIT
jq ".users += [ jq ".users += [
{ {
\"name\": \"$USER\", \"name\": \"$USER\",
\"password\": \"$PWD\", \"password\": \""$PWD"\",
\"salt\": \"$SALT\", \"salt\": \"$SALT\",
\"key\": \"$KEY\", \"key\": \"$KEY\",
\"quota\": \"$QUOTA\" \"quota\": \"$QUOTA\"