void KPty::close() { Q_D(KPty); if (d->masterFd < 0) return; closeSlave(); if (d->ownMaster) { #ifndef HAVE_OPENPTY // don't bother resetting unix98 pty, it will go away after closing master anyway. if (memcmp(d->ttyName.data(), "/dev/pts/", 9)) { if (!geteuid()) { struct stat st; if (!stat(d->ttyName.data(), &st)) { chown(d->ttyName.data(), 0, st.st_gid == getgid() ? 0 : -1); chmod(d->ttyName.data(), S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); } } else { fcntl(d->masterFd, F_SETFD, 0); d->chownpty(false); } } #endif ::close(d->masterFd); } d->masterFd = -1; }
void KPty::close() { Q_D(KPty); if (d->masterFd < 0) { return; } closeSlave(); // don't bother resetting unix98 pty, it will go away after closing master anyway. if (memcmp(d->ttyName.data(), "/dev/pts/", 9)) { if (!geteuid()) { struct stat st; if (!stat(d->ttyName.data(), &st)) { if (chown(d->ttyName.data(), 0, st.st_gid == getgid() ? 0 : -1) < 0) qDebug() << "Cannot change pseudo teletype slave ownership"; if (chmod(d->ttyName.data(), S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) < 0) qDebug() << "Cannot change pseudo teletype slave permission"; } } else { fcntl(d->masterFd, F_SETFD, 0); d->chownpty(false); } } ::close(d->masterFd); d->masterFd = -1; }