mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
Cehck for expire date overflows.
This commit is contained in:
parent
4fa68f839b
commit
ac5c3fab30
14
doc/DETAILS
14
doc/DETAILS
@ -839,10 +839,16 @@ The format of this file is as follows:
|
|||||||
The 3 parts of a key. Remember to use UTF-8 here.
|
The 3 parts of a key. Remember to use UTF-8 here.
|
||||||
If you don't give any of them, no user ID is created.
|
If you don't give any of them, no user ID is created.
|
||||||
Expire-Date: <iso-date>|(<number>[d|w|m|y])
|
Expire-Date: <iso-date>|(<number>[d|w|m|y])
|
||||||
Set the expiration date for the key (and the subkey). It
|
Set the expiration date for the key (and the subkey). It may
|
||||||
may either be entered in ISO date format (2000-08-15) or as
|
either be entered in ISO date format (2000-08-15) or as number
|
||||||
number of days, weeks, month or years. Without a letter days
|
of days, weeks, month or years. The special notation
|
||||||
are assumed.
|
"seconds=N" is also allowed to directly give an Epoch
|
||||||
|
value. Without a letter days are assumed. Note that there is
|
||||||
|
no check done on the overflow of the type used by OpenPGP for
|
||||||
|
timestamps. Thus you better make sure that the given value
|
||||||
|
make sense. Although OpenPGP works with time intervals, GnuPG
|
||||||
|
uses an absolute value internally and thus the last year we
|
||||||
|
can represent is 2105.
|
||||||
Creation-Date: <iso-date>
|
Creation-Date: <iso-date>
|
||||||
Set the creation date of the key as stored in the key
|
Set the creation date of the key as stored in the key
|
||||||
information and which is also part of the fingerprint
|
information and which is also part of the fingerprint
|
||||||
|
38
g10/keygen.c
38
g10/keygen.c
@ -1789,21 +1789,23 @@ ask_keysize( int algo )
|
|||||||
u32
|
u32
|
||||||
parse_expire_string( const char *string )
|
parse_expire_string( const char *string )
|
||||||
{
|
{
|
||||||
int mult;
|
int mult;
|
||||||
u32 seconds,abs_date=0,curtime = make_timestamp();
|
u32 seconds;
|
||||||
|
u32 abs_date = 0;
|
||||||
if( !*string )
|
u32 curtime = make_timestamp ();
|
||||||
seconds = 0;
|
|
||||||
else if ( !strncmp (string, "seconds=", 8) )
|
if (!*string)
|
||||||
seconds = atoi (string+8);
|
seconds = 0;
|
||||||
else if( (abs_date = scan_isodatestr(string)) && abs_date > curtime )
|
else if (!strncmp (string, "seconds=", 8))
|
||||||
seconds = abs_date - curtime;
|
seconds = atoi (string+8);
|
||||||
else if( (mult=check_valid_days(string)) )
|
else if ((abs_date = scan_isodatestr(string)) && abs_date > curtime)
|
||||||
seconds = atoi(string) * 86400L * mult;
|
seconds = abs_date - curtime;
|
||||||
else
|
else if ((mult = check_valid_days (string)))
|
||||||
seconds=(u32)-1;
|
seconds = atoi (string) * 86400L * mult;
|
||||||
|
else
|
||||||
return seconds;
|
seconds = (u32)(-1);
|
||||||
|
|
||||||
|
return seconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parsean Creation-Date string which is either "1986-04-26" or
|
/* Parsean Creation-Date string which is either "1986-04-26" or
|
||||||
@ -1916,7 +1918,13 @@ ask_expire_interval(int object,const char *def_expire)
|
|||||||
tty_printf (_("Your system can't display dates beyond 2038.\n"
|
tty_printf (_("Your system can't display dates beyond 2038.\n"
|
||||||
"However, it will be correctly handled up to"
|
"However, it will be correctly handled up to"
|
||||||
" 2106.\n"));
|
" 2106.\n"));
|
||||||
|
else
|
||||||
#endif /*SIZEOF_TIME_T*/
|
#endif /*SIZEOF_TIME_T*/
|
||||||
|
if ( (time_t)((unsigned long)(curtime+interval)) < curtime )
|
||||||
|
{
|
||||||
|
tty_printf (_("invalid value\n"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( cpr_enabled() || cpr_get_answer_is_yes("keygen.valid.okay",
|
if( cpr_enabled() || cpr_get_answer_is_yes("keygen.valid.okay",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user