aboutsummaryrefslogtreecommitdiff
path: root/sysutils/password-store
diff options
context:
space:
mode:
authorSteve Wills <swills@FreeBSD.org>2012-09-24 14:04:31 +0000
committerSteve Wills <swills@FreeBSD.org>2012-09-24 14:04:31 +0000
commite9b9700f2cf162165ae3e235e44143ba95491ceb (patch)
tree1282411604c6c153b9e8957ae6127afedc6b56f0 /sysutils/password-store
parente85851d3bf42fca41814d0182deb60282e648c89 (diff)
downloadports-e9b9700f2cf162165ae3e235e44143ba95491ceb.tar.gz
ports-e9b9700f2cf162165ae3e235e44143ba95491ceb.zip
- Update to 1.4
- Patches updated PR: ports/171905 Submitted by: milki <milki@rescomp.berkeley.edu> (maintainer)
Notes
Notes: svn path=/head/; revision=304778
Diffstat (limited to 'sysutils/password-store')
-rw-r--r--sysutils/password-store/Makefile8
-rw-r--r--sysutils/password-store/distinfo4
-rw-r--r--sysutils/password-store/files/linuxism+git+xclip.patch558
-rw-r--r--sysutils/password-store/files/linuxism+git.patch470
-rw-r--r--sysutils/password-store/files/linuxism+xclip.patch381
-rw-r--r--sysutils/password-store/files/linuxism.patch239
6 files changed, 796 insertions, 864 deletions
diff --git a/sysutils/password-store/Makefile b/sysutils/password-store/Makefile
index 84dfd05bb1c7..43e80df2f0c5 100644
--- a/sysutils/password-store/Makefile
+++ b/sysutils/password-store/Makefile
@@ -1,7 +1,7 @@
# $FreeBSD$
PORTNAME= password-store
-PORTVERSION= 1.3.1
+PORTVERSION= 1.4
CATEGORIES= sysutils
MASTER_SITES= http://git.zx2c4.com/password-store/snapshot/
EXTRACT_SUFX= .tar.xz
@@ -17,7 +17,7 @@ RUN_DEPENDS= gnupg>=2:${PORTSDIR}/security/gnupg \
OPTIONS_DEFINE= GIT XCLIP
-GIT_DESC= Enable git backend
+GIT_DESC= Enable git storage
XCLIP_DESC= Enable xclip feature
.include <bsd.port.options.mk>
@@ -52,6 +52,7 @@ do-install:
@${MKDIR} ${DATADIR}
${INSTALL_DATA} ${WRKSRC}/contrib/pass.bash-completion ${DATADIR}/
${INSTALL_DATA} ${WRKSRC}/contrib/pass.zsh-completion ${DATADIR}/
+ ${INSTALL_DATA} ${WRKSRC}/contrib/pass.fish-completion ${DATADIR}/
${INSTALL_DATA} ${WRKSRC}/man/pass.1 ${MANPREFIX}/man/man1/pass.1
MAN1= pass.1
@@ -60,7 +61,8 @@ MANCOMPRESSED= no
PLIST_FILES= bin/pass \
libexec/pass \
share/password-store/pass.bash-completion \
- share/password-store/pass.zsh-completion
+ share/password-store/pass.zsh-completion \
+ share/password-store/pass.fish-completion
PLIST_DIRS= share/password-store
.include <bsd.port.mk>
diff --git a/sysutils/password-store/distinfo b/sysutils/password-store/distinfo
index e93ea26bb3d9..de994135ffdc 100644
--- a/sysutils/password-store/distinfo
+++ b/sysutils/password-store/distinfo
@@ -1,2 +1,2 @@
-SHA256 (password-store-1.3.1.tar.xz) = 351c0e2eb3315ca317026e73f7654a6351f2674000d9476b18c1525cbc5d732d
-SIZE (password-store-1.3.1.tar.xz) = 14864
+SHA256 (password-store-1.4.tar.xz) = 2e94b0078abdf4673f3c22bde048776a3c12776b1bc98c22e8fb6e684b0b4a9e
+SIZE (password-store-1.4.tar.xz) = 17968
diff --git a/sysutils/password-store/files/linuxism+git+xclip.patch b/sysutils/password-store/files/linuxism+git+xclip.patch
index 3e55bb955318..0ec9d82bd7b1 100644
--- a/sysutils/password-store/files/linuxism+git+xclip.patch
+++ b/sysutils/password-store/files/linuxism+git+xclip.patch
@@ -1,73 +1,162 @@
diff --git a/README b/README
-index 52e23af..f24107f 100644
+index 47ed64b..6ebfd68 100644
--- README
+++ README
-@@ -14,8 +14,6 @@ Please see the man page for documentation and examples.
-
- Depends on:
- - gpg2
+@@ -17,10 +17,6 @@ Depends on:
+ http://www.gnu.org/software/bash/
+ - GnuPG2
+ http://www.gnupg.org/
-- git
+- http://www.git-scm.com/
-- xclip
+- http://sourceforge.net/projects/xclip/
- pwgen
+ http://sourceforge.net/projects/pwgen/
- tree
- - GNU getopt
+diff --git a/contrib/pass.bash-completion b/contrib/pass.bash-completion
+index ccffbfa..b9f86e4 100644
+--- contrib/pass.bash-completion
++++ contrib/pass.bash-completion
+@@ -48,7 +48,7 @@ _pass()
+ {
+ COMPREPLY=()
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+- local commands="init ls show insert generate edit rm git help version"
++ local commands="init ls show insert generate edit rm help version"
+ if [[ $COMP_CWORD -gt 1 ]]; then
+ case "${COMP_WORDS[1]}" in
+ init)
+@@ -59,7 +59,6 @@ _pass()
+ _pass_complete_entries
+ ;;
+ show|-*)
+- COMPREPLY+=($(compgen -W "-c --clip" -- ${cur}))
+ _pass_complete_entries 1
+ ;;
+ insert)
+@@ -67,16 +66,13 @@ _pass()
+ _pass_complete_entries
+ ;;
+ generate)
+- COMPREPLY+=($(compgen -W "-n --no-symbols -c --clip -f --force" -- ${cur}))
++ COMPREPLY+=($(compgen -W "-n --no-symbols -f --force" -- ${cur}))
+ _pass_complete_entries
+ ;;
+ rm|remove|delete)
+ COMPREPLY+=($(compgen -W "-r --recursive -f --force" -- ${cur}))
+ _pass_complete_entries
+ ;;
+- git)
+- COMPREPLY+=($(compgen -W "init push pull config log reflog" -- ${cur}))
+- ;;
+ esac
+ else
+ COMPREPLY+=($(compgen -W "${commands}" -- ${cur}))
+diff --git a/contrib/pass.fish-completion b/contrib/pass.fish-completion
+index 7652d56..7d470b8 100644
+--- contrib/pass.fish-completion
++++ contrib/pass.fish-completion
+@@ -76,7 +76,6 @@ complete -c $PROG -f -A -n '__fish_pass_uses_command insert' -a "(__fish_pass_pr
+
+ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a generate -d 'Command: generate new password'
+ complete -c $PROG -f -A -n '__fish_pass_uses_command generate' -s n -l no-symbols -d 'Do not use special symbols'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command generate' -s c -l clip -d 'Put the password in clipboard'
+ complete -c $PROG -f -A -n '__fish_pass_uses_command generate' -s f -l force -d 'Do not prompt before overwritting'
+ complete -c $PROG -f -A -n '__fish_pass_uses_command generate' -a "(__fish_pass_print_entry_dirs)"
+
+@@ -89,16 +88,7 @@ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a edit -d 'Command: edit
+ complete -c $PROG -f -A -n '__fish_pass_uses_command edit' -a "(__fish_pass_print_entries)"
+
+ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a show -d 'Command: show existing password'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command show' -s c -l clip -d 'Put password in clipboard'
+ complete -c $PROG -f -A -n '__fish_pass_uses_command show' -a "(__fish_pass_print_entries)"
+ # When no command is given, `show` is defaulted.
+-complete -c $PROG -f -A -n '__fish_pass_needs_command' -s c -l clip -d 'Put password in clipboard'
+ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a "(__fish_pass_print_entries)"
+ complete -c $PROG -f -A -n '__fish_pass_uses_command -c' -a "(__fish_pass_print_entries)"
+-complete -c $PROG -f -A -n '__fish_pass_uses_command --clip' -a "(__fish_pass_print_entries)"
+-
+-complete -c $PROG -f -A -n '__fish_pass_needs_command' -a git -d 'Command: execute a git command'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'init' -d 'Initialize git repository'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'push' -d 'Push changes to remote repo'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'pull' -d 'Pull changes from remote repo'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'log' -d 'View changelog'
diff --git a/contrib/pass.zsh-completion b/contrib/pass.zsh-completion
-index 5cf8808..f589b5e 100644
+index c6fe678..4783a60 100644
--- contrib/pass.zsh-completion
+++ contrib/pass.zsh-completion
-@@ -27,9 +27,6 @@ _pass () {
- "generate[Generate a new password using pwgen]" \
- "edit[Edit a password with \$EDITOR]" \
- "rm[Remove the password]" \
-- "push[push the latest changes using git-push(1)]" \
-- "pull[pull the latest changes using git-pull(1)]" \
-- "git[Call git]" \
- "help[Help]"
- _pass_cmd_show
- fi
-@@ -45,7 +42,6 @@ _pass_cmd_ls () {
+@@ -39,8 +39,6 @@ _pass () {
+ _arguments : \
+ "-n[don't include symbols in password]" \
+ "--no-symbols[don't include symbols in password]" \
+- "-c[copy password to the clipboard]" \
+- "--clip[copy password to the clipboard]"
+ _pass_complete_entries_with_subdirs
+ ;;
+ rm)
+@@ -51,18 +49,6 @@ _pass () {
+ "--recursive[recursively delete]"
+ _pass_complete_entries_with_subdirs
+ ;;
+- git)
+- local -a subcommands
+- subcommands=(
+- "init:Initialize git repository"
+- "push:Push to remote repository"
+- "pull:Pull from remote repository"
+- "config:Show git config"
+- "log:Show git log"
+- "reflog:Show git reflog"
+- )
+- _describe -t commands 'pass git' subcommands
+- ;;
+ show|*)
+ _pass_cmd_show
+ ;;
+@@ -77,7 +63,6 @@ _pass () {
+ "generate:Generate a new password using pwgen"
+ "edit:Edit a password with \$EDITOR"
+ "rm:Remove the password"
+- "git:Call git on the password store"
+ "version:Output version information"
+ "help:Output help message"
+ )
+@@ -90,15 +75,12 @@ _pass () {
+ }
_pass_cmd_show () {
- _arguments : \
-- "-c[put it on the clipboard]" \
- '*::show:_get_stored_pwd'
- #'::pass id:_files -W ~/.password-store -g "*.gpg(|.*)(-.)"'
+- _arguments : \
+- "-c[put it on the clipboard]" \
+- "--clip[put it on the clipboard]"
+ _pass_complete_entries
}
-@@ -65,7 +61,6 @@ _pass_cmd_insert () {
- _pass_cmd_generate () {
- _arguments : \
- "-n[no symbols]" \
-- "-c[put password on the clipboard]" \
- '::show:_get_stored_pwd'
+ _pass_complete_entries_helper () {
+ local IFS=$'\n'
+ local prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
+- _values -C 'passwords' $(find "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort)
++ _values -C 'passwords' $(find "$prefix" -name .gpg-id -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort)
}
-@@ -75,6 +70,6 @@ _pass_cmd_rm () {
- }
-
- _get_stored_pwd () {
-- compadd `find ~/.password-store \( -name .git -o -name .gpg-id \) -prune -o -type f -print | sed 's#.*\.password-store*.##'| sed 's#\.gpg##' | sort`
-+ compadd `find ~/.password-store \( -name .gpg-id \) -prune -o -type f -print | sed 's#.*\.password-store*.##'| sed 's#\.gpg##' | sort`
-
- }
+ _pass_complete_entries_with_subdirs () {
diff --git a/man/pass.1 b/man/pass.1
-index a124c32..8eeb49b 100644
+index 3ccfa67..2f16727 100644
--- man/pass.1
+++ man/pass.1
-@@ -34,13 +34,6 @@ or
+@@ -33,13 +33,6 @@ or
depending on the type of specifier in ARGS. Otherwise COMMAND must be one of
the valid commands listed below.
-Several of the commands below rely on or provide additional functionality if
-the password store directory is also a git repository. If the password store
-directory is a git repository, all password store modification commands will
--cause a corresponding git commit. See the \fIEXAMPLES\fP section for an
--extended description using \fBinit\fP and
+-cause a corresponding git commit. See the \fIEXTENDED GIT EXAMPLE\fP section
+-for a detailed description using \fBinit\fP and
-.BR git (1).
-
The \fBinit\fP command must be run before other commands in order to initialize
- the password store with the correct gpg key id.
-
-@@ -64,12 +57,8 @@ by using the
+ the password store with the correct gpg key id. Passwords are encrypting using
+ the gpg key set with \fBinit\fP.
+@@ -68,12 +61,8 @@ by using the
.BR tree (1)
program. This command is alternatively named \fBlist\fP.
.TP
@@ -80,14 +169,14 @@ index a124c32..8eeb49b 100644
+\fBshow\fP \fIpass-name\fP
+Decrypt and print a password named \fIpass-name\fP.
.TP
- \fBinsert\fP [ \fI--no-echo\fP, \fI-n\fP | \fI--multiline\fP, \fI-m\fP ] [ \fI--force\fP, \fI-f\fP ]\fIpass-name\fP
+ \fBinsert\fP [ \fI--no-echo\fP, \fI-n\fP | \fI--multiline\fP, \fI-m\fP ] [ \fI--force\fP, \fI-f\fP ] \fIpass-name\fP
Insert a new password into the password store called \fIpass-name\fP. This will
-@@ -88,33 +77,16 @@ ensure that temporary files are created in \fI/dev/shm\fP in order to avoid writ
+@@ -92,15 +81,12 @@ 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 \fBTMPDIR\fP location, and print a warning.
+ 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 ] \fIpass-name pass-length\fP
-+\fBgenerate\fP [ \fI--no-symbols\fP, \fI-n\fP ] \fIpass-name pass-length\fP
+-\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--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
@@ -95,29 +184,26 @@ index a124c32..8eeb49b 100644
-If \fI--clip\fP or \fI-c\fP is specified, do not print the password but instead copy
-it to the clipboard using
-.BR xclip (1)
--and then restore the clipboard after 45 seconds.
+-and then restore the clipboard after 45 seconds. Prompt before overwriting an existing password,
++Prompt before overwriting an existing password,
+ unless \fI--force\fP or \fI-f\fP is specified.
.TP
- \fBrm\fP \fIpass-name\fP
- Remove the password named \fIpass-name\fP from the password store. This command is
- alternatively named \fBremove\fP.
+ \fBrm\fP [ \fI--recursive\fP, \fI-r\fP ] [ \fI--force\fP, \fI-f\fP ] \fIpass-name\fP
+@@ -109,13 +95,6 @@ alternatively named \fBremove\fP or \fBdelete\fP. If \fI--recursive\fP or \fI-r\
+ is specified, delete pass-name recursively if it is a directory. If \fI--force\fP
+ or \fI-f\fP is specified, do not interactively prompt before removal.
.TP
--\fBpush\fP
--If the password store is a git repository, push the latest changes using
--.BR git-push (1).
--.TP
--\fBpull\fP
--If the password store is a git repository, pull the latest changes using
--.BR git-pull (1).
--.TP
-\fBgit\fP \fIgit-command-args\fP...
-If the password store is a git repository, pass \fIgit-command-args\fP as arguments to
-.BR git (1)
--using the password store as the git repository.
+-using the password store as the git repository. If \fIgit-command-args\fP is \fBinit\fP,
+-in addition to initializing the git repository, add the current contents of the password
+-store to the repository in an initial commit.
-.TP
\fBhelp\fP
Show usage message.
.TP
-@@ -165,11 +137,6 @@ Show existing password
+@@ -166,11 +145,6 @@ Show existing password
.br
sup3rh4x3rizmynam3
.TP
@@ -129,7 +215,7 @@ index a124c32..8eeb49b 100644
Add password to store
.B zx2c4@laptop ~ $ pass insert Business/cheese-whiz-factory
.br
-@@ -208,11 +175,6 @@ The generated password to Email/jasondonenfeld.com is:
+@@ -209,10 +183,8 @@ The generated password to Email/jasondonenfeld.com is:
.br
YqFsMkBeO6di
.TP
@@ -137,41 +223,53 @@ index a124c32..8eeb49b 100644
-.B zx2c4@laptop ~ $ pass -c generate Email/jasondonenfeld.com 19
-.br
-Copied Email/jasondonenfeld.com to clipboard. Will clear in 45 seconds.
--.TP
++Generate new password
++.B zx2c4@laptop ~ $ pass generate Email/jasondonenfeld.com 19
+ .TP
Remove password from store
.B zx2c4@laptop ~ $ pass remove Business/cheese-whiz-factory
- .br
-@@ -220,10 +182,8 @@ rm: remove regular file \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz
+@@ -221,99 +193,6 @@ rm: remove regular file \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz
.br
removed \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz-factory.gpg\[u2019]
-.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 push\fP; consult
+-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
-.BR git-push (1)
-for more information.
-+.SH EXTENDED EXAMPLE
-+Here, we initialize new password store, and then manipulate and sync passwords.
-
- .B zx2c4@laptop ~ $ pass init Jason@zx2c4.com
- .br
-@@ -231,12 +191,6 @@ mkdir: created directory \[u2018]/home/zx2c4/.password-store\[u2019]
- .br
- Password store initialized for Jason@zx2c4.com.
-
+-
+-.B zx2c4@laptop ~ $ pass init Jason@zx2c4.com
+-.br
+-mkdir: created directory \[u2018]/home/zx2c4/.password-store\[u2019]
+-.br
+-Password store initialized for Jason@zx2c4.com.
+-
-.B zx2c4@laptop ~ $ pass git init
-.br
--Initialized empty Git repository in /home/zx2c4/.password-store/.git/
+-Initialized empty Git repository in /home/zx2c4/.password-store/.git/
+-.br
+-[master (root-commit) 998c8fd] Added current contents of password store.
+-.br
+- 1 file changed, 1 insertion(+)
+-.br
+- create mode 100644 .gpg-id
-
-.B zx2c4@laptop ~ $ pass git remote add origin kexec.com:pass-store
-
- .B zx2c4@laptop ~ $ pass generate Amazon/amazonemail@email.com 21
- .br
- mkdir: created directory \[u2018]/home/zx2c4/.password-store/Amazon\[u2019]
-@@ -251,24 +205,6 @@ The generated password to Amazon/amazonemail@email.com is:
- .br
- <5m,_BrZY`antNDxKN<0A
-
--.B zx2c4@laptop ~ $ pass push -u --all
+-.B zx2c4@laptop ~ $ pass generate Amazon/amazonemail@email.com 21
+-.br
+-mkdir: created directory \[u2018]/home/zx2c4/.password-store/Amazon\[u2019]
+-.br
+-[master 30fdc1e] Added generated password for Amazon/amazonemail@email.com to store.
+-.br
+-1 file changed, 0 insertions(+), 0 deletions(-)
+-.br
+-create mode 100644 Amazon/amazonemail@email.com.gpg
+-.br
+-The generated password to Amazon/amazonemail@email.com is:
+-.br
+-<5m,_BrZY`antNDxKN<0A
+-
+-.B zx2c4@laptop ~ $ pass git push -u --all
-.br
-Counting objects: 4, done.
-.br
@@ -189,14 +287,31 @@ index a124c32..8eeb49b 100644
-.br
-Branch master set up to track remote branch master from origin.
-
- .B zx2c4@laptop ~ $ pass insert Amazon/otheraccount@email.com
- .br
- Enter password for Amazon/otheraccount@email.com: som3r3a11yb1gp4ssw0rd!!88**
-@@ -293,20 +229,6 @@ rm 'Amazon/amazonemail@email.com.gpg'
- .br
- delete mode 100644 Amazon/amazonemail@email.com.gpg
-
--.B zx2c4@laptop ~ $ pass push
+-.B zx2c4@laptop ~ $ pass insert Amazon/otheraccount@email.com
+-.br
+-Enter password for Amazon/otheraccount@email.com: som3r3a11yb1gp4ssw0rd!!88**
+-.br
+-[master b9b6746] Added given password for Amazon/otheraccount@email.com to store.
+-.br
+-1 file changed, 0 insertions(+), 0 deletions(-)
+-.br
+-create mode 100644 Amazon/otheraccount@email.com.gpg
+-
+-.B zx2c4@laptop ~ $ pass rm Amazon/amazonemail@email.com
+-.br
+-rm: remove regular file \[u2018]/home/zx2c4/.password-store/Amazon/amazonemail@email.com.gpg\[u2019]? y
+-.br
+-removed \[u2018]/home/zx2c4/.password-store/Amazon/amazonemail@email.com.gpg\[u2019]
+-.br
+-rm 'Amazon/amazonemail@email.com.gpg'
+-.br
+-[master 288b379] Removed Amazon/amazonemail@email.com from store.
+-.br
+-1 file changed, 0 insertions(+), 0 deletions(-)
+-.br
+-delete mode 100644 Amazon/amazonemail@email.com.gpg
+-
+-.B zx2c4@laptop ~ $ pass git push
-.br
-Counting objects: 9, done.
-.br
@@ -213,7 +328,18 @@ index a124c32..8eeb49b 100644
.SH FILES
.TP
-@@ -320,8 +242,6 @@ be set using the \fBinit\fP command.
+@@ -333,19 +212,12 @@ Overrides the default password storage directory.
+ .I PASSWORD_STORE_KEY
+ Overrides the default gpg key identification set by \fBinit\fP.
+ .TP
+-.I PASSWORD_STORE_GIT
+-Overrides the default root of the git repository, which is helpful if
+-\fIPASSWORD_STORE_DIR\fP is temporarily set to a sub-directory of the default
+-password store.
+-.TP
+ .I EDITOR
+ The location of the text editor used by \fBedit\fP.
+
.SH SEE ALSO
.BR gpg (1),
.BR pwgen (1),
@@ -223,31 +349,30 @@ index a124c32..8eeb49b 100644
.SH AUTHOR
.B pass
diff --git a/src/password-store.sh b/src/password-store.sh
-index 1553e5b..103dfd1 100755
+index 503bac4..ecc4665 100755
--- src/password-store.sh
+++ src/password-store.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/local/bin/bash
- # (C) Copyright 2012 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
- # This is released under the GPLv2+. Please see COPYING for more information.
-@@ -7,11 +7,9 @@ umask 077
+ # Copyright (C) 2012 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ # This file is licensed under the GPLv2+. Please see COPYING for more information.
+@@ -7,12 +7,8 @@ umask 077
PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
ID="$PREFIX/.gpg-id"
--GIT="$PREFIX/.git"
+-GIT_DIR="${PASSWORD_STORE_GIT:-$PREFIX}/.git"
GPG_OPTS="--quiet --yes --batch"
--
--export GIT_DIR="$GIT"
--export GIT_WORK_TREE="$PREFIX"
-+GETOPT=/usr/local/bin/getopt
-+GPG=gpg2
+-export GIT_DIR
+-export GIT_WORK_TREE="${PASSWORD_STORE_GIT:-$PREFIX}"
+-
version() {
cat <<_EOF
-@@ -34,27 +32,18 @@ Usage:
- Initialize new password storage and use gpg-id for encryption.
+ |-----------------------|
+@@ -35,24 +31,19 @@ Usage:
+ Optionally reencrypt existing passwords using new gpg-id.
$program [ls] [subfolder]
List passwords.
- $program [show] [--clip,-c] pass-name
@@ -261,31 +386,41 @@ index 1553e5b..103dfd1 100755
before 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] pass-name pass-length
-+ $program generate [--no-symbols,-n] pass-name pass-length
+- $program generate [--no-symbols,-n] [--clip,-c] [--force,-f] pass-name pass-length
++ $program generate [--no-symbols,-n] [--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.
- $program rm pass-name
- Remove existing password.
-- $program push
-- If the password store is a git repository, push the latest changes.
-- $program pull
-- If the password store is a git repository, pull the latest changes.
+ Prompt before overwriting existing password unless forced.
+ $program rm [--recursive,-r] [--force,-f] pass-name
+ Remove existing password or directory, optionally forcefully.
- $program git git-command-args...
- If the password store is a git repository, execute a git command
- specified by git-command-args.
$program help
Show this text.
$program version
-@@ -63,32 +52,10 @@ _EOF
+@@ -63,16 +54,10 @@ _EOF
}
- isCommand() {
+ is_command() {
case "$1" in
-- init|ls|list|show|insert|edit|generate|remove|rm|delete|push|pull|git|help|--help|version|--version) return 0 ;;
+- init|ls|list|show|insert|edit|generate|remove|rm|delete|git|help|--help|version|--version) return 0 ;;
+ init|ls|list|show|insert|edit|generate|remove|rm|delete|help|--help|version|--version) return 0 ;;
*) return 1 ;;
esac
}
+-git_add_file() {
+- [[ -d $GIT_DIR ]] || return
+- git add "$1" || return
+- [[ -n $(git status --porcelain "$1") ]] || return
+- git commit -m "$2"
+-}
+ yesno() {
+ read -p "$1 [y/N] " response
+ [[ $response == "y" || $response == "Y" ]] || exit 1
+@@ -80,49 +65,24 @@ yesno() {
+ #
+ # BEGIN Platform definable
+ #
-clip() {
- # This base64 business is a disgusting hack to deal with newline inconsistancies
- # in shell. There must be a better way to deal with this, but because I'm a dolt,
@@ -299,172 +434,165 @@ index 1553e5b..103dfd1 100755
- if [[ $now != $(echo -n "$1" | base64) ]]; then
- before="$now"
- fi
+
- # It might be nice to programatically check to see if klipper exists,
- # as well as checking for other common clipboard managers. But for now,
-- # this works fine. Clipboard managers frequently write their history
-- # out in plaintext, so we axe it here.
-- qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory >/dev/null 2>&1
+- # this works fine -- if qdbus isn't there or if klipper isn't running,
+- # this essentially becomes a no-op.
+- #
+- # Clipboard managers frequently write their history out in plaintext,
+- # so we axe it here:
+- qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory &>/dev/null
+-
- echo "$before" | base64 -d | xclip -selection clipboard
- ) & disown
- echo "Copied $2 to clipboard. Will clear in 45 seconds."
-}
- program="$(basename "$0")"
- command="$1"
- if isCommand "$command"; then
-@@ -132,18 +99,10 @@ fi
+ tmpdir() {
+- if [[ -d /dev/shm && -w /dev/shm && -x /dev/shm ]]; then
+- tmp_dir="$(TMPDIR=/dev/shm mktemp -t "$template" -d)"
++ ramdisk="/var/tmp/password-store.ramdisk"
++ if [[ -d $ramdisk && -w $ramdisk && -x $ramdisk ]]; then
++ tmp_dir="$(TMPDIR=$ramdisk mktemp -t "$template" -d)"
+ else
+- yesno "$(echo "Your system does not have /dev/shm, which means that it may"
+- echo "be difficult to entirely erase the temporary non-encrypted"
+- echo "password file after editing. Are you sure you would like to"
+- echo -n "continue?")"
++ yesno "$(echo "A ramdisk does not exist at $ramdisk, which means that it may"
++ echo "be difficult to entirely erase the temporary non-encrypted"
++ echo "password file after editing. Are you sure you would like to"
++ echo -n "continue?")"
++
+ tmp_dir="$(mktemp -t "$template" -d)"
+ fi
+-
+ }
+-GPG="gpg"
+-GETOPT="getopt"
+
+-# source /path/to/platform-defined-functions
++GPG="gpg2"
++GETOPT="/usr/local/bin/getopt"
++
+ #
+ # END Platform definable
+ #
+@@ -156,14 +116,12 @@ case "$command" in
+ mkdir -v -p "$PREFIX"
+ echo "$gpg_id" > "$ID"
+ echo "Password store initialized for $gpg_id."
+- git_add_file "$ID" "Set GPG id to $gpg_id."
+
+ if [[ $reencrypt -eq 1 ]]; then
+ find "$PREFIX" -iname '*.gpg' | while read passfile; do
+ $GPG -d $GPG_OPTS "$passfile" | $GPG -e -r "$gpg_id" -o "$passfile.new" $GPG_OPTS &&
+ mv -v "$passfile.new" "$passfile"
+ done
+- git_add_file "$PREFIX" "Reencrypted entire store using new GPG id $gpg_id."
+ fi
+ exit 0
+ ;;
+@@ -192,18 +150,8 @@ fi
case "$command" in
show|ls|list)
- clip=0
-
-- opts="$(getopt -o c -l clip -n $program -- "$@")"
- err=$?
+- opts="$($GETOPT -o c -l clip -n "$program" -- "$@")"
+- err=$?
- eval set -- "$opts"
- while true; do case $1 in
- -c|--clip) clip=1; shift ;;
- --) shift; break ;;
- esac done
-
+-
if [[ $err -ne 0 ]]; then
- echo "Usage: $program $command [--clip,-c] [pass-name]"
+ echo "Usage: $program $command [pass-name]"
exit 1
fi
-@@ -161,11 +120,7 @@ case "$command" in
+@@ -221,11 +169,7 @@ case "$command" in
echo "$path is not in the password store."
exit 1
fi
-- if [ $clip -eq 0 ]; then
-- exec gpg -q -d --yes --batch "$passfile"
+- if [[ $clip -eq 0 ]]; then
+- exec $GPG -d $GPG_OPTS "$passfile"
- else
-- clip "$(gpg -q -d --yes --batch "$passfile" | head -n 1)" "$path"
+- clip "$($GPG -d $GPG_OPTS "$passfile" | head -n 1)" "$path"
- fi
-+ exec $GPG -q -d --yes --batch "$passfile"
++ exec $GPG -d $GPG_OPTS "$passfile"
fi
;;
insert)
-@@ -173,7 +128,7 @@ case "$command" in
- noecho=0
- force=0
-
-- opts="$(getopt -o mnf -l multiline,no-echo,force -n $program -- "$@")"
-+ opts="$($GETOPT -o mnf -l multiline,no-echo,force -n $program -- "$@")"
- err=$?
- eval set -- "$opts"
- while true; do case $1 in
-@@ -201,7 +156,7 @@ case "$command" in
- if [[ $ml -eq 1 ]]; then
- echo "Enter contents of $path and press Ctrl+D when finished:"
- echo
-- cat | gpg -e -r "$ID" -o "$passfile" $GPG_OPTS
-+ cat | $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS
- elif [[ $noecho -eq 1 ]]; then
- while true; do
- read -p "Enter password for $path: " -s password
-@@ -209,7 +164,7 @@ case "$command" in
- read -p "Retype password for $path: " -s password_again
- echo
- if [[ $password == $password_again ]]; then
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
- break
- else
- echo "Error: the entered passwords do not match."
-@@ -217,11 +172,7 @@ case "$command" in
- done
- else
+@@ -275,7 +219,6 @@ case "$command" in
read -p "Enter password for $path: " -e password
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
-- fi
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "Added given password for $path to store."
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
fi
+- git_add_file "$passfile" "Added given password for $path to store."
;;
edit)
-@@ -252,35 +203,28 @@ case "$command" in
-
- action="Added"
- if [[ -f $passfile ]]; then
-- gpg -d -o "$tmp_file" $GPG_OPTS "$passfile" || exit 1
-+ $GPG -d -o "$tmp_file" $GPG_OPTS "$passfile" || exit 1
- action="Edited"
- fi
- ${EDITOR:-vi} "$tmp_file"
-- while ! gpg -e -r "$ID" -o "$passfile" $GPG_OPTS "$tmp_file"; do
-+ while ! $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS "$tmp_file"; do
+ if [[ $# -ne 1 ]]; then
+@@ -303,25 +246,22 @@ case "$command" in
echo "GPG encryption failed. Retrying."
sleep 1
done
--
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "$action password for $path using ${EDITOR:-vi}."
-- fi
+- git_add_file "$passfile" "$action password for $path using ${EDITOR:-vi}."
;;
generate)
- clip=0
+ force=0
symbols="-y"
-- opts="$(getopt -o nc -l no-symbols,clip -n $program -- "$@")"
-+ opts="$($GETOPT -o nc -l no-symbols -n $program -- "$@")"
+- opts="$($GETOPT -o ncf -l no-symbols,clip,force -n "$program" -- "$@")"
++ opts="$($GETOPT -o ncf -l no-symbols,force -n "$program" -- "$@")"
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 ;;
--) shift; break ;;
esac done
if [[ $err -ne 0 || $# -ne 2 ]]; then
-- echo "Usage: $program $command [--no-symbols,-n] [--clip,-c] pass-name pass-length"
-+ echo "Usage: $program $command [--no-symbols,-n] pass-name pass-length"
+- echo "Usage: $program $command [--no-symbols,-n] [--clip,-c] [--force,-f] pass-name pass-length"
++ echo "Usage: $program $command [--no-symbols,-n] [--force,-f] pass-name pass-length"
exit 1
fi
path="$1"
-@@ -292,18 +236,9 @@ case "$command" in
- mkdir -p -v "$PREFIX/$(dirname "$path")"
+@@ -338,14 +278,9 @@ case "$command" in
pass="$(pwgen -s $symbols $length 1)"
- passfile="$PREFIX/$path.gpg"
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "Added generated password for $path to store."
-- fi
--
-- if [ $clip -eq 0 ]; then
+ [[ -n $pass ]] || exit 1
+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
+- git_add_file "$passfile" "Added generated password for $path to store."
+
+- if [[ $clip -eq 0 ]]; then
- echo "The generated password to $path is:"
- echo "$pass"
- else
- clip "$pass" "$path"
- fi
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
+ echo "The generated password to $path is:"
+ echo "$pass"
;;
delete|rm|remove)
- if [[ $# -ne 1 ]]; then
-@@ -317,26 +252,6 @@ case "$command" in
- exit 1
- fi
- rm -i -v "$passfile"
-- if [[ -d $GIT ]] && ! [[ -f $passfile ]]; then
-- git rm -f "$passfile"
+ recursive=""
+@@ -377,21 +312,6 @@ case "$command" in
+ [[ $force -eq 1 ]] || yesno "Are you sure you would like to delete $path?"
+
+ rm $recursive -f -v "$passfile"
+- if [[ -d $GIT_DIR && ! -e $passfile ]]; then
+- git rm -qr "$passfile"
- git commit -m "Removed $path from store."
- fi
- ;;
-- push|pull)
-- if [[ -d $GIT ]]; then
-- exec git $command "$@"
-- else
-- echo "Error: the password store is not a git repository."
-- exit 1
-- fi
-- ;;
- git)
-- if [[ $1 == "init" ]] || [[ -d $GIT ]]; then
+- if [[ $1 == "init" ]]; then
+- git "$@" || exit 1
+- git_add_file "$PREFIX" "Added current contents of password store."
+- elif [[ -d $GIT_DIR ]]; then
- exec git "$@"
- else
- echo "Error: the password store is not a git repository."
diff --git a/sysutils/password-store/files/linuxism+git.patch b/sysutils/password-store/files/linuxism+git.patch
index 98267c063aa9..299829e6d613 100644
--- a/sysutils/password-store/files/linuxism+git.patch
+++ b/sysutils/password-store/files/linuxism+git.patch
@@ -1,106 +1,167 @@
diff --git a/README b/README
-index 52e23af..273aa27 100644
+index 47ed64b..65a041e 100644
--- README
+++ README
-@@ -14,7 +14,6 @@ Please see the man page for documentation and examples.
-
- Depends on:
- - gpg2
+@@ -17,8 +17,6 @@ Depends on:
+ http://www.gnu.org/software/bash/
+ - GnuPG2
+ http://www.gnupg.org/
-- git
+- http://www.git-scm.com/
- xclip
+ http://sourceforge.net/projects/xclip/
- pwgen
- - tree
+diff --git a/contrib/pass.bash-completion b/contrib/pass.bash-completion
+index ccffbfa..aa7e7d8 100644
+--- contrib/pass.bash-completion
++++ contrib/pass.bash-completion
+@@ -48,7 +48,7 @@ _pass()
+ {
+ COMPREPLY=()
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+- local commands="init ls show insert generate edit rm git help version"
++ local commands="init ls show insert generate edit rm help version"
+ if [[ $COMP_CWORD -gt 1 ]]; then
+ case "${COMP_WORDS[1]}" in
+ init)
+@@ -74,9 +74,6 @@ _pass()
+ COMPREPLY+=($(compgen -W "-r --recursive -f --force" -- ${cur}))
+ _pass_complete_entries
+ ;;
+- git)
+- COMPREPLY+=($(compgen -W "init push pull config log reflog" -- ${cur}))
+- ;;
+ esac
+ else
+ COMPREPLY+=($(compgen -W "${commands}" -- ${cur}))
+diff --git a/contrib/pass.fish-completion b/contrib/pass.fish-completion
+index 7652d56..086e7ee 100644
+--- contrib/pass.fish-completion
++++ contrib/pass.fish-completion
+@@ -96,9 +96,3 @@ complete -c $PROG -f -A -n '__fish_pass_needs_command' -s c -l clip -d 'Put pass
+ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a "(__fish_pass_print_entries)"
+ complete -c $PROG -f -A -n '__fish_pass_uses_command -c' -a "(__fish_pass_print_entries)"
+ complete -c $PROG -f -A -n '__fish_pass_uses_command --clip' -a "(__fish_pass_print_entries)"
+-
+-complete -c $PROG -f -A -n '__fish_pass_needs_command' -a git -d 'Command: execute a git command'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'init' -d 'Initialize git repository'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'push' -d 'Push changes to remote repo'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'pull' -d 'Pull changes from remote repo'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'log' -d 'View changelog'
diff --git a/contrib/pass.zsh-completion b/contrib/pass.zsh-completion
-index 5cf8808..cab22e0 100644
+index c6fe678..9fe974d 100644
--- contrib/pass.zsh-completion
+++ contrib/pass.zsh-completion
-@@ -27,9 +27,6 @@ _pass () {
- "generate[Generate a new password using pwgen]" \
- "edit[Edit a password with \$EDITOR]" \
- "rm[Remove the password]" \
-- "push[push the latest changes using git-push(1)]" \
-- "pull[pull the latest changes using git-pull(1)]" \
-- "git[Call git]" \
- "help[Help]"
- _pass_cmd_show
- fi
-@@ -75,6 +72,6 @@ _pass_cmd_rm () {
+@@ -51,18 +51,6 @@ _pass () {
+ "--recursive[recursively delete]"
+ _pass_complete_entries_with_subdirs
+ ;;
+- git)
+- local -a subcommands
+- subcommands=(
+- "init:Initialize git repository"
+- "push:Push to remote repository"
+- "pull:Pull from remote repository"
+- "config:Show git config"
+- "log:Show git log"
+- "reflog:Show git reflog"
+- )
+- _describe -t commands 'pass git' subcommands
+- ;;
+ show|*)
+ _pass_cmd_show
+ ;;
+@@ -77,7 +65,6 @@ _pass () {
+ "generate:Generate a new password using pwgen"
+ "edit:Edit a password with \$EDITOR"
+ "rm:Remove the password"
+- "git:Call git on the password store"
+ "version:Output version information"
+ "help:Output help message"
+ )
+@@ -98,7 +85,7 @@ _pass_cmd_show () {
+ _pass_complete_entries_helper () {
+ local IFS=$'\n'
+ local prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
+- _values -C 'passwords' $(find "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort)
++ _values -C 'passwords' $(find "$prefix" -name .gpg-id -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort)
}
- _get_stored_pwd () {
-- compadd `find ~/.password-store \( -name .git -o -name .gpg-id \) -prune -o -type f -print | sed 's#.*\.password-store*.##'| sed 's#\.gpg##' | sort`
-+ compadd `find ~/.password-store \( -name .gpg-id \) -prune -o -type f -print | sed 's#.*\.password-store*.##'| sed 's#\.gpg##' | sort`
-
- }
+ _pass_complete_entries_with_subdirs () {
diff --git a/man/pass.1 b/man/pass.1
-index a124c32..c2ff884 100644
+index 3ccfa67..2ea765b 100644
--- man/pass.1
+++ man/pass.1
-@@ -34,13 +34,6 @@ or
+@@ -33,13 +33,6 @@ or
depending on the type of specifier in ARGS. Otherwise COMMAND must be one of
the valid commands listed below.
-Several of the commands below rely on or provide additional functionality if
-the password store directory is also a git repository. If the password store
-directory is a git repository, all password store modification commands will
--cause a corresponding git commit. See the \fIEXAMPLES\fP section for an
--extended description using \fBinit\fP and
+-cause a corresponding git commit. See the \fIEXTENDED GIT EXAMPLE\fP section
+-for a detailed description using \fBinit\fP and
-.BR git (1).
-
The \fBinit\fP command must be run before other commands in order to initialize
- the password store with the correct gpg key id.
-
-@@ -102,19 +95,6 @@ and then restore the clipboard after 45 seconds.
- Remove the password named \fIpass-name\fP from the password store. This command is
- alternatively named \fBremove\fP.
+ the password store with the correct gpg key id. Passwords are encrypting using
+ the gpg key set with \fBinit\fP.
+@@ -109,13 +102,6 @@ alternatively named \fBremove\fP or \fBdelete\fP. If \fI--recursive\fP or \fI-r\
+ is specified, delete pass-name recursively if it is a directory. If \fI--force\fP
+ or \fI-f\fP is specified, do not interactively prompt before removal.
.TP
--\fBpush\fP
--If the password store is a git repository, push the latest changes using
--.BR git-push (1).
--.TP
--\fBpull\fP
--If the password store is a git repository, pull the latest changes using
--.BR git-pull (1).
--.TP
-\fBgit\fP \fIgit-command-args\fP...
-If the password store is a git repository, pass \fIgit-command-args\fP as arguments to
-.BR git (1)
--using the password store as the git repository.
+-using the password store as the git repository. If \fIgit-command-args\fP is \fBinit\fP,
+-in addition to initializing the git repository, add the current contents of the password
+-store to the repository in an initial commit.
-.TP
\fBhelp\fP
Show usage message.
.TP
-@@ -220,10 +200,8 @@ rm: remove regular file \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz
+@@ -221,99 +207,6 @@ rm: remove regular file \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz
.br
removed \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz-factory.gpg\[u2019]
-.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 push\fP; consult
+-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
-.BR git-push (1)
-for more information.
-+.SH EXTENDED EXAMPLE
-+Here, we initialize new password store, and then manipulate and sync passwords.
-
- .B zx2c4@laptop ~ $ pass init Jason@zx2c4.com
- .br
-@@ -231,12 +209,6 @@ mkdir: created directory \[u2018]/home/zx2c4/.password-store\[u2019]
- .br
- Password store initialized for Jason@zx2c4.com.
-
+-
+-.B zx2c4@laptop ~ $ pass init Jason@zx2c4.com
+-.br
+-mkdir: created directory \[u2018]/home/zx2c4/.password-store\[u2019]
+-.br
+-Password store initialized for Jason@zx2c4.com.
+-
-.B zx2c4@laptop ~ $ pass git init
-.br
--Initialized empty Git repository in /home/zx2c4/.password-store/.git/
+-Initialized empty Git repository in /home/zx2c4/.password-store/.git/
+-.br
+-[master (root-commit) 998c8fd] Added current contents of password store.
+-.br
+- 1 file changed, 1 insertion(+)
+-.br
+- create mode 100644 .gpg-id
-
-.B zx2c4@laptop ~ $ pass git remote add origin kexec.com:pass-store
-
- .B zx2c4@laptop ~ $ pass generate Amazon/amazonemail@email.com 21
- .br
- mkdir: created directory \[u2018]/home/zx2c4/.password-store/Amazon\[u2019]
-@@ -251,24 +223,6 @@ The generated password to Amazon/amazonemail@email.com is:
- .br
- <5m,_BrZY`antNDxKN<0A
-
--.B zx2c4@laptop ~ $ pass push -u --all
+-.B zx2c4@laptop ~ $ pass generate Amazon/amazonemail@email.com 21
+-.br
+-mkdir: created directory \[u2018]/home/zx2c4/.password-store/Amazon\[u2019]
+-.br
+-[master 30fdc1e] Added generated password for Amazon/amazonemail@email.com to store.
+-.br
+-1 file changed, 0 insertions(+), 0 deletions(-)
+-.br
+-create mode 100644 Amazon/amazonemail@email.com.gpg
+-.br
+-The generated password to Amazon/amazonemail@email.com is:
+-.br
+-<5m,_BrZY`antNDxKN<0A
+-
+-.B zx2c4@laptop ~ $ pass git push -u --all
-.br
-Counting objects: 4, done.
-.br
@@ -118,14 +179,31 @@ index a124c32..c2ff884 100644
-.br
-Branch master set up to track remote branch master from origin.
-
- .B zx2c4@laptop ~ $ pass insert Amazon/otheraccount@email.com
- .br
- Enter password for Amazon/otheraccount@email.com: som3r3a11yb1gp4ssw0rd!!88**
-@@ -293,20 +247,6 @@ rm 'Amazon/amazonemail@email.com.gpg'
- .br
- delete mode 100644 Amazon/amazonemail@email.com.gpg
-
--.B zx2c4@laptop ~ $ pass push
+-.B zx2c4@laptop ~ $ pass insert Amazon/otheraccount@email.com
+-.br
+-Enter password for Amazon/otheraccount@email.com: som3r3a11yb1gp4ssw0rd!!88**
+-.br
+-[master b9b6746] Added given password for Amazon/otheraccount@email.com to store.
+-.br
+-1 file changed, 0 insertions(+), 0 deletions(-)
+-.br
+-create mode 100644 Amazon/otheraccount@email.com.gpg
+-
+-.B zx2c4@laptop ~ $ pass rm Amazon/amazonemail@email.com
+-.br
+-rm: remove regular file \[u2018]/home/zx2c4/.password-store/Amazon/amazonemail@email.com.gpg\[u2019]? y
+-.br
+-removed \[u2018]/home/zx2c4/.password-store/Amazon/amazonemail@email.com.gpg\[u2019]
+-.br
+-rm 'Amazon/amazonemail@email.com.gpg'
+-.br
+-[master 288b379] Removed Amazon/amazonemail@email.com from store.
+-.br
+-1 file changed, 0 insertions(+), 0 deletions(-)
+-.br
+-delete mode 100644 Amazon/amazonemail@email.com.gpg
+-
+-.B zx2c4@laptop ~ $ pass git push
-.br
-Counting objects: 9, done.
-.br
@@ -142,7 +220,18 @@ index a124c32..c2ff884 100644
.SH FILES
.TP
-@@ -320,7 +260,6 @@ be set using the \fBinit\fP command.
+@@ -333,18 +226,12 @@ Overrides the default password storage directory.
+ .I PASSWORD_STORE_KEY
+ Overrides the default gpg key identification set by \fBinit\fP.
+ .TP
+-.I PASSWORD_STORE_GIT
+-Overrides the default root of the git repository, which is helpful if
+-\fIPASSWORD_STORE_DIR\fP is temporarily set to a sub-directory of the default
+-password store.
+-.TP
+ .I EDITOR
+ The location of the text editor used by \fBedit\fP.
+
.SH SEE ALSO
.BR gpg (1),
.BR pwgen (1),
@@ -151,203 +240,144 @@ index a124c32..c2ff884 100644
.SH AUTHOR
diff --git a/src/password-store.sh b/src/password-store.sh
-index 1553e5b..6844dc4 100755
+index 503bac4..3c4ad4b 100755
--- src/password-store.sh
+++ src/password-store.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/local/bin/bash
- # (C) Copyright 2012 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
- # This is released under the GPLv2+. Please see COPYING for more information.
-@@ -7,11 +7,11 @@ umask 077
+ # Copyright (C) 2012 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ # This file is licensed under the GPLv2+. Please see COPYING for more information.
+@@ -7,12 +7,8 @@ umask 077
PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
ID="$PREFIX/.gpg-id"
--GIT="$PREFIX/.git"
+-GIT_DIR="${PASSWORD_STORE_GIT:-$PREFIX}/.git"
GPG_OPTS="--quiet --yes --batch"
--
--export GIT_DIR="$GIT"
--export GIT_WORK_TREE="$PREFIX"
-+GETOPT=/usr/local/bin/getopt
-+GPG=gpg2
-+XCLIP=xclip
-+BASE64=base64
+-export GIT_DIR
+-export GIT_WORK_TREE="${PASSWORD_STORE_GIT:-$PREFIX}"
+-
version() {
cat <<_EOF
-@@ -48,13 +48,6 @@ Usage:
- Optionally put it on the clipboard and clear board after 45 seconds.
- $program rm pass-name
- Remove existing password.
-- $program push
-- If the password store is a git repository, push the latest changes.
-- $program pull
-- If the password store is a git repository, pull the latest changes.
+ |-----------------------|
+@@ -50,9 +46,6 @@ Usage:
+ Prompt before overwriting existing password unless forced.
+ $program rm [--recursive,-r] [--force,-f] pass-name
+ Remove existing password or directory, optionally forcefully.
- $program git git-command-args...
- If the password store is a git repository, execute a git command
- specified by git-command-args.
$program help
Show this text.
$program version
-@@ -63,7 +56,7 @@ _EOF
+@@ -63,16 +56,10 @@ _EOF
}
- isCommand() {
+ is_command() {
case "$1" in
-- init|ls|list|show|insert|edit|generate|remove|rm|delete|push|pull|git|help|--help|version|--version) return 0 ;;
+- init|ls|list|show|insert|edit|generate|remove|rm|delete|git|help|--help|version|--version) return 0 ;;
+ init|ls|list|show|insert|edit|generate|remove|rm|delete|help|--help|version|--version) return 0 ;;
*) return 1 ;;
esac
}
-@@ -72,12 +65,12 @@ clip() {
- # in shell. There must be a better way to deal with this, but because I'm a dolt,
- # we're going with this for now.
-
-- before="$(xclip -o -selection clipboard | base64)"
-- echo -n "$1" | xclip -selection clipboard
-+ before="$($XCLIP -o -selection clipboard | $BASE64)"
-+ echo -n "$1" | $XCLIP -selection clipboard
- (
- sleep 45
-- now="$(xclip -o -selection clipboard | base64)"
-- if [[ $now != $(echo -n "$1" | base64) ]]; then
-+ now="$($XCLIP -o -selection clipboard | $BASE64)"
-+ if [[ $now != $(echo -n "$1" | $BASE64) ]]; then
- before="$now"
- fi
- # It might be nice to programatically check to see if klipper exists,
-@@ -85,7 +78,7 @@ clip() {
- # this works fine. Clipboard managers frequently write their history
- # out in plaintext, so we axe it here.
- qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory >/dev/null 2>&1
-- echo "$before" | base64 -d | xclip -selection clipboard
-+ echo "$before" | $BASE64 -d | $XCLIP -selection clipboard
+-git_add_file() {
+- [[ -d $GIT_DIR ]] || return
+- git add "$1" || return
+- [[ -n $(git status --porcelain "$1") ]] || return
+- git commit -m "$2"
+-}
+ yesno() {
+ read -p "$1 [y/N] " response
+ [[ $response == "y" || $response == "Y" ]] || exit 1
+@@ -107,22 +94,24 @@ clip() {
) & disown
echo "Copied $2 to clipboard. Will clear in 45 seconds."
}
-@@ -134,7 +127,7 @@ case "$command" in
- show|ls|list)
- clip=0
++
+ tmpdir() {
+- if [[ -d /dev/shm && -w /dev/shm && -x /dev/shm ]]; then
+- tmp_dir="$(TMPDIR=/dev/shm mktemp -t "$template" -d)"
++ ramdisk="/var/tmp/password-store.ramdisk"
++ if [[ -d $ramdisk && -w $ramdisk && -x $ramdisk ]]; then
++ tmp_dir="$(TMPDIR=$ramdisk mktemp -t "$template" -d)"
+ else
+- yesno "$(echo "Your system does not have /dev/shm, which means that it may"
+- echo "be difficult to entirely erase the temporary non-encrypted"
+- echo "password file after editing. Are you sure you would like to"
+- echo -n "continue?")"
++ yesno "$(echo "A ramdisk does not exist at $ramdisk, which means that it may"
++ echo "be difficult to entirely erase the temporary non-encrypted"
++ echo "password file after editing. Are you sure you would like to"
++ echo -n "continue?")"
++
+ tmp_dir="$(mktemp -t "$template" -d)"
+ fi
+-
+ }
+-GPG="gpg"
+-GETOPT="getopt"
-- opts="$(getopt -o c -l clip -n $program -- "$@")"
-+ opts="$($GETOPT -o c -l clip -n $program -- "$@")"
- err=$?
- eval set -- "$opts"
- while true; do case $1 in
-@@ -162,9 +155,9 @@ case "$command" in
- exit 1
- fi
- if [ $clip -eq 0 ]; then
-- exec gpg -q -d --yes --batch "$passfile"
-+ exec $GPG -q -d --yes --batch "$passfile"
- else
-- clip "$(gpg -q -d --yes --batch "$passfile" | head -n 1)" "$path"
-+ clip "$($GPG -q -d --yes --batch "$passfile" | head -n 1)" "$path"
- fi
- fi
- ;;
-@@ -173,7 +166,7 @@ case "$command" in
- noecho=0
- force=0
+-# source /path/to/platform-defined-functions
++GPG="gpg2"
++GETOPT="/usr/local/bin/getopt"
++
+ #
+ # END Platform definable
+ #
+@@ -156,14 +145,12 @@ case "$command" in
+ mkdir -v -p "$PREFIX"
+ echo "$gpg_id" > "$ID"
+ echo "Password store initialized for $gpg_id."
+- git_add_file "$ID" "Set GPG id to $gpg_id."
-- opts="$(getopt -o mnf -l multiline,no-echo,force -n $program -- "$@")"
-+ opts="$($GETOPT -o mnf -l multiline,no-echo,force -n $program -- "$@")"
- err=$?
- eval set -- "$opts"
- while true; do case $1 in
-@@ -201,7 +194,7 @@ case "$command" in
- if [[ $ml -eq 1 ]]; then
- echo "Enter contents of $path and press Ctrl+D when finished:"
- echo
-- cat | gpg -e -r "$ID" -o "$passfile" $GPG_OPTS
-+ cat | $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS
- elif [[ $noecho -eq 1 ]]; then
- while true; do
- read -p "Enter password for $path: " -s password
-@@ -209,7 +202,7 @@ case "$command" in
- read -p "Retype password for $path: " -s password_again
- echo
- if [[ $password == $password_again ]]; then
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
- break
- else
- echo "Error: the entered passwords do not match."
-@@ -217,11 +210,7 @@ case "$command" in
+ if [[ $reencrypt -eq 1 ]]; then
+ find "$PREFIX" -iname '*.gpg' | while read passfile; do
+ $GPG -d $GPG_OPTS "$passfile" | $GPG -e -r "$gpg_id" -o "$passfile.new" $GPG_OPTS &&
+ mv -v "$passfile.new" "$passfile"
done
- else
+- git_add_file "$PREFIX" "Reencrypted entire store using new GPG id $gpg_id."
+ fi
+ exit 0
+ ;;
+@@ -275,7 +262,6 @@ case "$command" in
read -p "Enter password for $path: " -e password
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
-- fi
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "Added given password for $path to store."
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
fi
+- git_add_file "$passfile" "Added given password for $path to store."
;;
edit)
-@@ -252,25 +241,20 @@ case "$command" in
-
- action="Added"
- if [[ -f $passfile ]]; then
-- gpg -d -o "$tmp_file" $GPG_OPTS "$passfile" || exit 1
-+ $GPG -d -o "$tmp_file" $GPG_OPTS "$passfile" || exit 1
- action="Edited"
- fi
- ${EDITOR:-vi} "$tmp_file"
-- while ! gpg -e -r "$ID" -o "$passfile" $GPG_OPTS "$tmp_file"; do
-+ while ! $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS "$tmp_file"; do
+ if [[ $# -ne 1 ]]; then
+@@ -303,7 +289,6 @@ case "$command" in
echo "GPG encryption failed. Retrying."
sleep 1
done
--
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "$action password for $path using ${EDITOR:-vi}."
-- fi
+- git_add_file "$passfile" "$action password for $path using ${EDITOR:-vi}."
;;
generate)
clip=0
- symbols="-y"
-
-- opts="$(getopt -o nc -l no-symbols,clip -n $program -- "$@")"
-+ opts="$($GETOPT -o nc -l no-symbols,clip -n $program -- "$@")"
- err=$?
- eval set -- "$opts"
- while true; do case $1 in
-@@ -292,12 +276,7 @@ case "$command" in
- mkdir -p -v "$PREFIX/$(dirname "$path")"
+@@ -338,7 +323,6 @@ case "$command" in
pass="$(pwgen -s $symbols $length 1)"
- passfile="$PREFIX/$path.gpg"
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "Added generated password for $path to store."
-- fi
--
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
- if [ $clip -eq 0 ]; then
+ [[ -n $pass ]] || exit 1
+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
+- git_add_file "$passfile" "Added generated password for $path to store."
+
+ if [[ $clip -eq 0 ]]; then
echo "The generated password to $path is:"
- echo "$pass"
-@@ -317,26 +296,6 @@ case "$command" in
- exit 1
- fi
- rm -i -v "$passfile"
-- if [[ -d $GIT ]] && ! [[ -f $passfile ]]; then
-- git rm -f "$passfile"
+@@ -377,21 +361,6 @@ case "$command" in
+ [[ $force -eq 1 ]] || yesno "Are you sure you would like to delete $path?"
+
+ rm $recursive -f -v "$passfile"
+- if [[ -d $GIT_DIR && ! -e $passfile ]]; then
+- git rm -qr "$passfile"
- git commit -m "Removed $path from store."
- fi
- ;;
-- push|pull)
-- if [[ -d $GIT ]]; then
-- exec git $command "$@"
-- else
-- echo "Error: the password store is not a git repository."
-- exit 1
-- fi
-- ;;
- git)
-- if [[ $1 == "init" ]] || [[ -d $GIT ]]; then
+- if [[ $1 == "init" ]]; then
+- git "$@" || exit 1
+- git_add_file "$PREFIX" "Added current contents of password store."
+- elif [[ -d $GIT_DIR ]]; then
- exec git "$@"
- else
- echo "Error: the password store is not a git repository."
diff --git a/sysutils/password-store/files/linuxism+xclip.patch b/sysutils/password-store/files/linuxism+xclip.patch
index ea6ba1af76f7..426fc69bf7ca 100644
--- a/sysutils/password-store/files/linuxism+xclip.patch
+++ b/sysutils/password-store/files/linuxism+xclip.patch
@@ -1,40 +1,91 @@
diff --git a/README b/README
-index 52e23af..ce7c745 100644
+index 47ed64b..496c37f 100644
--- README
+++ README
-@@ -15,7 +15,6 @@ Please see the man page for documentation and examples.
- Depends on:
- - gpg2
+@@ -19,8 +19,6 @@ Depends on:
+ http://www.gnupg.org/
- git
+ http://www.git-scm.com/
-- xclip
+- http://sourceforge.net/projects/xclip/
- pwgen
+ http://sourceforge.net/projects/pwgen/
- tree
- - GNU getopt
+diff --git a/contrib/pass.bash-completion b/contrib/pass.bash-completion
+index ccffbfa..2c2afc0 100644
+--- contrib/pass.bash-completion
++++ contrib/pass.bash-completion
+@@ -59,7 +59,6 @@ _pass()
+ _pass_complete_entries
+ ;;
+ show|-*)
+- COMPREPLY+=($(compgen -W "-c --clip" -- ${cur}))
+ _pass_complete_entries 1
+ ;;
+ insert)
+@@ -67,7 +66,7 @@ _pass()
+ _pass_complete_entries
+ ;;
+ generate)
+- COMPREPLY+=($(compgen -W "-n --no-symbols -c --clip -f --force" -- ${cur}))
++ COMPREPLY+=($(compgen -W "-n --no-symbols -f --force" -- ${cur}))
+ _pass_complete_entries
+ ;;
+ rm|remove|delete)
+diff --git a/contrib/pass.fish-completion b/contrib/pass.fish-completion
+index 7652d56..5c180e2 100644
+--- contrib/pass.fish-completion
++++ contrib/pass.fish-completion
+@@ -76,7 +76,6 @@ complete -c $PROG -f -A -n '__fish_pass_uses_command insert' -a "(__fish_pass_pr
+
+ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a generate -d 'Command: generate new password'
+ complete -c $PROG -f -A -n '__fish_pass_uses_command generate' -s n -l no-symbols -d 'Do not use special symbols'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command generate' -s c -l clip -d 'Put the password in clipboard'
+ complete -c $PROG -f -A -n '__fish_pass_uses_command generate' -s f -l force -d 'Do not prompt before overwritting'
+ complete -c $PROG -f -A -n '__fish_pass_uses_command generate' -a "(__fish_pass_print_entry_dirs)"
+
+@@ -89,13 +88,10 @@ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a edit -d 'Command: edit
+ complete -c $PROG -f -A -n '__fish_pass_uses_command edit' -a "(__fish_pass_print_entries)"
+
+ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a show -d 'Command: show existing password'
+-complete -c $PROG -f -A -n '__fish_pass_uses_command show' -s c -l clip -d 'Put password in clipboard'
+ complete -c $PROG -f -A -n '__fish_pass_uses_command show' -a "(__fish_pass_print_entries)"
+ # When no command is given, `show` is defaulted.
+-complete -c $PROG -f -A -n '__fish_pass_needs_command' -s c -l clip -d 'Put password in clipboard'
+ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a "(__fish_pass_print_entries)"
+ complete -c $PROG -f -A -n '__fish_pass_uses_command -c' -a "(__fish_pass_print_entries)"
+-complete -c $PROG -f -A -n '__fish_pass_uses_command --clip' -a "(__fish_pass_print_entries)"
+
+ complete -c $PROG -f -A -n '__fish_pass_needs_command' -a git -d 'Command: execute a git command'
+ complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'init' -d 'Initialize git repository'
diff --git a/contrib/pass.zsh-completion b/contrib/pass.zsh-completion
-index 5cf8808..5e1c3ac 100644
+index c6fe678..a01bb2b 100644
--- contrib/pass.zsh-completion
+++ contrib/pass.zsh-completion
-@@ -45,7 +45,6 @@ _pass_cmd_ls () {
+@@ -39,8 +39,6 @@ _pass () {
+ _arguments : \
+ "-n[don't include symbols in password]" \
+ "--no-symbols[don't include symbols in password]" \
+- "-c[copy password to the clipboard]" \
+- "--clip[copy password to the clipboard]"
+ _pass_complete_entries_with_subdirs
+ ;;
+ rm)
+@@ -90,9 +88,6 @@ _pass () {
+ }
_pass_cmd_show () {
- _arguments : \
-- "-c[put it on the clipboard]" \
- '*::show:_get_stored_pwd'
- #'::pass id:_files -W ~/.password-store -g "*.gpg(|.*)(-.)"'
- }
-@@ -65,7 +64,6 @@ _pass_cmd_insert () {
- _pass_cmd_generate () {
- _arguments : \
- "-n[no symbols]" \
-- "-c[put password on the clipboard]" \
- '::show:_get_stored_pwd'
+- _arguments : \
+- "-c[put it on the clipboard]" \
+- "--clip[put it on the clipboard]"
+ _pass_complete_entries
}
-
+ _pass_complete_entries_helper () {
diff --git a/man/pass.1 b/man/pass.1
-index a124c32..7df6551 100644
+index 3ccfa67..c0aa018 100644
--- man/pass.1
+++ man/pass.1
-@@ -64,12 +64,8 @@ by using the
+@@ -68,12 +68,8 @@ by using the
.BR tree (1)
program. This command is alternatively named \fBlist\fP.
.TP
@@ -47,14 +98,14 @@ index a124c32..7df6551 100644
+\fBshow\fP \fIpass-name\fP
+Decrypt and print a password named \fIpass-name\fP.
.TP
- \fBinsert\fP [ \fI--no-echo\fP, \fI-n\fP | \fI--multiline\fP, \fI-m\fP ] [ \fI--force\fP, \fI-f\fP ]\fIpass-name\fP
+ \fBinsert\fP [ \fI--no-echo\fP, \fI-n\fP | \fI--multiline\fP, \fI-m\fP ] [ \fI--force\fP, \fI-f\fP ] \fIpass-name\fP
Insert a new password into the password store called \fIpass-name\fP. This will
-@@ -88,15 +84,11 @@ ensure that temporary files are created in \fI/dev/shm\fP in order to avoid writ
+@@ -92,15 +88,12 @@ 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 \fBTMPDIR\fP location, and print a warning.
+ 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 ] \fIpass-name pass-length\fP
-+\fBgenerate\fP [ \fI--no-symbols\fP, \fI-n\fP ] \fIpass-name pass-length\fP
+-\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--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
@@ -62,11 +113,12 @@ index a124c32..7df6551 100644
-If \fI--clip\fP or \fI-c\fP is specified, do not print the password but instead copy
-it to the clipboard using
-.BR xclip (1)
--and then restore the clipboard after 45 seconds.
+-and then restore the clipboard after 45 seconds. Prompt before overwriting an existing password,
++Prompt before overwriting an existing password,
+ unless \fI--force\fP or \fI-f\fP is specified.
.TP
- \fBrm\fP \fIpass-name\fP
- Remove the password named \fIpass-name\fP from the password store. This command is
-@@ -165,11 +157,6 @@ Show existing password
+ \fBrm\fP [ \fI--recursive\fP, \fI-r\fP ] [ \fI--force\fP, \fI-f\fP ] \fIpass-name\fP
+@@ -166,11 +159,6 @@ Show existing password
.br
sup3rh4x3rizmynam3
.TP
@@ -78,7 +130,7 @@ index a124c32..7df6551 100644
Add password to store
.B zx2c4@laptop ~ $ pass insert Business/cheese-whiz-factory
.br
-@@ -208,11 +195,6 @@ The generated password to Email/jasondonenfeld.com is:
+@@ -209,10 +197,8 @@ The generated password to Email/jasondonenfeld.com is:
.br
YqFsMkBeO6di
.TP
@@ -86,11 +138,12 @@ index a124c32..7df6551 100644
-.B zx2c4@laptop ~ $ pass -c generate Email/jasondonenfeld.com 19
-.br
-Copied Email/jasondonenfeld.com to clipboard. Will clear in 45 seconds.
--.TP
++Generate new password
++.B zx2c4@laptop ~ $ pass generate Email/jasondonenfeld.com 19
+ .TP
Remove password from store
.B zx2c4@laptop ~ $ pass remove Business/cheese-whiz-factory
- .br
-@@ -321,7 +303,6 @@ be set using the \fBinit\fP command.
+@@ -345,7 +331,6 @@ The location of the text editor used by \fBedit\fP.
.BR gpg (1),
.BR pwgen (1),
.BR git (1),
@@ -99,33 +152,17 @@ index a124c32..7df6551 100644
.SH AUTHOR
.B pass
diff --git a/src/password-store.sh b/src/password-store.sh
-index 1553e5b..43e095e 100755
+index 503bac4..5264fb4 100755
--- src/password-store.sh
+++ src/password-store.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/local/bin/bash
- # (C) Copyright 2012 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
- # This is released under the GPLv2+. Please see COPYING for more information.
-@@ -7,10 +7,13 @@ umask 077
-
- PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
- ID="$PREFIX/.gpg-id"
--GIT="$PREFIX/.git"
-+GITDIR="$PREFIX/.git"
- GPG_OPTS="--quiet --yes --batch"
-+GETOPT=/usr/local/bin/getopt
-+GPG=gpg2
-+GIT=git
-
--export GIT_DIR="$GIT"
-+export GIT_DIR="$GITDIR"
- export GIT_WORK_TREE="$PREFIX"
-
- version() {
-@@ -34,18 +37,16 @@ Usage:
- Initialize new password storage and use gpg-id for encryption.
+ # Copyright (C) 2012 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ # This file is licensed under the GPLv2+. Please see COPYING for more information.
+@@ -35,18 +35,16 @@ Usage:
+ Optionally reencrypt existing passwords using new gpg-id.
$program [ls] [subfolder]
List passwords.
- $program [show] [--clip,-c] pass-name
@@ -139,17 +176,17 @@ index 1553e5b..43e095e 100755
before 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] pass-name pass-length
-+ $program generate [--no-symbols,-n] pass-name pass-length
+- $program generate [--no-symbols,-n] [--clip,-c] [--force,-f] pass-name pass-length
++ $program generate [--no-symbols,-n] [--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.
- $program rm pass-name
- Remove existing password.
- $program push
-@@ -67,28 +68,6 @@ isCommand() {
- *) return 1 ;;
- esac
- }
+ Prompt before overwriting existing password unless forced.
+ $program rm [--recursive,-r] [--force,-f] pass-name
+ Remove existing password or directory, optionally forcefully.
+@@ -80,49 +78,24 @@ yesno() {
+ #
+ # BEGIN Platform definable
+ #
-clip() {
- # This base64 business is a disgusting hack to deal with newline inconsistancies
- # in shell. There must be a better way to deal with this, but because I'm a dolt,
@@ -163,212 +200,120 @@ index 1553e5b..43e095e 100755
- if [[ $now != $(echo -n "$1" | base64) ]]; then
- before="$now"
- fi
+
- # It might be nice to programatically check to see if klipper exists,
- # as well as checking for other common clipboard managers. But for now,
-- # this works fine. Clipboard managers frequently write their history
-- # out in plaintext, so we axe it here.
-- qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory >/dev/null 2>&1
+- # this works fine -- if qdbus isn't there or if klipper isn't running,
+- # this essentially becomes a no-op.
+- #
+- # Clipboard managers frequently write their history out in plaintext,
+- # so we axe it here:
+- qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory &>/dev/null
+-
- echo "$before" | base64 -d | xclip -selection clipboard
- ) & disown
- echo "Copied $2 to clipboard. Will clear in 45 seconds."
-}
- program="$(basename "$0")"
- command="$1"
- if isCommand "$command"; then
-@@ -132,18 +111,10 @@ fi
+ tmpdir() {
+- if [[ -d /dev/shm && -w /dev/shm && -x /dev/shm ]]; then
+- tmp_dir="$(TMPDIR=/dev/shm mktemp -t "$template" -d)"
++ ramdisk="/var/tmp/password-store.ramdisk"
++ if [[ -d $ramdisk && -w $ramdisk && -x $ramdisk ]]; then
++ tmp_dir="$(TMPDIR=$ramdisk mktemp -t "$template" -d)"
+ else
+- yesno "$(echo "Your system does not have /dev/shm, which means that it may"
+- echo "be difficult to entirely erase the temporary non-encrypted"
+- echo "password file after editing. Are you sure you would like to"
+- echo -n "continue?")"
++ yesno "$(echo "A ramdisk does not exist at $ramdisk, which means that it may"
++ echo "be difficult to entirely erase the temporary non-encrypted"
++ echo "password file after editing. Are you sure you would like to"
++ echo -n "continue?")"
++
+ tmp_dir="$(mktemp -t "$template" -d)"
+ fi
+-
+ }
+-GPG="gpg"
+-GETOPT="getopt"
+
+-# source /path/to/platform-defined-functions
++GPG="gpg2"
++GETOPT="/usr/local/bin/getopt"
++
+ #
+ # END Platform definable
+ #
+@@ -192,18 +165,8 @@ fi
case "$command" in
show|ls|list)
- clip=0
-
-- opts="$(getopt -o c -l clip -n $program -- "$@")"
- err=$?
+- opts="$($GETOPT -o c -l clip -n "$program" -- "$@")"
+- err=$?
- eval set -- "$opts"
- while true; do case $1 in
- -c|--clip) clip=1; shift ;;
- --) shift; break ;;
- esac done
-
+-
if [[ $err -ne 0 ]]; then
- echo "Usage: $program $command [--clip,-c] [pass-name]"
+ echo "Usage: $program $command [pass-name]"
exit 1
fi
-@@ -161,11 +132,7 @@ case "$command" in
+@@ -221,11 +184,7 @@ case "$command" in
echo "$path is not in the password store."
exit 1
fi
-- if [ $clip -eq 0 ]; then
-- exec gpg -q -d --yes --batch "$passfile"
+- if [[ $clip -eq 0 ]]; then
+- exec $GPG -d $GPG_OPTS "$passfile"
- else
-- clip "$(gpg -q -d --yes --batch "$passfile" | head -n 1)" "$path"
+- clip "$($GPG -d $GPG_OPTS "$passfile" | head -n 1)" "$path"
- fi
-+ exec $GPG -q -d --yes --batch "$passfile"
++ exec $GPG -d $GPG_OPTS "$passfile"
fi
;;
insert)
-@@ -173,7 +140,7 @@ case "$command" in
- noecho=0
- force=0
-
-- opts="$(getopt -o mnf -l multiline,no-echo,force -n $program -- "$@")"
-+ opts="$($GETOPT -o mnf -l multiline,no-echo,force -n $program -- "$@")"
- err=$?
- eval set -- "$opts"
- while true; do case $1 in
-@@ -201,7 +168,7 @@ case "$command" in
- if [[ $ml -eq 1 ]]; then
- echo "Enter contents of $path and press Ctrl+D when finished:"
- echo
-- cat | gpg -e -r "$ID" -o "$passfile" $GPG_OPTS
-+ cat | $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS
- elif [[ $noecho -eq 1 ]]; then
- while true; do
- read -p "Enter password for $path: " -s password
-@@ -209,7 +176,7 @@ case "$command" in
- read -p "Retype password for $path: " -s password_again
- echo
- if [[ $password == $password_again ]]; then
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
- break
- else
- echo "Error: the entered passwords do not match."
-@@ -217,11 +184,11 @@ case "$command" in
- done
- else
- read -p "Enter password for $path: " -e password
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
- fi
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "Added given password for $path to store."
-+ if [[ -d $GITDIR ]]; then
-+ $GIT add "$passfile"
-+ $GIT commit -m "Added given password for $path to store."
- fi
- ;;
- edit)
-@@ -252,35 +219,33 @@ case "$command" in
-
- action="Added"
- if [[ -f $passfile ]]; then
-- gpg -d -o "$tmp_file" $GPG_OPTS "$passfile" || exit 1
-+ $GPG -d -o "$tmp_file" $GPG_OPTS "$passfile" || exit 1
- action="Edited"
- fi
- ${EDITOR:-vi} "$tmp_file"
-- while ! gpg -e -r "$ID" -o "$passfile" $GPG_OPTS "$tmp_file"; do
-+ while ! $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS "$tmp_file"; do
- echo "GPG encryption failed. Retrying."
- sleep 1
- done
-
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "$action password for $path using ${EDITOR:-vi}."
-+ if [[ -d $GITDIR ]]; then
-+ $GIT add "$passfile"
-+ $GIT commit -m "$action password for $path using ${EDITOR:-vi}."
- fi
+@@ -306,22 +265,20 @@ case "$command" in
+ git_add_file "$passfile" "$action password for $path using ${EDITOR:-vi}."
;;
generate)
- clip=0
+ force=0
symbols="-y"
-- opts="$(getopt -o nc -l no-symbols,clip -n $program -- "$@")"
-+ opts="$($GETOPT -o nc -l no-symbols -n $program -- "$@")"
+- opts="$($GETOPT -o ncf -l no-symbols,clip,force -n "$program" -- "$@")"
++ opts="$($GETOPT -o ncf -l no-symbols,force -n "$program" -- "$@")"
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 ;;
--) shift; break ;;
esac done
if [[ $err -ne 0 || $# -ne 2 ]]; then
-- echo "Usage: $program $command [--no-symbols,-n] [--clip,-c] pass-name pass-length"
-+ echo "Usage: $program $command [--no-symbols,-n] pass-name pass-length"
+- echo "Usage: $program $command [--no-symbols,-n] [--clip,-c] [--force,-f] pass-name pass-length"
++ echo "Usage: $program $command [--no-symbols,-n] [--force,-f] pass-name pass-length"
exit 1
fi
path="$1"
-@@ -292,18 +257,13 @@ case "$command" in
- mkdir -p -v "$PREFIX/$(dirname "$path")"
- pass="$(pwgen -s $symbols $length 1)"
- passfile="$PREFIX/$path.gpg"
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "Added generated password for $path to store."
-- fi
--
-- if [ $clip -eq 0 ]; then
+@@ -340,12 +297,8 @@ case "$command" in
+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
+ git_add_file "$passfile" "Added generated password for $path to store."
+
+- if [[ $clip -eq 0 ]]; then
- echo "The generated password to $path is:"
- echo "$pass"
- else
- clip "$pass" "$path"
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
-+ if [[ -d $GITDIR ]]; then
-+ $GIT add "$passfile"
-+ $GIT commit -m "Added generated password for $path to store."
- fi
+- fi
+ echo "The generated password to $path is:"
+ echo "$pass"
;;
delete|rm|remove)
- if [[ $# -ne 1 ]]; then
-@@ -317,22 +277,45 @@ case "$command" in
- exit 1
- fi
- rm -i -v "$passfile"
-- if [[ -d $GIT ]] && ! [[ -f $passfile ]]; then
-- git rm -f "$passfile"
-- git commit -m "Removed $path from store."
-+ if [[ -d $GITDIR ]] && ! [[ -f $passfile ]]; then
-+ $GIT rm -f "$passfile"
-+ $GIT commit -m "Removed $path from store."
- fi
- ;;
- push|pull)
-- if [[ -d $GIT ]]; then
-- exec git $command "$@"
-+ if [[ -d $GITDIR ]]; then
-+ exec $GIT $command "$@"
- else
- echo "Error: the password store is not a git repository."
- exit 1
- fi
- ;;
- git)
-- if [[ $1 == "init" ]] || [[ -d $GIT ]]; then
-- exec git "$@"
-+ if [[ $1 == "init" ]]; then
-+ username=$2
-+ useremail=$3
-+
-+ $GIT init
-+
-+ if [ -z "$username" ]; then
-+ current=$($GIT config user.name)
-+ prompt="Set your git user.name: "
-+ read -e -i "$current" -p "$prompt" username
-+ username="${username:-$username}"
-+ fi
-+ if [ -z "$useremail" ]; then
-+ current=$($GIT config user.email)
-+ prompt="Set your git user.email: "
-+ read -e -i "$current" -p "$prompt" useremail
-+ useremail="${useremail:-$useremail}"
-+ fi
-+ $GIT config user.name "$username"
-+ $GIT config user.email "$useremail"
-+ echo .gpg-id > $PREFIX/.gitignore
-+ $GIT add .
-+ $GIT commit -m "Adding existing passwords to the store."
-+ elif [[ -d $GITDIR ]]; then
-+ exec $GIT "$@"
- else
- echo "Error: the password store is not a git repository."
- exit 1
+ recursive=""
diff --git a/sysutils/password-store/files/linuxism.patch b/sysutils/password-store/files/linuxism.patch
index 9920ff2a5a6b..80257f562679 100644
--- a/sysutils/password-store/files/linuxism.patch
+++ b/sysutils/password-store/files/linuxism.patch
@@ -1,218 +1,45 @@
diff --git a/src/password-store.sh b/src/password-store.sh
-index 1553e5b..78c45b8 100755
+index 503bac4..6fcf2cc 100755
--- src/password-store.sh
+++ src/password-store.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/local/bin/bash
- # (C) Copyright 2012 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
- # This is released under the GPLv2+. Please see COPYING for more information.
-@@ -7,10 +7,15 @@ umask 077
-
- PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
- ID="$PREFIX/.gpg-id"
--GIT="$PREFIX/.git"
-+GITDIR="$PREFIX/.git"
- GPG_OPTS="--quiet --yes --batch"
-+GETOPT=/usr/local/bin/getopt
-+GPG=gpg2
-+GIT=git
-+XCLIP=xclip
-+BASE64=base64
-
--export GIT_DIR="$GIT"
-+export GIT_DIR="$GITDIR"
- export GIT_WORK_TREE="$PREFIX"
-
- version() {
-@@ -72,12 +77,12 @@ clip() {
- # in shell. There must be a better way to deal with this, but because I'm a dolt,
- # we're going with this for now.
-
-- before="$(xclip -o -selection clipboard | base64)"
-- echo -n "$1" | xclip -selection clipboard
-+ before="$($XCLIP -o -selection clipboard | $BASE64)"
-+ echo -n "$1" | $XCLIP -selection clipboard
- (
- sleep 45
-- now="$(xclip -o -selection clipboard | base64)"
-- if [[ $now != $(echo -n "$1" | base64) ]]; then
-+ now="$($XCLIP -o -selection clipboard | $BASE64)"
-+ if [[ $now != $(echo -n "$1" | $BASE64) ]]; then
- before="$now"
- fi
- # It might be nice to programatically check to see if klipper exists,
-@@ -85,7 +90,7 @@ clip() {
- # this works fine. Clipboard managers frequently write their history
- # out in plaintext, so we axe it here.
- qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory >/dev/null 2>&1
-- echo "$before" | base64 -d | xclip -selection clipboard
-+ echo "$before" | $BASE64 -d | $XCLIP -selection clipboard
+ # Copyright (C) 2012 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ # This file is licensed under the GPLv2+. Please see COPYING for more information.
+@@ -107,22 +107,24 @@ clip() {
) & disown
echo "Copied $2 to clipboard. Will clear in 45 seconds."
}
-@@ -134,7 +139,7 @@ case "$command" in
- show|ls|list)
- clip=0
-
-- opts="$(getopt -o c -l clip -n $program -- "$@")"
-+ opts="$($GETOPT -o c -l clip -n $program -- "$@")"
- err=$?
- eval set -- "$opts"
- while true; do case $1 in
-@@ -162,9 +167,9 @@ case "$command" in
- exit 1
- fi
- if [ $clip -eq 0 ]; then
-- exec gpg -q -d --yes --batch "$passfile"
-+ exec $GPG -q -d --yes --batch "$passfile"
- else
-- clip "$(gpg -q -d --yes --batch "$passfile" | head -n 1)" "$path"
-+ clip "$($GPG -q -d --yes --batch "$passfile" | head -n 1)" "$path"
- fi
- fi
- ;;
-@@ -173,7 +178,7 @@ case "$command" in
- noecho=0
- force=0
-
-- opts="$(getopt -o mnf -l multiline,no-echo,force -n $program -- "$@")"
-+ opts="$($GETOPT -o mnf -l multiline,no-echo,force -n $program -- "$@")"
- err=$?
- eval set -- "$opts"
- while true; do case $1 in
-@@ -201,7 +206,7 @@ case "$command" in
- if [[ $ml -eq 1 ]]; then
- echo "Enter contents of $path and press Ctrl+D when finished:"
- echo
-- cat | gpg -e -r "$ID" -o "$passfile" $GPG_OPTS
-+ cat | $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS
- elif [[ $noecho -eq 1 ]]; then
- while true; do
- read -p "Enter password for $path: " -s password
-@@ -209,7 +214,7 @@ case "$command" in
- read -p "Retype password for $path: " -s password_again
- echo
- if [[ $password == $password_again ]]; then
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
- break
- else
- echo "Error: the entered passwords do not match."
-@@ -217,11 +222,11 @@ case "$command" in
- done
- else
- read -p "Enter password for $path: " -e password
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$password"
- fi
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "Added given password for $path to store."
-+ if [[ -d $GITDIR ]]; then
-+ $GIT add "$passfile"
-+ $GIT commit -m "Added given password for $path to store."
- fi
- ;;
- edit)
-@@ -252,25 +257,25 @@ case "$command" in
-
- action="Added"
- if [[ -f $passfile ]]; then
-- gpg -d -o "$tmp_file" $GPG_OPTS "$passfile" || exit 1
-+ $GPG -d -o "$tmp_file" $GPG_OPTS "$passfile" || exit 1
- action="Edited"
- fi
- ${EDITOR:-vi} "$tmp_file"
-- while ! gpg -e -r "$ID" -o "$passfile" $GPG_OPTS "$tmp_file"; do
-+ while ! $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS "$tmp_file"; do
- echo "GPG encryption failed. Retrying."
- sleep 1
- done
-
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "$action password for $path using ${EDITOR:-vi}."
-+ if [[ -d $GITDIR ]]; then
-+ $GIT add "$passfile"
-+ $GIT commit -m "$action password for $path using ${EDITOR:-vi}."
- fi
- ;;
- generate)
- clip=0
- symbols="-y"
-
-- opts="$(getopt -o nc -l no-symbols,clip -n $program -- "$@")"
-+ opts="$($GETOPT -o nc -l no-symbols,clip -n $program -- "$@")"
- err=$?
- eval set -- "$opts"
- while true; do case $1 in
-@@ -292,10 +297,10 @@ case "$command" in
- mkdir -p -v "$PREFIX/$(dirname "$path")"
- pass="$(pwgen -s $symbols $length 1)"
- passfile="$PREFIX/$path.gpg"
-- gpg -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
-- if [[ -d $GIT ]]; then
-- git add "$passfile"
-- git commit -m "Added generated password for $path to store."
-+ $GPG -e -r "$ID" -o "$passfile" $GPG_OPTS <<<"$pass"
-+ if [[ -d $GITDIR ]]; then
-+ $GIT add "$passfile"
-+ $GIT commit -m "Added generated password for $path to store."
- fi
-
- if [ $clip -eq 0 ]; then
-@@ -317,22 +322,45 @@ case "$command" in
- exit 1
- fi
- rm -i -v "$passfile"
-- if [[ -d $GIT ]] && ! [[ -f $passfile ]]; then
-- git rm -f "$passfile"
-- git commit -m "Removed $path from store."
-+ if [[ -d $GITDIR ]] && ! [[ -f $passfile ]]; then
-+ $GIT rm -f "$passfile"
-+ $GIT commit -m "Removed $path from store."
- fi
- ;;
- push|pull)
-- if [[ -d $GIT ]]; then
-- exec git $command "$@"
-+ if [[ -d $GITDIR ]]; then
-+ exec $GIT $command "$@"
- else
- echo "Error: the password store is not a git repository."
- exit 1
- fi
- ;;
- git)
-- if [[ $1 == "init" ]] || [[ -d $GIT ]]; then
-- exec git "$@"
-+ if [[ $1 == "init" ]]; then
-+ username=$2
-+ useremail=$3
+
-+ $GIT init
+ tmpdir() {
+- if [[ -d /dev/shm && -w /dev/shm && -x /dev/shm ]]; then
+- tmp_dir="$(TMPDIR=/dev/shm mktemp -t "$template" -d)"
++ ramdisk="/var/tmp/password-store.ramdisk"
++ if [[ -d $ramdisk && -w $ramdisk && -x $ramdisk ]]; then
++ tmp_dir="$(TMPDIR=$ramdisk mktemp -t "$template" -d)"
+ else
+- yesno "$(echo "Your system does not have /dev/shm, which means that it may"
+- echo "be difficult to entirely erase the temporary non-encrypted"
+- echo "password file after editing. Are you sure you would like to"
+- echo -n "continue?")"
++ yesno "$(echo "A ramdisk does not exist at $ramdisk, which means that it may"
++ echo "be difficult to entirely erase the temporary non-encrypted"
++ echo "password file after editing. Are you sure you would like to"
++ echo -n "continue?")"
++
+ tmp_dir="$(mktemp -t "$template" -d)"
+ fi
+-
+ }
+-GPG="gpg"
+-GETOPT="getopt"
+
+-# source /path/to/platform-defined-functions
++GPG="gpg2"
++GETOPT="/usr/local/bin/getopt"
+
-+ if [ -z "$username" ]; then
-+ current=$($GIT config user.name)
-+ prompt="Set your git user.name: "
-+ read -e -i "$current" -p "$prompt" username
-+ username="${username:-$username}"
-+ fi
-+ if [ -z "$useremail" ]; then
-+ current=$($GIT config user.email)
-+ prompt="Set your git user.email: "
-+ read -e -i "$current" -p "$prompt" useremail
-+ useremail="${useremail:-$useremail}"
-+ fi
-+ $GIT config user.name "$username"
-+ $GIT config user.email "$useremail"
-+ echo .gpg-id > $PREFIX/.gitignore
-+ $GIT add .
-+ $GIT commit -m "Adding existing passwords to the store."
-+ elif [[ -d $GITDIR ]]; then
-+ exec $GIT "$@"
- else
- echo "Error: the password store is not a git repository."
- exit 1
+ #
+ # END Platform definable
+ #