pkgsrc/security/libprelude/patches/patch-ba
2016-09-29 12:14:37 +00:00

117 lines
3 KiB
Text

$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 <errno.h>
#include <gnutls/gnutls.h>
#include <gnutls/x509.h>
-#include <gnutls/extra.h>
#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;