diff options
Diffstat (limited to 'passwort-tresor.in')
-rw-r--r-- | passwort-tresor.in | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/passwort-tresor.in b/passwort-tresor.in index 78988ff..40826c3 100644 --- a/passwort-tresor.in +++ b/passwort-tresor.in @@ -2,12 +2,13 @@ beenden () { [ -n "${tmpDir}" ] && rm -rf "${tmpDir}" + [ -n "$1" ] && [ "$1" -ne 0 ] && >&2 echo 'Ich beende.' exit $1 } beiFehlerBeenden () { err=$? - if [ ${err} -ne 0 ] + if [ ${err} -ne 0 ] && [ ${blind} -lt $1 ] then if [ -e "${tmpDir}/fehlermeldungen" ] then @@ -23,8 +24,10 @@ verwendung() >&2 echo 'Skript zum verschlüsselten Speichern von Passwörtern und anderem' >&2 echo '' >&2 echo 'Verwendung:' - >&2 echo " $(basename "$0") [ -g | --grep ] [ ( -d | --datei $datei ) ( -s | --summe $datei ) ]" + >&2 echo " $(basename "$0") [ -b | --blind $blindheit ] [ -g | --grep ] [ ( -d | --datei \$datei ) ( -s | --summe \$datei ) ]" >&2 echo '' + >&2 echo ' -b|--blind $blindheit:' + >&2 echo ' Schwere der Fehler, die ignoriert werden (0,1,2,3)' >&2 echo ' -d|--datei $datei:' >&2 echo ' verschlüsselte Datei' >&2 echo ' -g|--grep:' @@ -36,7 +39,8 @@ verwendung() } eval set -- "$( - getopt -o d:gs: \ + getopt -o b:d:gs: \ + --long blind: \ --long datei: \ --long grep \ --long summe: \ @@ -47,12 +51,18 @@ eval set -- "$( args=("$@") greppw=false +blind=0 . #ETCDIR#/passwort-tresor.konf while true do case $1 in + -b|--blind) + [ "${blind}" -ne 0 ] && verwendung + shift + blind="$1" + ;; -d|--datei) [ -n "${datei}" ] && verwendung shift @@ -71,7 +81,7 @@ do break ;; *) - >&2 echo "FEHLER: Verstehe Option \"$1\" doch nicht! Ich beende." + >&2 echo "FEHLER: Verstehe Option \"$1\" doch nicht!" beenden 1 esac shift @@ -84,14 +94,12 @@ then do >&2 echo "'${!i}'" done - >&2 echo 'Ich beende.' verwendung fi if [ -n "${summe}" ] && [ -z "${datei}" ] then >&2 echo 'Keine Datei zur Prüfsumme angegeben!' - >&2 echo 'Ich beende.' verwendung fi @@ -109,7 +117,6 @@ fi if [[ ! "${datei}" = *".gpg" ]] then >&2 echo 'Datei endet nicht auf ".gpg"!' - >&2 echo 'Ich beende.' beenden 1 fi @@ -118,37 +125,36 @@ ${greppw} && read -p 'suche nach: ' suche tmpDir="$(mktemp -d)" rsync "${datei}" "${tmpDir}/original" -beiFehlerBeenden +beiFehlerBeenden 0 rsync "${summe}" "${tmpDir}/summe" -beiFehlerBeenden +beiFehlerBeenden 2 cat "${tmpDir}/summe" \ | awk "{print \$1\" ${tmpDir}/original\"}" \ | sha512sum -c \ > "${tmpDir}/fehlermeldungen" -beiFehlerBeenden +beiFehlerBeenden 1 gpg --status-fd 1 -o "${tmpDir}/output" -d "${tmpDir}/original" \ 2> "${tmpDir}/fehlermeldungen" \ > "${tmpDir}/status" -beiFehlerBeenden +beiFehlerBeenden 2 grep -q "VALIDSIG ${schluessel} \(.* \)\?${schluessel}\$" "${tmpDir}/status" -beiFehlerBeenden +beiFehlerBeenden 1 if ${greppw} then for suchStr in "${suche}" "${suche}.*:\$" "^${suche}.*:\$" "^${suche}:\$" "" do [ $(grep -c "${suchStr}" "${tmpDir}/output") -eq 1 ] && break - fi + done if [ -z "${suchStr}" ] then >&2 echo "'${suche}' ist nicht genau ein Mal vorhanden!" - >&2 echo 'Ich beende.' beenden 1 fi output="$(grep -2 "${suchStr}" "${tmpDir}/output" | tail -n2)" @@ -165,17 +171,17 @@ else sha512sum "${tmpDir}/output" > "${tmpDir}/alteSumme" ${EDITOR:-nano} "${tmpDir}/output" || beenden $? sha512sum -c "${tmpDir}/alteSumme" &> /dev/null && beenden 0 + gpg -o "${tmpDir}/neu" -r "0x${schluessel}" -e -s "${tmpDir}/output" \ + 2> "${tmpDir}/fehlermeldungen" + beiFehlerBeenden 3 sed "s|^\S\+ |$( - sha512sum "${tmpDir}/output" | \ + sha512sum "${tmpDir}/neu" | \ awk '{print $1}' ) |" -i "${tmpDir}/summe" - gpg -o "${tmpDir}/original" -r "0x${schluessel}" -e "${tmpDir}/output" \ - 2> "${tmpDir}/fehlermeldungen" - beiFehlerBeenden - rsync "${tmpDir}/original" "${datei}" - beiFehlerBeenden + rsync "${tmpDir}/neu" "${datei}" + beiFehlerBeenden 3 rsync "${tmpDir}/summe" "${summe}" - beiFehlerBeenden + beiFehlerBeenden 1 fi beenden 0 |