[arch-commits] Commit in sudo/trunk (PKGBUILD no-tty.patch)

Felix Yan fyan at archlinux.org
Wed Jul 22 08:11:43 UTC 2015


    Date: Wednesday, July 22, 2015 @ 10:11:43
  Author: fyan
Revision: 242423

upgpkg: sudo 1.8.14.p2-2

add patch to make sudo work again when no tty present (FS#45735)

Added:
  sudo/trunk/no-tty.patch
Modified:
  sudo/trunk/PKGBUILD

--------------+
 PKGBUILD     |   12 ++++-
 no-tty.patch |  116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 125 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2015-07-22 07:53:48 UTC (rev 242422)
+++ PKGBUILD	2015-07-22 08:11:43 UTC (rev 242423)
@@ -6,7 +6,7 @@
 pkgname=sudo
 _sudover=1.8.14p2
 pkgver=${_sudover/p/.p}
-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/"
@@ -16,12 +16,18 @@
 backup=('etc/sudoers' 'etc/pam.d/sudo')
 install=$pkgname.install
 source=(http://www.sudo.ws/sudo/dist/$pkgname-$_sudover.tar.gz{,.sig}
-        sudo.pam)
+        sudo.pam no-tty.patch)
 sha256sums=('b4bca9cca52fc6a409709995014af5e9fb905a4a6c5bda977f78e568954dfe21'
             'SKIP'
-            'd1738818070684a5d2c9b26224906aad69a4fea77aabd960fc2675aee2df1fa2')
+            'd1738818070684a5d2c9b26224906aad69a4fea77aabd960fc2675aee2df1fa2'
+            '5f453de28dcd923d2328bf79bfa6d068a44532fe07e3c85e74cb1f78d74231d9')
 validpgpkeys=('CCB24BE9E9481B15D34159535A89DFA27EE470C4')
 
+prepare() {
+  cd "$srcdir/$pkgname-$_sudover"
+  patch -p1 -i ../no-tty.patch
+}
+
 build() {
   cd "$srcdir/$pkgname-$_sudover"
 

Added: no-tty.patch
===================================================================
--- no-tty.patch	                        (rev 0)
+++ no-tty.patch	2015-07-22 08:11:43 UTC (rev 242423)
@@ -0,0 +1,116 @@
+
+# HG changeset patch
+# User Todd C. Miller <Todd.Miller at courtesan.com>
+# Date 1437513649 21600
+# Node ID ff7b12bb0638cb13e575927e2e938e13b83b0331
+# Parent  0e728a1eb07ae71e5bf1fd9b9f014702a678cb44
+Fix errno value from get_process_ttyname() when no tty is present.
+
+diff -r 0e728a1eb07a -r ff7b12bb0638 src/ttyname.c
+--- a/src/ttyname.c	Tue Jul 21 15:02:56 2015 -0600
++++ b/src/ttyname.c	Tue Jul 21 15:20:49 2015 -0600
+@@ -382,8 +382,8 @@
+ {
+     struct sudo_kinfo_proc *ki_proc = NULL;
+     size_t size = sizeof(*ki_proc);
++    int mib[6], rc, serrno = errno;
+     char *rval = NULL;
+-    int mib[6], rc;
+     debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL)
+ 
+     /*
+@@ -407,8 +407,10 @@
+ 	ki_proc = kp;
+ 	rc = sysctl(mib, sudo_kp_namelen, ki_proc, &size, NULL, 0);
+     } while (rc == -1 && errno == ENOMEM);
++    errno = ENOENT;
+     if (rc != -1) {
+ 	if ((dev_t)ki_proc->sudo_kp_tdev != (dev_t)-1) {
++	    errno = serrno;
+ 	    rval = sudo_ttyname_dev(ki_proc->sudo_kp_tdev, name, namelen);
+ 	    if (rval == NULL) {
+ 		sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO,
+@@ -435,7 +437,7 @@
+     char path[PATH_MAX], *rval = NULL;
+     struct psinfo psinfo;
+     ssize_t nread;
+-    int fd;
++    int fd, serrno = errno;
+     debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL)
+ 
+     /* Try to determine the tty from pr_ttydev in /proc/pid/psinfo. */
+@@ -449,11 +451,16 @@
+ 	    if ((psinfo.pr_ttydev & DEVNO64) && sizeof(dev_t) == 4)
+ 		rdev = makedev(major64(psinfo.pr_ttydev), minor64(psinfo.pr_ttydev));
+ #endif
+-	    if (rdev != (dev_t)-1)
++	    if (rdev != (dev_t)-1) {
++		errno = serrno;
+ 		rval = sudo_ttyname_dev(rdev, name, namelen);
++		got done;
++	    }
+ 	}
+     }
++    errno = ENOENT;
+ 
++done:
+     if (rval == NULL)
+ 	sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO,
+ 	    "unable to resolve tty via %s", path);
+@@ -471,6 +478,7 @@
+     char path[PATH_MAX], *line = NULL;
+     char *rval = NULL;
+     size_t linesize = 0;
++    int serrno = errno;
+     ssize_t len;
+     FILE *fp;
+     debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL)
+@@ -495,8 +503,11 @@
+ 			    sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO,
+ 				"%s: tty device %s: %s", path, cp, errstr);
+ 			}
+-			if (tdev > 0)
++			if (tdev > 0) {
++			    errno = serrno;
+ 			    rval = sudo_ttyname_dev(tdev, name, namelen);
++			    goto done;
++			}
+ 			break;
+ 		    }
+ 		    cp = ep + 1;
+@@ -505,7 +516,9 @@
+ 	}
+ 	free(line);
+     }
++    errno = ENOENT;
+ 
++done:
+     if (rval == NULL)
+ 	sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO,
+ 	    "unable to resolve tty via %s", path);
+@@ -522,7 +535,7 @@
+ {
+     struct pst_status pstat;
+     char *rval = NULL;
+-    int rc;
++    int rc, serrno = errno;
+     debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL)
+ 
+     /*
+@@ -532,10 +545,15 @@
+     rc = pstat_getproc(&pstat, sizeof(pstat), (size_t)0, (int)getpid());
+     if (rc != -1 || errno == EOVERFLOW) {
+ 	if (pstat.pst_term.psd_major != -1 && pstat.pst_term.psd_minor != -1) {
++	    errno = serrno;
+ 	    rval = sudo_ttyname_dev(makedev(pstat.pst_term.psd_major,
+ 		pstat.pst_term.psd_minor), name, namelen);
++	    goto done;
+ 	}
+     }
++    errno = ENOENT;
++
++done:
+     if (rval == NULL)
+ 	sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO,
+ 	    "unable to resolve tty via pstat");
+



More information about the arch-commits mailing list