[arch-commits] Commit in sudo/trunk (ChangeLog PKGBUILD sudo-1.7.1-setenv.diff)

Allan McRae allan at archlinux.org
Sat Jun 6 07:34:38 UTC 2009


    Date: Saturday, June 6, 2009 @ 03:34:37
  Author: allan
Revision: 41642

upgpkg: sudo 1.7.1-2
    upstream patch to fis segfault (FS#14464)

Added:
  sudo/trunk/sudo-1.7.1-setenv.diff
Modified:
  sudo/trunk/ChangeLog
  sudo/trunk/PKGBUILD

------------------------+
 ChangeLog              |    4 ++++
 PKGBUILD               |    8 ++++++--
 sudo-1.7.1-setenv.diff |   41 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 51 insertions(+), 2 deletions(-)

Modified: ChangeLog
===================================================================
--- ChangeLog	2009-06-06 06:28:01 UTC (rev 41641)
+++ ChangeLog	2009-06-06 07:34:37 UTC (rev 41642)
@@ -1,3 +1,7 @@
+2009-06-06  Allan McRae <allan at archlinux.org>
+	* sudo-1.7.1-2
+	* fix segfault in setenv function (FS#14464)
+
 2009-04-19  Allan McRae <allan at archlinux.org>
 	* sudo-1.7.1-1
 	* upstream update

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2009-06-06 06:28:01 UTC (rev 41641)
+++ PKGBUILD	2009-06-06 07:34:37 UTC (rev 41642)
@@ -4,20 +4,24 @@
 
 pkgname=sudo
 pkgver=1.7.1
-pkgrel=1
+pkgrel=2
 pkgdesc="Give certain users the ability to run some commands as root"
 arch=('i686' 'x86_64')
 url="http://www.sudo.ws/sudo/"
 license=('custom')
 depends=('glibc' 'pam')
 backup=('etc/sudoers' 'etc/pam.d/sudo')
-source=(ftp://ftp.sudo.ws/pub/sudo/$pkgname-$pkgver.tar.gz sudo.pam)
+source=(ftp://ftp.sudo.ws/pub/sudo/$pkgname-$pkgver.tar.gz 
+        sudo-1.7.1-setenv.diff
+        sudo.pam)
 options=('!libtool' '!makeflags')
 md5sums=('af672524b2c854a67612bf4c743f58b8'
+         '010a24456e4dc7b2e904b2e6f18239a2'
          '4e7ad4ec8f2fe6a40e12bcb2c0b256e3')
 
 build() {
   cd $srcdir/$pkgname-$pkgver || return 1
+  patch -Np1 -i $srcdir/sudo-1.7.1-setenv.diff || return 1
 
   ./configure --prefix=/usr --with-pam --libexecdir=/usr/lib \
     --with-env-editor --with-all-insults --with-logfac=auth || return 1

Added: sudo-1.7.1-setenv.diff
===================================================================
--- sudo-1.7.1-setenv.diff	                        (rev 0)
+++ sudo-1.7.1-setenv.diff	2009-06-06 07:34:37 UTC (rev 41642)
@@ -0,0 +1,41 @@
+--- sudo/env.c	2009/03/11 23:01:10	1.101
++++ sudo/env.c	2009/04/24 18:53:15	1.102
+@@ -250,23 +250,27 @@ setenv(var, val, overwrite)
+     int overwrite;
+ {
+     char *estring;
++    const char *varend;
+     size_t esize;
++    int len;
+ 
+-    if (strchr(var, '=') != NULL) {
+-	errno = EINVAL;
+-	return(-1);
+-    }
++    /*
++     * POSIX says a var name with '=' is an error but BSD
++     * just ignores the '=' and anything after it.
++     */
++    for (varend = var; *varend && *varend != '='; varend++)
++	;
+ 
+-    esize = strlen(var) + 1 + strlen(val) + 1;
++    if (val == NULL)
++	val = "";		/* glibc treats a NULL val as "" */
++
++    esize = (size_t)(varend - var) + 1 + strlen(val) + 1;
+     estring = emalloc(esize);
+ 
+-    /* Build environment string and insert it. */
+-    if (strlcpy(estring, var, esize) >= esize ||
+-	strlcat(estring, "=", esize) >= esize ||
+-	strlcat(estring, val, esize) >= esize) {
+-
++    len = snprintf(estring, esize, "%.*s=%s", (int)(varend - var), var, val);
++    if (len < 0 && len >= esize)
+ 	errorx(1, "internal error, setenv() overflow");
+-    }
++
+     /* Sync env.envp with environ as needed. */
+     if (env.envp != environ) {
+ 	char **ep;




More information about the arch-commits mailing list