Only do openpty() if both stdin/stdout are terminals
authorMichael Vogt <mvo@debian.org>
Wed, 30 Apr 2014 15:04:29 +0000 (17:04 +0200)
committerMichael Vogt <mvo@debian.org>
Wed, 30 Apr 2014 15:04:29 +0000 (17:04 +0200)
Closes: 746434

apt-pkg/deb/dpkgpm.cc
test/integration/test-failing-maintainer-scripts

index c52b83c..e410594 100644 (file)
@@ -1053,14 +1053,15 @@ void pkgDPkgPM::StartPtyMagic()
    }
 
    // setup the pty and stuff
-   struct      winsize win;
+   struct winsize win;
 
-   // if tcgetattr does not return zero there was a error
-   // and we do not do any pty magic
+   // if tcgetattr for both stdin/stdout returns 0 (no error)
+   // we do the pty magic
    _error->PushToStack();
-   if (tcgetattr(STDOUT_FILENO, &d->tt) == 0)
+   if (tcgetattr(STDIN_FILENO, &d->tt) == 0 &&
+       tcgetattr(STDOUT_FILENO, &d->tt) == 0)
    {
-       if (ioctl(1, TIOCGWINSZ, (char *)&win) < 0)
+       if (ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&win) < 0)
        {
            _error->Errno("ioctl", _("ioctl(TIOCGWINSZ) failed"));
        } else if (openpty(&d->master, &d->slave, NULL, &d->tt, &win) < 0)
index cb82ebc..3dd7d64 100755 (executable)
@@ -86,7 +86,7 @@ testmyfailure() {
        testfailure "$@" -o APT::Status-Fd=3
        msgtest 'Test for failure message of maintainerscript in' 'console log'
        local TEST='rootdir/tmp/testfailure.output'
-       if grep -q 'exit status 29$' "$TEST"; then
+       if grep -q 'exit status 29' "$TEST"; then
                msgpass
        else
                cat $TEST