diff options
-rw-r--r-- | passwort-tresor.in | 185 |
1 files changed, 149 insertions, 36 deletions
diff --git a/passwort-tresor.in b/passwort-tresor.in index 29762c4..0f2b92d 100644 --- a/passwort-tresor.in +++ b/passwort-tresor.in @@ -1,10 +1,5 @@ #!/bin/bash -. #ETCDIR#/passwort-tresor.konf - -echo "Dienst: " -read dienst - beenden () { [ -n "${tmpDir}" ] && rm -rf "${tmpDir}" exit $1 @@ -14,56 +9,174 @@ beiFehlerBeenden () { err=$? if [ ${err} -ne 0 ] then - if [ -e "${tmpDir}/humanStatus" ] + if [ -e "${tmpDir}/fehlermeldungen" ] then - less "${tmpDir}/humanStatus" + less "${tmpDir}/fehlermeldungen" fi beenden ${err} fi } -tmpDir="$(mktemp -d)" +verwendung() +{ + >&2 echo '' + >&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 '' + >&2 echo ' -d|--datei $datei:' + >&2 echo ' verschlüsselte Datei' + >&2 echo ' -g|--grep:' + >&2 echo ' nach etwas greppen und in die Zwischenablage übernehmen' + >&2 echo ' -s|--summe $datei' + >&2 echo ' Prüfsummendatei der verschlüsselten Datei' + >&2 echo '' + beenden 1 +} -output="$( - ${passwortDateiBefehl} \ - | tee "${tmpDir}/original" \ - | gpg --status-fd 3 -d - \ - 2> "${tmpDir}/humanStatus" \ - 3> "${tmpDir}/status" +eval set -- "$( + getopt -o d:gs \ + --long datei: \ + --long grep \ + --long summe: \ + -n "$(basename "$0")" \ + -- "$@" \ + || echo "verwendung" )" +args=("$@") -beiFehlerBeenden +greppw=false -grep -q "VALIDSIG ${schluessel} \(.* \)\?${schluessel}\$" "${tmpDir}/status" +. #ETCDIR#/passwort-tresor.konf -beiFehlerBeenden +while true +do + case $1 in + -d|--datei) + shift + datei="$1" + ;; + -g|--grep) + greppw=true + ;; + -s|--summe) + shift + summe="$1" + ;; + --) + shift + break + ;; + *) + >&2 echo "FEHLER: Verstehe Option \"$1\" doch nicht! Ich beende." + beenden 1 + esac + shift +done -rm -f "${tmpDir}/humanStatus" +if [ $# -ne 0 ] +then + >&2 echo 'FEHLER: Zu viele ('$#') Argumente:' + for ((i=1; i<=$#; i++)) + do + >&2 echo "'${!i}'" + done + >&2 echo 'Ich beende.' + verwendung +fi -${passwortSummenBefehl} \ +if [ -n "${summe}" ] && [ -z "${datei}" ] +then + >&2 echo 'Keine Datei zur Prüfsumme angegeben!' + >&2 echo 'Ich beende.' + verwendung +fi + +if [ -z "${datei}" ] +then + datei=$(dialog --stdout --fselect "${standardDatei}" 14 70) + [ -z "${datei}" ] && beenden 1 + summe="${summenVerzeichnis}$(basename "datei" ".gpg").512" +fi + +if [[ ! "${datei}" = *".gpg" ]] +then + >&2 echo 'Datei endet nicht auf ".gpg"!' + >&2 echo 'Ich beende.' + beenden 1 +fi + +if [ ! -e "${summe}" ] +then + >&2 echo "Die Summendatei '${summe}' gibt es nicht!" + >&2 echo 'Ich beende.' + beenden 1 +fi + +${greppw} && read -p 'suche nach: ' suche + +tmpDir="$(mktemp -d)" + +rsync "${datei}" "${tmpDir}/original" +beiFehlerBeenden +rsync "${summe}" "${tmpDir}/summe" +beiFehlerBeenden + +cat "${tmpDir}/summe" \ | awk "{print \$1\" ${tmpDir}/original\"}" \ | sha512sum -c \ - > "${tmpDir}/humanStatus" + > "${tmpDir}/fehlermeldungen" + +beiFehlerBeenden + +gpg --status-fd 1 -o "${tmpDir}/output" -d "${tmpDir}/original" \ + 2> "${tmpDir}/fehlermeldungen" \ + > "${tmpDir}/status" + +beiFehlerBeenden + +grep -q "VALIDSIG ${schluessel} \(.* \)\?${schluessel}\$" "${tmpDir}/status" beiFehlerBeenden -sDienst="${dienst}" -[ $(echo "${output}" | grep -c "${sDienst}") -gt 1 ] && sDienst="${dienst}.*:\$" -[ $(echo "${output}" | grep -c "${sDienst}") -gt 1 ] && sDienst="^${dienst}.*:\$" -[ $(echo "${output}" | grep -c "${sDienst}") -gt 1 ] && sDienst="^${dienst}:\$" -if [ $(echo "${output}" | grep -c "${sDienst}") -ne 1 ] +if ${greppw} then - echo "'${dienst}' ist nicht genau ein Mal vorhanden, sondern $(echo "${output}" | grep -c "${sDienst}") Mal!" - beenden 1 -fi + for suchStr in "${suche}" "${suche}.*:\$" "^${suche}.*:\$" "^${suche}:\$" "" + do + [ $(grep -c "${suchStr}" "${tmpDir}/output") -eq 1 ] && break + fi + 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)" + rm -rf "${tmpDir}" -output="$(echo "${output}" | grep -2 "${dienst}" | tail -n2)" -echo "${output}" | head -n1 | xclip -i -echo -n "." -read dienst -echo "${output}" | tail -n1 | xclip -i -echo -n "." -read dienst -echo "" | xclip -i + echo "${output}" | head -n1 | xclip -i + echo -n "." + read suche + echo "${output}" | tail -n1 | xclip -i + echo -n "." + read suche + echo '' | xclip -i +else + sha512sum "${tmpDir}/output" > "${tmpDir}/alteSumme" + ${editor} "${tmpDir}/output" || beenden $? + sha512sum -c "${tmpDir}/alteSumme" &> /dev/null && beenden 0 + sed "s|^\S\+ |$( + sha512sum "${tmpDir}/output" | \ + 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}/summe" "${summe}" + beiFehlerBeenden +fi beenden 0 |