Showing
5 changed files
with
546 additions
and
212 deletions
... | ... | @@ -14,7 +14,6 @@ Database management functions: |
14 | 14 | |
15 | 15 | Account management functions: |
16 | 16 | - **amngradd** − add an account credential to the database |
17 | - - **amngrcreate** − create a new account credential to the database | |
18 | 17 | - **amngrcrypt** − crypt the given data with GnuPG |
19 | 18 | - **amngrdelete** − delete an account |
20 | 19 | - **amngrgen** − generate a encrypted random passphrase |
... | ... | @@ -23,7 +22,6 @@ Account management functions: |
23 | 22 | - **amngrgetpass** − copy active password of account to X clipboard |
24 | 23 | - **amngrgetuser** − copy active username of account to X clipboard |
25 | 24 | - **amngrid** − write the database id of a given account name to stdout |
26 | - - **amngrlist** − list all accounts | |
27 | 25 | - **amngrrename** − rename an account |
28 | 26 | - **amngrsearch** − pattern search accounts |
29 | 27 | |
... | ... | @@ -33,39 +31,35 @@ source **${PATH}/accountmanager.sh** |
33 | 31 | |
34 | 32 | **random** |
35 | 33 | |
36 | -**rand\_printable** \[*len*\] | |
34 | +**rand\_printable** \[**-h**\] \[*len*\] | |
37 | 35 | |
38 | -**amngrdbinit** \[*dbfile*\] | |
36 | +**amngrdbinit** \[**-h**\] \[*dbfile*\] | |
39 | 37 | |
40 | -**amngrdbdestroy** \[*dbfile*\] | |
38 | +**amngrdbdestroy** \[**-h**\] \[*dbfile*\] | |
41 | 39 | |
42 | -**amngradd** **-u** *username* **-p** *password* \[**-d** *description*\] | |
43 | -\[**-D** *dbfile*\] \[**-r** *recipient*\] *account* | |
40 | +**amngradd** \[**-h**\] \[**-d** *description*\] \[**-D** *dbfile*\] | |
41 | +\[**-r** *recipient*\] *account* \[*username* \[*password*\]\] | |
44 | 42 | |
45 | -**amngrcreate** **-u** *username* \[**-d** *description*\] \[**-D** | |
46 | -*dbfile*\] \[**-r** *recipient*\] *account* | |
43 | +**amngrcrypt** \[**-h**\] \[**-r** *recipient*\] *password* | |
47 | 44 | |
48 | -**amngrcrypt** \[**-r** *recipient*\] *password* | |
45 | +**amngrdelete** \[**-h**\] \[**-D** *dbfile*\] *account* | |
49 | 46 | |
50 | -**amngrdelete** *account* | |
47 | +**amngrgen** \[**-h**\] \[**-r** *recipient*\] \[*len*\] | |
51 | 48 | |
52 | -**amngrgen** \[**-r** *recipient*\] \[*len*\] | |
49 | +**amngrgetoldpass** \[**-h**\] \[**-D** *dbfile*\] *account* | |
53 | 50 | |
54 | -**amngrgetoldpass** *account* | |
51 | +**amngrgetolduser** \[**-h**\] \[**-c**\] \[**-D** *dbfile*\] *account* | |
55 | 52 | |
56 | -**amngrgetolduser** *account* | |
53 | +**amngrgetpass** \[**-h**\] \[**-D** *dbfile*\] *account* \[*state*\] | |
57 | 54 | |
58 | -**amngrgetpass** *account* | |
55 | +**amngrgetuser** \[**-h**\] \[**-c**\] \[**-D** *dbfile*\] *account* \[*state*\] | |
59 | 56 | |
60 | -**amngrgetuser** *account* | |
57 | +**amngrid** \[**-h**\] \[**-D** *dbfile*\] *account* | |
61 | 58 | |
62 | -**amngrid** *account* | |
59 | +**amngrrename** \[**-h**\] \[**-D** *dbfile*\] *old\_account* *new\_account* | |
63 | 60 | |
64 | -**amngrlist** \[**-s** *separator*\] | |
65 | - | |
66 | -**amngrrename** *old\_account new\_account* | |
67 | - | |
68 | -**amngrsearch** \[**-s** *separator*\] *pattern* | |
61 | +**amngrsearch** \[**-h**\] \[**-D** *dbfile*\] \[**-s** *separator*\] | |
62 | +\[*pattern*\] | |
69 | 63 | |
70 | 64 | ## DESCRIPTION |
71 | 65 | |
... | ... | @@ -84,55 +78,58 @@ pair. |
84 | 78 | |
85 | 79 | Takes no arguments and connect a non blocking random source to stdout. |
86 | 80 | |
87 | -**rand\_printable** \[*len*\] | |
81 | +**rand\_printable** \[**-h**\] \[*len*\] | |
88 | 82 | |
89 | 83 | Uses **random** to write a string of random printable characters to |
90 | 84 | stdout. All control characters ASCII-0 to ASCII-37 as well as ASCII-177 |
91 | 85 | to 255, single and double quotes are filtered. The single and double |
92 | 86 | quotes are filtered to prevent problems when they are used as string |
93 | 87 | separators after shell expansion as in the SQL here documents used to |
94 | -communicate with the SQLite database. | |
88 | +communicate with the SQLite database. | |
95 | 89 | The optional *len* argument specifies the string length to be written |
96 | 90 | and defaults to 512. |
97 | 91 | |
98 | -**amngrdbinit** \[*dbfile*\] | |
92 | +**amngrdbinit** \[**-h**\] \[*dbfile*\] | |
99 | 93 | |
100 | 94 | Create the SQLite database file. If the optional *dbfile* argument is |
101 | 95 | given it specifies the fill path to the file to use, else the value of |
102 | 96 | **$AMNGRDB** environment variable is used. |
103 | 97 | |
104 | -**amngrdbdestroy** \[*dbfile*\] | |
98 | +**amngrdbdestroy** \[**-h**\] \[*dbfile*\] | |
105 | 99 | |
106 | 100 | Deletes the SQLite database file. If the optional *dbfile* argument is |
107 | 101 | given it specifies the fill path to the file to use, else the value of |
108 | 102 | **$AMNGRDB** environment variable is used. |
109 | 103 | |
110 | -**amngradd -u** *username* **-p** *password* \[**-d** *description*\] | |
111 | -\[**-D** *dbfile*\] \[**-r** *recipient*\] *account* | |
104 | +**amngradd** \[**-h**\] \[**-d** *description*\] \[**-D** *dbfile*\] | |
105 | +\[**-r** *recipient*\] *account* \[*username* \[*password*\]\] | |
112 | 106 | |
113 | 107 | Adds an account credential and marks it as active. If the account |
114 | 108 | already exist, the credential (*username* and *password*) is added to |
115 | 109 | that account and the previously added credential is marked as old. If |
116 | 110 | there was another even older credential that was already marked as old |
117 | -this will be marked as inactive and this becomes inaccessible with this | |
118 | -tools (except for **amngrdelete**). | |
119 | -The necessary option **-u** specifies the username to be stored with | |
120 | -this credential pair. | |
121 | -The also necessary option **-p** specifies the password to be stored | |
122 | -and the length of *password* is not limited at all. | |
123 | -With option **-d** one can add a *description* to the account entry. | |
124 | -One can specify the *dbfile* with the option **-D** if that option is | |
125 | -not given the **$AMNGRDB** environment variable is used. | |
126 | - | |
127 | -**amngrcreate -u** *username* \[**-d** *description*\] \[**-D** | |
128 | -*dbfile*\] \[**-r** *recipient*\] *account* | |
129 | - | |
130 | -This will create a password with **amngrgen** and use that to add an | |
131 | -credential via **amngradd**. (See there for options description) | |
132 | -The added password will be copied to the X clipboard with | |
133 | -**amngrgetpass** for further use. | |
134 | - | |
135 | -**amngrcrypt** \[**-r** *recipient*\] *password* | |
111 | +this will be marked as inactive and thus becomes inaccessible with this | |
112 | +tools (except for **amngrdelete**). | |
113 | + | |
114 | +The *username* and the *account* name must not be longer than 128 | |
115 | +characters. The *password* is not limited in its length at all. If | |
116 | +*password* is omitted one will be generated with **amngrgen**. | |
117 | + | |
118 | +The *username* may also be omitted if there was a previously added | |
119 | +credentials pair for this account. In that case the previous username is | |
120 | +taken. It is a failure to provide a *password* without a *username*. | |
121 | +There is no way for the script to detect this condition and you will end | |
122 | +up with a credential where the username is the password and the password | |
123 | +was generated. | |
124 | + | |
125 | +Option **-d** adds a *description* to the account entry and option | |
126 | +**-D** specifys the *dbfile* to use. If that option is not given the | |
127 | +**$AMNGRDB** environment variable is used. | |
128 | + | |
129 | +If a password was generated with this call it will be stored in the X | |
130 | +clipboard. | |
131 | + | |
132 | +**amngrcrypt** \[**-h**\] \[**-r** *recipient*\] *password* | |
136 | 133 | |
137 | 134 | Crypt the given plain text *password* with GnuPG and write it to |
138 | 135 | stdout. |
... | ... | @@ -140,58 +137,59 @@ The option **-r** specifies the recipient to use with the call to |
140 | 137 | **gpg**. If it is not given the value of the **$AMNGRID** environment |
141 | 138 | variable is used. |
142 | 139 | |
143 | -**amngrdelete** *account* | |
140 | +**amngrdelete** \[**-h**\] \[**-D** *dbfile*\] *account* | |
144 | 141 | |
145 | 142 | Remove the *account* and all credential associated to it. |
146 | 143 | |
147 | -**amngrgen** \[**-r** *receipient*\] \[*len*\] | |
144 | +**amngrgen** \[**-h**\] \[**-r** *receipient*\] \[*len*\] | |
148 | 145 | |
149 | 146 | Generate a password with **rand\_printable** and encrypt it via |
150 | 147 | **amngrcrypt**. By default the password will be 10 characters long. That |
151 | 148 | can be modified by the optional *len* argument. |
152 | 149 | |
153 | -**amngrgetoldpass** *account* | |
150 | +**amngrgetoldpass** \[**-h**\] \[**-D** *dbfile*\] *account* | |
154 | 151 | |
155 | 152 | Read and decrypt the password associated with *account* that is flagged |
156 | 153 | as old and store it into the X clipboard. |
157 | 154 | |
158 | -**amngrgetolduser** *account* | |
155 | +**amngrgetolduser** \[**-h**\] \[**-c**\] \[**-D** *dbfile*\] *account* | |
159 | 156 | |
160 | 157 | Read and decrypt the username associated with *account* that is flagged |
161 | 158 | as old and store it into the X clipboard. |
162 | 159 | |
163 | -**amngrgetpass** *account* | |
160 | +**amngrgetpass** \[**-h**\] \[**-D** *dbfile*\] *account* \[*state*\] | |
164 | 161 | |
165 | 162 | Read and decrypt the password associated with *account* that is flagged |
166 | -as active and store it into the X clipboard. | |
163 | +as active and store it into the X clipboard. The *state* argument might | |
164 | +be either 1 or 2 where 1 means get the current credential and 2 means | |
165 | +get the old credential. It defaults to 1. | |
167 | 166 | |
168 | -**amngrgetuser** *account* | |
167 | +**amngrgetuser** \[**-h**\] \[**-c**\] \[**-D** *dbfile*\] *account* \[*state*\] | |
169 | 168 | |
170 | 169 | Read and decrypt the username associated with *account* that is flagged |
171 | -as active and store it into the X clipboard. | |
170 | +as active and store it into the X clipboard. The *state* argument might | |
171 | +be either 1 or 2 where 1 means get the current credential and 2 means | |
172 | +get the old credential. It defaults to 1. | |
172 | 173 | |
173 | -**amngrid** *account* | |
174 | +**amngrid** \[**-h**\] \[**-D** *dbfile*\] *account* | |
174 | 175 | |
175 | 176 | (This is primarily for internal use.) Get the database id associated to |
176 | 177 | the given *account* argument. |
177 | 178 | |
178 | -**amngrlist** \[**-s** *separator*\] | |
179 | - | |
180 | -List all accounts currently stored within the database the output will | |
181 | -contain the name of the account, the username and the description | |
182 | -delimited by a *separator* string that can be specified with the **-s** | |
183 | -option. If the option is omitted the separator is " => ". Each row is | |
184 | -one account. | |
185 | - | |
186 | -**amngrrename** *old\_account new\_account* | |
179 | +**amngrrename** \[**-h**\] \[**-D** *dbfile*\] *old\_account | |
180 | +new\_account* | |
187 | 181 | |
188 | 182 | Rename the account specified by *old\_account* to *new\_account*. |
189 | 183 | |
190 | -**amngrsearch** \[**-s** *separator*\] *pattern* | |
184 | +**amngrsearch** \[**-h**\] \[**-D** *dbfile*\] \[**-s** *separator*\] | |
185 | +\[*pattern*\] | |
191 | 186 | |
192 | -List accounts where *pattern* exists in either the account name, the | |
193 | -username or the account description. The output is like the one | |
194 | -described with **amngrlist**. | |
187 | +List all accounts where *pattern* exists in either the account name, the | |
188 | +username or the account description. The output will contain the name of | |
189 | +the account, the username and the description delimited by a *separator* | |
190 | +string that can be specified with the **-s** option. If the option is | |
191 | +omitted the separator is " => ". Each row is one account. | |
192 | +If *pattern* is omitted all accounts will be listed. | |
195 | 193 | |
196 | 194 | ## OPTIONS |
197 | 195 | |
... | ... | @@ -199,10 +197,17 @@ The options are consistent over all sub commands. However not all sub |
199 | 197 | commands use all options and some sub commands take arguments that other |
200 | 198 | get per option. (See **DESCRIPTION**) |
201 | 199 | |
200 | +**-h** − Write a short usage information. | |
201 | + | |
202 | 202 | **-u** − The login username of the credential for the account. |
203 | 203 | |
204 | 204 | **-p** − The plain text password of the credential for the account. |
205 | 205 | |
206 | +**-c** − By default this scripts stores the username into the X clipboard | |
207 | + whith **ambgrgetuser** and **amngrgetolduser**. When **-c** is given | |
208 | + the username is written to stdout. The password is never written to | |
209 | + stdout. | |
210 | + | |
206 | 211 | **-d** − The description for the account. |
207 | 212 | |
208 | 213 | **-D** − Select the database file to use instead of the one defined in the |
... | ... | @@ -211,8 +216,8 @@ get per option. (See **DESCRIPTION**) |
211 | 216 | **-r** − Select a recipient id for GnuPG encryption to use instead of the one |
212 | 217 | defined in the **$AMNGRID** environment variable. |
213 | 218 | |
214 | -**-s** − The column separator for the **amngrlist** and | |
215 | - **amngrsearchcommands**. | |
219 | +**-s** − The column separator for the **amngrlist** and **amngrsearch** | |
220 | + commands. | |
216 | 221 | |
217 | 222 | ## ENVIRONMENT |
218 | 223 | |
... | ... | @@ -231,7 +236,8 @@ option. |
231 | 236 | |
232 | 237 | **AMNGRPWLEN** |
233 | 238 | |
234 | -The password length to be used when generating new passwords. | |
239 | +The password length to be used when generating new passwords. If not | |
240 | +specified this defaults to 10. | |
235 | 241 | |
236 | 242 | ## DEPENDENCIES |
237 | 243 | |
... | ... | @@ -257,7 +263,7 @@ To store the data within the X clipboard the **xclip** is needed. |
257 | 263 | - **awk** |
258 | 264 | - **basename** |
259 | 265 | - **cat** |
260 | - - **dnsdomainname** | |
266 | + - **dirname** | |
261 | 267 | - **echo** |
262 | 268 | - **getopts** |
263 | 269 | - **gpg** | ... | ... |
... | ... | @@ -7,15 +7,54 @@ AMNGRPWLEN="${AMNGRPWLEN:-10}" |
7 | 7 | alias random="cat /dev/urandom" |
8 | 8 | |
9 | 9 | function rand_printable() { |
10 | - if ! [[ "${1}" =~ "^[0-9]+$" ]] | |
10 | + local OPT OPTARG OPTIND | |
11 | + local USAGE="$(printf "Usage: %s [-h] [len]" "$0")" | |
12 | + | |
13 | + while getopts h OPT | |
14 | + do | |
15 | + case $OPT in | |
16 | + h) | |
17 | + echo "${USAGE}" | |
18 | + return 0;; | |
19 | + ?) | |
20 | + echo "${USAGE}" | |
21 | + return 1;; | |
22 | + esac | |
23 | + done | |
24 | + shift $(($OPTIND-1)) | |
25 | + | |
26 | + if ! [[ "${1}" =~ ^[0-9]*$ ]] | |
11 | 27 | then |
12 | - printf "Usage: %s: [len]" "$0" | |
28 | + echo "${USAGE}" | |
29 | + return 1 | |
13 | 30 | fi |
31 | + | |
14 | 32 | echo -n "$(random | tr -dc ' !#-&(-~' | head -c${1:-512})" |
15 | 33 | } |
16 | 34 | |
17 | 35 | function amngrdbinit() { |
18 | - local DB="${1:-${AMNGRDB}}" | |
36 | + local OPT OPTARG OPTIND DB | |
37 | + local USAGE="$(printf "Usage: %s [-h] [dbfile]" "$0")" | |
38 | + | |
39 | + while getopts h OPT | |
40 | + do | |
41 | + case $OPT in | |
42 | + h) | |
43 | + echo "${USAGE}" | |
44 | + return 0;; | |
45 | + ?) | |
46 | + echo "${USAGE}" | |
47 | + return 1;; | |
48 | + esac | |
49 | + done | |
50 | + shift $(($OPTIND-1)) | |
51 | + | |
52 | + DB="${1:-${AMNGRDB}}" | |
53 | + if [ ! \( -d "$(dirname "${DB}")" \) ] | |
54 | + then | |
55 | + echo "${USAGE}" | |
56 | + return 1 | |
57 | + fi | |
19 | 58 | |
20 | 59 | sqlite3 "${DB}" <<-EOD |
21 | 60 | PRAGMA foreign_keys = ON; |
... | ... | @@ -39,43 +78,198 @@ function amngrdbinit() { |
39 | 78 | } |
40 | 79 | |
41 | 80 | function amngrdbdestroy() { |
42 | - local DB="${1:-${AMNGRDB}}" | |
43 | - local CHECK | |
81 | + local OPT OPTARG OPTIND DB CHECK | |
82 | + local USAGE="$(printf "Usage: %s [-h] [dbfile]" "$0")" | |
83 | + | |
84 | + while getopts h OPT | |
85 | + do | |
86 | + case $OPT in | |
87 | + h) | |
88 | + echo "${USAGE}" | |
89 | + return 0;; | |
90 | + ?) | |
91 | + echo "${USAGE}" | |
92 | + return 1;; | |
93 | + esac | |
94 | + done | |
95 | + shift $(($OPTIND-1)) | |
44 | 96 | |
97 | + DB="${1:-${AMNGRDB}}" | |
45 | 98 | cat <<-EOT |
46 | 99 | WARNING: You are about to remove your account data. There is no way to |
47 | - recover from this. Are you really shure you want to do this? | |
100 | + recover from this. Are you really sure you want to do this? | |
48 | 101 | EOT |
49 | - echo -n "[Yes|[No]]: " && read CHECK | |
102 | + printf "Really remove %s (Yes|[No]): " "${DB}" && read CHECK | |
50 | 103 | CHECK="${CHECK:-No}" |
51 | 104 | |
52 | - test "${CHECK}" == "Yes" && rm -f "${AMNGRDB}" | |
105 | + test "${CHECK}" == "Yes" && rm -f "${DB}" | |
53 | 106 | } |
54 | 107 | |
55 | 108 | function amngrid() { |
56 | - local ACCOUNT_NAME="${1}" | |
57 | - echo "$(sqlite3 "${AMNGRDB}" <<-EOD | |
109 | + local OPT OPTARG OPTIND ACCOUNT_NAME DB | |
110 | + local USAGE="$(printf "Usage: %s [-h] [-D dbfile] account" "$0")" | |
111 | + | |
112 | + while getopts hD: OPT | |
113 | + do | |
114 | + case $OPT in | |
115 | + D) | |
116 | + DB="${OPTARG}";; | |
117 | + h) | |
118 | + echo "${USAGE}" | |
119 | + return 0;; | |
120 | + ?) | |
121 | + echo "${USAGE}" | |
122 | + return 1;; | |
123 | + esac | |
124 | + done | |
125 | + shift $(($OPTIND-1)) | |
126 | + | |
127 | + ACCOUNT_NAME="${1}" | |
128 | + DB="${DB:-${AMNGRDB}}" | |
129 | + | |
130 | + if [ -z "${ACCOUNT_NAME}" ] | |
131 | + then | |
132 | + echo "${USAGE}" | |
133 | + return 1 | |
134 | + fi | |
135 | + | |
136 | + echo "$(sqlite3 "${DB}" <<-EOD | |
58 | 137 | SELECT id FROM account WHERE name='${ACCOUNT_NAME}'; |
59 | 138 | EOD |
60 | 139 | )" |
61 | 140 | } |
62 | 141 | |
63 | 142 | function amngrcrypt() { |
64 | - local PLAIN="${1}" | |
65 | - echo -n "${PLAIN}" | gpg -aeqr "${AMNGRID}" | |
143 | + local OPT OPTARG OPTIND PLAIN RECIPIENT | |
144 | + local USAGE="$(printf "Usage: %s [-h] [-r recipient] password" "$0")" | |
145 | + | |
146 | + while getopts hr: OPT | |
147 | + do | |
148 | + case $OPT in | |
149 | + r) | |
150 | + RECIPIENT="${OPTARG}";; | |
151 | + h) | |
152 | + echo "${USAGE}" | |
153 | + return 0;; | |
154 | + ?) | |
155 | + echo "${USAGE}" | |
156 | + return 1;; | |
157 | + esac | |
158 | + done | |
159 | + shift $(($OPTIND-1)) | |
160 | + | |
161 | + RECIPIENT="${RECIPIENT:-${AMNGRID}}" | |
162 | + PLAIN="${1}" | |
163 | + | |
164 | + if [ -z "${PLAIN}" ] | |
165 | + then | |
166 | + echo "${USAGE}" | |
167 | + return 1 | |
168 | + fi | |
169 | + | |
170 | + echo -n "${PLAIN}" | gpg -aeqr "${RECIPIENT}" | |
66 | 171 | } |
67 | 172 | |
68 | 173 | function amngrgen() { |
69 | - local LEN="${0:-${AMNGRPWLEN}}" | |
70 | - amngrcrypt "$(rand_printable "${LEN}")" | |
174 | + local OPT OPTARG OPTIND RECIPIENT | |
175 | + local USAGE="$(printf "Usage: %s [-h] [-r recipient] [len]" "$0")" | |
176 | + | |
177 | + while getopts hr: OPT | |
178 | + do | |
179 | + case $OPT in | |
180 | + r) | |
181 | + RECIPIENT="${OPTARG}";; | |
182 | + h) | |
183 | + echo "${USAGE}" | |
184 | + return 0;; | |
185 | + ?) | |
186 | + echo "${USAGE}" | |
187 | + return 1;; | |
188 | + esac | |
189 | + done | |
190 | + shift $(($OPTIND-1)) | |
191 | + | |
192 | + local LEN="${1:-${AMNGRPWLEN}}" | |
193 | + | |
194 | + if [ "${RECIPIENT}" ] | |
195 | + then | |
196 | + amngrcrypt -r "${RECIPIENT}" "$(rand_printable "${LEN}")" | |
197 | + else | |
198 | + amngrcrypt "$(rand_printable "${LEN}")" | |
199 | + fi | |
71 | 200 | } |
72 | 201 | |
73 | 202 | function amngradd() { |
203 | + local OPT OPTARG OPTIND DESCRIPTION RECIPIENT DB | |
204 | + local USAGE="$(cat <<-EOT | |
205 | + Usage: $0 [-h] [-d description] [-D dbfile] [-r recipient] | |
206 | + account [username [password]] | |
207 | + EOT | |
208 | + )" | |
209 | + | |
210 | + while getopts d:D:hr: OPT | |
211 | + do | |
212 | + case $OPT in | |
213 | + d) | |
214 | + DESCRIPTION="${OPTARG}";; | |
215 | + D) | |
216 | + DB="${OPTARG}";; | |
217 | + r) | |
218 | + RECIPIENT="${OPTARG}";; | |
219 | + h) | |
220 | + echo "${USAGE}" | |
221 | + return 0;; | |
222 | + ?) | |
223 | + echo "${USAGE}" | |
224 | + return 1;; | |
225 | + esac | |
226 | + done | |
227 | + shift $(($OPTIND-1)) | |
228 | + | |
229 | + RECIPIENT="${RECIPIENT:-${AMNGRID}}" | |
230 | + DB="${DB:-${AMNGRDB}}" | |
231 | + | |
74 | 232 | local ACCOUNT_NAME="${1}" |
75 | - local USER="${2}" | |
76 | - local PASSWORD="$(amngrcrypt "${3}")" | |
77 | - local DESCRIPTION="${4:-NO DESCRIPTION}" | |
78 | - local ACCOUNT_ID="$(amngrid "${ACCOUNT_NAME}")" | |
233 | + DESCRIPTION="${DESCRIPTION:-NO DESCRIPTION}" | |
234 | + | |
235 | + if [ -z "${ACCOUNT_NAME}" ] | |
236 | + then | |
237 | + echo "No account name given." | |
238 | + echo "${USAGE}" | |
239 | + return 1 | |
240 | + fi | |
241 | + | |
242 | + if [ "${2}" ] | |
243 | + then | |
244 | + USER="${2}" | |
245 | + else | |
246 | + USER="$(amngrgetuser -D "${DB}" -c "${ACCOUNT_NAME}")" | |
247 | + fi | |
248 | + | |
249 | + if [ -z "${USER}" ] | |
250 | + then | |
251 | + printf "Can't find current user for account %s\n" "${ACCOUNT_NAME}" | |
252 | + echo "${USAGE}" | |
253 | + return 2 | |
254 | + fi | |
255 | + | |
256 | + if [ "${3}" ] | |
257 | + then | |
258 | + PASSWORD="$(amngrcrypt -r "${RECIPIENT}" "${3}")" | |
259 | + else | |
260 | + PASSWORD="$(amngrgen -r "${RECIPIENT}")" | |
261 | + echo -n "${PASSWORD}" | gpg -dq | xclip -i | |
262 | + fi | |
263 | + | |
264 | + if [ -z "${PASSWORD}" ] | |
265 | + then | |
266 | + printf "Failed to create encrypted password for account %s\n" \ | |
267 | + "${ACCOUNT_NAME}" | |
268 | + echo "${USAGE}" | |
269 | + return 3 | |
270 | + fi | |
271 | + | |
272 | + local ACCOUNT_ID="$(amngrid -D "${DB}" "${ACCOUNT_NAME}")" | |
79 | 273 | local QUERY="$(cat <<-EOD |
80 | 274 | PRAGMA foreign_keys = ON; |
81 | 275 | BEGIN TRANSACTION; |
... | ... | @@ -115,46 +309,100 @@ function amngradd() { |
115 | 309 | EOD |
116 | 310 | )" |
117 | 311 | |
118 | - sqlite3 "${AMNGRDB}" "${QUERY}" | |
312 | + sqlite3 "${DB}" "${QUERY}" | |
119 | 313 | } |
120 | 314 | |
121 | -function amngrcreate() { | |
122 | - local ACCOUNT_NAME="${1}" | |
123 | - local USER="${2}" | |
124 | - local DESCRIPTION="${3:-NO DESCRIPTION}" | |
125 | - local PASSWORD="$(rand_printable 10)" | |
315 | +function amngrgetuser() { | |
316 | + local OPT OPTARG OPTIND DB | |
317 | + local STDOUT=0 | |
318 | + local USAGE="$(cat <<-EOT | |
319 | + Usage: $0 [-h] [-c] [-D dbfile] account [state] | |
320 | + EOT | |
321 | + )" | |
126 | 322 | |
127 | - amngradd "${ACCOUNT_NAME}" "${USER}" "${PASSWORD}" "${DESCRIPTION}" | |
128 | - amngrgetpass "${ACCOUNT_NAME}" | |
129 | -} | |
323 | + while getopts hcD: OPT | |
324 | + do | |
325 | + case $OPT in | |
326 | + c) | |
327 | + STDOUT=1;; | |
328 | + D) | |
329 | + DB="${OPTARG}";; | |
330 | + h) | |
331 | + echo "${USAGE}" | |
332 | + return 0;; | |
333 | + ?) | |
334 | + echo "${USAGE}" | |
335 | + return 1;; | |
336 | + esac | |
337 | + done | |
338 | + shift $(($OPTIND-1)) | |
130 | 339 | |
131 | -function amngrgetuser() { | |
132 | 340 | local ACCOUNT_NAME="${1}" |
133 | 341 | local STATE="${2:-"1"}" |
342 | + DB="${DB:-${AMNGRDB}}" | |
134 | 343 | |
344 | + if [ -z "${ACCOUNT_NAME}" ] | |
345 | + then | |
346 | + echo "${USAGE}" | |
347 | + return 1 | |
348 | + fi | |
135 | 349 | test "${STATE}" != "1" -a "${STATE}" != "2" && STATE="1" |
136 | 350 | |
137 | - sqlite3 "${AMNGRDB}" <<-EOD |\ | |
138 | - awk 'NR>1{print p}{p=$0}END{ORS="";print}' | xclip -i | |
139 | - SELECT user FROM account | |
140 | - JOIN account_cred ON account.id=account_cred.account_id | |
141 | - JOIN cred ON cred.id=account_cred.cred_id | |
142 | - WHERE name='${ACCOUNT_NAME}' AND state=${STATE}; | |
143 | - EOD | |
351 | + if [ $STDOUT -eq 0 ] | |
352 | + then | |
353 | + sqlite3 "${DB}" <<-EOD |\ | |
354 | + awk 'NR>1{print p}{p=$0}END{ORS="";print}' | xclip -i | |
355 | + SELECT user FROM account | |
356 | + JOIN account_cred ON account.id=account_cred.account_id | |
357 | + JOIN cred ON cred.id=account_cred.cred_id | |
358 | + WHERE name='${ACCOUNT_NAME}' AND state=${STATE}; | |
359 | + EOD | |
360 | + else | |
361 | + sqlite3 "${DB}" <<-EOD |\ | |
362 | + awk 'NR>1{print p}{p=$0}END{ORS="";print}' | |
363 | + SELECT user FROM account | |
364 | + JOIN account_cred ON account.id=account_cred.account_id | |
365 | + JOIN cred ON cred.id=account_cred.cred_id | |
366 | + WHERE name='${ACCOUNT_NAME}' AND state=${STATE}; | |
367 | + EOD | |
368 | + fi | |
144 | 369 | } |
145 | 370 | |
146 | 371 | function amngrgetolduser() { |
147 | - local ACCOUNT_NAME="${1}" | |
148 | - amngrgetuser "${ACCOUNT_NAME}" "2" | |
372 | + amngrgetuser "$@" "2" | |
149 | 373 | } |
150 | 374 | |
151 | 375 | function amngrgetpass() { |
376 | + local OPT OPTARG OPTIND DB | |
377 | + local USAGE="$(printf "Usage: %s [-h] [-D dbfile] account [state]" "$0")" | |
378 | + | |
379 | + while getopts hD: OPT | |
380 | + do | |
381 | + case $OPT in | |
382 | + D) | |
383 | + DB="${OPTARG}";; | |
384 | + h) | |
385 | + echo "${USAGE}" | |
386 | + return 0;; | |
387 | + ?) | |
388 | + echo "${USAGE}" | |
389 | + return 1;; | |
390 | + esac | |
391 | + done | |
392 | + shift $(($OPTIND-1)) | |
393 | + | |
152 | 394 | local ACCOUNT_NAME="${1}" |
153 | 395 | local STATE="${2:-1}" |
396 | + DB="${DB:-${AMNGRDB}}" | |
154 | 397 | |
398 | + if [ -z "${ACCOUNT_NAME}" ] | |
399 | + then | |
400 | + echo "${USAGE}" | |
401 | + return 1 | |
402 | + fi | |
155 | 403 | test "${STATE}" != "1" -a "${STATE}" != "2" && STATE="1" |
156 | 404 | |
157 | - sqlite3 "${AMNGRDB}" <<-EOD |\ | |
405 | + sqlite3 "${DB}" <<-EOD |\ | |
158 | 406 | awk 'NR>1{print p}{p=$0}END{ORS="";print}' | gpg -dq | xclip -i |
159 | 407 | SELECT pass FROM account |
160 | 408 | JOIN account_cred ON account.id=account_cred.account_id |
... | ... | @@ -164,26 +412,76 @@ function amngrgetpass() { |
164 | 412 | } |
165 | 413 | |
166 | 414 | function amngrgetoldpass() { |
167 | - local ACCOUNT_NAME="${1}" | |
168 | - amngrgetpass "${ACCOUNT_NAME}" "2" | |
415 | + amngrgetpass "$@" "2" | |
169 | 416 | } |
170 | 417 | |
171 | 418 | function amngrrename() { |
419 | + local OPT OPTARG OPTIND DB | |
420 | + local USAGE="$(cat <<-EOT | |
421 | + Usage: $0 [-h] [-D dbfile] old_account new_account | |
422 | + EOT | |
423 | + )" | |
424 | + | |
425 | + while getopts hD: OPT | |
426 | + do | |
427 | + case $OPT in | |
428 | + D) | |
429 | + DB="${OPTARG}";; | |
430 | + h) | |
431 | + echo "${USAGE}" | |
432 | + return 0;; | |
433 | + ?) | |
434 | + echo "${USAGE}" | |
435 | + return 1;; | |
436 | + esac | |
437 | + done | |
438 | + shift $(($OPTIND-1)) | |
439 | + | |
172 | 440 | local OLD_NAME="${1}" |
173 | 441 | local NEW_NAME="${2}" |
442 | + DB="${DB:-${AMNGRDB}}" | |
174 | 443 | |
175 | - test -z "${OLD_NAME}" -o -z "${NEW_NAME}" && return 1 | |
444 | + if [ -z "${OLD_NAME}" -o -z "${NEW_NAME}" ] | |
445 | + then | |
446 | + echo "${USAGE}" | |
447 | + return 1 | |
448 | + fi | |
176 | 449 | |
177 | - sqlite3 "${AMNGRDB}" <<-EOD | |
450 | + sqlite3 "${DB}" <<-EOD | |
178 | 451 | UPDATE account SET name='${NEW_NAME}' |
179 | 452 | WHERE name='${OLD_NAME}'; |
180 | 453 | EOD |
181 | 454 | } |
182 | 455 | |
183 | 456 | function amngrdelete() { |
457 | + local OPT OPTARG OPTIND DB | |
458 | + local USAGE="$(printf "Usage: %s [-h] [-D dbfile] account" "$0")" | |
459 | + | |
460 | + while getopts hD: OPT | |
461 | + do | |
462 | + case $OPT in | |
463 | + D) | |
464 | + DB="${OPTARG}";; | |
465 | + h) | |
466 | + echo "${USAGE}" | |
467 | + return 0;; | |
468 | + ?) | |
469 | + echo "${USAGE}" | |
470 | + return 1;; | |
471 | + esac | |
472 | + done | |
473 | + shift $(($OPTIND-1)) | |
474 | + | |
184 | 475 | local ACCOUNT_NAME="${1}" |
476 | + DB="${DB:-${AMNGRDB}}" | |
477 | + | |
478 | + if [ -z "${ACCOUNT_NAME}" ] | |
479 | + then | |
480 | + echo "${USAGE}" | |
481 | + return 1 | |
482 | + fi | |
185 | 483 | |
186 | - sqlite3 "${AMNGRDB}" <<-EOD | |
484 | + sqlite3 "${DB}" <<-EOD | |
187 | 485 | PRAGMA foreign_keys = ON; |
188 | 486 | BEGIN TRANSACTION; |
189 | 487 | DELETE FROM cred WHERE id IN ( |
... | ... | @@ -195,42 +493,35 @@ function amngrdelete() { |
195 | 493 | EOD |
196 | 494 | } |
197 | 495 | |
198 | -function amngrlist() { | |
199 | - local SEPARATOR="${1:-" => "}" | |
200 | - sqlite3 -separator "${SEPARATOR}" "${AMNGRDB}" <<-EOD | |
201 | - SELECT name, user, desc FROM account | |
202 | - JOIN account_cred ON account.id=account_cred.account_id | |
203 | - JOIN cred ON cred.id=account_cred.cred_id | |
204 | - WHERE state=1; | |
205 | - EOD | |
206 | -} | |
207 | - | |
208 | 496 | function amngrsearch() { |
209 | - local PATTERN | |
210 | - local DELIMITER=" => " | |
211 | - local USAGE="$(printf "Usage: %s: [-d delimiter] pattern" "$0")" | |
497 | + local OPT OPTARG OPTIND SEPARATOR PATTERN | |
498 | + local USAGE="$(cat <<-EOT | |
499 | + Usage: $0 [-h] [-D dbfile] [-s separator] [pattern] | |
500 | + EOT | |
501 | + )" | |
212 | 502 | |
213 | - while getopts d: opt | |
503 | + while getopts hD:s: OPT | |
214 | 504 | do |
215 | - case $opt in | |
216 | - d) | |
217 | - DELIMITER="${OPTARG}";; | |
505 | + case $OPT in | |
506 | + D) | |
507 | + DB="${OPTARG}";; | |
508 | + s) | |
509 | + SEPARATOR="${OPTARG}";; | |
510 | + h) | |
511 | + echo "${USAGE}" | |
512 | + return 0;; | |
218 | 513 | ?) |
219 | 514 | echo "${USAGE}" |
220 | - exit 1;; | |
515 | + return 1;; | |
221 | 516 | esac |
222 | 517 | done |
223 | 518 | shift $(($OPTIND-1)) |
224 | 519 | |
225 | - if [ $# -lt 2 ] | |
226 | - then | |
227 | - echo "${USAGE}" | |
228 | - exit 1;; | |
229 | - fi | |
230 | - | |
231 | 520 | PATTERN="${1}" |
521 | + SEPARATOR="${SEPARATOR:-" => "}" | |
522 | + DB="${DB:-${AMNGRDB}}" | |
232 | 523 | |
233 | - sqlite3 -separator " => " "${AMNGRDB}" <<-EOD | |
524 | + sqlite3 -separator "${SEPARATOR}" "${DB}" <<-EOD | |
234 | 525 | SELECT name, user, desc FROM account |
235 | 526 | JOIN account_cred ON account.id=account_cred.account_id |
236 | 527 | JOIN cred ON cred.id=account_cred.cred_id |
... | ... | @@ -242,10 +533,10 @@ function amngrsearch() { |
242 | 533 | |
243 | 534 | case "$(basename -- "$0")" in |
244 | 535 | random) random;; |
245 | - rand_printable) rand_printable;; | |
536 | + rand_printable) rand_printable "$@";; | |
246 | 537 | |
247 | - amngrdbinit) amngrdbinit;; | |
248 | - amngrdbdestroy) amngrdbdestroy;; | |
538 | + amngrdbinit) amngrdbinit "$@";; | |
539 | + amngrdbdestroy) amngrdbdestroy "$@";; | |
249 | 540 | |
250 | 541 | amngradd) amngradd "$@";; |
251 | 542 | amngrcreate) amngrcreate "$@";; |
... | ... | @@ -257,7 +548,7 @@ case "$(basename -- "$0")" in |
257 | 548 | amngrgetpass) amngrgetpass "$@";; |
258 | 549 | amngrgetuser) amngrgetuser "$@";; |
259 | 550 | amngrid) amngrid "$@";; |
260 | - amngrlist) amngrlist;; | |
551 | + amngrlist) amngrlist "$@";; | |
261 | 552 | amngrrename) amngrrename "$@";; |
262 | 553 | amngrsearch) amngrsearch "$@";; |
263 | 554 | ... | ... |
... | ... | @@ -15,7 +15,6 @@ Database management functions: |
15 | 15 | |
16 | 16 | Account management functions: |
17 | 17 | amngradd \- add an account credential to the database |
18 | - amngrcreate \- create a new account credential to the database | |
19 | 18 | amngrcrypt \- crypt the given data with GnuPG |
20 | 19 | amngrdelete \- delete an account |
21 | 20 | amngrgen \- generate a encrypted random passphrase |
... | ... | @@ -24,7 +23,6 @@ Account management functions: |
24 | 23 | amngrgetpass \- copy active password of account to X clipboard |
25 | 24 | amngrgetuser \- copy active username of account to X clipboard |
26 | 25 | amngrid \- write the database id of a given account name to stdout |
27 | - amngrlist \- list all accounts | |
28 | 26 | amngrrename \- rename an account |
29 | 27 | amngrsearch \- pattern search accounts |
30 | 28 | .SH SYNOPSIS |
... | ... | @@ -34,75 +32,95 @@ source |
34 | 32 | .B random |
35 | 33 | |
36 | 34 | .B rand_printable |
35 | +.RB [ -h ] | |
37 | 36 | .RI [ len ] |
38 | 37 | |
39 | 38 | .B amngrdbinit |
39 | +.RB [ -h ] | |
40 | 40 | .RI [ dbfile ] |
41 | 41 | |
42 | 42 | .B amngrdbdestroy |
43 | +.RB [ -h ] | |
43 | 44 | .RI [ dbfile ] |
44 | 45 | |
45 | -.B amngradd -u | |
46 | -.I username | |
47 | -.B -p | |
48 | -.I password | |
46 | +.B amngradd | |
47 | +.RB [ -h ] | |
49 | 48 | .RB [ -d |
50 | 49 | .IR description ] |
51 | 50 | .RB [ -D |
52 | 51 | .IR dbfile ] |
53 | 52 | .RB [ -r |
54 | 53 | .IR recipient ] |
55 | -.I account | |
56 | - | |
57 | -.B amngrcreate -u | |
58 | -.I username | |
59 | -.RB [ -d | |
60 | -.IR description ] | |
61 | -.RB [ -D | |
62 | -.IR dbfile ] | |
63 | -.RB [ -r | |
64 | -.IR recipient ] | |
65 | -.I account | |
54 | +.I | |
55 | + account | |
56 | +.RI [ username | |
57 | +.RI [ password ]] | |
66 | 58 | |
67 | 59 | .B amngrcrypt |
60 | +.RB [ -h ] | |
68 | 61 | .RB [ -r |
69 | 62 | .IR recipient ] |
70 | 63 | .I password |
71 | 64 | |
72 | 65 | .B amngrdelete |
66 | +.RB [ -h ] | |
67 | +.RB [ -D | |
68 | +.IR dbfile ] | |
73 | 69 | .I account |
74 | 70 | |
75 | 71 | .B amngrgen |
72 | +.RB [ -h ] | |
76 | 73 | .RB [ -r |
77 | 74 | .IR recipient ] |
78 | 75 | .RI [ len ] |
79 | 76 | |
80 | 77 | .B amngrgetoldpass |
78 | +.RB [ -h ] | |
79 | +.RB [ -D | |
80 | +.IR dbfile ] | |
81 | 81 | .I account |
82 | 82 | |
83 | 83 | .B amngrgetolduser |
84 | +.RB [ -h ] | |
85 | +.RB [ -c ] | |
86 | +.RB [ -D | |
87 | +.IR dbfile ] | |
84 | 88 | .I account |
85 | 89 | |
86 | 90 | .B amngrgetpass |
91 | +.RB [ -h ] | |
92 | +.RB [ -D | |
93 | +.IR dbfile ] | |
87 | 94 | .I account |
95 | +.RI [ state ] | |
88 | 96 | |
89 | 97 | .B amngrgetuser |
98 | +.RB [ -h ] | |
99 | +.RB [ -c ] | |
100 | +.RB [ -D | |
101 | +.IR dbfile ] | |
90 | 102 | .I account |
103 | +.RI [ state ] | |
91 | 104 | |
92 | 105 | .B amngrid |
106 | +.RB [ -h ] | |
107 | +.RB [ -D | |
108 | +.IR dbfile ] | |
93 | 109 | .I account |
94 | 110 | |
95 | -.B amngrlist | |
96 | -.RB [ -s | |
97 | -.IR separator ] | |
98 | - | |
99 | 111 | .B amngrrename |
112 | +.RB [ -h ] | |
113 | +.RB [ -D | |
114 | +.IR dbfile ] | |
100 | 115 | .I old_account new_account |
101 | 116 | |
102 | 117 | .B amngrsearch |
118 | +.RB [ -h ] | |
119 | +.RB [ -D | |
120 | +.IR dbfile ] | |
103 | 121 | .RB [ -s |
104 | 122 | .IR separator ] |
105 | -.I pattern | |
123 | +.RI [ pattern ] | |
106 | 124 | .SH DESCRIPTION |
107 | 125 | This file can either be source into the current shell or used as a |
108 | 126 | standalone shell script via the provided symlinks. When used as standalone |
... | ... | @@ -116,7 +134,7 @@ pair. |
116 | 134 | \fBrandom\fR |
117 | 135 | Takes no arguments and connect a non blocking random source to stdout. |
118 | 136 | .TP |
119 | -\fBrand_printable\fR [\fIlen\fR] | |
137 | +\fBrand_printable\fR [\fB-h\fR] [\fIlen\fR] | |
120 | 138 | Uses \fBrandom\fR to write a string of random printable characters to |
121 | 139 | stdout. All control characters ASCII-0 to ASCII-37 as well as |
122 | 140 | ASCII-177 to 255, single and double quotes are filtered. The single |
... | ... | @@ -126,100 +144,114 @@ documents used to communicate with the SQLite database. |
126 | 144 | The optional \fIlen\fR argument specifies the string length to be written |
127 | 145 | and defaults to 512. |
128 | 146 | .TP |
129 | -\fBamngrdbinit\fR [\fIdbfile\fR] | |
147 | +\fBamngrdbinit\fR [\fB-h\fR] [\fIdbfile\fR] | |
130 | 148 | Create the SQLite database file. If the optional \fIdbfile\fR argument is |
131 | 149 | given it specifies the fill path to the file to use, else the value of |
132 | 150 | \fB$AMNGRDB\fR environment variable is used. |
133 | 151 | .TP |
134 | -\fBamngrdbdestroy\fR [\fIdbfile\fR] | |
152 | +\fBamngrdbdestroy\fR [\fB-h\fR] [\fIdbfile\fR] | |
135 | 153 | Deletes the SQLite database file. If the optional \fIdbfile\fR argument |
136 | 154 | is given it specifies the fill path to the file to use, else the value |
137 | 155 | of \fB$AMNGRDB\fR environment variable is used. |
138 | 156 | .TP |
139 | -\fBamngradd\fR \fB-u\fR \fIusername\fR \fB-p\fR \fIpassword\fR \ | |
140 | -[\fB-d\fR \fIdescription\fR] [\fB-D\fR \fIdbfile\fR] \ | |
141 | -[\fB-r\fR \fIrecipient\fR] \fIaccount\fR | |
157 | +\fBamngradd\fR [\fB-h\fR] [\fB-d\fR \fIdescription\fR] \ | |
158 | +[\fB-D\fR \fIdbfile\fR] [\fB-r\fR \fIrecipient\fR] | |
159 | +.TQ | |
160 | + \fIaccount\fR [\fIusername\fR [\fIpassword\fR]] | |
142 | 161 | Adds an account credential and marks it as active. If the account |
143 | 162 | already exist, the credential (\fIusername\fR and \fIpassword\fR) is added to |
144 | 163 | that account and the previously added credential is marked as old. If |
145 | 164 | there was another even older credential that was already marked as old |
146 | -this will be marked as inactive and this becomes inaccessible with | |
165 | +this will be marked as inactive and thus becomes inaccessible with | |
147 | 166 | this tools (except for \fBamngrdelete\fR). |
148 | - The necessary option \fB-u\fR specifies the username to be stored with | |
149 | -this credential pair. | |
150 | - The also necessary option \fB-p\fR specifies the password to be stored | |
151 | -and the length of \fIpassword\fR is not limited at all. | |
152 | - With option \fB-d\fR one can add a \fIdescription\fR to the account entry. | |
153 | -One can specify the \fIdbfile\fR with the option \fB-D\fR if that option is | |
167 | + The \fIusername\fR and the \fIaccount\fR name must not be longer than 128 | |
168 | +characters. The \fIpassword\fR is not limited in its length at all. If | |
169 | +\fIpassword\fR is omitted one will be generated with \fBamngrgen\fR. The | |
170 | +\fIusername\fR may also be omitted if there was a previously added credentials | |
171 | +pair for this account. In that case the previous username is taken. It is | |
172 | +a failure to provide a \fIpassword\fR without a \fIusername\fR. There is no | |
173 | +way for the script to detect this condition and you will end up with a | |
174 | +credential where the username is the password and the password was generated. | |
175 | + Option \fB-d\fR adds a \fIdescription\fR to the account entry and | |
176 | +option \fB-D\fR specifys the \fIdbfile\fR to use. If that option is | |
154 | 177 | not given the \fB$AMNGRDB\fR environment variable is used. |
178 | + If a password was generated with this call it will be stored in the | |
179 | +X clipboard. | |
155 | 180 | .TP |
156 | -\fBamngrcreate\fR \fB-u\fR \fIusername\fR [\fB-d\fR \fIdescription\fR] \ | |
157 | -[\fB-D\fR \fIdbfile\fR] [\fB-r\fR \fIrecipient\fR] \fIaccount\fR | |
158 | - This will create a password with \fBamngrgen\fR and use that to add an | |
159 | -credential via \fBamngradd\fR. (See there for options description) | |
160 | - The added password will be copied to the X clipboard with | |
161 | -\fBamngrgetpass\fR for further use. | |
162 | -.TP | |
163 | -\fBamngrcrypt\fR [\fB-r\fR \fIrecipient\fR] \fIpassword\fR | |
181 | +\fBamngrcrypt\fR [\fB-h\fR] [\fB-r\fR \fIrecipient\fR] \fIpassword\fR | |
164 | 182 | Crypt the given plain text \fIpassword\fR with GnuPG and write it to |
165 | 183 | stdout. |
166 | 184 | The option \fB-r\fR specifies the recipient to use with the call to |
167 | 185 | \fBgpg\fR. If it is not given the value of the \fB$AMNGRID\fR environment |
168 | 186 | variable is used. |
169 | 187 | .TP |
170 | -\fBamngrdelete\fR \fIaccount\fR | |
188 | +\fBamngrdelete\fR [\fB-h\fR] [\fB-D\fR \fIdbfile\fR] \fIaccount\fR | |
171 | 189 | Remove the \fIaccount\fR and all credential associated to it. |
172 | 190 | .TP |
173 | -\fBamngrgen\fR [\fB-r\fR \fIreceipient\fR] [\fIlen\fR] | |
191 | +\fBamngrgen\fR [\fB-h\fR] [\fB-r\fR \fIreceipient\fR] [\fIlen\fR] | |
174 | 192 | Generate a password with \fBrand_printable\fR and encrypt it via |
175 | 193 | \fBamngrcrypt\fR. By default the password will be 10 characters long. That |
176 | 194 | can be modified by the optional \fIlen\fR argument. |
177 | 195 | .TP |
178 | -\fBamngrgetoldpass\fR \fIaccount\fR | |
196 | +\fBamngrgetoldpass\fR [\fB-h\fR] [\fB-D\fR \fIdbfile\fR] \fIaccount\fR | |
179 | 197 | Read and decrypt the password associated with \fIaccount\fR that is |
180 | 198 | flagged as old and store it into the X clipboard. |
181 | 199 | .TP |
182 | -\fBamngrgetolduser\fR \fIaccount\fR | |
200 | +\fBamngrgetolduser\fR [\fB-h\fR] [\fB-c\fR] [\fB-D\fR \fIdbfile\fR] \ | |
201 | +\fIaccount\fR | |
183 | 202 | Read and decrypt the username associated with \fIaccount\fR that is |
184 | 203 | flagged as old and store it into the X clipboard. |
185 | 204 | .TP |
186 | -\fBamngrgetpass\fR \fIaccount\fR | |
205 | +\fBamngrgetpass\fR [\fB-h\fR] [\fB-D\fR \fIdbfile\fR] \fIaccount\fR \ | |
206 | +[\fIstate\fR] | |
187 | 207 | Read and decrypt the password associated with \fIaccount\fR that is |
188 | -flagged as active and store it into the X clipboard. | |
208 | +flagged as active and store it into the X clipboard. The \fIstate\fR | |
209 | +argument might be either 1 or 2 where 1 means get the current credential | |
210 | +and 2 means get the old credential. It defaults to 1. | |
189 | 211 | .TP |
190 | -\fBamngrgetuser\fR \fIaccount\fR | |
212 | +\fBamngrgetuser\fR [\fB-h\fR] [\fB-c\fR] [\fB-D\fR \fIdbfile\fR] \ | |
213 | +\fIaccount\fR \ | |
214 | +[\fIstate\fR] | |
191 | 215 | Read and decrypt the username associated with \fIaccount\fR that is |
192 | -flagged as active and store it into the X clipboard. | |
216 | +flagged as active and store it into the X clipboard. The \fIstate\fR | |
217 | +argument might be either 1 or 2 where 1 means get the current credential | |
218 | +and 2 means get the old credential. It defaults to 1. | |
193 | 219 | .TP |
194 | -\fBamngrid\fR \fIaccount\fR | |
220 | +\fBamngrid\fR [\fB-h\fR] [\fB-D\fR \fIdbfile\fR] \fIaccount\fR | |
195 | 221 | (This is primarily for internal use.) Get the database id associated |
196 | 222 | to the given \fIaccount\fR argument. |
197 | 223 | .TP |
198 | -\fBamngrlist\fR [\fB-s\fR \fIseparator\fR] | |
199 | - List all accounts currently stored within the database the output | |
200 | -will contain the name of the account, the username and the description | |
201 | -delimited by a \fIseparator\fR string that can be specified with the | |
202 | -\fB-s\fR option. If the option is omitted the separator is " => ". Each | |
203 | -row is one account. | |
204 | -.TP | |
205 | -\fBamngrrename\fR \fIold_account\fR \fInew_account\fR | |
224 | +\fBamngrrename\fR [\fB-h\fR] [\fB-D\fR \fIdbfile\fR] \fIold_account\fR \ | |
225 | +\fInew_account\fR | |
206 | 226 | Rename the account specified by \fIold_account\fR to \fInew_account\fR. |
207 | 227 | .TP |
208 | -\fBamngrsearch\fR [\fB-s\fR \fIseparator\fR] \fIpattern\fR | |
209 | - List accounts where \fIpattern\fR exists in either the account name, the | |
210 | -username or the account description. The output is like the one | |
211 | -described with \fBamngrlist\fR. | |
228 | +\fBamngrsearch\fR [\fB-h\fR] [\fB-D\fR \fIdbfile\fR] \ | |
229 | +[\fB-s\fR \fIseparator\fR] [\fIpattern\fR] | |
230 | + List all accounts where \fIpattern\fR exists in either the account name, the | |
231 | +username or the account description. The output will contain the name of the | |
232 | +account, the username and the description delimited by a \fIseparator\fR | |
233 | +string that can be specified with the \fB-s\fR option. If the option is | |
234 | +omitted the separator is " => ". Each row is one account. | |
235 | + If \fIpattern\fR is omitted all accounts will be listed. | |
212 | 236 | .SH OPTIONS |
213 | 237 | The options are consistent over all sub commands. However not all sub commands |
214 | 238 | use all options and some sub commands take arguments that other get per option. |
215 | 239 | (See \fBDESCRIPTION\fR) |
216 | 240 | .TP |
241 | +.B -h | |
242 | +Write a short usage information. | |
243 | +.TP | |
217 | 244 | .B -u |
218 | 245 | The login username of the credential for the account. |
219 | 246 | .TP |
220 | 247 | .B -p |
221 | 248 | The plain text password of the credential for the account. |
222 | 249 | .TP |
250 | +.B -c | |
251 | +By default this scripts stores the username into the X clipboard whith | |
252 | +\fBambgrgetuser\fR and \fBamngrgetolduser\fR. When \fB-c\fR is given | |
253 | +the username is written to stdout. The password is never written to stdout. | |
254 | +.TP | |
223 | 255 | .B -d |
224 | 256 | The description for the account. |
225 | 257 | .TP |
... | ... | @@ -232,7 +264,7 @@ Select a recipient id for GnuPG encryption to use instead of the one |
232 | 264 | defined in the \fB$AMNGRID\fR environment variable. |
233 | 265 | .TP |
234 | 266 | .B -s |
235 | -The column separator for the \fBamngrlist\fR and \fBamngrsearch\R commands. | |
267 | +The column separator for the \fBamngrlist\fR and \fBamngrsearch\fR commands. | |
236 | 268 | .SH ENVIRONMENT |
237 | 269 | .TP |
238 | 270 | .B AMNGRDB |
... | ... | @@ -246,7 +278,8 @@ both public and private key. Failure to do so will result in not decipherable |
246 | 278 | data. This can be overruled with the \fB-r\fR command line option. |
247 | 279 | .TP |
248 | 280 | .B AMNGRPWLEN |
249 | - The password length to be used when generating new passwords. | |
281 | + The password length to be used when generating new passwords. If not | |
282 | +specified this defaults to 10. | |
250 | 283 | .SH DEPENDENCIES |
251 | 284 | A set of POSIX compliant shell utilities including a POSIX compliant shell |
252 | 285 | as well are needed to run this script. |
... | ... | @@ -274,7 +307,7 @@ comes from the use of foreign key constraints. |
274 | 307 | .IP \[bu] |
275 | 308 | \fBcat\fR |
276 | 309 | .IP \[bu] |
277 | -\fBdnsdomainname\fR | |
310 | +\fBdirname\fR | |
278 | 311 | .IP \[bu] |
279 | 312 | \fBecho\fR |
280 | 313 | .IP \[bu] | ... | ... |
doc/accountmanager.1.bz2
0 → 100644
No preview for this file type
Please
register
or
login
to post a comment