Commit Graph

1065 Commits

Author SHA1 Message Date
Amadeusz Sławiński
2fb4965f09 return number of on screen lines
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-11 16:26:56 +02:00
Amadeusz Sławiński
d5b4bce6b9 fix segfault when querying info on nonUTF screen
Bug: 51402
2017-07-10 21:08:24 +02:00
Amadeusz Sławiński
a9cac76d81 fix typo in comment
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:51:18 +02:00
Amadeusz Sławiński
2672c2a8f4 remove cruft from pty.c
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:51:16 +02:00
Amadeusz Sławiński
2aed5aece5 move TtyName inside function
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:51:12 +02:00
Amadeusz Sławiński
612ade8edd fix failure if compiling with TIOCKSET
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:51:09 +02:00
Amadeusz Sławiński
0b7f05639e check dup() return value
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:51:05 +02:00
Amadeusz Sławiński
a0b973f2ae refactor use of sizeof
introduce ARRAY_SIZE, like in Linux kernel
use explicit structs, if not using arrays

Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:51:01 +02:00
Amadeusz Sławiński
6724ef2529 dynamically allocate windows
Bug: 23691
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:50:53 +02:00
Amadeusz Sławiński
bbda45bc41 allow changing maxwin at runtime
ultimately this setting should probably get dropped for dynamic
allocation

Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:50:49 +02:00
Amadeusz Sławiński
e947382b6d expose less functions via header
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:50:41 +02:00
Amadeusz Sławiński
86ce25b620 separate handling of 16 color and 256 color escapes
on xterm
echo -e "\e[38;5;1mtest\e[1mtest"
puts both 'test' strings in same color, however in screen, second one is
bright

do note that defbce on, may interfere with this

Bug: 50601
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:50:32 +02:00
Amadeusz Sławiński
e1dd1c2fe9 type cleanups
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:50:29 +02:00
Amadeusz Sławiński
4f9fbd49aa cleanup some types in encoding handling
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:50:24 +02:00
Amadeusz Sławiński
f6b6708126 check dup return values
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:50:20 +02:00
Amadeusz Sławiński
d50e9516e9 add italics support
Bug: 36676
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:50:10 +02:00
Amadeusz Sławiński
7e5eea415b Panic if we fail dup
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:50:04 +02:00
Amadeusz Sławiński
7c0362530b bail out if we fail ftruncate
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-07-09 23:48:44 +02:00
Amadeusz Sławiński
22ff8d2a62 Unicode standard says only 21 bits are used 2017-07-01 21:51:12 +02:00
Matt Whitlock
1f3e3b6725 Fix parallel make install
Fixes:
https://bugs.gentoo.org/show_bug.cgi?id=611130
2017-07-01 21:48:13 +02:00
Amadeusz Sławiński
36ac3e29f1 constify ListGeneric 2017-06-28 21:42:18 +02:00
Amadeusz Sławiński
16b7605e44 check if we could reassociate std streams 2017-06-22 22:56:51 +02:00
Amadeusz Sławiński
86fb54cd3b do proper casting to avoid warnings 2017-06-22 22:48:00 +02:00
Amadeusz Sławiński
8c78d7f959 check results of setgid/uid 2017-06-22 22:42:41 +02:00
Amadeusz Sławiński
eebc0e2689 silence unused variable warning 2017-06-22 22:15:19 +02:00
Amadeusz Sławiński
c68f9e3385 silence -Wunused_result warnings
of course we can fail write() here for reasons, but we don't care as we
are on error path anyway, so we can't fail more

apparently due to some design decisions in gcc/glibc one cannot just
(void)write(...);
hence additional variable
2017-06-22 22:01:17 +02:00
Amadeusz Sławiński
5005299b77 LockTerminal is now unused, so remove it 2017-06-22 22:01:17 +02:00
Amadeusz Sławiński
dc9542b26a authenticate on attach/detach
instead of fake lockscreen
2017-06-22 22:01:17 +02:00
Amadeusz Sławiński
d7ef5114c2 prepare for authentication in socket.c 2017-06-22 16:29:53 +02:00
Amadeusz Sławiński
151af7887b remove LockTerminal call 2017-06-22 16:29:53 +02:00
Amadeusz Sławiński
bf1c6739a6 move forward declaration to proper place 2017-06-22 16:29:53 +02:00
Amadeusz Sławiński
c62bad265d Revert "remove unneeded password stuff from socket attach/detach"
This reverts commit 29501d7426.

Actually this is correct place to ask user for password, as it is
handled server side.
It's bit modified to build, will need also some integration with
authentication.c to check if password is correct.
2017-06-22 16:29:53 +02:00
Guo Ci
6a2f12c28a begin viewing scrollback buffer at the first line of output instead of at the start of the scrollback buffer
This issue has been discussed before:
https://bbs.archlinux.org/viewtopic.php?id=108640

Copy mode and “hardcopy -h” always begin at the start of the scrollback buffer.
If a user sets a large scrollback limit with little output, then copy mode and
the file written by “hardcopy -h” will begin with many blank lines before the
first line of output.

The attached patch limits the scrollback buffer traversal to begin at the first
line of output, instead of the beginning of the scrollback buffer.

Also, code for moving to %age of buffer is changed to use float division so
that two different rep_cnt will not jump to the same location, except for
buffers less than 100 lines. Previously, the computed line number is rounded
down to the nearest 100th due to integer division.

Bug: 49377
2017-06-21 23:29:50 +02:00
Brian De Wolf
d23b14f971 update unicode wide tables
Bug: 50044
2017-06-21 22:52:11 +02:00
Amadeusz Sławiński
310d54ba75 small cleanups 2017-06-21 16:02:26 +02:00
Amadeusz Sławiński
d5d2476a35 remove dangling else 2017-06-20 12:36:10 +02:00
Amadeusz Sławiński
f1ec450fb0 reduce variable scope 2017-06-20 12:27:26 +02:00
Amadeusz Sławiński
c6ac2e4446 Panic() if we fail chown() on socket 2017-06-20 12:21:05 +02:00
Amadeusz Sławiński
d1dfd487bf Panic(), if we can't write to D_userfd 2017-06-19 22:50:42 +02:00
Amadeusz Sławiński
5ab379f727 make pow_detach_msg from screenrc actually work 2017-06-19 22:50:42 +02:00
Amadeusz Sławiński
e1363573da correct variable scope, and name better 2017-06-19 22:50:39 +02:00
Amadeusz Sławiński
5db5fe4511 enable PAM by default, print configuration on ./configure
also add BIG warning for people trying to build without it, basically
running screen as root may make sense on some embedded linux, where you
don't have users, but everyone else should use PAM

while at it improve ./configure output to show final configuration

Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-06-10 18:18:20 +02:00
Amadeusz Sławiński
c68a4731d4 fix crash when build without PAM support
apparently crypt and getspnam, don't need to be freed, as the buffer
gets reused by library, if we ever call them again...

Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
2017-05-30 23:27:06 +02:00
Neal Fultz
945ad54142 Adding status escape for window group 2017-05-30 22:23:03 +02:00
Christian Brauner
5f165d54d3 screen: do not stat("")
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-05-30 22:12:07 +02:00
Amadeusz Sławiński
d97d36e695 fix typo 2017-04-18 13:20:23 +02:00
Amadeusz Sławiński
5716ed40b2 use library sleep functions 2017-04-13 09:40:11 +02:00
Amadeusz Sławiński
ec9b396fce use str(n)dup instead of reinventing the wheel 2017-04-12 14:07:40 +02:00
Amadeusz Sławiński
a48e1f96dc fix restoring cursor position after leaving altscreen
When swapping to altscreen, also swap cursor position

Bug: 49883
2017-04-06 11:27:27 +02:00
Christian Brauner
565b8901ca screen: handle pts devices in different namespaces
Various programs that deal with namespaces will use pty devices that exist in
another namespace. One obvious candidate are containers. So far ttyname() was
incorrectly handling this case because the pts device stems from the host and
thus cannot be found amongst the current namespace's /dev/pts/<n> entries.
Serge Hallyn and I recently upstreamed patches to glibc that allow
ttyname{_r}() to correctly handle this case. At a minimum, ttyname{_r}() will
set errno to ENODEV in case it finds that the /dev/pts/<n> device that the
symlink points to exists in another namespace.

(The next comment is a little longer but tries to ensure that one can still
understand what is going on after some time has passed.)
In case we detect that ttyname{_r}() returns NULL and sets errno to ENODEV we
have ample reason to assume that the pts device exists in a different
namespace. In this case, the code will set a global flag indicating this case
to true. Furthermore, all operations (e.g. chmod(), chown(), etc.) will now
need to operate on the symbolic link /proc/self/fd/0 directly. While this
sounds straightforward, it becomes difficult to handle this case correctly when
we reattach to an already existing screen session from a different pts device
than the original one. Let's look at the general reattach logic a little
closer:

Assume we are running a shell that uses a pts device from a different
namespace:

	root@zest1:~# ls -al /proc/self/fd/
	total 0
	dr-x------ 2 root root  0 Apr  2 20:22 .
	dr-xr-xr-x 9 root root  0 Apr  2 20:22 ..
	lrwx------ 1 root root 64 Apr  2 20:22 0 -> /dev/pts/6
	lrwx------ 1 root root 64 Apr  2 20:22 1 -> /dev/pts/6
	lrwx------ 1 root root 64 Apr  2 20:22 2 -> /dev/pts/6
	l-wx------ 1 root root 64 Apr  2 20:22 3 -> pipe:[3067913]
	lr-x------ 1 root root 64 Apr  2 20:22 4 -> /proc/27413/fd
	lrwx------ 1 root root 64 Apr  2 20:22 9 -> socket:[32944]

	root@zest1:~# ls -al /dev/pts/
	total 0
	drwxr-xr-x 2 root root      0 Mar 30 17:55 .
	drwxr-xr-x 8 root root    580 Mar 30 17:55 ..
	crw--w---- 1 root tty  136, 0 Mar 30 17:55 0
	crw--w---- 1 root tty  136, 1 Mar 30 17:55 1
	crw--w---- 1 root tty  136, 2 Mar 30 17:55 2
	crw--w---- 1 root tty  136, 3 Mar 30 17:55 3
	crw--w---- 1 root tty  136, 4 Mar 30 17:55 4
	crw-rw-rw- 1 root root   5, 2 Apr  2 20:22 ptmx

(As one can see /dev/pts/6 does not exist in the current namespace.)
Now, start a screen session in this shell. In this case this patch will have
screen directly operate on /proc/self/fd/0.
Let's look at the attach case. When we attach to an existing screen session
where the associated pts device lives in another namespace we need a way to
uniquely identify the pts device that is used and also need a way to get a
valid fd when we need one. This patch solves this by ensuring that a valid file
descriptor to the pts device is sent via a unix socket and SCM_RIGHTS to the
socket and display handling part of screen. However, screen also sends around
the name of the associated pts device or, in the case where the pts device
exists in another namespace, the symlink /proc/self/fd/0. But after having sent
the fd this part of the codebase cannot simply operate on /proc/self/fd/0 since
it very likely refers to a different file. So we need to operate on
/proc/self/fd/<fd-sent-via-SCM_RIGHTS> but also need to ensure that we haven't
been tricked into operating on a tampered with file or device. So we cannot
simply sent /proc/self/fd/0 via the unix socket. Instead we read the contents
of the symbolic link /proc/self/fd/0 in the main function and sent it via the
unix socket. Then in the socket and display handling part of screen, we read
the contents of the /proc/self/fd/<fd-sent-via-SCM_RIGHTS> as well and compare
the pts device names. If they match we know that everything is well. However,
now we also need to update any tty handling code to directly operate on
/proc/self/fd/<fd-sent-via-SCM_RIGHTS>.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-04-06 10:19:16 +02:00