aboutsummaryrefslogtreecommitdiffstats
path: root/kbx/backend-support.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2020-01-02 13:21:12 +0000
committerWerner Koch <[email protected]>2020-01-02 13:21:12 +0000
commitf4da1455c7ab858ea9007d0813774c6d04cd4576 (patch)
tree0380bf55daa9295f2a650875a3eb7bde6b8072da /kbx/backend-support.c
parentUpdate wk's signing key (diff)
downloadgnupg-f4da1455c7ab858ea9007d0813774c6d04cd4576.tar.gz
gnupg-f4da1455c7ab858ea9007d0813774c6d04cd4576.zip
kbx: Initial support for an SQLite backend
* kbx/backend-sqlite.c: New. * kbx/Makefile.am (keyboxd_SOURCES): Add it. (keyboxd_CFLAGS, keyboxd_LDADD): Add SQLite flags. * kbx/backend.h (enum database_types): Add DB_TYPE_SQLITE. (be_sqlite_local_t): New typedef. (struct db_request_part_s): Add field besqlite. * kbx/backend-support.c (strdbtype): Add string for DB_TYPE_SQLITE. (be_generic_release_backend): Support SQLite. (be_release_request): Ditto. (be_find_request_part): Ditto. (is_x509_blob): Rename to ... (be_is_x509_blob): this and make global. * kbx/frontend.c (kbxd_set_database): Detect ".db" suffix and use that for SQLite. (kbxd_search): Support SQLite (kbxd_store): Ditto. (kbxd_delete): Ditto. * kbx/frontend.h (kbxd_store_modes): Move to ... * kbx/keyboxd.h (enum kbxd_store_modes): here. * kbx/keyboxd.c (main): USe pubring.db for now. This is a temporary hack. * kbx/backend-kbx.c (be_kbx_delete): Remove unused var cert. -- Take care: This is not finished and in particular filling the database takes quite long. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'kbx/backend-support.c')
-rw-r--r--kbx/backend-support.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/kbx/backend-support.c b/kbx/backend-support.c
index f1e80b0c3..c8965da9a 100644
--- a/kbx/backend-support.c
+++ b/kbx/backend-support.c
@@ -51,6 +51,7 @@ strdbtype (enum database_types t)
case DB_TYPE_NONE: return "none";
case DB_TYPE_CACHE:return "cache";
case DB_TYPE_KBX: return "keybox";
+ case DB_TYPE_SQLITE: return "sqlite";
}
return "?";
}
@@ -87,6 +88,9 @@ be_generic_release_backend (ctrl_t ctrl, backend_handle_t hd)
case DB_TYPE_KBX:
be_kbx_release_resource (ctrl, hd);
break;
+ case DB_TYPE_SQLITE:
+ be_sqlite_release_resource (ctrl, hd);
+ break;
default:
log_error ("%s: faulty backend handle of type %d given\n",
__func__, hd->db_type);
@@ -107,6 +111,7 @@ be_release_request (db_request_t req)
{
partn = part->next;
be_kbx_release_kbx_hd (part->kbx_hd);
+ be_sqlite_release_local (part->besqlite);
xfree (part);
}
}
@@ -140,6 +145,15 @@ be_find_request_part (backend_handle_t backend_hd, db_request_t request,
return err;
}
}
+ else if (backend_hd->db_type == DB_TYPE_SQLITE)
+ {
+ err = be_sqlite_init_local (backend_hd, part);
+ if (err)
+ {
+ xfree (part);
+ return err;
+ }
+ }
part->next = request->part;
request->part = part;
}
@@ -174,8 +188,8 @@ be_return_pubkey (ctrl_t ctrl, const void *buffer, size_t buflen,
/* Return true if (BLOB/BLOBLEN) seems to be an X509 certificate. */
-static int
-is_x509_blob (const unsigned char *blob, size_t bloblen)
+int
+be_is_x509_blob (const unsigned char *blob, size_t bloblen)
{
const unsigned char *p;
size_t n, objlen, hdrlen;
@@ -237,7 +251,7 @@ be_ubid_from_blob (const void *blob, size_t bloblen,
{
gpg_error_t err;
- if (is_x509_blob (blob, bloblen))
+ if (be_is_x509_blob (blob, bloblen))
{
/* Although libksba has a dedicated function to compute the
* fingerprint we compute it here directly because we know that