summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2021-05-19 10:00:17 +0200
committerErich Eckner <git@eckner.net>2021-05-19 10:00:17 +0200
commit5e8932cef2e9d2f71c36e4539114add3d3d03937 (patch)
treed528e990e532038ab3c4f2b283b010223aab7016
parent1abab84c3f1563fb3933f48e1e7c74fe643ffb26 (diff)
downloadpasswort-tresor-5e8932cef2e9d2f71c36e4539114add3d3d03937.tar.xz
verwendet jetzt passv0.7
-rw-r--r--.gitignore3
-rw-r--r--Makefile13
-rw-r--r--grep-passwort.in110
-rw-r--r--man.commons.in19
-rw-r--r--neues-passwort.in170
-rw-r--r--passwort-tresor.in263
-rw-r--r--passwort-tresor.konf5
7 files changed, 291 insertions, 292 deletions
diff --git a/.gitignore b/.gitignore
index ec5fc15..51e4dad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-passwort-tresor
+neues-passwort
+grep-passwort
man.commons
*.common
*.1
diff --git a/Makefile b/Makefile
index 4713e28..c213025 100644
--- a/Makefile
+++ b/Makefile
@@ -20,13 +20,12 @@
#
DESTDIR =
-ETCDIR = /etc
BINDIR = /usr/bin
MANDIR = /usr/share/man
-VERSION = 0.6.1
+VERSION = 0.7
-all: man.commons passwort-tresor passwort-tresor.1
+all: man.commons grep-passwort grep-passwort.1 neues-passwort neues-passwort.1
%: %.in
sed " \
@@ -35,20 +34,18 @@ all: man.commons passwort-tresor passwort-tresor.1
s@#ETCDIR#@$(ETCDIR)@; \
s@#HELPTEXT#\(\s\+\)#@ --help \1display this help and exit\n --version\1display version and exit@; \
" $< > $@
- [ "$@" = "passwort-tresor" ] && chmod +x "$@" || true
+ [ "$@" != grep-passwort ] && [ "$@" != neues-passwort ] || chmod +x "$@"
%.1: % man.commons
grep -v "^$<(" man.commons | sed '/^\[SEE ALSO]$$/{n;:a;N;/\[/b;s/\n/, /;ta;}' > "$<.common" && \
help2man \
- -n 'Wrapper for gpg to store passwords (and other text)' \
-o "$@" -N --include $<.common --no-discard-stderr "./$<"
.PHONY: install dist clean
install: all
- install -D -m0755 passwort-tresor $(DESTDIR)$(BINDIR)/passwort-tresor
- install -D -m0644 passwort-tresor.1 $(DESTDIR)$(MANDIR)/man1/passwort-tresor.1
- install -D -m0644 passwort-tresor.konf $(DESTDIR)$(ETCDIR)/passwort-tresor.konf
+ install -D -m0755 -t $(DESTDIR)$(BINDIR) grep-passwort neues-passwort
+ install -D -m0644 -t $(DESTDIR)$(MANDIR)/man1/ grep-passwort.1 neues-passwort.1
clean:
ls -A | \
diff --git a/grep-passwort.in b/grep-passwort.in
new file mode 100644
index 0000000..b0f638d
--- /dev/null
+++ b/grep-passwort.in
@@ -0,0 +1,110 @@
+#!/bin/bash
+
+passstore_Verzeichnis=$(
+ readlink -f ~/.password-store
+)
+
+Verwendung()
+{
+ >&2 echo 'Nach Passwort per Regex suchen.'
+ >&2 echo ''
+ >&2 printf 'Verwendung: %s [OPTIONS]\n' "$(basename "$0")"
+ >&2 echo \
+'#HELPTEXT# #'
+ >&2 echo ''
+ exit $1
+}
+
+eval set -- "$(
+ getopt -o h \
+ --long help \
+ --long version \
+ -n "$(basename "$0")" \
+ -- "$@" \
+ || echo "Verwendung"
+)"
+
+while true; do
+ case "$1" in
+ '-h'|'--help')
+ Verwendung 0
+ ;;
+ '--version')
+ >&2 echo '#VERSION#'
+ exit 0
+ ;;
+ '--')
+ shift
+ break
+ ;;
+ *)
+ >&2 printf 'FEHLER: Verstehe Option "%s" doch nicht!\n' "$1"
+ exit 1
+ esac
+ shift
+done
+
+if [ ! -d "${passstore_Verzeichnis}" ]; then
+ >&2 printf 'Verzeichnis "%s" existiert nicht - ist pass initialisiert?\n' "${passstore_Verzeichnis}"
+ exit 1
+fi
+
+if [ $# -ne 0 ]; then
+ >&2 printf 'FEHLER: Zu viele (%s) Argumente:\n' "$#"
+ >&2 printf '"%s"\n' "$@"
+ Verwendung 1
+fi
+
+count=0
+while [ ${count} -ne 1 ]; do
+ read -p 'suche nach: ' Suche
+ Ergebnisse=''
+ for Versuch in 'name:' 'iname:' 'name:*' 'iname:*' 'path:*' 'ipath:*'; do
+ if [ -n "${Ergebnisse}" ]; then
+ break
+ fi
+ Ergebnisse=$(
+ find "${passstore_Verzeichnis}" \
+ -type f \
+ -name '*.gpg' \
+ -${Versuch%%:*} "${Versuch#*:}${Suche}${Versuch#*:}" \
+ -printf '%P\n'
+ )
+ done
+ if [ -z "${Ergebnisse}" ]; then
+ >&2 echo 'Ich habe nichts finden können.'
+ exit 1
+ fi
+ count=$(printf '%s\n' "${Ergebnisse}" | wc -l)
+ if [ ${count} -ne 1 ]; then
+ printf 'Es gab %s Übereinstimmungen:\n' "${count}"
+ printf ' %s\n' ${Ergebnisse}
+ fi
+done
+
+output=$(
+ pass show "${Ergebnisse%.gpg}"
+)
+
+printf '%s\n' "${output}" \
+| sed '
+ s/^Username: //
+ t
+ d
+' \
+| xclip -i
+
+printf "."
+
+read dummy
+
+printf '%s\n' "${output}" \
+| head -n1 \
+| xclip -i
+
+printf "."
+
+read dummy
+
+echo '' \
+| xclip -i
diff --git a/man.commons.in b/man.commons.in
index efadbf2..49dc7c2 100644
--- a/man.commons.in
+++ b/man.commons.in
@@ -1,21 +1,10 @@
-[CONFIGURATION]
-Die Konfigdatei \fB#ETCDIR#/passwort-tresor.konf\fP ist ein bash-Skript, welches die folgenden Variablen definiert:
-.TP
-.B "schluessel"
-der Schlüssel, mit dem verschlüsselt und signiert werden soll und dessen Signatur erwartet wird
-.TP
-.B "standardDatei"
-die Datei, welche standardmäßig angewählt ist
-.TP
-.B "summenVerzeichnis"
-Verzeichnis, in dem die Prüfsummen gespeichert werden
[FILES]
.TP
-.B "#BINDIR#/passwort-tresor"
-Programmdatei
+.B "#BINDIR#/grep-passwort"
+Programm zum Nachschlagen eines Passwortes
.TP
-.B "#ETCDIR#/passwort-tresor.konf"
-beinhaltet die Konfiguration
+.B "#BINDIR#/neues-passwort"
+Programm zum Erzeugen eines neuen Passwortes
[AUTHOR]
.nf
Erich Eckner <opensource at eckner dot net>
diff --git a/neues-passwort.in b/neues-passwort.in
new file mode 100644
index 0000000..bda9c38
--- /dev/null
+++ b/neues-passwort.in
@@ -0,0 +1,170 @@
+#!/bin/bash
+
+passstore_Verzeichnis=$(
+ readlink -f ~/.password-store
+)
+
+Verwendung() {
+ >&2 echo 'Neues Passwort erzeugen.'
+ >&2 echo ''
+ >&2 printf 'Verwendung: %s [OPTIONS]\n' "$(basename "$0")"
+ >&2 echo ''
+ >&2 echo ' -p,--Pfad=Pfad/zum/Passwort'
+ >&2 echo ' -x,--Extras'
+ >&2 echo ' -z,--zufaellig[=Laenge]'
+ >&2 echo \
+'#HELPTEXT# #'
+ exit $1
+}
+
+eval set -- "$(
+ getopt -o p:xz:: \
+ --long Extras \
+ --long help \
+ --long Pfad: \
+ --long version \
+ --long zufaellig:: \
+ -n "$(basename "$0")" \
+ -- "$@" \
+ || echo "Verwendung"
+)"
+
+Extras=false
+Laenge=-1
+Pfad=''
+zufaellig=false
+
+while true; do
+ case "$1" in
+ '--help')
+ Verwendung 0
+ ;;
+ '-p'|'--Pfad')
+ shift
+ [ -z "${Pfad}" ] || Verwendung 1
+ Pfad="$1"
+ ;;
+ '-x'|'--Extras')
+ Extras=true
+ ;;
+ '--version')
+ >&2 echo '#VERSION#'
+ exit 0
+ ;;
+ '-z'|'--zufaellig')
+ shift
+ [ ${Laenge} -eq -1 ] || Verwendung 1
+ zufaellig=true
+ [ -z "$1" ] && Laenge=16 || Laenge="$1"
+ [ ${Laenge} -ge 0 ] || Verwendung 1
+ ;;
+ '--')
+ shift
+ break
+ ;;
+ *)
+ >&2 printf 'FEHLER: Verstehe Option "%s" doch nicht!\n' "$1"
+ exit 1
+ esac
+ shift
+done
+
+if [ ! -d "${passstore_Verzeichnis}" ]; then
+ >&2 printf 'Verzeichnis "%s" existiert nicht - ist pass initialisiert?\n' "${passstore_Verzeichnis}"
+ exit 1
+fi
+
+if [ $# -ne 0 ]; then
+ >&2 printf 'FEHLER: Zu viele (%s) Argumente:\n' "$#"
+ >&2 printf '"%s"\n' "$@"
+ Verwendung 1
+fi
+
+if [ -z "${Pfad}" ]; then
+ tree -d "${passstore_Verzeichnis}"
+ read -r -p 'Pfad zum Passwort (Wildcards erlaubt): ' Pfad
+ if [ -z "${Pfad}" ]; then
+ >&2 echo 'Kein Pfad angegeben.'
+ exit 1
+ fi
+fi
+
+if [ -z "${Pfad%%*\**}" ]; then
+ Pfad=$(
+ printf '%s\n' "${Pfad}" \
+ | tr '/' '\n' \
+ | {
+ p="${passstore_Verzeichnis}"
+ while read -r dir; do
+ if [ -n "${dir%%*\**}" ]; then
+ p="${p}/${dir}"
+ else
+ p=$(
+ printf '%s\n' "${p}/"${dir} \
+ | head -n1
+ )
+ fi
+ done
+ echo "${p#${passstore_Verzeichnis}/}"
+ }
+ )
+fi
+
+if [ -d "${Pfad}" ]; then
+ Pfad=$(readlink -e "${Pfad}")
+ Pfad="${Pfad#${passstore_Verzeichnis}/}"
+fi
+
+if [ ! -d "${passstore_Verzeichnis}/${Pfad}" ]; then
+ printf 'Pfad "%s" existiert noch nicht - erstellen? (leer="ja")' "${Pfad}"
+ read -r Antwort
+ if [ -n "${Antwort}" ]; then
+ echo 'ok, dann nicht.'
+ exit 1
+ fi
+fi
+
+read -p 'URL: ' URL
+read -p 'Username: ' Benutzer
+if [ ${Laenge} -lt 0 ]; then
+ read -sp 'Passwort: ' pw1
+ echo ''
+ read -sp 'noch Mal: ' pw2
+ echo ''
+ if [ ! "${pw1}" == "${pw2}" ]; then
+ >&2 echo 'Die Passwörter unterscheiden sich!'
+ exit 1
+ fi
+else
+ pw1=$(
+ printf '%s\n' {0..1}{0..7}{0..7} \
+ | sed '
+ 1,33d
+ $d
+ ' \
+ | while read -r s; do
+ printf '\'"$s"'\n'
+ done \
+ | shuf -n ${pwLen} --random-source=/dev/urandom -r \
+ | tr -d '\n'
+ )
+fi
+
+if ${Extras}; then
+ tmp_file=$(mktemp)
+ trap 'rm -f "${tmp_file}"' EXIT
+ ${EDITOR:-nano} "${tmp_file}"
+ Extrainfos=$(cat "${tmp_file}")
+ rm -f "${tmp_file}"
+ trap - EXIT
+fi
+
+{
+ printf '%s\n' "${pw1}"
+ printf 'URL: %s\n' "${URL}"
+ printf 'Username: %s\n' "${Benutzer}"
+ if ${Extras}; then
+ printf '%s\n' "${Extrainfos}"
+ fi
+} \
+| pass insert "${Pfad}" --multiline
diff --git a/passwort-tresor.in b/passwort-tresor.in
deleted file mode 100644
index 7980a48..0000000
--- a/passwort-tresor.in
+++ /dev/null
@@ -1,263 +0,0 @@
-#!/bin/bash
-
-beenden () {
- [ -n "${tmpDir}" ] && rm -rf --one-file-system "${tmpDir}"
- [ -n "$1" ] && [ "$1" -ne 0 ] && >&2 echo 'Ich beende.'
- exit $1
-}
-
-beiFehlerBeenden () {
- err=$?
- if [ ${err} -ne 0 ] && [ ${blind} -lt $1 ]
- 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 'Wenn weder -g noch -n als Argumente gegeben sind, wird die Datei zum editieren geöffnet.'
- >&2 echo ''
- >&2 echo 'Usage: '"$(basename "$0") [OPTIONS]"
- >&2 echo ''
- >&2 echo ' -b,--blind=blindheit Schwere der Fehler, die ignoriert werden (0,1,2,3)'
- >&2 echo ' -d,--datei=datei verschlüsselte Datei'
- >&2 echo ' -g,--grep nach etwas greppen und in die Zwischenablage übernehmen; nicht zusammen mit -n verwendbar'
- >&2 echo ' -n,--neu neues Passwort abspeichern; nicht zusammen mit -g verwendbar'
- >&2 echo ' -s,--summe=datei Prüfsummendatei der verschlüsselten Datei'
- >&2 echo ' -z,--zufaellig[=Laenge] neues Passwort der Länge Laenge (Standard = 8) zufällig generieren; impliziert -n'
- >&2 echo \
-'#HELPTEXT# #'
- >&2 echo ''
- [ -z "$1" ] && beenden 1
- beenden $1
-}
-
-eval set -- "$(
- getopt -o b:d:gns:z:: \
- --long blind: \
- --long datei: \
- --long grep \
- --long help \
- --long neu \
- --long summe: \
- --long version \
- --long zufaellig:: \
- -n "$(basename "$0")" \
- -- "$@" \
- || echo "verwendung"
-)"
-args=("$@")
-
-greppw=false
-neu=false
-blind=0
-pwLen=-1
-
-[ -r "#ETCDIR#/passwort-tresor.konf" ] && \
- . "#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
- datei="$1"
- ;;
- -g|--grep)
- greppw=true
- ;;
- --help)
- verwendung 0
- ;;
- -n|--neu)
- neu=true
- ;;
- -s|--summe)
- [ -n "${summe}" ] && verwendung
- shift
- summe="$1"
- ;;
- -z|--zufaellig)
- shift
- neu=true
- [ -z "$1" ] && pwLen=8 || pwLen=$1
- [ ${pwLen} -lt 0 ] && verwendung
- ;;
- --version)
- >&2 echo '#VERSION#'
- exit 0
- ;;
- --)
- shift
- break
- ;;
- *)
- >&2 echo "FEHLER: Verstehe Option \"$1\" doch nicht!"
- 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
- verwendung
-fi
-
-${greppw} && ${neu} && verwendung
-
-if [ -n "${summe}" ] && [ -z "${datei}" ]
-then
- >&2 echo 'Keine Datei zur Prüfsumme angegeben!'
- verwendung
-fi
-
-if [ -z "${datei}" ]
-then
- datei=$(dialog --stdout --fselect "${standardDatei}" 14 70)
- [ -z "${datei}" ] && beenden 1
-fi
-
-if [ -z "${summe}" ]
-then
- summe="${summenVerzeichnis}$(basename "${datei}" ".gpg").512"
-fi
-
-if [[ ! "${datei}" = *".gpg" ]]
-then
- >&2 echo 'Datei endet nicht auf ".gpg"!'
- beenden 1
-fi
-
-${greppw} && read -p 'suche nach: ' suche
-if ${neu}
-then
- read -p 'Dienst: ' dienst
- read -p 'Benutzer: ' benutzer
- if [ ${pwLen} -lt 0 ]
- then
- read -sp 'Passwort: ' pw1
- echo ''
- read -sp 'noch Mal: ' pw2
- echo ''
- if [ ! "${pw1}" == "${pw2}" ]
- then
- >&2 echo 'Die Passwörter unterscheiden sich!'
- beenden 1
- fi
- else
- pw1=$(
- printf '%s\n' {0..1}{0..7}{0..7} \
- | sed '
- 1,33d
- $d
- ' \
- | while read -r s; do
- printf '\'"$s"'\n'
- done \
- | shuf -n ${pwLen} --random-source=/dev/urandom -r \
- | tr -d '\n'
- )
- fi
-fi
-
-tmpDir="$(mktemp -d)"
-
-rsync "${datei}" "${tmpDir}/original"
-beiFehlerBeenden 0
-rsync "${summe}" "${tmpDir}/summe"
-beiFehlerBeenden 2
-
-cat "${tmpDir}/summe" \
- | awk "{print \$1\" ${tmpDir}/original\"}" \
- | sha512sum -c \
- > "${tmpDir}/fehlermeldungen"
-
-beiFehlerBeenden 1
-
-gpg --status-fd 1 -o "${tmpDir}/output" -d "${tmpDir}/original" \
- 2> "${tmpDir}/fehlermeldungen" \
- > "${tmpDir}/status"
-
-beiFehlerBeenden 3
-
-grep -q "VALIDSIG ${schluessel} \(.* \)\?${schluessel}\$" "${tmpDir}/status"
-
-beiFehlerBeenden 1
-
-if ${greppw}
-then
- count=0
- for subst in 's/[.[]/\\\0/g' ''; do
- sucheSubst=$(
- echo "${suche}" | \
- sed "${subst}"
- )
- for suchStr in "${sucheSubst}" "${sucheSubst}.*:\$" "^${sucheSubst}.*:\$" "^${sucheSubst}:\$"
- do
- count=$(grep -c "${suchStr}" "${tmpDir}/output")
- [ "${count}" -eq 1 ] && break
- >&2 printf '"%s": %s\n' "${suchStr}" "${count}"
- done
- [ "${count}" -eq 1 ] && break
- done
- if [ "${count}" -ne 1 ]
- then
- >&2 printf '"%s" ist nicht genau ein Mal vorhanden!\n' "${suche}"
- read -s
- beenden 1
- fi
- output="$(grep -2 "${suchStr}" "${tmpDir}/output" | tail -n2)"
- shred -zu "${tmpDir}/output"
- rm -rf --one-file-system "${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
- if ${neu}
- then
- echo '' >> "${tmpDir}/output"
- echo "${dienst}:" >> "${tmpDir}/output"
- echo "${benutzer}" >> "${tmpDir}/output"
- echo "${pw1}" >> "${tmpDir}/output"
- else
- sha512sum "${tmpDir}/output" > "${tmpDir}/alteSumme"
- ${EDITOR:-nano} "${tmpDir}/output" || beenden $?
- sha512sum -c "${tmpDir}/alteSumme" &> /dev/null && beenden 0
- fi
- gpg -o "${tmpDir}/neu" -r "0x${schluessel}" -e -s "${tmpDir}/output" \
- 2> "${tmpDir}/fehlermeldungen"
- beiFehlerBeenden 3
- sed "s|^\S\+ |$(
- sha512sum "${tmpDir}/neu" | \
- awk '{print $1}'
- ) |" -i "${tmpDir}/summe"
- rsync "${tmpDir}/neu" "${datei}"
- beiFehlerBeenden 3
- rsync "${tmpDir}/summe" "${summe}"
- beiFehlerBeenden 1
-fi
-
-beenden 0
diff --git a/passwort-tresor.konf b/passwort-tresor.konf
deleted file mode 100644
index 01736a1..0000000
--- a/passwort-tresor.konf
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-schluessel='DE9F7688CACF04FEB81A6C590AEEC90755DA7B5A'
-standardDatei='/mnt/141.35.50.159_home/Dokumente/todolist.gpg'
-summenVerzeichnis="${HOME}/.sums/"