mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-23 10:29:58 +01:00
wks: Publish as binary file.
* tools/gpg-wks-server.c (copy_key_as_binary): New. (check_and_publish): Use new function instead of rename. -- Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
c49c43d7e4
commit
b7b37716b9
@ -698,7 +698,10 @@ process_confirmation_request (estream_t msg)
|
|||||||
}
|
}
|
||||||
address = value;
|
address = value;
|
||||||
/* FIXME: Check that the "address" matches the User ID we want to
|
/* FIXME: Check that the "address" matches the User ID we want to
|
||||||
* publish. */
|
* publish. Also get the "fingerprint" and compare that to our to
|
||||||
|
* be published key. Further we should make sure that we actually
|
||||||
|
* decrypted using that fingerprint (which is a bit problematic if
|
||||||
|
* --read is used). */
|
||||||
|
|
||||||
/* Get the sender. */
|
/* Get the sender. */
|
||||||
if (!((item = nvc_lookup (nvc, "sender:")) && (value = nve_value (item))
|
if (!((item = nvc_lookup (nvc, "sender:")) && (value = nve_value (item))
|
||||||
|
@ -506,6 +506,75 @@ list_key (server_ctx_t ctx, estream_t key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Take the key in KEYFILE and write it to OUTFILE in binary encoding.
|
||||||
|
* If ADDRSPEC is given only matching user IDs are included in the
|
||||||
|
* output. */
|
||||||
|
static gpg_error_t
|
||||||
|
copy_key_as_binary (const char *keyfile, const char *outfile,
|
||||||
|
const char *addrspec)
|
||||||
|
{
|
||||||
|
gpg_error_t err;
|
||||||
|
ccparray_t ccp;
|
||||||
|
const char **argv;
|
||||||
|
char *filterexp = NULL;
|
||||||
|
|
||||||
|
if (addrspec)
|
||||||
|
{
|
||||||
|
filterexp = es_bsprintf ("keep-uid=mbox = %s", addrspec);
|
||||||
|
if (!filterexp)
|
||||||
|
{
|
||||||
|
err = gpg_error_from_syserror ();
|
||||||
|
log_error ("error allocating memory buffer: %s\n",
|
||||||
|
gpg_strerror (err));
|
||||||
|
goto leave;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ccparray_init (&ccp, 0);
|
||||||
|
|
||||||
|
ccparray_put (&ccp, "--no-options");
|
||||||
|
if (!opt.verbose)
|
||||||
|
ccparray_put (&ccp, "--quiet");
|
||||||
|
else if (opt.verbose > 1)
|
||||||
|
ccparray_put (&ccp, "--verbose");
|
||||||
|
ccparray_put (&ccp, "--batch");
|
||||||
|
ccparray_put (&ccp, "--yes");
|
||||||
|
ccparray_put (&ccp, "--always-trust");
|
||||||
|
ccparray_put (&ccp, "--no-keyring");
|
||||||
|
ccparray_put (&ccp, "--output");
|
||||||
|
ccparray_put (&ccp, outfile);
|
||||||
|
ccparray_put (&ccp, "--import-options=import-export");
|
||||||
|
if (filterexp)
|
||||||
|
{
|
||||||
|
ccparray_put (&ccp, "--import-filter");
|
||||||
|
ccparray_put (&ccp, filterexp);
|
||||||
|
}
|
||||||
|
ccparray_put (&ccp, "--import");
|
||||||
|
ccparray_put (&ccp, "--");
|
||||||
|
ccparray_put (&ccp, keyfile);
|
||||||
|
|
||||||
|
ccparray_put (&ccp, NULL);
|
||||||
|
argv = ccparray_get (&ccp, NULL);
|
||||||
|
if (!argv)
|
||||||
|
{
|
||||||
|
err = gpg_error_from_syserror ();
|
||||||
|
goto leave;
|
||||||
|
}
|
||||||
|
err = gnupg_exec_tool_stream (opt.gpg_program, argv, NULL,
|
||||||
|
NULL, NULL, NULL, NULL);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
log_error ("%s failed: %s\n", __func__, gpg_strerror (err));
|
||||||
|
goto leave;
|
||||||
|
}
|
||||||
|
|
||||||
|
leave:
|
||||||
|
xfree (filterexp);
|
||||||
|
xfree (argv);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Take the key in KEYFILE and write it to DANEFILE using the DANE
|
/* Take the key in KEYFILE and write it to DANEFILE using the DANE
|
||||||
* output format. */
|
* output format. */
|
||||||
static gpg_error_t
|
static gpg_error_t
|
||||||
@ -1091,10 +1160,11 @@ check_and_publish (server_ctx_t ctx, const char *address, const char *nonce)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Publish. */
|
/* Publish. */
|
||||||
if (rename (fname, fnewname))
|
err = copy_key_as_binary (fname, fnewname, address);
|
||||||
|
if (err)
|
||||||
{
|
{
|
||||||
err = gpg_error_from_syserror ();
|
err = gpg_error_from_syserror ();
|
||||||
log_error ("renaming '%s' to '%s' failed: %s\n",
|
log_error ("copying '%s' to '%s' failed: %s\n",
|
||||||
fname, fnewname, gpg_strerror (err));
|
fname, fnewname, gpg_strerror (err));
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user