Hello community,

here is the log from the commit of package haproxy for openSUSE:Factory checked 
in at 2020-08-03 14:12:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/haproxy (Old)
 and      /work/SRC/openSUSE:Factory/.haproxy.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "haproxy"

Mon Aug  3 14:12:25 2020 rev:90 rq:823717 version:2.2.2+git0.b8a2763d5

Changes:
--------
--- /work/SRC/openSUSE:Factory/haproxy/haproxy.changes  2020-07-26 
16:17:30.532705313 +0200
+++ /work/SRC/openSUSE:Factory/.haproxy.new.3592/haproxy.changes        
2020-08-03 14:12:32.676328127 +0200
@@ -1,0 +2,22 @@
+Fri Jul 31 10:56:54 UTC 2020 - mrueck...@suse.de
+
+- Update to version 2.2.2+git0.b8a2763d5:
+  * [RELEASE] Released version 2.2.2
+  * BUG/MEDIUM: tcp-checks: always attach the transport before installing the 
mux
+  * BUG/MEDIUM: backend: always attach the transport before installing the mux
+  * SCRIPTS: announce-release: add the link to the wiki in the announce 
messages
+  * MINOR: stream-int: Be sure to have a mux to do sends and receives
+  * MINOR: connection: Preinstall the mux for non-ssl connect
+  * BUG/MEDIUM: connection: Be sure to always install a mux for sync connect
+  * BUG/MINOR: tcp-rules: Set the inspect-delay when a tcp-response action 
yields
+  * BUG/MINOR: tcp-rules: Preserve the right filter analyser on content eval 
abort
+  * BUG/MINOR: lua: Abort execution of actions that yield on a final evaluation
+  * BUG/MEDIUM: dns: Don't yield in do-resolve action on a final evaluation
+  * MEDIUM: lua: Add support for the Lua 5.4
+  * BUG/MAJOR: dns: don't treat Authority records as an error
+  * BUG/MAJOR: dns: fix null pointer dereference in snr_update_srv_status
+  * BUG/MINOR: debug: Don't dump the lua stack if it is not initialized
+  * BUILD: tools: fix build with static only toolchains
+  * BUG/MINOR: mux-fcgi: Don't url-decode the QUERY_STRING parameter anymore
+
+-------------------------------------------------------------------

Old:
----
  haproxy-2.2.1+git0.0ef71a557.tar.gz

New:
----
  haproxy-2.2.2+git0.b8a2763d5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ haproxy.spec ++++++
--- /var/tmp/diff_new_pack.LDIKTz/_old  2020-08-03 14:12:33.728329182 +0200
+++ /var/tmp/diff_new_pack.LDIKTz/_new  2020-08-03 14:12:33.732329186 +0200
@@ -53,7 +53,7 @@
 %endif
 
 Name:           haproxy
-Version:        2.2.1+git0.0ef71a557
+Version:        2.2.2+git0.b8a2763d5
 Release:        0
 #
 #

++++++ _service ++++++
--- /var/tmp/diff_new_pack.LDIKTz/_old  2020-08-03 14:12:33.768329222 +0200
+++ /var/tmp/diff_new_pack.LDIKTz/_new  2020-08-03 14:12:33.768329222 +0200
@@ -6,7 +6,7 @@
     <param name="versionformat">@PARENT_TAG@+git@TAG_OFFSET@.%h</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="versionrewrite-replacement">\1</param>
-    <param name="revision">v2.2.1</param>
+    <param name="revision">v2.2.2</param>
     <param name="changesgenerate">enable</param>
   </service>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.LDIKTz/_old  2020-08-03 14:12:33.788329242 +0200
+++ /var/tmp/diff_new_pack.LDIKTz/_new  2020-08-03 14:12:33.788329242 +0200
@@ -5,4 +5,4 @@
   </service>
 <service name="tar_scm">
                 <param 
name="url">http://git.haproxy.org/git/haproxy-2.2.git</param>
-              <param 
name="changesrevision">0ef71a55769353c996166a747b77e0d311867639</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">b8a2763d59c412207c4838579abd594a9a110a7d</param></service></servicedata>
\ No newline at end of file

++++++ haproxy-2.2.1+git0.0ef71a557.tar.gz -> 
haproxy-2.2.2+git0.b8a2763d5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/CHANGELOG 
new/haproxy-2.2.2+git0.b8a2763d5/CHANGELOG
--- old/haproxy-2.2.1+git0.0ef71a557/CHANGELOG  2020-07-23 09:04:24.000000000 
+0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/CHANGELOG  2020-07-31 11:54:32.000000000 
+0200
@@ -1,6 +1,24 @@
 ChangeLog :
 ===========
 
+2020/07/31 : 2.2.2
+    - BUG/MINOR: mux-fcgi: Don't url-decode the QUERY_STRING parameter anymore
+    - BUILD: tools: fix build with static only toolchains
+    - BUG/MINOR: debug: Don't dump the lua stack if it is not initialized
+    - BUG/MAJOR: dns: fix null pointer dereference in snr_update_srv_status
+    - BUG/MAJOR: dns: don't treat Authority records as an error
+    - MEDIUM: lua: Add support for the Lua 5.4
+    - BUG/MEDIUM: dns: Don't yield in do-resolve action on a final evaluation
+    - BUG/MINOR: lua: Abort execution of actions that yield on a final 
evaluation
+    - BUG/MINOR: tcp-rules: Preserve the right filter analyser on content eval 
abort
+    - BUG/MINOR: tcp-rules: Set the inspect-delay when a tcp-response action 
yields
+    - BUG/MEDIUM: connection: Be sure to always install a mux for sync connect
+    - MINOR: connection: Preinstall the mux for non-ssl connect
+    - MINOR: stream-int: Be sure to have a mux to do sends and receives
+    - SCRIPTS: announce-release: add the link to the wiki in the announce 
messages
+    - BUG/MEDIUM: backend: always attach the transport before installing the 
mux
+    - BUG/MEDIUM: tcp-checks: always attach the transport before installing 
the mux
+
 2020/07/23 : 2.2.1
     - BUG/MINOR: sample: Free str.area in smp_check_const_bool
     - BUG/MINOR: sample: Free str.area in smp_check_const_meth
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/VERDATE 
new/haproxy-2.2.2+git0.b8a2763d5/VERDATE
--- old/haproxy-2.2.1+git0.0ef71a557/VERDATE    2020-07-23 09:04:24.000000000 
+0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/VERDATE    2020-07-31 11:54:32.000000000 
+0200
@@ -1,2 +1,2 @@
 $Format:%ci$
-2020/07/23
+2020/07/31
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/VERSION 
new/haproxy-2.2.2+git0.b8a2763d5/VERSION
--- old/haproxy-2.2.1+git0.0ef71a557/VERSION    2020-07-23 09:04:24.000000000 
+0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/VERSION    2020-07-31 11:54:32.000000000 
+0200
@@ -1 +1 @@
-2.2.1
+2.2.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/doc/configuration.txt 
new/haproxy-2.2.2+git0.b8a2763d5/doc/configuration.txt
--- old/haproxy-2.2.1+git0.0ef71a557/doc/configuration.txt      2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/doc/configuration.txt      2020-07-31 
11:54:32.000000000 +0200
@@ -4,7 +4,7 @@
                          ----------------------
                               version 2.2
                              willy tarreau
-                              2020/07/23
+                              2020/07/31
 
 
 This document covers the configuration language as implemented in the version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-2.2.1+git0.0ef71a557/scripts/announce-release 
new/haproxy-2.2.2+git0.b8a2763d5/scripts/announce-release
--- old/haproxy-2.2.1+git0.0ef71a557/scripts/announce-release   2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/scripts/announce-release   2020-07-31 
11:54:32.000000000 +0200
@@ -165,6 +165,7 @@
  echo "   Discourse        : http://discourse.haproxy.org/";
  echo "   Slack channel    : https://slack.haproxy.org/";
  echo "   Issue tracker    : https://github.com/haproxy/haproxy/issues";
+ echo "   Wiki             : https://github.com/haproxy/wiki/wiki";
  echo "   Sources          : http://www.haproxy.org/download/${BRANCH}/src/";
  echo "   Git repository   : http://git.haproxy.org/git/${gitdir}/";
  echo "   Git Web browsing : http://git.haproxy.org/?p=${gitdir}";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/backend.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/backend.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/backend.c      2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/backend.c      2020-07-31 
11:54:32.000000000 +0200
@@ -1459,8 +1459,8 @@
                srv_conn->ctx = srv_cs;
 #if defined(USE_OPENSSL) && 
defined(TLSEXT_TYPE_application_layer_protocol_negotiation)
                if (!srv ||
-                   ((!(srv->ssl_ctx.alpn_str) && !(srv->ssl_ctx.npn_str)) ||
-                   srv->mux_proto || s->be->mode != PR_MODE_HTTP))
+                   (srv->use_ssl != 1 || (!(srv->ssl_ctx.alpn_str) && 
!(srv->ssl_ctx.npn_str)) ||
+                    srv->mux_proto || s->be->mode != PR_MODE_HTTP))
 #endif
                        init_mux = 1;
 #if defined(USE_OPENSSL) && 
defined(TLSEXT_TYPE_application_layer_protocol_negotiation)
@@ -1519,6 +1519,16 @@
        if (err != SF_ERR_NONE)
                return err;
 
+       /* The CO_FL_SEND_PROXY flag may have been set by the connect method,
+        * if so, add our handshake pseudo-XPRT now.
+        */
+       if ((srv_conn->flags & CO_FL_HANDSHAKE)) {
+               if (xprt_add_hs(srv_conn) < 0) {
+                       conn_full_close(srv_conn);
+                       return SF_ERR_INTERNAL;
+               }
+       }
+
        /* We have to defer the mux initialization until after si_connect()
         * has been called, as we need the xprt to have been properly
         * initialized, or any attempt to recv during the mux init may
@@ -1537,16 +1547,6 @@
                    !(srv_conn->flags & CO_FL_PRIVATE) && 
srv_conn->mux->avail_streams(srv_conn) > 0)
                        LIST_ADDQ(&srv->available_conns[tid], 
mt_list_to_list(&srv_conn->list));
        }
-       /* The CO_FL_SEND_PROXY flag may have been set by the connect method,
-        * if so, add our handshake pseudo-XPRT now.
-        */
-       if ((srv_conn->flags & CO_FL_HANDSHAKE)) {
-               if (xprt_add_hs(srv_conn) < 0) {
-                       conn_full_close(srv_conn);
-                       return SF_ERR_INTERNAL;
-               }
-       }
-
 
 #if USE_OPENSSL && (defined(OPENSSL_IS_BORINGSSL) || 
(HA_OPENSSL_VERSION_NUMBER >= 0x10101000L))
 
@@ -1627,6 +1627,14 @@
        if ((srv_cs->flags & CS_FL_EOI) && !(si_ic(&s->si[1])->flags & CF_EOI))
                si_ic(&s->si[1])->flags |= (CF_EOI|CF_READ_PARTIAL);
 
+       /* catch all sync connect while the mux is not already installed */
+       if (!srv_conn->mux && !(srv_conn->flags & CO_FL_WAIT_XPRT)) {
+               if (conn_create_mux(srv_conn) < 0) {
+                       conn_full_close(srv_conn);
+                       return SF_ERR_INTERNAL;
+               }
+       }
+
        return SF_ERR_NONE;  /* connection is OK */
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/debug.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/debug.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/debug.c        2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/debug.c        2020-07-31 
11:54:32.000000000 +0200
@@ -222,11 +222,13 @@
                chunk_appendf(buf, "%sCurrent executing a Lua HTTP service -- 
", pfx);
        }
 
-       if (hlua) {
+       if (hlua && hlua->T) {
                luaL_traceback(hlua->T, hlua->T, NULL, 0);
                if (!append_prefixed_str(buf, lua_tostring(hlua->T, -1), pfx, 
'\n', 1))
                        b_putchr(buf, '\n');
        }
+       else
+               b_putchr(buf, '\n');
 #endif
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/dns.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/dns.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/dns.c  2020-07-23 09:04:24.000000000 
+0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/dns.c  2020-07-31 11:54:32.000000000 
+0200
@@ -1038,6 +1038,35 @@
        /* now parsing additional records for SRV queries only */
        if (dns_query->type != DNS_RTYPE_SRV)
                goto skip_parsing_additional_records;
+
+       /* if we find Authority records, just skip them */
+       for (i = 0; i < dns_p->header.nscount; i++) {
+               offset = 0;
+               len = dns_read_name(resp, bufend, reader, tmpname, 
DNS_MAX_NAME_SIZE,
+                                   &offset, 0);
+               if (len == 0)
+                       continue;
+
+               if (reader + offset + 10 >= bufend)
+                       return DNS_RESP_INVALID;
+
+               reader += offset;
+               /* skip 2 bytes for class */
+               reader += 2;
+               /* skip 2 bytes for type */
+               reader += 2;
+               /* skip 4 bytes for ttl */
+               reader += 4;
+               /* read data len */
+               len = reader[0] * 256 + reader[1];
+               reader += 2;
+
+               if (reader + len >= bufend)
+                       return DNS_RESP_INVALID;
+
+               reader += len;
+       }
+
        nb_saved_records = 0;
        for (i = 0; i < dns_p->header.arcount; i++) {
                if (reader >= bufend)
@@ -2421,10 +2450,8 @@
                        locked = 1;
                }
 
-               if (resolution->step == RSLV_STEP_RUNNING) {
-                       ret = ACT_RET_YIELD;
-                       goto end;
-               }
+               if (resolution->step == RSLV_STEP_RUNNING)
+                       goto yield;
                if (resolution->step == RSLV_STEP_NONE) {
                        /* We update the variable only if we have a valid 
response. */
                        if (resolution->status == RSLV_STATUS_VALID) {
@@ -2458,14 +2485,7 @@
                        }
                }
 
-               free(s->dns_ctx.hostname_dn); s->dns_ctx.hostname_dn = NULL;
-               s->dns_ctx.hostname_dn_len = 0;
-               dns_unlink_resolution(s->dns_ctx.dns_requester);
-
-               pool_free(dns_requester_pool, s->dns_ctx.dns_requester);
-               s->dns_ctx.dns_requester = NULL;
-
-               goto end;
+               goto release_requester;
        }
 
        /* need to configure and start a new DNS resolution */
@@ -2486,26 +2506,38 @@
 
        /* Check if there is a fresh enough response in the cache of our 
associated resolution */
        req = s->dns_ctx.dns_requester;
-       if (!req || !req->resolution) {
-               dns_trigger_resolution(s->dns_ctx.dns_requester);
-               ret = ACT_RET_YIELD;
-               goto end;
-       }
+       if (!req || !req->resolution)
+               goto release_requester; /* on error, ignore the action */
        res = req->resolution;
 
        exp = tick_add(res->last_resolution, resolvers->hold.valid);
        if (resolvers->t && res->status == RSLV_STATUS_VALID && 
tick_isset(res->last_resolution)
-                      && !tick_is_expired(exp, now_ms)) {
+           && !tick_is_expired(exp, now_ms)) {
                goto use_cache;
        }
 
        dns_trigger_resolution(s->dns_ctx.dns_requester);
+
+  yield:
+       if (flags & ACT_OPT_FINAL)
+               goto release_requester;
        ret = ACT_RET_YIELD;
 
   end:
        if (locked)
                HA_SPIN_UNLOCK(DNS_LOCK, &resolvers->lock);
        return ret;
+
+  release_requester:
+       free(s->dns_ctx.hostname_dn);
+       s->dns_ctx.hostname_dn = NULL;
+       s->dns_ctx.hostname_dn_len = 0;
+       if (s->dns_ctx.dns_requester) {
+               dns_unlink_resolution(s->dns_ctx.dns_requester);
+               pool_free(dns_requester_pool, s->dns_ctx.dns_requester);
+               s->dns_ctx.dns_requester = NULL;
+       }
+       goto end;
 }
 
 static void release_dns_action(struct act_rule *rule)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/hlua.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/hlua.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/hlua.c 2020-07-23 09:04:24.000000000 
+0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/hlua.c 2020-07-31 11:54:32.000000000 
+0200
@@ -1069,6 +1069,9 @@
  */
 static enum hlua_exec hlua_ctx_resume(struct hlua *lua, int yield_allowed)
 {
+#if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM >= 504
+       int nres;
+#endif
        int ret;
        const char *msg;
        const char *trace;
@@ -1100,7 +1103,11 @@
        lua->wake_time = TICK_ETERNITY;
 
        /* Call the function. */
+#if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM >= 504
+       ret = lua_resume(lua->T, gL.T, lua->nargs, &nres);
+#else
        ret = lua_resume(lua->T, gL.T, lua->nargs);
+#endif
        switch (ret) {
 
        case LUA_OK:
@@ -6642,11 +6649,16 @@
                        act_ret = lua_tointeger(s->hlua->T, -1);
 
                /* Set timeout in the required channel. */
-               if (act_ret == ACT_RET_YIELD && s->hlua->wake_time != 
TICK_ETERNITY) {
-                       if (dir == SMP_OPT_DIR_REQ)
-                               s->req.analyse_exp = s->hlua->wake_time;
-                       else
-                               s->res.analyse_exp = s->hlua->wake_time;
+               if (act_ret == ACT_RET_YIELD) {
+                       if (flags & ACT_OPT_FINAL)
+                               goto err_yield;
+
+                       if (s->hlua->wake_time != TICK_ETERNITY) {
+                               if (dir == SMP_OPT_DIR_REQ)
+                                       s->req.analyse_exp = s->hlua->wake_time;
+                               else
+                                       s->res.analyse_exp = s->hlua->wake_time;
+                       }
                }
                goto end;
 
@@ -6687,6 +6699,8 @@
                goto end;
 
        case HLUA_E_YIELD:
+         err_yield:
+               act_ret = ACT_RET_CONT;
                SEND_ERR(px, "Lua function '%s': aborting Lua processing on 
expired timeout.\n",
                         rule->arg.hlua_rule->fcn.name);
                goto end;
@@ -7845,10 +7859,12 @@
                memprintf(err, "Lua message handler error: %s\n", 
lua_tostring(gL.T, -1));
                lua_pop(gL.T, 1);
                return -1;
+#if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM <= 503
        case LUA_ERRGCMM:
                memprintf(err, "Lua garbage collector error: %s\n", 
lua_tostring(gL.T, -1));
                lua_pop(gL.T, 1);
                return -1;
+#endif
        default:
                memprintf(err, "Lua unknown error: %s\n", lua_tostring(gL.T, 
-1));
                lua_pop(gL.T, 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/mux_fcgi.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/mux_fcgi.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/mux_fcgi.c     2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/mux_fcgi.c     2020-07-31 
11:54:32.000000000 +0200
@@ -1303,27 +1303,21 @@
                struct ist path = http_get_path(params->uri);
                int len;
 
-               /* Decode the path. it must first be copied to keep the URI
-                * untouched.
-                */
-               chunk_memcat(params->p, path.ptr, path.len);
-               path.ptr = b_tail(params->p) - path.len;
-               path.ptr[path.len] = '\0';
-               len = url_decode(path.ptr, 0);
-               if (len < 0)
-                       goto error;
-               path.len = len;
-
                /* No scrit_name set but no valid path ==> error */
                if (!(params->mask & FCGI_SP_SCRIPT_NAME) && !istlen(path))
                        goto error;
 
-               /* Find limit between the path and the query-string */
-               for (len = 0; len < path.len && *(path.ptr + len) != '?'; 
len++);
-
                /* If there is a query-string, Set it if not already set */
-               if (!(params->mask & FCGI_SP_REQ_QS) && len < path.len)
-                       params->qs = ist2(path.ptr+len+1, path.len-len-1);
+               if (!(params->mask & FCGI_SP_REQ_QS)) {
+                       struct ist qs = istfind(path, '?');
+
+                       /* Update the path length */
+                       path.len -= qs.len;
+
+                       /* Set the query-string skipping the '?', if any */
+                       if (istlen(qs))
+                               params->qs = istnext(qs);
+               }
 
                /* If the script_name is set, don't try to deduce the path_info
                 * too. The opposite is not true.
@@ -1333,8 +1327,18 @@
                        goto end;
                }
 
+               /* Decode the path. it must first be copied to keep the URI
+                * untouched.
+                */
+               chunk_memcat(params->p, path.ptr, path.len);
+               path.ptr = b_tail(params->p) - path.len;
+               len = url_decode(ist0(path), 0);
+               if (len < 0)
+                       goto error;
+               path.len = len;
+
                /* script_name not set, preset it with the path for now */
-               params->scriptname = ist2(path.ptr, len);
+               params->scriptname = path;
 
                /* If there is no regex to match the pathinfo, just to the last
                 * part and see if the index must be used.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/server.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/server.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/server.c       2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/server.c       2020-07-31 
11:54:32.000000000 +0200
@@ -3731,6 +3731,15 @@
        struct dns_resolution *resolution = s->dns_requester->resolution;
        int exp;
 
+       /* If resolution is NULL we're dealing with SRV records Additional 
records */
+       if (resolution == NULL) {
+               if (s->next_admin & SRV_ADMF_RMAINT)
+                       return 1;
+
+               srv_set_admin_flag(s, SRV_ADMF_RMAINT, "entry removed from SRV 
record");
+               return 0;
+       }
+
        switch (resolution->status) {
                case RSLV_STATUS_NONE:
                        /* status when HAProxy has just (re)started.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/stream_interface.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/stream_interface.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/stream_interface.c     2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/stream_interface.c     2020-07-31 
11:54:32.000000000 +0200
@@ -661,6 +661,10 @@
        if (oc->flags & CF_SHUTW)
                return 1;
 
+       /* we must wait because the mux is not installed yet */
+       if (!conn->mux)
+               return 0;
+
        if (oc->pipe && conn->xprt->snd_pipe && conn->mux->snd_pipe) {
                ret = conn->mux->snd_pipe(cs, oc->pipe);
                if (ret > 0)
@@ -1220,6 +1224,10 @@
        if (ic->flags & CF_SHUTR)
                return 1;
 
+       /* we must wait because the mux is not installed yet */
+       if (!conn->mux)
+               return 0;
+
        /* stop here if we reached the end of data */
        if (cs->flags & CS_FL_EOS)
                goto end_recv;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/tcp_rules.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/tcp_rules.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/tcp_rules.c    2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/tcp_rules.c    2020-07-31 
11:54:32.000000000 +0200
@@ -354,7 +354,9 @@
 
  missing_data:
        channel_dont_close(rep);
-       s->current_rule = rule;
+       /* just set the analyser timeout once at the beginning of the response 
*/
+       if (!tick_isset(rep->analyse_exp) && s->be->tcp_rep.inspect_delay)
+               rep->analyse_exp = tick_add(now_ms, 
s->be->tcp_rep.inspect_delay);
        DBG_TRACE_DEVEL("waiting for more data", 
STRM_EV_STRM_ANA|STRM_EV_TCP_ANA, s);
        return 0;
 
@@ -389,7 +391,7 @@
        channel_abort(&s->req);
 
   abort:
-       rep->analysers &= AN_REQ_FLT_END;
+       rep->analysers &= AN_RES_FLT_END;
 
        if (!(s->flags & SF_ERR_MASK))
                s->flags |= SF_ERR_PRXCOND;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/tcpcheck.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/tcpcheck.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/tcpcheck.c     2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/tcpcheck.c     2020-07-31 
11:54:32.000000000 +0200
@@ -1096,31 +1096,6 @@
        conn->flags |= CO_FL_PRIVATE;
        conn->ctx = cs;
 
-       /* The mux may be initialized now if there isn't server attached to the
-        * check (email alerts) or if there is a mux proto specified or if there
-        * is no alpn.
-        */
-       if (!s || ((connect->options & TCPCHK_OPT_DEFAULT_CONNECT) && 
check->mux_proto) ||
-           connect->mux_proto || (!connect->alpn && !check->alpn_str)) {
-               const struct mux_ops *mux_ops;
-
-               if (connect->mux_proto)
-                       mux_ops = connect->mux_proto->mux;
-               else if ((connect->options & TCPCHK_OPT_DEFAULT_CONNECT) && 
check->mux_proto)
-                       mux_ops = check->mux_proto->mux;
-               else {
-                       int mode = ((check->tcpcheck_rules->flags & 
TCPCHK_RULES_PROTO_CHK) == TCPCHK_RULES_HTTP_CHK
-                                   ? PROTO_MODE_HTTP
-                                   : PROTO_MODE_TCP);
-
-                       mux_ops = conn_get_best_mux(conn, IST_NULL, 
PROTO_SIDE_BE, mode);
-               }
-               if (mux_ops && conn_install_mux(conn, mux_ops, cs, proxy, 
check->sess) < 0) {
-                       status = SF_ERR_INTERNAL;
-                       goto fail_check;
-               }
-       }
-
 #ifdef USE_OPENSSL
        if (connect->sni)
                ssl_sock_set_servername(conn, connect->sni);
@@ -1160,6 +1135,31 @@
                        status = SF_ERR_RESOURCE;
        }
 
+       /* The mux may be initialized now if there isn't server attached to the
+        * check (email alerts) or if there is a mux proto specified or if there
+        * is no alpn.
+        */
+       if (!s || ((connect->options & TCPCHK_OPT_DEFAULT_CONNECT) && 
check->mux_proto) ||
+           connect->mux_proto || (!connect->alpn && !check->alpn_str)) {
+               const struct mux_ops *mux_ops;
+
+               if (connect->mux_proto)
+                       mux_ops = connect->mux_proto->mux;
+               else if ((connect->options & TCPCHK_OPT_DEFAULT_CONNECT) && 
check->mux_proto)
+                       mux_ops = check->mux_proto->mux;
+               else {
+                       int mode = ((check->tcpcheck_rules->flags & 
TCPCHK_RULES_PROTO_CHK) == TCPCHK_RULES_HTTP_CHK
+                                   ? PROTO_MODE_HTTP
+                                   : PROTO_MODE_TCP);
+
+                       mux_ops = conn_get_best_mux(conn, IST_NULL, 
PROTO_SIDE_BE, mode);
+               }
+               if (mux_ops && conn_install_mux(conn, mux_ops, cs, proxy, 
check->sess) < 0) {
+                       status = SF_ERR_INTERNAL;
+                       goto fail_check;
+               }
+       }
+
   fail_check:
        /* It can return one of :
         *  - SF_ERR_NONE if everything's OK
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.1+git0.0ef71a557/src/tools.c 
new/haproxy-2.2.2+git0.b8a2763d5/src/tools.c
--- old/haproxy-2.2.1+git0.0ef71a557/src/tools.c        2020-07-23 
09:04:24.000000000 +0200
+++ new/haproxy-2.2.2+git0.b8a2763d5/src/tools.c        2020-07-31 
11:54:32.000000000 +0200
@@ -10,7 +10,7 @@
  *
  */
 
-#ifdef __ELF__
+#if (defined(__ELF__) && !defined(__linux__)) || defined(USE_DL)
 #define _GNU_SOURCE
 #include <dlfcn.h>
 #include <link.h>
@@ -4387,7 +4387,7 @@
        return ret;
 }
 
-#ifdef __ELF__
+#if (defined(__ELF__) && !defined(__linux__)) || defined(USE_DL)
 /* calls dladdr() or dladdr1() on <addr> and <dli>. If dladdr1 is available,
  * also returns the symbol size in <size>, otherwise returns 0 there.
  */
@@ -4421,7 +4421,7 @@
  * The file name (lib or executable) is limited to what lies between the last
  * '/' and the first following '.'. An optional prefix <pfx> is prepended 
before
  * the output if not null. The file is not dumped when it's the same as the one
- * that contains the "main" symbol, or when __ELF__ is not set.
+ * that contains the "main" symbol, or when __ELF__ && USE_DL are not set.
  *
  * The symbol's base address is returned, or NULL when unresolved, in order to
  * allow the caller to match it against known ones.
@@ -4449,7 +4449,7 @@
 #endif
        };
 
-#ifdef __ELF__
+#if (defined(__ELF__) && !defined(__linux__)) || defined(USE_DL)
        Dl_info dli, dli_main;
        size_t size;
        const char *fname, *p;
@@ -4466,7 +4466,7 @@
                }
        }
 
-#ifdef __ELF__
+#if (defined(__ELF__) && !defined(__linux__)) || defined(USE_DL)
        /* Now let's try to be smarter */
        if (!dladdr_and_size(addr, &dli, &size))
                goto unknown;
@@ -4506,7 +4506,7 @@
                chunk_appendf(buf, "+%#lx", (long)(addr - dli.dli_fbase));
                return NULL;
        }
-#endif /* __ELF__ */
+#endif /* __ELF__ && !__linux__ || USE_DL */
  unknown:
        /* unresolved symbol from the main file, report relative offset to main 
*/
        if ((void*)addr < (void*)main)


Reply via email to