mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
9eca2ced64
r55219 didn't fix the entire issue. It only fixed the issue on environment with sizeof(time_t) == 8 && sizeof(long) == 4. * ext/openssl/extconf.rb: Check existence of ASN1_TIME_adj(). The old ASN1_TIME_set() is not Year 2038 ready on sizeof(time_t) == 4 environment. This function was added in OpenSSL 1.0.0. [ruby-core:45552] [Bug #6571] * ext/openssl/ossl_asn1.c (ossl_time_split): Added. Split the argument (Time) into the number of days elapsed since the epoch and the remainder seconds to conform to ASN1_TIME_adj(). (obj_to_asn1utime, obj_to_asn1gtime): Use ossl_time_split() and ASN1_*TIME_adj(). * ext/openssl/ossl_asn1.h: Add the function prototype for ossl_time_split(). * ext/openssl/ossl_x509.[ch]: Add ossl_x509_time_adjust(). Similarly to obj_to_asn1*time(), use X509_time_adj_ex() instead of X509_time_adj(). * ext/openssl/ossl_x509cert.c, ext/openssl/ossl_x509crl.c, ext/openssl/ossl_x509revoked.c: Use ossl_x509_time_adjust(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
108 lines
3.4 KiB
C
108 lines
3.4 KiB
C
/*
|
|
* 'OpenSSL for Ruby' project
|
|
* Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
|
|
* All rights reserved.
|
|
*/
|
|
/*
|
|
* This program is licensed under the same licence as Ruby.
|
|
* (See the file 'LICENCE'.)
|
|
*/
|
|
#include "ossl.h"
|
|
|
|
VALUE mX509;
|
|
|
|
#define DefX509Const(x) rb_define_const(mX509, #x,INT2FIX(X509_##x))
|
|
#define DefX509Default(x,i) \
|
|
rb_define_const(mX509, "DEFAULT_" #x, rb_str_new2(X509_get_default_##i()))
|
|
|
|
ASN1_TIME *
|
|
ossl_x509_time_adjust(ASN1_TIME *s, VALUE time)
|
|
{
|
|
time_t sec;
|
|
|
|
#if defined(HAVE_ASN1_TIME_ADJ)
|
|
int off_days;
|
|
|
|
ossl_time_split(time, &sec, &off_days);
|
|
return X509_time_adj_ex(s, off_days, 0, &sec);
|
|
#else
|
|
sec = time_to_time_t(time);
|
|
return X509_time_adj(s, 0, &sec);
|
|
#endif
|
|
}
|
|
|
|
void
|
|
Init_ossl_x509(void)
|
|
{
|
|
mX509 = rb_define_module_under(mOSSL, "X509");
|
|
|
|
Init_ossl_x509attr();
|
|
Init_ossl_x509cert();
|
|
Init_ossl_x509crl();
|
|
Init_ossl_x509ext();
|
|
Init_ossl_x509name();
|
|
Init_ossl_x509req();
|
|
Init_ossl_x509revoked();
|
|
Init_ossl_x509store();
|
|
|
|
DefX509Const(V_OK);
|
|
DefX509Const(V_ERR_UNABLE_TO_GET_ISSUER_CERT);
|
|
DefX509Const(V_ERR_UNABLE_TO_GET_CRL);
|
|
DefX509Const(V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE);
|
|
DefX509Const(V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE);
|
|
DefX509Const(V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY);
|
|
DefX509Const(V_ERR_CERT_SIGNATURE_FAILURE);
|
|
DefX509Const(V_ERR_CRL_SIGNATURE_FAILURE);
|
|
DefX509Const(V_ERR_CERT_NOT_YET_VALID);
|
|
DefX509Const(V_ERR_CERT_HAS_EXPIRED);
|
|
DefX509Const(V_ERR_CRL_NOT_YET_VALID);
|
|
DefX509Const(V_ERR_CRL_HAS_EXPIRED);
|
|
DefX509Const(V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD);
|
|
DefX509Const(V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD);
|
|
DefX509Const(V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD);
|
|
DefX509Const(V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD);
|
|
DefX509Const(V_ERR_OUT_OF_MEM);
|
|
DefX509Const(V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT);
|
|
DefX509Const(V_ERR_SELF_SIGNED_CERT_IN_CHAIN);
|
|
DefX509Const(V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY);
|
|
DefX509Const(V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE);
|
|
DefX509Const(V_ERR_CERT_CHAIN_TOO_LONG);
|
|
DefX509Const(V_ERR_CERT_REVOKED);
|
|
DefX509Const(V_ERR_INVALID_CA);
|
|
DefX509Const(V_ERR_PATH_LENGTH_EXCEEDED);
|
|
DefX509Const(V_ERR_INVALID_PURPOSE);
|
|
DefX509Const(V_ERR_CERT_UNTRUSTED);
|
|
DefX509Const(V_ERR_CERT_REJECTED);
|
|
DefX509Const(V_ERR_SUBJECT_ISSUER_MISMATCH);
|
|
DefX509Const(V_ERR_AKID_SKID_MISMATCH);
|
|
DefX509Const(V_ERR_AKID_ISSUER_SERIAL_MISMATCH);
|
|
DefX509Const(V_ERR_KEYUSAGE_NO_CERTSIGN);
|
|
DefX509Const(V_ERR_APPLICATION_VERIFICATION);
|
|
|
|
DefX509Const(V_FLAG_CRL_CHECK);
|
|
DefX509Const(V_FLAG_CRL_CHECK_ALL);
|
|
|
|
DefX509Const(PURPOSE_SSL_CLIENT);
|
|
DefX509Const(PURPOSE_SSL_SERVER);
|
|
DefX509Const(PURPOSE_NS_SSL_SERVER);
|
|
DefX509Const(PURPOSE_SMIME_SIGN);
|
|
DefX509Const(PURPOSE_SMIME_ENCRYPT);
|
|
DefX509Const(PURPOSE_CRL_SIGN);
|
|
DefX509Const(PURPOSE_ANY);
|
|
DefX509Const(PURPOSE_OCSP_HELPER);
|
|
|
|
DefX509Const(TRUST_COMPAT);
|
|
DefX509Const(TRUST_SSL_CLIENT);
|
|
DefX509Const(TRUST_SSL_SERVER);
|
|
DefX509Const(TRUST_EMAIL);
|
|
DefX509Const(TRUST_OBJECT_SIGN);
|
|
DefX509Const(TRUST_OCSP_SIGN);
|
|
DefX509Const(TRUST_OCSP_REQUEST);
|
|
|
|
DefX509Default(CERT_AREA, cert_area);
|
|
DefX509Default(CERT_DIR, cert_dir);
|
|
DefX509Default(CERT_FILE, cert_file);
|
|
DefX509Default(CERT_DIR_ENV, cert_dir_env);
|
|
DefX509Default(CERT_FILE_ENV, cert_file_env);
|
|
DefX509Default(PRIVATE_DIR, private_dir);
|
|
}
|