提交 17b5326b 编写于 作者: D Dr. Stephen Henson

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.
上级 3d9b105f
...@@ -1403,7 +1403,12 @@ bad: ...@@ -1403,7 +1403,12 @@ bad:
if (!tmptm) goto err; if (!tmptm) goto err;
X509_gmtime_adj(tmptm,0); X509_gmtime_adj(tmptm,0);
X509_CRL_set_lastUpdate(crl, tmptm); 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); X509_CRL_set_nextUpdate(crl, tmptm);
ASN1_TIME_free(tmptm); ASN1_TIME_free(tmptm);
......
...@@ -230,6 +230,10 @@ typedef struct asn1_object_st ...@@ -230,6 +230,10 @@ typedef struct asn1_object_st
*/ */
#define ASN1_STRING_FLAG_CONT 0x020 #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 :-) */ /* This is the base type that holds just about everything :-) */
typedef struct asn1_string_st typedef struct asn1_string_st
{ {
......
...@@ -325,6 +325,7 @@ static void asn1_template_clear(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt) ...@@ -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) int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
{ {
ASN1_TYPE *typ; ASN1_TYPE *typ;
ASN1_STRING *str;
int utype; int utype;
if (it && it->funcs) if (it && it->funcs)
...@@ -362,7 +363,10 @@ int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it) ...@@ -362,7 +363,10 @@ int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
break; break;
default: 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; break;
} }
if (*pval) if (*pval)
......
...@@ -1765,10 +1765,14 @@ ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, ...@@ -1765,10 +1765,14 @@ ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
else time(&t); else time(&t);
if (s) type = s->type; if (s) type = s->type;
if (type == V_ASN1_UTCTIME) if (!(s->flags & ASN1_STRING_FLAG_MSTRING))
return ASN1_UTCTIME_adj(s,t, offset_day, offset_sec); {
if (type == V_ASN1_GENERALIZEDTIME) if (type == V_ASN1_UTCTIME)
return ASN1_GENERALIZEDTIME_adj(s, t, offset_day, offset_sec); 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_TIME_adj(s, t, offset_day, offset_sec); return ASN1_TIME_adj(s, t, offset_day, offset_sec);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册