* ext/openssl/ossl_ssl_session.c (ossl_ssl_session_set_time): Check
argument type with NUM2LONG if the arg is not a Time object. See #4919. * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_set_timeout): Check type with NUM2LONG. Time as an arg is not allowed. See #4919. * test/openssl/test_ssl_session.rb (test_session_time, test_session_timeout): Test it. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32211 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a02504ba84
commit
544daf1f7a
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
Thu Jun 23 19:30:53 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
|
||||||
|
|
||||||
|
* ext/openssl/ossl_ssl_session.c (ossl_ssl_session_set_time): Check
|
||||||
|
argument type with NUM2LONG if the arg is not a Time object.
|
||||||
|
See #4919.
|
||||||
|
|
||||||
|
* ext/openssl/ossl_ssl_session.c (ossl_ssl_session_set_timeout): Check
|
||||||
|
type with NUM2LONG. Time as an arg is not allowed. See #4919.
|
||||||
|
|
||||||
|
* test/openssl/test_ssl_session.rb (test_session_time,
|
||||||
|
test_session_timeout): Test it.
|
||||||
|
|
||||||
Wed Jun 23 13:30:30 2011 Shota Fukumori <sorah@tubusu.net>
|
Wed Jun 23 13:30:30 2011 Shota Fukumori <sorah@tubusu.net>
|
||||||
|
|
||||||
* signal.c(ruby_atomic_exchange): Fix definition style.
|
* signal.c(ruby_atomic_exchange): Fix definition style.
|
||||||
|
@ -104,6 +104,8 @@ static VALUE ossl_ssl_session_eq(VALUE val1, VALUE val2)
|
|||||||
* call-seq:
|
* call-seq:
|
||||||
* session.time -> Time
|
* session.time -> Time
|
||||||
*
|
*
|
||||||
|
* Gets start time of the session.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
static VALUE ossl_ssl_session_get_time(VALUE self)
|
static VALUE ossl_ssl_session_get_time(VALUE self)
|
||||||
{
|
{
|
||||||
@ -124,7 +126,7 @@ static VALUE ossl_ssl_session_get_time(VALUE self)
|
|||||||
* call-seq:
|
* call-seq:
|
||||||
* session.timeout -> integer
|
* session.timeout -> integer
|
||||||
*
|
*
|
||||||
* How long until the session expires in seconds.
|
* Gets how long until the session expires in seconds.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static VALUE ossl_ssl_session_get_timeout(VALUE self)
|
static VALUE ossl_ssl_session_get_timeout(VALUE self)
|
||||||
@ -139,31 +141,45 @@ static VALUE ossl_ssl_session_get_timeout(VALUE self)
|
|||||||
return TIMET2NUM(t);
|
return TIMET2NUM(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SSLSESSION_SET_TIME(func) \
|
/*
|
||||||
static VALUE ossl_ssl_session_set_##func(VALUE self, VALUE time_v) \
|
* call-seq:
|
||||||
{ \
|
* session.time=(Time) -> Time
|
||||||
SSL_SESSION *ctx; \
|
* session.time=(integer) -> Time
|
||||||
unsigned long t; \
|
*
|
||||||
\
|
* Sets start time of the session. Time resolution is in seconds.
|
||||||
GetSSLSession(self, ctx); \
|
*
|
||||||
\
|
*/
|
||||||
if (rb_obj_is_instance_of(time_v, rb_cTime)) { \
|
static VALUE ossl_ssl_session_set_time(VALUE self, VALUE time_v)
|
||||||
time_v = rb_funcall(time_v, rb_intern("to_i"), 0); \
|
{
|
||||||
} else if (FIXNUM_P(time_v) || TYPE(time_v) == T_BIGNUM) { \
|
SSL_SESSION *ctx;
|
||||||
; \
|
long t;
|
||||||
} else { \
|
|
||||||
ossl_raise(rb_eArgError, "unknown type"); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
t = NUM2ULONG(time_v); \
|
|
||||||
\
|
|
||||||
SSL_SESSION_set_##func(ctx, t); \
|
|
||||||
\
|
|
||||||
return ossl_ssl_session_get_##func(self); \
|
|
||||||
}
|
|
||||||
|
|
||||||
SSLSESSION_SET_TIME(time)
|
GetSSLSession(self, ctx);
|
||||||
SSLSESSION_SET_TIME(timeout)
|
if (rb_obj_is_instance_of(time_v, rb_cTime)) {
|
||||||
|
time_v = rb_funcall(time_v, rb_intern("to_i"), 0);
|
||||||
|
}
|
||||||
|
t = NUM2LONG(time_v);
|
||||||
|
SSL_SESSION_set_time(ctx, t);
|
||||||
|
return ossl_ssl_session_get_time(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* session.timeout=(integer) -> integer
|
||||||
|
*
|
||||||
|
* Sets how long until the session expires in seconds.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static VALUE ossl_ssl_session_set_timeout(VALUE self, VALUE time_v)
|
||||||
|
{
|
||||||
|
SSL_SESSION *ctx;
|
||||||
|
long t;
|
||||||
|
|
||||||
|
GetSSLSession(self, ctx);
|
||||||
|
t = NUM2LONG(time_v);
|
||||||
|
SSL_SESSION_set_timeout(ctx, t);
|
||||||
|
return ossl_ssl_session_get_timeout(self);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_SSL_SESSION_GET_ID
|
#ifdef HAVE_SSL_SESSION_GET_ID
|
||||||
/*
|
/*
|
||||||
|
@ -33,6 +33,58 @@ class OpenSSL::TestSSLSession < OpenSSL::SSLTestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
DUMMY_SESSION = <<__EOS__
|
||||||
|
-----BEGIN SSL SESSION PARAMETERS-----
|
||||||
|
MIIDzQIBAQICAwEEAgA5BCAF219w9ZEV8dNA60cpEGOI34hJtIFbf3bkfzSgMyad
|
||||||
|
MQQwyGLbkCxE4OiMLdKKem+pyh8V7ifoP7tCxhdmwoDlJxI1v6nVCjai+FGYuncy
|
||||||
|
NNSWoQYCBE4DDWuiAwIBCqOCAo4wggKKMIIBcqADAgECAgECMA0GCSqGSIb3DQEB
|
||||||
|
BQUAMD0xEzARBgoJkiaJk/IsZAEZFgNvcmcxGTAXBgoJkiaJk/IsZAEZFglydWJ5
|
||||||
|
LWxhbmcxCzAJBgNVBAMMAkNBMB4XDTExMDYyMzA5NTQ1MVoXDTExMDYyMzEwMjQ1
|
||||||
|
MVowRDETMBEGCgmSJomT8ixkARkWA29yZzEZMBcGCgmSJomT8ixkARkWCXJ1Ynkt
|
||||||
|
bGFuZzESMBAGA1UEAwwJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
||||||
|
iQKBgQDLwsSw1ECnPtT+PkOgHhcGA71nwC2/nL85VBGnRqDxOqjVh7CxaKPERYHs
|
||||||
|
k4BPCkE3brtThPWc9kjHEQQ7uf9Y1rbCz0layNqHyywQEVLFmp1cpIt/Q3geLv8Z
|
||||||
|
D9pihowKJDyMDiN6ArYUmZczvW4976MU3+l54E6lF/JfFEU5hwIDAQABoxIwEDAO
|
||||||
|
BgNVHQ8BAf8EBAMCBaAwDQYJKoZIhvcNAQEFBQADggEBACj5WhoZ/ODVeHpwgq1d
|
||||||
|
8fW/13ICRYHYpv6dzlWihyqclGxbKMlMnaVCPz+4JaVtMz3QB748KJQgL3Llg3R1
|
||||||
|
ek+f+n1MBCMfFFsQXJ2gtLB84zD6UCz8aaCWN5/czJCd7xMz7fRLy3TOIW5boXAU
|
||||||
|
zIa8EODk+477K1uznHm286ab0Clv+9d304hwmBZgkzLg6+31Of6d6s0E0rwLGiS2
|
||||||
|
sOWYg34Y3r4j8BS9Ak4jzpoLY6cJ0QAKCOJCgmjGr4XHpyXMLbicp3ga1uSbwtVO
|
||||||
|
gF/gTfpLhJC+y0EQ5x3Ftl88Cq7ZJuLBDMo/TLIfReJMQu/HlrTT7+LwtneSWGmr
|
||||||
|
KkSkAgQApQMCAROqgcMEgcAuDkAVfj6QAJMz9yqTzW5wPFyty7CxUEcwKjUqj5UP
|
||||||
|
/Yvky1EkRuM/eQfN7ucY+MUvMqv+R8ZSkHPsnjkBN5ChvZXjrUSZKFVjR4eFVz2V
|
||||||
|
jismLEJvIFhQh6pqTroRrOjMfTaM5Lwoytr2FTGobN9rnjIRsXeFQW1HLFbXn7Dh
|
||||||
|
8uaQkMwIVVSGRB8T7t6z6WIdWruOjCZ6G5ASI5XoqAHwGezhLodZuvJEfsVyCF9y
|
||||||
|
j+RBGfCFrrQbBdnkFI/ztgM=
|
||||||
|
-----END SSL SESSION PARAMETERS-----
|
||||||
|
__EOS__
|
||||||
|
|
||||||
|
def test_session_time
|
||||||
|
sess = OpenSSL::SSL::Session.new(DUMMY_SESSION)
|
||||||
|
sess.time = (now = Time.now)
|
||||||
|
assert_equal(now.to_i, sess.time.to_i)
|
||||||
|
sess.time = 1
|
||||||
|
assert_equal(1, sess.time.to_i)
|
||||||
|
sess.time = 1.2345
|
||||||
|
assert_equal(1, sess.time.to_i)
|
||||||
|
# Can OpenSSL handle t>2038y correctly? Version?
|
||||||
|
sess.time = 2**31
|
||||||
|
assert_equal(2**31, sess.time.to_i)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_session_timeout
|
||||||
|
sess = OpenSSL::SSL::Session.new(DUMMY_SESSION)
|
||||||
|
assert_raise(TypeError) do
|
||||||
|
sess.timeout = (now = Time.now)
|
||||||
|
end
|
||||||
|
sess.timeout = 1
|
||||||
|
assert_equal(1, sess.timeout.to_i)
|
||||||
|
sess.timeout = 1.2345
|
||||||
|
assert_equal(1, sess.timeout.to_i)
|
||||||
|
sess.timeout = 2**31
|
||||||
|
assert_equal(2**31, sess.timeout.to_i)
|
||||||
|
end
|
||||||
|
|
||||||
def test_client_session
|
def test_client_session
|
||||||
last_session = nil
|
last_session = nil
|
||||||
start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true) do |server, port|
|
start_server(PORT, OpenSSL::SSL::VERIFY_NONE, true) do |server, port|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user