aboutsummaryrefslogtreecommitdiffstats
path: root/sm/call-dirmngr.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2002-01-14 12:15:30 +0000
committerWerner Koch <[email protected]>2002-01-14 12:15:30 +0000
commit438b2bcb8cade4875887340387f357fb8594f632 (patch)
treeeacbb3d18f5e330dc9a5a7876f0d2c2f88940ddb /sm/call-dirmngr.c
parent* assuan-client.c (_assuan_read_from_server): Skip spaces after (diff)
downloadgnupg-438b2bcb8cade4875887340387f357fb8594f632.tar.gz
gnupg-438b2bcb8cade4875887340387f357fb8594f632.zip
* call-dirmngr.c (inq_certificate): Changed for new interface semantic.
* certlist.c (gpgsm_find_cert): New. DirMngr should now work. Remember that there is a --disable-crl-check option in gpgsm to be used when there is a problem with the dirmngr communication or you want to do faster tests.
Diffstat (limited to 'sm/call-dirmngr.c')
-rw-r--r--sm/call-dirmngr.c58
1 files changed, 42 insertions, 16 deletions
diff --git a/sm/call-dirmngr.c b/sm/call-dirmngr.c
index 4e3de3629..3a1253452 100644
--- a/sm/call-dirmngr.c
+++ b/sm/call-dirmngr.c
@@ -35,16 +35,9 @@
static ASSUAN_CONTEXT dirmngr_ctx = NULL;
-struct cipher_parm_s {
+struct inq_certificate_parm_s {
ASSUAN_CONTEXT ctx;
- const char *ciphertext;
- size_t ciphertextlen;
-};
-
-struct genkey_parm_s {
- ASSUAN_CONTEXT ctx;
- const char *sexp;
- size_t sexplen;
+ KsbaCert cert;
};
@@ -130,16 +123,48 @@ start_dirmngr (void)
static AssuanError
inq_certificate (void *opaque, const char *line)
{
+ struct inq_certificate_parm_s *parm = opaque;
AssuanError rc;
+ const unsigned char *der;
+ size_t derlen;
- if (strncmp (line, "SENDCERT ", 9) || !line[9])
+ if (!(!strncmp (line, "SENDCERT", 8) && (line[8] == ' ' || !line[8])))
{
log_error ("unsupported inquiry `%s'\n", line);
return ASSUAN_Inquire_Unknown;
}
+ line += 8;
+
+ if (!*line)
+ { /* send the current certificate */
+ der = ksba_cert_get_image (parm->cert, &derlen);
+ if (!der)
+ rc = ASSUAN_Inquire_Error;
+ else
+ rc = assuan_send_data (parm->ctx, der, derlen);
+ }
+ else
+ { /* send the given certificate */
+ int err;
+ KsbaCert cert;
+
+ err = gpgsm_find_cert (line, &cert);
+ if (err)
+ {
+ log_error ("certificate not found: %s\n", gnupg_strerror (err));
+ rc = ASSUAN_Inquire_Error;
+ }
+ else
+ {
+ der = ksba_cert_get_image (cert, &derlen);
+ if (!der)
+ rc = ASSUAN_Inquire_Error;
+ else
+ rc = assuan_send_data (parm->ctx, der, derlen);
+ ksba_cert_release (cert);
+ }
+ }
- /* rc = assuan_send_data (parm->ctx, parm->sexp, parm->sexplen);*/
- rc = 0;
return rc;
}
@@ -158,6 +183,7 @@ gpgsm_dirmngr_isvalid (KsbaCert cert)
int rc;
char *certid;
char line[ASSUAN_LINELENGTH];
+ struct inq_certificate_parm_s parm;
rc = start_dirmngr ();
if (rc)
@@ -170,13 +196,13 @@ gpgsm_dirmngr_isvalid (KsbaCert cert)
return seterr (General_Error);
}
+ parm.ctx = dirmngr_ctx;
+ parm.cert = cert;
+
snprintf (line, DIM(line)-1, "ISVALID %s", certid);
line[DIM(line)-1] = 0;
xfree (certid);
- rc = assuan_transact (dirmngr_ctx, line, NULL, NULL, inq_certificate, NULL);
+ rc = assuan_transact (dirmngr_ctx, line, NULL, NULL, inq_certificate, &parm);
return map_assuan_err (rc);
}
-
-
-