diff options
author | joe <joe@jerkface.net> | 2013-12-02 18:28:28 -0500 |
---|---|---|
committer | joe <joe@jerkface.net> | 2013-12-02 18:28:28 -0500 |
commit | 21a301a761a8f45079e5665a8b1a81d68203f59d (patch) | |
tree | 834e740e7e90586ecd2cbc9b85a9d1deb1e8ce28 | |
parent | 8c601c3b7a832a052f8854471552b0e71ec709e4 (diff) |
Fixed accidental exclusion of origins for UserID packets.
-rw-r--r-- | kiki.hs | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -828,9 +828,10 @@ scanPackets filename (p:ps) = scanl doit (doit (MarkerPacket,MarkerPacket,ret Ma | |||
828 | type OriginFlags = () | 828 | type OriginFlags = () |
829 | originNil = () | 829 | originNil = () |
830 | 830 | ||
831 | type OriginMap = Map.Map FilePath OriginFlags | ||
831 | data MappedPacket = MappedPacket | 832 | data MappedPacket = MappedPacket |
832 | { packet :: Packet | 833 | { packet :: Packet |
833 | , locations :: Map.Map FilePath OriginFlags | 834 | , locations :: OriginMap |
834 | } | 835 | } |
835 | 836 | ||
836 | type TrustMap = Map.Map FilePath Packet | 837 | type TrustMap = Map.Map FilePath Packet |
@@ -841,7 +842,7 @@ type KeyKey = [Char8.ByteString] | |||
841 | data SubKey = SubKey MappedPacket [SigAndTrust] | 842 | data SubKey = SubKey MappedPacket [SigAndTrust] |
842 | data KeyData = KeyData MappedPacket -- main key | 843 | data 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 | ||
847 | type KeyDB = Map.Map KeyKey KeyData | 848 | type 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 | |||
964 | flattenKeys isPublic db = Message $ concatMap flattenTop (prefilter . Map.assocs $ db) | 969 | flattenKeys 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 |