Commit 17b5326b authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

PR: 2013

Submitted by: steve@openssl.org

Include a flag ASN1_STRING_FLAG_MSTRING when a multi string type is created.
This makes it possible to tell if the underlying type is UTCTime,
GeneralizedTime or Time when the structure is reused and X509_time_adj_ex()
can handle each case in an appropriate manner.

Add error checking to CRL generation in ca utility when nextUpdate is being
set.
parent 3d9b105f
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1403,7 +1403,12 @@ bad:
		if (!tmptm) goto err;
		X509_gmtime_adj(tmptm,0);
		X509_CRL_set_lastUpdate(crl, tmptm);	
		X509_time_adj_ex(tmptm, crldays, crlhours*60*60 + crlsec, NULL);
		if (!X509_time_adj_ex(tmptm, crldays, crlhours*60*60 + crlsec,
			NULL))
			{
			BIO_puts(bio_err, "error setting CRL nextUpdate\n");
			goto err;
			}
		X509_CRL_set_nextUpdate(crl, tmptm);	

		ASN1_TIME_free(tmptm);
+4 −0
Original line number Diff line number Diff line
@@ -230,6 +230,10 @@ typedef struct asn1_object_st
 */

#define ASN1_STRING_FLAG_CONT 0x020 
/* This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING
 * type.
 */
#define ASN1_STRING_FLAG_MSTRING 0x040 
/* This is the base type that holds just about everything :-) */
typedef struct asn1_string_st
	{
+5 −1
Original line number Diff line number Diff line
@@ -325,6 +325,7 @@ static void asn1_template_clear(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt)
int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
	{
	ASN1_TYPE *typ;
	ASN1_STRING *str;
	int utype;

	if (it && it->funcs)
@@ -362,7 +363,10 @@ int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
		break;

		default:
		*pval = (ASN1_VALUE *)ASN1_STRING_type_new(utype);
		str = ASN1_STRING_type_new(utype);
		if (it->itype == ASN1_ITYPE_MSTRING && str)
			str->flags |= ASN1_STRING_FLAG_MSTRING;
		*pval = (ASN1_VALUE *)str;
		break;
		}
	if (*pval)
+8 −4
Original line number Diff line number Diff line
@@ -1765,10 +1765,14 @@ ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
	else time(&t);

	if (s) type = s->type;
	if (!(s->flags & ASN1_STRING_FLAG_MSTRING))
		{
		if (type == V_ASN1_UTCTIME)
			return ASN1_UTCTIME_adj(s,t, offset_day, offset_sec);
		if (type == V_ASN1_GENERALIZEDTIME)
		return ASN1_GENERALIZEDTIME_adj(s, t, offset_day, offset_sec);
			return ASN1_GENERALIZEDTIME_adj(s, t, offset_day,
								offset_sec);
		}
	return ASN1_TIME_adj(s, t, offset_day, offset_sec);
	}