Errorcheck library call
[exim.git] / src / src / lookups / readsock.c
index cfc9b4ad82b5a62e65d21d01d6c41d0c446f304d..61f7296188972b71bd22b8d98ad010328b26c156 100644 (file)
@@ -3,6 +3,7 @@
 *************************************************/
 
 /* Copyright (c) Jeremy Harris 2020 */
+/* Copyright (c) The Exim Maintainers 2021 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 #include "../exim.h"
@@ -13,8 +14,6 @@ static int
 internal_readsock_open(client_conn_ctx * cctx, const uschar * sspec,
   int timeout, BOOL do_tls, uschar ** errmsg)
 {
-int sep = ',';
-uschar * ele;
 const uschar * server_name;
 host_item host;
 
@@ -182,7 +181,6 @@ struct {
 } lf = {.do_shutdown = TRUE};
 uschar * eol = NULL;
 int timeout = 5;
-FILE * fp;
 gstring * yield;
 int ret = DEFER;
 
@@ -250,16 +248,28 @@ that reads a file can be used.  If we're using a stdio buffered read,
 and might need later write ops on the socket, the stdio must be in
 writable mode or the underlying socket goes non-writable. */
 
-if (!cctx->tls_ctx)
-  fp = fdopen(cctx->sock, lf.do_shutdown ? "rb" : "wb");
-
 sigalrm_seen = FALSE;
-ALARM(timeout);
-yield =
-#ifndef DISABLE_TLS
-  cctx->tls_ctx ? cat_file_tls(cctx->tls_ctx, NULL, eol) :
+#ifdef DISABLE_TLS
+if (TRUE)
+#else
+if (!cctx->tls_ctx)
 #endif
-                 cat_file(fp, NULL, eol);
+  {
+  FILE * fp = fdopen(cctx->sock, "rb");
+  if (!fp)
+    {
+    log_write(0, LOG_MAIN|LOG_PANIC, "readsock fdopen: %s\n", strerror(errno));
+    goto out;
+    }
+  ALARM(timeout);
+  yield = cat_file(fp, NULL, eol);
+  }
+else
+  {
+  ALARM(timeout);
+  yield = cat_file_tls(cctx->tls_ctx, NULL, eol);
+  }
+
 ALARM_CLR(0);
 
 if (sigalrm_seen)