Re: Non-privileged user can only connect to /dev/pts/X once?!
Marcin Cieslak <[email protected]> Thu, 4 Jun 2020 10:05:41 +0000
| Newsgroups | gmane.comp.gnu.screen.user |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 3 Jun 2020, Joe Yeung wrote:
> So I re-compiled with debug turned on which led me to this function where
> the difference is made between the initial and the subsequent connection.
>
> int secopen(char *name, int flags, int mode)
> {
> int fd;
>
> xseteuid(real_uid);
> xsetegid(real_gid);
> fd = open(name, flags, mode);
> xseteuid(eff_uid);
> xsetegid(eff_gid);
> return fd;
> }
>
>
> The very first time I connection, open() succeeded, but subsequent ones
> always return -1.
What is the errno() value? Can you say more about the operating system you
are using?
My host is on FreeBSD 11.x and there I get pseudoterminals and screen 4.7.0.
I did a quick test with "serial=pty" setting on a Xen HVM guest
(which has I/O done with qemu) and noticed the following:
I have /dev/pts/3 available with the console after the machine boots
(available only to root). After the pseudoterminal closes, /dev/pts/3
disappers from the /dev/ tree and an attempt to open it results
in "Permission denied".
But in parallel /dev/pts/4 becomes available. Having that one closed,
/dev/pts/3 appears again.
One more interesting thing: I open screen with
screen /dev/pts/3 115200
to connect to the console of the guest, after this I open another
window to the same terminal with ctrl-A :screen /dev/pts/3 115200
The second window remains mute (no input and output), the
first one works. But when I close the first window with the kill
screen command, the second terminal becomes active and /dev/pts/3
does not disappear.
Pseudoterminals are allocated dynamically - maybe if qemu
re-opens the pseudoterminal master it simply gets another terminal
to use?
Marcin
smime.p7s
(application/pkcs7-signature, 3.6 KB) - not displayed