summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <mvo@debian.org>2014-04-30 17:04:29 +0200
committerMichael Vogt <mvo@debian.org>2014-06-12 08:43:44 +0200
commitb2cde5777fd9ab41d1b9fe5ce91196c0d3e8227d (patch)
tree176e035b176bf77b26224daeb2f2f00426aaa2da
parentbf5a35614195aadcb3175e2617b693cd865dd640 (diff)
Only do openpty() if both stdin/stdout are terminals
Closes: 746434
-rw-r--r--apt-pkg/deb/dpkgpm.cc11
-rwxr-xr-xtest/integration/test-failing-maintainer-scripts2
2 files changed, 7 insertions, 6 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index c52b83c6e..e410594df 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -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)
diff --git a/test/integration/test-failing-maintainer-scripts b/test/integration/test-failing-maintainer-scripts
index cb82ebc7a..3dd7d643e 100755
--- a/test/integration/test-failing-maintainer-scripts
+++ b/test/integration/test-failing-maintainer-scripts
@@ -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