]> granicus.if.org Git - sudo/commitdiff
Use MAXHOSTNAMELEN+1 when allocating host/domain name since some
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 29 Oct 2008 17:26:42 +0000 (17:26 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 29 Oct 2008 17:26:42 +0000 (17:26 +0000)
systems do not include space for the NUL in the size.  Also manually
NUL-terminate buffer from gethostname() since POSIX is wishy-washy on this.

match.c
sudo.c
testsudoers.c

diff --git a/match.c b/match.c
index e62513ac64660cb99b2b115038420be0fe43716e..f68bb1a691d317c6163ea39b958ae2c1f2156b90 100644 (file)
--- a/match.c
+++ b/match.c
@@ -793,8 +793,8 @@ netgr_matches(netgr, lhost, shost, user)
 #ifdef HAVE_GETDOMAINNAME
     /* get the domain name (if any) */
     if (!initialized) {
-       domain = (char *) emalloc(MAXHOSTNAMELEN);
-       if (getdomainname(domain, MAXHOSTNAMELEN) == -1 || *domain == '\0') {
+       domain = (char *) emalloc(MAXHOSTNAMELEN + 1);
+       if (getdomainname(domain, MAXHOSTNAMELEN + 1) == -1 || *domain == '\0') {
            efree(domain);
            domain = NULL;
        }
diff --git a/sudo.c b/sudo.c
index 6b91d941e666ade030923b372b746880cdf28b98..8c3c73e547b1ce41dc2d13ae84b2821f6262e7b7 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -576,7 +576,7 @@ init_vars(sudo_mode, envp)
     int sudo_mode;
     char **envp;
 {
-    char *p, **ep, thost[MAXHOSTNAMELEN];
+    char *p, **ep, thost[MAXHOSTNAMELEN + 1];
     int nohostname;
 
     /* Sanity check command from user. */
@@ -602,6 +602,7 @@ init_vars(sudo_mode, envp)
     if (nohostname)
        user_host = user_shost = "localhost";
     else {
+       thost[sizeof(thost) - 1] = '\0';
        user_host = estrdup(thost);
        if (def_fqdn) {
            /* Defer call to set_fqdn() until log_error() is safe. */
index f7b1282f74b352b2960907d89d5a51d252a4866c..c5997b65cc011227241cab557aa260245f1f3d86 100644 (file)
@@ -129,7 +129,8 @@ main(argc, argv)
     struct cmndspec *cs;
     struct privilege *priv;
     struct userspec *us;
-    char *p, *grfile, *pwfile, *runas_group, *runas_user, hbuf[MAXHOSTNAMELEN];
+    char *p, *grfile, *pwfile, *runas_group, *runas_user;
+    char hbuf[MAXHOSTNAMELEN + 1];
     int ch, dflag, rval, matched;
 #ifdef YYDEBUG
     extern int yydebug;
@@ -209,6 +210,7 @@ main(argc, argv)
     if (user_host == NULL) {
        if (gethostname(hbuf, sizeof(hbuf)) != 0)
            error(1, "gethostname");
+       hbuf[sizeof(hbuf) - 1] = '\0';
        user_host = hbuf;
     }
     if ((p = strchr(user_host, '.'))) {