On Tue, May 6, 2014 at 5:24 PM, Jason A. Donenfeld <[email protected]> wrote: > Do the people of the Password Store Mailing List's Republic of Passwords > support this commit?
Very nice! > Facundo -- is this what you wanted? > > > On Tue, May 6, 2014 at 5:24 PM, Jason A. Donenfeld <[email protected]> wrote: >> >> --- >> man/pass.1 | 6 ++++-- >> src/password-store.sh | 28 +++++++++++++++++++++------- >> 2 files changed, 25 insertions(+), 9 deletions(-) >> >> diff --git a/man/pass.1 b/man/pass.1 >> index 35c81ee..a433a72 100644 >> --- a/man/pass.1 >> +++ b/man/pass.1 >> @@ -110,7 +110,7 @@ ensure that temporary files are created in >> \fI/dev/shm\fP in order to avoid writ >> difficult-to-erase disk sectors. If \fI/dev/shm\fP is not accessible, >> fallback to >> the ordinary \fITMPDIR\fP location, and print a warning. >> .TP >> -\fBgenerate\fP [ \fI--no-symbols\fP, \fI-n\fP ] [ \fI--clip\fP, \fI-c\fP >> ] [ \fI--force\fP, \fI-f\fP ] \fIpass-name pass-length\fP >> +\fBgenerate\fP [ \fI--no-symbols\fP, \fI-n\fP ] [ \fI--clip\fP, \fI-c\fP >> ] [ \fI--in-place\fP, \fI-i\fP ] [ \fI--force\fP, \fI-f\fP ] \fIpass-name >> pass-length\fP >> Generate a new password using >> .BR pwgen (1) >> of length \fIpass-length\fP and insert into \fIpass-name\fP. If >> \fI--no-symbols\fP or \fI-n\fP >> @@ -120,7 +120,9 @@ it to the clipboard using >> .BR xclip (1) >> and then restore the clipboard after 45 (or >> \fIPASSWORD_STORE_CLIP_TIME\fP) seconds. >> Prompt before overwriting an existing password, >> -unless \fI--force\fP or \fI-f\fP is specified. >> +unless \fI--force\fP or \fI-f\fP is specified. If \fI--in-place\fP or >> \fI-i\fP is >> +specified, do not interactively prompt, and only replace the first line >> of the password >> +file with the new generated password, keeping the remainder of the file >> intact. >> .TP >> \fBrm\fP [ \fI--recursive\fP, \fI-r\fP ] [ \fI--force\fP, \fI-f\fP ] >> \fIpass-name\fP >> Remove the password named \fIpass-name\fP from the password store. This >> command is >> diff --git a/src/password-store.sh b/src/password-store.sh >> index 8e80798..8e1a124 100755 >> --- a/src/password-store.sh >> +++ b/src/password-store.sh >> @@ -230,10 +230,11 @@ cmd_usage() { >> overwriting existing password unless forced. >> $PROGRAM edit pass-name >> Insert a new password or edit an existing password using >> ${EDITOR:-vi}. >> - $PROGRAM generate [--no-symbols,-n] [--clip,-c] [--force,-f] >> pass-name pass-length >> + $PROGRAM generate [--no-symbols,-n] [--clip,-c] >> [--in-place,-i] [--force,-f] pass-name pass-length >> Generate a new password of pass-length with optionally no >> symbols. >> Optionally put it on the clipboard and clear board after >> 45 seconds. >> Prompt before overwriting existing password unless forced. >> + Optionally replace only the first line of an existing file >> with a new password. >> $PROGRAM rm [--recursive,-r] [--force,-f] pass-name >> Remove existing password or directory, optionally >> forcefully. >> $PROGRAM mv [--force,-f] old-path new-path >> @@ -430,18 +431,19 @@ cmd_edit() { >> } >> >> cmd_generate() { >> - local opts clip=0 force=0 symbols="-y" >> - opts="$($GETOPT -o ncf -l no-symbols,clip,force -n "$PROGRAM" -- >> "$@")" >> + local opts clip=0 force=0 symbols="-y" inplace=0 >> + opts="$($GETOPT -o ncif -l no-symbols,clip,in-place,force -n >> "$PROGRAM" -- "$@")" >> local err=$? >> eval set -- "$opts" >> while true; do case $1 in >> -n|--no-symbols) symbols=""; shift ;; >> -c|--clip) clip=1; shift ;; >> -f|--force) force=1; shift ;; >> + -i|--in-place) inplace=1; shift ;; >> --) shift; break ;; >> esac done >> >> - [[ $err -ne 0 || $# -ne 2 ]] && die "Usage: $PROGRAM $COMMAND >> [--no-symbols,-n] [--clip,-c] [--force,-f] pass-name pass-length" >> + [[ $err -ne 0 || $# -ne 2 ]] && die "Usage: $PROGRAM $COMMAND >> [--no-symbols,-n] [--clip,-c] [--in-place,-i] [--force,-f] pass-name >> pass-length" >> local path="$1" >> local length="$2" >> check_sneaky_paths "$path" >> @@ -450,12 +452,24 @@ cmd_generate() { >> set_gpg_recipients "$(dirname "$path")" >> local passfile="$PREFIX/$path.gpg" >> >> - [[ $force -eq 0 && -e $passfile ]] && yesno "An entry already >> exists for $path. Overwrite it?" >> + [[ $inplace -eq 0 && $force -eq 0 && -e $passfile ]] && yesno "An >> entry already exists for $path. Overwrite it?" >> >> local pass="$(pwgen -s $symbols $length 1)" >> [[ -n $pass ]] || exit 1 >> - $GPG -e "${GPG_RECIPIENT_ARGS[@]}" -o "$passfile" "${GPG_OPTS[@]}" >> <<<"$pass" >> - git_add_file "$passfile" "Add generated password for $path to >> store." >> + if [[ $inplace -eq 0 ]]; then >> + $GPG -e "${GPG_RECIPIENT_ARGS[@]}" -o "$passfile" >> "${GPG_OPTS[@]}" <<<"$pass" >> + else >> + local >> passfile_temp="${passfile}.tmp.${RANDOM}.${RANDOM}.${RANDOM}.${RANDOM}.--" >> + if $GPG -d "${GPG_OPTS[@]}" "$passfile" | sed $'1c >> \\\n'"$(sed 's/[\/&]/\\&/g' <<<"$pass")"$'\n' | $GPG -e >> "${GPG_RECIPIENT_ARGS[@]}" -o "$passfile_temp" "${GPG_OPTS[@]}"; then >> + mv "$passfile_temp" "$passfile" >> + else >> + rm -f "$passfile_temp" >> + die "Could not reencrypt new password." >> + fi >> + fi >> + local verb="Add" >> + [[ $inplace -eq 1 ]] && verb="Replace" >> + git_add_file "$passfile" "$verb generated password for ${path}." >> >> if [[ $clip -eq 0 ]]; then >> echo "The generated password to $path is:" >> -- >> 1.9.2 >> > > > _______________________________________________ > Password-Store mailing list > [email protected] > http://lists.zx2c4.com/mailman/listinfo/password-store > -- Tobias V. Langhoff _______________________________________________ Password-Store mailing list [email protected] http://lists.zx2c4.com/mailman/listinfo/password-store
