summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2016-08-19 14:43:09 +0200
committerErich Eckner <git@eckner.net>2016-08-19 14:45:22 +0200
commit3bdca4491fe9f9736b58c6ac527e51a37155f78e (patch)
tree7438819bd824efa70bb3d0219c4b75f4bb7a0c78
parentec9e441825b0a4b1780f9f3b416e491c4012b5dd (diff)
downloadpasswort-tresor-3bdca4491fe9f9736b58c6ac527e51a37155f78e.tar.xz
sollte jetzt gehen
-rw-r--r--passwort-tresor.in185
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