summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJameson Rollins <jrollins@finestructure.net>2010-01-10 17:09:10 -0500
committerJameson Rollins <jrollins@finestructure.net>2010-01-10 17:09:10 -0500
commitfd03070ba488f9be9c479734bea9b0f741350221 (patch)
treee219396cbe44c87f795cb76a23fd995cdd17e450
parentb3f25b417bf6557364047ed6dd0ce8ebf7e8b697 (diff)
Add new keys-from-userid subcommand to monkeysphere UI.
This new subcommand calls a new function, keys_from_userid, that outputs to stdout all acceptable keys for a given user ID literal.
-rw-r--r--man/man1/monkeysphere.14
-rw-r--r--packaging/debian/changelog4
-rwxr-xr-xsrc/monkeysphere11
-rw-r--r--src/share/common53
4 files changed, 69 insertions, 3 deletions
diff --git a/man/man1/monkeysphere.1 b/man/man1/monkeysphere.1
index 76eaf8d..459bfcb 100644
--- a/man/man1/monkeysphere.1
+++ b/man/man1/monkeysphere.1
@@ -130,6 +130,10 @@ place of `subkey\-to\-ssh\-agent'.
Output the ssh fingerprint of a key in your gpg keyring. `f' may be
used in place of `fingerprint'.
.TP
+.B keys\-from\-userid USERID
+Output to stdout all acceptable keys for a given user ID literal.
+`u' may be used in place of `keys\-from\-userid'.
+.TP
.B version
Show the monkeysphere version number. `v' may be used in place of
`version'.
diff --git a/packaging/debian/changelog b/packaging/debian/changelog
index 8984114..df28da4 100644
--- a/packaging/debian/changelog
+++ b/packaging/debian/changelog
@@ -3,12 +3,14 @@ monkeysphere (0.27-1~pre1) UNRELEASED; urgency=low
* New upstream release:
- fixed monkeysphere gen-subkey subcommand that was erroneously
creating DSA subkeys due to unannounced change in gpg edit-key UI.
+ - add new monkeysphere keys-from-userid subcommand to output all
+ acceptable keys for a given user ID literal
* updated debian/copyright to match the latest revision of DEP5.
* updated standards version to 3.8.3 (no changes needed)
* updated Depends to require >=1.4.10 due to gpg UI change.
* add cpio to Build-Depends (used in test suite) (Closes: #562444)
- -- Jameson Graef Rollins <jrollins@finestructure.net> Thu, 24 Dec 2009 12:28:21 -0500
+ -- Jameson Graef Rollins <jrollins@finestructure.net> Sun, 10 Jan 2010 16:52:54 -0500
monkeysphere (0.26-1) unstable; urgency=low
diff --git a/src/monkeysphere b/src/monkeysphere
index 9fff77a..0726ff9 100755
--- a/src/monkeysphere
+++ b/src/monkeysphere
@@ -45,12 +45,15 @@ Monkeysphere client tool.
subcommands:
update-known_hosts (k) [HOST]... update known_hosts file
update-authorized_keys (a) update authorized_keys file
- gen-subkey (g) [KEYID] generate an authentication subkey
- --length (-l) BITS key length in bits (2048)
ssh-proxycommand HOST [PORT] monkeysphere ssh ProxyCommand
--no-connect do not make TCP connection to host
subkey-to-ssh-agent (s) store authentication subkey in ssh-agent
sshfpr (f) KEYID output ssh fingerprint of gpg key
+
+ keys-from-userid (u) USERID output valid keys for user id literal
+ gen-subkey (g) [KEYID] generate an authentication subkey
+ --length (-l) BITS key length in bits (2048)
+
version (v) show version number
help (h,?) this help
@@ -268,6 +271,10 @@ case $COMMAND in
gpg_ssh_fingerprint "$@"
;;
+ 'keys-from-userid'|'u')
+ keys_from_userid "$@"
+ ;;
+
'version'|'v')
version
;;
diff --git a/src/share/common b/src/share/common
index 0c06dde..28da3c0 100644
--- a/src/share/common
+++ b/src/share/common
@@ -752,6 +752,59 @@ process_user_id() {
# being processed in the key files over "bad" keys (key flag '1')
}
+# output all valid keys for specified user ID literal
+keys_from_userid() {
+ local userID
+ local noKey=
+ local nKeys
+ local nKeysOK
+ local ok
+ local sshKey
+ local tmpfile
+
+ userID="$1"
+
+ log verbose "processing: $userID"
+
+ nKeys=0
+ nKeysOK=0
+
+ IFS=$'\n'
+ for line in $(process_user_id "${userID}") ; do
+ # note that key was found
+ nKeys=$((nKeys+1))
+
+ ok=$(echo "$line" | cut -d: -f1)
+ sshKey=$(echo "$line" | cut -d: -f2)
+
+ if [ -z "$sshKey" ] ; then
+ continue
+ fi
+
+ # if key OK, output key to stdout
+ if [ "$ok" -eq '0' ] ; then
+ # note that key was found ok
+ nKeysOK=$((nKeysOK+1))
+
+ printf '%s\n' "$sshKey"
+ fi
+ done
+
+ # if at least one key was found...
+ if [ "$nKeys" -gt 0 ] ; then
+ # if ok keys were found, return 0
+ if [ "$nKeysOK" -gt 0 ] ; then
+ return 0
+ # else return 2
+ else
+ return 2
+ fi
+ # if no keys were found, return 1
+ else
+ return 1
+ fi
+}
+
# process a single host in the known_host file
process_host_known_hosts() {
local host