diff --git a/sksclient.ml b/sksclient.ml --- a/sksclient.ml +++ b/sksclient.ml @@ -20,15 +20,17 @@ open MoreLabels open Printf open Common open DbMessages - + exception Misc_error of string exception No_results of string -let key_id = - if Array.length Sys.argv = 2 then - Sys.argv.(1) +let key_id_list = + let len = Array.length Sys.argv in + if len > 1 then + let params = Array.sub Sys.argv 1 (len-1) in + Array.to_list params else - "" + [] let settings = { Keydb.withtxn = !Settings.transactions; @@ -36,9 +38,9 @@ let settings = { Keydb.pagesize = !Settings.pagesize; Keydb.dbdir = Lazy.force Settings.dbdir; Keydb.dumpdir = Lazy.force Settings.dumpdir; - } + } module Keydb = Keydb.Safe - + let get_keys_by_keyid keyid = let keyid_length = String.length keyid in let short_keyid = String.sub ~pos:(keyid_length - 4) ~len:4 keyid in @@ -47,7 +49,7 @@ let get_keys_by_keyid keyid = | 4 -> (* 32-bit keyid. No further filtering required. *) keys - | 8 -> (* 64-bit keyid *) + | 8 -> (* 64-bit keyid *) List.filter keys ~f:(fun key -> keyid = (Fingerprint.from_key key).Fingerprint.keyid || (** Return keys i& subkeys with matching long keyID *) @@ -55,19 +57,29 @@ let get_keys_by_keyid keyid = List.exists (fun x -> x = keyid) subkeyids) | _ -> raise (Misc_error "Unknown keyid type") - -let () = - set_logfile "sksclient"; - Keydb.open_dbs settings; - let keys = get_keys_by_keyid (KeyHash.dehexify key_id) in + +let dump_one_key keyid = + begin + let deprefixed = ( + if String.sub keyid 0 2 = "0x" then + String.sub keyid 2 (String.length keyid - 2) + else keyid + ) in + let keys = get_keys_by_keyid (KeyHash.dehexify deprefixed) in let count = List.length keys in if count < 1 then - exit 2; - let aakeys = + exit 2; + let aakeys = match keys with | [] -> "" | _ -> let keystr = Key.to_string_multiple keys in Armor.encode_pubkey_string keystr in - printf "%s\n" aakeys; + printf "%s\n" aakeys; + end + +let () = + set_logfile "sksclient"; + Keydb.open_dbs settings; + List.iter dump_one_key key_id_list; Keydb.close_dbs ();