mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
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 <wk@gnupg.org>
This commit is contained in:
parent
a230bac339
commit
f4da1455c7
9 changed files with 1424 additions and 87 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue