]> source.dussan.org Git - tigervnc.git/commitdiff
Propagate errno to GnuTLS
authorPierre Ossman <ossman@cendio.se>
Thu, 10 Jun 2021 14:31:24 +0000 (16:31 +0200)
committerPierre Ossman <ossman@cendio.se>
Fri, 11 Jun 2021 07:42:44 +0000 (09:42 +0200)
Give GnuTLS the correct errno from deeper layers, in the cases where we
know it. In most cases GnuTLS doesn't care, but just in case...

common/rdr/TLSInStream.cxx
common/rdr/TLSOutStream.cxx

index 2339956d66e390072f0c933d17f7b633fb98939b..e6c9c9063f264468984c2568509e11b2c60552a1 100644 (file)
@@ -1,6 +1,7 @@
 /* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
  * Copyright (C) 2005 Martin Koegler
  * Copyright (C) 2010 TigerVNC Team
+ * Copyright (C) 2012-2021 Pierre Ossman for Cendio AB
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -50,6 +51,10 @@ ssize_t TLSInStream::pull(gnutls_transport_ptr_t str, void* data, size_t size)
     in->readBytes(data, size);
   } catch (EndOfStream&) {
     return 0;
+  } catch (SystemException &e) {
+    vlog.error("Failure reading TLS data: %s", e.str());
+    gnutls_transport_set_errno(self->session, e.err);
+    return -1;
   } catch (Exception& e) {
     vlog.error("Failure reading TLS data: %s", e.str());
     gnutls_transport_set_errno(self->session, EINVAL);
index a883fe89f4cbc6a902ff1354366a796c20c24c0a..0fa14b39e31db42d5de56970053ddccf0292d664 100644 (file)
@@ -1,6 +1,7 @@
 /* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
  * Copyright (C) 2005 Martin Koegler
  * Copyright (C) 2010 TigerVNC Team
+ * Copyright (C) 2012-2021 Pierre Ossman for Cendio AB
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -44,6 +45,10 @@ ssize_t TLSOutStream::push(gnutls_transport_ptr_t str, const void* data,
   try {
     out->writeBytes(data, size);
     out->flush();
+  } catch (SystemException &e) {
+    vlog.error("Failure sending TLS data: %s", e.str());
+    gnutls_transport_set_errno(self->session, e.err);
+    return -1;
   } catch (Exception& e) {
     vlog.error("Failure sending TLS data: %s", e.str());
     gnutls_transport_set_errno(self->session, EINVAL);