From b9c338d14e8d95164dfe3719abb4cf8064e22bd2 Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 11 Apr 2014 22:02:48 -0400 Subject: process secring/pubring separately from others --- kiki.hs | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'kiki.hs') diff --git a/kiki.hs b/kiki.hs index 27f49f3..414d185 100644 --- a/kiki.hs +++ b/kiki.hs @@ -1305,24 +1305,34 @@ writeOutKeyrings lkmap db = do -- warn $ "writing "++f L.writeFile f (encode m) -cross_merge doDecrypt homespec keyrings_ wallets f = do - (homedir,secring,pubring,grip0) <- getHomeDir homespec - let keyrings = secring:pubring:keyrings_ +cross_merge doDecrypt homespec keyrings wallets f = do + let readp n = fmap (n,) (readPacketsFromFile n) + readw wk n = fmap (n,) (readPacketsFromWallet wk n) - let relock = do + let relock keyrings = do (fsns,failed_locks) <- lockFiles keyrings (wsns,failed_wlocks) <- lockFiles wallets forM_ (failed_locks++failed_wlocks) $ \f -> warn $ "Failed to lock: " ++ f return (fsns,wsns,failed_locks,failed_wlocks) sec_n:_ = keyrings - (fsns,wsns,failed_locks,failed_wlocks) <- relock + + (homedir,secring,pubring,grip0) <- getHomeDir homespec + + (fsns0,wsns0,failed_locks0,failed_wlocks0) <- relock [secring,pubring] + db00 <- do + ms0 <- mapM readp (map snd fsns0++failed_locks0) + return $ foldl' (uncurry . merge) Map.empty ms0 + + (fsns,wsns,failed_locks,failed_wlocks) <- relock keyrings + wsns <- return $ wsns0 ++ wsns + failed_locks <- return $ failed_locks0 ++ failed_locks + failed_wlocks <- return $ failed_wlocks0 ++ failed_wlocks + -- let (lks,fs) = unzip fsns -- forM_ fs $ \f -> warn $ "locked: " ++ f - let readp n = fmap (n,) (readPacketsFromFile n) - readw wk n = fmap (n,) (readPacketsFromWallet wk n) let pass n (fsns,failed_locks) = do ms <- mapM readp (map snd fsns++failed_locks) - let db0 = foldl' (uncurry . merge) Map.empty ms + let db0 = foldl' (uncurry . merge) db00 ms fstkey = listToMaybe $ mapMaybe isSecringKey ms where isSecringKey (fn,Message ps) | fn==sec_n = listToMaybe ps -- cgit v1.2.3