aboutsummaryrefslogtreecommitdiffstats
path: root/g10
diff options
context:
space:
mode:
Diffstat (limited to 'g10')
-rw-r--r--g10/call-agent.c1
-rw-r--r--g10/card-util.c1
-rw-r--r--g10/gpg.c2
-rw-r--r--g10/import.c14
-rw-r--r--g10/keygen.c45
-rw-r--r--g10/trustdb.c23
6 files changed, 75 insertions, 11 deletions
diff --git a/g10/call-agent.c b/g10/call-agent.c
index d6e4575c3..cb7053396 100644
--- a/g10/call-agent.c
+++ b/g10/call-agent.c
@@ -130,6 +130,7 @@ status_sc_op_failure (int rc)
write_status_text (STATUS_SC_OP_FAILURE, "1");
break;
case GPG_ERR_BAD_PIN:
+ case GPG_ERR_BAD_RESET_CODE:
write_status_text (STATUS_SC_OP_FAILURE, "2");
break;
default:
diff --git a/g10/card-util.c b/g10/card-util.c
index 631f48d9d..088ea824a 100644
--- a/g10/card-util.c
+++ b/g10/card-util.c
@@ -56,6 +56,7 @@ write_sc_op_status (gpg_error_t err)
write_status_text (STATUS_SC_OP_FAILURE, "1");
break;
case GPG_ERR_BAD_PIN:
+ case GPG_ERR_BAD_RESET_CODE:
write_status_text (STATUS_SC_OP_FAILURE, "2");
break;
default:
diff --git a/g10/gpg.c b/g10/gpg.c
index ec6af0eb9..96a0c345c 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -3486,7 +3486,7 @@ main (int argc, char **argv)
break;
case oUtf8Strings: utf8_strings = 1; break;
case oNoUtf8Strings:
-#ifdef HAVE_W32_SYSTEM
+#ifndef HAVE_W32_SYSTEM
utf8_strings = 0;
#endif
break;
diff --git a/g10/import.c b/g10/import.c
index d84a083cc..c1e76c3f0 100644
--- a/g10/import.c
+++ b/g10/import.c
@@ -1509,6 +1509,20 @@ impex_filter_getval (void *cookie, const char *propname)
{
result = dateonlystr_from_sig (sig);
}
+ else if (!strcmp (propname, "sig_expires"))
+ {
+ snprintf (numbuf, sizeof numbuf, "%lu", (ulong)sig->expiredate);
+ result = numbuf;
+ }
+ else if (!strcmp (propname, "sig_expires_d"))
+ {
+ static char exdatestr[MK_DATESTR_SIZE];
+
+ if (sig->expiredate)
+ result = mk_datestr (exdatestr, sizeof exdatestr, sig->expiredate);
+ else
+ result = "";
+ }
else if (!strcmp (propname, "sig_algo"))
{
snprintf (numbuf, sizeof numbuf, "%d", sig->pubkey_algo);
diff --git a/g10/keygen.c b/g10/keygen.c
index 1605bff89..9b0113c5a 100644
--- a/g10/keygen.c
+++ b/g10/keygen.c
@@ -2748,6 +2748,7 @@ parse_expire_string_with_ct (const char *string, u32 creation_time)
u32 seconds;
u32 abs_date = 0;
time_t tt;
+ uint64_t tmp64;
u32 curtime;
if (creation_time == (u32)-1)
@@ -2759,14 +2760,26 @@ parse_expire_string_with_ct (const char *string, u32 creation_time)
|| !strcmp (string, "never") || !strcmp (string, "-"))
seconds = 0;
else if (!strncmp (string, "seconds=", 8))
- seconds = atoi (string+8);
+ seconds = scan_secondsstr (string+8);
else if ((abs_date = scan_isodatestr(string))
&& (abs_date+86400/2) > curtime)
seconds = (abs_date+86400/2) - curtime;
- else if ((tt = isotime2epoch (string)) != (time_t)(-1))
- seconds = (u32)tt - curtime;
+ else if ((tt = isotime2epoch_u64 (string)) != (uint64_t)(-1))
+ {
+ tmp64 = tt - curtime;
+ if (tmp64 >= (u32)(-1))
+ seconds = (u32)(-1) - 1; /* cap value. */
+ else
+ seconds = (u32)tmp64;
+ }
else if ((mult = check_valid_days (string)))
- seconds = atoi (string) * 86400L * mult;
+ {
+ tmp64 = scan_secondsstr (string) * 86400L * mult;
+ if (tmp64 >= (u32)(-1))
+ seconds = (u32)(-1) - 1; /* cap value. */
+ else
+ seconds = (u32)tmp64;
+ }
else
seconds = (u32)(-1);
@@ -2790,11 +2803,16 @@ parse_creation_string (const char *string)
if (!*string)
seconds = 0;
else if ( !strncmp (string, "seconds=", 8) )
- seconds = atoi (string+8);
+ seconds = scan_secondsstr (string+8);
else if ( !(seconds = scan_isodatestr (string)))
{
- time_t tmp = isotime2epoch (string);
- seconds = (tmp == (time_t)(-1))? 0 : tmp;
+ uint64_t tmp = isotime2epoch_u64 (string);
+ if (tmp == (uint64_t)(-1))
+ seconds = 0;
+ else if (tmp > (u32)(-1))
+ seconds = 0;
+ else
+ seconds = tmp;
}
return seconds;
}
@@ -5395,17 +5413,26 @@ card_store_key_with_backup (ctrl_t ctrl, PKT_public_key *sub_psk,
{
ecdh_param_str = ecdh_param_str_from_pk (sk);
if (!ecdh_param_str)
- return gpg_error_from_syserror ();
+ {
+ free_public_key (sk);
+ return gpg_error_from_syserror ();
+ }
}
err = hexkeygrip_from_pk (sk, &hexgrip);
if (err)
- goto leave;
+ {
+ xfree (ecdh_param_str);
+ free_public_key (sk);
+ goto leave;
+ }
memset(&info, 0, sizeof (info));
rc = agent_scd_getattr ("SERIALNO", &info);
if (rc)
{
+ xfree (ecdh_param_str);
+ free_public_key (sk);
err = (gpg_error_t)rc;
goto leave;
}
diff --git a/g10/trustdb.c b/g10/trustdb.c
index 051a534f9..e846abe82 100644
--- a/g10/trustdb.c
+++ b/g10/trustdb.c
@@ -730,7 +730,7 @@ tdb_check_or_update (ctrl_t ctrl)
if (opt.interactive)
update_trustdb (ctrl);
else if (!opt.no_auto_check_trustdb)
- check_trustdb (ctrl);
+ check_trustdb (ctrl);
}
}
@@ -983,6 +983,7 @@ update_min_ownertrust (ctrl_t ctrl, u32 *kid, unsigned int new_trust)
/*
* Clear the ownertrust and min_ownertrust values.
+ * Also schedule a revalidation if a stale validity record exists.
*
* Return: True if a change actually happened.
*/
@@ -1016,6 +1017,26 @@ tdb_clear_ownertrusts (ctrl_t ctrl, PKT_public_key *pk)
do_sync ();
return 1;
}
+ else
+ {
+ /* Check whether we have a stale RECTYPE_VALID for that key
+ * and if its validity ist set, schedule a revalidation. */
+ ulong recno = rec.r.trust.validlist;
+ while (recno)
+ {
+ read_record (recno, &rec, RECTYPE_VALID);
+ if (rec.r.valid.validity)
+ break;
+ recno = rec.r.valid.next;
+ }
+ if (recno)
+ {
+ if (DBG_TRUST)
+ log_debug ("stale validity value detected"
+ " - scheduling check\n");
+ tdb_revalidation_mark (ctrl);
+ }
+ }
}
else if (gpg_err_code (err) != GPG_ERR_NOT_FOUND)
{