X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Feap-tls.c;h=bfcf199635d7532990cb3a5153cbc3e6269edcb1;hb=d706c95906d996534f13632a747af5dc617f306e;hp=5ac0efb473eedbe1c7bbecc5ee8d1c0d1a77362a;hpb=f1a34da3b2f5336e4993a729e5ac2130d0e0595a;p=ppp.git diff --git a/pppd/eap-tls.c b/pppd/eap-tls.c index 5ac0efb..bfcf199 100644 --- a/pppd/eap-tls.c +++ b/pppd/eap-tls.c @@ -48,6 +48,8 @@ #include "eap-tls.h" #include "fsm.h" #include "lcp.h" +#include "chap_ms.h" +#include "mppe.h" #include "pathnames.h" typedef struct pw_cb_data @@ -56,10 +58,12 @@ typedef struct pw_cb_data const char *prompt_info; } PW_CB_DATA; +#ifndef OPENSSL_NO_ENGINE /* The openssl configuration file and engines can be loaded only once */ static CONF *ssl_config = NULL; static ENGINE *cert_engine = NULL; static ENGINE *pkey_engine = NULL; +#endif /* TLSv1.3 do we have a session ticket ? */ static int have_session_ticket = 0; @@ -72,10 +76,6 @@ int ssl_new_session_cb(SSL *s, SSL_SESSION *sess); X509 *get_X509_from_file(char *filename); int ssl_cmp_certs(char *filename, X509 * a); -#ifdef MPPE - -#define EAPTLS_MPPE_KEY_LEN 32 - /* * OpenSSL 1.1+ introduced a generic TLS_method() * For older releases we substitute the appropriate method @@ -117,6 +117,8 @@ static inline int SSL_CTX_set_max_proto_version(SSL_CTX *ctx, long tls_ver_max) #endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ +#ifdef MPPE +#define EAPTLS_MPPE_KEY_LEN 32 /* * Generate keys according to RFC 2716 and add to reply @@ -159,24 +161,17 @@ void eaptls_gen_mppe_keys(struct eaptls_session *ets, int client) */ if (client) { - p = out; - BCOPY( p, mppe_send_key, sizeof(mppe_send_key) ); - p += EAPTLS_MPPE_KEY_LEN; - BCOPY( p, mppe_recv_key, sizeof(mppe_recv_key) ); + mppe_set_keys(out, out + EAPTLS_MPPE_KEY_LEN, EAPTLS_MPPE_KEY_LEN); } else { - p = out; - BCOPY( p, mppe_recv_key, sizeof(mppe_recv_key) ); - p += EAPTLS_MPPE_KEY_LEN; - BCOPY( p, mppe_send_key, sizeof(mppe_send_key) ); + mppe_set_keys(out + EAPTLS_MPPE_KEY_LEN, out, EAPTLS_MPPE_KEY_LEN); } - - mppe_keys_set = 1; } #endif /* MPPE */ + void log_ssl_errors( void ) { unsigned long ssl_err = ERR_get_error(); @@ -219,7 +214,9 @@ CONF *eaptls_ssl_load_config( void ) } dbglog( "Loading OpenSSL built-ins" ); +#ifndef OPENSSL_NO_ENGINE ENGINE_load_builtin_engines(); +#endif OPENSSL_load_builtin_modules(); dbglog( "Loading OpenSSL configured modules" ); @@ -233,6 +230,7 @@ CONF *eaptls_ssl_load_config( void ) return config; } +#ifndef OPENSSL_NO_ENGINE ENGINE *eaptls_ssl_load_engine( char *engine_name ) { ENGINE *e = NULL; @@ -277,7 +275,7 @@ ENGINE *eaptls_ssl_load_engine( char *engine_name ) return e; } - +#endif /* @@ -287,10 +285,12 @@ ENGINE *eaptls_ssl_load_engine( char *engine_name ) SSL_CTX *eaptls_init_ssl(int init_server, char *cacertfile, char *capath, char *certfile, char *peer_certfile, char *privkeyfile) { +#ifndef OPENSSL_NO_ENGINE char *cert_engine_name = NULL; char *cert_identifier = NULL; char *pkey_engine_name = NULL; char *pkey_identifier = NULL; +#endif SSL_CTX *ctx; SSL *ssl; X509_STORE *certstore; @@ -329,11 +329,13 @@ SSL_CTX *eaptls_init_ssl(int init_server, char *cacertfile, char *capath, SSL_library_init(); SSL_load_error_strings(); +#ifndef OPENSSL_NO_ENGINE /* load the openssl config file only once and load it before triggering the loading of a global openssl config file via SSL_CTX_new() */ if (!ssl_config) ssl_config = eaptls_ssl_load_config(); +#endif ctx = SSL_CTX_new(TLS_method()); @@ -342,6 +344,7 @@ SSL_CTX *eaptls_init_ssl(int init_server, char *cacertfile, char *capath, goto fail; } +#ifndef OPENSSL_NO_ENGINE /* if the certificate filename is of the form engine:id. e.g. pkcs11:12345 then we try to load and use this engine. @@ -417,6 +420,7 @@ SSL_CTX *eaptls_init_ssl(int init_server, char *cacertfile, char *capath, else pkey_engine = eaptls_ssl_load_engine( pkey_engine_name ); } +#endif SSL_CTX_set_default_passwd_cb (ctx, password_callback); @@ -434,6 +438,7 @@ SSL_CTX *eaptls_init_ssl(int init_server, char *cacertfile, char *capath, if (init_server) SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file(cacertfile)); +#ifndef OPENSSL_NO_ENGINE if (cert_engine) { struct @@ -468,6 +473,7 @@ SSL_CTX *eaptls_init_ssl(int init_server, char *cacertfile, char *capath, } } else +#endif { if (!SSL_CTX_use_certificate_chain_file(ctx, certfile)) { @@ -504,6 +510,7 @@ SSL_CTX *eaptls_init_ssl(int init_server, char *cacertfile, char *capath, } SSL_free(ssl); +#ifndef OPENSSL_NO_ENGINE if (pkey_engine) { EVP_PKEY *pkey = NULL; @@ -556,6 +563,7 @@ SSL_CTX *eaptls_init_ssl(int init_server, char *cacertfile, char *capath, } } else +#endif { if (!SSL_CTX_use_PrivateKey_file(ctx, privkeyfile, SSL_FILETYPE_PEM)) {