Esempio n. 1
0
asn1_error_code
k5_asn1_decode_generaltime(const unsigned char *asn1, size_t len,
                           time_t *time_out)
{
    const char *s = (char *)asn1;
    struct tm ts;
    time_t t;

    *time_out = 0;
    if (len != 15)
        return ASN1_BAD_LENGTH;
    /* Time encoding: YYYYMMDDhhmmssZ */
    if (s[14] != 'Z')
        return ASN1_BAD_FORMAT;
    if (memcmp(s, "19700101000000Z", 15) == 0) {
        *time_out = 0;
        return 0;
    }
#define c2i(c) ((c) - '0')
    ts.tm_year = 1000 * c2i(s[0]) + 100 * c2i(s[1]) + 10 * c2i(s[2]) +
                 c2i(s[3]) - 1900;
    ts.tm_mon = 10 * c2i(s[4]) + c2i(s[5]) - 1;
    ts.tm_mday = 10 * c2i(s[6]) + c2i(s[7]);
    ts.tm_hour = 10 * c2i(s[8]) + c2i(s[9]);
    ts.tm_min = 10 * c2i(s[10]) + c2i(s[11]);
    ts.tm_sec = 10 * c2i(s[12]) + c2i(s[13]);
    ts.tm_isdst = -1;
    t = krb5int_gmt_mktime(&ts);
    if (t == -1)
        return ASN1_BAD_TIMEFORMAT;
    *time_out = t;
    return 0;
}
Esempio n. 2
0
static krb5_error_code
getepochtime(char *strtime, krb5_timestamp *epochtime)
{
    struct tm tme;

    memset(&tme, 0, sizeof(tme));
    if (strptime(strtime,"%Y%m%d%H%M%SZ", &tme) == NULL) {
        *epochtime = 0;
        return EINVAL;
    }
    *epochtime = krb5int_gmt_mktime(&tme);
    return 0;
}
Esempio n. 3
0
asn1_error_code
asn1_decode_generaltime(asn1buf *buf, time_t *val)
{
    setup();
    char *s;
    struct tm ts;
    time_t t;

    tag(ASN1_GENERALTIME);

    if (length != 15) return ASN1_BAD_LENGTH;
    retval = asn1buf_remove_charstring(buf,15,&s);
    if (retval) return retval;
    /* Time encoding: YYYYMMDDhhmmssZ */
    if (s[14] != 'Z') {
        free(s);
        return ASN1_BAD_FORMAT;
    }
    if (s[0] == '1' && !memcmp("19700101000000Z", s, 15)) {
        t = 0;
        free(s);
        goto done;
    }
#define c2i(c) ((c)-'0')
    ts.tm_year = 1000*c2i(s[0]) + 100*c2i(s[1]) + 10*c2i(s[2]) + c2i(s[3])
        - 1900;
    ts.tm_mon = 10*c2i(s[4]) + c2i(s[5]) - 1;
    ts.tm_mday = 10*c2i(s[6]) + c2i(s[7]);
    ts.tm_hour = 10*c2i(s[8]) + c2i(s[9]);
    ts.tm_min = 10*c2i(s[10]) + c2i(s[11]);
    ts.tm_sec = 10*c2i(s[12]) + c2i(s[13]);
    ts.tm_isdst = -1;
    t = krb5int_gmt_mktime(&ts);
    free(s);

    if (t == -1) return ASN1_BAD_TIMEFORMAT;

done:
    *val = t;
    cleanup();
}