summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2013-12-02 18:28:28 -0500
committerjoe <joe@jerkface.net>2013-12-02 18:28:28 -0500
commit21a301a761a8f45079e5665a8b1a81d68203f59d (patch)
tree834e740e7e90586ecd2cbc9b85a9d1deb1e8ce28
parent8c601c3b7a832a052f8854471552b0e71ec709e4 (diff)
Fixed accidental exclusion of origins for UserID packets.
-rw-r--r--kiki.hs19
1 files 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
828type OriginFlags = () 828type OriginFlags = ()
829originNil = () 829originNil = ()
830 830
831type OriginMap = Map.Map FilePath OriginFlags
831data MappedPacket = MappedPacket 832data MappedPacket = MappedPacket
832 { packet :: Packet 833 { packet :: Packet
833 , locations :: Map.Map FilePath OriginFlags 834 , locations :: OriginMap
834 } 835 }
835 836
836type TrustMap = Map.Map FilePath Packet 837type TrustMap = Map.Map FilePath Packet
@@ -841,7 +842,7 @@ type KeyKey = [Char8.ByteString]
841data SubKey = SubKey MappedPacket [SigAndTrust] 842data SubKey = SubKey MappedPacket [SigAndTrust]
842data KeyData = KeyData MappedPacket -- main key 843data KeyData = KeyData MappedPacket -- main key
843 [SigAndTrust] -- sigs on main key 844 [SigAndTrust] -- sigs on main key
844 (Map.Map String [SigAndTrust]) -- uids 845 ((Map.Map String [SigAndTrust]),OriginMap) -- uids
845 (Map.Map KeyKey SubKey) -- subkeys 846 (Map.Map KeyKey SubKey) -- subkeys
846 847
847type KeyDB = Map.Map KeyKey KeyData 848type KeyDB = Map.Map KeyKey KeyData
@@ -878,13 +879,14 @@ merge db filename (Message ps) = foldl mergeit db qs
878 qs = scanPackets filename ps 879 qs = scanPackets filename ps
879 asMapped p = MappedPacket p (Map.singleton filename originNil) 880 asMapped p = MappedPacket p (Map.singleton filename originNil)
880 asSigAndTrust (p,tm) = (asMapped p,tm) 881 asSigAndTrust (p,tm) = (asMapped p,tm)
882 emptyUids = (Map.empty,Map.empty)
881 -- mergeit db (_,_,TrustPacket {}) = db -- Filter TrustPackets 883 -- mergeit db (_,_,TrustPacket {}) = db -- Filter TrustPackets
882 mergeit :: KeyDB -> (Packet,Packet,(Packet,Map.Map FilePath Packet)) -> KeyDB 884 mergeit :: KeyDB -> (Packet,Packet,(Packet,Map.Map FilePath Packet)) -> KeyDB
883 mergeit db (top,sub,ptt@(p,trustmap)) | isKey top = Map.alter update (keykey top) db 885 mergeit db (top,sub,ptt@(p,trustmap)) | isKey top = Map.alter update (keykey top) db
884 where 886 where
885 update v | isKey p && not (is_subkey p) 887 update v | isKey p && not (is_subkey p)
886 = case v of 888 = case v of
887 Nothing -> Just $ KeyData (asMapped p) [] Map.empty Map.empty 889 Nothing -> Just $ KeyData (asMapped p) [] emptyUids Map.empty
888 Just (KeyData key sigs uids subkeys) | keykey (packet key) == keykey p 890 Just (KeyData key sigs uids subkeys) | keykey (packet key) == keykey p
889 -> Just $ KeyData ( MappedPacket (minimumBy keycomp [packet key,p]) 891 -> Just $ KeyData ( MappedPacket (minimumBy keycomp [packet key,p])
890 (Map.insert filename originNil (locations key)) ) 892 (Map.insert filename originNil (locations key)) )
@@ -895,14 +897,17 @@ merge db filename (Message ps) = foldl mergeit db qs
895 ,show (fingerprint top, fingerprint p)] 897 ,show (fingerprint top, fingerprint p)]
896 update (Just (KeyData key sigs uids subkeys)) | isKey p && is_subkey p 898 update (Just (KeyData key sigs uids subkeys)) | isKey p && is_subkey p
897 = Just $ KeyData key sigs uids (Map.alter (mergeSubkey p) (keykey p) subkeys) 899 = Just $ KeyData key sigs uids (Map.alter (mergeSubkey p) (keykey p) subkeys)
898 update (Just (KeyData key sigs uids subkeys)) | isUserID p 900 update (Just (KeyData key sigs (uids,locs) subkeys)) | isUserID p
899 = Just $ KeyData key sigs (Map.alter (mergeUid ptt) (uidkey p) uids) subkeys 901 = Just $ KeyData key sigs ( Map.alter (mergeUid ptt) (uidkey p) uids
902 , Map.insert filename originNil locs )
903 subkeys
900 update (Just (KeyData key sigs uids subkeys)) 904 update (Just (KeyData key sigs uids subkeys))
901 = case sub of 905 = case sub of
902 MarkerPacket -> Just $ KeyData key (mergeSig ptt sigs) uids subkeys 906 MarkerPacket -> Just $ KeyData key (mergeSig ptt sigs) uids subkeys
903 UserIDPacket {} -> Just $ KeyData key 907 UserIDPacket {} -> Just $ KeyData key
904 sigs 908 sigs
905 (Map.alter (mergeUidSig ptt) (uidkey sub) uids) 909 (Map.alter (mergeUidSig ptt) (uidkey sub) (fst uids)
910 ,Map.insert filename originNil (snd uids))
906 subkeys 911 subkeys
907 _ | isKey sub -> Just $ KeyData key 912 _ | isKey sub -> Just $ KeyData key
908 sigs 913 sigs
@@ -964,7 +969,7 @@ flattenKeys :: Bool -> KeyDB -> Message
964flattenKeys isPublic db = Message $ concatMap flattenTop (prefilter . Map.assocs $ db) 969flattenKeys isPublic db = Message $ concatMap flattenTop (prefilter . Map.assocs $ db)
965 where 970 where
966 flattenTop (_,(KeyData key sigs uids subkeys)) = 971 flattenTop (_,(KeyData key sigs uids subkeys)) =
967 unk key : ( concatMap flattenUid (Map.assocs uids) 972 unk key : ( concatMap flattenUid (Map.assocs (fst uids))
968 ++ concatMap flattenSub (Map.assocs subkeys)) 973 ++ concatMap flattenSub (Map.assocs subkeys))
969 974
970 flattenUid (str,sigs) = UserIDPacket str : concatMap unsig sigs 975 flattenUid (str,sigs) = UserIDPacket str : concatMap unsig sigs