[Pkg-gnupg-commit] [gnupg2] 56/241: dirmngr: Do not use MAXDNAME.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Wed Dec 9 20:31:53 UTC 2015


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch master
in repository gnupg2.

commit e03a4a94bb67d4a6c958b37671f83456e203f325
Author: Werner Koch <wk at gnupg.org>
Date:   Thu Oct 22 09:52:51 2015 +0200

    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 <wk at gnupg.org>
---
 dirmngr/dns-stuff.c |  4 ++--
 dirmngr/dns-stuff.h |  7 +------
 dirmngr/http.c      | 24 +++++++++++++++++-------
 3 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/dirmngr/dns-stuff.c b/dirmngr/dns-stuff.c
index c500c34..639388f 100644
--- a/dirmngr/dns-stuff.c
+++ b/dirmngr/dns-stuff.c
@@ -651,7 +651,7 @@ getsrv (const char *name,struct srventry **list)
         struct srventry *srv = NULL;
         struct srventry *newlist;
 
-        if (strlen (answer->rrs.srvha[count].ha.host) >= MAXDNAME)
+        if (strlen (answer->rrs.srvha[count].ha.host) >= sizeof srv->target)
           {
             log_info ("hostname in SRV record too long - skipped\n");
             continue;
@@ -747,7 +747,7 @@ getsrv (const char *name,struct srventry **list)
         /* Get the name.  2782 doesn't allow name compression, but
            dn_expand still works to pull the name out of the
            packet. */
-        rc = dn_expand(answer,emsg,pt,srv->target,MAXDNAME);
+        rc = dn_expand(answer,emsg,pt,srv->target, sizeof srv->target);
         if (rc == 1 && srv->target[0] == 0) /* "." */
           {
             xfree(*list);
diff --git a/dirmngr/dns-stuff.h b/dirmngr/dns-stuff.h
index 5ffa017..13c47df 100644
--- a/dirmngr/dns-stuff.h
+++ b/dirmngr/dns-stuff.h
@@ -71,18 +71,13 @@ struct dns_addrinfo_s
 };
 
 
-
-#ifndef MAXDNAME
-#define MAXDNAME 1025
-#endif
-
 struct srventry
 {
   unsigned short priority;
   unsigned short weight;
   unsigned short port;
   int run_count;
-  char target[MAXDNAME];
+  char target[1025];
 };
 
 
diff --git a/dirmngr/http.c b/dirmngr/http.c
index 4387b96..de5edc3 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;
     }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git



More information about the Pkg-gnupg-commit mailing list