Index: openssl/crypto/asn1/a_time.c |
=================================================================== |
--- openssl/crypto/asn1/a_time.c (revision 105093) |
+++ openssl/crypto/asn1/a_time.c (working copy) |
@@ -100,18 +100,29 @@ |
ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t) |
{ |
+ return ASN1_TIME_adj(s, t, 0, 0); |
+ } |
+ |
+ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, |
+ int offset_day, long offset_sec) |
+ { |
struct tm *ts; |
struct tm data; |
ts=OPENSSL_gmtime(&t,&data); |
if (ts == NULL) |
{ |
- ASN1err(ASN1_F_ASN1_TIME_SET, ASN1_R_ERROR_GETTING_TIME); |
+ ASN1err(ASN1_F_ASN1_TIME_ADJ, ASN1_R_ERROR_GETTING_TIME); |
return NULL; |
} |
+ if (offset_day || offset_sec) |
+ { |
+ if (!OPENSSL_gmtime_adj(ts, offset_day, offset_sec)) |
+ return NULL; |
+ } |
if((ts->tm_year >= 50) && (ts->tm_year < 150)) |
- return ASN1_UTCTIME_set(s, t); |
- return ASN1_GENERALIZEDTIME_set(s,t); |
+ return ASN1_UTCTIME_adj(s, t, offset_day, offset_sec); |
+ return ASN1_GENERALIZEDTIME_adj(s, t, offset_day, offset_sec); |
} |
int ASN1_TIME_check(ASN1_TIME *t) |
@@ -162,3 +173,26 @@ |
return ret; |
} |
+ |
+int ASN1_TIME_set_string(ASN1_TIME *s, const char *str) |
+ { |
+ ASN1_TIME t; |
+ |
+ t.length = strlen(str); |
+ t.data = (unsigned char *)str; |
+ t.flags = 0; |
+ |
+ t.type = V_ASN1_UTCTIME; |
+ |
+ if (!ASN1_TIME_check(&t)) |
+ { |
+ t.type = V_ASN1_GENERALIZEDTIME; |
+ if (!ASN1_TIME_check(&t)) |
+ return 0; |
+ } |
+ |
+ if (s && !ASN1_STRING_copy((ASN1_STRING *)s, (ASN1_STRING *)&t)) |
+ return 0; |
+ |
+ return 1; |
+ } |