blob: b0ae319c47ee4b17b895150a593828182e8ec253 [file] [log] [blame]
Brian Carlstrome296ea52010-04-23 15:24:16 -07001--- openssl-1.0.0.orig/ssl/ssl.h 2010-01-06 09:37:38.000000000 -0800
2+++ openssl-1.0.0/ssl/ssl.h 2010-05-03 01:44:52.000000000 -0700
3@@ -1083,6 +1090,9 @@ struct ssl_st
4 /* This can also be in the session once a session is established */
5 SSL_SESSION *session;
6
7+ /* This can be disabled to prevent the use of uncached sessions */
8+ int session_creation_enabled;
9+
10 /* Default generate session ID callback. */
11 GEN_SESSION_CB generate_session_id;
12
Brian Carlstromad880032010-05-14 11:42:48 -070013@@ -1500,6 +1512,7 @@ BIO * SSL_get_rbio(const SSL *s);
14 BIO * SSL_get_wbio(const SSL *s);
15 #endif
16 int SSL_set_cipher_list(SSL *s, const char *str);
17+int SSL_set_cipher_lists(SSL *s, STACK_OF(SSL_CIPHER) *sk);
18 void SSL_set_read_ahead(SSL *s, int yes);
19 int SSL_get_verify_mode(const SSL *s);
20 int SSL_get_verify_depth(const SSL *s);
21@@ -1559,6 +1572,7 @@ int SSL_SESSION_print(BIO *fp,const SSL_
Brian Carlstrome296ea52010-04-23 15:24:16 -070022 void SSL_SESSION_free(SSL_SESSION *ses);
23 int i2d_SSL_SESSION(SSL_SESSION *in,unsigned char **pp);
24 int SSL_set_session(SSL *to, SSL_SESSION *session);
25+void SSL_set_session_creation_enabled(SSL *, int);
26 int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);
27 int SSL_CTX_remove_session(SSL_CTX *,SSL_SESSION *c);
28 int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB);
Brian Carlstromad880032010-05-14 11:42:48 -070029@@ -2204,6 +2218,7 @@ void ERR_load_SSL_strings(void);
Brian Carlstrome296ea52010-04-23 15:24:16 -070030 #define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345
31 #define SSL_R_SERVERHELLO_TLSEXT 275
32 #define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277
33+#define SSL_R_SESSION_MAY_NOT_BE_CREATED 2000
34 #define SSL_R_SHORT_READ 219
35 #define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220
36 #define SSL_R_SSL23_DOING_SESSION_ID_REUSE 221
37--- openssl-1.0.0.orig/ssl/d1_clnt.c 2010-01-26 11:46:29.000000000 -0800
Brian Carlstromad880032010-05-14 11:42:48 -070038+++ openssl-1.0.0/ssl/d1_clnt.c 2010-05-12 22:07:36.000000000 -0700
Brian Carlstrome296ea52010-04-23 15:24:16 -070039@@ -613,6 +613,12 @@ int dtls1_client_hello(SSL *s)
40 #endif
41 (s->session->not_resumable))
42 {
43+ if (!s->session_creation_enabled)
44+ {
45+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
46+ SSLerr(SSL_F_DTLS1_CLIENT_HELLO,SSL_R_SESSION_MAY_NOT_BE_CREATED);
47+ goto err;
48+ }
49 if (!ssl_get_new_session(s,0))
50 goto err;
51 }
52--- openssl-1.0.0.orig/ssl/s23_clnt.c 2010-02-16 06:20:40.000000000 -0800
Brian Carlstromad880032010-05-14 11:42:48 -070053+++ openssl-1.0.0/ssl/s23_clnt.c 2010-05-12 22:07:36.000000000 -0700
Brian Carlstrome296ea52010-04-23 15:24:16 -070054@@ -687,6 +687,13 @@ static int ssl23_get_server_hello(SSL *s
55
56 /* Since, if we are sending a ssl23 client hello, we are not
57 * reusing a session-id */
58+ if (!s->session_creation_enabled)
59+ {
60+ if (!(s->client_version == SSL2_VERSION))
61+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
62+ SSLerr(SSL_F_SSL23_GET_SERVER_HELLO,SSL_R_SESSION_MAY_NOT_BE_CREATED);
63+ goto err;
64+ }
65 if (!ssl_get_new_session(s,0))
66 goto err;
67
68--- openssl-1.0.0.orig/ssl/s3_clnt.c 2010-02-27 16:24:24.000000000 -0800
Brian Carlstromad880032010-05-14 11:42:48 -070069+++ openssl-1.0.0/ssl/s3_clnt.c 2010-05-12 22:07:36.000000000 -0700
Brian Carlstrome296ea52010-04-23 15:24:16 -070070@@ -621,6 +668,12 @@ int ssl3_client_hello(SSL *s)
71 #endif
72 (sess->not_resumable))
73 {
74+ if (!s->session_creation_enabled)
75+ {
76+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
77+ SSLerr(SSL_F_SSL3_CLIENT_HELLO,SSL_R_SESSION_MAY_NOT_BE_CREATED);
78+ goto err;
79+ }
80 if (!ssl_get_new_session(s,0))
81 goto err;
82 }
83@@ -829,6 +882,12 @@ int ssl3_get_server_hello(SSL *s)
84 s->hit=0;
85 if (s->session->session_id_length > 0)
86 {
87+ if (!s->session_creation_enabled)
88+ {
89+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
90+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_SESSION_MAY_NOT_BE_CREATED);
91+ goto err;
92+ }
93 if (!ssl_get_new_session(s,0))
94 {
95 al=SSL_AD_INTERNAL_ERROR;
96--- openssl-1.0.0.orig/ssl/s3_srvr.c 2010-02-27 15:04:10.000000000 -0800
Brian Carlstromad880032010-05-14 11:42:48 -070097+++ openssl-1.0.0/ssl/s3_srvr.c 2010-05-12 22:07:36.000000000 -0700
Brian Carlstrome296ea52010-04-23 15:24:16 -070098@@ -869,6 +869,12 @@ int ssl3_get_client_hello(SSL *s)
99 */
100 if ((s->new_session && (s->options & SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION)))
101 {
102+ if (!s->session_creation_enabled)
103+ {
104+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
105+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_SESSION_MAY_NOT_BE_CREATED);
106+ goto err;
107+ }
108 if (!ssl_get_new_session(s,1))
109 goto err;
110 }
111@@ -883,6 +889,12 @@ int ssl3_get_client_hello(SSL *s)
112 goto err;
113 else /* i == 0 */
114 {
115+ if (!s->session_creation_enabled)
116+ {
117+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
118+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_SESSION_MAY_NOT_BE_CREATED);
119+ goto err;
120+ }
121 if (!ssl_get_new_session(s,1))
122 goto err;
123 }
124--- openssl-1.0.0.orig/ssl/ssl_err.c 2010-01-06 09:37:38.000000000 -0800
Brian Carlstromad880032010-05-14 11:42:48 -0700125+++ openssl-1.0.0/ssl/ssl_err.c 2010-05-12 22:07:36.000000000 -0700
Brian Carlstrome296ea52010-04-23 15:24:16 -0700126@@ -462,6 +462,7 @@ static ERR_STRING_DATA SSL_str_reasons[]
127 {ERR_REASON(SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING),"scsv received when renegotiating"},
128 {ERR_REASON(SSL_R_SERVERHELLO_TLSEXT) ,"serverhello tlsext"},
129 {ERR_REASON(SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED),"session id context uninitialized"},
130+{ERR_REASON(SSL_R_SESSION_MAY_NOT_BE_CREATED),"session may not be created"},
131 {ERR_REASON(SSL_R_SHORT_READ) ,"short read"},
132 {ERR_REASON(SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE),"signature for non signing certificate"},
133 {ERR_REASON(SSL_R_SSL23_DOING_SESSION_ID_REUSE),"ssl23 doing session id reuse"},
134--- openssl-1.0.0.orig/ssl/ssl_lib.c 2010-02-17 11:43:46.000000000 -0800
Brian Carlstromad880032010-05-14 11:42:48 -0700135+++ openssl-1.0.0/ssl/ssl_lib.c 2010-05-12 22:07:36.000000000 -0700
Brian Carlstrome296ea52010-04-23 15:24:16 -0700136@@ -326,6 +326,7 @@ SSL *SSL_new(SSL_CTX *ctx)
137 OPENSSL_assert(s->sid_ctx_length <= sizeof s->sid_ctx);
138 memcpy(&s->sid_ctx,&ctx->sid_ctx,sizeof(s->sid_ctx));
139 s->verify_callback=ctx->default_verify_callback;
140+ s->session_creation_enabled=1;
141 s->generate_session_id=ctx->generate_session_id;
142
143 s->param = X509_VERIFY_PARAM_new();
Brian Carlstromad880032010-05-14 11:42:48 -0700144@@ -1303,6 +1304,32 @@ int SSL_set_cipher_list(SSL *s,const cha
145 return 1;
146 }
147
148+/** specify the ciphers to be used by the SSL */
149+int SSL_set_cipher_lists(SSL *s,STACK_OF(SSL_CIPHER) *sk)
150+ {
151+ STACK_OF(SSL_CIPHER) *tmp_cipher_list;
152+
153+ if (sk == NULL)
154+ return 0;
155+
156+ /* Based on end of ssl_create_cipher_list */
157+ tmp_cipher_list = sk_SSL_CIPHER_dup(sk);
158+ if (tmp_cipher_list == NULL)
159+ {
160+ return 0;
161+ }
162+ if (s->cipher_list != NULL)
163+ sk_SSL_CIPHER_free(s->cipher_list);
164+ s->cipher_list = sk;
165+ if (s->cipher_list_by_id != NULL)
166+ sk_SSL_CIPHER_free(s->cipher_list_by_id);
167+ s->cipher_list_by_id = tmp_cipher_list;
168+ (void)sk_SSL_CIPHER_set_cmp_func(s->cipher_list_by_id,ssl_cipher_ptr_id_cmp);
169+
170+ sk_SSL_CIPHER_sort(s->cipher_list_by_id);
171+ return 1;
172+ }
173+
174 /* works well for SSLv2, not so good for SSLv3 */
175 char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len)
176 {
Brian Carlstrome296ea52010-04-23 15:24:16 -0700177--- openssl-1.0.0.orig/ssl/ssl_sess.c 2010-02-01 08:49:42.000000000 -0800
Brian Carlstromad880032010-05-14 11:42:48 -0700178+++ openssl-1.0.0/ssl/ssl_sess.c 2010-05-12 22:07:36.000000000 -0700
Brian Carlstrome296ea52010-04-23 15:24:16 -0700179@@ -261,6 +261,11 @@ static int def_generate_session_id(const
180 return 0;
181 }
182
183+void SSL_set_session_creation_enabled (SSL *s, int creation_enabled)
184+ {
185+ s->session_creation_enabled = creation_enabled;
186+ }
187+
188 int ssl_get_new_session(SSL *s, int session)
189 {
190 /* This gets used by clients and servers. */
191@@ -269,6 +274,8 @@ int ssl_get_new_session(SSL *s, int sess
192 SSL_SESSION *ss=NULL;
193 GEN_SESSION_CB cb = def_generate_session_id;
194
195+ /* caller should check this if they can do better error handling */
196+ if (!s->session_creation_enabled) return(0);
197 if ((ss=SSL_SESSION_new()) == NULL) return(0);
198
199 /* If the context has a default timeout, use it */