diff options
author | Werner Koch <[email protected]> | 2015-10-22 07:52:51 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2015-10-22 07:52:51 +0000 |
commit | e03a4a94bb67d4a6c958b37671f83456e203f325 (patch) | |
tree | 2f51a601a5e487a7cbf7863c84be1b63c4cf4669 /dirmngr/http.c | |
parent | Move SRV RR code from common/ to dirmngr/. (diff) | |
download | gnupg-e03a4a94bb67d4a6c958b37671f83456e203f325.tar.gz gnupg-e03a4a94bb67d4a6c958b37671f83456e203f325.zip |
dirmngr: Do not use MAXDNAME.
* dirmngr/dns-stuff.c (getsrv): Replace MAXDNAME.
* dirmngr/dns-stuff.h (MAXDNAME): Remove.
(struct srventry): Use a fixed value instead of MAXDNAME.
* dirmngr/http.c (connect_server): Use DIMof instead of MAXDNAME.
Malloc a helper array.
--
Depending on the order of included headers it might be that we allocate
the array with a different size than what we test against in another
module. To make it more robust we use the actual known size of
checking.
A better would be to use a linked list and avoid these large arrays.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to '')
-rw-r--r-- | dirmngr/http.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/dirmngr/http.c b/dirmngr/http.c index 4387b96b5..de5edc348 100644 --- a/dirmngr/http.c +++ b/dirmngr/http.c @@ -2251,13 +2251,23 @@ connect_server (const char *server, unsigned short port, if (srvtag) { /* We're using SRV, so append the tags. */ - if (1+strlen (srvtag) + 6 + strlen (server) + 1 <= MAXDNAME) + if (1 + strlen (srvtag) + 6 + strlen (server) + 1 + <= DIMof (struct srventry, target)) { - char srvname[MAXDNAME]; + char *srvname = xtrymalloc (DIMof (struct srventry, target)); - stpcpy (stpcpy (stpcpy (stpcpy (srvname,"_"), srvtag), - "._tcp."), server); - srvcount = getsrv (srvname, &serverlist); + if (!srvname) /* Out of core */ + { + serverlist = NULL; + srvcount = 0; + } + else + { + stpcpy (stpcpy (stpcpy (stpcpy (srvname,"_"), srvtag), + "._tcp."), server); + srvcount = getsrv (srvname, &serverlist); + xfree (srvname); + } } } #else @@ -2273,8 +2283,8 @@ connect_server (const char *server, unsigned short port, if (!serverlist) return -1; /* Out of core. */ serverlist->port = port; - strncpy (serverlist->target, server, MAXDNAME); - serverlist->target[MAXDNAME-1] = '\0'; + strncpy (serverlist->target, server, DIMof (struct srventry, target)); + serverlist->target[DIMof (struct srventry, target)-1] = '\0'; srvcount = 1; } |