]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: remove remains of BUFSIZE in HTTP auth and sample conversions
authorWilly Tarreau <w@1wt.eu>
Mon, 29 Oct 2012 19:44:36 +0000 (20:44 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 29 Oct 2012 19:44:36 +0000 (20:44 +0100)
Sample conversions rely on two alternative buffers which were previously
allocated as static bufs of size BUFSIZE. Now they're initialized to the
global buffer size. It was the same for HTTP authentication. Note that it
seems that none of them was prone to any mistake when dealing with the
buffer size, but better stay on the safe side by maintaining the old
assumption that a trash buffer is always "large enough".

include/proto/proto_http.h
include/proto/sample.h
src/haproxy.c
src/proto_http.c
src/sample.c

index e7ad8ffe1d578a0f4ddcc5031bcc3ca3f69c0bba..b65408a06ff1c1b2406b491c7541336258e8fbda 100644 (file)
@@ -53,6 +53,7 @@ extern const int http_err_codes[HTTP_ERR_SIZE];
 extern struct chunk http_err_chunks[HTTP_ERR_SIZE];
 extern const char *HTTP_302;
 extern const char *HTTP_303;
+extern char *get_http_auth_buff;
 
 #define HTTP_IS_CTL(x)   (http_is_ctl[(unsigned char)(x)])
 #define HTTP_IS_SEP(x)   (http_is_sep[(unsigned char)(x)])
index 47099b3d4e7e57e00467d49aaa3b5cec88c9afff..e6808dd4baec5b77c93c8b08d20d132968f0a083 100644 (file)
 #include <types/sample.h>
 #include <types/stick_table.h>
 
+/* only exported for late memory allocation, do not use */
+extern char *sample_trash_buf1;
+extern char *sample_trash_buf2;
+
 struct sample_expr *sample_parse_expr(char **str, int *idx, char *err, int err_size);
 struct sample *sample_process(struct proxy *px, struct session *l4,
                                void *l7, unsigned int dir, struct sample_expr *expr,
index 2867ff90e026f6a1b4401411aee3ec9bb34dd103..068a3ddf1d3c3921846952ef2190b9fb311ad535 100644 (file)
@@ -742,6 +742,10 @@ void init(int argc, char **argv)
                global.nbproc = 1;
 
        swap_buffer = (char *)calloc(1, global.tune.bufsize);
+       sample_trash_buf1 = (char *)calloc(1, global.tune.bufsize);
+       sample_trash_buf2 = (char *)calloc(1, global.tune.bufsize);
+       get_http_auth_buff = (char *)calloc(1, global.tune.bufsize);
+
 
        fdinfo = (struct fdinfo *)calloc(1,
                                       sizeof(struct fdinfo) * (global.maxsock));
index 14d076c3ffc12c63c51df90c5b055741efe08ddf..61730d753167eb85982d773fe2fc320a9a705ab0 100644 (file)
@@ -1196,7 +1196,7 @@ const char *http_parse_reqline(struct http_msg *msg,
  * searching again for something we are unable to find anyway.
  */
 
-char get_http_auth_buff[BUFSIZE];
+char *get_http_auth_buff;
 
 int
 get_http_auth(struct session *s)
@@ -1245,7 +1245,7 @@ get_http_auth(struct session *s)
        if (!strncasecmp("Basic", auth_method.str, auth_method.len)) {
 
                len = base64dec(txn->auth.method_data.str, txn->auth.method_data.len,
-                               get_http_auth_buff, BUFSIZE - 1);
+                               get_http_auth_buff, global.tune.bufsize - 1);
 
                if (len < 0)
                        return 0;
index 296dea22f376631bb58e84cea7be2464dac70c37..a7d02e57ab738cefc3a8ae6241e7b242e49afa3b 100644 (file)
@@ -15,6 +15,8 @@
 #include <arpa/inet.h>
 #include <stdio.h>
 
+#include <types/global.h>
+
 #include <common/chunk.h>
 #include <common/standard.h>
 
@@ -28,11 +30,8 @@ static struct sample temp_smp;
 static struct chunk trash_chunk;
 
 /* trash buffers used or sample conversions */
-static char sample_trash_buf1[BUFSIZE];
-static char sample_trash_buf2[BUFSIZE];
-
-/* sample_trash_buf point on used buffer*/
-static char *sample_trash_buf = sample_trash_buf1;
+char *sample_trash_buf1;
+char *sample_trash_buf2;
 
 /* list head of all known sample fetch keywords */
 static struct sample_fetch_kw_list sample_fetches = {
@@ -109,12 +108,13 @@ struct sample_conv *find_sample_conv(const char *kw, int len)
 */
 struct chunk *sample_get_trash_chunk(void)
 {
-       if (sample_trash_buf == sample_trash_buf1)
-               sample_trash_buf = sample_trash_buf2;
-       else
-               sample_trash_buf = sample_trash_buf1;
+       char *sample_trash_buf;
+
+       sample_trash_buf  = sample_trash_buf1;
+       sample_trash_buf1 = sample_trash_buf2;
+       sample_trash_buf2 = sample_trash_buf1;
 
-       chunk_init(&trash_chunk, sample_trash_buf, BUFSIZE);
+       chunk_init(&trash_chunk, sample_trash_buf, global.tune.bufsize);
 
        return &trash_chunk;
 }