2011-08-11 10:18:37 +00:00
|
|
|
#!/usr/bin/env zsh
|
|
|
|
|
|
|
|
(($#<1)) && {
|
|
|
|
print -- "usage: $0:t pattern"
|
|
|
|
print -- " generate a password using the ypassword method"
|
|
|
|
print -- " See http://ypassword.espozito.com for more informations"
|
|
|
|
} >&2
|
|
|
|
|
|
|
|
param="$*"
|
|
|
|
passfile="~/.passwd"
|
|
|
|
cmd="awk '\$1 ~ /$param/ {print;}' < $passfile"
|
|
|
|
nblignes=$( eval $cmd | wc -l)
|
|
|
|
|
|
|
|
function col {
|
|
|
|
colnum=$1
|
|
|
|
shift
|
|
|
|
echo $* | awk "{print \$$colnum}"
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((nblignes<1)); then
|
|
|
|
echo "entrée non existante"
|
|
|
|
elif ((nblignes>1)); then
|
|
|
|
echo "plusieur cas possibles : "
|
|
|
|
eval $cmd | sort
|
|
|
|
else
|
|
|
|
line="$(eval $cmd)"
|
|
|
|
site=$( col 1 $line )
|
|
|
|
domainName=$( echo $site | sed 's/.*\.\([^.]*\.[^.]*\)$/\1/')
|
|
|
|
loginName=$( col 2 $line )
|
|
|
|
longueur=$( col 3 $line )
|
|
|
|
base64=$( col 4 $line )
|
|
|
|
hashalgo=$( col 5 $line )
|
|
|
|
num=$( col 6 $line )
|
|
|
|
echo "Enter your master password please"
|
|
|
|
echo -n "$site ($loginName): "
|
|
|
|
oldmodes=$(stty -g)
|
|
|
|
stty -echo
|
|
|
|
read password
|
|
|
|
stty $oldmodes
|
|
|
|
|
2011-10-16 19:33:47 +00:00
|
|
|
if [[ -x =shasum ]]; then
|
|
|
|
case $hashalgo in
|
|
|
|
sha1) hashcmd="shasum -a 1" ;;
|
|
|
|
sha256) hashcmd="shasum -a 256" ;;
|
|
|
|
sha512) hashcmd="shasum -a 512" ;;
|
|
|
|
*) print -- "Unknown algorithm: $hashalgo" >&2
|
|
|
|
exit 1
|
|
|
|
esac
|
|
|
|
else
|
|
|
|
case $hashalgo in
|
|
|
|
sha1) hashcmd="sha1sum" ;;
|
|
|
|
sha256) hashcmd="sha256sum" ;;
|
|
|
|
sha512) hashcmd="sha512sum" ;;
|
|
|
|
*) print -- "Unknown algorithm: $hashalgo" >&2
|
|
|
|
exit 1
|
|
|
|
esac
|
|
|
|
fi
|
2011-08-11 10:18:37 +00:00
|
|
|
|
|
|
|
if [[ $base64 = "b64" ]]; then
|
|
|
|
# make a hex2b64
|
2011-10-16 19:33:47 +00:00
|
|
|
hashcmd="$hashcmd | cut -f1 -d\\ | xxd -r -p | base64"
|
2011-08-11 10:18:37 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
cmd='echo -n "'$password$num$domainName'" | '$hashcmd' | awk "{print substr(\$1,1,'$longueur');}"'
|
|
|
|
eval $cmd
|
|
|
|
fi
|