#!/bin/bash beenden () { [ -n "${tmpDir}" ] && rm -rf "${tmpDir}" exit $1 } beiFehlerBeenden () { err=$? if [ ${err} -ne 0 ] then if [ -e "${tmpDir}/fehlermeldungen" ] then less "${tmpDir}/fehlermeldungen" fi beenden ${err} fi } 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 } eval set -- "$( getopt -o d:gs: \ --long datei: \ --long grep \ --long summe: \ -n "$(basename "$0")" \ -- "$@" \ || echo "verwendung" )" args=("$@") greppw=false . #ETCDIR#/passwort-tresor.konf while true do case $1 in -d|--datei) [ -n "${datei}" ] && verwendung shift datei="$1" ;; -g|--grep) greppw=true ;; -s|--summe) [ -n "${summe}" ] && verwendung shift summe="$1" ;; --) shift break ;; *) >&2 echo "FEHLER: Verstehe Option \"$1\" doch nicht! Ich beende." beenden 1 esac shift done 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 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 ${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}/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 if ${greppw} then 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}" 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