Brian Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 1 | --- 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 Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 13 | @@ -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 Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 22 | 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 Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 29 | @@ -2204,6 +2218,7 @@ void ERR_load_SSL_strings(void); |
Brian Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 30 | #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 Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 38 | +++ openssl-1.0.0/ssl/d1_clnt.c 2010-05-12 22:07:36.000000000 -0700 |
Brian Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 39 | @@ -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 Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 53 | +++ openssl-1.0.0/ssl/s23_clnt.c 2010-05-12 22:07:36.000000000 -0700 |
Brian Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 54 | @@ -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 Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 69 | +++ openssl-1.0.0/ssl/s3_clnt.c 2010-05-12 22:07:36.000000000 -0700 |
Brian Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 70 | @@ -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 Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 97 | +++ openssl-1.0.0/ssl/s3_srvr.c 2010-05-12 22:07:36.000000000 -0700 |
Brian Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 98 | @@ -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 Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 125 | +++ openssl-1.0.0/ssl/ssl_err.c 2010-05-12 22:07:36.000000000 -0700 |
Brian Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 126 | @@ -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 Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 135 | +++ openssl-1.0.0/ssl/ssl_lib.c 2010-05-12 22:07:36.000000000 -0700 |
Brian Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 136 | @@ -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 Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 144 | @@ -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 Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 177 | --- openssl-1.0.0.orig/ssl/ssl_sess.c 2010-02-01 08:49:42.000000000 -0800 |
Brian Carlstrom | ad88003 | 2010-05-14 11:42:48 -0700 | [diff] [blame^] | 178 | +++ openssl-1.0.0/ssl/ssl_sess.c 2010-05-12 22:07:36.000000000 -0700 |
Brian Carlstrom | e296ea5 | 2010-04-23 15:24:16 -0700 | [diff] [blame] | 179 | @@ -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 */ |