]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
gnutls-cli: Fix --starttls-proto=xmpp
authorTim Rühsen <tim.ruehsen@gmx.de>
Wed, 6 Feb 2019 10:30:06 +0000 (11:30 +0100)
committerTim Rühsen <tim.ruehsen@gmx.de>
Mon, 18 Feb 2019 20:40:45 +0000 (21:40 +0100)
Fixes two issues with gnutls-cli --starttls-proto=xmpp:
1. Print 'Timeout' on timeout instead of random errno message
2. Do not wait for linefeed when using XMPP (XML)

Signed-off-by: Tim Rühsen <tim.ruehsen@gmx.de>
src/socket.c

index dcffe6bc9c634fb38a5adfcf9789c84204026a78..20b17cef3c4fc0dd25b7897e9b56e2f4a34c9b5c 100644 (file)
@@ -177,13 +177,13 @@ ssize_t wait_for_text(socket_st * socket, const char *txt, unsigned txt_size)
                tv.tv_sec = 10;
                tv.tv_usec = 0;
                ret = select(socket->fd + 1, &read_fds, NULL, NULL, &tv);
-               if (ret <= 0)
-                       ret = -1;
-               else
+               if (ret > 0)
                        ret = recv(socket->fd, pbuf, left, 0);
-               if (ret == -1 || ret == 0) {
-                       int e = errno;
-                       fprintf(stderr, "error receiving %s: %s\n", txt, strerror(e));
+               if (ret == -1) {
+                       fprintf(stderr, "error receiving '%s': %s\n", txt, strerror(errno));
+                       exit(2);
+               } else if (ret == 0) {
+                       fprintf(stderr, "error receiving '%s': Timeout\n", txt);
                        exit(2);
                }
                pbuf[ret] = 0;
@@ -204,8 +204,8 @@ ssize_t wait_for_text(socket_st * socket, const char *txt, unsigned txt_size)
                        p = memmem(buf, got, txt, txt_size);
                        if (p != NULL && p != buf) {
                                p--;
-                               if (*p == '\n' || *p == '\r')
-                               break;
+                               if (*p == '\n' || *p == '\r' || (*txt == '<' && *p == '>')) // XMPP is not line oriented, uses XML format
+                                       break;
                        }
                }
        } while(got < txt_size || strncmp(buf, txt, txt_size) != 0);