]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: peers: fix key consistency for integer stick tables
authorCyril Bonté <cyril.bonte@free.fr>
Sun, 16 Feb 2014 00:07:07 +0000 (01:07 +0100)
committerWilly Tarreau <w@1wt.eu>
Sun, 16 Feb 2014 07:14:16 +0000 (08:14 +0100)
Peers with integer stick tables are breaking the keys received. This is due to
the fact that the sender converts the key with htonl() but the receiver doesn't
convert the value back to its original format.

Peers appeared in haproxy-1.5, no backport is needed.

src/peers.c

index 0d06505d618d1789bc1b3f6453cd91b34d0ad1d3..b1022ab43e4707b01bd23349652da9bda0fdbefb 100644 (file)
@@ -676,10 +676,14 @@ switchstate:
                                                }
                                        }
                                        else if (ps->table->table->type == STKTABLE_TYPE_INTEGER) {
-                                               newts = stksess_new(ps->table->table, NULL);
-                                               reql = bo_getblk(si->ob, newts ? (char *)newts->key.key : trash.str, sizeof(netinteger), totl);
+                                               reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
                                                if (reql <= 0) /* closed or EOL not found */
                                                        goto incomplete;
+                                               newts = stksess_new(ps->table->table, NULL);
+                                               if (newts) {
+                                                       netinteger = ntohl(netinteger);
+                                                       memcpy(newts->key.key, &netinteger, sizeof(netinteger));
+                                               }
                                                totl += reql;
                                        }
                                        else {