]> the.earth.li Git - onak.git/blobdiff - keydb.c
Add ability to drop overly large packets
[onak.git] / keydb.c
diff --git a/keydb.c b/keydb.c
index 14418fb7a012e86b2de55f494dd941b3654e609e..f92c252667a95eeb23bed61d76f763d69031e6a7 100644 (file)
--- a/keydb.c
+++ b/keydb.c
@@ -13,8 +13,7 @@
  * more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 
 /**
@@ -25,6 +24,7 @@
  *     slower than custom functions however.
  */
 
+#include <stdbool.h>
 #include <stdio.h>
 
 #include "decodekey.h"
 #include "keydb.h"
 #include "keyid.h"
 #include "keystructs.h"
+#include "ll.h"
 #include "mem.h"
 #include "merge.h"
 #include "openpgp.h"
-#include "parsekey.h"
 #include "sendsync.h"
+#include "stats.h"
 
 #ifdef NEED_KEYID2UID
 /**
@@ -87,13 +88,19 @@ struct ll *generic_getkeysigs(struct onak_dbctx *dbctx,
 {
        struct ll *sigs = NULL;
        struct openpgp_signedpacket_list *uids = NULL;
+       struct openpgp_packet_list *cursig;
        struct openpgp_publickey *publickey = NULL;
 
        dbctx->fetch_key_id(dbctx, keyid, &publickey, false);
        
        if (publickey != NULL) {
                for (uids = publickey->uids; uids != NULL; uids = uids->next) {
-                       sigs = keysigs(sigs, uids->sigs);
+                       for (cursig = uids->sigs; cursig != NULL;
+                                       cursig = cursig->next) {
+                               sigs = lladd(sigs,
+                                               createandaddtohash(sig_keyid(
+                                                       cursig->packet)));
+                       }
                }
                if (revoked != NULL) {
                        *revoked = publickey->revoked;
@@ -241,7 +248,6 @@ int generic_update_keys(struct onak_dbctx *dbctx,
                        newkeys++;
                }
                dbctx->endtrans(dbctx);
-               intrans = false;
        }
 
        if (sendsync && keys != NULL) {
@@ -254,13 +260,13 @@ int generic_update_keys(struct onak_dbctx *dbctx,
 
 #ifdef NEED_GET_FP
 static int generic_fetch_key_fp(struct onak_dbctx *dbctx,
-               uint8_t *fp, size_t fpsize,
+               struct openpgp_fingerprint *fingerprint,
                struct openpgp_publickey **publickey, bool intrans)
 {
        uint64_t keyid;
        int i;
 
-       if (fpsize > MAX_FINGERPRINT_LEN) {
+       if (fingerprint->length > MAX_FINGERPRINT_LEN) {
                return 0;
        }
 
@@ -272,8 +278,8 @@ static int generic_fetch_key_fp(struct onak_dbctx *dbctx,
         * if the backend can't do it we're going to fail anyway.
         */
        keyid = 0;
-       for (i = (fpsize - 8); i < fpsize; i++) {
-               keyid = (keyid << 8) + fp[i];
+       for (i = (fingerprint->length - 8); i < fingerprint->length; i++) {
+               keyid = (keyid << 8) + fingerprint->fp[i];
        }
 
        return dbctx->fetch_key_id(dbctx, keyid, publickey, intrans);