mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
agent: Allow to pass a timestamp to genkey and import.
* agent/command.c (cmd_genkey): Add option --timestamp. (cmd_import_key): Ditto. * agent/genkey.c (store_key): Add arg timestamp and change callers. (agent_genkey): Ditto. * agent/findkey.c (write_extended_private_key): Add args timestamp and new key to write a Created line. (agent_write_private_key): Add arg timestamp. (agent_write_shadow_key): Ditto. agent/protect-tool.c (agent_write_private_key): Ditto as dummy arg. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
6bcb609e1b
commit
0da923a124
8 changed files with 109 additions and 38 deletions
|
@ -82,9 +82,10 @@ linefeed_to_percent0A (const char *string)
|
|||
|
||||
/* Note: Ownership of FNAME and FP are moved to this function. */
|
||||
static gpg_error_t
|
||||
write_extended_private_key (char *fname, estream_t fp, int update,
|
||||
write_extended_private_key (char *fname, estream_t fp, int update, int newkey,
|
||||
const void *buf, size_t len,
|
||||
const char *serialno, const char *keyref)
|
||||
const char *serialno, const char *keyref,
|
||||
time_t timestamp)
|
||||
{
|
||||
gpg_error_t err;
|
||||
nvc_t pk = NULL;
|
||||
|
@ -153,6 +154,19 @@ write_extended_private_key (char *fname, estream_t fp, int update,
|
|||
}
|
||||
}
|
||||
|
||||
/* If a timestamp has been supplied and the key is new write a
|
||||
* creation timestamp. (We douple check that there is no Created
|
||||
* item yet.)*/
|
||||
if (timestamp && newkey && !nvc_lookup (pk, "Created:"))
|
||||
{
|
||||
gnupg_isotime_t timebuf;
|
||||
|
||||
epoch2isotime (timebuf, timestamp);
|
||||
err = nvc_add (pk, "Created:", timebuf);
|
||||
if (err)
|
||||
goto leave;
|
||||
}
|
||||
|
||||
|
||||
err = es_fseek (fp, 0, SEEK_SET);
|
||||
if (err)
|
||||
|
@ -199,12 +213,15 @@ write_extended_private_key (char *fname, estream_t fp, int update,
|
|||
|
||||
/* Write an S-expression formatted key to our key storage. With FORCE
|
||||
* passed as true an existing key with the given GRIP will get
|
||||
* overwritten. If SERIALNO and KEYREF are given a Token line is added to
|
||||
* the key if the extended format is used. */
|
||||
* overwritten. If SERIALNO and KEYREF are given a Token line is
|
||||
* added to the key if the extended format is used. If TIMESTAMP is
|
||||
* not zero and the key doies not yet exists it will be recorded as
|
||||
* creation date. */
|
||||
int
|
||||
agent_write_private_key (const unsigned char *grip,
|
||||
const void *buffer, size_t length, int force,
|
||||
const char *serialno, const char *keyref)
|
||||
const char *serialno, const char *keyref,
|
||||
time_t timestamp)
|
||||
{
|
||||
char *fname;
|
||||
estream_t fp;
|
||||
|
@ -272,20 +289,20 @@ agent_write_private_key (const unsigned char *grip,
|
|||
if (first != '(')
|
||||
{
|
||||
/* Key is already in the extended format. */
|
||||
return write_extended_private_key (fname, fp, 1, buffer, length,
|
||||
serialno, keyref);
|
||||
return write_extended_private_key (fname, fp, 1, 0, buffer, length,
|
||||
serialno, keyref, timestamp);
|
||||
}
|
||||
if (first == '(' && opt.enable_extended_key_format)
|
||||
{
|
||||
/* Key is in the old format - but we want the extended format. */
|
||||
return write_extended_private_key (fname, fp, 0, buffer, length,
|
||||
serialno, keyref);
|
||||
return write_extended_private_key (fname, fp, 0, 0, buffer, length,
|
||||
serialno, keyref, timestamp);
|
||||
}
|
||||
}
|
||||
|
||||
if (opt.enable_extended_key_format)
|
||||
return write_extended_private_key (fname, fp, 0, buffer, length,
|
||||
serialno, keyref);
|
||||
return write_extended_private_key (fname, fp, 0, 1, buffer, length,
|
||||
serialno, keyref, timestamp);
|
||||
|
||||
if (es_fwrite (buffer, length, 1, fp) != 1)
|
||||
{
|
||||
|
@ -1552,7 +1569,7 @@ agent_write_shadow_key (const unsigned char *grip,
|
|||
}
|
||||
|
||||
len = gcry_sexp_canon_len (shdkey, 0, NULL, NULL);
|
||||
err = agent_write_private_key (grip, shdkey, len, force, serialno, keyid);
|
||||
err = agent_write_private_key (grip, shdkey, len, force, serialno, keyid, 0);
|
||||
xfree (shdkey);
|
||||
if (err)
|
||||
log_error ("error writing key: %s\n", gpg_strerror (err));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue