[pass] [PATCH] generate: add --in-place option

Tobias V. Langhoff tobias at langhoff.no
Tue May 6 20:05:26 CEST 2014


On Tue, May 6, 2014 at 5:24 PM, Jason A. Donenfeld <Jason at zx2c4.com> 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 <Jason at zx2c4.com> 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
> Password-Store at lists.zx2c4.com
> http://lists.zx2c4.com/mailman/listinfo/password-store
>



-- 
Tobias V. Langhoff


More information about the Password-Store mailing list