]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: log: keep a copy of the backend connection early in sess_build_logline()
authorWilly Tarreau <w@1wt.eu>
Wed, 5 Sep 2018 13:24:56 +0000 (15:24 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 5 Sep 2018 18:01:23 +0000 (20:01 +0200)
This way we can avoid dereferencing a possibly inexisting stream.

src/log.c

index 0c5e1f9d334f5873f29f83d88739349caa7050ca..f941c1bf9c3ca56416e6b6fd9c04cb3b82a2736b 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -1574,6 +1574,7 @@ int sess_build_logline(struct session *sess, struct stream *s, char *dst, size_t
        struct proxy *be = s ? s->be : fe;
        struct http_txn *txn = s ? s->txn : NULL;
        const struct strm_logs *logs = s ? &s->logs : NULL;
+       const struct connection *be_conn = s ? cs_conn(objt_cs(s->si[1].end)) : NULL;
        struct buffer chunk;
        char *uri;
        char *spc;
@@ -1711,9 +1712,8 @@ int sess_build_logline(struct session *sess, struct stream *s, char *dst, size_t
                                break;
 
                        case LOG_FMT_BACKENDIP:  // %bi
-                               conn = cs_conn(objt_cs(s->si[1].end));
-                               if (conn)
-                                       ret = lf_ip(tmplog, (struct sockaddr *)&conn->addr.from, dst + maxsize - tmplog, tmp);
+                               if (be_conn)
+                                       ret = lf_ip(tmplog, (const struct sockaddr *)&be_conn->addr.from, dst + maxsize - tmplog, tmp);
                                else
                                        ret = lf_text_len(tmplog, NULL, 0, dst + maxsize - tmplog, tmp);
 
@@ -1724,9 +1724,8 @@ int sess_build_logline(struct session *sess, struct stream *s, char *dst, size_t
                                break;
 
                        case LOG_FMT_BACKENDPORT:  // %bp
-                               conn = cs_conn(objt_cs(s->si[1].end));
-                               if (conn)
-                                       ret = lf_port(tmplog, (struct sockaddr *)&conn->addr.from, dst + maxsize - tmplog, tmp);
+                               if (be_conn)
+                                       ret = lf_port(tmplog, (struct sockaddr *)&be_conn->addr.from, dst + maxsize - tmplog, tmp);
                                else
                                        ret = lf_text_len(tmplog, NULL, 0, dst + maxsize - tmplog, tmp);
 
@@ -1737,9 +1736,8 @@ int sess_build_logline(struct session *sess, struct stream *s, char *dst, size_t
                                break;
 
                        case LOG_FMT_SERVERIP: // %si
-                               conn = cs_conn(objt_cs(s->si[1].end));
-                               if (conn)
-                                       ret = lf_ip(tmplog, (struct sockaddr *)&conn->addr.to, dst + maxsize - tmplog, tmp);
+                               if (be_conn)
+                                       ret = lf_ip(tmplog, (struct sockaddr *)&be_conn->addr.to, dst + maxsize - tmplog, tmp);
                                else
                                        ret = lf_text_len(tmplog, NULL, 0, dst + maxsize - tmplog, tmp);
 
@@ -1750,9 +1748,8 @@ int sess_build_logline(struct session *sess, struct stream *s, char *dst, size_t
                                break;
 
                        case LOG_FMT_SERVERPORT: // %sp
-                               conn = cs_conn(objt_cs(s->si[1].end));
-                               if (conn)
-                                       ret = lf_port(tmplog, (struct sockaddr *)&conn->addr.to, dst + maxsize - tmplog, tmp);
+                               if (be_conn)
+                                       ret = lf_port(tmplog, (struct sockaddr *)&be_conn->addr.to, dst + maxsize - tmplog, tmp);
                                else
                                        ret = lf_text_len(tmplog, NULL, 0, dst + maxsize - tmplog, tmp);