$NetBSD: patch-ba,v 1.2 2016/09/29 12:14:38 joerg Exp $ make this build with gnutls-3 --- prelude-admin/prelude-admin.c.orig 2009-07-08 13:50:22.000000000 +0000 +++ prelude-admin/prelude-admin.c @@ -57,7 +57,6 @@ #include #include #include -#include #include "common.h" #include "config-engine.h" @@ -841,29 +840,70 @@ static int anon_check_passwd(prelude_io_ } +static inline gnutls_transport_ptr_t fd_to_ptr(int fd) +{ + union { + gnutls_transport_ptr_t ptr; + int fd; + } data; + + data.fd = fd; + + return data.ptr; +} + + +static inline int ptr_to_fd(gnutls_transport_ptr_t ptr) +{ + union { + gnutls_transport_ptr_t ptr; + int fd; + } data; + + data.ptr = ptr; + return data.fd; +} + + +static ssize_t tls_pull(gnutls_transport_ptr_t fd, void *buf, size_t count) +{ + return read(ptr_to_fd(fd), buf, count); +} + + +static ssize_t tls_push(gnutls_transport_ptr_t fd, const void *buf, size_t count) +{ + return write(ptr_to_fd(fd), buf, count); +} + static gnutls_session new_tls_session(int sock, char *passwd) { int ret; gnutls_session session; gnutls_anon_client_credentials anoncred; + const char *err; - const int kx_priority[] = { - GNUTLS_KX_ANON_DH, -#ifdef GNUTLS_SRP_ENABLED - GNUTLS_KX_SRP, GNUTLS_KX_SRP_DSS, GNUTLS_KX_SRP_RSA, +#if defined LIBGNUTLS_VERSION_MAJOR && LIBGNUTLS_VERSION_MAJOR >= 3 +# define TLS_DH_STR "+ANON-ECDH:+ANON-DH" +#else +# define TLS_DH_STR "+ANON-DH" #endif - 0 - }; - union { - int fd; - void *ptr; - } data; +#ifdef GNUTLS_SRP_ENABLED + const char *pstring = "NORMAL:+SRP:+SRP-DSS:+SRP-RSA:" TLS_DH_STR; +#else + const char *pstring = "NORMAL:" TLS_DH_STR; +#endif gnutls_init(&session, GNUTLS_CLIENT); gnutls_set_default_priority(session); - gnutls_kx_set_priority(session, kx_priority); + + ret = gnutls_priority_set_direct(session, pstring, &err); + if (ret < 0) { + fprintf(stderr, "TLS priority syntax error at: %s\n", err); + return NULL; + } #ifdef GNUTLS_SRP_ENABLED { @@ -877,8 +917,9 @@ static gnutls_session new_tls_session(in gnutls_anon_allocate_client_credentials(&anoncred); gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); - data.fd = sock; - gnutls_transport_set_ptr(session, data.ptr); + gnutls_transport_set_ptr(session, fd_to_ptr(sock)); + gnutls_transport_set_pull_function(session, tls_pull); + gnutls_transport_set_push_function(session, tls_push); ret = gnutls_handshake(session); if ( ret < 0 ) { @@ -897,8 +938,6 @@ static gnutls_session new_tls_session(in return session; } - - static prelude_io_t *connect_manager(const char *addr, unsigned int port, char *passwd) { int ret, sock;