Commit 02a647a8 authored by Geoff Simmons's avatar Geoff Simmons

use the stack for the IP address strings used to create backends,

no need to strdup() and free()
parent 1623fa88
...@@ -50,6 +50,8 @@ ...@@ -50,6 +50,8 @@
#include "vcc_if.h" #include "vcc_if.h"
#define IPBUFSIZ (VTCP_ADDRBUFSIZE + VTCP_PORTBUFSIZE + 2)
struct bentry { struct bentry {
unsigned magic; unsigned magic;
#define BENTRY_MAGIC 0x51ced5b5 #define BENTRY_MAGIC 0x51ced5b5
...@@ -126,19 +128,13 @@ get_suckaddr(VCL_STRING host, VCL_STRING port, int family) ...@@ -126,19 +128,13 @@ get_suckaddr(VCL_STRING host, VCL_STRING port, int family)
return sa; return sa;
} }
static char * static void
get_addrname(struct suckaddr *sa) get_addrname(char *addr, struct suckaddr *sa)
{ {
char a[VTCP_ADDRBUFSIZE], p[VTCP_PORTBUFSIZE], *addr; char a[VTCP_ADDRBUFSIZE], p[VTCP_PORTBUFSIZE];
struct vsb *sb = VSB_new_auto();
VTCP_name(sa, a, sizeof(a), p, sizeof(p)); VTCP_name(sa, a, sizeof(a), p, sizeof(p));
AZ(VSB_printf(sb, "%s:%s", a, p)); snprintf(addr, IPBUFSIZ, "%s:%s", a, p);
AZ(VSB_finish(sb));
addr = strdup(VSB_data(sb));
AN(addr);
VSB_delete(sb);
return(addr);
} }
VCL_BOOL VCL_BOOL
...@@ -153,7 +149,7 @@ vmod_create(VRT_CTX, struct vmod_priv *priv, VCL_STRING vcl_name, ...@@ -153,7 +149,7 @@ vmod_create(VRT_CTX, struct vmod_priv *priv, VCL_STRING vcl_name,
struct director *dir; struct director *dir;
struct vrt_backend be = { .magic = VRT_BACKEND_MAGIC }; struct vrt_backend be = { .magic = VRT_BACKEND_MAGIC };
struct suckaddr *sa4 = NULL, *sa6 = NULL; struct suckaddr *sa4 = NULL, *sa6 = NULL;
char *ipv4_addr = NULL, *ipv6_addr = NULL; char ipv4_addr[IPBUFSIZ] = "", ipv6_addr[IPBUFSIZ] = "";
const char *hosthdr = host_header; const char *hosthdr = host_header;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
...@@ -215,9 +211,9 @@ vmod_create(VRT_CTX, struct vmod_priv *priv, VCL_STRING vcl_name, ...@@ -215,9 +211,9 @@ vmod_create(VRT_CTX, struct vmod_priv *priv, VCL_STRING vcl_name,
return 0; return 0;
} }
if (sa4 != NULL) if (sa4 != NULL)
ipv4_addr = get_addrname(sa4); get_addrname(ipv4_addr, sa4);
if (sa6 != NULL) if (sa6 != NULL)
ipv6_addr = get_addrname(sa6); get_addrname(ipv6_addr, sa6);
be.ipv4_suckaddr = sa4; be.ipv4_suckaddr = sa4;
be.ipv6_suckaddr = sa6; be.ipv6_suckaddr = sa6;
...@@ -227,10 +223,6 @@ vmod_create(VRT_CTX, struct vmod_priv *priv, VCL_STRING vcl_name, ...@@ -227,10 +223,6 @@ vmod_create(VRT_CTX, struct vmod_priv *priv, VCL_STRING vcl_name,
VRT_BACKEND_HANDLE(); VRT_BACKEND_HANDLE();
#undef DA #undef DA
#undef DN #undef DN
if (ipv4_addr != NULL)
free(ipv4_addr);
if (ipv6_addr != NULL)
free(ipv6_addr);
dir = VRT_new_backend(ctx, &be); dir = VRT_new_backend(ctx, &be);
CHECK_OBJ_NOTNULL(dir, DIRECTOR_MAGIC); CHECK_OBJ_NOTNULL(dir, DIRECTOR_MAGIC);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment