[pass] Password-Store Digest, Vol 29, Issue 11
pc re
pcre at gmx.de
Tue Oct 20 15:37:23 CEST 2015
Hi,
i have implementedsomething similar.
https://github.com/d4ndo/pass2gorilla
Password gorilla needs some csv file to import password files.
You could also print it on paper or whatever.
cheers.
Am 20.10.2015 um 12:00 schrieb password-store-request at lists.zx2c4.com:
> Send Password-Store mailing list submissions to
> password-store at lists.zx2c4.com
>
> To subscribe or unsubscribe via the World Wide Web, visit
> http://lists.zx2c4.com/mailman/listinfo/password-store
> or, via email, send a message with subject or body 'help' to
> password-store-request at lists.zx2c4.com
>
> You can reach the person managing the list at
> password-store-owner at lists.zx2c4.com
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Password-Store digest..."
>
>
> Today's Topics:
>
> 1. Export command discussion and PATCH (Fredrik Wallgren)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Tue, 20 Oct 2015 10:34:00 +0200
> From: Fredrik Wallgren <fredrik.wallgren at gmail.com>
> To: password-store at lists.zx2c4.com
> Subject: [pass] Export command discussion and PATCH
> Message-ID: <20151020083400.GD2431 at smok.local>
> Content-Type: text/plain; charset="us-ascii"; Format="flowed"
>
> Hello!
>
> I'm thinking about migrating my passwords to `pass`, but I found that it was
> missing a function I "need", so I implemented it.
>
> This is ment to be a discussion about the supplied patch, since I'm not sure
> it is in mergeable condition.
>
> * The description in `--help` and `man pass` output should be looked at so it
> gets the same feel as other output.
> * Only exports three fields, name,password,extra where extra is all multiline
> data except the first line. Is more data needed?
> * The tests are pretty basic.
>
> My motivation behind the `export` command is that I would like to have a plain
> text backup (that is stored separately, or even in analog format somewhere
> safe). It might be that I'm paranoid (or not enough), but I'm more afraid that
> I would mess up with the GPG-key/password than the possibility of my plain
> text export falling in the wrong hands, since I'm not that proficient with GPG
> "yet".
>
> Description of the `export` command
> The command outputs all password in plain text to STDOUT or file if supplied.
> The command warns about that it might be a bad idea to export plain text
> passwords.
> The command warns before overwriting existing file if file output is
> requested.
> The output is CSV data with three fields name,password,extra and the data is
> quoted to support multiline data and names/passwords/extra data with quotes in
> them.
> The output contains CSV headers default, but has flag to skip them.
> The command contains flags to ignore warnings about existing files and plain
> text output.
>
> What do you think about this addition?
> Is it something you think should be in the application?
> Have I made any obvious mistakes? (I'm not that used to shell programming.)
> Do you have extra functionality you would like to see implemented?
>
> This is my first email patch, so please tell me if I made some mistake with
> it.
>
>
> Adds functionality for exporting passwords as plain text CSV data.
> ---
> man/pass.1 | 10 ++++++++++
> src/password-store.sh | 45 +++++++++++++++++++++++++++++++++++++++++++++
> tests/t0510-export.sh | 21 +++++++++++++++++++++
> 3 files changed, 76 insertions(+)
> create mode 100755 tests/t0510-export.sh
>
> diff --git a/man/pass.1 b/man/pass.1
> index e1fe605..439fb5b 100644
> --- a/man/pass.1
> +++ b/man/pass.1
> @@ -111,6 +111,13 @@ 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
> +\fBexport\fP [\fI--no-headers\fP, \fI-n\fP ] [ \fI--verbose\fP, \fI-v\fP ] [\fI--ignore\fP, \fI-i\fP ] [ \fI--force\fP, \fI-f\fP ] [ \fItarget-file\fP ]
> +Exports all passwords in plain text as CSV data. Writes to \fISTDOUT\fP if \fItarget-file\fP is not supplied.
> +Prompt before outputting plain text passwords, unless \fI--ignore\fP or \fI-i\fP is specified.
> +Prompt before overwriting an existing \fItarget-file\fP, unless \fI--force\fP or \fI-f\fP is specified.
> +Outputs name of secrets if \fI--verbose\fP or \fI-v\fP is specified.
> +Outputs headers in CSV data, unless \fI--no-headers\fP or \fI-n\fP is specified.
> +.TP
> \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)
> @@ -278,6 +285,9 @@ Remove password from store
> rm: remove regular file \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz-factory.gpg\[u2019]? y
> .br
> removed \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz-factory.gpg\[u2019]
> +.TP
> +Export passwords to CSV file
> +.B zx2c4 at laptop ~ $ pass export pass-export.csv
>
> .SH EXTENDED GIT EXAMPLE
> Here, we initialize new password store, create a git repository, and then manipulate and sync passwords. Make note of the arguments to the first call of \fBpass git push\fP; consult
> diff --git a/src/password-store.sh b/src/password-store.sh
> index d535a74..e5cab19 100755
> --- a/src/password-store.sh
> +++ b/src/password-store.sh
> @@ -234,6 +234,14 @@ cmd_usage() {
> overwriting existing password unless forced.
> $PROGRAM edit pass-name
> Insert a new password or edit an existing password using ${EDITOR:-vi}.
> + $PROGRAM export [--no-headers,-n] [--verbose,-v] [--ignore,-i] [--force,-f] [target-file]
> + Exports all passwords in plain text as CSV data to target-file or
> + to STDOUT if no target-file is supplied.
> + Outputs a warning prompt that passwords will be written to file
> + unencrypted, unless the --ignore flag is present.
> + Use the --force flag to force overwrite of target-file.
> + The --verbose flag outputs the name of secrets as they are exported.
> + Headers are generated for CSV data, unless the --no-headers flag is present.
> $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 $CLIP_TIME seconds.
> @@ -428,6 +436,42 @@ cmd_edit() {
> git_add_file "$passfile" "$action password for $path using ${EDITOR:-vi}."
> }
>
> +cmd_export() {
> + local opts no_headers=0 verbose=0 ignore=0 force=0
> + opts="$($GETOPT -o ifvn -l no-headers,verbose,ignore,force -n "$PROGRAM" -- "$@")"
> + local err=$?
> + eval set -- "$opts"
> + while true; do case $1 in
> + -f|--force) force=1; shift ;;
> + -i|--ignore) ignore=1; shift ;;
> + -v|--verbose) verbose=1; shift ;;
> + -n|--no-headers) no_headers=1; shift ;;
> + --) shift; break ;;
> + esac done
> +
> + local outfile="$1"
> + [[ $1 && $force -eq 0 && -e $outfile ]] && yesno "File $outfile does already exist. Overwrite it?"
> + [[ $1 ]] && exec 4>$1 || exec 4>&1
> +
> + [[ $no_headers -eq 0 ]] && echo "name,password,extra" >&4
> +
> + [[ $ignore -eq 0 ]] && yesno "Exporting data will write unencrypted data to disk. Continue?"
> +
> + shopt -s nullglob globstar
> + for file in "$PREFIX"/**/*.gpg; do
> + local filen="${file#$PREFIX/}"
> + local name=${filen%.*}
> + local contents="$($GPG -d "${GPG_OPTS[@]}" "$file")"
> + local pass=$(echo "$contents" | head -n 1)
> + local extra=$(echo "$contents" | tail -n +2)
> + name=${name//\"/\"\"}
> + pass=${pass//\"/\"\"}
> + extra=${extra//\"/\"\"}
> + [[ $verbose -ne 0 ]] && echo $name
> + printf "%s,%s,%s\n" "\"$name\"" "\"$pass\"" "\"$extra\"" >&4
> + done
> +}
> +
> cmd_generate() {
> local opts clip=0 force=0 symbols="-y" inplace=0
> opts="$($GETOPT -o ncif -l no-symbols,clip,in-place,force -n "$PROGRAM" -- "$@")"
> @@ -585,6 +629,7 @@ case "$1" in
> grep) shift; cmd_grep "$@" ;;
> insert|add) shift; cmd_insert "$@" ;;
> edit) shift; cmd_edit "$@" ;;
> + export) shift; cmd_export "$@" ;;
> generate) shift; cmd_generate "$@" ;;
> delete|rm|remove) shift; cmd_delete "$@" ;;
> rename|mv) shift; cmd_copy_move "move" "$@" ;;
> diff --git a/tests/t0510-export.sh b/tests/t0510-export.sh
> new file mode 100755
> index 0000000..aae309f
> --- /dev/null
> +++ b/tests/t0510-export.sh
> @@ -0,0 +1,21 @@
> +#!/usr/bin/env bash
> +
> +test_description='Test export'
> +cd "$(dirname "$0")"
> +. ./setup.sh
> +
> +test_expect_success 'Test "export" command' '
> + "$PASS" init $KEY1 &&
> + "$PASS" export -i
> +'
> +
> +test_expect_success 'Test "export" output' '
> + [[ $("$PASS" export -i) == name,password,extra ]]
> +'
> +
> +test_expect_success 'Test "export" output with passwords' '
> + "$PASS" insert -e "cred1"<<<"BLAH!!" &&
> + "$PASS" export -i | grep cred1
> +'
> +
> +test_done
>
More information about the Password-Store
mailing list