1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
From 9e2aaacafb45d51cff57dc033f4b5ad5bc1a1762 Mon Sep 17 00:00:00 2001
From: Dan Winship <danw@gnome.org>
Date: Fri, 16 Sep 2011 15:29:29 +0000
Subject: gnutls: fix G_TLS_ERROR_EOF handling with gnutls 3.0
gnutls 3.0 has a new error code for "peer closed connection without
sending a Close packet", so add some #ifdefs to do the right thing
with either 2.x or 3.x.
https://bugzilla.gnome.org/show_bug.cgi?id=659233
---
diff --git a/tls/gnutls/gtlsconnection-gnutls.c b/tls/gnutls/gtlsconnection-gnutls.c
index c1ede79..0f792bb 100644
--- a/tls/gnutls/gtlsconnection-gnutls.c
+++ b/tls/gnutls/gtlsconnection-gnutls.c
@@ -132,7 +132,10 @@ struct _GTlsConnectionGnutlsPrivate
GError *error;
GCancellable *cancellable;
- gboolean blocking, eof;
+ gboolean blocking;
+#ifndef GNUTLS_E_PREMATURE_TERMINATION
+ gboolean eof;
+#endif
GIOCondition internal_direction;
};
@@ -548,19 +551,22 @@ end_gnutls_io (GTlsConnectionGnutls *gnutls,
gnutls->priv->need_handshake = TRUE;
return status;
}
- else if (status == GNUTLS_E_UNEXPECTED_PACKET_LENGTH)
+ else if (
+#ifdef GNUTLS_E_PREMATURE_TERMINATION
+ status == GNUTLS_E_PREMATURE_TERMINATION
+#else
+ status == GNUTLS_E_UNEXPECTED_PACKET_LENGTH && gnutls->priv->eof
+#endif
+ )
{
- if (gnutls->priv->eof)
+ if (gnutls->priv->require_close_notify)
{
- if (gnutls->priv->require_close_notify)
- {
- g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_EOF,
- _("TLS connection closed unexpectedly"));
- return status;
- }
- else
- return 0;
+ g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_EOF,
+ _("TLS connection closed unexpectedly"));
+ return status;
}
+ else
+ return 0;
}
return status;
@@ -795,8 +801,10 @@ g_tls_connection_gnutls_pull_func (gnutls_transport_ptr_t transport_data,
if (ret < 0)
set_gnutls_error (gnutls, G_IO_IN);
+#ifndef GNUTLS_E_PREMATURE_TERMINATION
else if (ret == 0)
gnutls->priv->eof = TRUE;
+#endif
return ret;
}
--
cgit v0.9.0.2
|