From 21a301a761a8f45079e5665a8b1a81d68203f59d Mon Sep 17 00:00:00 2001 From: joe Date: Mon, 2 Dec 2013 18:28:28 -0500 Subject: Fixed accidental exclusion of origins for UserID packets. --- kiki.hs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/kiki.hs b/kiki.hs index 2ac6450..7f55426 100644 --- a/kiki.hs +++ b/kiki.hs @@ -828,9 +828,10 @@ scanPackets filename (p:ps) = scanl doit (doit (MarkerPacket,MarkerPacket,ret Ma type OriginFlags = () originNil = () +type OriginMap = Map.Map FilePath OriginFlags data MappedPacket = MappedPacket { packet :: Packet - , locations :: Map.Map FilePath OriginFlags + , locations :: OriginMap } type TrustMap = Map.Map FilePath Packet @@ -841,7 +842,7 @@ type KeyKey = [Char8.ByteString] data SubKey = SubKey MappedPacket [SigAndTrust] data KeyData = KeyData MappedPacket -- main key [SigAndTrust] -- sigs on main key - (Map.Map String [SigAndTrust]) -- uids + ((Map.Map String [SigAndTrust]),OriginMap) -- uids (Map.Map KeyKey SubKey) -- subkeys type KeyDB = Map.Map KeyKey KeyData @@ -878,13 +879,14 @@ merge db filename (Message ps) = foldl mergeit db qs qs = scanPackets filename ps asMapped p = MappedPacket p (Map.singleton filename originNil) asSigAndTrust (p,tm) = (asMapped p,tm) + emptyUids = (Map.empty,Map.empty) -- mergeit db (_,_,TrustPacket {}) = db -- Filter TrustPackets mergeit :: KeyDB -> (Packet,Packet,(Packet,Map.Map FilePath Packet)) -> KeyDB mergeit db (top,sub,ptt@(p,trustmap)) | isKey top = Map.alter update (keykey top) db where update v | isKey p && not (is_subkey p) = case v of - Nothing -> Just $ KeyData (asMapped p) [] Map.empty Map.empty + Nothing -> Just $ KeyData (asMapped p) [] emptyUids Map.empty Just (KeyData key sigs uids subkeys) | keykey (packet key) == keykey p -> Just $ KeyData ( MappedPacket (minimumBy keycomp [packet key,p]) (Map.insert filename originNil (locations key)) ) @@ -895,14 +897,17 @@ merge db filename (Message ps) = foldl mergeit db qs ,show (fingerprint top, fingerprint p)] update (Just (KeyData key sigs uids subkeys)) | isKey p && is_subkey p = Just $ KeyData key sigs uids (Map.alter (mergeSubkey p) (keykey p) subkeys) - update (Just (KeyData key sigs uids subkeys)) | isUserID p - = Just $ KeyData key sigs (Map.alter (mergeUid ptt) (uidkey p) uids) subkeys + update (Just (KeyData key sigs (uids,locs) subkeys)) | isUserID p + = Just $ KeyData key sigs ( Map.alter (mergeUid ptt) (uidkey p) uids + , Map.insert filename originNil locs ) + subkeys update (Just (KeyData key sigs uids subkeys)) = case sub of MarkerPacket -> Just $ KeyData key (mergeSig ptt sigs) uids subkeys UserIDPacket {} -> Just $ KeyData key sigs - (Map.alter (mergeUidSig ptt) (uidkey sub) uids) + (Map.alter (mergeUidSig ptt) (uidkey sub) (fst uids) + ,Map.insert filename originNil (snd uids)) subkeys _ | isKey sub -> Just $ KeyData key sigs @@ -964,7 +969,7 @@ flattenKeys :: Bool -> KeyDB -> Message flattenKeys isPublic db = Message $ concatMap flattenTop (prefilter . Map.assocs $ db) where flattenTop (_,(KeyData key sigs uids subkeys)) = - unk key : ( concatMap flattenUid (Map.assocs uids) + unk key : ( concatMap flattenUid (Map.assocs (fst uids)) ++ concatMap flattenSub (Map.assocs subkeys)) flattenUid (str,sigs) = UserIDPacket str : concatMap unsig sigs -- cgit v1.2.3