]> the.earth.li Git - onak.git/blobdiff - keydb.c
Fix assumption that a signature on a public key is a revocation
[onak.git] / keydb.c
diff --git a/keydb.c b/keydb.c
index 16217823e543b4e0cc827aca6fbb58e660514421..7d3310821b4c97febed997c33db58913a6a2f9f0 100644 (file)
--- a/keydb.c
+++ b/keydb.c
@@ -24,6 +24,7 @@
 #include "mem.h"
 #include "merge.h"
 #include "parsekey.h"
+#include "sendsync.h"
 
 #ifdef NEED_KEYID2UID
 /**
@@ -81,7 +82,7 @@ struct ll *getkeysigs(uint64_t keyid, bool *revoked)
                        sigs = keysigs(sigs, uids->sigs);
                }
                if (revoked != NULL) {
-                       *revoked = (publickey->revocations != NULL);
+                       *revoked = publickey->revoked;
                }
                free_publickey(publickey);
        }
@@ -156,6 +157,7 @@ uint64_t getfullkeyid(uint64_t keyid)
 /**
  *     update_keys - Takes a list of public keys and updates them in the DB.
  *     @keys: The keys to update in the DB.
+ *     @sendsync: Should we send a sync mail to our peers.
  *
  *     Takes a list of keys and adds them to the database, merging them with
  *     the key in the database if it's already present there. The key list is
@@ -163,7 +165,7 @@ uint64_t getfullkeyid(uint64_t keyid)
  *     we had before to what we have now (ie the set of data that was added to
  *     the DB). Returns the number of entirely new keys added.
  */
-int update_keys(struct openpgp_publickey **keys)
+int update_keys(struct openpgp_publickey **keys, bool sendsync)
 {
        struct openpgp_publickey *curkey = NULL;
        struct openpgp_publickey *oldkey = NULL;
@@ -186,7 +188,7 @@ int update_keys(struct openpgp_publickey **keys)
                 */
                if (oldkey != NULL) {
                        merge_keys(oldkey, curkey);
-                       if (curkey->revocations == NULL &&
+                       if (curkey->sigs == NULL &&
                                        curkey->uids == NULL &&
                                        curkey->subkeys == NULL) {
                                if (prev == NULL) {
@@ -215,6 +217,10 @@ int update_keys(struct openpgp_publickey **keys)
                intrans = false;
        }
 
+       if (sendsync && keys != NULL) {
+               sendkeysync(*keys);
+       }
+
        return newkeys;
 }
 #endif /* NEED_UPDATEKEYS */