Add new keys-from-userid subcommand to monkeysphere UI.
authorJameson Rollins <jrollins@finestructure.net>
Sun, 10 Jan 2010 22:09:10 +0000 (17:09 -0500)
committerJameson Rollins <jrollins@finestructure.net>
Sun, 10 Jan 2010 22:09:10 +0000 (17:09 -0500)
This new subcommand calls a new function, keys_from_userid, that
outputs to stdout all acceptable keys for a given user ID literal.

man/man1/monkeysphere.1
packaging/debian/changelog
src/monkeysphere
src/share/common

index 76eaf8dbd508e66b946cd8e8b66726c90e5d18da..459bfcb83da681783d7932b884dd71c026d1576e 100644 (file)
@@ -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'.
index 898411499f5fd83fb4814424abe089f5a3fdd303..df28da473339878e70d1211a4834d978b07abd7d 100644 (file)
@@ -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
 
index 9fff77a968567e275991ccd9e2549d96612aa4d0..0726ff94a61fdd492f6475978fec41bee711ba80 100755 (executable)
@@ -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
        ;;
index 0c06dde5b9e846e46aae3a216323da19bd7f7b91..28da3c09925fc7ccb7487a05c7c5c0e8280fa456 100644 (file)
@@ -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