| 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;
|
| + }
|
|
|