One more manual page...
[openssl.git] / ssl / ssl_sess.c
index 5bfc8ccf6a94d4dd00e8ee470b8576d1b8d9584b..5821792b7651e303556e981bb7a319416f1fa6e6 100644 (file)
@@ -91,10 +91,10 @@ SSL_SESSION *SSL_get1_session(SSL *ssl)
 int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
             CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
        {
-       ssl_session_num++;
-       return(CRYPTO_get_ex_new_index(ssl_session_num-1,
-               &ssl_session_meth,
-               argl,argp,new_func,dup_func,free_func));
+       if(CRYPTO_get_ex_new_index(ssl_session_num, &ssl_session_meth, argl,
+                               argp, new_func, dup_func, free_func) < 0)
+               return -1;
+       return (ssl_session_num++);
        }
 
 int SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, void *arg)
@@ -558,6 +558,17 @@ int SSL_set_session(SSL *s, SSL_SESSION *session)
                                session->timeout=s->ctx->session_timeout;
                        }
 
+#ifndef OPENSSL_NO_KRB5
+                if (s->kssl_ctx && !s->kssl_ctx->client_princ &&
+                    session->krb5_client_princ_len > 0)
+                {
+                    s->kssl_ctx->client_princ = (char *)malloc(session->krb5_client_princ_len + 1);
+                    memcpy(s->kssl_ctx->client_princ,session->krb5_client_princ,
+                            session->krb5_client_princ_len);
+                    s->kssl_ctx->client_princ[session->krb5_client_princ_len] = '\0';
+                }
+#endif /* OPENSSL_NO_KRB5 */
+
                /* CRYPTO_w_lock(CRYPTO_LOCK_SSL);*/
                CRYPTO_add(&session->references,1,CRYPTO_LOCK_SSL_SESSION);
                if (s->session != NULL)